From 55dbf8ee32d64f26b1ba533e58189808359be1f6 Mon Sep 17 00:00:00 2001 From: Rerumu Date: Wed, 17 Nov 2021 01:28:57 -0500 Subject: [PATCH] Implement loading i8 --- runtime/luajit.lua | 2 ++ runtime/luau.lua | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/runtime/luajit.lua b/runtime/luajit.lua index 13a9b7d..38ca2c5 100644 --- a/runtime/luajit.lua +++ b/runtime/luajit.lua @@ -7,6 +7,7 @@ local module = {} local vla_u8 = ffi.typeof('uint8_t[?]') +local ptr_i8 = ffi.typeof('int8_t *') local ptr_i64 = ffi.typeof('int64_t *') local ptr_i32 = ffi.typeof('int32_t *') @@ -105,6 +106,7 @@ do module.load = load module.store = store + function load.i32_i8(memory, addr) return ffi.cast(ptr_i8, memory.data)[addr] end function load.i32_u8(memory, addr) return memory.data[addr] end function load.i32(memory, addr) return ffi.cast(ptr_i32, memory.data + addr)[0] end function load.i64(memory, addr) return ffi.cast(ptr_i64, memory.data + addr)[0] end diff --git a/runtime/luau.lua b/runtime/luau.lua index 8376054..296e470 100644 --- a/runtime/luau.lua +++ b/runtime/luau.lua @@ -130,6 +130,14 @@ do memory.data[adjust] = bit32.bor(lhs, rhs) end + function load.i32_i8(memory, addr) + local b = load_byte(memory, addr) + + if b > 0x7F then b = b - 0x100 end + + return b + end + load.i32_u8 = load_byte function load.i32(memory, addr)