} else {
emit_rr(as, XO_MOV, tmp, key);
#if LJ_GC64
- emit_gri(as, XG_ARITHi(XOg_XOR), dest, irt_toitype(kt) << 15);
- if ((as->flags & JIT_F_BMI2)) {
- emit_i8(as, 32);
- emit_mrm(as, XV_RORX|VEX_64, dest, key);
- } else {
- emit_shifti(as, XOg_SHR|REX_64, dest, 32);
- emit_rr(as, XO_MOV, dest|REX_64, key|REX_64);
- }
+ checkmclim(as);
+ emit_gri(as, XG_ARITHi(XOg_XOR), dest, irt_toitype(kt) << 15);
+ if ((as->flags & JIT_F_BMI2)) {
+ emit_i8(as, 32);
+ emit_mrm(as, XV_RORX|VEX_64, dest, key);
+ } else {
+ emit_shifti(as, XOg_SHR|REX_64, dest, 32);
+ emit_rr(as, XO_MOV, dest|REX_64, key|REX_64);
+ }
#else
emit_rmro(as, XO_LEA, dest, key, HASH_BIAS);
#endif
rc = lj_ir_kint(J, (int32_t)(int16_t)rc);
break;
case BC_KNIL:
+ if (LJ_FR2 && ra > J->maxslot)
+ J->base[ra-1] = 0;
while (ra <= rc)
J->base[ra++] = TREF_NIL;
if (rc >= J->maxslot) J->maxslot = rc+1;