-
-/* The following functions accept a wide integer argument. Rather
- than having to cast on every function call, we use a macro instead. */
-
-#ifndef exact_log2
-#define exact_log2(N) exact_log2_wide ((unsigned HOST_WIDE_INT) (N))
-
-#if (__GNUC__ * 1000 + __GNUC_MINOR__) >= 3004
-#if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONGLONG
-#define FL2T__ HOST_WIDE_INT
-#define FL2T_CLZ__ __builtin_clzll
-#else
-#if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG
-#define FL2T__ HOST_WIDE_INT
-#define FL2T_CLZ__ __builtin_clzl
-#else
-#define FL2T__ int
-#define FL2T_CLZ__ __builtin_clz
-#endif
-#endif
-static inline int floor_log2(FL2T__ n)
+extern bool fast_math_flags_struct_set_p (struct cl_optimization *);
+
+/* 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
+# if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG
+# define CLZ_HWI __builtin_clzl
+# define CTZ_HWI __builtin_ctzl
+# elif HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONGLONG
+# define CLZ_HWI __builtin_clzll
+# define CTZ_HWI __builtin_ctzll
+# else
+# define CLZ_HWI __builtin_clz
+# define CTZ_HWI __builtin_ctz
+# endif
+
+extern inline int
+floor_log2 (unsigned HOST_WIDE_INT x)