Faster popcnt_i32

This commit is contained in:
Someon1e 2024-03-03 20:54:53 +00:00
parent d6b7a232ac
commit 8c0c3ed14c

View File

@ -182,14 +182,12 @@ do
local bit_countrz = bit32.countrz local bit_countrz = bit32.countrz
local function popcnt_i32(num) local function popcnt_i32(num)
local count = 0 num = bit_and(num, 0x55555555) + bit_and(bit_rshift(num, 1), 0x55555555)
num = bit_and(num, 0x33333333) + bit_and(bit_rshift(num, 2), 0x33333333)
while num ~= 0 do num = bit_and(num, 0x0f0f0f0f) + bit_and(bit_rshift(num, 4), 0x0f0f0f0f)
num = bit_and(num, num - 1) num = bit_and(num, 0x00ff00ff) + bit_and(bit_rshift(num, 8), 0x00ff00ff)
count = count + 1 num = bit_and(num, 0x0000ffff) + bit_and(bit_rshift(num, 16), 0x0000ffff)
end return num
return count
end end
popcnt.i32 = popcnt_i32 popcnt.i32 = popcnt_i32