diff options
Diffstat (limited to '')
-rw-r--r-- | src/lj_asm_x86.h | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/src/lj_asm_x86.h b/src/lj_asm_x86.h index 7931ffb5..1b94371e 100644 --- a/src/lj_asm_x86.h +++ b/src/lj_asm_x86.h | |||
@@ -1247,14 +1247,15 @@ static void asm_href(ASMState *as, IRIns *ir, IROp merge) | |||
1247 | } else { | 1247 | } else { |
1248 | emit_rr(as, XO_MOV, tmp, key); | 1248 | emit_rr(as, XO_MOV, tmp, key); |
1249 | #if LJ_GC64 | 1249 | #if LJ_GC64 |
1250 | emit_gri(as, XG_ARITHi(XOg_XOR), dest, irt_toitype(kt) << 15); | 1250 | checkmclim(as); |
1251 | if ((as->flags & JIT_F_BMI2)) { | 1251 | emit_gri(as, XG_ARITHi(XOg_XOR), dest, irt_toitype(kt) << 15); |
1252 | emit_i8(as, 32); | 1252 | if ((as->flags & JIT_F_BMI2)) { |
1253 | emit_mrm(as, XV_RORX|VEX_64, dest, key); | 1253 | emit_i8(as, 32); |
1254 | } else { | 1254 | emit_mrm(as, XV_RORX|VEX_64, dest, key); |
1255 | emit_shifti(as, XOg_SHR|REX_64, dest, 32); | 1255 | } else { |
1256 | emit_rr(as, XO_MOV, dest|REX_64, key|REX_64); | 1256 | emit_shifti(as, XOg_SHR|REX_64, dest, 32); |
1257 | } | 1257 | emit_rr(as, XO_MOV, dest|REX_64, key|REX_64); |
1258 | } | ||
1258 | #else | 1259 | #else |
1259 | emit_rmro(as, XO_LEA, dest, key, HASH_BIAS); | 1260 | emit_rmro(as, XO_LEA, dest, key, HASH_BIAS); |
1260 | #endif | 1261 | #endif |