Bläddra i källkod

Add FOLD rules for CONV.int.i8/u8/i16/u16 of KINT.

Mike Pall 13 år sedan
förälder
incheckning
0452e97ba0
1 ändrade filer med 14 tillägg och 0 borttagningar
  1. 14 0
      src/lj_opt_fold.c

+ 14 - 0
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)