Home | History | Annotate | Download | only in X86
      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 LLVMX86CompilationCallback2: 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    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
     66 X86CompilationCallback endp
     67 
     68 End
     69