toplev.h (floor_log2): If GCC_VERSION >= 3004, declare as static inline, not extern inline.
* 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
This commit is contained in:
parent
5fd8300bd5
commit
9c727c9a3e
|
@ -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.
|
||||
|
|
18
gcc/toplev.c
18
gcc/toplev.c
|
@ -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
|
||||
|
|
12
gcc/toplev.h
12
gcc/toplev.h
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue