From cd2b3e6bf4637aaa94ca25ac51697738016ce363 Mon Sep 17 00:00:00 2001 From: Richard Kenner Date: Fri, 28 Jun 1996 14:06:52 -0400 Subject: [PATCH] (INITIALIZE_TRAMPOLINE): New definition. From-SVN: r12355 --- gcc/config/alpha/linux.h | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/gcc/config/alpha/linux.h b/gcc/config/alpha/linux.h index 9dfab6e37d5..8e3f9e6d171 100644 --- a/gcc/config/alpha/linux.h +++ b/gcc/config/alpha/linux.h @@ -70,3 +70,30 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #define TARGET_PROFILING_NEEDS_GP #undef ASM_FINAL_SPEC + +/* Emit RTL insns to initialize the variable parts of a trampoline. + FNADDR is an RTX for the address of the function's pure code. + CXT is an RTX for the static chain value for the function. + + This differs from the standard version in that: + + We do not initialize the "hint" field because it is not the case + that the target is in range of something on the stack. We save + a bogus branch-prediction cache line load by not setting "hint". + + Linux always has an executable stack -- no need for a system call. + */ + +#undef INITIALIZE_TRAMPOLINE +#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \ +{ \ + rtx _addr; \ + \ + _addr = memory_address (Pmode, plus_constant ((TRAMP), 16)); \ + emit_move_insn (gen_rtx (MEM, Pmode, _addr), (FNADDR)); \ + _addr = memory_address (Pmode, plus_constant ((TRAMP), 24)); \ + emit_move_insn (gen_rtx (MEM, Pmode, _addr), (CXT)); \ + \ + emit_insn (gen_rtx (UNSPEC_VOLATILE, VOIDmode, \ + gen_rtvec (1, const0_rtx), 0)); \ +} -- 2.30.2