aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorDavid Edelsohn <edelsohn@gnu.org>2003-02-08 01:51:26 +0000
committerDavid Edelsohn <dje@gcc.gnu.org>2003-02-07 20:51:26 -0500
commitd865b1226d3edfe48b70f79e3910dc90a9429ad8 (patch)
treee9e3154deacd6fdad9457a861d384badab2e3afd /gcc
parent8f37dd984b5783b5566836ccba59f6e71527d564 (diff)
downloadgcc-d865b1226d3edfe48b70f79e3910dc90a9429ad8.zip
gcc-d865b1226d3edfe48b70f79e3910dc90a9429ad8.tar.gz
gcc-d865b1226d3edfe48b70f79e3910dc90a9429ad8.tar.bz2
rs6000.h (CLZ_DEFINED_VALUE_AT_ZERO): Define.
* config/rs6000/rs6000.h (CLZ_DEFINED_VALUE_AT_ZERO): Define. * config/rs6000/rs6000.md (clzsi2): Rename from cntlzw2. (ffssi2): Use clz instead of unspec. (clzdi2): Rename from cntlzd2. (ffsdi2): Use clz instead of unspec. From-SVN: r62570
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/config/rs6000/rs6000.h4
-rw-r--r--gcc/config/rs6000/rs6000.md12
3 files changed, 18 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3c3bc7e..92e0d2b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2003-02-07 David Edelsohn <edelsohn@gnu.org>
+
+ * config/rs6000/rs6000.h (CLZ_DEFINED_VALUE_AT_ZERO): Define.
+ * config/rs6000/rs6000.md (clzsi2): Rename from cntlzw2.
+ (ffssi2): Use clz instead of unspec.
+ (clzdi2): Rename from cntlzd2.
+ (ffsdi2): Use clz instead of unspec.
+
2003-02-07 Loren James Rittle <ljrittle@acm.org>
* config/alpha/freebsd.h (LINK_SPEC): Weaken error to notice.
diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
index 7cfb3cc..31c88a0 100644
--- a/gcc/config/rs6000/rs6000.h
+++ b/gcc/config/rs6000/rs6000.h
@@ -2270,6 +2270,10 @@ do { \
is done just by pretending it is already truncated. */
#define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1
+/* The cntlzw and cntlzd instructions return 32 and 64 for zero. */
+#define CLZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) \
+ ((VALUE) = ((MODE) == SImode ? 32 : 64))
+
/* Specify the machine mode that pointers have.
After generation of rtl, the compiler makes no further distinction
between pointers and any other objects of this machine mode. */
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index 6af6bee..e4a17cf 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -2371,7 +2371,7 @@
(parallel [(set (match_dup 3) (and:SI (match_dup 1)
(match_dup 2)))
(clobber (scratch:CC))])
- (set (match_dup 4) (unspec:SI [(match_dup 3)] 21))
+ (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)))]
""
@@ -2381,9 +2381,9 @@
operands[4] = gen_reg_rtx (SImode);
})
-(define_insn "cntlzw2"
+(define_insn "clzsi2"
[(set (match_operand:SI 0 "gpc_reg_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "gpc_reg_operand" "r")] 21))]
+ (clz:SI (match_operand:SI 1 "gpc_reg_operand" "r")))]
""
"{cntlz|cntlzw} %0,%1")
@@ -6746,7 +6746,7 @@
(parallel [(set (match_dup 3) (and:DI (match_dup 1)
(match_dup 2)))
(clobber (scratch:CC))])
- (set (match_dup 4) (unspec:DI [(match_dup 3)] 21))
+ (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"
@@ -6756,9 +6756,9 @@
operands[4] = gen_reg_rtx (DImode);
})
-(define_insn "cntlzd2"
+(define_insn "clzdi2"
[(set (match_operand:DI 0 "gpc_reg_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "gpc_reg_operand" "r")] 21))]
+ (clz:DI (match_operand:DI 1 "gpc_reg_operand" "r")))]
"TARGET_POWERPC64"
"cntlzd %0,%1")