diff options
author | Jeff Law <law@gcc.gnu.org> | 1998-04-04 06:32:39 -0700 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1998-04-04 06:32:39 -0700 |
commit | e5e809f4194e578b5fbd48fc5a1df2377f28d197 (patch) | |
tree | 6743f11e58bd7a933b08900d973d89026cd11c43 /gcc/config/arm | |
parent | 31031eddacda46a500b2390f52cd4474bcaf84ca (diff) | |
download | gcc-e5e809f4194e578b5fbd48fc5a1df2377f28d197.zip gcc-e5e809f4194e578b5fbd48fc5a1df2377f28d197.tar.gz gcc-e5e809f4194e578b5fbd48fc5a1df2377f28d197.tar.bz2 |
* Check in merge from gcc2. See ChangeLog.11 and ChangeLog.12
for details.
* haifa-sched.c: Mirror recent changes from gcc2.
From-SVN: r18984
Diffstat (limited to 'gcc/config/arm')
-rw-r--r-- | gcc/config/arm/arm.c | 18 | ||||
-rw-r--r-- | gcc/config/arm/arm.md | 2 | ||||
-rw-r--r-- | gcc/config/arm/t-semi | 2 |
3 files changed, 17 insertions, 5 deletions
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index 6a0f593..e8d5f84 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -1,5 +1,5 @@ /* Output routines for GCC for ARM/RISCiX. - Copyright (C) 1991, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. + Copyright (C) 1991, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc. Contributed by Pieter `Tiggr' Schoenmakers (rcpieter@win.tue.nl) and Martin Simmons (@harleqn.co.uk). More major hacks by Richard Earnshaw (rwe11@cl.cam.ac.uk) @@ -3271,6 +3271,16 @@ arm_reload_in_hi (operands) rtx base = find_replacement (&XEXP (operands[1], 0)); emit_insn (gen_zero_extendqisi2 (operands[2], gen_rtx (MEM, QImode, base))); + /* Handle the case where the address is too complex to be offset by 1. */ + if (GET_CODE (base) == MINUS + || (GET_CODE (base) == PLUS && GET_CODE (XEXP (base, 1)) != CONST_INT)) + { + rtx base_plus = gen_rtx (REG, SImode, REGNO (operands[0])); + + emit_insn (gen_rtx (SET, VOIDmode, base_plus, base)); + base = base_plus; + } + emit_insn (gen_zero_extendqisi2 (gen_rtx (SUBREG, SImode, operands[0], 0), gen_rtx (MEM, QImode, plus_constant (base, 1)))); @@ -3524,6 +3534,7 @@ find_barrier (from, max_count) { int count = 0; rtx found_barrier = 0; + rtx last = from; while (from && count < max_count) { @@ -3537,11 +3548,12 @@ find_barrier (from, max_count) && CONSTANT_POOL_ADDRESS_P (SET_SRC (PATTERN (from)))) { rtx src = SET_SRC (PATTERN (from)); - count += 2; + count += 8; } else count += get_attr_length (from); + last = from; from = NEXT_INSN (from); } @@ -3552,7 +3564,7 @@ find_barrier (from, max_count) rtx label = gen_label_rtx (); if (from) - from = PREV_INSN (from); + from = PREV_INSN (last); else from = get_last_insn (); diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md index ec70983..ee4a908 100644 --- a/gcc/config/arm/arm.md +++ b/gcc/config/arm/arm.md @@ -1,5 +1,5 @@ ;;- Machine description for Advanced RISC Machines' ARM for GNU compiler -;; Copyright (C) 1991, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. +;; Copyright (C) 1991, 93-97, 1998 Free Software Foundation, Inc. ;; Contributed by Pieter `Tiggr' Schoenmakers (rcpieter@win.tue.nl) ;; and Martin Simmons (@harleqn.co.uk). ;; More major hacks by Richard Earnshaw (rwe11@cl.cam.ac.uk) diff --git a/gcc/config/arm/t-semi b/gcc/config/arm/t-semi index 74fdef4..61c1c37 100644 --- a/gcc/config/arm/t-semi +++ b/gcc/config/arm/t-semi @@ -1,6 +1,6 @@ # Just for these, we omit the frame pointer since it makes such a big # difference. It is then pointless adding debugging. -LIBGCC2_CFLAGS=-O2 -fomit-frame-pointer $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) -g0 +LIBGCC2_CFLAGS=-O2 -fomit-frame-pointer $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) -g0 # Don't build enquire ENQUIRE= |