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>
|
2012-07-17 Richard Henderson <rth@redhat.com>
|
||||||
|
|
||||||
* tree-vect-stmts.c (supportable_widening_operation): Remove decl
|
* 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 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. */
|
/* 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 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 */
|
#endif /* GCC_VERSION < 3004 */
|
||||||
|
|
||||||
/* Compute the absolute value of X. */
|
/* 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 ctz_hwi (unsigned HOST_WIDE_INT x);
|
||||||
extern int ffs_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. */
|
/* Return log2, or -1 if not exact. */
|
||||||
extern int exact_log2 (unsigned HOST_WIDE_INT);
|
extern int exact_log2 (unsigned HOST_WIDE_INT);
|
||||||
|
|
||||||
|
@ -231,6 +234,18 @@ ffs_hwi (unsigned HOST_WIDE_INT x)
|
||||||
# endif
|
# 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
|
static inline int
|
||||||
floor_log2 (unsigned HOST_WIDE_INT x)
|
floor_log2 (unsigned HOST_WIDE_INT x)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue