Commit a8136932 by Jim Wilson

(output_block_move): When loading addresses into registers,

add checks for ABI_N32 and ABI_64.

From-SVN: r14267
parent b88c08b6
...@@ -2673,7 +2673,12 @@ output_block_move (insn, operands, num_regs, move_type) ...@@ -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 /* If we are given global or static addresses, and we would be
emitting a few instructions, try to save time by using a emitting a few instructions, try to save time by using a
temporary register for the pointer. */ 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)) if (CONSTANT_P (src_reg))
{ {
...@@ -2768,7 +2773,6 @@ output_block_move (insn, operands, num_regs, move_type) ...@@ -2768,7 +2773,6 @@ output_block_move (insn, operands, num_regs, move_type)
bytes -= 8; bytes -= 8;
} }
/* ??? Fails because of a MIPS assembler bug? */
else if (TARGET_64BIT && bytes >= 8) else if (TARGET_64BIT && bytes >= 8)
{ {
if (BYTES_BIG_ENDIAN) if (BYTES_BIG_ENDIAN)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment