aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSegher Boessenkool <segher@kernel.crashing.org>2020-05-07 18:31:27 -0500
committerBill Schmidt <wschmidt@linux.ibm.com>2020-05-07 18:31:27 -0500
commit057e1eedac864342866393f260295b2c73718595 (patch)
treeb1e0b8d3bdf8d39b0065e239da622685930fbbcf
parente473a6df6d55b9476439d05bbcb218fb98faf49f (diff)
downloadgcc-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/ChangeLog8
-rw-r--r--gcc/config/rs6000/rs6000.md27
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)