23
src/lj_ir.c
23
src/lj_ir.c
@@ -248,28 +248,15 @@ TRef lj_ir_kint64(jit_State *J, uint64_t u64)
|
||||
return lj_ir_k64(J, IR_KINT64, u64);
|
||||
}
|
||||
|
||||
/* Check whether a number is int and return it. -0 is NOT considered an int. */
|
||||
static int numistrueint(lua_Number n, int32_t *kp)
|
||||
{
|
||||
int32_t k = lj_num2int(n);
|
||||
if (n == (lua_Number)k) {
|
||||
if (kp) *kp = k;
|
||||
if (k == 0) { /* Special check for -0. */
|
||||
TValue tv;
|
||||
setnumV(&tv, n);
|
||||
if (tv.u32.hi != 0)
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Intern number as int32_t constant if possible, otherwise as FP constant. */
|
||||
TRef lj_ir_knumint(jit_State *J, lua_Number n)
|
||||
{
|
||||
int64_t i64;
|
||||
int32_t k;
|
||||
if (numistrueint(n, &k))
|
||||
TValue tv;
|
||||
setnumV(&tv, n);
|
||||
/* -0 is NOT considered an int. */
|
||||
if (lj_num2int_check(n, i64, k) && !tvismzero(&tv))
|
||||
return lj_ir_kint(J, k);
|
||||
else
|
||||
return lj_ir_knum(J, n);
|
||||
|
||||
Reference in New Issue
Block a user