diff options
author | Chris Lattner <sabre@nondot.org> | 2003-12-20 02:03:14 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2003-12-20 02:03:14 +0000 |
commit | ddec71c3b6a4aa1fedd485d5ae39f9878a2e19cb (patch) | |
tree | a946f0bc8ba2588daa1e9887492020a9822537e9 /llvm/lib/Target/X86/X86CodeEmitter.cpp | |
parent | 9bcae072d16f7ae0f611f3de142a3ee398e6d5cb (diff) | |
download | bcm5719-llvm-ddec71c3b6a4aa1fedd485d5ae39f9878a2e19cb.tar.gz bcm5719-llvm-ddec71c3b6a4aa1fedd485d5ae39f9878a2e19cb.zip |
A minor cleanup for better encapsulation
llvm-svn: 10545
Diffstat (limited to 'llvm/lib/Target/X86/X86CodeEmitter.cpp')
-rw-r--r-- | llvm/lib/Target/X86/X86CodeEmitter.cpp | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/llvm/lib/Target/X86/X86CodeEmitter.cpp b/llvm/lib/Target/X86/X86CodeEmitter.cpp index 1917e626a5b..d783f89fb2a 100644 --- a/llvm/lib/Target/X86/X86CodeEmitter.cpp +++ b/llvm/lib/Target/X86/X86CodeEmitter.cpp @@ -50,13 +50,17 @@ namespace { unsigned resolveFunctionReference(unsigned RetAddr); }; - JITResolver *TheJITResolver; + static JITResolver &getResolver(MachineCodeEmitter &MCE) { + static JITResolver *TheJITResolver = 0; + if (TheJITResolver == 0) + TheJITResolver = new JITResolver(MCE); + return *TheJITResolver; + } } + void *X86JITInfo::getJITStubForFunction(Function *F, MachineCodeEmitter &MCE) { - if (TheJITResolver == 0) - TheJITResolver = new JITResolver(MCE); - return (void*)((unsigned long)TheJITResolver->getLazyResolver(F)); + return (void*)((unsigned long)getResolver(MCE).getLazyResolver(F)); } void X86JITInfo::replaceMachineCodeForFunction (void *Old, void *New) { @@ -126,7 +130,8 @@ void JITResolver::CompilationCallback() { // Sanity check to make sure this really is a call instruction... assert(((unsigned char*)(intptr_t)RetAddr)[-1] == 0xE8 &&"Not a call instr!"); - unsigned NewVal = TheJITResolver->resolveFunctionReference(RetAddr); + JITResolver &JR = getResolver(*(MachineCodeEmitter*)0); + unsigned NewVal = JR.resolveFunctionReference(RetAddr); // Rewrite the call target... so that we don't fault every time we execute // the call. @@ -267,10 +272,8 @@ void Emitter::emitGlobalAddressForCall(GlobalValue *GV) { if (Address == 0) { // FIXME: this is JIT specific! - if (TheJITResolver == 0) - TheJITResolver = new JITResolver(MCE); - Address = TheJITResolver->addFunctionReference(MCE.getCurrentPCValue(), - cast<Function>(GV)); + Address = getResolver(MCE).addFunctionReference(MCE.getCurrentPCValue(), + cast<Function>(GV)); } emitMaybePCRelativeValue(Address, true); } @@ -288,9 +291,7 @@ void Emitter::emitGlobalAddressForPtr(GlobalValue *GV) { // if (Address == 0) { // FIXME: this is JIT specific! - if (TheJITResolver == 0) - TheJITResolver = new JITResolver(MCE); - Address = TheJITResolver->getLazyResolver((Function*)GV); + Address = getResolver(MCE).getLazyResolver((Function*)GV); } emitMaybePCRelativeValue(Address, false); |