Skip to content

Commit d1fe589

Browse files
authored
Fix fmin/fmax in AOT XIP intrinsics (#1848)
1 parent 41eb938 commit d1fe589

1 file changed

Lines changed: 20 additions & 16 deletions

File tree

core/iwasm/aot/aot_intrinsic.c

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -218,41 +218,45 @@ aot_intrinsic_copysign_f64(float64 a, float64 b)
218218
float32
219219
aot_intrinsic_fmin_f32(float32 a, float32 b)
220220
{
221-
if (isnan(a))
222-
return a;
223-
else if (isnan(b))
224-
return b;
221+
if (isnan(a) || isnan(b))
222+
return NAN;
223+
else if (a == 0 && a == b)
224+
return signbit(a) ? a : b;
225225
else
226-
return fminf(a, b);
226+
return a > b ? b : a;
227227
}
228228

229229
float64
230230
aot_intrinsic_fmin_f64(float64 a, float64 b)
231231
{
232-
float64 c = fmin(a, b);
233-
if (c == 0 && a == b)
232+
if (isnan(a) || isnan(b))
233+
return NAN;
234+
else if (a == 0 && a == b)
234235
return signbit(a) ? a : b;
235-
return c;
236+
else
237+
return a > b ? b : a;
236238
}
237239

238240
float32
239241
aot_intrinsic_fmax_f32(float32 a, float32 b)
240242
{
241-
if (isnan(a))
242-
return a;
243-
else if (isnan(b))
244-
return b;
243+
if (isnan(a) || isnan(b))
244+
return NAN;
245+
else if (a == 0 && a == b)
246+
return signbit(a) ? b : a;
245247
else
246-
return fmaxf(a, b);
248+
return a > b ? a : b;
247249
}
248250

249251
float64
250252
aot_intrinsic_fmax_f64(float64 a, float64 b)
251253
{
252-
float64 c = fmax(a, b);
253-
if (c == 0 && a == b)
254+
if (isnan(a) || isnan(b))
255+
return NAN;
256+
else if (a == 0 && a == b)
254257
return signbit(a) ? b : a;
255-
return c;
258+
else
259+
return a > b ? a : b;
256260
}
257261

258262
uint32

0 commit comments

Comments
 (0)