Skip to content

Commit cfce0b7

Browse files
committed
define isnan as macro for platform use core\sahred\platform\common\math.c
1 parent d04f3cd commit cfce0b7

15 files changed

Lines changed: 64 additions & 65 deletions

File tree

core/iwasm/aot/aot_intrinsic.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ aot_intrinsic_sqrt_f64(float64 a)
128128
float32
129129
aot_intrinsic_copysign_f32(float32 a, float32 b)
130130
{
131-
return signbitf(b) ? -fabsf(a) : fabsf(a);
131+
return signbit(b) ? -fabsf(a) : fabsf(a);
132132
}
133133

134134
float64
@@ -140,10 +140,10 @@ aot_intrinsic_copysign_f64(float64 a, float64 b)
140140
float32
141141
aot_intrinsic_fmin_f32(float32 a, float32 b)
142142
{
143-
if (isnanf(a) || isnanf(b))
143+
if (isnan(a) || isnan(b))
144144
return NAN;
145145
else if (a == 0 && a == b)
146-
return signbitf(a) ? a : b;
146+
return signbit(a) ? a : b;
147147
else
148148
return a > b ? b : a;
149149
}
@@ -162,10 +162,10 @@ aot_intrinsic_fmin_f64(float64 a, float64 b)
162162
float32
163163
aot_intrinsic_fmax_f32(float32 a, float32 b)
164164
{
165-
if (isnanf(a) || isnanf(b))
165+
if (isnan(a) || isnan(b))
166166
return NAN;
167167
else if (a == 0 && a == b)
168-
return signbitf(a) ? b : a;
168+
return signbit(a) ? b : a;
169169
else
170170
return a > b ? a : b;
171171
}
@@ -383,10 +383,10 @@ aot_intrinsic_f32_cmp(AOTFloatCond cond, float32 lhs, float32 rhs)
383383
return lhs >= rhs ? 1 : 0;
384384

385385
case FLOAT_NE:
386-
return (isnanf(lhs) || isnanf(rhs) || lhs != rhs) ? 1 : 0;
386+
return (isnan(lhs) || isnan(rhs) || lhs != rhs) ? 1 : 0;
387387

388388
case FLOAT_UNO:
389-
return (isnanf(lhs) || isnanf(rhs)) ? 1 : 0;
389+
return (isnan(lhs) || isnan(rhs)) ? 1 : 0;
390390

391391
default:
392392
break;

