Fix i64 sign extension for i32

This commit is contained in:
Rerumu
2022-06-29 23:53:02 -04:00
parent 76cb3b36be
commit 6e0debe287
3 changed files with 44 additions and 27 deletions
+8 -6
View File
@@ -331,7 +331,7 @@ do
trunc.f32 = truncate
trunc.f64 = truncate
function extend.i32_i8(num)
function extend.i32_n8(num)
num = bit_and(num, 0xFF)
if num >= 0x80 then
@@ -341,7 +341,7 @@ do
end
end
function extend.i32_i16(num)
function extend.i32_n16(num)
num = bit_and(num, 0xFFFF)
if num >= 0x8000 then
@@ -351,7 +351,7 @@ do
end
end
function extend.i64_i8(num)
function extend.i64_n8(num)
num = bit_and(num, 0xFF)
if num >= 0x80 then
@@ -361,7 +361,7 @@ do
end
end
function extend.i64_i16(num)
function extend.i64_n16(num)
num = bit_and(num, 0xFFFF)
if num >= 0x8000 then
@@ -371,7 +371,7 @@ do
end
end
function extend.i64_i32(num)
function extend.i64_n32(num)
num = bit_and(num, 0xFFFFFFFF)
if num >= 0x80000000 then
@@ -381,7 +381,9 @@ do
end
end
function extend.u64_i32(num)
extend.i64_i32 = i64
function extend.i64_u32(num)
RE_INSTANCE.i64 = ID_ZERO
RE_INSTANCE.i32 = num
+17 -5
View File
@@ -422,7 +422,7 @@ do
trunc.f64 = trunc.f32
function extend.i32_i8(num)
function extend.i32_n8(num)
num = bit_and(num, 0xFF)
if num >= 0x80 then
@@ -432,7 +432,7 @@ do
end
end
function extend.i32_i16(num)
function extend.i32_n16(num)
num = bit_and(num, 0xFFFF)
if num >= 0x8000 then
@@ -442,7 +442,7 @@ do
end
end
function extend.i64_i8(num)
function extend.i64_n8(num)
local data_1, _ = num_into_u32(num)
data_1 = bit_and(data_1, 0xFF)
@@ -456,7 +456,7 @@ do
end
end
function extend.i64_i16(num)
function extend.i64_n16(num)
local data_1, _ = num_into_u32(num)
data_1 = bit_and(data_1, 0xFFFF)
@@ -470,6 +470,18 @@ do
end
end
function extend.i64_n32(num)
local data_1, _ = num_into_u32(num)
if data_1 >= 0x80000000 then
local temp = num_from_u32(-data_1 + 0x100000000, 0)
return num_negate(temp)
else
return num_from_u32(data_1, 0)
end
end
function extend.i64_i32(num)
if num >= 0x80000000 then
local temp = num_from_u32(-num + 0x100000000, 0)
@@ -480,7 +492,7 @@ do
end
end
function extend.u64_i32(num)
function extend.i64_u32(num)
return num_from_u32(num, 0)
end