diff options
Diffstat (limited to 'sys-devel/gcc/files/gcc-2.96.20000731/gcc-i386-arith2.patch')
-rw-r--r-- | sys-devel/gcc/files/gcc-2.96.20000731/gcc-i386-arith2.patch | 1663 |
1 files changed, 0 insertions, 1663 deletions
diff --git a/sys-devel/gcc/files/gcc-2.96.20000731/gcc-i386-arith2.patch b/sys-devel/gcc/files/gcc-2.96.20000731/gcc-i386-arith2.patch deleted file mode 100644 index 7249f5706b12..000000000000 --- a/sys-devel/gcc/files/gcc-2.96.20000731/gcc-i386-arith2.patch +++ /dev/null @@ -1,1663 +0,0 @@ ---- gcc/config/i386/i386.c Mon Oct 23 22:51:33 2000 -+++ gcc/config/i386/i386.c Fri Oct 27 17:41:12 2000 -@@ -1272,47 +1272,58 @@ no_comparison_operator (op, mode) - return 0; - } - } -- --/* Return 1 if OP is a comparison operator that can be issued by fcmov. */ -- -+/* Return 1 if OP is a valid comparison operator in valid mode. */ - int --fcmov_comparison_operator (op, mode) -- register rtx op; -- enum machine_mode mode; -+ix86_comparison_operator (op, mode) -+ register rtx op; -+ enum machine_mode mode; - { -+ enum machine_mode inmode; - if (mode != VOIDmode && GET_MODE (op) != mode) - return 0; -- - switch (GET_CODE (op)) - { - case EQ: case NE: -- case LEU: case LTU: case GEU: case GTU: -- case UNORDERED: case ORDERED: - return 1; -- -+ case LT: case GE: -+ inmode = GET_MODE (XEXP (op, 0)); -+ if (inmode == CCmode || inmode == CCGCmode -+ || inmode == CCGOCmode || inmode == CCNOmode) -+ return 1; -+ return 0; -+ case LTU: case GTU: case LEU: case ORDERED: case UNORDERED: case GEU: -+ inmode = GET_MODE (XEXP (op, 0)); -+ if (inmode == CCmode) -+ return 1; -+ return 0; -+ case GT: case LE: -+ inmode = GET_MODE (XEXP (op, 0)); -+ if (inmode == CCmode || inmode == CCGCmode || inmode == CCNOmode) -+ return 1; -+ return 0; - default: - return 0; - } - } - --/* Return 1 if OP is any normal comparison operator plus {UN}ORDERED. */ -+/* Return 1 if OP is a comparison operator that can be issued by fcmov. */ - --int --uno_comparison_operator (op, mode) -+int -+fcmov_comparison_operator (op, mode) - register rtx op; - enum machine_mode mode; - { -+ enum machine_mode inmode = GET_MODE (XEXP (op, 0)); - if (mode != VOIDmode && GET_MODE (op) != mode) - return 0; -- - switch (GET_CODE (op)) - { - case EQ: case NE: -- case LE: case LT: case GE: case GT: -- case LEU: case LTU: case GEU: case GTU: -- case UNORDERED: case ORDERED: - return 1; -- -+ case LTU: case GTU: case LEU: case ORDERED: case UNORDERED: case GEU: -+ if (inmode == CCmode) -+ return 1; -+ return 0; - default: - return 0; - } -@@ -3035,40 +3046,52 @@ put_condition_code (code, mode, reverse, - suffix = "ne"; - break; - case GT: -- if (mode == CCNOmode) -+ if (mode != CCmode && mode != CCNOmode && mode != CCGCmode) - abort (); - suffix = "g"; - break; - case GTU: - /* ??? Use "nbe" instead of "a" for fcmov losage on some assemblers. - Those same assemblers have the same but opposite losage on cmov. */ -+ if (mode != CCmode) -+ abort(); - suffix = fp ? "nbe" : "a"; - break; - case LT: -- if (mode == CCNOmode) -+ if (mode == CCNOmode || mode == CCGOCmode) - suffix = "s"; -- else -+ else if (mode == CCmode || mode == CCGCmode) - suffix = "l"; -+ else -+ abort(); - break; - case LTU: -+ if (mode != CCmode) -+ abort(); - suffix = "b"; - break; - case GE: -- if (mode == CCNOmode) -+ if (mode == CCNOmode || mode == CCGOCmode) - suffix = "ns"; -- else -+ else if (mode == CCmode || mode == CCGCmode) - suffix = "ge"; -+ else -+ abort(); - break; - case GEU: - /* ??? As above. */ -+ if (mode != CCmode) -+ abort(); - suffix = fp ? "nb" : "ae"; - break; - case LE: -- if (mode == CCNOmode) -+ if (mode != CCmode && mode != CCGCmode && mode != CCNOmode) - abort (); - suffix = "le"; - break; - case LEU: -+ if (mode != CCmode) -+ abort (); - suffix = "be"; - break; - case UNORDERED: -@@ -4454,15 +4477,27 @@ ix86_match_ccmode (insn, req_mode) - set = XVECEXP (set, 0, 0); - if (GET_CODE (set) != SET) - abort (); -+ if (GET_CODE (SET_SRC (set)) != COMPARE) -+ abort (); - - set_mode = GET_MODE (SET_DEST (set)); - switch (set_mode) - { -+ case CCNOmode: -+ if (req_mode != CCNOmode -+ && (req_mode != CCmode -+ || XEXP (SET_SRC (set), 1) != const0_rtx)) -+ return 0; -+ break; - case CCmode: -- if (req_mode == CCNOmode) -+ if (req_mode == CCGCmode) - return 0; - /* FALLTHRU */ -- case CCNOmode: -+ case CCGCmode: -+ if (req_mode == CCGOCmode || req_mode == CCNOmode) -+ return 0; -+ /* FALLTHRU */ -+ case CCGOCmode: - if (req_mode == CCZmode) - return 0; - /* FALLTHRU */ -@@ -4572,6 +4607,49 @@ ix86_fp_compare_mode (code) - return unordered ? CCFPUmode : CCFPmode; - } - -+enum machine_mode -+ix86_cc_mode (code, op0, op1) -+ enum rtx_code code; -+ rtx op0, op1; -+{ -+ if (GET_MODE_CLASS (GET_MODE (op0)) == MODE_FLOAT) -+ return ix86_fp_compare_mode (code); -+ switch (code) -+ { -+ /* Only zero flag is needed. */ -+ case EQ: /* ZF=0 */ -+ case NE: /* ZF!=0 */ -+ return CCZmode; -+ /* Codes needing carry flag. */ -+ case GEU: /* CF=0 */ -+ case GTU: /* CF=0 & ZF=0 */ -+ case LTU: /* CF=1 */ -+ case LEU: /* CF=1 | ZF=1 */ -+ return CCmode; -+ /* Codes possibly doable only with sign flag when -+ comparing against zero. */ -+ case GE: /* SF=OF or SF=0 */ -+ case LT: /* SF<>OF or SF=0 */ -+ if (op1 == const0_rtx) -+ return CCGOCmode; -+ else -+ /* For other cases Carry flag is not required. */ -+ return CCGCmode; -+ /* Codes doable only with sign flag when comparing -+ against zero, but we miss jump instruction for it -+ so we need to use relational tests agains overflow -+ that thus needs to be zero. */ -+ case GT: /* ZF=0 & SF=OF */ -+ case LE: /* ZF=1 | SF<>OF */ -+ if (op1 == const0_rtx) -+ return CCNOmode; -+ else -+ return CCGCmode; -+ default: -+ abort(); -+ } -+} -+ - /* Return true if we should use an FCOMI instruction for this fp comparison. */ - - int -@@ -4816,6 +4894,7 @@ ix86_expand_fp_compare (code, op0, op1, - emit_insn (gen_andqi_ext_0 (scratch, scratch, GEN_INT (0x45))); - emit_insn (gen_addqi_ext_1 (scratch, scratch, constm1_rtx)); - emit_insn (gen_cmpqi_ext_3 (scratch, GEN_INT (0x44))); -+ intcmp_mode = CCmode; - code = GEU; - break; - case UNLE: -@@ -5865,8 +5944,6 @@ ix86_expand_strlensi_unroll_1 (out, alig - rtx align_4_label = gen_label_rtx (); - rtx end_0_label = gen_label_rtx (); - rtx mem; -- rtx no_flags = gen_rtx_REG (CCNOmode, FLAGS_REG); -- rtx z_flags = gen_rtx_REG (CCNOmode, FLAGS_REG); - rtx tmpreg = gen_reg_rtx (SImode); - - align = 0; -@@ -5888,30 +5965,12 @@ ix86_expand_strlensi_unroll_1 (out, alig - align_rtx = expand_binop (SImode, and_optab, scratch, GEN_INT (3), - NULL_RTX, 0, OPTAB_WIDEN); - -- emit_insn (gen_cmpsi_ccz_1 (align_rtx, const0_rtx)); -- -- tmp = gen_rtx_EQ (VOIDmode, z_flags, const0_rtx); -- tmp = gen_rtx_IF_THEN_ELSE (VOIDmode, tmp, -- gen_rtx_LABEL_REF (VOIDmode, -- align_4_label), -- pc_rtx); -- emit_jump_insn (gen_rtx_SET (VOIDmode, pc_rtx, tmp)); -- -- emit_insn (gen_cmpsi_ccno_1 (align_rtx, GEN_INT (2))); -- -- tmp = gen_rtx_EQ (VOIDmode, no_flags, const0_rtx); -- tmp = gen_rtx_IF_THEN_ELSE (VOIDmode, tmp, -- gen_rtx_LABEL_REF (VOIDmode, -- align_2_label), -- pc_rtx); -- emit_jump_insn (gen_rtx_SET (VOIDmode, pc_rtx, tmp)); -- -- tmp = gen_rtx_GTU (VOIDmode, no_flags, const0_rtx); -- tmp = gen_rtx_IF_THEN_ELSE (VOIDmode, tmp, -- gen_rtx_LABEL_REF (VOIDmode, -- align_3_label), -- pc_rtx); -- emit_jump_insn (gen_rtx_SET (VOIDmode, pc_rtx, tmp)); -+ emit_cmp_and_jump_insns (align_rtx, const0_rtx, EQ, NULL, -+ SImode, 1, 0, align_4_label); -+ emit_cmp_and_jump_insns (align_rtx, GEN_INT (2), EQ, NULL, -+ SImode, 1, 0, align_2_label); -+ emit_cmp_and_jump_insns (align_rtx, GEN_INT (2), GTU, NULL, -+ SImode, 1, 0, align_3_label); - } - else - { -@@ -5921,14 +5980,8 @@ ix86_expand_strlensi_unroll_1 (out, alig - align_rtx = expand_binop (SImode, and_optab, scratch, GEN_INT (2), - NULL_RTX, 0, OPTAB_WIDEN); - -- emit_insn (gen_cmpsi_ccz_1 (align_rtx, const0_rtx)); -- -- tmp = gen_rtx_EQ (VOIDmode, z_flags, const0_rtx); -- tmp = gen_rtx_IF_THEN_ELSE (VOIDmode, tmp, -- gen_rtx_LABEL_REF (VOIDmode, -- align_4_label), -- pc_rtx); -- emit_jump_insn (gen_rtx_SET (VOIDmode, pc_rtx, tmp)); -+ emit_cmp_and_jump_insns (align_rtx, const0_rtx, EQ, NULL, -+ SImode, 1, 0, align_4_label); - } - - mem = gen_rtx_MEM (QImode, out); -@@ -5936,13 +5989,8 @@ ix86_expand_strlensi_unroll_1 (out, alig - /* Now compare the bytes. */ - - /* Compare the first n unaligned byte on a byte per byte basis. */ -- emit_insn (gen_cmpqi_ccz_1 (mem, const0_rtx)); -- -- tmp = gen_rtx_EQ (VOIDmode, z_flags, const0_rtx); -- tmp = gen_rtx_IF_THEN_ELSE (VOIDmode, tmp, -- gen_rtx_LABEL_REF (VOIDmode, end_0_label), -- pc_rtx); -- emit_jump_insn (gen_rtx_SET (VOIDmode, pc_rtx, tmp)); -+ emit_cmp_and_jump_insns (mem, const0_rtx, EQ, NULL, -+ QImode, 1, 0, end_0_label); - - /* Increment the address. */ - emit_insn (gen_addsi3 (out, out, const1_rtx)); -@@ -5952,27 +6000,16 @@ ix86_expand_strlensi_unroll_1 (out, alig - { - emit_label (align_2_label); - -- emit_insn (gen_cmpqi_ccz_1 (mem, const0_rtx)); -- -- tmp = gen_rtx_EQ (VOIDmode, z_flags, const0_rtx); -- tmp = gen_rtx_IF_THEN_ELSE (VOIDmode, tmp, -- gen_rtx_LABEL_REF (VOIDmode, -- end_0_label), -- pc_rtx); -- emit_jump_insn (gen_rtx_SET (VOIDmode, pc_rtx, tmp)); -+ emit_cmp_and_jump_insns (mem, const0_rtx, EQ, NULL, -+ QImode, 1, 0, end_0_label); - - emit_insn (gen_addsi3 (out, out, const1_rtx)); - - emit_label (align_3_label); - } - -- emit_insn (gen_cmpqi_ccz_1 (mem, const0_rtx)); -- -- tmp = gen_rtx_EQ (VOIDmode, z_flags, const0_rtx); -- tmp = gen_rtx_IF_THEN_ELSE (VOIDmode, tmp, -- gen_rtx_LABEL_REF (VOIDmode, end_0_label), -- pc_rtx); -- emit_jump_insn (gen_rtx_SET (VOIDmode, pc_rtx, tmp)); -+ emit_cmp_and_jump_insns (mem, const0_rtx, EQ, NULL, -+ QImode, 1, 0, end_0_label); - - emit_insn (gen_addsi3 (out, out, const1_rtx)); - } -@@ -5993,7 +6030,8 @@ ix86_expand_strlensi_unroll_1 (out, alig - emit_insn (gen_one_cmplsi2 (scratch, scratch)); - emit_insn (gen_andsi3 (tmpreg, tmpreg, scratch)); - emit_insn (gen_andsi3 (tmpreg, tmpreg, GEN_INT (0x80808080))); -- emit_cmp_and_jump_insns (tmpreg, const0_rtx, EQ, 0, SImode, 1, 0, align_4_label); -+ emit_cmp_and_jump_insns (tmpreg, const0_rtx, EQ, 0, -+ SImode, 1, 0, align_4_label); - - if (TARGET_CMOVE) - { ---- gcc/config/i386/i386.h Mon Oct 30 15:33:07 2000 -+++ gcc/config/i386/i386.h Mon Oct 30 16:28:01 2000 -@@ -2253,14 +2254,25 @@ while (0) - - For the i386, we need separate modes when floating-point - equality comparisons are being done. -- -- Add CCNO to indicate No Overflow, which is often also includes -- No Carry. This is typically used on the output of logicals, -- and is only valid in comparisons against zero. -+ -+ Add CCNO to indicate comparisons against zero that requires -+ No Overflow. Sign bit test is used instead and thus -+ can be used to form "a&b>0" type of tests. -+ -+ Add CCGC to indicate comparisons agains zero that allows -+ unspecified garbage in the Carry flag. This mode is used -+ by inc/dec instructions. -+ -+ Add CCGCO to indicate comparisons agains zero that allows -+ unspecified garbage in the Carry and Overflow flag. This -+ mode is used to simulate comparisons of (a-b) and (a+b) -+ against zero using sub/cmp/add operations. - - Add CCZ to indicate that only the Zero flag is valid. */ - - #define EXTRA_CC_MODES \ -+ CC(CCGCmode, "CCGC") \ -+ CC(CCGOCmode, "CCGOC") \ - CC(CCNOmode, "CCNO") \ - CC(CCZmode, "CCZ") \ - CC(CCFPmode, "CCFP") \ -@@ -2275,12 +2287,7 @@ while (0) - For integer comparisons against zero, reduce to CCNOmode or CCZmode if - possible, to allow for more combinations. */ - --#define SELECT_CC_MODE(OP,X,Y) \ -- (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT \ -- ? (OP) == EQ || (OP) == NE ? CCFPUmode : CCFPmode \ -- : (OP) == LE || (OP) == GT ? CCmode \ -- : (Y) != const0_rtx ? CCmode \ -- : (OP) == EQ || (OP) == NE ? CCZmode : CCNOmode) -+#define SELECT_CC_MODE(OP,X,Y) ix86_cc_mode (OP, X, Y) - - /* Control the assembler format that we output, to the extent - this does not vary between assemblers. */ -@@ -2588,8 +2595,8 @@ do { long l; \ - {"non_q_regs_operand", {SUBREG, REG}}, \ - {"no_comparison_operator", {EQ, NE, LT, GE, LTU, GTU, LEU, GEU}}, \ - {"fcmov_comparison_operator", {EQ, NE, LTU, GTU, LEU, GEU}}, \ -- {"uno_comparison_operator", {EQ, NE, LE, LT, GE, GT, LEU, LTU, GEU, \ -- GTU, UNORDERED, ORDERED}}, \ -+ {"ix86_comparison_operator", {EQ, NE, LE, LT, GE, GT, LEU, LTU, GEU, \ -+ GTU, UNORDERED, ORDERED}}, \ - {"cmp_fp_expander_operand", {CONST_DOUBLE, SUBREG, REG, MEM}}, \ - {"ext_register_operand", {SUBREG, REG}}, \ - {"binary_fp_operator", {PLUS, MINUS, MULT, DIV}}, \ ---- gcc/config/i386/i386.md Mon Oct 30 15:33:04 2000 -+++ gcc/config/i386/i386.md Mon Oct 30 16:23:52 2000 -@@ -71,6 +71,7 @@ - ;; 9 This is an `fnstsw' operation. - ;; 10 This is a `sahf' operation. - ;; 11 This is a `fstcw' operation -+;; 12 This is behaviour of add when setting carry flag. - ;; - ;; Insns whose names begin with "x86_" are emitted by gen_FOO calls - ;; from i386.c. -@@ -1043,11 +1044,11 @@ - DONE; - }") - --(define_insn "cmpsi_ccz_1" -- [(set (reg:CCZ 17) -- (compare:CCZ (match_operand:SI 0 "nonimmediate_operand" "r,?mr") -- (match_operand:SI 1 "const0_operand" "n,n")))] -- "" -+(define_insn "*cmpsi_ccno_1" -+ [(set (reg 17) -+ (compare (match_operand:SI 0 "nonimmediate_operand" "r,?mr") -+ (match_operand:SI 1 "const0_operand" "n,n")))] -+ "ix86_match_ccmode (insn, CCNOmode)" - "@ - test{l}\\t{%0, %0|%0, %0} - cmp{l}\\t{%1, %0|%0, %1}" -@@ -1055,28 +1056,34 @@ - (set_attr "length_immediate" "0,1") - (set_attr "mode" "SI")]) - --(define_insn "cmpsi_ccno_1" -- [(set (reg:CCNO 17) -- (compare:CCNO (match_operand:SI 0 "nonimmediate_operand" "r,?mr") -- (match_operand:SI 1 "const0_operand" "n,n")))] -- "" -- "@ -- test{l}\\t{%0, %0|%0, %0} -- cmp{l}\\t{%1, %0|%0, %1}" -- [(set_attr "type" "test,icmp") -- (set_attr "length_immediate" "0,1") -+(define_insn "*cmpsi_minus_1" -+ [(set (reg 17) -+ (compare (minus:SI (match_operand:SI 0 "nonimmediate_operand" "rm,r") -+ (match_operand:SI 1 "general_operand" "ri,mr")) -+ (const_int 0)))] -+ "ix86_match_ccmode (insn, CCGOCmode)" -+ "cmp{l}\\t{%1, %0|%0, %1}" -+ [(set_attr "type" "icmp") - (set_attr "mode" "SI")]) - --(define_insn "cmpsi_1" -+(define_expand "cmpsi_1" - [(set (reg:CC 17) - (compare:CC (match_operand:SI 0 "nonimmediate_operand" "rm,r") - (match_operand:SI 1 "general_operand" "ri,mr")))] -- "GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM" -+ "" -+ "") -+ -+(define_insn "*cmpsi_1_insn" -+ [(set (reg 17) -+ (compare (match_operand:SI 0 "nonimmediate_operand" "rm,r") -+ (match_operand:SI 1 "general_operand" "ri,mr")))] -+ "(GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM) -+ && ix86_match_ccmode (insn, CCmode)" - "cmp{l}\\t{%1, %0|%0, %1}" - [(set_attr "type" "icmp") - (set_attr "mode" "SI")]) - --(define_insn "*cmphi_0" -+(define_insn "*cmphi_ccno_1" - [(set (reg 17) - (compare (match_operand:HI 0 "nonimmediate_operand" "r,?mr") - (match_operand:HI 1 "const0_operand" "n,n")))] -@@ -1088,32 +1095,31 @@ - (set_attr "length_immediate" "0,1") - (set_attr "mode" "HI")]) - --(define_insn "*cmphi_1" -- [(set (reg:CC 17) -- (compare:CC (match_operand:HI 0 "nonimmediate_operand" "rm,r") -- (match_operand:HI 1 "general_operand" "ri,mr")))] -- "GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM" -+(define_insn "*cmphi_minus_1" -+ [(set (reg 17) -+ (compare (minus:HI (match_operand:HI 0 "nonimmediate_operand" "rm,r") -+ (match_operand:HI 1 "general_operand" "ri,mr")) -+ (const_int 0)))] -+ "ix86_match_ccmode (insn, CCGOCmode)" - "cmp{w}\\t{%1, %0|%0, %1}" - [(set_attr "type" "icmp") - (set_attr "mode" "HI")]) - --(define_insn "cmpqi_ccz_1" -- [(set (reg:CCZ 17) -- (compare:CCZ (match_operand:QI 0 "nonimmediate_operand" "q,?mq") -- (match_operand:QI 1 "const0_operand" "n,n")))] -- "" -- "@ -- test{b}\\t{%0, %0|%0, %0} -- cmp{b}\\t{$0, %0|%0, 0}" -- [(set_attr "type" "test,icmp") -- (set_attr "length_immediate" "0,1") -- (set_attr "mode" "QI")]) -+(define_insn "*cmphi_1" -+ [(set (reg 17) -+ (compare (match_operand:HI 0 "nonimmediate_operand" "rm,r") -+ (match_operand:HI 1 "general_operand" "ri,mr")))] -+ "(GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM) -+ && ix86_match_ccmode (insn, CCmode)" -+ "cmp{w}\\t{%1, %0|%0, %1}" -+ [(set_attr "type" "icmp") -+ (set_attr "mode" "HI")]) - - (define_insn "*cmpqi_ccno_1" -- [(set (reg:CCNO 17) -- (compare:CCNO (match_operand:QI 0 "nonimmediate_operand" "q,?mq") -- (match_operand:QI 1 "const0_operand" "n,n")))] -- "" -+ [(set (reg 17) -+ (compare (match_operand:QI 0 "nonimmediate_operand" "q,?mq") -+ (match_operand:QI 1 "const0_operand" "n,n")))] -+ "ix86_match_ccmode (insn, CCNOmode)" - "@ - test{b}\\t{%0, %0|%0, %0} - cmp{b}\\t{$0, %0|%0, 0}" -@@ -1122,24 +1128,35 @@ - (set_attr "mode" "QI")]) - - (define_insn "*cmpqi_1" -- [(set (reg:CC 17) -- (compare:CC (match_operand:QI 0 "nonimmediate_operand" "qm,q") -- (match_operand:QI 1 "general_operand" "qi,mq")))] -- "GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM" -+ [(set (reg 17) -+ (compare (match_operand:QI 0 "nonimmediate_operand" "qm,q") -+ (match_operand:QI 1 "general_operand" "qi,mq")))] -+ "(GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM) -+ && ix86_match_ccmode (insn, CCmode)" - "cmp{b}\\t{%1, %0|%0, %1}" - [(set_attr "type" "icmp") - (set_attr "mode" "QI")]) - -+(define_insn "*cmpqi_minus_1" -+ [(set (reg 17) -+ (compare (minus:QI (match_operand:QI 0 "nonimmediate_operand" "rm,r") -+ (match_operand:QI 1 "general_operand" "ri,mr")) -+ (const_int 0)))] -+ "ix86_match_ccmode (insn, CCGOCmode)" -+ "cmp{w}\\t{%1, %0|%0, %1}" -+ [(set_attr "type" "icmp") -+ (set_attr "mode" "QI")]) -+ - (define_insn "*cmpqi_ext_1" -- [(set (reg:CC 17) -- (compare:CC -+ [(set (reg 17) -+ (compare - (match_operand:QI 0 "general_operand" "qm") - (subreg:QI - (zero_extract:SI - (match_operand 1 "ext_register_operand" "q") - (const_int 8) - (const_int 8)) 0)))] -- "" -+ "ix86_match_ccmode (insn, CCmode)" - "cmp{b}\\t{%h1, %0|%0, %h1}" - [(set_attr "type" "icmp") - (set_attr "mode" "QI")]) -@@ -1159,7 +1176,7 @@ - (set_attr "length_immediate" "0") - (set_attr "mode" "QI")]) - --(define_insn "cmpqi_ext_3" -+(define_expand "cmpqi_ext_3" - [(set (reg:CC 17) - (compare:CC - (subreg:QI -@@ -1169,13 +1186,25 @@ - (const_int 8)) 0) - (match_operand:QI 1 "general_operand" "qmn")))] - "" -+ "") -+ -+(define_insn "cmpqi_ext_3_insn" -+ [(set (reg 17) -+ (compare -+ (subreg:QI -+ (zero_extract:SI -+ (match_operand 0 "ext_register_operand" "q") -+ (const_int 8) -+ (const_int 8)) 0) -+ (match_operand:QI 1 "general_operand" "qmn")))] -+ "ix86_match_ccmode (insn, CCmode)" - "cmp{b}\\t{%1, %h0|%h0, %1}" - [(set_attr "type" "icmp") - (set_attr "mode" "QI")]) - - (define_insn "*cmpqi_ext_4" -- [(set (reg:CC 17) -- (compare:CC -+ [(set (reg 17) -+ (compare - (subreg:QI - (zero_extract:SI - (match_operand 0 "ext_register_operand" "q") -@@ -1186,7 +1215,7 @@ - (match_operand 1 "ext_register_operand" "q") - (const_int 8) - (const_int 8)) 0)))] -- "" -+ "ix86_match_ccmode (insn, CCmode)" - "cmp{b}\\t{%h1, %h0|%h0, %h1}" - [(set_attr "type" "icmp") - (set_attr "mode" "QI")]) -@@ -3680,20 +3709,33 @@ - (match_operand:DI 2 "general_operand" ""))) - (clobber (reg:CC 17))] - "reload_completed" -- [(parallel [(set (reg:CC 17) (plus:CC (match_dup 1) (match_dup 2))) -+ [(parallel [(set (reg:CC 17) (unspec:CC [(match_dup 1) (match_dup 2)] 12)) - (set (match_dup 0) (plus:SI (match_dup 1) (match_dup 2)))]) - (parallel [(set (match_dup 3) -- (plus:SI (match_dup 4) -- (plus:SI (match_dup 5) -- (ltu:SI (reg:CC 17) (const_int 0))))) -+ (plus:SI (plus:SI (ltu:SI (reg:CC 17) (const_int 0)) -+ (match_dup 4)) -+ (match_dup 5))) - (clobber (reg:CC 17))])] - "split_di (operands+0, 1, operands+0, operands+3); - split_di (operands+1, 1, operands+1, operands+4); - split_di (operands+2, 1, operands+2, operands+5);") - -+(define_insn "*addsi3_carry" -+ [(set (match_operand:SI 0 "nonimmediate_operand" "=rm,r") -+ (plus:SI (plus:SI (ltu:SI (reg:CC 17) (const_int 0)) -+ (match_operand:SI 1 "nonimmediate_operand" "%0,0")) -+ (match_operand:SI 2 "general_operand" "ri,rm"))) -+ (clobber (reg:CC 17))] -+ "ix86_binary_operator_ok (PLUS, SImode, operands)" -+ "adc{l}\\t{%2, %0|%0, %2}" -+ [(set_attr "type" "alu") -+ (set_attr "pent_pair" "pu") -+ (set_attr "mode" "SI") -+ (set_attr "ppro_uops" "few")]) -+ - (define_insn "*addsi3_cc" -- [(set (reg:CC 17) (plus:CC (match_operand:SI 1 "nonimmediate_operand" "%0,0") -- (match_operand:SI 2 "general_operand" "ri,rm"))) -+ [(set (reg:CC 17) (unspec:CC [(match_operand:SI 1 "nonimmediate_operand" "%0,0") -+ (match_operand:SI 2 "general_operand" "ri,rm")] 12)) - (set (match_operand:SI 0 "nonimmediate_operand" "=rm,r") - (plus:SI (match_dup 1) (match_dup 2)))] - "ix86_binary_operator_ok (PLUS, SImode, operands)" -@@ -3702,8 +3744,8 @@ - (set_attr "mode" "SI")]) - - (define_insn "addqi3_cc" -- [(set (reg:CC 17) (plus:CC (match_operand:QI 1 "nonimmediate_operand" "%0,0") -- (match_operand:QI 2 "general_operand" "qi,qm"))) -+ [(set (reg:CC 17) (unspec:CC [(match_operand:QI 1 "nonimmediate_operand" "%0,0") -+ (match_operand:QI 2 "general_operand" "qi,qm")] 12)) - (set (match_operand:QI 0 "nonimmediate_operand" "=qm,q") - (plus:QI (match_dup 1) (match_dup 2)))] - "ix86_binary_operator_ok (PLUS, QImode, operands)" -@@ -3711,19 +3753,6 @@ - [(set_attr "type" "alu") - (set_attr "mode" "QI")]) - --(define_insn "*addsi3_carry" -- [(set (match_operand:SI 0 "nonimmediate_operand" "=rm,r") -- (plus:SI (match_operand:SI 1 "nonimmediate_operand" "%0,0") -- (plus:SI (match_operand:SI 2 "general_operand" "ri,rm") -- (ltu:SI (reg:CC 17) (const_int 0))))) -- (clobber (reg:CC 17))] -- "ix86_binary_operator_ok (PLUS, SImode, operands)" -- "adc{l}\\t{%2, %0|%0, %2}" -- [(set_attr "type" "alu") -- (set_attr "pent_pair" "pu") -- (set_attr "mode" "SI") -- (set_attr "ppro_uops" "few")]) -- - (define_expand "addsi3" - [(parallel [(set (match_operand:SI 0 "nonimmediate_operand" "") - (plus:SI (match_operand:SI 1 "nonimmediate_operand" "") -@@ -3925,7 +3954,7 @@ - (const_int 0))) - (set (match_operand:SI 0 "nonimmediate_operand" "=r,rm") - (plus:SI (match_dup 1) (match_dup 2)))] -- "ix86_match_ccmode (insn, CCNOmode) -+ "ix86_match_ccmode (insn, CCGOCmode) - && ix86_binary_operator_ok (PLUS, SImode, operands) - /* Current assemblers are broken and do not allow @GOTOFF in - ought but a memory context. */ -@@ -3971,7 +4000,7 @@ - (compare (neg:SI (match_operand:SI 2 "general_operand" "rmni")) - (match_operand:SI 1 "nonimmediate_operand" "%0"))) - (clobber (match_scratch:SI 0 "=r"))] -- "ix86_match_ccmode (insn, CCNOmode) -+ "ix86_match_ccmode (insn, CCZmode) - && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM) - /* Current assemblers are broken and do not allow @GOTOFF in - ought but a memory context. */ -@@ -4012,31 +4041,98 @@ - (const_string "alu"))) - (set_attr "mode" "SI")]) - -+; For comparisons agains 1, -1 and 128, we may generate better code -+; by converting cmp to add, inc or dec as done by peephole2. This pattern -+; is matched then. We can't accept general immediate, because for -+; case of overflows, the result is messed up. -+; This pattern also don't hold of 0x80000000, since the value overflows -+; when negated. -+; Also carry flag is reversed compared to cmp, so this converison is valid -+; only for comparisons not depending on it. - (define_insn "*addsi_4" -- [(set (reg:CC 17) -- (compare:CC (neg:SI (match_operand:SI 2 "general_operand" "rmni,rni")) -- (match_operand:SI 1 "nonimmediate_operand" "%0,0"))) -- (set (match_operand:SI 0 "nonimmediate_operand" "=r,rm") -- (plus:SI (match_dup 1) (match_dup 2)))] -- "ix86_binary_operator_ok (PLUS, SImode, operands) -- /* Current assemblers are broken and do not allow @GOTOFF in -- ought but a memory context. */ -- && ! pic_symbolic_operand (operands[2], VOIDmode)" -- "add{l}\\t{%2, %0|%0, %2}" -- [(set_attr "type" "alu") -+ [(set (reg 17) -+ (compare (match_operand:SI 1 "nonimmediate_operand" "0") -+ (match_operand:SI 2 "const_int_operand" "n"))) -+ (clobber (match_scratch:SI 0 "=rm"))] -+ "ix86_match_ccmode (insn, CCGCmode) -+ && (INTVAL (operands[2]) & 0xffffffff) != 0x80000000" -+ "* -+{ -+ switch (get_attr_type (insn)) -+ { -+ case TYPE_INCDEC: -+ if (operands[2] == constm1_rtx) -+ return \"inc{l}\\t%0\"; -+ else if (operands[2] == const1_rtx) -+ return \"dec{l}\\t%0\"; -+ else -+ abort(); -+ -+ default: -+ if (! rtx_equal_p (operands[0], operands[1])) -+ abort (); -+ /* Make things pretty and `subl $4,%eax' rather than `addl $-4, %eax'. -+ Exceptions: -128 encodes smaller than 128, so swap sign and op. */ -+ if ((INTVAL (operands[2]) == -128 -+ || (INTVAL (operands[2]) > 0 -+ && INTVAL (operands[2]) != 128))) -+ return \"sub{l}\\t{%2, %0|%0, %2}\"; -+ operands[2] = GEN_INT (-INTVAL (operands[2])); -+ return \"add{l}\\t{%2, %0|%0, %2}\"; -+ } -+}" -+ [(set (attr "type") -+ (if_then_else (match_operand:SI 2 "incdec_operand" "") -+ (const_string "incdec") -+ (const_string "alu"))) - (set_attr "mode" "SI")]) - - (define_insn "*addsi_5" -- [(set (reg:CC 17) -- (compare:CC (neg:SI (match_operand:SI 2 "general_operand" "rmni")) -- (match_operand:SI 1 "nonimmediate_operand" "%0"))) -+ [(set (reg 17) -+ (compare -+ (plus:SI (match_operand:SI 1 "nonimmediate_operand" "%0") -+ (match_operand:SI 2 "general_operand" "rmni")) -+ (const_int 0))) - (clobber (match_scratch:SI 0 "=r"))] -- "(GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM) -+ "ix86_match_ccmode (insn, CCGOCmode) -+ && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM) - /* Current assemblers are broken and do not allow @GOTOFF in - ought but a memory context. */ - && ! pic_symbolic_operand (operands[2], VOIDmode)" -- "add{l}\\t{%2, %0|%0, %2}" -- [(set_attr "type" "alu") -+ "* -+{ -+ switch (get_attr_type (insn)) -+ { -+ case TYPE_INCDEC: -+ if (! rtx_equal_p (operands[0], operands[1])) -+ abort (); -+ if (operands[2] == const1_rtx) -+ return \"inc{l}\\t%0\"; -+ else if (operands[2] == constm1_rtx) -+ return \"dec{l}\\t%0\"; -+ else -+ abort(); -+ -+ default: -+ if (! rtx_equal_p (operands[0], operands[1])) -+ abort (); -+ /* Make things pretty and `subl $4,%eax' rather than `addl $-4, %eax'. -+ Exceptions: -128 encodes smaller than 128, so swap sign and op. */ -+ if (GET_CODE (operands[2]) == CONST_INT -+ && (INTVAL (operands[2]) == 128 -+ || (INTVAL (operands[2]) < 0 -+ && INTVAL (operands[2]) != -128))) -+ { -+ operands[2] = GEN_INT (-INTVAL (operands[2])); -+ return \"sub{l}\\t{%2, %0|%0, %2}\"; -+ } -+ return \"add{l}\\t{%2, %0|%0, %2}\"; -+ } -+}" -+ [(set (attr "type") -+ (if_then_else (match_operand:SI 2 "incdec_operand" "") -+ (const_string "incdec") -+ (const_string "alu"))) - (set_attr "mode" "SI")]) - - (define_expand "addhi3" -@@ -4143,7 +4239,7 @@ - (const_int 0))) - (set (match_operand:HI 0 "nonimmediate_operand" "=r,rm") - (plus:HI (match_dup 1) (match_dup 2)))] -- "ix86_match_ccmode (insn, CCNOmode) -+ "ix86_match_ccmode (insn, CCGOCmode) - && ix86_binary_operator_ok (PLUS, HImode, operands)" - "* - { -@@ -4183,7 +4279,7 @@ - (compare (neg:HI (match_operand:HI 2 "general_operand" "rmni")) - (match_operand:HI 1 "nonimmediate_operand" "%0"))) - (clobber (match_scratch:HI 0 "=r"))] -- "ix86_match_ccmode (insn, CCNOmode) -+ "ix86_match_ccmode (insn, CCZmode) - && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" - "* - { -@@ -4218,25 +4314,88 @@ - (const_string "alu"))) - (set_attr "mode" "HI")]) - -+; See comments above addsi_3_imm for details. - (define_insn "*addhi_4" -- [(set (reg:CC 17) -- (compare:CC (neg:HI (match_operand:HI 2 "general_operand" "rmni,rni")) -- (match_operand:HI 1 "nonimmediate_operand" "%0,0"))) -- (set (match_operand:HI 0 "nonimmediate_operand" "=r,rm") -- (plus:HI (match_dup 1) (match_dup 2)))] -- "ix86_binary_operator_ok (PLUS, HImode, operands)" -- "add{w}\\t{%2, %0|%0, %2}" -- [(set_attr "type" "alu") -- (set_attr "mode" "HI")]) -+ [(set (reg 17) -+ (compare (match_operand:HI 1 "nonimmediate_operand" "0") -+ (match_operand:HI 2 "const_int_operand" "n"))) -+ (clobber (match_scratch:HI 0 "=rm"))] -+ "ix86_match_ccmode (insn, CCGCmode) -+ && (INTVAL (operands[2]) & 0xffff) != 0x8000" -+ "* -+{ -+ switch (get_attr_type (insn)) -+ { -+ case TYPE_INCDEC: -+ if (operands[2] == constm1_rtx -+ || (GET_CODE (operands[2]) == CONST_INT -+ && INTVAL (operands[2]) == 65535)) -+ return \"inc{w}\\t%0\"; -+ else if (operands[2] == const1_rtx) -+ return \"dec{w}\\t%0\"; -+ else -+ abort(); -+ -+ default: -+ if (! rtx_equal_p (operands[0], operands[1])) -+ abort (); -+ /* Make things pretty and `subl $4,%eax' rather than `addl $-4, %eax'. -+ Exceptions: -128 encodes smaller than 128, so swap sign and op. */ -+ if ((INTVAL (operands[2]) == -128 -+ || (INTVAL (operands[2]) > 0 -+ && INTVAL (operands[2]) != 128))) -+ return \"sub{w}\\t{%2, %0|%0, %2}\"; -+ operands[2] = GEN_INT (-INTVAL (operands[2])); -+ return \"add{w}\\t{%2, %0|%0, %2}\"; -+ } -+}" -+ [(set (attr "type") -+ (if_then_else (match_operand:HI 2 "incdec_operand" "") -+ (const_string "incdec") -+ (const_string "alu"))) -+ (set_attr "mode" "SI")]) -+ - - (define_insn "*addhi_5" -- [(set (reg:CC 17) -- (compare:CC (neg:HI (match_operand:HI 2 "general_operand" "rmni")) -- (match_operand:HI 1 "nonimmediate_operand" "%0"))) -+ [(set (reg 17) -+ (compare -+ (plus:HI (match_operand:HI 1 "nonimmediate_operand" "%0") -+ (match_operand:HI 2 "general_operand" "rmni")) -+ (const_int 0))) - (clobber (match_scratch:HI 0 "=r"))] -- "(GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" -- "add{w}\\t{%2, %0|%0, %2}" -- [(set_attr "type" "alu") -+ "ix86_match_ccmode (insn, CCGOCmode) -+ && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" -+ "* -+{ -+ switch (get_attr_type (insn)) -+ { -+ case TYPE_INCDEC: -+ if (operands[2] == const1_rtx) -+ return \"inc{w}\\t%0\"; -+ else if (operands[2] == constm1_rtx -+ || (GET_CODE (operands[2]) == CONST_INT -+ && INTVAL (operands[2]) == 65535)) -+ return \"dec{w}\\t%0\"; -+ abort(); -+ -+ default: -+ /* Make things pretty and `subl $4,%eax' rather than `addl $-4, %eax'. -+ Exceptions: -128 encodes smaller than 128, so swap sign and op. */ -+ if (GET_CODE (operands[2]) == CONST_INT -+ && (INTVAL (operands[2]) == 128 -+ || (INTVAL (operands[2]) < 0 -+ && INTVAL (operands[2]) != -128))) -+ { -+ operands[2] = GEN_INT (-INTVAL (operands[2])); -+ return \"sub{w}\\t{%2, %0|%0, %2}\"; -+ } -+ return \"add{w}\\t{%2, %0|%0, %2}\"; -+ } -+}" -+ [(set (attr "type") -+ (if_then_else (match_operand:HI 2 "incdec_operand" "") -+ (const_string "incdec") -+ (const_string "alu"))) - (set_attr "mode" "HI")]) - - (define_expand "addqi3" -@@ -4354,7 +4513,7 @@ - (const_int 0))) - (set (match_operand:QI 0 "nonimmediate_operand" "=q,qm") - (plus:QI (match_dup 1) (match_dup 2)))] -- "ix86_match_ccmode (insn, CCNOmode) -+ "ix86_match_ccmode (insn, CCGOCmode) - && ix86_binary_operator_ok (PLUS, QImode, operands)" - "* - { -@@ -4390,8 +4549,8 @@ - [(set (reg 17) - (compare (neg:QI (match_operand:QI 2 "general_operand" "qmni")) - (match_operand:QI 1 "nonimmediate_operand" "%0"))) -- (clobber (match_scratch:QI 0 "=r"))] -- "ix86_match_ccmode (insn, CCNOmode) -+ (clobber (match_scratch:QI 0 "=q"))] -+ "ix86_match_ccmode (insn, CCZmode) - && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" - "* - { -@@ -4423,25 +4582,82 @@ - (const_string "alu"))) - (set_attr "mode" "QI")]) - -+; See comments above addsi_3_imm for details. - (define_insn "*addqi_4" -- [(set (reg:CC 17) -- (compare:CC (neg:QI (match_operand:QI 2 "general_operand" "qmni,qni")) -- (match_operand:QI 1 "nonimmediate_operand" "%0,0"))) -- (set (match_operand:QI 0 "nonimmediate_operand" "=q,qm") -- (plus:QI (match_dup 1) (match_dup 2)))] -- "ix86_binary_operator_ok (PLUS, QImode, operands)" -- "add{b}\\t{%2, %0|%0, %2}" -- [(set_attr "type" "alu") -+ [(set (reg 17) -+ (compare (match_operand:QI 1 "nonimmediate_operand" "0") -+ (match_operand:QI 2 "const_int_operand" "n"))) -+ (clobber (match_scratch:QI 0 "=qm"))] -+ "ix86_match_ccmode (insn, CCGCmode) -+ && (INTVAL (operands[2]) & 0xff) != 0x80" -+ "* -+{ -+ switch (get_attr_type (insn)) -+ { -+ case TYPE_INCDEC: -+ if (operands[2] == constm1_rtx -+ || (GET_CODE (operands[2]) == CONST_INT -+ && INTVAL (operands[2]) == 255)) -+ return \"inc{b}\\t%0\"; -+ else if (operands[2] == const1_rtx) -+ return \"dec{b}\\t%0\"; -+ else -+ abort(); -+ -+ default: -+ if (! rtx_equal_p (operands[0], operands[1])) -+ abort (); -+ if (INTVAL (operands[2]) < 0) -+ { -+ operands[2] = GEN_INT (-INTVAL (operands[2])); -+ return \"add{b}\\t{%2, %0|%0, %2}\"; -+ } -+ return \"sub{b}\\t{%2, %0|%0, %2}\"; -+ } -+}" -+ [(set (attr "type") -+ (if_then_else (match_operand:HI 2 "incdec_operand" "") -+ (const_string "incdec") -+ (const_string "alu"))) - (set_attr "mode" "QI")]) - - (define_insn "*addqi_5" -- [(set (reg:CC 17) -- (compare:CC (neg:QI (match_operand:QI 2 "general_operand" "qmni")) -- (match_operand:QI 1 "nonimmediate_operand" "%0"))) -- (clobber (match_scratch:QI 0 "=r"))] -- "(GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" -- "add{b}\\t{%2, %0|%0, %2}" -- [(set_attr "type" "alu") -+ [(set (reg 17) -+ (compare -+ (plus:QI (match_operand:QI 1 "nonimmediate_operand" "%0") -+ (match_operand:QI 2 "general_operand" "qmni")) -+ (const_int 0))) -+ (clobber (match_scratch:QI 0 "=q"))] -+ "ix86_match_ccmode (insn, CCGOCmode) -+ && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" -+ "* -+{ -+ switch (get_attr_type (insn)) -+ { -+ case TYPE_INCDEC: -+ if (operands[2] == const1_rtx) -+ return \"inc{b}\\t%0\"; -+ else if (operands[2] == constm1_rtx -+ || (GET_CODE (operands[2]) == CONST_INT -+ && INTVAL (operands[2]) == 255)) -+ return \"dec{b}\\t%0\"; -+ abort(); -+ -+ default: -+ /* Make things pretty and `subb $4,%al' rather than `addb $-4, %al'. */ -+ if (GET_CODE (operands[2]) == CONST_INT -+ && INTVAL (operands[2]) < 0) -+ { -+ operands[2] = GEN_INT (-INTVAL (operands[2])); -+ return \"sub{b}\\t{%2, %0|%0, %2}\"; -+ } -+ return \"add{b}\\t{%2, %0|%0, %2}\"; -+ } -+}" -+ [(set (attr "type") -+ (if_then_else (match_operand:QI 2 "incdec_operand" "") -+ (const_string "incdec") -+ (const_string "alu"))) - (set_attr "mode" "QI")]) - - -@@ -4541,32 +4757,22 @@ - (match_operand:DI 2 "general_operand" ""))) - (clobber (reg:CC 17))] - "reload_completed" -- [(parallel [(set (reg:CC 17) (minus:CC (match_dup 1) (match_dup 2))) -+ [(parallel [(set (reg:CC 17) (compare:CC (match_dup 1) (match_dup 2))) - (set (match_dup 0) (minus:SI (match_dup 1) (match_dup 2)))]) - (parallel [(set (match_dup 3) - (minus:SI (match_dup 4) -- (plus:SI (match_dup 5) -- (ltu:SI (reg:CC 17) (const_int 0))))) -+ (plus:SI (ltu:SI (reg:CC 17) (const_int 0)) -+ (match_dup 5)))) - (clobber (reg:CC 17))])] - "split_di (operands+0, 1, operands+0, operands+3); - split_di (operands+1, 1, operands+1, operands+4); - split_di (operands+2, 1, operands+2, operands+5);") - --(define_insn "*subsi3_cc" -- [(set (reg:CC 17) (minus:CC (match_operand:SI 1 "nonimmediate_operand" "0,0") -- (match_operand:SI 2 "general_operand" "ri,rm"))) -- (set (match_operand:SI 0 "nonimmediate_operand" "=rm,r") -- (minus:SI (match_dup 1) (match_dup 2)))] -- "ix86_binary_operator_ok (MINUS, SImode, operands)" -- "sub{l}\\t{%2, %0|%0, %2}" -- [(set_attr "type" "alu") -- (set_attr "mode" "SI")]) -- - (define_insn "subsi3_carry" - [(set (match_operand:SI 0 "nonimmediate_operand" "=rm,r") - (minus:SI (match_operand:SI 1 "nonimmediate_operand" "0,0") -- (plus:SI (match_operand:SI 2 "general_operand" "ri,rm") -- (ltu:SI (reg:CC 17) (const_int 0))))) -+ (plus:SI (ltu:SI (reg:CC 17) (const_int 0)) -+ (match_operand:SI 2 "general_operand" "ri,rm")))) - (clobber (reg:CC 17))] - "ix86_binary_operator_ok (MINUS, SImode, operands)" - "sbb{l}\\t{%2, %0|%0, %2}" -@@ -4601,7 +4807,7 @@ - (const_int 0))) - (set (match_operand:SI 0 "nonimmediate_operand" "=rm,r") - (minus:SI (match_dup 1) (match_dup 2)))] -- "ix86_match_ccmode (insn, CCNOmode) -+ "ix86_match_ccmode (insn, CCGOCmode) - && ix86_binary_operator_ok (MINUS, SImode, operands)" - "sub{l}\\t{%2, %0|%0, %2}" - [(set_attr "type" "alu") -@@ -4645,7 +4851,7 @@ - (const_int 0))) - (set (match_operand:HI 0 "nonimmediate_operand" "=rm,r") - (minus:HI (match_dup 1) (match_dup 2)))] -- "ix86_match_ccmode (insn, CCNOmode) -+ "ix86_match_ccmode (insn, CCGOCmode) - && ix86_binary_operator_ok (MINUS, HImode, operands)" - "sub{w}\\t{%2, %0|%0, %2}" - [(set_attr "type" "alu") -@@ -4689,7 +4895,7 @@ - (const_int 0))) - (set (match_operand:HI 0 "nonimmediate_operand" "=qm,q") - (minus:HI (match_dup 1) (match_dup 2)))] -- "ix86_match_ccmode (insn, CCNOmode) -+ "ix86_match_ccmode (insn, CCGOCmode) - && ix86_binary_operator_ok (MINUS, QImode, operands)" - "sub{b}\\t{%2, %0|%0, %2}" - [(set_attr "type" "alu") -@@ -5145,31 +5351,28 @@ - ;; On Pentium, "test imm, reg" is pairable only with eax, ax, and al. - ;; Note that this excludes ah. - --(define_insn "*testsi_ccz_1" -- [(set (reg:CCZ 17) -- (compare:CCZ -+ -+(define_insn "testsi_1" -+ [(set (reg 17) -+ (compare - (and:SI (match_operand:SI 0 "nonimmediate_operand" "%*a,r,rm") - (match_operand:SI 1 "nonmemory_operand" "in,in,rin")) - (const_int 0)))] -- "" -+ "ix86_match_ccmode (insn, CCNOmode)" - "test{l}\\t{%1, %0|%0, %1}" - [(set_attr "type" "test") - (set_attr "modrm" "0,1,1") - (set_attr "mode" "SI") - (set_attr "pent_pair" "uv,np,uv")]) - --(define_insn "testsi_ccno_1" -+(define_expand "testsi_ccno_1" - [(set (reg:CCNO 17) - (compare:CCNO -- (and:SI (match_operand:SI 0 "nonimmediate_operand" "%*a,r,rm") -- (match_operand:SI 1 "nonmemory_operand" "in,in,rin")) -+ (and:SI (match_operand:SI 0 "nonimmediate_operand" "") -+ (match_operand:SI 1 "nonmemory_operand" "")) - (const_int 0)))] - "" -- "test{l}\\t{%1, %0|%0, %1}" -- [(set_attr "type" "test") -- (set_attr "modrm" "0,1,1") -- (set_attr "mode" "SI") -- (set_attr "pent_pair" "uv,np,uv")]) -+ "") - - (define_insn "*testhi_1" - [(set (reg 17) -@@ -5183,55 +5386,46 @@ - (set_attr "mode" "HI") - (set_attr "pent_pair" "uv,np,uv")]) - --(define_insn "testqi_ccz_1" -+(define_expand "testqi_ccz_1" - [(set (reg:CCZ 17) -- (compare:CCZ -- (and:QI (match_operand:QI 0 "nonimmediate_operand" "%*a,q,qm") -- (match_operand:QI 1 "nonmemory_operand" "n,n,qn")) -- (const_int 0)))] -+ (compare:CCZ (and:QI (match_operand:QI 0 "nonimmediate_operand" "") -+ (match_operand:QI 1 "nonmemory_operand" "")) -+ (const_int 0)))] - "" -- "test{b}\\t{%1, %0|%0, %1}" -- [(set_attr "type" "test") -- (set_attr "modrm" "0,1,1") -- (set_attr "mode" "QI") -- (set_attr "pent_pair" "uv,np,uv")]) -+ "") - --(define_insn "testqi_ccno_1" -- [(set (reg:CCNO 17) -- (compare:CCNO (and:QI (match_operand:QI 0 "nonimmediate_operand" "%*a,q,qm,r") -- (match_operand:QI 1 "nonmemory_operand" "n,n,qn,n")) -- (const_int 0)))] -- "" -+(define_insn "*testqi_1" -+ [(set (reg 17) -+ (compare (and:QI (match_operand:QI 0 "nonimmediate_operand" "%*a,q,qm,r") -+ (match_operand:QI 1 "nonmemory_operand" "n,n,qn,n")) -+ (const_int 0)))] -+ "ix86_match_ccmode (insn, CCNOmode)" - "@ - test{b}\\t{%1, %0|%0, %1} - test{b}\\t{%1, %0|%0, %1} - test{b}\\t{%1, %0|%0, %1} -- test{l}\\t{%1, %0|%0, %1}" -+ test{l}\\t{%1, %k0|%k0, %1}" - [(set_attr "type" "test") - (set_attr "modrm" "0,1,1,1") - (set_attr "mode" "QI,QI,QI,SI") - (set_attr "pent_pair" "uv,np,uv,np")]) - --(define_insn "*testqi_ext_ccz_0" -- [(set (reg:CCZ 17) -- (compare:CCZ -+(define_expand "testqi_ext_ccno_0" -+ [(set (reg:CCNO 17) -+ (compare:CCNO - (and:SI - (zero_extract:SI -- (match_operand 0 "ext_register_operand" "q") -+ (match_operand 0 "ext_register_operand" "") - (const_int 8) - (const_int 8)) -- (match_operand 1 "const_int_operand" "n")) -+ (match_operand 1 "const_int_operand" "")) - (const_int 0)))] -- "(unsigned HOST_WIDE_INT) INTVAL (operands[1]) <= 0xff" -- "test{b}\\t{%1, %h0|%h0, %1}" -- [(set_attr "type" "test") -- (set_attr "mode" "QI") -- (set_attr "length_immediate" "1") -- (set_attr "pent_pair" "np")]) -+ "" -+ "") - --(define_insn "testqi_ext_ccno_0" -- [(set (reg:CCNO 17) -- (compare:CCNO -+(define_insn "*testqi_ext_0" -+ [(set (reg 17) -+ (compare - (and:SI - (zero_extract:SI - (match_operand 0 "ext_register_operand" "q") -@@ -5239,7 +5433,8 @@ - (const_int 8)) - (match_operand 1 "const_int_operand" "n")) - (const_int 0)))] -- "(unsigned HOST_WIDE_INT) INTVAL (operands[1]) <= 0xff" -+ "(unsigned HOST_WIDE_INT) INTVAL (operands[1]) <= 0xff -+ && ix86_match_ccmode (insn, CCNOmode)" - "test{b}\\t{%1, %h0|%h0, %1}" - [(set_attr "type" "test") - (set_attr "mode" "QI") -@@ -5745,7 +5940,7 @@ - (compare (ior:QI (match_operand:QI 1 "nonimmediate_operand" "%0") - (match_operand:QI 2 "general_operand" "qim")) - (const_int 0))) -- (clobber (match_scratch:QI 0 "=r"))] -+ (clobber (match_scratch:QI 0 "=q"))] - "ix86_match_ccmode (insn, CCNOmode) - && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" - "or{b}\\t{%2, %0|%0, %2}" -@@ -5904,16 +6099,16 @@ - (xor:QI (match_operand:QI 1 "nonimmediate_operand" "%0") - (match_operand:QI 2 "general_operand" "qim")) - (const_int 0))) -- (clobber (match_scratch:QI 0 "=r"))] -+ (clobber (match_scratch:QI 0 "=q"))] - "ix86_match_ccmode (insn, CCNOmode) - && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" - "xor{b}\\t{%2, %0|%0, %2}" - [(set_attr "type" "alu") - (set_attr "mode" "QI")]) - --(define_insn "xorqi_cc_ext_1" -- [(set (reg:CCNO 17) -- (compare:CCNO -+(define_insn "*xorqi_cc_ext_1" -+ [(set (reg 17) -+ (compare - (xor:SI - (zero_extract:SI - (match_operand 1 "ext_register_operand" "0") -@@ -5927,10 +6122,30 @@ - (xor:SI - (zero_extract:SI (match_dup 1) (const_int 8) (const_int 8)) - (match_dup 2)))] -- "" -+ "ix86_match_ccmode (insn, CCNOmode)" - "xor{b}\\t{%2, %h0|%h0, %2}" - [(set_attr "type" "alu") - (set_attr "mode" "QI")]) -+ -+(define_expand "xorqi_cc_ext_1" -+ [(parallel [ -+ (set (reg:CCNO 17) -+ (compare:CCNO -+ (xor:SI -+ (zero_extract:SI -+ (match_operand 1 "ext_register_operand" "") -+ (const_int 8) -+ (const_int 8)) -+ (match_operand:QI 2 "general_operand" "")) -+ (const_int 0))) -+ (set (zero_extract:SI (match_operand 0 "ext_register_operand" "") -+ (const_int 8) -+ (const_int 8)) -+ (xor:SI -+ (zero_extract:SI (match_dup 1) (const_int 8) (const_int 8)) -+ (match_dup 2)))])] -+ "" -+ "") - - ;; Negation instructions - -@@ -5961,9 +6176,9 @@ - (set (match_dup 0) (neg:SI (match_dup 2)))]) - (parallel - [(set (match_dup 1) -- (plus:SI (match_dup 3) -- (plus:SI (const_int 0) -- (ltu:SI (reg:CC 17) (const_int 0))))) -+ (plus:SI (plus:SI (ltu:SI (reg:CC 17) (const_int 0)) -+ (match_dup 3)) -+ (const_int 0))) - (clobber (reg:CC 17))]) - (parallel - [(set (match_dup 1) -@@ -6780,7 +6995,7 @@ - (const_int 0))) - (set (match_operand:SI 0 "nonimmediate_operand" "=rm") - (ashift:SI (match_dup 1) (match_dup 2)))] -- "ix86_match_ccmode (insn, CCNOmode) -+ "ix86_match_ccmode (insn, CCGOCmode) - && ix86_binary_operator_ok (ASHIFT, SImode, operands)" - "* - { -@@ -6909,7 +7124,7 @@ - (const_int 0))) - (set (match_operand:HI 0 "nonimmediate_operand" "=rm") - (ashift:HI (match_dup 1) (match_dup 2)))] -- "ix86_match_ccmode (insn, CCNOmode) -+ "ix86_match_ccmode (insn, CCGOCmode) - && ix86_binary_operator_ok (ASHIFT, HImode, operands)" - "* - { -@@ -7076,7 +7291,7 @@ - (const_int 0))) - (set (match_operand:QI 0 "nonimmediate_operand" "=qm") - (ashift:QI (match_dup 1) (match_dup 2)))] -- "ix86_match_ccmode (insn, CCNOmode) -+ "ix86_match_ccmode (insn, CCGOCmode) - && ix86_binary_operator_ok (ASHIFT, QImode, operands)" - "* - { -@@ -7546,7 +7761,7 @@ - (const_int 0))) - (set (match_operand:SI 0 "nonimmediate_operand" "=rm") - (lshiftrt:SI (match_dup 1) (match_dup 2)))] -- "ix86_match_ccmode (insn, CCNOmode) -+ "ix86_match_ccmode (insn, CCGOCmode) - && (TARGET_PENTIUM || TARGET_PENTIUMPRO) - && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)" - "shr{l}\\t%0" -@@ -7567,7 +7782,7 @@ - (const_int 0))) - (set (match_operand:SI 0 "nonimmediate_operand" "=rm") - (lshiftrt:SI (match_dup 1) (match_dup 2)))] -- "ix86_match_ccmode (insn, CCNOmode) -+ "ix86_match_ccmode (insn, CCGOCmode) - && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)" - "@ - shr{l}\\t{%2, %0|%0, %2}" -@@ -7619,7 +7834,7 @@ - (const_int 0))) - (set (match_operand:HI 0 "nonimmediate_operand" "=rm") - (lshiftrt:HI (match_dup 1) (match_dup 2)))] -- "ix86_match_ccmode (insn, CCNOmode) -+ "ix86_match_ccmode (insn, CCGOCmode) - && (TARGET_PENTIUM || TARGET_PENTIUMPRO) - && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)" - "shr{w}\\t%0" -@@ -7640,7 +7855,7 @@ - (const_int 0))) - (set (match_operand:HI 0 "nonimmediate_operand" "=rm") - (lshiftrt:HI (match_dup 1) (match_dup 2)))] -- "ix86_match_ccmode (insn, CCNOmode) -+ "ix86_match_ccmode (insn, CCGOCmode) - && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)" - "@ - shr{w}\\t{%2, %0|%0, %2}" -@@ -7692,7 +7907,7 @@ - (const_int 0))) - (set (match_operand:QI 0 "nonimmediate_operand" "=qm") - (lshiftrt:QI (match_dup 1) (match_dup 2)))] -- "ix86_match_ccmode (insn, CCNOmode) -+ "ix86_match_ccmode (insn, CCGOCmode) - && (TARGET_PENTIUM || TARGET_PENTIUMPRO) - && ix86_binary_operator_ok (LSHIFTRT, QImode, operands)" - "shr{b}\\t%0" -@@ -7713,7 +7928,7 @@ - (const_int 0))) - (set (match_operand:QI 0 "nonimmediate_operand" "=qm") - (lshiftrt:QI (match_dup 1) (match_dup 2)))] -- "ix86_match_ccmode (insn, CCNOmode) -+ "ix86_match_ccmode (insn, CCGOCmode) - && ix86_binary_operator_ok (LSHIFTRT, QImode, operands)" - "shr{b}\\t{%2, %0|%0, %2}" - [(set_attr "type" "ishift") -@@ -8102,7 +8317,7 @@ - - (define_insn "*setcc_1" - [(set (match_operand:QI 0 "nonimmediate_operand" "=qm") -- (match_operator:QI 1 "no_comparison_operator" -+ (match_operator:QI 1 "ix86_comparison_operator" - [(reg 17) (const_int 0)]))] - "" - "set%C1\\t%0" -@@ -8111,30 +8326,12 @@ - - (define_insn "*setcc_2" - [(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" "+qm")) -- (match_operator:QI 1 "no_comparison_operator" -+ (match_operator:QI 1 "ix86_comparison_operator" - [(reg 17) (const_int 0)]))] - "" - "set%C1\\t%0" - [(set_attr "type" "setcc") - (set_attr "mode" "QI")]) -- --(define_insn "*setcc_3" -- [(set (match_operand:QI 0 "nonimmediate_operand" "=qm") -- (match_operator:QI 1 "uno_comparison_operator" -- [(reg:CC 17) (const_int 0)]))] -- "" -- "set%C1\\t%0" -- [(set_attr "type" "setcc") -- (set_attr "mode" "QI")]) -- --(define_insn "*setcc_4" -- [(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" "+qm")) -- (match_operator:QI 1 "uno_comparison_operator" -- [(reg:CC 17) (const_int 0)]))] -- "" -- "set%C1\\t%0" -- [(set_attr "type" "setcc") -- (set_attr "mode" "QI")]) - - ;; Basic conditional jump instructions. - ;; We ignore the overflow flag for signed branch instructions. -@@ -8288,7 +8485,7 @@ - - (define_insn "*jcc_1" - [(set (pc) -- (if_then_else (match_operator 1 "no_comparison_operator" -+ (if_then_else (match_operator 1 "ix86_comparison_operator" - [(reg 17) (const_int 0)]) - (label_ref (match_operand 0 "" "")) - (pc)))] -@@ -8305,7 +8502,7 @@ - - (define_insn "*jcc_2" - [(set (pc) -- (if_then_else (match_operator 1 "no_comparison_operator" -+ (if_then_else (match_operator 1 "ix86_comparison_operator" - [(reg 17) (const_int 0)]) - (pc) - (label_ref (match_operand 0 "" ""))))] -@@ -8320,40 +8517,6 @@ - (const_int 0) - (const_int 1)))]) - --(define_insn "*jcc_3" -- [(set (pc) -- (if_then_else (match_operator 1 "uno_comparison_operator" -- [(reg:CC 17) (const_int 0)]) -- (label_ref (match_operand 0 "" "")) -- (pc)))] -- "" -- "j%C1\\t%l0" -- [(set_attr "type" "ibr") -- (set (attr "prefix_0f") -- (if_then_else (and (ge (minus (match_dup 0) (pc)) -- (const_int -128)) -- (lt (minus (match_dup 0) (pc)) -- (const_int 124))) -- (const_int 0) -- (const_int 1)))]) -- --(define_insn "*jcc_4" -- [(set (pc) -- (if_then_else (match_operator 1 "uno_comparison_operator" -- [(reg:CC 17) (const_int 0)]) -- (pc) -- (label_ref (match_operand 0 "" ""))))] -- "" -- "j%c1\\t%l0" -- [(set_attr "type" "ibr") -- (set (attr "prefix_0f") -- (if_then_else (and (ge (minus (match_dup 0) (pc)) -- (const_int -128)) -- (lt (minus (match_dup 0) (pc)) -- (const_int 124))) -- (const_int 0) -- (const_int 1)))]) -- - ;; Define combination compare-and-branch fp compare instructions to use - ;; during early optimization. Splitting the operation apart early makes - ;; for bad code when we want to reverse the operation. -@@ -10436,7 +10599,7 @@ - - (define_insn "*movsicc_noc" - [(set (match_operand:SI 0 "register_operand" "=r,r") -- (if_then_else:SI (match_operator 1 "no_comparison_operator" -+ (if_then_else:SI (match_operator 1 "ix86_comparison_operator" - [(reg 17) (const_int 0)]) - (match_operand:SI 2 "nonimmediate_operand" "rm,0") - (match_operand:SI 3 "nonimmediate_operand" "0,rm")))] -@@ -10448,20 +10611,6 @@ - [(set_attr "type" "icmov") - (set_attr "mode" "SI")]) - --(define_insn "*movsicc_c" -- [(set (match_operand:SI 0 "register_operand" "=r,r") -- (if_then_else:SI (match_operator 1 "uno_comparison_operator" -- [(reg:CC 17) (const_int 0)]) -- (match_operand:SI 2 "nonimmediate_operand" "rm,0") -- (match_operand:SI 3 "nonimmediate_operand" "0,rm")))] -- "TARGET_CMOVE -- && (GET_CODE (operands[2]) != MEM || GET_CODE (operands[3]) != MEM)" -- "@ -- cmov%C1\\t{%2, %0|%0, %2} -- cmov%c1\\t{%3, %0|%0, %3}" -- [(set_attr "type" "icmov") -- (set_attr "mode" "SI")]) -- - (define_expand "movhicc" - [(set (match_operand:HI 0 "register_operand" "") - (if_then_else:HI (match_operand 1 "comparison_operator" "") -@@ -10472,7 +10621,7 @@ - - (define_insn "*movhicc_noc" - [(set (match_operand:HI 0 "register_operand" "=r,r") -- (if_then_else:HI (match_operator 1 "no_comparison_operator" -+ (if_then_else:HI (match_operator 1 "ix86_comparison_operator" - [(reg 17) (const_int 0)]) - (match_operand:HI 2 "nonimmediate_operand" "rm,0") - (match_operand:HI 3 "nonimmediate_operand" "0,rm")))] -@@ -10484,20 +10633,6 @@ - [(set_attr "type" "icmov") - (set_attr "mode" "HI")]) - --(define_insn "*movhicc_c" -- [(set (match_operand:HI 0 "register_operand" "=r,r") -- (if_then_else:HI (match_operator 1 "uno_comparison_operator" -- [(reg:CC 17) (const_int 0)]) -- (match_operand:HI 2 "nonimmediate_operand" "rm,0") -- (match_operand:HI 3 "nonimmediate_operand" "0,rm")))] -- "TARGET_CMOVE -- && (GET_CODE (operands[2]) != MEM || GET_CODE (operands[3]) != MEM)" -- "@ -- cmov%C1\\t{%2, %0|%0, %2} -- cmov%c1\\t{%3, %0|%0, %3}" -- [(set_attr "type" "icmov") -- (set_attr "mode" "HI")]) -- - (define_expand "movsfcc" - [(set (match_operand:SF 0 "register_operand" "") - (if_then_else:SF (match_operand 1 "comparison_operator" "") -@@ -11290,6 +11425,68 @@ - (set (reg:SI 7) (plus:SI (reg:SI 7) (const_int 4)))])] - "") - -+;; Convert compares with 1 to shorter inc/dec operations when CF is not -+;; required and register dies. -+(define_peephole2 -+ [(set (reg 17) -+ (compare (match_operand:SI 0 "register_operand" "") -+ (match_operand:SI 1 "incdec_operand" "")))] -+ "ix86_match_ccmode (insn, CCGCmode) -+ && find_regno_note (insn, REG_DEAD, true_regnum (operands[0]))" -+ [(parallel [(set (reg:CCGC 17) -+ (compare:CCGC (match_dup 0) -+ (match_dup 1))) -+ (clobber (match_dup 0))])] -+ "") -+ -+(define_peephole2 -+ [(set (reg 17) -+ (compare (match_operand:HI 0 "register_operand" "") -+ (match_operand:HI 1 "incdec_operand" "")))] -+ "ix86_match_ccmode (insn, CCGCmode) -+ && find_regno_note (insn, REG_DEAD, true_regnum (operands[0]))" -+ [(parallel [(set (reg:CCGC 17) -+ (compare:CCGC (match_dup 0) -+ (match_dup 1))) -+ (clobber (match_dup 0))])] -+ "") -+ -+(define_peephole2 -+ [(set (reg 17) -+ (compare (match_operand:QI 0 "register_operand" "") -+ (match_operand:QI 1 "incdec_operand" "")))] -+ "ix86_match_ccmode (insn, CCGCmode) -+ && find_regno_note (insn, REG_DEAD, true_regnum (operands[0]))" -+ [(parallel [(set (reg:CCGC 17) -+ (compare:CCGC (match_dup 0) -+ (match_dup 1))) -+ (clobber (match_dup 0))])] -+ "") -+ -+;; Convert compares with 128 to shorter add -128 -+(define_peephole2 -+ [(set (reg 17) -+ (compare (match_operand:SI 0 "register_operand" "") -+ (const_int 128)))] -+ "ix86_match_ccmode (insn, CCGCmode) -+ && find_regno_note (insn, REG_DEAD, true_regnum (operands[0]))" -+ [(parallel [(set (reg:CCGC 17) -+ (compare:CCGC (match_dup 0) -+ (const_int 128))) -+ (clobber (match_dup 0))])] -+ "") -+ -+(define_peephole2 -+ [(set (reg 17) -+ (compare (match_operand:HI 0 "register_operand" "") -+ (const_int 128)))] -+ "ix86_match_ccmode (insn, CCGCmode) -+ && find_regno_note (insn, REG_DEAD, true_regnum (operands[0]))" -+ [(parallel [(set (reg:CCGC 17) -+ (compare:CCGC (match_dup 0) -+ (const_int 128))) -+ (clobber (match_dup 0))])] -+ "") - ;; Call-value patterns last so that the wildcard operand does not - ;; disrupt insn-recog's switch tables. - ---- gcc/config/i386/i386-protos.h Sun Jul 2 10:37:12 2000 -+++ gcc/config/i386/i386-protos.h Wed Oct 18 13:27:27 2000 -@@ -57,7 +57,7 @@ extern int q_regs_operand PARAMS ((rtx, - extern int non_q_regs_operand PARAMS ((rtx, enum machine_mode)); - extern int no_comparison_operator PARAMS ((rtx, enum machine_mode)); - extern int fcmov_comparison_operator PARAMS ((rtx, enum machine_mode)); --extern int uno_comparison_operator PARAMS ((rtx, enum machine_mode)); -+extern int ix86_comparison_operator PARAMS ((rtx, enum machine_mode)); - extern int cmp_fp_expander_operand PARAMS ((rtx, enum machine_mode)); - extern int ext_register_operand PARAMS ((rtx, enum machine_mode)); - extern int binary_fp_operator PARAMS ((rtx, enum machine_mode)); -@@ -121,6 +121,7 @@ extern int ix86_adjust_cost PARAMS ((rtx - extern void ix86_sched_init PARAMS ((FILE *, int)); - extern int ix86_sched_reorder PARAMS ((FILE *, int, rtx *, int, int)); - extern int ix86_variable_issue PARAMS ((FILE *, int, rtx, int)); -+extern enum machine_mode ix86_cc_mode PARAMS ((enum rtx_code, rtx, rtx)); - - #ifdef TREE_CODE - extern void init_cumulative_args PARAMS ((CUMULATIVE_ARGS *, tree, rtx)); |