f9b5481a01f711e4e5ca7e3afd1766b9e023e0b9
[oota-llvm.git] / lib / Target / X86 / X86CompilationCallback_Win64.asm
1 extrn X86CompilationCallback2: PROC
2
3 .code
4 X86CompilationCallback proc
5     push    rbp
6
7     ; Save RSP
8     mov     rbp, rsp
9
10     ; Save all int arg registers
11     push    rcx
12     push    rdx
13     push    r8
14     push    r9
15
16     ; Align stack on 16-byte boundary.
17     and     rsp, -16
18
19     ; Save all XMM arg registers
20     sub     rsp, 64
21     movaps  [rsp],     xmm0
22     movaps  [rsp+16],  xmm1
23     movaps  [rsp+32],  xmm2
24     movaps  [rsp+48],  xmm3
25
26     ; JIT callee
27
28     ; Pass prev frame and return address
29     mov     rcx, rbp
30     mov     rdx, qword ptr [rbp+8]
31     call    X86CompilationCallback2
32
33     ; Restore all XMM arg registers
34     movaps  xmm3, [rsp+48]
35     movaps  xmm2, [rsp+32]
36     movaps  xmm1, [rsp+16]
37     movaps  xmm0, [rsp]
38
39     ; Restore RSP
40     mov     rsp, rbp
41
42     ; Restore all int arg registers
43     sub     rsp, 32
44     pop     r9
45     pop     r8
46     pop     rdx
47     pop     rcx
48
49     ; Restore RBP
50     pop     rbp
51     ret
52 X86CompilationCallback endp
53
54 End