Index: vm/jitrino/config/ia32/server_static.emconf =================================================================== --- vm/jitrino/config/ia32/server_static.emconf (revision 494759) +++ vm/jitrino/config/ia32/server_static.emconf (working copy) @@ -42,6 +42,7 @@ -XDjit.SS_OPT.arg.codegen.regalloc.bp_regalloc2.regs=ALL_XMM -XDjit.SS_OPT.arg.codegen.btr.insertCMOVs=no -XDjit.SS_OPT.arg.codegen.btr.removeConstCompare=yes +-XDjit.arg.codegen.emitter.align=4 #system properties Index: vm/jitrino/config/ia32/client.emconf =================================================================== --- vm/jitrino/config/ia32/client.emconf (revision 494759) +++ vm/jitrino/config/ia32/client.emconf (working copy) @@ -71,7 +71,7 @@ -XDjit.CD_OPT.arg.codegen.regalloc.bp_regalloc2.regs=ALL_XMM -XDjit.CD_OPT.arg.codegen.btr.insertCMOVs=no -XDjit.CD_OPT.arg.codegen.btr.removeConstCompare=yes +-XDjit.arg.codegen.emitter.align=4 - #system properties -Djava.compiler=client Index: vm/jitrino/config/ia32/opt.emconf =================================================================== --- vm/jitrino/config/ia32/opt.emconf (revision 494759) +++ vm/jitrino/config/ia32/opt.emconf (working copy) @@ -44,6 +44,7 @@ -XDjit.CS_OPT.arg.codegen.btr.insertCMOVs=no -XDjit.CS_OPT.arg.codegen.btr.removeConstCompare=yes +-XDjit.arg.codegen.emitter.align=4 #-XDjit.CS_OPT.arg.log.irdump.file=log/%jit%/%log%/%seqnb%_%class%.%method%.log #-XDjit.CS_OPT.arg.log=ct,ir,irdump,all Index: vm/jitrino/config/ia32/server.emconf =================================================================== --- vm/jitrino/config/ia32/server.emconf (revision 494759) +++ vm/jitrino/config/ia32/server.emconf (working copy) @@ -106,6 +106,7 @@ -XDjit.SD2_OPT.arg.codegen.regalloc.bp_regalloc2.regs=ALL_XMM -XDjit.SD2_OPT.arg.codegen.btr.insertCMOVs=no -XDjit.SD2_OPT.arg.codegen.btr.removeConstCompare=yes +-XDjit.arg.codegen.emitter.align=4 #system properties Index: vm/jitrino/src/codegenerator/ia32/Ia32CodeEmitter.cpp =================================================================== --- vm/jitrino/src/codegenerator/ia32/Ia32CodeEmitter.cpp (revision 494759) +++ vm/jitrino/src/codegenerator/ia32/Ia32CodeEmitter.cpp (working copy) @@ -341,10 +341,19 @@ memset(codeStreamStart, 0xCC, maxMethodSize); #endif + int alignment = getIntArg("align", 0); + + LoopTree * lt = irManager->getFlowGraph()->getLoopTree(); uint8 * ip = codeStreamStart; for( BasicBlock * bb = (BasicBlock*)irManager->getFlowGraph()->getEntryNode(); bb != NULL; bb=bb->getLayoutSucc()) { + + if (alignment && lt->isLoopHeader(bb) && ((POINTER_SIZE_INT)ip & (alignment-1))) { + POINTER_SIZE_INT align = alignment - ((POINTER_SIZE_INT)ip & (alignment-1)); + ip = (uint8*)EncoderBase::nops((char*)ip, align); + } + uint8 * blockStartIp = ip; bb->setCodeOffset( blockStartIp-codeStreamStart ); for (Inst* inst = (Inst*)bb->getFirstInst(); inst!=NULL; inst = inst->getNextInst()) {