mirror of
https://gcc.gnu.org/git/gcc.git
synced 2026-02-22 03:46:53 -05:00
re PR target/30634 (FAIL: gfortran.fortran-torture/execute/intrinsic_set_exponent.f90)
PR target/30634 * pa.md (movdf): For 64-bit target, fail if operand 1 is a non-zero CONST_DOUBLE and operand 0 is a hard register. (movdi): For 64-bit target, remove code to force CONST_DOUBLE to memory. Fail if operand 1 is a non-zero CONST_INT and operand 0 is a hard floating-point register. From-SVN: r121803
This commit is contained in:
committed by
John David Anglin
parent
4b2ab38cc6
commit
887ab8335d
@@ -1,3 +1,12 @@
|
||||
2007-02-10 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
|
||||
|
||||
PR target/30634
|
||||
* pa.md (movdf): For 64-bit target, fail if operand 1 is a non-zero
|
||||
CONST_DOUBLE and operand 0 is a hard register.
|
||||
(movdi): For 64-bit target, remove code to force CONST_DOUBLE to
|
||||
memory. Fail if operand 1 is a non-zero CONST_INT and operand 0
|
||||
is a hard floating-point register.
|
||||
|
||||
2007-02-06 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
PR target/29487
|
||||
|
||||
@@ -4098,8 +4098,18 @@
|
||||
""
|
||||
"
|
||||
{
|
||||
if (GET_CODE (operands[1]) == CONST_DOUBLE && TARGET_64BIT)
|
||||
operands[1] = force_const_mem (DFmode, operands[1]);
|
||||
if (TARGET_64BIT
|
||||
&& GET_CODE (operands[1]) == CONST_DOUBLE
|
||||
&& operands[1] != CONST0_RTX (DFmode))
|
||||
{
|
||||
/* We rely on reload to legitimize the insn generated after
|
||||
we force the CONST_DOUBLE to memory. This doesn't happen
|
||||
if OPERANDS[0] is a hard register. */
|
||||
if (REG_P (operands[0]) && HARD_REGISTER_P (operands[0]))
|
||||
FAIL;
|
||||
|
||||
operands[1] = force_const_mem (DFmode, operands[1]);
|
||||
}
|
||||
|
||||
if (emit_move_sequence (operands, DFmode, 0))
|
||||
DONE;
|
||||
@@ -4358,8 +4368,17 @@
|
||||
""
|
||||
"
|
||||
{
|
||||
if (GET_CODE (operands[1]) == CONST_DOUBLE && TARGET_64BIT)
|
||||
operands[1] = force_const_mem (DImode, operands[1]);
|
||||
/* Except for zero, we don't support loading a CONST_INT directly
|
||||
to a hard floating-point register since a scratch register is
|
||||
needed for the operation. While the operation could be handled
|
||||
before no_new_pseudos is true, the simplest solution is to fail. */
|
||||
if (TARGET_64BIT
|
||||
&& GET_CODE (operands[1]) == CONST_INT
|
||||
&& operands[1] != CONST0_RTX (DImode)
|
||||
&& REG_P (operands[0])
|
||||
&& HARD_REGISTER_P (operands[0])
|
||||
&& REGNO (operands[0]) >= 32)
|
||||
FAIL;
|
||||
|
||||
if (emit_move_sequence (operands, DImode, 0))
|
||||
DONE;
|
||||
|
||||
Reference in New Issue
Block a user