diff options
Diffstat (limited to 'src/lj_opt_fold.c')
-rw-r--r-- | src/lj_opt_fold.c | 25 |
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 | ||
541 | LJFOLD(CONV KNUM IRCONV_U32_NUM) | ||
542 | LJFOLDF(kfold_conv_knum_u32_num) | ||
543 | { | ||
544 | lua_assert((fins->op2 & IRCONV_TRUNC)); | ||
545 | return INTFOLD((int32_t)(uint32_t)knumleft); | ||
546 | } | ||
547 | |||
541 | LJFOLD(CONV KNUM IRCONV_I64_NUM) | 548 | LJFOLD(CONV KNUM IRCONV_I64_NUM) |
542 | LJFOLDF(kfold_conv_knum_i64_num) | 549 | LJFOLDF(kfold_conv_knum_i64_num) |
543 | { | 550 | { |
@@ -805,6 +812,7 @@ LJFOLDF(simplify_conv_u32_num) | |||
805 | } | 812 | } |
806 | 813 | ||
807 | LJFOLD(CONV CONV IRCONV_I64_NUM) /* _INT or _U32*/ | 814 | LJFOLD(CONV CONV IRCONV_I64_NUM) /* _INT or _U32*/ |
815 | LJFOLD(CONV CONV IRCONV_U64_NUM) /* _INT or _U32*/ | ||
808 | LJFOLDF(simplify_conv_i64_num) | 816 | LJFOLDF(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 | ||
829 | LJFOLD(CONV CONV IRCONV_U64_NUM) /* _U32*/ | ||
830 | LJFOLDF(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. */ |
847 | LJFOLD(TOBIT CONV KNUM) | 838 | LJFOLD(TOBIT CONV KNUM) |
848 | LJFOLDF(simplify_tobit_conv) | 839 | LJFOLDF(simplify_tobit_conv) |