aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJim Wilson <wilson@gcc.gnu.org>1997-06-20 14:16:32 -0700
committerJim Wilson <wilson@gcc.gnu.org>1997-06-20 14:16:32 -0700
commita8136932ccc4b64e807b1ca476473b2a3a5545e9 (patch)
tree12b9b374ee2cf15c9177c28f2f39c98a3cd779e8 /gcc
parentb88c08b663d4447a41ce2c9cee318a20b952f905 (diff)
downloadgcc-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.c8
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)