[Bug c/38891] using ms_abi function attribute with -mno-sse generates an internal compiler error
xuepeng dot guo at intel dot com
gcc-bugzilla@gcc.gnu.org
Thu Feb 12 08:35:00 GMT 2009
------- Comment #2 from xuepeng dot guo at intel dot com 2009-02-12 08:35 -------
Confirmed at revision 144120. This is caused by macro
CONDITIONAL_REGISTER_USAGE at i386.h. At the first the code
if (! TARGET_SSE) \
{ \
int i; \
for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) \
if (TEST_HARD_REG_BIT (reg_class_contents[(int)SSE_REGS], i)) \
fixed_regs[i] = call_used_regs[i] = 1, reg_names[i] = ""; \
}
set fixed_regs[27], fixed_regs[28], call_used_regs[27], call_used_regs[28] to
1.
And then the code in the same macro
if (TARGET_64BIT \
&& ((cfun && cfun->machine->call_abi == MS_ABI) \
|| (!cfun && DEFAULT_ABI == MS_ABI))) \
{ \
int i; \
call_used_regs[4 /*RSI*/] = 0; \
call_used_regs[5 /*RDI*/] = 0; \
for (i = 0; i < 8; i++) \
call_used_regs[45+i] = 0; \
call_used_regs[27] = call_used_regs[28] = 0; \
}
set call_used_regs[27], call_used_regs[28] to 0.
This finally caused gcc_assert (!fixed_regs[i] || call_used_regs[i]).
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38891
More information about the Gcc-bugs
mailing list