]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
toplev.h (floor_log2): If GCC_VERSION >= 3004, declare as static inline, not extern...
authorIan Lance Taylor <iant@google.com>
Tue, 16 Jun 2009 16:55:41 +0000 (16:55 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Tue, 16 Jun 2009 16:55:41 +0000 (16:55 +0000)
* toplev.h (floor_log2): If GCC_VERSION >= 3004, declare as static
inline, not extern inline.
(exact_log2): Likewise.
* toplev.c (floor_log2): Only define if GCC_VERSION < 3004. Don't
test CLZ_HWI.
(exact_log2): Likewise, but don't test CTZ_HWI.

From-SVN: r148540

gcc/ChangeLog
gcc/toplev.c
gcc/toplev.h

index 794442cc1e88e752ea941c11426bce39a0c63ef0..e87c4feb33f8dd6e34db4c54f3431e4a4bbe49f3 100644 (file)
@@ -1,3 +1,12 @@
+2009-06-16  Ian Lance Taylor  <iant@google.com>
+
+       * toplev.h (floor_log2): If GCC_VERSION >= 3004, declare as static
+       inline, not extern inline.
+       (exact_log2): Likewise.
+       * toplev.c (floor_log2): Only define if GCC_VERSION < 3004. Don't
+       test CLZ_HWI.
+       (exact_log2): Likewise, but don't test CTZ_HWI.
+
 2009-06-16  Ian Lance Taylor  <iant@google.com>
 
        * bitmap.c (bitmap_clear): Don't declare as inline.
index 267df5906ec3e898a32a45617d79c9582b94f9f9..483623882bf28e97adde22627431ff4072810464 100644 (file)
@@ -532,11 +532,11 @@ read_integral_parameter (const char *p, const char *pname, const int  defval)
   return atoi (p);
 }
 
-/* When compiling with a recent enough GCC, we use the GNU C "extern inline"
-   for floor_log2 and exact_log2; see toplev.h.  That construct, however,
-   conflicts with the ISO C++ One Definition Rule.   */
+#if GCC_VERSION < 3004
 
-#if GCC_VERSION < 3004 || !defined (__cplusplus)
+/* The functions floor_log2 and exact_log2 are defined as inline
+   functions in toplev.h if GCC_VERSION >= 3004.  The definitions here
+   are used for older versions of gcc.  */
 
 /* Given X, an unsigned number, return the largest int Y such that 2**Y <= X.
    If X is 0, return -1.  */
@@ -549,9 +549,6 @@ floor_log2 (unsigned HOST_WIDE_INT x)
   if (x == 0)
     return -1;
 
-#ifdef CLZ_HWI
-  t = HOST_BITS_PER_WIDE_INT - 1 - (int) CLZ_HWI (x);
-#else
   if (HOST_BITS_PER_WIDE_INT > 64)
     if (x >= (unsigned HOST_WIDE_INT) 1 << (t + 64))
       t += 64;
@@ -568,7 +565,6 @@ floor_log2 (unsigned HOST_WIDE_INT x)
     t += 2;
   if (x >= ((unsigned HOST_WIDE_INT) 1) << (t + 1))
     t += 1;
-#endif
 
   return t;
 }
@@ -581,14 +577,10 @@ exact_log2 (unsigned HOST_WIDE_INT x)
 {
   if (x != (x & -x))
     return -1;
-#ifdef CTZ_HWI
-  return x ? CTZ_HWI (x) : -1;
-#else
   return floor_log2 (x);
-#endif
 }
 
-#endif /*  GCC_VERSION < 3004 || !defined (__cplusplus)  */
+#endif /* GCC_VERSION < 3004 */
 
 /* Handler for fatal signals, such as SIGSEGV.  These are transformed
    into ICE messages, which is much more user friendly.  In case the
index e62aa727606f65d64c6d0604ec47c84c899757a0..cca68675f877d3352e1ab1303d325b46c13e7728 100644 (file)
@@ -169,14 +169,17 @@ extern void decode_d_option               (const char *);
 extern bool fast_math_flags_set_p      (void);
 extern bool fast_math_flags_struct_set_p (struct cl_optimization *);
 
+/* Inline versions of the above for speed.  */
+#if GCC_VERSION < 3004
+
 /* Return log2, or -1 if not exact.  */
 extern int exact_log2                  (unsigned HOST_WIDE_INT);
 
 /* Return floor of log2, with -1 for zero.  */
 extern int floor_log2                  (unsigned HOST_WIDE_INT);
 
-/* Inline versions of the above for speed.  */
-#if GCC_VERSION >= 3004
+#else /* GCC_VERSION >= 3004 */
+
 # if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG
 #  define CLZ_HWI __builtin_clzl
 #  define CTZ_HWI __builtin_ctzl
@@ -188,17 +191,18 @@ extern int floor_log2                  (unsigned HOST_WIDE_INT);
 #  define CTZ_HWI __builtin_ctz
 # endif
 
-extern inline int
+static inline int
 floor_log2 (unsigned HOST_WIDE_INT x)
 {
   return x ? HOST_BITS_PER_WIDE_INT - 1 - (int) CLZ_HWI (x) : -1;
 }
 
-extern inline int
+static inline int
 exact_log2 (unsigned HOST_WIDE_INT x)
 {
   return x == (x & -x) && x ? (int) CTZ_HWI (x) : -1;
 }
+
 #endif /* GCC_VERSION >= 3004 */
 
 /* Functions used to get and set GCC's notion of in what directory