This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [Patch, moxie] Clean up prologue and epilogue


On 07/01/2009 06:17 PM, Anthony Green wrote:
 (define_insn "movsi_pop"
-  [(set:SI (match_operand:SI 0 "register_operand" "=r")
-	(mem:SI (post_inc:SI (reg:SI 1))))]
+  [(set:SI (match_operand:SI 1 "register_operand" "=r")
+	(mem:SI (post_inc:SI (match_operand:SI 0 "register_operand" "r"))))]
   ""
-  "pop    $sp, %0")
+  "pop    %0, %1")

Operand ordering is non-standard; consider swapping the numbers.


-      insn = emit_move_insn (stack_pointer_rtx, reg);
-      RTX_FRAME_RELATED_P (insn) = 1;
-      add_reg_note (insn, REG_CFA_DEF_CFA,
-		    plus_constant (stack_pointer_rtx,
-				   cfun->machine->callee_saved_reg_size));
+      if (cfun->machine->callee_saved_reg_size <= 255)
+	{
+	  emit_move_insn (reg, hard_frame_pointer_rtx);
+	  emit_insn (gen_subsi3
+		     (reg, reg,
+		      GEN_INT (cfun->machine->callee_saved_reg_size)));
+	}
+      else
+	{
+	  emit_move_insn (reg,
+			  GEN_INT (-cfun->machine->callee_saved_reg_size));
+	  emit_insn (gen_addsi3 (reg, reg, hard_frame_pointer_rtx));
+	}
       for (regno = FIRST_PSEUDO_REGISTER; regno-- > 0; )

You lost all the epilogue unwind notes.



r~



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]