feat: 9.5.9
This commit is contained in:
parent
cb1753732b
commit
35f43a7909
1084 changed files with 558985 additions and 0 deletions
69
c/a6nt-jump.asm
Executable file
69
c/a6nt-jump.asm
Executable file
|
@ -0,0 +1,69 @@
|
|||
; We do not use Microsoft's implementation because its longjmp unwinds
|
||||
; the stack to support C++ destructors, and the stack frames generated
|
||||
; by Chez Scheme do not have the required information for this to work
|
||||
; properly.
|
||||
; See https://docs.microsoft.com/en-us/cpp/build/x64-calling-convention
|
||||
|
||||
.code
|
||||
|
||||
S_setjmp proc
|
||||
; store nonvolatile registers & control words
|
||||
mov [rcx], rbx
|
||||
mov [rcx+08h], rbp
|
||||
mov [rcx+10h], rdi
|
||||
mov [rcx+18h], rsi
|
||||
mov [rcx+20h], rsp
|
||||
mov [rcx+28h], r12
|
||||
mov [rcx+30h], r13
|
||||
mov [rcx+38h], r14
|
||||
mov [rcx+40h], r15
|
||||
stmxcsr [rcx+48h]
|
||||
fnstcw [rcx+4ch]
|
||||
movdqu [rcx+50h], xmm6
|
||||
movdqu [rcx+60h], xmm7
|
||||
movdqu [rcx+70h], xmm8
|
||||
movdqu [rcx+80h], xmm9
|
||||
movdqu [rcx+90h], xmm10
|
||||
movdqu [rcx+0a0h], xmm11
|
||||
movdqu [rcx+0b0h], xmm12
|
||||
movdqu [rcx+0c0h], xmm13
|
||||
movdqu [rcx+0d0h], xmm14
|
||||
movdqu [rcx+0e0h], xmm15
|
||||
; store return address
|
||||
mov rax, [rsp]
|
||||
mov [rcx+0f0h], rax
|
||||
xor eax, eax
|
||||
ret
|
||||
S_setjmp endp
|
||||
|
||||
S_longjmp proc
|
||||
; restore nonvolatile registers & control words
|
||||
mov rbx, [rcx]
|
||||
mov rbp, [rcx+08h]
|
||||
mov rdi, [rcx+10h]
|
||||
mov rsi, [rcx+18h]
|
||||
mov rsp, [rcx+20h]
|
||||
mov r12, [rcx+28h]
|
||||
mov r13, [rcx+30h]
|
||||
mov r14, [rcx+38h]
|
||||
mov r15, [rcx+40h]
|
||||
ldmxcsr [rcx+48h]
|
||||
fldcw [rcx+4ch]
|
||||
movdqu xmm6, [rcx+50h]
|
||||
movdqu xmm7, [rcx+60h]
|
||||
movdqu xmm8, [rcx+70h]
|
||||
movdqu xmm9, [rcx+80h]
|
||||
movdqu xmm10, [rcx+90h]
|
||||
movdqu xmm11, [rcx+0a0h]
|
||||
movdqu xmm12, [rcx+0b0h]
|
||||
movdqu xmm13, [rcx+0c0h]
|
||||
movdqu xmm14, [rcx+0d0h]
|
||||
movdqu xmm15, [rcx+0e0h]
|
||||
; restore return address
|
||||
mov rax, [rcx+0f0h]
|
||||
mov [rsp], rax
|
||||
mov rax, rdx
|
||||
ret
|
||||
S_longjmp endp
|
||||
|
||||
end
|
Reference in a new issue