diff options
author | David Edelsohn <edelsohn@gnu.org> | 2005-10-07 14:29:29 +0000 |
---|---|---|
committer | David Edelsohn <dje@gcc.gnu.org> | 2005-10-07 10:29:29 -0400 |
commit | 05f680972a4639d8e0471b47ff2695fa577bab11 (patch) | |
tree | ceb5cb3788e1d05fc2d278c7231a0fd54e062382 /gcc | |
parent | cb1208528e75472c2f70cf9afa8453d210b8c823 (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.md | 21 |
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) |