Fix fmin/fmax in AOT XIP intrinsics (#1848)

This commit is contained in:
Huang Qi 2022-12-29 18:48:55 +08:00 committed by GitHub
parent 41eb938a95
commit d1fe589d43
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -218,41 +218,45 @@ aot_intrinsic_copysign_f64(float64 a, float64 b)
float32
aot_intrinsic_fmin_f32(float32 a, float32 b)
{
if (isnan(a))
return a;
else if (isnan(b))
return b;
if (isnan(a) || isnan(b))
return NAN;
else if (a == 0 && a == b)
return signbit(a) ? a : b;
else
return fminf(a, b);
return a > b ? b : a;
}
float64
aot_intrinsic_fmin_f64(float64 a, float64 b)
{
float64 c = fmin(a, b);
if (c == 0 && a == b)
if (isnan(a) || isnan(b))
return NAN;
else if (a == 0 && a == b)
return signbit(a) ? a : b;
return c;
else
return a > b ? b : a;
}
float32
aot_intrinsic_fmax_f32(float32 a, float32 b)
{
if (isnan(a))
return a;
else if (isnan(b))
return b;
if (isnan(a) || isnan(b))
return NAN;
else if (a == 0 && a == b)
return signbit(a) ? b : a;
else
return fmaxf(a, b);
return a > b ? a : b;
}
float64
aot_intrinsic_fmax_f64(float64 a, float64 b)
{
float64 c = fmax(a, b);
if (c == 0 && a == b)
if (isnan(a) || isnan(b))
return NAN;
else if (a == 0 && a == b)
return signbit(a) ? b : a;
return c;
else
return a > b ? a : b;
}
uint32