From f8c0a57af2de70b9f15adaf46f8042d59c8bd9f3 Mon Sep 17 00:00:00 2001 From: Rerumu Date: Fri, 8 Jul 2022 13:23:43 -0400 Subject: [PATCH] Add missing `f32` saturation operations --- codegen/luajit/runtime/runtime.lua | 16 ++++++++++++---- codegen/luau/runtime/runtime.lua | 16 ++++++++++++---- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/codegen/luajit/runtime/runtime.lua b/codegen/luajit/runtime/runtime.lua index 7891b33..298621d 100644 --- a/codegen/luajit/runtime/runtime.lua +++ b/codegen/luajit/runtime/runtime.lua @@ -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) diff --git a/codegen/luau/runtime/runtime.lua b/codegen/luau/runtime/runtime.lua index 9a8c2d7..9fdce07 100644 --- a/codegen/luau/runtime/runtime.lua +++ b/codegen/luau/runtime/runtime.lua @@ -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)