aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pall <mike>2017-03-21 00:58:02 +0100
committerMike Pall <mike>2017-03-21 00:58:02 +0100
commitfa126c5f979a191eaec40a0967795f4512c5fe1b (patch)
tree18e4ba924e18f50ab6f84c8687a52251836e47ec
parent779a1eb8e6342986b80afbb5d0a378ad175939f6 (diff)
downloadluajit-fa126c5f979a191eaec40a0967795f4512c5fe1b.tar.gz
luajit-fa126c5f979a191eaec40a0967795f4512c5fe1b.tar.bz2
luajit-fa126c5f979a191eaec40a0967795f4512c5fe1b.zip
x64/LJ_GC64: Fix assembly of CNEWI with 64 bit constant pointer.
Tracked down by Luke Gorrie.
-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));