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 | 8510dc086ea828f08b1d58813130e62a14eedc0b (patch) | |
tree | faaf10716c4adbaddf3e1348d33ffd46c73f2f08 | |
parent | 5c0b61a64b80c63c095d9f6e4c216c39c8042d30 (diff) |
x86-64 JIT stub codegen.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35096 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Target/X86/X86JITInfo.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/lib/Target/X86/X86JITInfo.cpp b/lib/Target/X86/X86JITInfo.cpp index b32fab21db..3fb3da788d 100644 --- a/lib/Target/X86/X86JITInfo.cpp +++ b/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__ |