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 14extrn LLVMX86CompilationCallback2: PROC 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] 45 call LLVMX86CompilationCallback2 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 69