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 |
|