diff options
author | Ulrich Weigand <uweigand@de.ibm.com> | 2004-03-21 20:03:10 +0000 |
---|---|---|
committer | Ulrich Weigand <uweigand@gcc.gnu.org> | 2004-03-21 20:03:10 +0000 |
commit | 1c7b1b7e259afc4c210dc55f407a05f75c3e7122 (patch) | |
tree | 72db31cf2df5fb94c64e6f495638245a6623a58c /gcc | |
parent | f258e38b1de989f3d1f9a9dddceedaa7e677e02b (diff) | |
download | gcc-1c7b1b7e259afc4c210dc55f407a05f75c3e7122.zip gcc-1c7b1b7e259afc4c210dc55f407a05f75c3e7122.tar.gz gcc-1c7b1b7e259afc4c210dc55f407a05f75c3e7122.tar.bz2 |
* config/s390/s390.md ("addti3", "subti3"): New insns and splitters.
From-SVN: r79793
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/config/s390/s390.md | 58 |
2 files changed, 62 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index eccd96c..638a149 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ 2004-03-21 Ulrich Weigand <uweigand@de.ibm.com> + * config/s390/s390.md ("addti3", "subti3"): New insns and splitters. + +2004-03-21 Ulrich Weigand <uweigand@de.ibm.com> + * expmed.c (choose_mult_variant): Pass MULT_COST as argument instead of using register multiplication cost. (expand_mult): Adapt choose_mult_variant call. diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md index 5e13980..8348c5a 100644 --- a/gcc/config/s390/s390.md +++ b/gcc/config/s390/s390.md @@ -3331,6 +3331,35 @@ ;; ; +; addti3 instruction pattern(s). +; + +(define_insn_and_split "addti3" + [(set (match_operand:TI 0 "register_operand" "=&d") + (plus:TI (match_operand:TI 1 "nonimmediate_operand" "%0") + (match_operand:TI 2 "general_operand" "do") ) ) + (clobber (reg:CC 33))] + "TARGET_64BIT" + "#" + "&& reload_completed" + [(parallel + [(set (reg:CCL1 33) + (compare:CCL1 (plus:DI (match_dup 7) (match_dup 8)) + (match_dup 7))) + (set (match_dup 6) (plus:DI (match_dup 7) (match_dup 8)))]) + (parallel + [(set (match_dup 3) (plus:DI (plus:DI (match_dup 4) (match_dup 5)) + (ltu:DI (reg:CCL1 33) (const_int 0)))) + (clobber (reg:CC 33))])] + "operands[3] = operand_subword (operands[0], 0, 0, TImode); + operands[4] = operand_subword (operands[1], 0, 0, TImode); + operands[5] = operand_subword (operands[2], 0, 0, TImode); + operands[6] = operand_subword (operands[0], 1, 0, TImode); + operands[7] = operand_subword (operands[1], 1, 0, TImode); + operands[8] = operand_subword (operands[2], 1, 0, TImode);" + [(set_attr "op_type" "NN")]) + +; ; adddi3 instruction pattern(s). ; @@ -3826,6 +3855,35 @@ ;; ; +; subti3 instruction pattern(s). +; + +(define_insn_and_split "subti3" + [(set (match_operand:TI 0 "register_operand" "=&d") + (minus:TI (match_operand:TI 1 "register_operand" "0") + (match_operand:TI 2 "general_operand" "do") ) ) + (clobber (reg:CC 33))] + "TARGET_64BIT" + "#" + "&& reload_completed" + [(parallel + [(set (reg:CCL2 33) + (compare:CCL2 (minus:DI (match_dup 7) (match_dup 8)) + (match_dup 7))) + (set (match_dup 6) (minus:DI (match_dup 7) (match_dup 8)))]) + (parallel + [(set (match_dup 3) (minus:DI (minus:DI (match_dup 4) (match_dup 5)) + (gtu:DI (reg:CCL2 33) (const_int 0)))) + (clobber (reg:CC 33))])] + "operands[3] = operand_subword (operands[0], 0, 0, TImode); + operands[4] = operand_subword (operands[1], 0, 0, TImode); + operands[5] = operand_subword (operands[2], 0, 0, TImode); + operands[6] = operand_subword (operands[0], 1, 0, TImode); + operands[7] = operand_subword (operands[1], 1, 0, TImode); + operands[8] = operand_subword (operands[2], 1, 0, TImode);" + [(set_attr "op_type" "NN")]) + +; ; subdi3 instruction pattern(s). ; |