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; } _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits