diff options
author | Segher Boessenkool <segher@kernel.crashing.org> | 2020-05-07 18:31:27 -0500 |
---|---|---|
committer | Bill Schmidt <wschmidt@linux.ibm.com> | 2020-05-07 18:31:27 -0500 |
commit | 057e1eedac864342866393f260295b2c73718595 (patch) | |
tree | b1e0b8d3bdf8d39b0065e239da622685930fbbcf | |
parent | e473a6df6d55b9476439d05bbcb218fb98faf49f (diff) | |
download | gcc-057e1eedac864342866393f260295b2c73718595.zip gcc-057e1eedac864342866393f260295b2c73718595.tar.gz gcc-057e1eedac864342866393f260295b2c73718595.tar.bz2 |
rs6000: New insns setnbc and setnbcr
setnbc[r] is like setbc[r], but it writes -1 instead of 1 to the GPR.
2020-05-07 Segher Boessenkool <segher@kernel.crashing.org>
* config/rs6000/rs6000.md (*setnbc_<un>signed_<GPR:mode>): New
define_insn.
(*setnbcr_<un>signed_<GPR:mode>): New define_insn.
(*neg_eq_<mode>): Avoid for TARGET_FUTURE; add missing && 1.
(*neg_ne_<mode>): Likewise.
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.md | 27 |
2 files changed, 31 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a161162..36226e0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,13 @@ 2020-05-07 Segher Boessenkool <segher@kernel.crashing.org> + * config/rs6000/rs6000.md (*setnbc_<un>signed_<GPR:mode>): New + define_insn. + (*setnbcr_<un>signed_<GPR:mode>): New define_insn. + (*neg_eq_<mode>): Avoid for TARGET_FUTURE; add missing && 1. + (*neg_ne_<mode>): Likewise. + +2020-05-07 Segher Boessenkool <segher@kernel.crashing.org> + * config/rs6000/rs6000.md (setbc_<un>signed_<GPR:mode>): New define_insn. (*setbcr_<un>signed_<GPR:mode>): Likewise. diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index e8dc576..c02c2e1 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -5157,6 +5157,25 @@ "setbcr %0,%j1" [(set_attr "type" "isel")]) +; Set Negative Boolean Condition (Reverse) +(define_insn "*setnbc_<un>signed_<GPR:mode>" + [(set (match_operand:GPR 0 "gpc_reg_operand" "=r") + (neg:GPR (match_operator:GPR 1 "scc_comparison_operator" + [(match_operand:CCEITHER 2 "cc_reg_operand" "y") + (const_int 0)])))] + "TARGET_FUTURE" + "setnbc %0,%j1" + [(set_attr "type" "isel")]) + +(define_insn "*setnbcr_<un>signed_<GPR:mode>" + [(set (match_operand:GPR 0 "gpc_reg_operand" "=r") + (neg:GPR (match_operator:GPR 1 "scc_rev_comparison_operator" + [(match_operand:CCEITHER 2 "cc_reg_operand" "y") + (const_int 0)])))] + "TARGET_FUTURE" + "setnbcr %0,%j1" + [(set_attr "type" "isel")]) + ;; Floating point conditional move (define_expand "mov<mode>cc" [(set (match_operand:SFDF 0 "gpc_reg_operand") @@ -12062,9 +12081,9 @@ (clobber (match_scratch:P 3 "=r")) (clobber (match_scratch:P 4 "=r")) (clobber (reg:P CA_REGNO))] - "" + "!TARGET_FUTURE" "#" - "" + "&& 1" [(parallel [(set (match_dup 4) (plus:P (match_dup 3) (const_int -1))) @@ -12094,9 +12113,9 @@ (clobber (match_scratch:P 3 "=r")) (clobber (match_scratch:P 4 "=r")) (clobber (reg:P CA_REGNO))] - "" + "!TARGET_FUTURE" "#" - "" + "&& 1" [(parallel [(set (match_dup 4) (neg:P (match_dup 3))) (set (reg:P CA_REGNO) |