aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1993-10-19 17:40:00 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1993-10-19 17:40:00 -0400
commitaf48348a34ddbb400bbbae2b8cd204cb2610cf78 (patch)
tree3f06939203ae06393bd1c2f833bfc0abc56e3464
parent7a69d725bf6f24c25f7d7e74a650a799ecb5b0fc (diff)
downloadgcc-af48348a34ddbb400bbbae2b8cd204cb2610cf78.zip
gcc-af48348a34ddbb400bbbae2b8cd204cb2610cf78.tar.gz
gcc-af48348a34ddbb400bbbae2b8cd204cb2610cf78.tar.bz2
Include reload.h
Include reload.h (arm_reload_out_hi): New function. (output_call): Don't look inside operands[0]. From-SVN: r5808
-rw-r--r--gcc/config/arm/arm.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index 8f77c77..f8bc52b 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -33,6 +33,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#include "output.h"
#include "insn-attr.h"
#include "flags.h"
+#include "reload.h"
/* The maximum number of insns skipped which will be conditionalised if
possible. */
@@ -762,6 +763,23 @@ gen_compare_reg (code, x, y, fp)
return cc_reg;
}
+arm_reload_out_hi (operands)
+rtx operands[];
+{
+ rtx base = find_replacement (&XEXP (operands[0], 0));
+
+ emit_insn (gen_rtx (SET, VOIDmode,
+ gen_rtx (MEM, QImode, base),
+ gen_rtx (SUBREG, QImode, operands[1], 0)));
+ emit_insn (gen_rtx (SET, VOIDmode, operands[2],
+ gen_rtx (LSHIFTRT, SImode,
+ gen_rtx (SUBREG, SImode, operands[1], 0),
+ GEN_INT (8))));
+ emit_insn (gen_rtx (SET, VOIDmode,
+ gen_rtx (MEM, QImode,
+ plus_constant (base, 1)),
+ gen_rtx (SUBREG, QImode, operands[2], 0)));
+}
/* Check to see if a branch is forwards or backwards. Return TRUE if it
is backwards. */
@@ -850,8 +868,6 @@ char *
output_call (operands)
rtx operands[];
{
- operands[0] = XEXP (operands[0], 0);
-
/* Handle calls to lr using ip (which may be clobbered in subr anyway). */
if (REGNO (operands[0]) == 14)