diff --git a/src/lj_crecord.c b/src/lj_crecord.c index a8ea419a..7899720e 100644 --- a/src/lj_crecord.c +++ b/src/lj_crecord.c @@ -1395,7 +1395,7 @@ static TRef crec_arith_int64(jit_State *J, TRef *sp, CType **s, MMS mm) sp[i] = emitconv(sp[i], dt, st, IRCONV_ANY); else if (!(st == IRT_I64 || st == IRT_U64)) sp[i] = emitconv(sp[i], dt, IRT_INT, - (s[i]->info & CTF_UNSIGNED) ? 0 : IRCONV_SEXT); + ((st - IRT_I8) & 1) ? 0 : IRCONV_SEXT); } if (mm < MM_add) { comp: diff --git a/src/lj_opt_fold.c b/src/lj_opt_fold.c index cc2b9098..092e2176 100644 --- a/src/lj_opt_fold.c +++ b/src/lj_opt_fold.c @@ -1144,14 +1144,10 @@ LJFOLDF(simplify_conv_i64_num) fins->op2 = ((IRT_I64<<5)|IRT_INT|IRCONV_SEXT); return RETRYFOLD; } else if ((fleft->op2 & IRCONV_SRCMASK) == IRT_U32) { -#if LJ_TARGET_X64 - return fleft->op1; -#else /* Reduce to a zero-extension. */ fins->op1 = fleft->op1; fins->op2 = (IRT_I64<<5)|IRT_U32; return RETRYFOLD; -#endif } return NEXTFOLD; }