aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorDavid Edelsohn <edelsohn@gnu.org>2005-10-07 14:29:29 +0000
committerDavid Edelsohn <dje@gcc.gnu.org>2005-10-07 10:29:29 -0400
commit05f680972a4639d8e0471b47ff2695fa577bab11 (patch)
treeceb5cb3788e1d05fc2d278c7231a0fd54e062382 /gcc
parentcb1208528e75472c2f70cf9afa8453d210b8c823 (diff)
downloadgcc-05f680972a4639d8e0471b47ff2695fa577bab11.zip
gcc-05f680972a4639d8e0471b47ff2695fa577bab11.tar.gz
gcc-05f680972a4639d8e0471b47ff2695fa577bab11.tar.bz2
rs6000.md (eqsi_power): New.
* config/rs6000/rs6000.md (eqsi_power): New. (neg_eq0si): Add TARGET_POWER to final condition. (neg_eqsi): Same. From-SVN: r105089
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/rs6000/rs6000.md21
2 files changed, 24 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 02b2999..249eb21 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index 58ada76..70a620f 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -11229,6 +11229,21 @@
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
@@ -11349,7 +11364,7 @@
[(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")])
@@ -11358,9 +11373,9 @@
[(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)