From b8362d9e664fdeb38c8764c20fd60071dbe375ae Mon Sep 17 00:00:00 2001 From: Rerumu Date: Mon, 27 Jun 2022 19:57:31 -0400 Subject: [PATCH] Add `i32` sign extension --- codegen/luau/runtime/runtime.lua | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/codegen/luau/runtime/runtime.lua b/codegen/luau/runtime/runtime.lua index c170d58..335db0a 100644 --- a/codegen/luau/runtime/runtime.lua +++ b/codegen/luau/runtime/runtime.lua @@ -385,6 +385,26 @@ do trunc.f64 = trunc.f32 + function extend.i32_i8(num) + num = bit_and(num, 0xFF) + + if num >= 0x80 then + return to_u32(num - 0x100) + else + return num + end + end + + function extend.i32_i16(num) + num = bit_and(num, 0xFFFF) + + if num >= 0x8000 then + return to_u32(num - 0x10000) + else + return num + end + end + function extend.i64_i32(num) if num > MAX_SIGNED then local temp = num_from_u32(-num + BIT_SET_32, 0)