re PR target/30120 (silent miscompilation of argument passing)

PR target/30120
        * reg-stack.c (convert_regs_entry): Mark current argument passing
        registers as live.

        * config/i386/i386.h (X87_REGPARM_MAX): Set to 0 to disable passing
        of float arguments in x87 registers.

testsuite/ChangeLog:

        * gcc.target/i386/x87regparm-1.c: XFAIL.
        * gcc.target/i386/x87regparm-2.c: XFAIL.
        * gcc.target/i386/x87regparm-3.c: XFAIL.
        * gcc.target/i386/x87regparm-4.c: XFAIL.

From-SVN: r119663
This commit is contained in:
Uros Bizjak 2006-12-08 19:20:25 +01:00 committed by Uros Bizjak
parent 4efc447f98
commit 4280a3e362
8 changed files with 25 additions and 6 deletions

View File

@ -1,3 +1,12 @@
2006-12-08 Uros Bizjak <ubizjak@gmail.com>
PR target/30120
* reg-stack.c (convert_regs_entry): Mark current argument passing
registers as live.
* config/i386/i386.h (X87_REGPARM_MAX): Set to 0 to disable passing
of float arguments in x87 registers.
2006-12-08 John David Anglin <dave.anglin.@nrc-cnrc.gc.ca>
* pa.h (LEGITIMATE_CONSTANT_P): Simplify.

View File

@ -1778,7 +1778,9 @@ do { \
#define REGPARM_MAX (TARGET_64BIT ? 6 : 3)
#define X87_REGPARM_MAX 3
/* ??? Currently disabled, as reg-stack.c does not know how to
rearrange input registers if some arguments are left unused. */
#define X87_REGPARM_MAX 0
#define SSE_REGPARM_MAX (TARGET_64BIT ? 8 : (TARGET_SSE ? 3 : 0))

View File

@ -2595,7 +2595,8 @@ convert_regs_entry (void)
int reg, top = -1;
for (reg = LAST_STACK_REG; reg >= FIRST_STACK_REG; --reg)
if (TEST_HARD_REG_BIT (bi->stack_in.reg_set, reg))
if (TEST_HARD_REG_BIT (bi->stack_in.reg_set, reg)
|| TEST_HARD_REG_BIT (incoming_regs, reg))
{
rtx init;

View File

@ -1,3 +1,10 @@
2006-12-08 Uros Bizjak <ubizjak@gmail.com>
* gcc.target/i386/x87regparm-1.c: XFAIL.
* gcc.target/i386/x87regparm-2.c: XFAIL.
* gcc.target/i386/x87regparm-3.c: XFAIL.
* gcc.target/i386/x87regparm-4.c: XFAIL.
2006-12-08 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
* lib/target-supports.exp

View File

@ -19,4 +19,4 @@ void test()
/* Check that no memory is used to pass arguments. */
/* { dg-final { scan-assembler-not "\\(%esp\\)" } } */
/* { dg-final { scan-assembler-not "\\(%esp\\)" { xfail *-*-* } } } */

View File

@ -19,4 +19,4 @@ void test()
/* Check that no memory is used to pass arguments. */
/* { dg-final { scan-assembler-not "\\(%esp\\)" } } */
/* { dg-final { scan-assembler-not "\\(%esp\\)" { xfail *-*-* } } } */

View File

@ -19,4 +19,4 @@ void test()
/* Check that float and double arguments are passed through memory. */
/* { dg-final { scan-assembler-times "\\(%esp\\)" 4 } } */
/* { dg-final { scan-assembler-times "\\(%esp\\)" 4 { xfail *-*-* } } } */

View File

@ -19,4 +19,4 @@ void test()
/* Check that no memory is used to pass arguments. */
/* { dg-final { scan-assembler-not "\\(%esp\\)" } } */
/* { dg-final { scan-assembler-not "\\(%esp\\)" { xfail *-*-* } } } */