*** empty log message ***
From-SVN: r986
This commit is contained in:
parent
e16c591a11
commit
bc961ed7f4
@ -1048,6 +1048,47 @@ output_move_double (operands)
|
|||||||
|| (optype0 != REGOP && optype0 != CNSTOP && optype1 == REGOP
|
|| (optype0 != REGOP && optype0 != CNSTOP && optype1 == REGOP
|
||||||
&& (REGNO (operands[1]) & 1) == 0))
|
&& (REGNO (operands[1]) & 1) == 0))
|
||||||
{
|
{
|
||||||
|
/* Now that all misaligned double parms are copied
|
||||||
|
on function entry, we can assume any 64-bit object
|
||||||
|
is 64-bit aligned. */
|
||||||
|
#if 1
|
||||||
|
rtx addr;
|
||||||
|
rtx base, offset;
|
||||||
|
|
||||||
|
if (optype0 == REGOP)
|
||||||
|
addr = operands[1];
|
||||||
|
else
|
||||||
|
addr = operands[0];
|
||||||
|
|
||||||
|
/* See what register we use in the address. */
|
||||||
|
base = 0;
|
||||||
|
if (GET_CODE (XEXP (addr, 0)) == PLUS)
|
||||||
|
{
|
||||||
|
rtx temp = XEXP (addr, 0);
|
||||||
|
if (GET_CODE (XEXP (temp, 0)) == REG
|
||||||
|
&& GET_CODE (XEXP (temp, 1)) == CONST_INT)
|
||||||
|
base = XEXP (temp, 0), offset = XEXP (temp, 1);
|
||||||
|
}
|
||||||
|
else if (GET_CODE (XEXP (addr, 0)) == REG)
|
||||||
|
base = XEXP (addr, 0), offset = const0_rtx;
|
||||||
|
|
||||||
|
/* If it's the stack or frame pointer, check offset alignment.
|
||||||
|
We can have improper aligment in the function entry code. */
|
||||||
|
if (base
|
||||||
|
&& (REGNO (base) == FRAME_POINTER_REGNUM
|
||||||
|
|| REGNO (base) == STACK_POINTER_REGNUM))
|
||||||
|
{
|
||||||
|
if ((INTVAL (offset) & 0x7) == 0)
|
||||||
|
return (addr == operands[1] ? "ldd %1,%0" : "std %1,%0");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
/* Anything else, we know is properly aligned. */
|
||||||
|
return (addr == operands[1] ? "ldd %1,%0" : "std %1,%0");
|
||||||
|
#else
|
||||||
|
/* This old code is preserved in case we ever need
|
||||||
|
it for Fortran. It won't be complete right;
|
||||||
|
In Fortran, doubles can be just 32-bit aligned
|
||||||
|
even in global variables and arrays. */
|
||||||
rtx addr;
|
rtx addr;
|
||||||
rtx base, offset;
|
rtx base, offset;
|
||||||
|
|
||||||
@ -1098,6 +1139,7 @@ output_move_double (operands)
|
|||||||
|| MEM_IN_STRUCT_P (addr)
|
|| MEM_IN_STRUCT_P (addr)
|
||||||
|| TARGET_HOPE_ALIGN))
|
|| TARGET_HOPE_ALIGN))
|
||||||
return (addr == operands[1] ? "ldd %1,%0" : "std %1,%0");
|
return (addr == operands[1] ? "ldd %1,%0" : "std %1,%0");
|
||||||
|
#endif /* 0 */
|
||||||
}
|
}
|
||||||
|
|
||||||
if (optype0 == REGOP && optype1 == REGOP
|
if (optype0 == REGOP && optype1 == REGOP
|
||||||
|
Loading…
Reference in New Issue
Block a user