| ;;===-- 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 |