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

Reply via email to