aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1992-12-16 19:23:52 -0500
committerRichard Kenner <kenner@gcc.gnu.org>1992-12-16 19:23:52 -0500
commit858b728c999c4197c08c82e00c4098546c7bc635 (patch)
tree180473f60a0fac73be6adc574edf0e2e8e3e14bd /gcc
parent58055e406c0accb1de58e5faed8b3b86cdffd758 (diff)
downloadgcc-858b728c999c4197c08c82e00c4098546c7bc635.zip
gcc-858b728c999c4197c08c82e00c4098546c7bc635.tar.gz
gcc-858b728c999c4197c08c82e00c4098546c7bc635.tar.bz2
(INITIALIZE_TRAMPOLINE): Get function address and toc pointer from
correct place relative to FNADDR. From-SVN: r2890
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/rs6000/rs6000.h18
1 files changed, 12 insertions, 6 deletions
diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
index ae8275f..e6ecd4c 100644
--- a/gcc/config/rs6000/rs6000.h
+++ b/gcc/config/rs6000/rs6000.h
@@ -851,14 +851,20 @@ struct rs6000_args {int words, fregno, nargs_prototype; };
#define INITIALIZE_TRAMPOLINE(ADDR, FNADDR, CXT) \
{ \
- emit_move_insn (gen_rtx (MEM, SImode, memory_address (SImode, ADDR)), \
- force_reg (SImode, FNADDR)); \
emit_move_insn (gen_rtx (MEM, SImode, \
- memory_address (SImode, plus_constant (ADDR, 4))), \
- gen_rtx (REG, SImode, 2)); \
+ memory_address (SImode, (ADDR))), \
+ gen_rtx (MEM, SImode, \
+ memory_address (SImode, (FNADDR)))); \
emit_move_insn (gen_rtx (MEM, SImode, \
- memory_address (SImode, plus_constant (ADDR, 8))), \
- force_reg (SImode, CXT)); \
+ memory_address (SImode, \
+ plus_constant ((ADDR), 4))), \
+ gen_rtx (MEM, SImode, \
+ memory_address (SImode, \
+ plus_constant ((FNADDR), 4)))); \
+ emit_move_insn (gen_rtx (MEM, SImode, \
+ memory_address (SImode, \
+ plus_constant ((ADDR), 8))), \
+ force_reg (SImode, (CXT))); \
}
/* Definitions for register eliminations.