Add i64 sign extension for i8 and i16

This commit is contained in:
Rerumu 2022-06-29 23:55:08 -04:00
parent 64ae35c658
commit 76cb3b36be

View File

@ -442,6 +442,34 @@ do
end end
end end
function extend.i64_i8(num)
local data_1, _ = num_into_u32(num)
data_1 = bit_and(data_1, 0xFF)
if data_1 >= 0x80 then
local temp = num_from_u32(-data_1 + 0x100, 0)
return num_negate(temp)
else
return num_from_u32(data_1, 0)
end
end
function extend.i64_i16(num)
local data_1, _ = num_into_u32(num)
data_1 = bit_and(data_1, 0xFFFF)
if data_1 >= 0x8000 then
local temp = num_from_u32(-data_1 + 0x10000, 0)
return num_negate(temp)
else
return num_from_u32(data_1, 0)
end
end
function extend.i64_i32(num) function extend.i64_i32(num)
if num >= 0x80000000 then if num >= 0x80000000 then
local temp = num_from_u32(-num + 0x100000000, 0) local temp = num_from_u32(-num + 0x100000000, 0)