------- Comment #7 from bonzini at gnu dot org 2009-08-01 22:57 ------- Hmm, Pentium is not a cmove target and it doesn't like sahf, so ix86_fp_comparison_operator matches all comparison operators. I would have thought then that fp_jcc_3_387 would match:
(define_insn "*fp_jcc_3_387" [(set (pc) (if_then_else (match_operator 0 "ix86_fp_comparison_operator" [(match_operand 1 "register_operand" "f") (match_operand 2 "nonimmediate_operand" "fm")]) (label_ref (match_operand 3 "" "")) (pc))) (clobber (reg:CCFP FPSR_REG)) (clobber (reg:CCFP FLAGS_REG)) (clobber (match_scratch:HI 4 "=a"))] "TARGET_80387 && (GET_MODE (operands[1]) == SFmode || GET_MODE (operands[1]) == DFmode) && GET_MODE (operands[1]) == GET_MODE (operands[2]) && SELECT_CC_MODE (GET_CODE (operands[0]), operands[1], operands[2]) == CCFPmode && !TARGET_CMOVE" "#") Maybe the instruction was optimized for size: enum ix86_fpcmp_strategy ix86_fp_comparison_strategy (enum rtx_code code ATTRIBUTE_UNUSED) { /* Do fcomi/sahf based test when profitable. */ ... if (TARGET_SAHF && (TARGET_USE_SAHF || optimize_insn_for_size_p ())) return IX86_FPCMP_SAHF; return IX86_FPCMP_ARITH; } -- bonzini at gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- Last reconfirmed|2009-08-01 22:04:31 |2009-08-01 22:57:49 date| | http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40934