diff options
Diffstat (limited to 'src/lj_jit.h')
-rw-r--r-- | src/lj_jit.h | 14 |
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 | ||
191 | static 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. */ |
191 | typedef uint32_t SnapNo; | 203 | typedef uint32_t SnapNo; |
192 | typedef uint32_t ExitNo; | 204 | typedef uint32_t ExitNo; |