diff --git a/codegen/luau/runtime/runtime.lua b/codegen/luau/runtime/runtime.lua index 0e99f3f..9b8fc3c 100644 --- a/codegen/luau/runtime/runtime.lua +++ b/codegen/luau/runtime/runtime.lua @@ -182,12 +182,12 @@ do local bit_countrz = bit32.countrz local function popcnt_i32(num) - num = bit_and(num, 0x55555555) + bit_and(bit_rshift(num, 1), 0x55555555) - 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, 0x00ff00ff) + bit_and(bit_rshift(num, 8), 0x00ff00ff) - num = bit_and(num, 0x0000ffff) + bit_and(bit_rshift(num, 16), 0x0000ffff) - return num + 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 + bit_rshift(num, 4)), 0x0F0F0F0F) + num = num + bit_rshift(num, 8) + num = num + bit_rshift(num, 16) + return bit_and(num, 0x0000003F) end popcnt.i32 = popcnt_i32