2006-12-08 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
PR target/30039 * pa.md (high:DI and lo_sum:DI): Handle 64-bit CONST_INTs in 32-bit patterns. Correct length of high:DI instruction sequence.
This commit is contained in:
parent
9ee91471c3
commit
9b573944b4
15
gnu/dist/gcc4/gcc/config/pa/pa.md
vendored
15
gnu/dist/gcc4/gcc/config/pa/pa.md
vendored
@ -4215,6 +4215,7 @@
|
||||
switch (GET_CODE (op1))
|
||||
{
|
||||
case CONST_INT:
|
||||
#if HOST_BITS_PER_WIDE_INT <= 32
|
||||
operands[0] = operand_subword (op0, 1, 0, DImode);
|
||||
output_asm_insn (\"ldil L'%1,%0\", operands);
|
||||
|
||||
@ -4223,6 +4224,15 @@
|
||||
output_asm_insn (\"ldi -1,%0\", operands);
|
||||
else
|
||||
output_asm_insn (\"ldi 0,%0\", operands);
|
||||
#else
|
||||
operands[0] = operand_subword (op0, 1, 0, DImode);
|
||||
operands[1] = GEN_INT (INTVAL (op1) & 0xffffffff);
|
||||
output_asm_insn (\"ldil L'%1,%0\", operands);
|
||||
|
||||
operands[0] = operand_subword (op0, 0, 0, DImode);
|
||||
operands[1] = GEN_INT (INTVAL (op1) >> 32);
|
||||
output_asm_insn (singlemove_string (operands), operands);
|
||||
#endif
|
||||
break;
|
||||
|
||||
case CONST_DOUBLE:
|
||||
@ -4241,7 +4251,7 @@
|
||||
return \"\";
|
||||
}"
|
||||
[(set_attr "type" "move")
|
||||
(set_attr "length" "8")])
|
||||
(set_attr "length" "12")])
|
||||
|
||||
(define_insn ""
|
||||
[(set (match_operand:DI 0 "move_dest_operand"
|
||||
@ -4401,6 +4411,9 @@
|
||||
handle it correctly. */
|
||||
if (GET_CODE (operands[2]) == CONST_DOUBLE)
|
||||
operands[2] = GEN_INT (CONST_DOUBLE_LOW (operands[2]));
|
||||
else if (HOST_BITS_PER_WIDE_INT > 32
|
||||
&& GET_CODE (operands[2]) == CONST_INT)
|
||||
operands[2] = GEN_INT (INTVAL (operands[2]) & 0xffffffff);
|
||||
if (which_alternative == 1)
|
||||
output_asm_insn (\"copy %1,%0\", operands);
|
||||
return \"ldo R'%G2(%R1),%R0\";
|
||||
|
Loading…
Reference in New Issue
Block a user