[llvm-commits] CVS: llvm/lib/ExecutionEngine/JIT/JITEmitter.cpp
Evan Cheng
evan.cheng at apple.com
Thu Nov 16 12:05:08 PST 2006
Changes in directory llvm/lib/ExecutionEngine/JIT:
JITEmitter.cpp updated: 1.118 -> 1.119
---
Log message:
Allow target to specify alignment for function stub.
---
Diffs of the changes: (+11 -5)
JITEmitter.cpp | 16 +++++++++++-----
1 files changed, 11 insertions(+), 5 deletions(-)
Index: llvm/lib/ExecutionEngine/JIT/JITEmitter.cpp
diff -u llvm/lib/ExecutionEngine/JIT/JITEmitter.cpp:1.118 llvm/lib/ExecutionEngine/JIT/JITEmitter.cpp:1.119
--- llvm/lib/ExecutionEngine/JIT/JITEmitter.cpp:1.118 Thu Nov 9 13:32:13 2006
+++ llvm/lib/ExecutionEngine/JIT/JITEmitter.cpp Thu Nov 16 14:04:54 2006
@@ -275,7 +275,7 @@
JITMemoryManager(bool useGOT);
~JITMemoryManager();
- inline unsigned char *allocateStub(unsigned StubSize);
+ inline unsigned char *allocateStub(unsigned StubSize, unsigned Alignment);
/// startFunctionBody - When a function starts, allocate a block of free
/// executable memory, returning a pointer to it and its actual size.
@@ -403,8 +403,11 @@
Blocks.clear();
}
-unsigned char *JITMemoryManager::allocateStub(unsigned StubSize) {
+unsigned char *JITMemoryManager::allocateStub(unsigned StubSize,
+ unsigned Alignment) {
CurStubPtr -= StubSize;
+ CurStubPtr = (unsigned char*)(((intptr_t)CurStubPtr) &
+ ~(intptr_t)(Alignment-1));
if (CurStubPtr < StubBase) {
// FIXME: allocate a new block
std::cerr << "JIT ran out of memory for function stubs!\n";
@@ -700,7 +703,7 @@
void initJumpTableInfo(MachineJumpTableInfo *MJTI);
void emitJumpTableInfo(MachineJumpTableInfo *MJTI);
- virtual void startFunctionStub(unsigned StubSize);
+ virtual void startFunctionStub(unsigned StubSize, unsigned Alignment = 1);
virtual void* finishFunctionStub(const Function *F);
virtual void addRelocation(const MachineRelocation &MR) {
@@ -769,6 +772,9 @@
BufferBegin = CurBufferPtr = MemMgr.startFunctionBody(ActualSize);
BufferEnd = BufferBegin+ActualSize;
+ // Ensure the constant pool/jump table info is at least 4-byte aligned.
+ emitAlignment(16);
+
emitConstantPool(F.getConstantPool());
initJumpTableInfo(F.getJumpTableInfo());
@@ -928,12 +934,12 @@
}
}
-void JITEmitter::startFunctionStub(unsigned StubSize) {
+void JITEmitter::startFunctionStub(unsigned StubSize, unsigned Alignment) {
SavedBufferBegin = BufferBegin;
SavedBufferEnd = BufferEnd;
SavedCurBufferPtr = CurBufferPtr;
- BufferBegin = CurBufferPtr = MemMgr.allocateStub(StubSize);
+ BufferBegin = CurBufferPtr = MemMgr.allocateStub(StubSize, Alignment);
BufferEnd = BufferBegin+StubSize+1;
}
More information about the llvm-commits
mailing list