19 #ifndef OPAL_BIT_OPS_H
20 #define OPAL_BIT_OPS_H
42 static inline int opal_hibit(
int value,
int start)
46 #if OPAL_C_HAVE_BUILTIN_CLZ
48 mask = value & ((1 << start) - 1);
50 if (OPAL_UNLIKELY (0 == mask)) {
54 start = (8*
sizeof(int)-1) - __builtin_clz(mask);
59 for (; start >= 0; --start, mask >>= 1) {
85 static inline int opal_cube_dim(
int value)
89 #if OPAL_C_HAVE_BUILTIN_CLZ
90 if (OPAL_UNLIKELY (1 >= value)) {
93 size = 8 *
sizeof(int);
94 dim = size - __builtin_clz(value-1);
96 for (dim = 0, size = 1; size < value; ++dim, size <<= 1) ;
115 static inline int opal_next_poweroftwo(
int value)
119 #if OPAL_C_HAVE_BUILTIN_CLZ
120 if (OPAL_UNLIKELY (0 == value)) {
123 power2 = 1 << (8 *
sizeof (int) - __builtin_clz(value));
125 for (power2 = 1; value > 0; value >>= 1, power2 <<= 1) ;
144 static inline int opal_next_poweroftwo_inclusive(
int value)
148 #if OPAL_C_HAVE_BUILTIN_CLZ
149 if (OPAL_UNLIKELY (1 >= value)) {
152 power2 = 1 << (8 *
sizeof (int) - __builtin_clz(value - 1));
154 for (power2 = 1 ; power2 < value; power2 <<= 1) ;
Compiler-specific prefetch functions.