Define RETURN_ADDR_RTX
authorMichael Meissner <meissner@gcc.gnu.org>
Fri, 10 Feb 1995 16:06:02 +0000 (16:06 +0000)
committerMichael Meissner <meissner@gcc.gnu.org>
Fri, 10 Feb 1995 16:06:02 +0000 (16:06 +0000)
From-SVN: r8899

gcc/config/rs6000/rs6000.h

index d848450bb0fe2f9b75eff65bb55359bc9251bbb9..9c708159a0deb2ddb9bd0a8a169dfeb1f3b64c31 100644 (file)
@@ -1130,6 +1130,26 @@ struct rs6000_args {int words, fregno, nargs_prototype; };
                                           plus_constant ((ADDR), 8))), \
                  force_reg (SImode, (CXT)));                   \
 }
+\f
+/* Definitions for __builtin_return_address and __builtin_frame_address.  */
+/* __builtin_return_address (0) should give $lr, enable this. */
+/* This should be uncommented, so that the link register is used, but
+   currently this would result in unmatched insns and spilling fixed
+   registers so we'll leave it for another day.  When these problems are taken
+   care of one additional fetch will be necessary in RETURN_ADDR_RTX.  (mrs) */
+/* #define RETURN_ADDR_IN_PREVIOUS_FRAME */
+
+/* The current return address is in $lr (65).  The return address of anything
+   farther back is accessed normally at [[%fp]+8].  */
+#define RETURN_ADDR_RTX(count, frame)  \
+  ((count == -1)                       \
+   ? gen_rtx (REG, Pmode, 65)          \
+   : copy_to_reg (gen_rtx (MEM, Pmode, \
+                          memory_address (Pmode, \
+                                          plus_constant (copy_to_reg (gen_rtx (MEM, Pmode, \
+                                                                               memory_address (Pmode, frame))), \
+                                                         8)))))
+
 \f
 /* Definitions for register eliminations.