]> git.proxmox.com Git - rustc.git/blame - src/llvm/lib/Target/X86/X86CompilationCallback_Win64.asm
Imported Upstream version 1.0.0+dfsg1
[rustc.git] / src / llvm / lib / Target / X86 / X86CompilationCallback_Win64.asm
CommitLineData
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 14extrn LLVMX86CompilationCallback2: PROC
223e47cc
LB
15
16.code
17X86CompilationCallback 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
66X86CompilationCallback endp
67
68End