Expand inlineable runtime functions

This commit is contained in:
Rerumu 2022-06-26 03:40:28 -04:00
parent 75582f40bf
commit 201f0b286f
4 changed files with 18 additions and 61 deletions

View File

@ -261,41 +261,6 @@ do
module.gt = gt module.gt = gt
end end
do
local bnot = {}
bnot.i32 = bit.bnot
bnot.i64 = bit.bnot
module.bnot = bnot
end
do
local shl = {}
local shr = {}
local rotl = {}
local rotr = {}
shl.i32 = bit.lshift
shl.u32 = bit.lshift
shr.i32 = bit.arshift
shr.u32 = bit.rshift
rotl.i32 = bit.rol
rotr.i32 = bit.ror
shl.i64 = bit.lshift
shl.u64 = bit.lshift
shr.i64 = bit.arshift
shr.u64 = bit.rshift
rotl.i64 = bit.rol
rotr.i64 = bit.ror
module.shl = shl
module.shr = shr
module.rotl = rotl
module.rotr = rotr
end
do do
local wrap = {} local wrap = {}
local trunc = {} local trunc = {}

View File

@ -214,17 +214,18 @@ fn build_func_list(wasm: &Module, type_info: &TypeInfo) -> Vec<FuncData> {
} }
fn write_local_operation(head: &str, tail: &str, w: &mut dyn Write) -> Result<()> { fn write_local_operation(head: &str, tail: &str, w: &mut dyn Write) -> Result<()> {
write!(w, "local {head}_{tail} = ")?;
match (head, tail) { match (head, tail) {
("band" | "bor" | "bxor", _) => { ("abs" | "ceil" | "floor" | "sqrt" | "min" | "max", _) => write!(w, "math.{head} "),
write!(w, "local {head}_{tail} = bit.{head} ") ("rem", "i32") => write!(w, "math.fmod "),
} ("band" | "bor" | "bxor" | "bnot", _) => write!(w, "bit.{head} "),
("abs" | "ceil" | "floor" | "sqrt" | "min" | "max", _) => { ("shl", _) => write!(w, "bit.lshift "),
write!(w, "local {head}_{tail} = math.{head} ") ("shr", "i32" | "i64") => write!(w, "bit.arshift "),
} ("shr", "u32" | "u64") => write!(w, "bit.rshift "),
("rem", "i32") => { ("rotl", _) => write!(w, "bit.rol "),
write!(w, "local {head}_{tail} = math.fmod ") ("rotr", _) => write!(w, "bit.ror "),
} _ => write!(w, "rt.{head}.{tail} "),
_ => write!(w, "local {head}_{tail} = rt.{head}.{tail} "),
} }
} }

View File

@ -177,13 +177,8 @@ do
end end
do do
local clz = {}
local ctz = {}
local popcnt = {} local popcnt = {}
clz.i32 = bit32.countlz
ctz.i32 = bit32.countrz
function popcnt.i32(num) function popcnt.i32(num)
local count = 0 local count = 0
@ -195,8 +190,6 @@ do
return count return count
end end
module.clz = clz
module.ctz = ctz
module.popcnt = popcnt module.popcnt = popcnt
end end
@ -272,8 +265,6 @@ do
local bxor = {} local bxor = {}
local bnot = {} local bnot = {}
bnot.i32 = bit32.bnot
band.i64 = I64.bit_and band.i64 = I64.bit_and
bor.i64 = I64.bit_or bor.i64 = I64.bit_or
bxor.i64 = I64.bit_xor bxor.i64 = I64.bit_xor

View File

@ -213,14 +213,14 @@ fn build_func_list(wasm: &Module, type_info: &TypeInfo) -> Vec<FuncData> {
} }
fn write_local_operation(head: &str, tail: &str, w: &mut dyn Write) -> Result<()> { fn write_local_operation(head: &str, tail: &str, w: &mut dyn Write) -> Result<()> {
write!(w, "local {head}_{tail} = ")?;
match (head, tail) { match (head, tail) {
("band" | "bor" | "bxor", "i32") => { ("abs" | "ceil" | "floor" | "sqrt", _) => write!(w, "math.{head} "),
write!(w, "local {head}_{tail} = bit32.{head} ") ("band" | "bor" | "bxor" | "bnot", "i32") => write!(w, "bit32.{head} "),
} ("clz", "i32") => write!(w, "bit32.countlz "),
("abs" | "ceil" | "floor" | "sqrt", _) => { ("ctz", "i32") => write!(w, "bit32.countrz "),
write!(w, "local {head}_{tail} = math.{head} ") _ => write!(w, "rt.{head}.{tail} "),
}
_ => write!(w, "local {head}_{tail} = rt.{head}.{tail} "),
} }
} }