diff options
-rw-r--r-- | src/buildvm_x86.dasc | 30 | ||||
-rw-r--r-- | src/lj_arch.h | 2 | ||||
-rw-r--r-- | src/lj_frame.h | 20 |
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" |