From 0452e97ba0c06dbcf956ec46817e4a71012d87cc Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Tue, 9 Oct 2012 21:36:56 +0200 Subject: [PATCH] Add FOLD rules for CONV.int.i8/u8/i16/u16 of KINT. --- src/lj_opt_fold.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/lj_opt_fold.c b/src/lj_opt_fold.c index c1e30511..23199c43 100644 --- a/src/lj_opt_fold.c +++ b/src/lj_opt_fold.c @@ -598,6 +598,20 @@ LJFOLDF(kfold_conv_kintu32_num) return lj_ir_knum(J, (lua_Number)(uint32_t)fleft->i); } +LJFOLD(CONV KINT IRCONV_INT_I8) +LJFOLD(CONV KINT IRCONV_INT_U8) +LJFOLD(CONV KINT IRCONV_INT_I16) +LJFOLD(CONV KINT IRCONV_INT_U16) +LJFOLDF(kfold_conv_kint_ext) +{ + int32_t k = fleft->i; + if ((fins->op2 & IRCONV_SRCMASK) == IRT_I8) k = (int8_t)k; + else if ((fins->op2 & IRCONV_SRCMASK) == IRT_U8) k = (uint8_t)k; + else if ((fins->op2 & IRCONV_SRCMASK) == IRT_I16) k = (int16_t)k; + else k = (uint16_t)k; + return INTFOLD(k); +} + LJFOLD(CONV KINT IRCONV_I64_INT) LJFOLD(CONV KINT IRCONV_U64_INT) LJFOLD(CONV KINT IRCONV_I64_U32)