|
@@ -1247,14 +1247,15 @@ static void asm_href(ASMState *as, IRIns *ir, IROp merge)
|
|
} else {
|
|
} else {
|
|
emit_rr(as, XO_MOV, tmp, key);
|
|
emit_rr(as, XO_MOV, tmp, key);
|
|
#if LJ_GC64
|
|
#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
|
|
#else
|
|
emit_rmro(as, XO_LEA, dest, key, HASH_BIAS);
|
|
emit_rmro(as, XO_LEA, dest, key, HASH_BIAS);
|
|
#endif
|
|
#endif
|