* config/rs6000/rs6000.md (eqsi_power): New.
authordje <dje@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 7 Oct 2005 14:29:29 +0000 (14:29 +0000)
committerdje <dje@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 7 Oct 2005 14:29:29 +0000 (14:29 +0000)
(neg_eq0si): Add TARGET_POWER to final condition.
(neg_eqsi): Same.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@105089 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/rs6000/rs6000.md

index 02b2999..249eb21 100644 (file)
@@ -1,3 +1,9 @@
+2005-10-07  David Edelsohn  <edelsohn@gnu.org>
+
+       * config/rs6000/rs6000.md (eqsi_power): New.
+       (neg_eq0si): Add TARGET_POWER to final condition.
+       (neg_eqsi): Same.
+
 2005-10-06  Richard Henderson  <rth@redhat.com>
 
        * config/rs6000/rs6000.c: Revert last change.
index 58ada76..70a620f 100644 (file)
     operands[5] = GEN_INT (exact_log2 (GET_MODE_BITSIZE (<MODE>mode)));
   })
 
+(define_insn "*eqsi_power"
+  [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r,r,r,r")
+       (eq:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r,r,r,r")
+              (match_operand:SI 2 "reg_or_cint_operand" "r,O,K,L,I")))
+   (clobber (match_scratch:SI 3 "=r,&r,r,r,r"))]
+  "TARGET_POWER"
+  "@
+   xor %0,%1,%2\;{sfi|subfic} %3,%0,0\;{ae|adde} %0,%3,%0
+   {sfi|subfic} %3,%1,0\;{ae|adde} %0,%3,%1
+   {xoril|xori} %0,%1,%b2\;{sfi|subfic} %3,%0,0\;{ae|adde} %0,%3,%0
+   {xoriu|xoris} %0,%1,%u2\;{sfi|subfic} %3,%0,0\;{ae|adde} %0,%3,%0
+   {sfi|subfic} %0,%1,%2\;{sfi|subfic} %3,%0,0\;{ae|adde} %0,%3,%0"
+  [(set_attr "type" "three,two,three,three,three")
+   (set_attr "length" "12,8,12,12,12")])
+
 ;; We have insns of the form shown by the first define_insn below.  If
 ;; there is something inside the comparison operation, we must split it.
 (define_split
   [(set (match_operand:P 0 "gpc_reg_operand" "=r")
        (neg:P (eq:P (match_operand:P 1 "gpc_reg_operand" "r")
                     (const_int 0))))]
-  "optimize_size"
+  "optimize_size || TARGET_POWER"
   "{ai|addic} %0,%1,-1\;{sfe|subfe} %0,%0,%0"
   [(set_attr "type" "two")
    (set_attr "length" "8")])
   [(set (match_operand:P 0 "gpc_reg_operand" "=r")
        (neg:P (eq:P (match_operand:P 1 "gpc_reg_operand" "%r")
                     (match_operand:P 2 "scc_eq_operand" "<scc_eq_op2>"))))]
-  "optimize_size"
+  "optimize_size || TARGET_POWER"
   "#"
-  "optimize_size"
+  "optimize_size || TARGET_POWER"
   [(set (match_dup 0) (neg:P (eq:P (match_dup 3) (const_int 0))))]
   {
     if (GET_CODE (operands[2]) != CONST_INT || INTVAL (operands[2]) != 0)