diff options
Diffstat (limited to 'gnu')
-rw-r--r-- | gnu/egcs/gcc/regmove.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/gnu/egcs/gcc/regmove.c b/gnu/egcs/gcc/regmove.c index b580f8665bd..6f5e1c0894a 100644 --- a/gnu/egcs/gcc/regmove.c +++ b/gnu/egcs/gcc/regmove.c @@ -708,6 +708,14 @@ optimize_reg_copy_3 (insn, dest, src) GET_MODE_BITSIZE (GET_MODE (src_reg)))) return; +#ifdef BROKEN_OPTIMIZE_REG_COPY_3_P + /* If we are on a big-endian target, do not expand to more than one + register. */ + if (BYTES_BIG_ENDIAN && + GET_MODE_BITSIZE (GET_MODE (src)) > BITS_PER_WORD) + return; +#endif + old_mode = GET_MODE (src_reg); PUT_MODE (src_reg, GET_MODE (src)); XEXP (src, 0) = SET_SRC (set); @@ -1127,14 +1135,12 @@ regmove_optimize (f, nregs, regmove_dump_file) if (! set) continue; -#ifndef BROKEN_OPTIMIZE_REG_COPY_3_P if (flag_expensive_optimizations && ! pass && (GET_CODE (SET_SRC (set)) == SIGN_EXTEND || GET_CODE (SET_SRC (set)) == ZERO_EXTEND) && GET_CODE (XEXP (SET_SRC (set), 0)) == REG && GET_CODE (SET_DEST(set)) == REG) optimize_reg_copy_3 (insn, SET_DEST (set), SET_SRC (set)); -#endif if (flag_expensive_optimizations && ! pass && GET_CODE (SET_SRC (set)) == REG |