From fa126c5f979a191eaec40a0967795f4512c5fe1b Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Tue, 21 Mar 2017 00:58:02 +0100 Subject: [PATCH] x64/LJ_GC64: Fix assembly of CNEWI with 64 bit constant pointer. Tracked down by Luke Gorrie. --- src/lj_asm_x86.h | 5 +++-- 1 file 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) Reg r64 = sz == 8 ? REX_64 : 0; if (irref_isk(ir->op2)) { IRIns *irk = IR(ir->op2); - uint64_t k = irk->o == IR_KINT64 ? ir_k64(irk)->u64 : - (uint64_t)(uint32_t)irk->i; + uint64_t k = (irk->o == IR_KINT64 || + (LJ_GC64 && (irk->o == IR_KPTR || irk->o == IR_KKPTR))) ? + ir_k64(irk)->u64 : (uint64_t)(uint32_t)irk->i; if (sz == 4 || checki32((int64_t)k)) { emit_i32(as, (int32_t)k); emit_rmro(as, XO_MOVmi, r64, RID_RET, sizeof(GCcdata));