aboutsummaryrefslogtreecommitdiff
path: root/src/lj_opt_fold.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/lj_opt_fold.c25
1 files changed, 8 insertions, 17 deletions
diff --git a/src/lj_opt_fold.c b/src/lj_opt_fold.c
index 2d08e187..03caf80d 100644
--- a/src/lj_opt_fold.c
+++ b/src/lj_opt_fold.c
@@ -538,6 +538,13 @@ LJFOLDF(kfold_conv_knum_int_num)
538 } 538 }
539} 539}
540 540
541LJFOLD(CONV KNUM IRCONV_U32_NUM)
542LJFOLDF(kfold_conv_knum_u32_num)
543{
544 lua_assert((fins->op2 & IRCONV_TRUNC));
545 return INTFOLD((int32_t)(uint32_t)knumleft);
546}
547
541LJFOLD(CONV KNUM IRCONV_I64_NUM) 548LJFOLD(CONV KNUM IRCONV_I64_NUM)
542LJFOLDF(kfold_conv_knum_i64_num) 549LJFOLDF(kfold_conv_knum_i64_num)
543{ 550{
@@ -805,6 +812,7 @@ LJFOLDF(simplify_conv_u32_num)
805} 812}
806 813
807LJFOLD(CONV CONV IRCONV_I64_NUM) /* _INT or _U32*/ 814LJFOLD(CONV CONV IRCONV_I64_NUM) /* _INT or _U32*/
815LJFOLD(CONV CONV IRCONV_U64_NUM) /* _INT or _U32*/
808LJFOLDF(simplify_conv_i64_num) 816LJFOLDF(simplify_conv_i64_num)
809{ 817{
810 PHIBARRIER(fleft); 818 PHIBARRIER(fleft);
@@ -826,23 +834,6 @@ LJFOLDF(simplify_conv_i64_num)
826 return NEXTFOLD; 834 return NEXTFOLD;
827} 835}
828 836
829LJFOLD(CONV CONV IRCONV_U64_NUM) /* _U32*/
830LJFOLDF(simplify_conv_u64_num)
831{
832 PHIBARRIER(fleft);
833 if ((fleft->op2 & IRCONV_SRCMASK) == IRT_U32) {
834#if LJ_TARGET_X64
835 return fleft->op1;
836#else
837 /* Reduce to a zero-extension. */
838 fins->op1 = fleft->op1;
839 fins->op2 = (IRT_U64<<5)|IRT_U32;
840 return RETRYFOLD;
841#endif
842 }
843 return NEXTFOLD;
844}
845
846/* Shortcut TOBIT + IRT_NUM <- IRT_INT/IRT_U32 conversion. */ 837/* Shortcut TOBIT + IRT_NUM <- IRT_INT/IRT_U32 conversion. */
847LJFOLD(TOBIT CONV KNUM) 838LJFOLD(TOBIT CONV KNUM)
848LJFOLDF(simplify_tobit_conv) 839LJFOLDF(simplify_tobit_conv)