diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/lj_asm_x86.h | 5 |
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)); |