aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/buildvm_x86.dasc30
-rw-r--r--src/lj_arch.h2
-rw-r--r--src/lj_frame.h20
3 files changed, 30 insertions, 22 deletions
diff --git a/src/buildvm_x86.dasc b/src/buildvm_x86.dasc
index d2bb80df..3b89debb 100644
--- a/src/buildvm_x86.dasc
+++ b/src/buildvm_x86.dasc
@@ -165,22 +165,28 @@
165|.define CFRAME_SPACE, aword*5 // Delta for rsp (see <--). 165|.define CFRAME_SPACE, aword*5 // Delta for rsp (see <--).
166|.macro saveregs 166|.macro saveregs
167| push rbp; push rdi; push rsi; push rbx 167| push rbp; push rdi; push rsi; push rbx
168| push r15; push r14; push r13; push r12
168| sub rsp, CFRAME_SPACE 169| sub rsp, CFRAME_SPACE
169|.endmacro 170|.endmacro
170|.macro restoreregs 171|.macro restoreregs
171| add rsp, CFRAME_SPACE 172| add rsp, CFRAME_SPACE
173| pop r12; pop r13; pop r14; pop r15
172| pop rbx; pop rsi; pop rdi; pop rbp 174| pop rbx; pop rsi; pop rdi; pop rbp
173|.endmacro 175|.endmacro
174| 176|
175|.define SAVE_CFRAME, aword [rsp+aword*13] 177|.define SAVE_CFRAME, aword [rsp+aword*17]
176|.define SAVE_PC, dword [rsp+dword*25] 178|.define SAVE_PC, dword [rsp+dword*33]
177|.define SAVE_L, dword [rsp+dword*24] 179|.define SAVE_L, dword [rsp+dword*32]
178|.define SAVE_ERRF, dword [rsp+dword*23] 180|.define SAVE_ERRF, dword [rsp+dword*31]
179|.define SAVE_NRES, dword [rsp+dword*22] 181|.define SAVE_NRES, dword [rsp+dword*30]
180|.define TMP2, dword [rsp+dword*21] 182|.define TMP2, dword [rsp+dword*29]
181|.define TMP1, dword [rsp+dword*20] 183|.define TMP1, dword [rsp+dword*28]
182|//----- 16 byte aligned, ^^^ 32 byte register save area, owned by interpreter 184|//----- 16 byte aligned, ^^^ 32 byte register save area, owned by interpreter
183|.define SAVE_RET, aword [rsp+aword*9] //<-- rsp entering interpreter. 185|.define SAVE_RET, aword [rsp+aword*13] //<-- rsp entering interpreter.
186|.define SAVE_R8, aword [rsp+aword*12]
187|.define SAVE_R7, aword [rsp+aword*11]
188|.define SAVE_R6, aword [rsp+aword*10]
189|.define SAVE_R5, aword [rsp+aword*9]
184|.define SAVE_R4, aword [rsp+aword*8] 190|.define SAVE_R4, aword [rsp+aword*8]
185|.define SAVE_R3, aword [rsp+aword*7] 191|.define SAVE_R3, aword [rsp+aword*7]
186|.define SAVE_R2, aword [rsp+aword*6] 192|.define SAVE_R2, aword [rsp+aword*6]
@@ -204,16 +210,18 @@
204| 210|
205|.define CFRAME_SPACE, aword*5 // Delta for rsp (see <--). 211|.define CFRAME_SPACE, aword*5 // Delta for rsp (see <--).
206|.macro saveregs 212|.macro saveregs
207| push rbp; push r14; push r15; push rbx 213| push rbp; push rbx; push r15; push r14; push r13; push r12
208| sub rsp, CFRAME_SPACE 214| sub rsp, CFRAME_SPACE
209|.endmacro 215|.endmacro
210|.macro restoreregs 216|.macro restoreregs
211| add rsp, CFRAME_SPACE 217| add rsp, CFRAME_SPACE
212| pop rbx; pop r15; pop r14; pop rbp 218| pop r12; pop r13; pop r14; pop r15; pop rbx; pop rbp
213|.endmacro 219|.endmacro
214| 220|
215|//----- 16 byte aligned, 221|//----- 16 byte aligned,
216|.define SAVE_RET, aword [rsp+aword*9] //<-- rsp entering interpreter. 222|.define SAVE_RET, aword [rsp+aword*11] //<-- rsp entering interpreter.
223|.define SAVE_R6, aword [rsp+aword*10]
224|.define SAVE_R5, aword [rsp+aword*9]
217|.define SAVE_R4, aword [rsp+aword*8] 225|.define SAVE_R4, aword [rsp+aword*8]
218|.define SAVE_R3, aword [rsp+aword*7] 226|.define SAVE_R3, aword [rsp+aword*7]
219|.define SAVE_R2, aword [rsp+aword*6] 227|.define SAVE_R2, aword [rsp+aword*6]
diff --git a/src/lj_arch.h b/src/lj_arch.h
index abdb5af9..0b69e574 100644
--- a/src/lj_arch.h
+++ b/src/lj_arch.h
@@ -48,7 +48,7 @@
48#define LJ_TARGET_X64 1 48#define LJ_TARGET_X64 1
49#define LJ_TARGET_X86ORX64 1 49#define LJ_TARGET_X86ORX64 1
50#define LJ_PAGESIZE 4096 50#define LJ_PAGESIZE 4096
51#error "No support for x64 architecture (yet)" 51#define LJ_ARCH_NOJIT 1 /* NYI */
52#else 52#else
53#error "No target architecture defined" 53#error "No target architecture defined"
54#endif 54#endif
diff --git a/src/lj_frame.h b/src/lj_frame.h
index 14d640cd..398ec4e5 100644
--- a/src/lj_frame.h
+++ b/src/lj_frame.h
@@ -66,19 +66,19 @@ enum {
66#define CFRAME_SIZE (12*4) 66#define CFRAME_SIZE (12*4)
67#elif LJ_TARGET_X64 67#elif LJ_TARGET_X64
68#if _WIN64 68#if _WIN64
69#define CFRAME_OFS_ERRF (23*4) 69#define CFRAME_OFS_PREV (17*8)
70#define CFRAME_OFS_NRES (22*4) 70#define CFRAME_OFS_PC (33*4)
71#define CFRAME_OFS_PREV (13*8) 71#define CFRAME_OFS_L (32*4)
72#define CFRAME_OFS_L (24*4) 72#define CFRAME_OFS_ERRF (31*4)
73#define CFRAME_OFS_PC (25*4) 73#define CFRAME_OFS_NRES (30*4)
74#define CFRAME_SIZE (10*8) 74#define CFRAME_SIZE (14*8)
75#else 75#else
76#define CFRAME_OFS_ERRF (3*4)
77#define CFRAME_OFS_NRES (2*4)
78#define CFRAME_OFS_PREV (4*8) 76#define CFRAME_OFS_PREV (4*8)
79#define CFRAME_OFS_L (4*4)
80#define CFRAME_OFS_PC (5*4) 77#define CFRAME_OFS_PC (5*4)
81#define CFRAME_SIZE (10*8) 78#define CFRAME_OFS_L (4*4)
79#define CFRAME_OFS_ERRF (3*4)
80#define CFRAME_OFS_NRES (2*4)
81#define CFRAME_SIZE (12*8)
82#endif 82#endif
83#else 83#else
84#error "Missing CFRAME_* definitions for this architecture" 84#error "Missing CFRAME_* definitions for this architecture"