summaryrefslogtreecommitdiff
path: root/src/lj_frame.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lj_frame.h')
-rw-r--r--src/lj_frame.h42
1 files changed, 31 insertions, 11 deletions
diff --git a/src/lj_frame.h b/src/lj_frame.h
index 1c03e3e1..14d640cd 100644
--- a/src/lj_frame.h
+++ b/src/lj_frame.h
@@ -58,12 +58,28 @@ enum {
58 58
59/* These definitions must match with the arch-specific *.dasc files. */ 59/* These definitions must match with the arch-specific *.dasc files. */
60#if LJ_TARGET_X86 60#if LJ_TARGET_X86
61#define CFRAME_OFS_ERRF (15*sizeof(void *)) 61#define CFRAME_OFS_ERRF (15*4)
62#define CFRAME_OFS_NRES (14*sizeof(void *)) 62#define CFRAME_OFS_NRES (14*4)
63#define CFRAME_OFS_PREV (13*sizeof(void *)) 63#define CFRAME_OFS_PREV (13*4)
64#define CFRAME_OFS_L (12*sizeof(void *)) 64#define CFRAME_OFS_L (12*4)
65#define CFRAME_OFS_PC (6*sizeof(void *)) 65#define CFRAME_OFS_PC (6*4)
66#define CFRAME_SIZE (12*sizeof(void *)) 66#define CFRAME_SIZE (12*4)
67#elif LJ_TARGET_X64
68#if _WIN64
69#define CFRAME_OFS_ERRF (23*4)
70#define CFRAME_OFS_NRES (22*4)
71#define CFRAME_OFS_PREV (13*8)
72#define CFRAME_OFS_L (24*4)
73#define CFRAME_OFS_PC (25*4)
74#define CFRAME_SIZE (10*8)
75#else
76#define CFRAME_OFS_ERRF (3*4)
77#define CFRAME_OFS_NRES (2*4)
78#define CFRAME_OFS_PREV (4*8)
79#define CFRAME_OFS_L (4*4)
80#define CFRAME_OFS_PC (5*4)
81#define CFRAME_SIZE (10*8)
82#endif
67#else 83#else
68#error "Missing CFRAME_* definitions for this architecture" 84#error "Missing CFRAME_* definitions for this architecture"
69#endif 85#endif
@@ -72,11 +88,15 @@ enum {
72#define CFRAME_CANYIELD ((intptr_t)(CFRAME_RESUME)) 88#define CFRAME_CANYIELD ((intptr_t)(CFRAME_RESUME))
73#define CFRAME_RAWMASK (~CFRAME_CANYIELD) 89#define CFRAME_RAWMASK (~CFRAME_CANYIELD)
74 90
75#define cframe_errfunc(cf) (*(ptrdiff_t *)(((char *)cf)+CFRAME_OFS_ERRF)) 91#define cframe_errfunc(cf) (*(int32_t *)(((char *)(cf))+CFRAME_OFS_ERRF))
76#define cframe_nres(cf) (*(ptrdiff_t *)(((char *)cf)+CFRAME_OFS_NRES)) 92#define cframe_nres(cf) (*(int32_t *)(((char *)(cf))+CFRAME_OFS_NRES))
77#define cframe_prev(cf) (*(void **)(((char *)cf)+CFRAME_OFS_PREV)) 93#define cframe_prev(cf) (*(void **)(((char *)(cf))+CFRAME_OFS_PREV))
78#define cframe_L(cf) (*(lua_State **)(((char *)cf)+CFRAME_OFS_L)) 94#define cframe_L(cf) \
79#define cframe_pc(cf) (*(const BCIns **)(((char *)cf)+CFRAME_OFS_PC)) 95 (&gcref(*(GCRef *)(((char *)(cf))+CFRAME_OFS_L))->th)
96#define cframe_pc(cf) \
97 (mref(*(MRef *)(((char *)(cf))+CFRAME_OFS_PC), const BCIns))
98#define setcframe_pc(cf, pc) \
99 (setmref(*(MRef *)(((char *)(cf))+CFRAME_OFS_PC), (pc)))
80#define cframe_canyield(cf) ((intptr_t)(cf) & CFRAME_CANYIELD) 100#define cframe_canyield(cf) ((intptr_t)(cf) & CFRAME_CANYIELD)
81#define cframe_raw(cf) ((void *)((intptr_t)(cf) & CFRAME_RAWMASK)) 101#define cframe_raw(cf) ((void *)((intptr_t)(cf) & CFRAME_RAWMASK))
82#define cframe_Lpc(L) cframe_pc(cframe_raw(L->cframe)) 102#define cframe_Lpc(L) cframe_pc(cframe_raw(L->cframe))