summaryrefslogtreecommitdiff
path: root/src/lj_frame.h
diff options
context:
space:
mode:
authorMike Pall <mike>2009-12-30 02:37:57 +0100
committerMike Pall <mike>2009-12-30 02:37:57 +0100
commit9de0f53a8db3a4d3fa1951ff08aaab392dc7a584 (patch)
treece510093fe7d09073c90afbf18f8d5e3577c3cf3 /src/lj_frame.h
parent52eb88773e88464cb5cc69b485d742468f66f2a2 (diff)
downloadluajit-9de0f53a8db3a4d3fa1951ff08aaab392dc7a584.tar.gz
luajit-9de0f53a8db3a4d3fa1951ff08aaab392dc7a584.tar.bz2
luajit-9de0f53a8db3a4d3fa1951ff08aaab392dc7a584.zip
Implement yield from C hooks.
Get number of multiple results from C frame. Add lj_cont_hook: restores multres and dispatch to static ins. Can use fastcall for lj_dispatch_ins() now.
Diffstat (limited to 'src/lj_frame.h')
-rw-r--r--src/lj_frame.h4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/lj_frame.h b/src/lj_frame.h
index 398ec4e5..2704ee40 100644
--- a/src/lj_frame.h
+++ b/src/lj_frame.h
@@ -63,6 +63,7 @@ enum {
63#define CFRAME_OFS_PREV (13*4) 63#define CFRAME_OFS_PREV (13*4)
64#define CFRAME_OFS_L (12*4) 64#define CFRAME_OFS_L (12*4)
65#define CFRAME_OFS_PC (6*4) 65#define CFRAME_OFS_PC (6*4)
66#define CFRAME_OFS_MULTRES (5*4)
66#define CFRAME_SIZE (12*4) 67#define CFRAME_SIZE (12*4)
67#elif LJ_TARGET_X64 68#elif LJ_TARGET_X64
68#if _WIN64 69#if _WIN64
@@ -71,6 +72,7 @@ enum {
71#define CFRAME_OFS_L (32*4) 72#define CFRAME_OFS_L (32*4)
72#define CFRAME_OFS_ERRF (31*4) 73#define CFRAME_OFS_ERRF (31*4)
73#define CFRAME_OFS_NRES (30*4) 74#define CFRAME_OFS_NRES (30*4)
75#define CFRAME_OFS_MULTRES (29*4)
74#define CFRAME_SIZE (14*8) 76#define CFRAME_SIZE (14*8)
75#else 77#else
76#define CFRAME_OFS_PREV (4*8) 78#define CFRAME_OFS_PREV (4*8)
@@ -78,6 +80,7 @@ enum {
78#define CFRAME_OFS_L (4*4) 80#define CFRAME_OFS_L (4*4)
79#define CFRAME_OFS_ERRF (3*4) 81#define CFRAME_OFS_ERRF (3*4)
80#define CFRAME_OFS_NRES (2*4) 82#define CFRAME_OFS_NRES (2*4)
83#define CFRAME_OFS_MULTRES (1*4)
81#define CFRAME_SIZE (12*8) 84#define CFRAME_SIZE (12*8)
82#endif 85#endif
83#else 86#else
@@ -91,6 +94,7 @@ enum {
91#define cframe_errfunc(cf) (*(int32_t *)(((char *)(cf))+CFRAME_OFS_ERRF)) 94#define cframe_errfunc(cf) (*(int32_t *)(((char *)(cf))+CFRAME_OFS_ERRF))
92#define cframe_nres(cf) (*(int32_t *)(((char *)(cf))+CFRAME_OFS_NRES)) 95#define cframe_nres(cf) (*(int32_t *)(((char *)(cf))+CFRAME_OFS_NRES))
93#define cframe_prev(cf) (*(void **)(((char *)(cf))+CFRAME_OFS_PREV)) 96#define cframe_prev(cf) (*(void **)(((char *)(cf))+CFRAME_OFS_PREV))
97#define cframe_multres(cf) (*(uint32_t *)(((char *)(cf))+CFRAME_OFS_MULTRES))
94#define cframe_L(cf) \ 98#define cframe_L(cf) \
95 (&gcref(*(GCRef *)(((char *)(cf))+CFRAME_OFS_L))->th) 99 (&gcref(*(GCRef *)(((char *)(cf))+CFRAME_OFS_L))->th)
96#define cframe_pc(cf) \ 100#define cframe_pc(cf) \