Add f32 and f64 distinction

This commit is contained in:
Rerumu
2022-06-25 04:30:06 -04:00
parent 951ee169a2
commit 5b61f742f4
5 changed files with 160 additions and 89 deletions
+13 -6
View File
@@ -87,11 +87,11 @@ do
div.u64 = I64.divide_unsigned
function neg.num(num)
function neg.f32(num)
return -num
end
function min.num(a, b)
function min.f32(a, b)
if b == b then
return math_min(a, b)
else
@@ -99,7 +99,7 @@ do
end
end
function max.num(a, b)
function max.f32(a, b)
if b == b then
return math_max(a, b)
else
@@ -107,7 +107,7 @@ do
end
end
function copysign.num(lhs, rhs)
function copysign.f32(lhs, rhs)
if rhs >= 0 then
return (math_abs(lhs))
else
@@ -115,7 +115,7 @@ do
end
end
function nearest.num(num)
function nearest.f32(num)
local result = math_round(num)
if math_abs(num) % 1 == 0.5 and math_floor(math_abs(num) % 2) == 0 then
@@ -125,6 +125,12 @@ do
return result
end
neg.f64 = neg.f32
min.f64 = min.f32
max.f64 = max.f32
copysign.f64 = copysign.f32
nearest.f64 = nearest.f32
module.add = add
module.sub = sub
module.mul = mul
@@ -333,7 +339,7 @@ do
end
end
function trunc.num(num)
function trunc.f32(num)
if num >= 0 then
return math.floor(num)
else
@@ -341,6 +347,7 @@ do
end
end
trunc.f64 = trunc.f32
trunc.u64_f32 = num_from_u64
trunc.u64_f64 = num_from_u64
+10 -10
View File
@@ -7,10 +7,10 @@ pub trait AsSymbol {
impl AsSymbol for BinOpType {
fn as_symbol(&self) -> Option<&'static str> {
let result = match self {
Self::Add_FN => "+",
Self::Sub_FN => "-",
Self::Mul_FN => "*",
Self::Div_FN => "/",
Self::Add_F32 | Self::Add_F64 => "+",
Self::Sub_F32 | Self::Sub_F64 => "-",
Self::Mul_F32 | Self::Mul_F64 => "*",
Self::Div_F32 | Self::Div_F64 => "/",
Self::RemS_I32 | Self::RemU_I32 => "%",
_ => return None,
};
@@ -22,12 +22,12 @@ impl AsSymbol for BinOpType {
impl AsSymbol for CmpOpType {
fn as_symbol(&self) -> Option<&'static str> {
let result = match self {
Self::Eq_I32 | Self::Eq_FN => "==",
Self::Ne_I32 | Self::Ne_FN => "~=",
Self::LtU_I32 | Self::Lt_FN => "<",
Self::GtU_I32 | Self::Gt_FN => ">",
Self::LeU_I32 | Self::Le_FN => "<=",
Self::GeU_I32 | Self::Ge_FN => ">=",
Self::Eq_I32 | Self::Eq_F32 | Self::Eq_F64 => "==",
Self::Ne_I32 | Self::Ne_F32 | Self::Ne_F64 => "~=",
Self::LtU_I32 | Self::Lt_F32 | Self::Lt_F64 => "<",
Self::GtU_I32 | Self::Gt_F32 | Self::Gt_F64 => ">",
Self::LeU_I32 | Self::Le_F32 | Self::Le_F64 => "<=",
Self::GeU_I32 | Self::Ge_F32 | Self::Ge_F64 => ">=",
_ => return None,
};