aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lj_asm_x86.h5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/lj_asm_x86.h b/src/lj_asm_x86.h
index fceb1877..3e189b1d 100644
--- a/src/lj_asm_x86.h
+++ b/src/lj_asm_x86.h
@@ -1791,8 +1791,9 @@ static void asm_cnew(ASMState *as, IRIns *ir)
1791 Reg r64 = sz == 8 ? REX_64 : 0; 1791 Reg r64 = sz == 8 ? REX_64 : 0;
1792 if (irref_isk(ir->op2)) { 1792 if (irref_isk(ir->op2)) {
1793 IRIns *irk = IR(ir->op2); 1793 IRIns *irk = IR(ir->op2);
1794 uint64_t k = irk->o == IR_KINT64 ? ir_k64(irk)->u64 : 1794 uint64_t k = (irk->o == IR_KINT64 ||
1795 (uint64_t)(uint32_t)irk->i; 1795 (LJ_GC64 && (irk->o == IR_KPTR || irk->o == IR_KKPTR))) ?
1796 ir_k64(irk)->u64 : (uint64_t)(uint32_t)irk->i;
1796 if (sz == 4 || checki32((int64_t)k)) { 1797 if (sz == 4 || checki32((int64_t)k)) {
1797 emit_i32(as, (int32_t)k); 1798 emit_i32(as, (int32_t)k);
1798 emit_rmro(as, XO_MOVmi, r64, RID_RET, sizeof(GCcdata)); 1799 emit_rmro(as, XO_MOVmi, r64, RID_RET, sizeof(GCcdata));