Add some missing memory functions

This commit is contained in:
Rerumu 2022-06-16 19:54:18 -04:00
parent 99e74e7ea1
commit 0c87c61e01

View File

@ -411,6 +411,9 @@ do
local string_byte = string.byte local string_byte = string.byte
local string_unpack = string.unpack local string_unpack = string.unpack
local reinterpret_f32_i32 = module.reinterpret.f32_i32
local reinterpret_f64_i64 = module.reinterpret.f64_i64
local function load_byte(data, addr) local function load_byte(data, addr)
local value = data[math_floor(addr / 4)] or 0 local value = data[math_floor(addr / 4)] or 0
@ -426,17 +429,37 @@ do
function load.i32_i8(memory, addr) function load.i32_i8(memory, addr)
local b = load_byte(memory.data, addr) local b = load_byte(memory.data, addr)
if b > 0x7F then if b >= 0x80 then
b = b - 0x100 return to_u32(b - 0x100)
end else
return b return b
end end
end
function load.i32_u8(memory, addr) function load.i32_u8(memory, addr)
return load_byte(memory.data, addr) return load_byte(memory.data, addr)
end end
function load.i32_i16(memory, addr)
local data = memory.data
local num
if addr % 4 == 0 then
num = bit_band(data[addr / 4] or 0, 0xFFFF)
else
local b1 = load_byte(data, addr)
local b2 = bit_lshift(load_byte(data, addr + 1), 8)
num = bit_bor(b1, b2)
end
if num >= 0x8000 then
return to_u32(num - 0x10000)
else
return num
end
end
function load.i32(memory, addr) function load.i32(memory, addr)
local data = memory.data local data = memory.data
@ -463,10 +486,29 @@ do
return num_from_u32(data_1, data_2) return num_from_u32(data_1, data_2)
end end
local load_i64 = load.i64
function load.f32(memory, addr)
local raw = load_i32(memory, addr)
return reinterpret_f32_i32(raw)
end
function load.f64(memory, addr)
local raw = load_i64(memory, addr)
return reinterpret_f64_i64(raw)
end
function store.i32_n8(memory, addr, value) function store.i32_n8(memory, addr, value)
store_byte(memory.data, addr, value) store_byte(memory.data, addr, value)
end end
function store.i32_n16(memory, addr, value)
store_byte(memory.data, addr, value)
store_byte(memory.data, addr + 1, bit_rshift(value, 8))
end
function store.i32(memory, addr, value) function store.i32(memory, addr, value)
local data = memory.data local data = memory.data