This testcase: double test (double a, double b) { double x;
x = (a < b) ? a : 1.0; return x; } will ICE with '-O2 -mno-80387 -msse2': cmove.c: In function ātestā: cmove.c:6: error: unrecognizable insn: (insn 64 55 52 (parallel [ (set (reg:XF 9 st(1)) (reg:XF 8 st)) (set (reg:XF 8 st) (reg:XF 9 st(1))) ]) -1 (nil) (nil)) cmove.c:6: internal compiler error: in insn_default_length, at insn-attrtab.c:408 Please submit a full bug report, Without -msse2, there is no ICE, but code still uses FP regs. test: pushl %ebp movl %esp, %ebp subl $24, %esp fldl 16(%ebp) fstpl 8(%esp) fldl 8(%ebp) fstpl (%esp) call __ltdf2 fldl 8(%ebp) testl %eax, %eax jns .L8 leave ret .p2align 4,,7 .L8: fstp %st(0) leave fld1 .p2align 4,,2 ret -- Summary: ICE with -msse2 -mno-80387 Product: gcc Version: 4.0.0 Status: UNCONFIRMED Severity: normal Priority: P2 Component: target AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: uros at kss-loka dot si CC: gcc-bugs at gcc dot gnu dot org GCC build triplet: pentium4-pc-linux-gnu GCC host triplet: pentium4-pc-linux-gnu GCC target triplet: pentium4-pc-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19307