summaryrefslogtreecommitdiff
path: root/lib/Target/X86/X86CompilationCallback_Win64.asm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Target/X86/X86CompilationCallback_Win64.asm')
-rw-r--r--lib/Target/X86/X86CompilationCallback_Win64.asm56
1 files changed, 28 insertions, 28 deletions
diff --git a/lib/Target/X86/X86CompilationCallback_Win64.asm b/lib/Target/X86/X86CompilationCallback_Win64.asm
index 8002f98765..a11c5c3ce4 100644
--- a/lib/Target/X86/X86CompilationCallback_Win64.asm
+++ b/lib/Target/X86/X86CompilationCallback_Win64.asm
@@ -15,52 +15,52 @@ extrn X86CompilationCallback2: PROC
.code
X86CompilationCallback proc
+ ; Save all int arg registers into register spill area.
+ mov [rsp+ 8], rcx
+ mov [rsp+16], rdx
+ mov [rsp+24], r8
+ mov [rsp+32], r9
+
push rbp
- ; Save RSP
+ ; Save RSP.
mov rbp, rsp
- ; Save all int arg registers
- push rcx
- push rdx
- push r8
- push r9
-
; Align stack on 16-byte boundary.
and rsp, -16
- ; Save all XMM arg registers
- sub rsp, 64
- movaps [rsp], xmm0
- movaps [rsp+16], xmm1
- movaps [rsp+32], xmm2
- movaps [rsp+48], xmm3
+ ; Save all XMM arg registers. Also allocate reg spill area.
+ sub rsp, 96
+ movaps [rsp +32], xmm0
+ movaps [rsp+16+32], xmm1
+ movaps [rsp+32+32], xmm2
+ movaps [rsp+48+32], xmm3
; JIT callee
- ; Pass prev frame and return address
+ ; Pass prev frame and return address.
mov rcx, rbp
mov rdx, qword ptr [rbp+8]
call X86CompilationCallback2
- ; Restore all XMM arg registers
- movaps xmm3, [rsp+48]
- movaps xmm2, [rsp+32]
- movaps xmm1, [rsp+16]
- movaps xmm0, [rsp]
+ ; Restore all XMM arg registers.
+ movaps xmm3, [rsp+48+32]
+ movaps xmm2, [rsp+32+32]
+ movaps xmm1, [rsp+16+32]
+ movaps xmm0, [rsp +32]
- ; Restore RSP
+ ; Restore RSP.
mov rsp, rbp
- ; Restore all int arg registers
- sub rsp, 32
- pop r9
- pop r8
- pop rdx
- pop rcx
-
- ; Restore RBP
+ ; Restore RBP.
pop rbp
+
+ ; Restore all int arg registers.
+ mov r9, [rsp+32]
+ mov r8, [rsp+24]
+ mov rdx, [rsp+16]
+ mov rcx, [rsp+ 8]
+
ret
X86CompilationCallback endp