aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1993-05-15 12:16:47 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1993-05-15 12:16:47 -0400
commitfe33bfb3e0604634bfeb1b7c77bd495697054327 (patch)
treec8f9469e5092231dd46d80c38c4e3572da3568df /gcc
parentd6cca343c5bf09fe1b86369c28966c79389078b1 (diff)
downloadgcc-fe33bfb3e0604634bfeb1b7c77bd495697054327.zip
gcc-fe33bfb3e0604634bfeb1b7c77bd495697054327.tar.gz
gcc-fe33bfb3e0604634bfeb1b7c77bd495697054327.tar.bz2
(INITIALIZE_TRAMPOLINE): Don't make improper SUBREGs and ensure that
CXT and FNADDR are in registers. From-SVN: r4474
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/i860/i860.h18
1 files changed, 10 insertions, 8 deletions
diff --git a/gcc/config/i860/i860.h b/gcc/config/i860/i860.h
index 40bef3f..2305341 100644
--- a/gcc/config/i860/i860.h
+++ b/gcc/config/i860/i860.h
@@ -1,5 +1,5 @@
/* Definitions of target machine for GNU compiler, for Intel 860.
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ Copyright (C) 1989, 1991, 1993 Free Software Foundation, Inc.
Written by Richard Stallman (rms@ai.mit.edu).
@@ -639,18 +639,20 @@ struct cumulative_args { int ints, floats; };
#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \
{ \
- rtx low_cxt = expand_shift (RSHIFT_EXPR, SImode, CXT, \
- size_int (16), 0, 0); \
- rtx low_fn = expand_shift (RSHIFT_EXPR, SImode, FNADDR, \
+ rtx cxt = force_reg (Pmode, CXT); \
+ rtx fn = force_reg (Pmode, FNADDR); \
+ rtx hi_cxt = expand_shift (RSHIFT_EXPR, SImode, cxt, \
size_int (16), 0, 0); \
+ rtx hi_fn = expand_shift (RSHIFT_EXPR, SImode, fn, \
+ size_int (16), 0, 0); \
emit_move_insn (gen_rtx (MEM, HImode, plus_constant (TRAMP, 16)), \
- gen_rtx (SUBREG, HImode, CXT)); \
+ gen_lowpart (HImode, cxt)); \
emit_move_insn (gen_rtx (MEM, HImode, plus_constant (TRAMP, 4)), \
- gen_rtx (SUBREG, HImode, FNADDR)); \
+ gen_lowpart (HImode, fn)); \
emit_move_insn (gen_rtx (MEM, HImode, plus_constant (TRAMP, 8)), \
- gen_rtx (SUBREG, HImode, low_cxt)); \
+ gen_lowpart (HImode, hi_cxt)); \
emit_move_insn (gen_rtx (MEM, HImode, plus_constant (TRAMP, 0)), \
- gen_rtx (SUBREG, HImode, low_fn)); \
+ gen_lowpart (HImode, hi_fn)); \
}
/* Addressing modes, and classification of registers for them. */