summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pall <mike>2012-10-09 21:36:56 +0200
committerMike Pall <mike>2012-10-09 21:36:56 +0200
commit0452e97ba0c06dbcf956ec46817e4a71012d87cc (patch)
treecbe107844a4a97be6ced54e7f10583c0fe6e3b0e
parenteabfdfe1aa3b4b9c37b99137e6d5fb7cadbd47e9 (diff)
downloadluajit-0452e97ba0c06dbcf956ec46817e4a71012d87cc.tar.gz
luajit-0452e97ba0c06dbcf956ec46817e4a71012d87cc.tar.bz2
luajit-0452e97ba0c06dbcf956ec46817e4a71012d87cc.zip
Add FOLD rules for CONV.int.i8/u8/i16/u16 of KINT.
-rw-r--r--src/lj_opt_fold.c14
1 files changed, 14 insertions, 0 deletions
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)
598 return lj_ir_knum(J, (lua_Number)(uint32_t)fleft->i); 598 return lj_ir_knum(J, (lua_Number)(uint32_t)fleft->i);
599} 599}
600 600
601LJFOLD(CONV KINT IRCONV_INT_I8)
602LJFOLD(CONV KINT IRCONV_INT_U8)
603LJFOLD(CONV KINT IRCONV_INT_I16)
604LJFOLD(CONV KINT IRCONV_INT_U16)
605LJFOLDF(kfold_conv_kint_ext)
606{
607 int32_t k = fleft->i;
608 if ((fins->op2 & IRCONV_SRCMASK) == IRT_I8) k = (int8_t)k;
609 else if ((fins->op2 & IRCONV_SRCMASK) == IRT_U8) k = (uint8_t)k;
610 else if ((fins->op2 & IRCONV_SRCMASK) == IRT_I16) k = (int16_t)k;
611 else k = (uint16_t)k;
612 return INTFOLD(k);
613}
614
601LJFOLD(CONV KINT IRCONV_I64_INT) 615LJFOLD(CONV KINT IRCONV_I64_INT)
602LJFOLD(CONV KINT IRCONV_U64_INT) 616LJFOLD(CONV KINT IRCONV_U64_INT)
603LJFOLD(CONV KINT IRCONV_I64_U32) 617LJFOLD(CONV KINT IRCONV_I64_U32)