aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Edelsohn <dje@gcc.gnu.org>2003-02-10 15:13:01 -0500
committerDavid Edelsohn <dje@gcc.gnu.org>2003-02-10 15:13:01 -0500
commit1b1edcfa616bfdff456dd08199063cc551e6edf9 (patch)
tree5a8b8503658c09e1bd895db36f4829441226cea4
parent848f2ce8d5c3c0d124ece9955122418bba9e5d55 (diff)
downloadgcc-1b1edcfa616bfdff456dd08199063cc551e6edf9.zip
gcc-1b1edcfa616bfdff456dd08199063cc551e6edf9.tar.gz
gcc-1b1edcfa616bfdff456dd08199063cc551e6edf9.tar.bz2
- Really commit ctz patch.
From-SVN: r62649
-rw-r--r--gcc/config/rs6000/rs6000.md70
1 files changed, 51 insertions, 19 deletions
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index 142159d..f814423 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -2364,15 +2364,21 @@
(const_int 0)))]
"")
-(define_expand "ffssi2"
+(define_insn "clzsi2"
+ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
+ (clz:SI (match_operand:SI 1 "gpc_reg_operand" "r")))]
+ ""
+ "{cntlz|cntlzw} %0,%1")
+
+(define_expand "ctzsi2"
[(set (match_dup 2)
- (neg:SI (match_operand:SI 1 "gpc_reg_operand" "r")))
+ (neg:SI (match_operand:SI 1 "gpc_reg_operand" "r")))
(parallel [(set (match_dup 3) (and:SI (match_dup 1)
- (match_dup 2)))
- (clobber (scratch:CC))])
+ (match_dup 2)))
+ (clobber (scratch:CC))])
(set (match_dup 4) (clz:SI (match_dup 3)))
(set (match_operand:SI 0 "gpc_reg_operand" "=r")
- (minus:SI (const_int 32) (match_dup 4)))]
+ (minus:SI (const_int 31) (match_dup 4)))]
""
{
operands[2] = gen_reg_rtx (SImode);
@@ -2380,12 +2386,22 @@
operands[4] = gen_reg_rtx (SImode);
})
-(define_insn "clzsi2"
- [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
- (clz:SI (match_operand:SI 1 "gpc_reg_operand" "r")))]
+(define_expand "ffssi2"
+ [(set (match_dup 2)
+ (neg:SI (match_operand:SI 1 "gpc_reg_operand" "r")))
+ (parallel [(set (match_dup 3) (and:SI (match_dup 1)
+ (match_dup 2)))
+ (clobber (scratch:CC))])
+ (set (match_dup 4) (clz:SI (match_dup 3)))
+ (set (match_operand:SI 0 "gpc_reg_operand" "=r")
+ (minus:SI (const_int 32) (match_dup 4)))]
""
- "{cntlz|cntlzw} %0,%1")
-
+ {
+ operands[2] = gen_reg_rtx (SImode);
+ operands[3] = gen_reg_rtx (SImode);
+ operands[4] = gen_reg_rtx (SImode);
+ })
+
(define_expand "mulsi3"
[(use (match_operand:SI 0 "gpc_reg_operand" ""))
(use (match_operand:SI 1 "gpc_reg_operand" ""))
@@ -6739,15 +6755,21 @@
(const_int 0)))]
"")
-(define_expand "ffsdi2"
+(define_insn "clzdi2"
+ [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
+ (clz:DI (match_operand:DI 1 "gpc_reg_operand" "r")))]
+ "TARGET_POWERPC64"
+ "cntlzd %0,%1")
+
+(define_expand "ctzdi2"
[(set (match_dup 2)
- (neg:DI (match_operand:DI 1 "gpc_reg_operand" "r")))
+ (neg:DI (match_operand:DI 1 "gpc_reg_operand" "r")))
(parallel [(set (match_dup 3) (and:DI (match_dup 1)
- (match_dup 2)))
- (clobber (scratch:CC))])
+ (match_dup 2)))
+ (clobber (scratch:CC))])
(set (match_dup 4) (clz:DI (match_dup 3)))
(set (match_operand:DI 0 "gpc_reg_operand" "=r")
- (minus:DI (const_int 64) (match_dup 4)))]
+ (minus:DI (const_int 63) (match_dup 4)))]
"TARGET_POWERPC64"
{
operands[2] = gen_reg_rtx (DImode);
@@ -6755,11 +6777,21 @@
operands[4] = gen_reg_rtx (DImode);
})
-(define_insn "clzdi2"
- [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
- (clz:DI (match_operand:DI 1 "gpc_reg_operand" "r")))]
+(define_expand "ffsdi2"
+ [(set (match_dup 2)
+ (neg:DI (match_operand:DI 1 "gpc_reg_operand" "r")))
+ (parallel [(set (match_dup 3) (and:DI (match_dup 1)
+ (match_dup 2)))
+ (clobber (scratch:CC))])
+ (set (match_dup 4) (clz:DI (match_dup 3)))
+ (set (match_operand:DI 0 "gpc_reg_operand" "=r")
+ (minus:DI (const_int 64) (match_dup 4)))]
"TARGET_POWERPC64"
- "cntlzd %0,%1")
+ {
+ operands[2] = gen_reg_rtx (DImode);
+ operands[3] = gen_reg_rtx (DImode);
+ operands[4] = gen_reg_rtx (DImode);
+ })
(define_insn "muldi3"
[(set (match_operand:DI 0 "gpc_reg_operand" "=r")