diff options
Diffstat (limited to '')
-rw-r--r-- | src/lj_snap.c | 9 |
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; |