aboutsummaryrefslogtreecommitdiff
path: root/src/lj_jit.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lj_jit.h')
-rw-r--r--src/lj_jit.h14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/lj_jit.h b/src/lj_jit.h
index 55fbea8b..f460a0ab 100644
--- a/src/lj_jit.h
+++ b/src/lj_jit.h
@@ -179,14 +179,26 @@ LJ_STATIC_ASSERT(SNAP_CONT == TREF_CONT);
179#define SNAP(slot, flags, ref) (((SnapEntry)(slot) << 24) + (flags) + (ref)) 179#define SNAP(slot, flags, ref) (((SnapEntry)(slot) << 24) + (flags) + (ref))
180#define SNAP_TR(slot, tr) \ 180#define SNAP_TR(slot, tr) \
181 (((SnapEntry)(slot) << 24) + ((tr) & (TREF_CONT|TREF_FRAME|TREF_REFMASK))) 181 (((SnapEntry)(slot) << 24) + ((tr) & (TREF_CONT|TREF_FRAME|TREF_REFMASK)))
182#if !LJ_FR2
182#define SNAP_MKPC(pc) ((SnapEntry)u32ptr(pc)) 183#define SNAP_MKPC(pc) ((SnapEntry)u32ptr(pc))
184#endif
183#define SNAP_MKFTSZ(ftsz) ((SnapEntry)(ftsz)) 185#define SNAP_MKFTSZ(ftsz) ((SnapEntry)(ftsz))
184#define snap_ref(sn) ((sn) & 0xffff) 186#define snap_ref(sn) ((sn) & 0xffff)
185#define snap_slot(sn) ((BCReg)((sn) >> 24)) 187#define snap_slot(sn) ((BCReg)((sn) >> 24))
186#define snap_isframe(sn) ((sn) & SNAP_FRAME) 188#define snap_isframe(sn) ((sn) & SNAP_FRAME)
187#define snap_pc(sn) ((const BCIns *)(uintptr_t)(sn))
188#define snap_setref(sn, ref) (((sn) & (0xffff0000&~SNAP_NORESTORE)) | (ref)) 189#define snap_setref(sn, ref) (((sn) & (0xffff0000&~SNAP_NORESTORE)) | (ref))
189 190
191static LJ_AINLINE const BCIns *snap_pc(SnapEntry *sn)
192{
193#if LJ_FR2
194 uint64_t pcbase;
195 memcpy(&pcbase, sn, sizeof(uint64_t));
196 return (const BCIns *)(pcbase >> 8);
197#else
198 return (const BCIns *)(uintptr_t)*sn;
199#endif
200}
201
190/* Snapshot and exit numbers. */ 202/* Snapshot and exit numbers. */
191typedef uint32_t SnapNo; 203typedef uint32_t SnapNo;
192typedef uint32_t ExitNo; 204typedef uint32_t ExitNo;