diff options
author | Evan Cheng <evan.cheng@apple.com> | 2008-11-08 01:31:27 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2008-11-08 01:31:27 +0000 |
commit | e96a490d7a0e224961d37f60f85e8556a64ed2b1 (patch) | |
tree | 8e08427d0f274f2b95911caf6bf81ff2ad73ad42 /lib/Target/ARM/ARMJITInfo.cpp | |
parent | fd827c41cec48d4b8a6159ad29f5069d613170a8 (diff) |
Handle ARM machine constantpool entry with non-lazy ptr.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@58882 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/ARM/ARMJITInfo.cpp')
-rw-r--r-- | lib/Target/ARM/ARMJITInfo.cpp | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/lib/Target/ARM/ARMJITInfo.cpp b/lib/Target/ARM/ARMJITInfo.cpp index c0b878251b..4118d6de21 100644 --- a/lib/Target/ARM/ARMJITInfo.cpp +++ b/lib/Target/ARM/ARMJITInfo.cpp @@ -133,14 +133,21 @@ ARMJITInfo::getLazyResolverFunction(JITCompilerFn F) { return ARMCompilationCallback; } +void *ARMJITInfo::emitGlobalValueNonLazyPtr(const GlobalValue *GV, void *Ptr, + MachineCodeEmitter &MCE) { + MCE.startFunctionStub(GV, 4, 4); // FIXME: Rename this. + MCE.emitWordLE((intptr_t)Ptr); + return MCE.finishFunctionStub(GV); +} + void *ARMJITInfo::emitFunctionStub(const Function* F, void *Fn, MachineCodeEmitter &MCE) { unsigned addr = (intptr_t)Fn; // If this is just a call to an external function, emit a branch instead of a // call. The code is the same except for one bit of the last instruction. if (Fn != (void*)(intptr_t)ARMCompilationCallback) { - // branch to the corresponding function addr - // the stub is 8-byte size and 4-aligned + // Branch to the corresponding function addr. + // The stub is 8-byte size and 4-aligned. MCE.startFunctionStub(F, 8, 4); MCE.emitWordLE(0xe51ff004); // LDR PC, [PC,#-4] MCE.emitWordLE(addr); // addr of function @@ -150,8 +157,8 @@ void *ARMJITInfo::emitFunctionStub(const Function* F, void *Fn, // This stub sets the return address to restart the stub, so that // the new branch will be invoked when we come back. // - // branch and link to the compilation callback. - // the stub is 16-byte size and 4-byte aligned. + // Branch and link to the compilation callback. + // The stub is 16-byte size and 4-byte aligned. MCE.startFunctionStub(F, 16, 4); // Save LR so the callback can determine which stub called it. // The compilation callback is responsible for popping this prior |