mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-21 23:51:18 +08:00
double-int.h (double_int_popcount): New inline function.
2012-07-17 Tom de Vries <tom@codesourcery.com> * double-int.h (double_int_popcount): New inline function. * hwint.c (popcount_hwi): New function. * hwint.h (popcount_hwi): Declare function. New inline function. From-SVN: r189575
This commit is contained in:
parent
a86ec59783
commit
440b6d590a
@ -1,3 +1,9 @@
|
||||
2012-07-17 Tom de Vries <tom@codesourcery.com>
|
||||
|
||||
* double-int.h (double_int_popcount): New inline function.
|
||||
* hwint.c (popcount_hwi): New function.
|
||||
* hwint.h (popcount_hwi): Declare function. New inline function.
|
||||
|
||||
2012-07-17 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* tree-vect-stmts.c (supportable_widening_operation): Remove decl
|
||||
|
@ -284,6 +284,14 @@ double_int_equal_p (double_int cst1, double_int cst2)
|
||||
return cst1.low == cst2.low && cst1.high == cst2.high;
|
||||
}
|
||||
|
||||
/* Return number of set bits of CST. */
|
||||
|
||||
static inline int
|
||||
double_int_popcount (double_int cst)
|
||||
{
|
||||
return popcount_hwi (cst.high) + popcount_hwi (cst.low);
|
||||
}
|
||||
|
||||
|
||||
/* Legacy interface with decomposed high/low parts. */
|
||||
|
||||
|
16
gcc/hwint.c
16
gcc/hwint.c
@ -107,6 +107,22 @@ ffs_hwi (unsigned HOST_WIDE_INT x)
|
||||
return 1 + floor_log2 (x & -x);
|
||||
}
|
||||
|
||||
/* Return the number of set bits in X. */
|
||||
|
||||
int
|
||||
popcount_hwi (unsigned HOST_WIDE_INT x)
|
||||
{
|
||||
int i, ret = 0;
|
||||
|
||||
for (i = 0; i < sizeof (x); i += 1)
|
||||
{
|
||||
ret += x & 1;
|
||||
x >>= 1;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
#endif /* GCC_VERSION < 3004 */
|
||||
|
||||
/* Compute the absolute value of X. */
|
||||
|
15
gcc/hwint.h
15
gcc/hwint.h
@ -179,6 +179,9 @@ extern int clz_hwi (unsigned HOST_WIDE_INT x);
|
||||
extern int ctz_hwi (unsigned HOST_WIDE_INT x);
|
||||
extern int ffs_hwi (unsigned HOST_WIDE_INT x);
|
||||
|
||||
/* Return the number of set bits in X. */
|
||||
extern int popcount_hwi (unsigned HOST_WIDE_INT x);
|
||||
|
||||
/* Return log2, or -1 if not exact. */
|
||||
extern int exact_log2 (unsigned HOST_WIDE_INT);
|
||||
|
||||
@ -231,6 +234,18 @@ ffs_hwi (unsigned HOST_WIDE_INT x)
|
||||
# endif
|
||||
}
|
||||
|
||||
static inline int
|
||||
popcount_hwi (unsigned HOST_WIDE_INT x)
|
||||
{
|
||||
# if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG
|
||||
return __builtin_popcountl (x);
|
||||
# elif HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONGLONG
|
||||
return __builtin_popcountll (x);
|
||||
# else
|
||||
return __builtin_popcount (x);
|
||||
# endif
|
||||
}
|
||||
|
||||
static inline int
|
||||
floor_log2 (unsigned HOST_WIDE_INT x)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user