diff options
Diffstat (limited to 'src/buildvm_x86.dasc')
-rw-r--r-- | src/buildvm_x86.dasc | 30 |
1 files changed, 19 insertions, 11 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] |