Even faster popcnt_i32
This commit is contained in:
parent
d11dc2d582
commit
3157f427d1
@ -182,12 +182,12 @@ do
|
|||||||
local bit_countrz = bit32.countrz
|
local bit_countrz = bit32.countrz
|
||||||
|
|
||||||
local function popcnt_i32(num)
|
local function popcnt_i32(num)
|
||||||
num = bit_and(num, 0x55555555) + bit_and(bit_rshift(num, 1), 0x55555555)
|
num = num - bit_and(bit_rshift(num, 1), 0x55555555)
|
||||||
num = bit_and(num, 0x33333333) + bit_and(bit_rshift(num, 2), 0x33333333)
|
num = bit_and(num, 0x33333333) + bit_and(bit_rshift(num, 2), 0x33333333)
|
||||||
num = bit_and(num, 0x0f0f0f0f) + bit_and(bit_rshift(num, 4), 0x0f0f0f0f)
|
num = bit_and((num + bit_rshift(num, 4)), 0x0F0F0F0F)
|
||||||
num = bit_and(num, 0x00ff00ff) + bit_and(bit_rshift(num, 8), 0x00ff00ff)
|
num = num + bit_rshift(num, 8)
|
||||||
num = bit_and(num, 0x0000ffff) + bit_and(bit_rshift(num, 16), 0x0000ffff)
|
num = num + bit_rshift(num, 16)
|
||||||
return num
|
return bit_and(num, 0x0000003F)
|
||||||
end
|
end
|
||||||
|
|
||||||
popcnt.i32 = popcnt_i32
|
popcnt.i32 = popcnt_i32
|
||||||
|
Loading…
x
Reference in New Issue
Block a user