From 201f0b286fd412bd76d3db39789b14cfa48bfaad Mon Sep 17 00:00:00 2001 From: Rerumu Date: Sun, 26 Jun 2022 03:40:28 -0400 Subject: [PATCH] Expand inlineable runtime functions --- codegen/luajit/runtime/runtime.lua | 35 ------------------------------ codegen/luajit/src/translator.rs | 21 +++++++++--------- codegen/luau/runtime/runtime.lua | 9 -------- codegen/luau/src/translator.rs | 14 ++++++------ 4 files changed, 18 insertions(+), 61 deletions(-) diff --git a/codegen/luajit/runtime/runtime.lua b/codegen/luajit/runtime/runtime.lua index bd1c80a..7d441f8 100644 --- a/codegen/luajit/runtime/runtime.lua +++ b/codegen/luajit/runtime/runtime.lua @@ -261,41 +261,6 @@ do module.gt = gt 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 local wrap = {} local trunc = {} diff --git a/codegen/luajit/src/translator.rs b/codegen/luajit/src/translator.rs index 7c5045d..6657a6c 100644 --- a/codegen/luajit/src/translator.rs +++ b/codegen/luajit/src/translator.rs @@ -214,17 +214,18 @@ fn build_func_list(wasm: &Module, type_info: &TypeInfo) -> Vec { } fn write_local_operation(head: &str, tail: &str, w: &mut dyn Write) -> Result<()> { + write!(w, "local {head}_{tail} = ")?; + match (head, tail) { - ("band" | "bor" | "bxor", _) => { - write!(w, "local {head}_{tail} = bit.{head} ") - } - ("abs" | "ceil" | "floor" | "sqrt" | "min" | "max", _) => { - write!(w, "local {head}_{tail} = math.{head} ") - } - ("rem", "i32") => { - write!(w, "local {head}_{tail} = math.fmod ") - } - _ => write!(w, "local {head}_{tail} = rt.{head}.{tail} "), + ("abs" | "ceil" | "floor" | "sqrt" | "min" | "max", _) => write!(w, "math.{head} "), + ("rem", "i32") => write!(w, "math.fmod "), + ("band" | "bor" | "bxor" | "bnot", _) => write!(w, "bit.{head} "), + ("shl", _) => write!(w, "bit.lshift "), + ("shr", "i32" | "i64") => write!(w, "bit.arshift "), + ("shr", "u32" | "u64") => write!(w, "bit.rshift "), + ("rotl", _) => write!(w, "bit.rol "), + ("rotr", _) => write!(w, "bit.ror "), + _ => write!(w, "rt.{head}.{tail} "), } } diff --git a/codegen/luau/runtime/runtime.lua b/codegen/luau/runtime/runtime.lua index cd4b439..26a7299 100644 --- a/codegen/luau/runtime/runtime.lua +++ b/codegen/luau/runtime/runtime.lua @@ -177,13 +177,8 @@ do end do - local clz = {} - local ctz = {} local popcnt = {} - clz.i32 = bit32.countlz - ctz.i32 = bit32.countrz - function popcnt.i32(num) local count = 0 @@ -195,8 +190,6 @@ do return count end - module.clz = clz - module.ctz = ctz module.popcnt = popcnt end @@ -272,8 +265,6 @@ do local bxor = {} local bnot = {} - bnot.i32 = bit32.bnot - band.i64 = I64.bit_and bor.i64 = I64.bit_or bxor.i64 = I64.bit_xor diff --git a/codegen/luau/src/translator.rs b/codegen/luau/src/translator.rs index ab698e8..bd811be 100644 --- a/codegen/luau/src/translator.rs +++ b/codegen/luau/src/translator.rs @@ -213,14 +213,14 @@ fn build_func_list(wasm: &Module, type_info: &TypeInfo) -> Vec { } fn write_local_operation(head: &str, tail: &str, w: &mut dyn Write) -> Result<()> { + write!(w, "local {head}_{tail} = ")?; + match (head, tail) { - ("band" | "bor" | "bxor", "i32") => { - write!(w, "local {head}_{tail} = bit32.{head} ") - } - ("abs" | "ceil" | "floor" | "sqrt", _) => { - write!(w, "local {head}_{tail} = math.{head} ") - } - _ => write!(w, "local {head}_{tail} = rt.{head}.{tail} "), + ("abs" | "ceil" | "floor" | "sqrt", _) => write!(w, "math.{head} "), + ("band" | "bor" | "bxor" | "bnot", "i32") => write!(w, "bit32.{head} "), + ("clz", "i32") => write!(w, "bit32.countlz "), + ("ctz", "i32") => write!(w, "bit32.countrz "), + _ => write!(w, "rt.{head}.{tail} "), } }