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 14 extrn X86CompilationCallback2: PROC 15 16 .code 17 X86CompilationCallback 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 X86CompilationCallback2 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 66 X86CompilationCallback endp 67 68 End 69