|
Line
Link Here
|
| 0 |
-- a/gcc/config/i386/i386.c |
0 |
++ b/gcc/config/i386/i386.c |
|
Lines 4724-4741
init_cumulative_args (CUMULATIVE_ARGS *cum, /* Argument info to initialize */
Link Here
|
| 4724 |
cum->nregs = ix86_regparm; |
4724 |
cum->nregs = ix86_regparm; |
| 4725 |
if (TARGET_64BIT) |
4725 |
if (TARGET_64BIT) |
| 4726 |
{ |
4726 |
{ |
| 4727 |
if (cum->call_abi != DEFAULT_ABI) |
4727 |
cum->nregs = (cum->call_abi == SYSV_ABI |
| 4728 |
cum->nregs = DEFAULT_ABI != SYSV_ABI ? X86_64_REGPARM_MAX |
4728 |
? X86_64_REGPARM_MAX |
| 4729 |
: X64_REGPARM_MAX; |
4729 |
: X64_REGPARM_MAX); |
| 4730 |
} |
4730 |
} |
| 4731 |
if (TARGET_SSE) |
4731 |
if (TARGET_SSE) |
| 4732 |
{ |
4732 |
{ |
| 4733 |
cum->sse_nregs = SSE_REGPARM_MAX; |
4733 |
cum->sse_nregs = SSE_REGPARM_MAX; |
| 4734 |
if (TARGET_64BIT) |
4734 |
if (TARGET_64BIT) |
| 4735 |
{ |
4735 |
{ |
| 4736 |
if (cum->call_abi != DEFAULT_ABI) |
4736 |
cum->sse_nregs = (cum->call_abi == SYSV_ABI |
| 4737 |
cum->sse_nregs = DEFAULT_ABI != SYSV_ABI ? X86_64_SSE_REGPARM_MAX |
4737 |
? X86_64_SSE_REGPARM_MAX |
| 4738 |
: X64_SSE_REGPARM_MAX; |
4738 |
: X64_SSE_REGPARM_MAX); |
| 4739 |
} |
4739 |
} |
| 4740 |
} |
4740 |
} |
| 4741 |
if (TARGET_MMX) |
4741 |
if (TARGET_MMX) |
|
Lines 5849-5858
function_arg_64 (CUMULATIVE_ARGS *cum, enum machine_mode mode,
Link Here
|
| 5849 |
if (mode == VOIDmode) |
5849 |
if (mode == VOIDmode) |
| 5850 |
return GEN_INT (cum->maybe_vaarg |
5850 |
return GEN_INT (cum->maybe_vaarg |
| 5851 |
? (cum->sse_nregs < 0 |
5851 |
? (cum->sse_nregs < 0 |
| 5852 |
? (cum->call_abi == DEFAULT_ABI |
5852 |
? X86_64_SSE_REGPARM_MAX |
| 5853 |
? SSE_REGPARM_MAX |
|
|
| 5854 |
: (DEFAULT_ABI != SYSV_ABI ? X86_64_SSE_REGPARM_MAX |
| 5855 |
: X64_SSE_REGPARM_MAX)) |
| 5856 |
: cum->sse_regno) |
5853 |
: cum->sse_regno) |
| 5857 |
: -1); |
5854 |
: -1); |
| 5858 |
|
5855 |
|
|
Lines 6552-6561
setup_incoming_varargs_64 (CUMULATIVE_ARGS *cum)
Link Here
|
| 6552 |
rtx nsse_reg; |
6549 |
rtx nsse_reg; |
| 6553 |
alias_set_type set; |
6550 |
alias_set_type set; |
| 6554 |
int i; |
6551 |
int i; |
| 6555 |
int regparm = ix86_regparm; |
|
|
| 6556 |
|
| 6557 |
if (cum->call_abi != DEFAULT_ABI) |
| 6558 |
regparm = DEFAULT_ABI != SYSV_ABI ? X86_64_REGPARM_MAX : X64_REGPARM_MAX; |
| 6559 |
|
6552 |
|
| 6560 |
/* GPR size of varargs save area. */ |
6553 |
/* GPR size of varargs save area. */ |
| 6561 |
if (cfun->va_list_gpr_size) |
6554 |
if (cfun->va_list_gpr_size) |
|
Lines 6577-6583
setup_incoming_varargs_64 (CUMULATIVE_ARGS *cum)
Link Here
|
| 6577 |
set = get_varargs_alias_set (); |
6570 |
set = get_varargs_alias_set (); |
| 6578 |
|
6571 |
|
| 6579 |
for (i = cum->regno; |
6572 |
for (i = cum->regno; |
| 6580 |
i < regparm |
6573 |
i < X86_64_REGPARM_MAX |
| 6581 |
&& i < cum->regno + cfun->va_list_gpr_size / UNITS_PER_WORD; |
6574 |
&& i < cum->regno + cfun->va_list_gpr_size / UNITS_PER_WORD; |
| 6582 |
i++) |
6575 |
i++) |
| 6583 |
{ |
6576 |
{ |
| 6584 |
-- /dev/null |
6577 |
++ b/gcc/testsuite/gcc.target/i386/pr43869.c |
|
Line 0
Link Here
|
|
|
1 |
/* { dg-do run } */ |
| 2 |
/* { dg-require-effective-target lp64 } */ |
| 3 |
|
| 4 |
int __attribute__((__noinline__)) |
| 5 |
bugged(float f1, float f2, float f3, float f4, |
| 6 |
float f5, float f6, float f7, float f8) |
| 7 |
{ |
| 8 |
return f1 || f2 || f3 || f4 || f5 != 1. || f6 != 1. || f7 != 1. || f8 != 1.; |
| 9 |
} |
| 10 |
|
| 11 |
int __attribute__((__noinline__, __ms_abi__)) isbugged(void) |
| 12 |
{ |
| 13 |
return bugged(0, 0, 0, 0, 1., 1., 1., 1.); |
| 14 |
} |
| 15 |
|
| 16 |
int main() |
| 17 |
{ |
| 18 |
return isbugged(); |
| 19 |
} |
| 20 |
|