diff options
author | Evan Cheng <evan.cheng@apple.com> | 2007-03-14 10:48:08 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2007-03-14 10:48:08 +0000 |
commit | 386dfc9251851ae734cea85e4d212e7c256fe48d (patch) | |
tree | c80223a62fb6e26a85165d9984c7c5d8d86c9f90 /llvm/lib/Target/X86/X86JITInfo.cpp | |
parent | e1a95206e301c2c9160fcadbc8404e9856c71f9d (diff) | |
download | bcm5719-llvm-386dfc9251851ae734cea85e4d212e7c256fe48d.tar.gz bcm5719-llvm-386dfc9251851ae734cea85e4d212e7c256fe48d.zip |
x86-64 JIT stub codegen.
llvm-svn: 35096
Diffstat (limited to 'llvm/lib/Target/X86/X86JITInfo.cpp')
-rw-r--r-- | llvm/lib/Target/X86/X86JITInfo.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86JITInfo.cpp b/llvm/lib/Target/X86/X86JITInfo.cpp index b32fab21db0..3fb3da788db 100644 --- a/llvm/lib/Target/X86/X86JITInfo.cpp +++ b/llvm/lib/Target/X86/X86JITInfo.cpp @@ -306,10 +306,21 @@ void *X86JITInfo::emitFunctionStub(void *Fn, MachineCodeEmitter &MCE) { bool NotCC = Fn != (void*)(intptr_t)X86CompilationCallback; #endif if (NotCC) { +#ifdef __x86_64__ + MCE.startFunctionStub(13, 4); + MCE.emitByte(0x49); // REX prefix + MCE.emitByte(0xB8+2); // movabsq r10 + MCE.emitWordLE(((unsigned *)&Fn)[0]); + MCE.emitWordLE(((unsigned *)&Fn)[1]); + MCE.emitByte(0x41); // REX prefix + MCE.emitByte(0xFF); // jmpq *r10 + MCE.emitByte(2 | (4 << 3) | (3 << 6)); +#else MCE.startFunctionStub(5, 4); MCE.emitByte(0xE9); MCE.emitWordLE((intptr_t)Fn-MCE.getCurrentPCValue()-4); return MCE.finishFunctionStub(0); +#endif } #ifdef __x86_64__ |