Simplify LuaJIT comparisons and shifts

This commit is contained in:
Rerumu 2021-11-17 02:11:23 -05:00
parent 55dbf8ee32
commit 9aa0304384

View File

@ -39,14 +39,22 @@ do
module.ge = ge module.ge = ge
module.gt = gt module.gt = gt
function ge.u32(lhs, rhs) return u32(lhs) >= u32(rhs) and 1 or 0 end local function to_boolean(cond)
function ge.u64(lhs, rhs) return u64(lhs) >= u64(rhs) and 1 or 0 end if cond then
function gt.u32(lhs, rhs) return u32(lhs) > u32(rhs) and 1 or 0 end return 1
function gt.u64(lhs, rhs) return u64(lhs) > u64(rhs) and 1 or 0 end else
function le.u32(lhs, rhs) return u32(lhs) <= u32(rhs) and 1 or 0 end return 0
function le.u64(lhs, rhs) return u64(lhs) <= u64(rhs) and 1 or 0 end end
function lt.u32(lhs, rhs) return u32(lhs) < u32(rhs) and 1 or 0 end end
function lt.u64(lhs, rhs) return u64(lhs) < u64(rhs) and 1 or 0 end
function ge.u32(lhs, rhs) return to_boolean(u32(lhs) >= u32(rhs)) end
function ge.u64(lhs, rhs) return to_boolean(u64(lhs) >= u64(rhs)) end
function gt.u32(lhs, rhs) return to_boolean(u32(lhs) > u32(rhs)) end
function gt.u64(lhs, rhs) return to_boolean(u64(lhs) > u64(rhs)) end
function le.u32(lhs, rhs) return to_boolean(u32(lhs) <= u32(rhs)) end
function le.u64(lhs, rhs) return to_boolean(u64(lhs) <= u64(rhs)) end
function lt.u32(lhs, rhs) return to_boolean(u32(lhs) < u32(rhs)) end
function lt.u64(lhs, rhs) return to_boolean(u64(lhs) < u64(rhs)) end
end end
do do
@ -77,10 +85,29 @@ do
module.shl = shl module.shl = shl
module.shr = shr module.shr = shr
function shl.u32(lhs, rhs) return i32(bit.lshift(u32(lhs), rhs)) end function shl.u32(lhs, rhs)
function shl.u64(lhs, rhs) return i64(bit.lshift(u64(lhs), rhs)) end local v = bit.lshift(u32(lhs), rhs)
function shr.u32(lhs, rhs) return i32(bit.rshift(u32(lhs), rhs)) end
function shr.u64(lhs, rhs) return i64(bit.rshift(u64(lhs), rhs)) end return tonumber(i32(v))
end
function shl.u64(lhs, rhs)
local v = bit.lshift(u64(lhs), rhs)
return i64(v)
end
function shr.u32(lhs, rhs)
local v = bit.rshift(u32(lhs), rhs)
return tonumber(i32(v))
end
function shr.u64(lhs, rhs)
local v = bit.rshift(u64(lhs), rhs)
return i64(v)
end
shl.i32 = bit.lshift shl.i32 = bit.lshift
shl.i64 = bit.lshift shl.i64 = bit.lshift