Fixed some bugs.
[llvm/zpu.git] / lib / Target / X86 / X86CompilationCallback_Win64.asm
blobf321778db24bbfeca4735ad1369caaf91c6fd323
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.
12 ;;===----------------------------------------------------------------------===
14 extrn X86CompilationCallback2: PROC
16 .code
17 X86CompilationCallback proc
18 push rbp
20 ; Save RSP.
21 mov rbp, rsp
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
30 ; Align stack on 16-byte boundary.
31 and rsp, -16
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
40 ; JIT callee
42 ; Pass prev frame and return address.
43 mov rcx, rbp
44 mov rdx, qword ptr [rbp+8]
45 call X86CompilationCallback2
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]
53 ; Restore RSP.
54 mov rsp, rbp
56 ; Restore all int arg registers
57 sub rsp, 32
58 pop r9
59 pop r8
60 pop rdx
61 pop rcx
63 ; Restore RBP.
64 pop rbp
65 ret
66 X86CompilationCallback endp
68 End