From: Michael Meissner Date: Fri, 10 Feb 1995 16:06:02 +0000 (+0000) Subject: Define RETURN_ADDR_RTX X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=8b236af9f9005ebde5dd0d0f5dc2a064626d4bb4;p=gcc.git Define RETURN_ADDR_RTX From-SVN: r8899 --- diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h index d848450bb0f..9c708159a0d 100644 --- a/gcc/config/rs6000/rs6000.h +++ b/gcc/config/rs6000/rs6000.h @@ -1130,6 +1130,26 @@ struct rs6000_args {int words, fregno, nargs_prototype; }; plus_constant ((ADDR), 8))), \ force_reg (SImode, (CXT))); \ } + +/* 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))))) + /* Definitions for register eliminations.