diff mbox series

[3/4] rs6000: New insns setnbc and setnbcr

Message ID 593f55fdb1f10c61073b51715919b698f68095c9.1588796541.git.wschmidt@linux.ibm.com
State New
Headers show
Series rs6000: setbnc and friends [pu] | expand

Commit Message

Bill Schmidt May 6, 2020, 8:31 p.m. UTC
setnbc[r] is like setbc[r], but it writes -1 instead of 1 to the GPR.

2020-05-06  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.
---
 gcc/config/rs6000/rs6000.md | 27 +++++++++++++++++++++++----
 1 file changed, 23 insertions(+), 4 deletions(-)
diff mbox series

Patch

diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index e8dc576779a..c02c2e1de72 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -5157,6 +5157,25 @@  (define_insn "*setbcr_<un>signed_<GPR:mode>"
   "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 @@  (define_insn_and_split "*neg_eq_<mode>"
    (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 @@  (define_insn_and_split "*neg_ne_<mode>"
    (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)