summaryrefslogtreecommitdiff
path: root/src/buildvm_x86.dasc
diff options
context:
space:
mode:
Diffstat (limited to 'src/buildvm_x86.dasc')
-rw-r--r--src/buildvm_x86.dasc30
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]