rs6000.h (CLZ_DEFINED_VALUE_AT_ZERO): Define.
authorDavid Edelsohn <edelsohn@gnu.org>
Sat, 8 Feb 2003 01:51:26 +0000 (01:51 +0000)
committerDavid Edelsohn <dje@gcc.gnu.org>
Sat, 8 Feb 2003 01:51:26 +0000 (20:51 -0500)
        * 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

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

index 3c3bc7e5a4e8300a7d09ba300aef4ebe91771a10..92e0d2b1c209a857033f2572e90543cc9fd42e4f 100644 (file)
@@ -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.
index 7cfb3ccfdc42c17fabab6842747b330bf8ac8c0e..31c88a0b4050bd55218863b85f3d710698c2b976 100644 (file)
@@ -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.  */
index 6af6beeed3f4ffd94803ea08c9a46d9e9857edef..e4a17cf26af8f3b863d89d111c05e9b6343e92f1 100644 (file)
    (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)))]
   ""
      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")
 
    (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"
      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")