Merge #9
commit 4239e59c679801281cb6412cd9ca20bcfd36c05c Author: Hexcede <8394472+Hexcede@users.noreply.github.com> Date: Mon Jun 20 06:30:23 2022 -0400 Group num_bit_not local with num_negate commit cdf4a93fcbfd0cbd2e200d01e594b8a2d1b77580 Author: Hexcede <8394472+Hexcede@users.noreply.github.com> Date: Mon Jun 20 06:28:56 2022 -0400 Localize math.min & math.max commit 61639bc722299e06a1edf6b15ab1fdccdf99496c Author: Hexcede <8394472+Hexcede@users.noreply.github.com> Date: Mon Jun 20 06:28:12 2022 -0400 Flip trunc.num branches (< to >=) commit 02fc78a67181a671ed89c48ad915ff142430e5e5 Author: Hexcede <8394472+Hexcede@users.noreply.github.com> Date: Mon Jun 20 06:26:52 2022 -0400 Localize math.floor & math.sign usages commit 01448b9dbe6f19c7d475b246ee61efa2670da951 Author: Hexcede <8394472+Hexcede@users.noreply.github.com> Date: Sun Jun 19 14:15:27 2022 -0400 Add missing bit_band local commit be50c8a7fec15e5b7b5659264f59b7a044360a62 Author: Hexcede <8394472+Hexcede@users.noreply.github.com> Date: Sun Jun 19 13:55:23 2022 -0400 Fix naming commit cf7be1f377362f90355cc6d5a2b707b11069f457 Merge: 2772011 a32a5ba Author: Hexcede <8394472+Hexcede@users.noreply.github.com> Date: Sun Jun 19 12:43:13 2022 -0400 Merge pull request #1 from Hexcede/fix-bit_negate Localize rust bit_not and fix Numeric.negate commit a32a5ba3fc4b7c2cdd3a29bcb102b687caaa178c Author: Hexcede <8394472+Hexcede@users.noreply.github.com> Date: Sun Jun 19 12:35:27 2022 -0400 Localize rust bit_not and fix Numeric.negate commit 2772011a1279ac51fb5428a0ddf74fbf65a4b683 Author: Hexcede <8394472+Hexcede@users.noreply.github.com> Date: Sun Jun 19 12:16:21 2022 -0400 Add runtime.trunc.num commit b7d79a2de383e0ce30f0ac75ecc262af1b61e9db Author: Hexcede <8394472+Hexcede@users.noreply.github.com> Date: Sun Jun 19 12:05:17 2022 -0400 Fix runtime.nearest.num condition & round towards zero instead of with negative bias commit 2b3713df25e67dd1c2269b6e53bc4adef6b8ffbf Author: Hexcede <8394472+Hexcede@users.noreply.github.com> Date: Sun Jun 19 12:03:50 2022 -0400 Add runtime.min.num & runtime.max.num Wasm min/max returns NaN if either operator is NaN. However, Luau min/max follows different behaviour.
This commit is contained in:
parent
a1655e1c0b
commit
6116fea2e3
@ -25,7 +25,7 @@ local math_pow = math.pow
|
|||||||
local table_freeze = table.freeze
|
local table_freeze = table.freeze
|
||||||
|
|
||||||
local from_u32, into_u32, from_u64, into_u64
|
local from_u32, into_u32, from_u64, into_u64
|
||||||
local num_add, num_subtract, num_multiply, num_divide_unsigned, num_negate
|
local num_add, num_subtract, num_multiply, num_divide_unsigned, num_negate, num_bit_not
|
||||||
local num_is_negative, num_is_zero, num_is_equal, num_is_less_unsigned, num_is_greater_unsigned
|
local num_is_negative, num_is_zero, num_is_equal, num_is_less_unsigned, num_is_greater_unsigned
|
||||||
|
|
||||||
-- TODO: Eventually support Vector3
|
-- TODO: Eventually support Vector3
|
||||||
@ -231,7 +231,7 @@ function Numeric.divide_signed(lhs, rhs)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function Numeric.negate(value)
|
function Numeric.negate(value)
|
||||||
return num_add(bit_not(value), K_ONE)
|
return num_add(num_bit_not(value), K_ONE)
|
||||||
end
|
end
|
||||||
|
|
||||||
function Numeric.bit_and(lhs, rhs)
|
function Numeric.bit_and(lhs, rhs)
|
||||||
@ -393,6 +393,7 @@ num_subtract = Numeric.subtract
|
|||||||
num_multiply = Numeric.multiply
|
num_multiply = Numeric.multiply
|
||||||
num_divide_unsigned = Numeric.divide_unsigned
|
num_divide_unsigned = Numeric.divide_unsigned
|
||||||
num_negate = Numeric.negate
|
num_negate = Numeric.negate
|
||||||
|
num_bit_not = Numeric.bit_not
|
||||||
|
|
||||||
num_is_negative = Numeric.is_negative
|
num_is_negative = Numeric.is_negative
|
||||||
num_is_zero = Numeric.is_zero
|
num_is_zero = Numeric.is_zero
|
||||||
|
@ -37,12 +37,18 @@ do
|
|||||||
local mul = {}
|
local mul = {}
|
||||||
local div = {}
|
local div = {}
|
||||||
local neg = {}
|
local neg = {}
|
||||||
|
local min = {}
|
||||||
|
local max = {}
|
||||||
local copysign = {}
|
local copysign = {}
|
||||||
local nearest = {}
|
local nearest = {}
|
||||||
|
|
||||||
local assert = assert
|
local assert = assert
|
||||||
local math_abs = math.abs
|
local math_abs = math.abs
|
||||||
local math_round = math.round
|
local math_round = math.round
|
||||||
|
local math_floor = math.floor
|
||||||
|
local math_sign = math.sign
|
||||||
|
local math_min = math.min
|
||||||
|
local math_max = math.max
|
||||||
|
|
||||||
function add.i32(a, b)
|
function add.i32(a, b)
|
||||||
return to_u32(a + b)
|
return to_u32(a + b)
|
||||||
@ -85,6 +91,20 @@ do
|
|||||||
return -num
|
return -num
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function min.num(a, b)
|
||||||
|
if b ~= b then
|
||||||
|
return b
|
||||||
|
end
|
||||||
|
return math_min(a, b)
|
||||||
|
end
|
||||||
|
|
||||||
|
function max.num(a, b)
|
||||||
|
if b ~= b then
|
||||||
|
return b
|
||||||
|
end
|
||||||
|
return math_max(a, b)
|
||||||
|
end
|
||||||
|
|
||||||
function copysign.num(lhs, rhs)
|
function copysign.num(lhs, rhs)
|
||||||
if rhs >= 0 then
|
if rhs >= 0 then
|
||||||
return (math_abs(lhs))
|
return (math_abs(lhs))
|
||||||
@ -96,8 +116,8 @@ do
|
|||||||
function nearest.num(num)
|
function nearest.num(num)
|
||||||
local result = math_round(num)
|
local result = math_round(num)
|
||||||
|
|
||||||
if math_abs(num) % 1 == 0.5 and temp_2 % 2 == 1 then
|
if math_abs(num) % 1 == 0.5 and math_floor(math_abs(num) % 2) == 0 then
|
||||||
result = result - 1
|
result -= math_sign(result)
|
||||||
end
|
end
|
||||||
|
|
||||||
return result
|
return result
|
||||||
@ -108,6 +128,8 @@ do
|
|||||||
module.mul = mul
|
module.mul = mul
|
||||||
module.div = div
|
module.div = div
|
||||||
module.neg = neg
|
module.neg = neg
|
||||||
|
module.min = min
|
||||||
|
module.max = max
|
||||||
module.copysign = copysign
|
module.copysign = copysign
|
||||||
module.nearest = nearest
|
module.nearest = nearest
|
||||||
end
|
end
|
||||||
@ -309,6 +331,10 @@ do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function trunc.num(num)
|
||||||
|
return if num >= 0 then math.floor(num) else math.ceil(num)
|
||||||
|
end
|
||||||
|
|
||||||
trunc.u64_f32 = num_from_u64
|
trunc.u64_f32 = num_from_u64
|
||||||
trunc.u64_f64 = num_from_u64
|
trunc.u64_f64 = num_from_u64
|
||||||
|
|
||||||
@ -403,6 +429,7 @@ do
|
|||||||
local bit_replace = bit32.replace
|
local bit_replace = bit32.replace
|
||||||
|
|
||||||
local bit_bor = bit32.bor
|
local bit_bor = bit32.bor
|
||||||
|
local bit_band = bit32.band
|
||||||
local bit_lshift = bit32.lshift
|
local bit_lshift = bit32.lshift
|
||||||
local bit_rshift = bit32.rshift
|
local bit_rshift = bit32.rshift
|
||||||
|
|
||||||
|
@ -232,7 +232,7 @@ fn write_local_operation(head: &str, tail: &str, w: &mut dyn Write) -> Result<()
|
|||||||
("band" | "bor" | "bxor", "i32") => {
|
("band" | "bor" | "bxor", "i32") => {
|
||||||
write!(w, "local {head}_{tail} = bit32.{head} ")
|
write!(w, "local {head}_{tail} = bit32.{head} ")
|
||||||
}
|
}
|
||||||
("abs" | "ceil" | "floor" | "sqrt" | "min" | "max", _) => {
|
("abs" | "ceil" | "floor" | "sqrt", _) => {
|
||||||
write!(w, "local {head}_{tail} = math.{head} ")
|
write!(w, "local {head}_{tail} = math.{head} ")
|
||||||
}
|
}
|
||||||
_ => write!(w, "local {head}_{tail} = rt.{head}.{tail} "),
|
_ => write!(w, "local {head}_{tail} = rt.{head}.{tail} "),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user