aboutsummaryrefslogtreecommitdiff
path: root/src/lj_snap.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/lj_snap.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/src/lj_snap.c b/src/lj_snap.c
index 8638d9ed..6199b1f0 100644
--- a/src/lj_snap.c
+++ b/src/lj_snap.c
@@ -371,8 +371,8 @@ static TRef snap_replay_const(jit_State *J, IRIns *ir)
371 case IR_KPRI: return TREF_PRI(irt_type(ir->t)); 371 case IR_KPRI: return TREF_PRI(irt_type(ir->t));
372 case IR_KINT: return lj_ir_kint(J, ir->i); 372 case IR_KINT: return lj_ir_kint(J, ir->i);
373 case IR_KGC: return lj_ir_kgc(J, ir_kgc(ir), irt_t(ir->t)); 373 case IR_KGC: return lj_ir_kgc(J, ir_kgc(ir), irt_t(ir->t));
374 case IR_KNUM: return lj_ir_k64(J, IR_KNUM, ir_knum(ir)); 374 case IR_KNUM: case IR_KINT64:
375 case IR_KINT64: return lj_ir_k64(J, IR_KINT64, ir_kint64(ir)); 375 return lj_ir_k64(J, (IROp)ir->o, ir_k64(ir)->u64);
376 case IR_KPTR: return lj_ir_kptr(J, ir_kptr(ir)); /* Continuation. */ 376 case IR_KPTR: return lj_ir_kptr(J, ir_kptr(ir)); /* Continuation. */
377 default: lua_assert(0); return TREF_NIL; break; 377 default: lua_assert(0); return TREF_NIL; break;
378 } 378 }
@@ -555,8 +555,7 @@ void lj_snap_replay(jit_State *J, GCtrace *T)
555 if (irref_isk(irs->op2) && irref_isk((irs+1)->op2)) { 555 if (irref_isk(irs->op2) && irref_isk((irs+1)->op2)) {
556 uint64_t k = (uint32_t)T->ir[irs->op2].i + 556 uint64_t k = (uint32_t)T->ir[irs->op2].i +
557 ((uint64_t)T->ir[(irs+1)->op2].i << 32); 557 ((uint64_t)T->ir[(irs+1)->op2].i << 32);
558 val = lj_ir_k64(J, t == IRT_I64 ? IR_KINT64 : IR_KNUM, 558 val = lj_ir_k64(J, t == IRT_I64 ? IR_KINT64 : IR_KNUM, k);
559 lj_ir_k64_find(J, k));
560 } else { 559 } else {
561 val = emitir_raw(IRT(IR_HIOP, t), val, 560 val = emitir_raw(IRT(IR_HIOP, t), val,
562 snap_pref(J, T, map, nent, seen, (irs+1)->op2)); 561 snap_pref(J, T, map, nent, seen, (irs+1)->op2));
@@ -651,7 +650,7 @@ static void snap_restoredata(GCtrace *T, ExitState *ex,
651 uint64_t tmp; 650 uint64_t tmp;
652 if (irref_isk(ref)) { 651 if (irref_isk(ref)) {
653 if (ir->o == IR_KNUM || ir->o == IR_KINT64) { 652 if (ir->o == IR_KNUM || ir->o == IR_KINT64) {
654 src = mref(ir->ptr, int32_t); 653 src = (int32_t *)&ir[1];
655 } else if (sz == 8) { 654 } else if (sz == 8) {
656 tmp = (uint64_t)(uint32_t)ir->i; 655 tmp = (uint64_t)(uint32_t)ir->i;
657 src = (int32_t *)&tmp; 656 src = (int32_t *)&tmp;