sparc.md (adddi3): If operands[2] is 4096 and operands[1] is constant...
* config/sparc/sparc.md (adddi3): If operands[2] is 4096 and operands[1] is constant, calculate the sum and generate movdi. (addsi3): Similarly. Use SImode in call to arith_4096_operand. (subsi3): Use SImode in call to arith_4096_operand. * gcc.c-torture/execute/20001031-1.c: New test. From-SVN: r37274
This commit is contained in:
parent
a0115140d0
commit
8b1c5fd025
@ -1,3 +1,10 @@
|
||||
2000-11-06 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* config/sparc/sparc.md (adddi3): If operands[2] is 4096 and
|
||||
operands[1] is constant, calculate the sum and generate movdi.
|
||||
(addsi3): Similarly. Use SImode in call to arith_4096_operand.
|
||||
(subsi3): Use SImode in call to arith_4096_operand.
|
||||
|
||||
2000-11-06 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* config/sparc/sparc.h (ASM_OUTPUT_MI_THUNK): On sparc64 we need to
|
||||
|
@ -5539,6 +5539,8 @@
|
||||
""
|
||||
"
|
||||
{
|
||||
HOST_WIDE_INT i;
|
||||
|
||||
if (! TARGET_ARCH64)
|
||||
{
|
||||
emit_insn (gen_rtx_PARALLEL (VOIDmode, gen_rtvec (2,
|
||||
@ -5551,9 +5553,17 @@
|
||||
}
|
||||
if (arith_double_4096_operand(operands[2], DImode))
|
||||
{
|
||||
emit_insn (gen_rtx_SET (VOIDmode, operands[0],
|
||||
gen_rtx_MINUS (DImode, operands[1],
|
||||
GEN_INT(-4096))));
|
||||
switch (GET_CODE (operands[1]))
|
||||
{
|
||||
case CONST_INT: i = INTVAL (operands[1]); break;
|
||||
case CONST_DOUBLE: i = CONST_DOUBLE_LOW (operands[1]); break;
|
||||
default:
|
||||
emit_insn (gen_rtx_SET (VOIDmode, operands[0],
|
||||
gen_rtx_MINUS (DImode, operands[1],
|
||||
GEN_INT(-4096))));
|
||||
DONE;
|
||||
}
|
||||
emit_insn (gen_movdi (operands[0], GEN_INT (i + 4096)));
|
||||
DONE;
|
||||
}
|
||||
}")
|
||||
@ -5768,11 +5778,15 @@
|
||||
""
|
||||
"
|
||||
{
|
||||
if (arith_4096_operand(operands[2], DImode))
|
||||
if (arith_4096_operand(operands[2], SImode))
|
||||
{
|
||||
emit_insn (gen_rtx_SET (VOIDmode, operands[0],
|
||||
gen_rtx_MINUS (SImode, operands[1],
|
||||
GEN_INT(-4096))));
|
||||
if (GET_CODE (operands[1]) == CONST_INT)
|
||||
emit_insn (gen_movsi (operands[0],
|
||||
GEN_INT (INTVAL (operands[1]) + 4096)));
|
||||
else
|
||||
emit_insn (gen_rtx_SET (VOIDmode, operands[0],
|
||||
gen_rtx_MINUS (SImode, operands[1],
|
||||
GEN_INT(-4096))));
|
||||
DONE;
|
||||
}
|
||||
}")
|
||||
@ -5967,7 +5981,7 @@
|
||||
""
|
||||
"
|
||||
{
|
||||
if (arith_4096_operand(operands[2], DImode))
|
||||
if (arith_4096_operand(operands[2], SImode))
|
||||
{
|
||||
emit_insn (gen_rtx_SET (VOIDmode, operands[0],
|
||||
gen_rtx_PLUS (SImode, operands[1],
|
||||
|
@ -1,3 +1,7 @@
|
||||
2000-11-06 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* gcc.c-torture/execute/20001031-1.c: New test.
|
||||
|
||||
2000-11-04 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
* g++.old-deja/g++.brendan/misc13.C: Put `strlen' in `std'
|
||||
|
37
gcc/testsuite/gcc.c-torture/execute/20001031-1.c
Normal file
37
gcc/testsuite/gcc.c-torture/execute/20001031-1.c
Normal file
@ -0,0 +1,37 @@
|
||||
extern void abort (void);
|
||||
extern void exit (int);
|
||||
|
||||
void t1 (int x)
|
||||
{
|
||||
if (x != 4100)
|
||||
abort ();
|
||||
}
|
||||
|
||||
int t2 (void)
|
||||
{
|
||||
int i;
|
||||
t1 ((i = 4096) + 4);
|
||||
return i;
|
||||
}
|
||||
|
||||
void t3 (long long x)
|
||||
{
|
||||
if (x != 0x80000fffULL)
|
||||
abort ();
|
||||
}
|
||||
|
||||
long long t4 (void)
|
||||
{
|
||||
long long i;
|
||||
t3 ((i = 4096) + 0x7fffffffULL);
|
||||
return i;
|
||||
}
|
||||
|
||||
main ()
|
||||
{
|
||||
if (t2 () != 4096)
|
||||
abort ();
|
||||
if (t4 () != 4096)
|
||||
abort ();
|
||||
exit (0);
|
||||
}
|
Loading…
Reference in New Issue
Block a user