From db756430ee4da7bf46ba73d09a7a57905ba29377 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Thu, 8 Apr 2010 01:28:51 +0200 Subject: [PATCH] Don't copy SNAP_NORESTORE mark into loops and suppress restore in exit. --- src/lj_jit.h | 2 +- src/lj_snap.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lj_jit.h b/src/lj_jit.h index 7850878d..adb6f2d5 100644 --- a/src/lj_jit.h +++ b/src/lj_jit.h @@ -140,7 +140,7 @@ LJ_STATIC_ASSERT(SNAP_CONT == TREF_CONT); #define snap_slot(sn) ((BCReg)((sn) >> 24)) #define snap_isframe(sn) ((sn) & SNAP_FRAME) #define snap_pc(sn) ((const BCIns *)(uintptr_t)(sn)) -#define snap_setref(sn, ref) (((sn) & 0xffff0000) | (ref)) +#define snap_setref(sn, ref) (((sn) & (0xffff0000&~SNAP_NORESTORE)) | (ref)) /* Snapshot and exit numbers. */ typedef uint32_t SnapNo; diff --git a/src/lj_snap.c b/src/lj_snap.c index fe0389fe..743f05cf 100644 --- a/src/lj_snap.c +++ b/src/lj_snap.c @@ -267,7 +267,7 @@ const BCIns *lj_snap_restore(jit_State *J, void *exptr) } } } - } else { + } else if (!(sn & SNAP_NORESTORE)) { IRType1 t = ir->t; RegSP rs = ir->prev; lua_assert(!(sn & (SNAP_CONT|SNAP_FRAME)));