diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 38fe038e757718281354711d92255f870ccbb7b6..4a505caca60f831c393feb2986af0fc7295437c9 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -18,6 +18,10 @@
 	Remove unused variable cfa_offset.
 	* config/tilepro/tilepro.c (tilepro_expand_prologue): Likewise.
 
+	PR target/54639
+	* config/mn10300/mn10300.c (mn10300_expand_epilogue): Avoid offset
+	type promotion to unsigned.
+
 2013-02-26  Marek Polacek  <polacek@redhat.com>
 
 	PR tree-optimization/56426
diff --git a/gcc/config/mn10300/mn10300.c b/gcc/config/mn10300/mn10300.c
index a6c4b8eb0ff47e111e3d79a6d840af05493bb9a0..f490e2d8e21a4f0e1ca29727882781740f981ed9 100644
--- a/gcc/config/mn10300/mn10300.c
+++ b/gcc/config/mn10300/mn10300.c
@@ -1077,7 +1077,7 @@ mn10300_expand_epilogue (void)
 	      /* Insn: add size + 4 * num_regs_to_save
 				+ reg_save_bytes - 252,sp.  */
 	      this_strategy_size = SIZE_ADD_SP (size + 4 * num_regs_to_save
-						+ reg_save_bytes - 252);
+						+ (int) reg_save_bytes - 252);
 	      /* Insn: fmov (##,sp),fs#, fo each fs# to be restored.  */
 	      this_strategy_size += SIZE_FMOV_SP (252 - reg_save_bytes
 						  - 4 * num_regs_to_save,