Add missing f32 saturation operations

This commit is contained in:
Rerumu 2022-07-08 13:23:43 -04:00
parent 3853e06efa
commit f8c0a57af2
2 changed files with 24 additions and 8 deletions

View File

@ -443,7 +443,7 @@ do
truncate.f32 = truncate_f64
truncate.f64 = truncate_f64
function saturate.i32_f64(num)
function saturate.i32_f32(num)
if num <= -0x80000000 then
return -0x80000000
elseif num >= 0x7FFFFFFF then
@ -453,7 +453,9 @@ do
end
end
function saturate.u32_f64(num)
saturate.i32_f64 = saturate.i32_f32
function saturate.u32_f32(num)
if num <= 0 then
return 0
elseif num >= 0xFFFFFFFF then
@ -463,7 +465,9 @@ do
end
end
function saturate.i64_f64(num)
saturate.u32_f64 = saturate.u32_f32
function saturate.i64_f32(num)
if num >= 2 ^ 63 - 1 then
return NUM_MAX_I64
elseif num <= -2 ^ 63 then
@ -475,7 +479,9 @@ do
end
end
function saturate.u64_f64(num)
saturate.i64_f64 = saturate.i64_f32
function saturate.u64_f32(num)
if num >= 2 ^ 64 then
return NUM_MAX_U64
elseif num <= 0 or num ~= num then
@ -485,6 +491,8 @@ do
end
end
saturate.u64_f64 = saturate.u64_f32
function extend.i32_n8(num)
num = bit_and(num, 0xFF)

View File

@ -436,21 +436,25 @@ do
truncate.f32 = truncate_f64
truncate.f64 = truncate_f64
function saturate.i32_f64(num)
function saturate.i32_f32(num)
local temp = math_clamp(truncate_f64(num), -0x80000000, 0x7FFFFFFF)
return to_u32(temp)
end
function saturate.u32_f64(num)
saturate.i32_f64 = saturate.i32_f32
function saturate.u32_f32(num)
local temp = math_clamp(truncate_f64(num), 0, 0xFFFFFFFF)
return to_u32(temp)
end
saturate.u32_f64 = saturate.u32_f32
local truncate_i64_f64 = truncate.i64_f64
function saturate.i64_f64(num)
function saturate.i64_f32(num)
if num >= 2 ^ 63 - 1 then
return NUM_MAX_I64
elseif num <= -2 ^ 63 then
@ -460,7 +464,9 @@ do
end
end
function saturate.u64_f64(num)
saturate.i64_f64 = saturate.i64_f32
function saturate.u64_f32(num)
if num >= 2 ^ 64 then
return NUM_MAX_U64
elseif num <= 0 then
@ -470,6 +476,8 @@ do
end
end
saturate.u64_f64 = saturate.u64_f32
function extend.i32_n8(num)
num = bit_and(num, 0xFF)