[llvm-commits] [llvm] r48706 - in /llvm/trunk/lib/Target/X86: X86CompilationCallback_Win64.asm X86JITInfo.cpp

Anton Korobeynikov asl at math.spbu.ru
Sun Mar 23 07:44:39 PDT 2008


Author: asl
Date: Sun Mar 23 09:44:32 2008
New Revision: 48706

URL: http://llvm.org/viewvc/llvm-project?rev=48706&view=rev
Log:
Add Win64 compilation callback. This allows easy examples to be JITed on Win64!

Added:
    llvm/trunk/lib/Target/X86/X86CompilationCallback_Win64.asm
Modified:
    llvm/trunk/lib/Target/X86/X86JITInfo.cpp

Added: llvm/trunk/lib/Target/X86/X86CompilationCallback_Win64.asm
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86CompilationCallback_Win64.asm?rev=48706&view=auto

==============================================================================
--- llvm/trunk/lib/Target/X86/X86CompilationCallback_Win64.asm (added)
+++ llvm/trunk/lib/Target/X86/X86CompilationCallback_Win64.asm Sun Mar 23 09:44:32 2008
@@ -0,0 +1,54 @@
+extrn X86CompilationCallback2: PROC
+
+.code
+X86CompilationCallback proc
+    push    rbp
+
+    ; Save RSP
+    mov     rbp, rsp
+
+    ; Save all int arg registers
+    push    rcx
+    push    rdx
+    push    r8
+    push    r9
+
+    ; Align stack on 16-byte boundary.
+    and     rsp, -16
+
+    ; Save all XMM arg registers
+    sub     rsp, 64
+    movaps  [rsp],     xmm0
+    movaps  [rsp+16],  xmm1
+    movaps  [rsp+32],  xmm2
+    movaps  [rsp+48],  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]
+    movaps  xmm2, [rsp+32]
+    movaps  xmm1, [rsp+16]
+    movaps  xmm0, [rsp]
+
+    ; 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

Modified: llvm/trunk/lib/Target/X86/X86JITInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86JITInfo.cpp?rev=48706&r1=48705&r2=48706&view=diff

==============================================================================
--- llvm/trunk/lib/Target/X86/X86JITInfo.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86JITInfo.cpp Sun Mar 23 09:44:32 2008
@@ -153,11 +153,10 @@
     CFI(".cfi_endproc\n")
   );
 # else
-  // No inline assembler support on this platform
-  void X86CompilationCallback() {
-    assert(0 && "Cannot call X86CompilationCallback() on a non-x86 arch!\n");
-    abort();
-  }
+  // No inline assembler support on this platform. The routine is in external
+  // file.
+  void X86CompilationCallback();
+
 # endif
 #elif defined (X86_32_JIT)
 # ifndef _MSC_VER





More information about the llvm-commits mailing list