|  | ;;===-- X86CompilationCallback_Win64.asm - Implement Win64 JIT callback ---=== | 
|  | ;; | 
|  | ;;                     The LLVM Compiler Infrastructure | 
|  | ;; | 
|  | ;; This file is distributed under the University of Illinois Open Source | 
|  | ;; License. See LICENSE.TXT for details. | 
|  | ;; | 
|  | ;;===----------------------------------------------------------------------=== | 
|  | ;; | 
|  | ;; This file implements the JIT interfaces for the X86 target. | 
|  | ;; | 
|  | ;;===----------------------------------------------------------------------=== | 
|  |  | 
|  | extrn X86CompilationCallback2: PROC | 
|  |  | 
|  | .code | 
|  | X86CompilationCallback proc | 
|  | push    rbp | 
|  |  | 
|  | ; Save RSP. | 
|  | mov     rbp, rsp | 
|  |  | 
|  | ; Save all int arg registers | 
|  | ; WARNING: We cannot use register spill area - we're generating stubs by hands! | 
|  | push    rcx | 
|  | push    rdx | 
|  | push    r8 | 
|  | push    r9 | 
|  |  | 
|  | ; Align stack on 16-byte boundary. | 
|  | and     rsp, -16 | 
|  |  | 
|  | ; Save all XMM arg registers. Also allocate reg spill area. | 
|  | sub     rsp, 96 | 
|  | movaps  [rsp   +32],  xmm0 | 
|  | movaps  [rsp+16+32],  xmm1 | 
|  | movaps  [rsp+32+32],  xmm2 | 
|  | movaps  [rsp+48+32],  xmm3 | 
|  |  | 
|  | ; JIT callee | 
|  |  | 
|  | ; Pass prev frame and return address. | 
|  | mov     rcx, rbp | 
|  | mov     rdx, qword ptr [rbp+8] | 
|  | call    X86CompilationCallback2 | 
|  |  | 
|  | ; Restore all XMM arg registers. | 
|  | movaps  xmm3, [rsp+48+32] | 
|  | movaps  xmm2, [rsp+32+32] | 
|  | movaps  xmm1, [rsp+16+32] | 
|  | movaps  xmm0, [rsp   +32] | 
|  |  | 
|  | ; Restore RSP. | 
|  | mov     rsp, rbp | 
|  |  | 
|  | ; Restore all int arg registers | 
|  | sub     rsp, 32 | 
|  | pop     r9 | 
|  | pop     r8 | 
|  | pop     rdx | 
|  | pop     rcx | 
|  |  | 
|  | ; Restore RBP. | 
|  | pop     rbp | 
|  | ret | 
|  | X86CompilationCallback endp | 
|  |  | 
|  | End |