]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
spu.h (ARG_POINTER_CFA_OFFSET): Define.
authorUlrich Weigand <uweigand@de.ibm.com>
Thu, 21 Dec 2006 23:23:34 +0000 (23:23 +0000)
committerBen Elliston <bje@gcc.gnu.org>
Thu, 21 Dec 2006 23:23:34 +0000 (10:23 +1100)
* config/spu/spu.h (ARG_POINTER_CFA_OFFSET): Define.
* config/spu/spu.c (spu_expand_prologue): Set RTX_FRAME_RELATED_P
for insn setting up the frame pointer.  Do not set it for insns
setting up scratch registers or storing the backchain.

From-SVN: r120125

gcc/ChangeLog
gcc/config/spu/spu.c
gcc/config/spu/spu.h

index a967053b9ea8543240bde370ab05ab01273806c5..c0b2391de8c9e3e0fa0d13f197524f916add71e4 100644 (file)
@@ -1,3 +1,10 @@
+2006-12-22  Ulrich Weigand  <uweigand@de.ibm.com>
+
+       * config/spu/spu.h (ARG_POINTER_CFA_OFFSET): Define.
+       * config/spu/spu.c (spu_expand_prologue): Set RTX_FRAME_RELATED_P
+       for insn setting up the frame pointer.  Do not set it for insns
+       setting up scratch registers or storing the backchain.
+
 2006-12-21  Eric Botcazou  <ebotcazou@adacore.com>
 
        PR other/29639
index d4fefdd8d3f3d1e691fbb73d9abd071c559cea86..f7b2d080a366aaae36c711c31f860799987e1e96 100644 (file)
@@ -1629,21 +1629,18 @@ spu_expand_prologue (void)
        {
          /* In this case we save the back chain first. */
          insn = frame_emit_store (STACK_POINTER_REGNUM, sp_reg, -total_size);
-         RTX_FRAME_RELATED_P (insn) = 1;
          insn =
            frame_emit_add_imm (sp_reg, sp_reg, -total_size, scratch_reg_0);
        }
       else if (satisfies_constraint_K (GEN_INT (-total_size)))
        {
          insn = emit_move_insn (scratch_reg_0, sp_reg);
-         RTX_FRAME_RELATED_P (insn) = 1;
          insn =
            emit_insn (gen_addsi3 (sp_reg, sp_reg, GEN_INT (-total_size)));
        }
       else
        {
          insn = emit_move_insn (scratch_reg_0, sp_reg);
-         RTX_FRAME_RELATED_P (insn) = 1;
          insn =
            frame_emit_add_imm (sp_reg, sp_reg, -total_size, scratch_reg_1);
        }
@@ -1656,7 +1653,6 @@ spu_expand_prologue (void)
        {
          /* Save the back chain ptr */
          insn = frame_emit_store (REGNO (scratch_reg_0), sp_reg, 0);
-         RTX_FRAME_RELATED_P (insn) = 1;
        }
 
       if (frame_pointer_needed)
@@ -1665,7 +1661,12 @@ spu_expand_prologue (void)
          HOST_WIDE_INT fp_offset = STACK_POINTER_OFFSET
            + current_function_outgoing_args_size;
          /* Set the new frame_pointer */
-         frame_emit_add_imm (fp_reg, sp_reg, fp_offset, scratch_reg_0);
+         insn = frame_emit_add_imm (fp_reg, sp_reg, fp_offset, scratch_reg_0);
+         RTX_FRAME_RELATED_P (insn) = 1;
+         real = gen_addsi3 (fp_reg, sp_reg, GEN_INT (fp_offset));
+         REG_NOTES (insn) = 
+           gen_rtx_EXPR_LIST (REG_FRAME_RELATED_EXPR,
+                              real, REG_NOTES (insn));
        }
     }
 
index b403c46c0070ab94623b946a3d2eac9e46eb0b3b..74db2244e32f1e46a6ff38d5eba0d5283f2c2b9b 100644 (file)
@@ -265,6 +265,8 @@ targetm.resolve_overloaded_builtin = spu_resolve_overloaded_builtin;        \
 
 #define INCOMING_RETURN_ADDR_RTX gen_rtx_REG(Pmode, LINK_REGISTER_REGNUM)
 
+#define ARG_POINTER_CFA_OFFSET(FNDECL) (-STACK_POINTER_OFFSET)
+
 \f
 /* Stack Checking */