You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by ch...@apache.org on 2008/11/02 14:34:23 UTC
svn commit: r709880 -
/harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32CodeEmitter.cpp
Author: chunrong
Date: Sun Nov 2 05:34:23 2008
New Revision: 709880
URL: http://svn.apache.org/viewvc?rev=709880&view=rev
Log:
Apply patch of HARMONY-5955, reclaim unused memory units in Jitrino
Modified:
harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32CodeEmitter.cpp
Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32CodeEmitter.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32CodeEmitter.cpp?rev=709880&r1=709879&r2=709880&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32CodeEmitter.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32CodeEmitter.cpp Sun Nov 2 05:34:23 2008
@@ -63,7 +63,7 @@
void emitCode();
void registerExceptionHandlers();
void registerExceptionRegion(void * regionStart, void * regionEnd, Node * regionDispatchNode);
- void packCode();
+ int packCode();
void postPass();
void registerDirectCall(MethodDesc * md, void * instStartAddr);
@@ -297,7 +297,7 @@
constantAreaLayout.doLayout(irManager);
irManager->resolveRuntimeInfo();
emitCode();
- packCode();
+ //packCode(); //.this phase of function is moved into code emit phase
postPass();
constantAreaLayout.finalizeSwitchTables();
traversalInfo.resize(irManager->getFlowGraph()->getMaxNodeId() + 1, 0);
@@ -543,6 +543,11 @@
unsigned codeSize = (unsigned)(ip-codeStreamStart);
assert( codeSize < maxMethodSize );
+/*....Perform code pack to resolve target addresses of branck instructions before copy the native code to code buffer....*/
+ irManager->setCodeStartAddr(codeStreamStart);
+ int my_displacement = packCode();
+ codeSize = codeSize - my_displacement;
+
U_8 * codeBlock = (U_8*)irManager->getCompilationInterface().allocateCodeBlock(
codeSize , JMP_TARGET_ALIGMENT, getCodeSectionHeat(0), 0, false );
memcpy(codeBlock, codeStreamStart, codeSize);
@@ -556,7 +561,8 @@
}
//________________________________________________________________________________________
-void CodeEmitter::packCode() {
+int CodeEmitter::packCode() {
+ int bbDisplacement = 0;
bool newOpndsCreated = false;
for( BasicBlock * bb = (BasicBlock*)irManager->getFlowGraph()->getEntryNode(), * succ; bb != NULL; bb = succ) {
succ = (BasicBlock*)bb->getLayoutSucc();
@@ -588,7 +594,7 @@
int succCodeOffset = succ->getCodeOffset();
int bbCodeSize = bb->getCodeSize();
int succCodeSize = succ->getCodeSize();
- int bbDisplacement = succCodeOffset - bbCodeOffset - bbCodeSize;
+ bbDisplacement = succCodeOffset - bbCodeOffset - bbCodeSize;
if (bbDisplacement != 0){
U_8 * ps = (U_8*)irManager->getCodeStartAddr() + succCodeOffset;
U_8 * pd = ps - bbDisplacement;
@@ -602,6 +608,8 @@
}
if (newOpndsCreated)
irManager->fixLivenessInfo();
+
+ return bbDisplacement;
}
//________________________________________________________________________________________