summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/X86
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2003-12-20 02:03:14 +0000
committerChris Lattner <sabre@nondot.org>2003-12-20 02:03:14 +0000
commitddec71c3b6a4aa1fedd485d5ae39f9878a2e19cb (patch)
treea946f0bc8ba2588daa1e9887492020a9822537e9 /llvm/lib/Target/X86
parent9bcae072d16f7ae0f611f3de142a3ee398e6d5cb (diff)
downloadbcm5719-llvm-ddec71c3b6a4aa1fedd485d5ae39f9878a2e19cb.tar.gz
bcm5719-llvm-ddec71c3b6a4aa1fedd485d5ae39f9878a2e19cb.zip
A minor cleanup for better encapsulation
llvm-svn: 10545
Diffstat (limited to 'llvm/lib/Target/X86')
-rw-r--r--llvm/lib/Target/X86/X86CodeEmitter.cpp25
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);
OpenPOWER on IntegriCloud