mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
string.c (popcount): support when sizeof(int) == 4
This function is used when the compiler does not support builtin popcount operation (namely VC++).
This commit is contained in:
+2
-1
@@ -407,12 +407,13 @@ mrb_utf8len(const char* p, const char* e)
|
||||
# define popcount(x) __builtin_popcountl(x)
|
||||
# endif
|
||||
#else
|
||||
#define POPC_SHIFT (8 * sizeof(bitint) - 8)
|
||||
static inline uint32_t popcount(bitint x)
|
||||
{
|
||||
x = (x & (MASK01*0x55)) + ((x >> 1) & (MASK01*0x55));
|
||||
x = (x & (MASK01*0x33)) + ((x >> 2) & (MASK01*0x33));
|
||||
x = (x & (MASK01*0x0F)) + ((x >> 4) & (MASK01*0x0F));
|
||||
return (x * MASK01) >> 56;
|
||||
return (uint32_t)((x * MASK01) >> POPC_SHIFT);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user