]>
Commit | Line | Data |
---|---|---|
223e47cc LB |
1 | ;;===-- X86CompilationCallback_Win64.asm - Implement Win64 JIT callback ---=== |
2 | ;; | |
3 | ;; The LLVM Compiler Infrastructure | |
4 | ;; | |
5 | ;; This file is distributed under the University of Illinois Open Source | |
6 | ;; License. See LICENSE.TXT for details. | |
7 | ;; | |
8 | ;;===----------------------------------------------------------------------=== | |
9 | ;; | |
10 | ;; This file implements the JIT interfaces for the X86 target. | |
11 | ;; | |
12 | ;;===----------------------------------------------------------------------=== | |
13 | ||
970d7e83 | 14 | extrn LLVMX86CompilationCallback2: PROC |
223e47cc LB |
15 | |
16 | .code | |
17 | X86CompilationCallback proc | |
18 | push rbp | |
19 | ||
20 | ; Save RSP. | |
21 | mov rbp, rsp | |
22 | ||
23 | ; Save all int arg registers | |
24 | ; WARNING: We cannot use register spill area - we're generating stubs by hands! | |
25 | push rcx | |
26 | push rdx | |
27 | push r8 | |
28 | push r9 | |
29 | ||
30 | ; Align stack on 16-byte boundary. | |
31 | and rsp, -16 | |
32 | ||
33 | ; Save all XMM arg registers. Also allocate reg spill area. | |
34 | sub rsp, 96 | |
35 | movaps [rsp +32], xmm0 | |
36 | movaps [rsp+16+32], xmm1 | |
37 | movaps [rsp+32+32], xmm2 | |
38 | movaps [rsp+48+32], xmm3 | |
39 | ||
40 | ; JIT callee | |
41 | ||
42 | ; Pass prev frame and return address. | |
43 | mov rcx, rbp | |
44 | mov rdx, qword ptr [rbp+8] | |
970d7e83 | 45 | call LLVMX86CompilationCallback2 |
223e47cc LB |
46 | |
47 | ; Restore all XMM arg registers. | |
48 | movaps xmm3, [rsp+48+32] | |
49 | movaps xmm2, [rsp+32+32] | |
50 | movaps xmm1, [rsp+16+32] | |
51 | movaps xmm0, [rsp +32] | |
52 | ||
53 | ; Restore RSP. | |
54 | mov rsp, rbp | |
55 | ||
56 | ; Restore all int arg registers | |
57 | sub rsp, 32 | |
58 | pop r9 | |
59 | pop r8 | |
60 | pop rdx | |
61 | pop rcx | |
62 | ||
63 | ; Restore RBP. | |
64 | pop rbp | |
65 | ret | |
66 | X86CompilationCallback endp | |
67 | ||
68 | End |