core/iwasm/common/wasm_application.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -454,7 +454,7 @@ execute_func(WASMModuleInstanceCommon *module_inst, const char *name,
454454
case VALUE_TYPE_F32:
455455
{
456456
float32 f32 = strtof(argv[i], &endptr);
457-
if (isnanf(f32)) {
457+
if (isnan(f32)) {
458458
#ifdef _MSC_VER
459459
/*
460460
* Spec tests require the binary representation of NaN to be

core/iwasm/compilation/aot_emit_const.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ aot_compile_op_f32_const(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx,
7979
}
8080
PUSH_F32(value);
8181
}
82-
else if (!isnanf(f32_const)) {
82+
else if (!isnan(f32_const)) {
8383
value = F32_CONST(f32_const);
8484
CHECK_LLVM_CONST(value);
8585
PUSH_F32(value);

core/iwasm/fast-jit/fe/jit_emit_compare.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ jit_compile_op_i64_compare(JitCompContext *cc, IntCond cond)
117117
static int32
118118
float_cmp_eq(float f1, float f2)
119119
{
120-
if (isnanf(f1) || isnanf(f2))
120+
if (isnan(f1) || isnan(f2))
121121
return 0;
122122

123123
return f1 == f2;
@@ -126,7 +126,7 @@ float_cmp_eq(float f1, float f2)
126126
static int32
127127
float_cmp_ne(float f1, float f2)
128128
{
129-
if (isnanf(f1) || isnanf(f2))
129+
if (isnan(f1) || isnan(f2))
130130
return 1;
131131

132132
return f1 != f2;

core/iwasm/fast-jit/fe/jit_emit_conversion.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ local_isnan(double x)
4545
static int
4646
local_isnanf(float x)
4747
{
48-
return isnanf(x);
48+
return isnan(x);
4949
}
5050

5151
#define RETURN_IF_NANF(fp) \
@@ -198,7 +198,7 @@ jit_compile_check_value_range(JitCompContext *cc, JitReg value, JitReg min_fp,
198198
float min_fp_f32_const = jit_cc_get_const_F32(cc, min_fp);
199199
float max_fp_f32_const = jit_cc_get_const_F32(cc, max_fp);
200200

201-
if (isnanf(value_f32_const)) {
201+
if (isnan(value_f32_const)) {
202202
/* throw exception if value is nan */
203203
if (!jit_emit_exception(cc, EXCE_INVALID_CONVERSION_TO_INTEGER,
204204
JIT_OP_JMP, 0, NULL))

core/iwasm/fast-jit/fe/jit_emit_numberic.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1541,21 +1541,21 @@ jit_compile_op_f64_math(JitCompContext *cc, FloatMath math_op)
15411541
static float32
15421542
f32_min(float32 a, float32 b)
15431543
{
1544-
if (isnanf(a) || isnanf(b))
1544+
if (isnan(a) || isnan(b))
15451545
return NAN;
15461546
else if (a == 0 && a == b)
1547-
return signbitf(a) ? a : b;
1547+
return signbit(a) ? a : b;
15481548
else
15491549
return a > b ? b : a;
15501550
}
15511551

15521552
static float32
15531553
f32_max(float32 a, float32 b)
15541554
{
1555-
if (isnanf(a) || isnanf(b))
1555+
if (isnan(a) || isnan(b))
15561556
return NAN;
15571557
else if (a == 0 && a == b)
1558-
return signbitf(a) ? b : a;
1558+
return signbit(a) ? b : a;
15591559
else
15601560
return a > b ? a : b;
15611561
}

core/iwasm/interpreter/wasm_interp_classic.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -200,21 +200,21 @@ rotr64(uint64 n, uint64 c)
200200
static inline float32
201201
f32_min(float32 a, float32 b)
202202
{
203-
if (isnanf(a) || isnanf(b))
203+
if (isnan(a) || isnan(b))
204204
return NAN;
205205
else if (a == 0 && a == b)
206-
return signbitf(a) ? a : b;
206+
return signbit(a) ? a : b;
207207
else
208208
return a > b ? b : a;
209209
}
210210

211211
static inline float32
212212
f32_max(float32 a, float32 b)
213213
{
214-
if (isnanf(a) || isnanf(b))
214+
if (isnan(a) || isnan(b))
215215
return NAN;
216216
else if (a == 0 && a == b)
217-
return signbitf(a) ? b : a;
217+
return signbit(a) ? b : a;
218218
else
219219
return a > b ? a : b;
220220
}
@@ -882,8 +882,8 @@ wasm_interp_get_frame_ref(WASMInterpFrame *frame)
882882
return dst_value; \
883883
}
884884

885-
TRUNC_FUNCTION(trunc_f32_to_i32, float32, uint32, int32, isnanf)
886-
TRUNC_FUNCTION(trunc_f32_to_i64, float32, uint64, int64, isnanf)
885+
TRUNC_FUNCTION(trunc_f32_to_i32, float32, uint32, int32, isnan)
886+
TRUNC_FUNCTION(trunc_f32_to_i64, float32, uint64, int64, isnan)
887887
TRUNC_FUNCTION(trunc_f64_to_i32, float64, uint32, int32, isnan)
888888
TRUNC_FUNCTION(trunc_f64_to_i64, float64, uint64, int64, isnan)
889889

@@ -896,7 +896,7 @@ trunc_f32_to_int(WASMModuleInstance *module, uint32 *frame_sp, float32 src_min,
896896
uint32 dst_value_i32;
897897

898898
if (!saturating) {
899-
if (isnanf(src_value)) {
899+
if (isnan(src_value)) {
900900
wasm_set_exception(module, "invalid conversion to integer");
901901
return false;
902902
}

core/iwasm/interpreter/wasm_interp_fast.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -141,21 +141,21 @@ rotr64(uint64 n, uint64 c)
141141
static inline float32
142142
f32_min(float32 a, float32 b)
143143
{
144-
if (isnanf(a) || isnanf(b))
144+
if (isnan(a) || isnan(b))
145145
return NAN;
146146
else if (a == 0 && a == b)
147-
return signbitf(a) ? a : b;
147+
return signbit(a) ? a : b;
148148
else
149149
return a > b ? b : a;
150150
}
151151

152152
static inline float32
153153
f32_max(float32 a, float32 b)
154154
{
155-
if (isnanf(a) || isnanf(b))
155+
if (isnan(a) || isnan(b))
156156
return NAN;
157157
else if (a == 0 && a == b)
158-
return signbitf(a) ? b : a;
158+
return signbit(a) ? b : a;
159159
else
160160
return a > b ? a : b;
161161
}
@@ -740,8 +740,8 @@ wasm_interp_get_frame_ref(WASMInterpFrame *frame)
740740
return dst_value; \
741741
}
742742

743-
TRUNC_FUNCTION(trunc_f32_to_i32, float32, uint32, int32, isnanf)
744-
TRUNC_FUNCTION(trunc_f32_to_i64, float32, uint64, int64, isnanf)
743+
TRUNC_FUNCTION(trunc_f32_to_i32, float32, uint32, int32, isnan)
744+
TRUNC_FUNCTION(trunc_f32_to_i64, float32, uint64, int64, isnan)
745745
TRUNC_FUNCTION(trunc_f64_to_i32, float64, uint32, int32, isnan)
746746
TRUNC_FUNCTION(trunc_f64_to_i64, float64, uint64, int64, isnan)
747747

@@ -755,7 +755,7 @@ trunc_f32_to_int(WASMModuleInstance *module, uint8 *frame_ip, uint32 *frame_lp,
755755
uint32 dst_value_i32;
756756

757757
if (!saturating) {
758-
if (isnanf(src_value)) {
758+
if (isnan(src_value)) {
759759
wasm_set_exception(module, "invalid conversion to integer");
760760
return false;
761761
}

core/shared/platform/alios/platform_internal.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,10 +66,12 @@ float fmaxf(float x, float y);
6666
float rintf(float x);
6767
float fabsf(float x);
6868
float truncf(float x);
69-
int signbit(double x);
70-
int signbitf(float x);
71-
int isnan(double x);
72-
int isnanf(float x);
69+
int isnan_double(double x);
70+
int isnan_float(float x);
71+
int signbit_double(double x);
72+
int signbit_float(float x);
73+
#define isnan(x) (sizeof(x) == sizeof(double) ? isnan_double((double)x) : isnan_float(x))
74+
#define signbit(x) (sizeof(x) == sizeof(double) ? signbit_double((double)x) : signbit_float(x))
7375
/* clang-format on */
7476

7577
/* The below types are used in platform_api_extension.h,

core/shared/platform/common/math/math.c

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,11 @@ typedef union {
330330
} while (0)
331331
#endif
332332

333+
#define isnan(x) \
334+
(sizeof(x) == sizeof(double) ? isnan_double((double)x) : isnan_float(x))
335+
#define signbit(x) \
336+
(sizeof(x) == sizeof(double) ? signbit_double((double)x) : signbit_float(x))
337+
333338
#ifdef __FDLIBM_STDC__
334339
static const double huge = 1.0e300;
335340
#else
@@ -1616,13 +1621,13 @@ fabs(double x)
16161621
}
16171622

16181623
int
1619-
isnanf(float x)
1624+
isnan_float(float x)
16201625
{
16211626
return freebsd_isnanf(x);
16221627
}
16231628

16241629
int
1625-
isnan(double x)
1630+
isnan_double(double x)
16261631
{
16271632
return freebsd_isnan(x);
16281633
}
@@ -1634,17 +1639,17 @@ trunc(double x)
16341639
}
16351640

16361641
int
1637-
signbit(double x)
1642+
signbit_float(float x)
16381643
{
1639-
return ((__HI(x) & 0x80000000) >> 31);
1644+
unsigned int i;
1645+
GET_FLOAT_WORD(i, x);
1646+
return (int)(i >> 31);
16401647
}
16411648

16421649
int
1643-
signbitf(float x)
1650+
signbit_double(double x)
16441651
{
1645-
unsigned int i;
1646-
GET_FLOAT_WORD(i, x);
1647-
return (int)(i >> 31);
1652+
return ((__HI(x) & 0x80000000) >> 31);
16481653
}
16491654

16501655
float

0 commit comments

Comments
 (0)