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

Reply via email to