diff options
author | Jim Wilson <wilson@gcc.gnu.org> | 1997-06-20 14:16:32 -0700 |
---|---|---|
committer | Jim Wilson <wilson@gcc.gnu.org> | 1997-06-20 14:16:32 -0700 |
commit | a8136932ccc4b64e807b1ca476473b2a3a5545e9 (patch) | |
tree | 12b9b374ee2cf15c9177c28f2f39c98a3cd779e8 /gcc | |
parent | b88c08b663d4447a41ce2c9cee318a20b952f905 (diff) | |
download | gcc-a8136932ccc4b64e807b1ca476473b2a3a5545e9.zip gcc-a8136932ccc4b64e807b1ca476473b2a3a5545e9.tar.gz gcc-a8136932ccc4b64e807b1ca476473b2a3a5545e9.tar.bz2 |
(output_block_move): When loading addresses into registers,
add checks for ABI_N32 and ABI_64.
From-SVN: r14267
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/config/mips/mips.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c index fee0408..5b65ca1 100644 --- a/gcc/config/mips/mips.c +++ b/gcc/config/mips/mips.c @@ -2673,7 +2673,12 @@ output_block_move (insn, operands, num_regs, move_type) /* If we are given global or static addresses, and we would be emitting a few instructions, try to save time by using a temporary register for the pointer. */ - if (num_regs > 2 && (bytes > 2*align || move_type != BLOCK_MOVE_NORMAL)) + /* ??? The SGI Irix6 assembler fails when a SYMBOL_REF is used in + an ldl/ldr instruction pair. We play it safe, and always move + constant addresses into registers when generating N32/N64 code, just + in case we might emit an unaligned load instruction. */ + if (num_regs > 2 && (bytes > 2*align || move_type != BLOCK_MOVE_NORMAL + || mips_abi == ABI_N32 || mips_abi == ABI_64)) { if (CONSTANT_P (src_reg)) { @@ -2768,7 +2773,6 @@ output_block_move (insn, operands, num_regs, move_type) bytes -= 8; } - /* ??? Fails because of a MIPS assembler bug? */ else if (TARGET_64BIT && bytes >= 8) { if (BYTES_BIG_ENDIAN) |