|
8860 | 8860 | (match_dup 0))) |
8861 | 8861 | (clobber (reg:CC FLAGS_REG))])]) |
8862 | 8862 |
|
| 8863 | +(define_insn "*add<mode>3_carry_2" |
| 8864 | + [(set (reg FLAGS_REG) |
| 8865 | + (compare |
| 8866 | + (plus:SWI |
| 8867 | + (plus:SWI |
| 8868 | + (match_operator:SWI 4 "ix86_carry_flag_operator" |
| 8869 | + [(match_operand 3 "flags_reg_operand") (const_int 0)]) |
| 8870 | + (match_operand:SWI 1 "nonimmediate_operand" "%0,0,rm,r")) |
| 8871 | + (match_operand:SWI 2 "<general_operand>" "<r><i>,<m>,r<i>,<m>")) |
| 8872 | + (const_int 0))) |
| 8873 | + (set (match_operand:SWI 0 "nonimmediate_operand" "=<r>m,<r>,r,r") |
| 8874 | + (plus:SWI |
| 8875 | + (plus:SWI |
| 8876 | + (match_op_dup 4 [(match_dup 3) (const_int 0)]) |
| 8877 | + (match_dup 1)) |
| 8878 | + (match_dup 2)))] |
| 8879 | + "ix86_match_ccmode (insn, CCGOCmode) |
| 8880 | + && ix86_binary_operator_ok (PLUS, <MODE>mode, operands, TARGET_APX_NDD)" |
| 8881 | + "@ |
| 8882 | + adc{<imodesuffix>}\t{%2, %0|%0, %2} |
| 8883 | + adc{<imodesuffix>}\t{%2, %0|%0, %2} |
| 8884 | + adc{<imodesuffix>}\t{%2, %1, %0|%0, %1, %2} |
| 8885 | + adc{<imodesuffix>}\t{%2, %1, %0|%0, %1, %2}" |
| 8886 | + [(set_attr "isa" "*,*,apx_ndd,apx_ndd") |
| 8887 | + (set_attr "type" "alu") |
| 8888 | + (set_attr "use_carry" "1") |
| 8889 | + (set_attr "pent_pair" "pu") |
| 8890 | + (set_attr "mode" "<MODE>")]) |
| 8891 | + |
8863 | 8892 | (define_insn "*add<mode>3_carry_0" |
8864 | 8893 | [(set (match_operand:SWI 0 "nonimmediate_operand" "=<r>m") |
8865 | 8894 | (plus:SWI |
|
8874 | 8903 | (set_attr "pent_pair" "pu") |
8875 | 8904 | (set_attr "mode" "<MODE>")]) |
8876 | 8905 |
|
| 8906 | +(define_insn "*add<mode>3_carry_0_cc" |
| 8907 | + [(set (reg FLAGS_REG) |
| 8908 | + (compare |
| 8909 | + (plus:SWI |
| 8910 | + (match_operator:SWI 2 "ix86_carry_flag_operator" |
| 8911 | + [(match_operand 3 "flags_reg_operand") (const_int 0)]) |
| 8912 | + (match_operand:SWI 1 "nonimmediate_operand" "0")) |
| 8913 | + (const_int 0))) |
| 8914 | + (set (match_operand:SWI 0 "nonimmediate_operand" "=<r>m") |
| 8915 | + (plus:SWI |
| 8916 | + (match_op_dup 2 [(match_dup 3) (const_int 0)]) |
| 8917 | + (match_dup 1)))] |
| 8918 | + "ix86_match_ccmode (insn, CCGOCmode) |
| 8919 | + && (!MEM_P (operands[0]) || rtx_equal_p (operands[0], operands[1]))" |
| 8920 | + "adc{<imodesuffix>}\t{$0, %0|%0, 0}" |
| 8921 | + [(set_attr "type" "alu") |
| 8922 | + (set_attr "use_carry" "1") |
| 8923 | + (set_attr "pent_pair" "pu") |
| 8924 | + (set_attr "mode" "<MODE>")]) |
| 8925 | + |
8877 | 8926 | (define_insn "*add<mode>3_carry_0r" |
8878 | 8927 | [(set (match_operand:SWI 0 "nonimmediate_operand" "=<r>m") |
8879 | 8928 | (plus:SWI |
|
8888 | 8937 | (set_attr "pent_pair" "pu") |
8889 | 8938 | (set_attr "mode" "<MODE>")]) |
8890 | 8939 |
|
| 8940 | +(define_insn "*add<mode>3_carry_0r_cc" |
| 8941 | + [(set (reg FLAGS_REG) |
| 8942 | + (compare |
| 8943 | + (plus:SWI |
| 8944 | + (match_operator:SWI 2 "ix86_carry_flag_unset_operator" |
| 8945 | + [(match_operand 3 "flags_reg_operand") (const_int 0)]) |
| 8946 | + (match_operand:SWI 1 "nonimmediate_operand" "0")) |
| 8947 | + (const_int 0))) |
| 8948 | + (set (match_operand:SWI 0 "nonimmediate_operand" "=<r>m") |
| 8949 | + (plus:SWI |
| 8950 | + (match_op_dup 2 [(match_dup 3) (const_int 0)]) |
| 8951 | + (match_dup 1)))] |
| 8952 | + "ix86_match_ccmode (insn, CCGOCmode) |
| 8953 | + && (!MEM_P (operands[0]) || rtx_equal_p (operands[0], operands[1]))" |
| 8954 | + "sbb{<imodesuffix>}\t{$-1, %0|%0, -1}" |
| 8955 | + [(set_attr "type" "alu") |
| 8956 | + (set_attr "use_carry" "1") |
| 8957 | + (set_attr "pent_pair" "pu") |
| 8958 | + (set_attr "mode" "<MODE>")]) |
| 8959 | + |
8891 | 8960 | (define_insn "*addqi3_carry_zext<mode>" |
8892 | 8961 | [(set (match_operand:SWI248x 0 "register_operand" "=r,r") |
8893 | 8962 | (zero_extend:SWI248x |
|
9456 | 9525 | (match_dup 0))) |
9457 | 9526 | (clobber (reg:CC FLAGS_REG))])]) |
9458 | 9527 |
|
| 9528 | +(define_insn "*sub<mode>3_carry_2" |
| 9529 | + [(set (reg FLAGS_REG) |
| 9530 | + (compare |
| 9531 | + (minus:SWI |
| 9532 | + (minus:SWI |
| 9533 | + (match_operand:SWI 1 "nonimmediate_operand" "0,0,rm,r") |
| 9534 | + (match_operator:SWI 4 "ix86_carry_flag_operator" |
| 9535 | + [(match_operand 3 "flags_reg_operand") (const_int 0)])) |
| 9536 | + (match_operand:SWI 2 "<general_operand>" "<r><i>,<m>,r<i>,<m>")) |
| 9537 | + (const_int 0))) |
| 9538 | + (set (match_operand:SWI 0 "nonimmediate_operand" "=<r>m,<r>,r,r") |
| 9539 | + (minus:SWI |
| 9540 | + (minus:SWI |
| 9541 | + (match_dup 1) |
| 9542 | + (match_op_dup 4 [(match_dup 3) (const_int 0)])) |
| 9543 | + (match_dup 2)))] |
| 9544 | + "ix86_match_ccmode (insn, CCGOCmode) |
| 9545 | + && ix86_binary_operator_ok (MINUS, <MODE>mode, operands, TARGET_APX_NDD)" |
| 9546 | + "@ |
| 9547 | + sbb{<imodesuffix>}\t{%2, %0|%0, %2} |
| 9548 | + sbb{<imodesuffix>}\t{%2, %0|%0, %2} |
| 9549 | + sbb{<imodesuffix>}\t{%2, %1, %0|%0, %1, %2} |
| 9550 | + sbb{<imodesuffix>}\t{%2, %1, %0|%0, %1, %2}" |
| 9551 | + [(set_attr "isa" "*,*,apx_ndd,apx_ndd") |
| 9552 | + (set_attr "type" "alu") |
| 9553 | + (set_attr "use_carry" "1") |
| 9554 | + (set_attr "pent_pair" "pu") |
| 9555 | + (set_attr "mode" "<MODE>")]) |
| 9556 | + |
9459 | 9557 | (define_insn "*sub<mode>3_carry_0" |
9460 | 9558 | [(set (match_operand:SWI 0 "nonimmediate_operand" "=<r>m") |
9461 | 9559 | (minus:SWI |
|
9470 | 9568 | (set_attr "pent_pair" "pu") |
9471 | 9569 | (set_attr "mode" "<MODE>")]) |
9472 | 9570 |
|
| 9571 | +(define_insn "*sub<mode>3_carry_0_cc" |
| 9572 | + [(set (reg FLAGS_REG) |
| 9573 | + (compare |
| 9574 | + (minus:SWI |
| 9575 | + (match_operand:SWI 1 "nonimmediate_operand" "0") |
| 9576 | + (match_operator:SWI 2 "ix86_carry_flag_operator" |
| 9577 | + [(match_operand 3 "flags_reg_operand") (const_int 0)])) |
| 9578 | + (const_int 0))) |
| 9579 | + (set (match_operand:SWI 0 "nonimmediate_operand" "=<r>m") |
| 9580 | + (minus:SWI |
| 9581 | + (match_dup 1) |
| 9582 | + (match_op_dup 2 [(match_dup 3) (const_int 0)])))] |
| 9583 | + "ix86_match_ccmode (insn, CCGOCmode) |
| 9584 | + && (!MEM_P (operands[0]) || rtx_equal_p (operands[0], operands[1]))" |
| 9585 | + "sbb{<imodesuffix>}\t{$0, %0|%0, 0}" |
| 9586 | + [(set_attr "type" "alu") |
| 9587 | + (set_attr "use_carry" "1") |
| 9588 | + (set_attr "pent_pair" "pu") |
| 9589 | + (set_attr "mode" "<MODE>")]) |
| 9590 | + |
9473 | 9591 | (define_insn "*sub<mode>3_carry_0r" |
9474 | 9592 | [(set (match_operand:SWI 0 "nonimmediate_operand" "=<r>m") |
9475 | 9593 | (minus:SWI |
|
9484 | 9602 | (set_attr "pent_pair" "pu") |
9485 | 9603 | (set_attr "mode" "<MODE>")]) |
9486 | 9604 |
|
| 9605 | +(define_insn "*sub<mode>3_carry_0r_cc" |
| 9606 | + [(set (reg FLAGS_REG) |
| 9607 | + (compare |
| 9608 | + (minus:SWI |
| 9609 | + (match_operand:SWI 1 "nonimmediate_operand" "0") |
| 9610 | + (match_operator:SWI 2 "ix86_carry_flag_unset_operator" |
| 9611 | + [(match_operand 3 "flags_reg_operand") (const_int 0)])) |
| 9612 | + (const_int 0))) |
| 9613 | + (set (match_operand:SWI 0 "nonimmediate_operand" "=<r>m") |
| 9614 | + (minus:SWI |
| 9615 | + (match_dup 1) |
| 9616 | + (match_op_dup 2 [(match_dup 3) (const_int 0)])))] |
| 9617 | + "ix86_match_ccmode (insn, CCGOCmode) |
| 9618 | + && (!MEM_P (operands[0]) || rtx_equal_p (operands[0], operands[1]))" |
| 9619 | + "adc{<imodesuffix>}\t{$-1, %0|%0, -1}" |
| 9620 | + [(set_attr "type" "alu") |
| 9621 | + (set_attr "use_carry" "1") |
| 9622 | + (set_attr "pent_pair" "pu") |
| 9623 | + (set_attr "mode" "<MODE>")]) |
| 9624 | + |
9487 | 9625 | (define_insn "*subqi3_carry_zext<mode>" |
9488 | 9626 | [(set (match_operand:SWI248x 0 "register_operand" "=r,r") |
9489 | 9627 | (zero_extend:SWI248x |
|
0 commit comments