blob: f321778db24bbfeca4735ad1369caaf91c6fd323 [file] [log] [blame]
Anton Korobeynikov9ac72c42008-03-23 14:53:18 +00001;;===-- 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
Anton Korobeynikov5f287b92008-03-23 14:44:32 +000014extrn X86CompilationCallback2: PROC
15
16.code
17X86CompilationCallback proc
18 push rbp
19
Anton Korobeynikov2cbcdb72009-08-03 08:12:53 +000020 ; Save RSP.
Anton Korobeynikov5f287b92008-03-23 14:44:32 +000021 mov rbp, rsp
22
Anton Korobeynikov309b5e32009-08-03 08:43:36 +000023 ; 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
Anton Korobeynikov5f287b92008-03-23 14:44:32 +000030 ; Align stack on 16-byte boundary.
31 and rsp, -16
32
Anton Korobeynikov2cbcdb72009-08-03 08:12:53 +000033 ; 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
Anton Korobeynikov5f287b92008-03-23 14:44:32 +000039
40 ; JIT callee
41
Anton Korobeynikov2cbcdb72009-08-03 08:12:53 +000042 ; Pass prev frame and return address.
Anton Korobeynikov5f287b92008-03-23 14:44:32 +000043 mov rcx, rbp
44 mov rdx, qword ptr [rbp+8]
45 call X86CompilationCallback2
46
Anton Korobeynikov2cbcdb72009-08-03 08:12:53 +000047 ; 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]
Anton Korobeynikov5f287b92008-03-23 14:44:32 +000052
Anton Korobeynikov2cbcdb72009-08-03 08:12:53 +000053 ; Restore RSP.
Anton Korobeynikov5f287b92008-03-23 14:44:32 +000054 mov rsp, rbp
55
Anton Korobeynikov309b5e32009-08-03 08:43:36 +000056 ; Restore all int arg registers
57 sub rsp, 32
58 pop r9
59 pop r8
60 pop rdx
61 pop rcx
62
Anton Korobeynikov2cbcdb72009-08-03 08:12:53 +000063 ; Restore RBP.
Anton Korobeynikov5f287b92008-03-23 14:44:32 +000064 pop rbp
Anton Korobeynikov5f287b92008-03-23 14:44:32 +000065 ret
66X86CompilationCallback endp
67
68End