From 8510dc086ea828f08b1d58813130e62a14eedc0b Mon Sep 17 00:00:00 2001 From: Evan Cheng Date: Wed, 14 Mar 2007 10:48:08 +0000 Subject: [PATCH] x86-64 JIT stub codegen. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35096 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/X86/X86JITInfo.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/lib/Target/X86/X86JITInfo.cpp b/lib/Target/X86/X86JITInfo.cpp index b32fab21db0..3fb3da788db 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__