]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
200x-xx-xx Sandra Loosemore <sandra@codesourcery.com>
authorSandra Loosemore <sandra@codesourcery.com>
Fri, 19 Jan 2007 13:34:59 +0000 (08:34 -0500)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Fri, 19 Jan 2007 13:34:59 +0000 (13:34 +0000)
gcc/
200x-xx-xx  Sandra Loosemore  <sandra@codesourcery.com>

* longlong.h (count_leading_zeros, COUNT_LEADING_ZEROS_0): Add
ColdFire alternatives.
* config/m68k/m68k.h (CLZ_DEFINED_VALUE_AT_ZERO): New macro.
* config/m68k/m68k.md (clzsi2):  Define for ColdFire
architectures that support ff1 instruction.

From-SVN: r120959

gcc/ChangeLog
gcc/config/m68k/m68k.h
gcc/config/m68k/m68k.md
gcc/longlong.h

index 014c268ee8d37be9e31caea0bf0cdf703344d12c..ee405910c1952c815c4be36e5b77b4d65a6b2cd9 100644 (file)
@@ -1,3 +1,11 @@
+2007-01-19  Sandra Loosemore  <sandra@codesourcery.com>
+
+       * longlong.h (count_leading_zeros, COUNT_LEADING_ZEROS_0): Add
+       ColdFire alternatives.
+       * config/m68k/m68k.h (CLZ_DEFINED_VALUE_AT_ZERO): New macro.
+       * config/m68k/m68k.md (clzsi2):  Define for ColdFire
+       architectures that support ff1 instruction.
+
 2007-01-19  Richard Sandiford  <richard@codesourcery.com>
            Julian Brown  <julian@codesourcery.com>
 
index d373be7c468827f47b58b651ce21b24dc7c36770..e85c1d9b5fab1f7b8ebe7f0d2c69be8ef64a3bd5 100644 (file)
@@ -1006,6 +1006,9 @@ __transfer_from_trampoline ()                                     \
 
 #define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1
 
+/* The ColdFire FF1 instruction returns 32 for zero. */
+#define CLZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) ((VALUE) = 32, 1)
+
 #define STORE_FLAG_VALUE (-1)
 
 #define Pmode SImode
index c953ec2d4349a391cf60d1e48eb102ca0884e5ee..b3e72e78a407adfd8254952b0535d388dd7348bb 100644 (file)
   return "f<FP:prec>abs%.<FP:prec> %1,%0";
 })
 \f
+;; bit indexing instructions
+
+;; ColdFire ff1 instruction implements clz.
+(define_insn "clzsi2"
+  [(set (match_operand:SI 0 "register_operand" "=d")
+       (clz:SI (match_operand:SI 1 "register_operand" "0")))]
+  "TARGET_ISAAPLUS || TARGET_ISAC"
+  "ff1 %0")
+\f
 ;; one complement instructions
 
 ;; "one_cmpldi2" is mainly here to help combine().
index 1325b31f0c9061fa0bffd681e218cd296eeac262..8b512d2f2844102063573d3185e812c5fab1aeb0 100644 (file)
@@ -521,6 +521,11 @@ UDItype __umulsidi3 (USItype, USItype);
   __asm__ ("bfffo %1{%b2:%b2},%0"                                      \
           : "=d" ((USItype) (count))                                   \
           : "od" ((USItype) (x)), "n" (0))
+/* Some ColdFire architectures have a ff1 instruction supported via
+   __builtin_clz. */
+#elif defined (__mcfisaaplus__) || defined (__mcfisac__)
+#define count_leading_zeros(count,x) ((count) = __builtin_clz (x))
+#define COUNT_LEADING_ZEROS_0 32
 #endif
 #endif /* mc68000 */