gcc -v -O2 -c test.c === Cut === extension__ typedef unsigned long long int uint64_t; typedef unsigned target_ulong; register target_ulong T0 asm ("ebx"); register target_ulong T1 asm ("esi"); register target_ulong T2 asm ("edi"); typedef struct CPUX86State { uint64_t xmm_regs[8]; } CPUX86State;
save_raw_fp_state (CPUX86State * env) { int i; char *addr; for (i = 0; i < 8; i++) env->xmm_regs[i] = *(uint64_t *) (addr); } === Cut === GNU C (SUSE Linux) version 4.3.0 20080131 (experimental) [trunk revision 131976] (i586-suse-linux) compiled by GNU C version 4.3.0 20080131 (experimental) [trunk revision 131976], GMP version 4.2.2, MPFR version 2.3.1. GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 Compiler executable checksum: 86307befc2a0b2e7a5d9beb62be4b74e test.c: In function ‘save_raw_fp_state’: test.c:18: error: unable to find a register to spill in class ‘GENERAL_REGS’ test.c:18: error: this is the insn: (insn:HI 14 13 15 3 test.c:17 (set (mem/s:DI (plus:SI (mult:SI (reg/v:SI 64 [ i ]) (const_int 8 [0x8])) (reg/v/f:SI 66 [ env ])) [2 <variable>.xmm_regs S8 A8]) (reg:DI 67)) 63 {*movdi_2} (expr_list:REG_DEAD (reg:DI 67) (nil))) test.c:18: confused by earlier errors, bailing out -- Summary: [4.3 regression] unable to find a register to spill in class ‘GENERAL_REGS’ Product: gcc Version: 4.3.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: mueller at gcc dot gnu dot org GCC host triplet: i686-suse-linux http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35135