[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