Index: jitrino/src/codegenerator/ipf/include/IpfIrPrinter.h =================================================================== --- jitrino/src/codegenerator/ipf/include/IpfIrPrinter.h (revision 504085) +++ jitrino/src/codegenerator/ipf/include/IpfIrPrinter.h (working copy) @@ -37,7 +37,7 @@ class IrPrinter { public: - IrPrinter(Cfg&, char*); + IrPrinter(Cfg&); void printCfgDot(char*); void printLayoutDot(char*); void printAsm(ostream&); @@ -65,7 +65,6 @@ MemoryManager &mm; Cfg &cfg; - char *logDirName; // name of log dir ostream *os; // output stream ofstream *ofs; // file output stream }; Index: jitrino/src/codegenerator/ipf/include/IpfCodeGenerator.h =================================================================== --- jitrino/src/codegenerator/ipf/include/IpfCodeGenerator.h (revision 504085) +++ jitrino/src/codegenerator/ipf/include/IpfCodeGenerator.h (working copy) @@ -34,17 +34,15 @@ // CodeGenerator //========================================================================================// -class CodeGenerator : public ::Jitrino::CodeGenerator { +class CodeGenerator : public SessionAction { public: - CodeGenerator(MemoryManager&, CompilationInterface&); - void genCode(SessionAction*, MethodCodeSelector&); + CodeGenerator(); + void run(); virtual ~CodeGenerator() {} protected: - MemoryManager &memoryManager; - CompilationInterface &compilationInterface; + CompilationInterface *compilationInterface; MethodDesc *methodDesc; - Cfg *cfg; }; Index: jitrino/src/codegenerator/ipf/IpfIrPrinter.cpp =================================================================== --- jitrino/src/codegenerator/ipf/IpfIrPrinter.cpp (revision 504085) +++ jitrino/src/codegenerator/ipf/IpfIrPrinter.cpp (working copy) @@ -35,20 +35,17 @@ // IrPrinter //========================================================================================// -IrPrinter::IrPrinter(Cfg &cfg_, char *logDirName_) : +IrPrinter::IrPrinter(Cfg &cfg_) : mm(cfg_.getMM()), cfg(cfg_), - logDirName(logDirName_), ofs(NULL) { } //----------------------------------------------------------------------------------------// -void IrPrinter::printLayoutDot(char *logFileName) { +void IrPrinter::printLayoutDot(char *logName) { - string logName(logDirName); - logName.append(logFileName); - ofs = new(mm) ofstream(logName.c_str()); + ofs = new(mm) ofstream(logName); BbNode *node = (BbNode *)cfg.getEnterNode(); BbNode *succ = node->getLayoutSucc(); @@ -69,11 +66,9 @@ //----------------------------------------------------------------------------------------// -void IrPrinter::printCfgDot(char *logFileName) { +void IrPrinter::printCfgDot(char *logName) { - string logName(logDirName); - logName.append(logFileName); - ofs = new(mm) ofstream(logName.c_str()); + ofs = new(mm) ofstream(logName); NodeVector &nodes = cfg.search(SEARCH_POST_ORDER); Index: jitrino/src/codegenerator/ipf/IpfCodeGenerator.cpp =================================================================== --- jitrino/src/codegenerator/ipf/IpfCodeGenerator.cpp (revision 504085) +++ jitrino/src/codegenerator/ipf/IpfCodeGenerator.cpp (working copy) @@ -33,32 +33,48 @@ #include "IpfPrologEpilogGenerator.h" #include "IpfRuntimeSupport.h" #include "IpfCfgVerifier.h" +#include "CodeGenerator.h" //#include "IpfInstrumentator.h" namespace Jitrino { namespace IPF { +static const char* help = " Ipf CodeGen\n"; +static ActionFactory _ipf_codegen("ipf_codegen", help); + //========================================================================================// // IpfCodeGenerator //========================================================================================// -CodeGenerator::CodeGenerator(MemoryManager &memoryManager_, - CompilationInterface &compilationInterface_) - : memoryManager(memoryManager_), compilationInterface(compilationInterface_) { +CodeGenerator::CodeGenerator() { - cfg = NULL; - methodDesc = NULL; + compilationInterface = NULL; + cfg = NULL; + methodDesc = NULL; } //----------------------------------------------------------------------------------------// -void CodeGenerator::genCode(SessionAction *sa, MethodCodeSelector &methodCodeSelector) { +void CodeGenerator::run() { + + MemoryManager mm(0x1000, "IpfCodeGenerator"); - MemoryManager mm(0x1000, "IpfCodeGenerator"); - cfg = new(mm) Cfg(mm, compilationInterface); - IrPrinter irPrinter(*cfg, "LOG"); //(char *)Log::getLogDirName()); - methodDesc = compilationInterface.getMethodToCompile(); + CompilationContext *cc = CompilationContext::getCurrentContext(); + IRManager &irManager = *cc->getHIRManager(); + CompilationInterface *ci = cc->getVMCompilationInterface(); + MethodDesc *methodDesc = ci->getMethodToCompile(); + ::Jitrino::OpndManager &opndManager = irManager.getOpndManager(); + const OptimizerFlags &optFlags = irManager.getOptimizerFlags(); + VarOpnd *varOpnds = opndManager.getVarOpnds(); + MethodCodeSelector *methodCodeSelector = new(mm) _MethodCodeSelector(irManager, methodDesc, + varOpnds, &irManager.getFlowGraph(), opndManager, optFlags.sink_constants, optFlags.sink_constants1); + + compilationInterface = CompilationContext::getCurrentContext()->getVMCompilationInterface(); + cfg = new(mm) Cfg(mm, *compilationInterface); + methodDesc = compilationInterface->getMethodToCompile(); + IrPrinter irPrinter(*cfg); + if(LOG_ON) { const char *methodName = methodDesc->getName(); const char *methodTypeName = (methodDesc->getParentType()!=NULL @@ -69,9 +85,11 @@ IPF_LOG << endl << methodTypeName << "." << methodName << methodSignature << endl; } + //compilationInterface->lockMethodData(); + IPF_LOG << endl << "=========== Stage: Code Selector =============================" << endl; - IpfMethodCodeSelector ipfMethodCodeSelector(*cfg, compilationInterface); - methodCodeSelector.selectCode(ipfMethodCodeSelector); + IpfMethodCodeSelector ipfMethodCodeSelector(*cfg, *compilationInterface); + methodCodeSelector->selectCode(ipfMethodCodeSelector); methodDesc = ipfMethodCodeSelector.getMethodDesc(); cfg->getOpndManager()->initCompBases((BbNode *)cfg->getEnterNode()); @@ -98,7 +116,7 @@ liveAnalyzer.makeLiveSets(false); IPF_LOG << endl << "=========== Stage: Build GC Root Set =========================" << endl; - RuntimeSupport runtimeSupport(*cfg, compilationInterface); + RuntimeSupport runtimeSupport(*cfg, *compilationInterface); runtimeSupport.buildRootSet(); IPF_LOG << endl << "=========== Stage: Register Allocator ========================" << endl; @@ -116,11 +134,13 @@ if(LOG_ON) irPrinter.printAsm(LOG_OUT); IPF_LOG << endl << "=========== Stage: Code Emitter ==============================" << endl; - Emitter emitter(*cfg, compilationInterface, false); + Emitter emitter(*cfg, *compilationInterface, false); bool ret = emitter.emit(); IPF_LOG << endl << "=========== Stage: Make Runtime Info =========================" << endl; runtimeSupport.makeRuntimeInfo(); + + //compilationInterface->unlockMethodData(); if(ret) IPF_LOG << endl << "=========== Compilation Successful ===========================" << endl; else IPF_LOG << endl << "=========== Compilation Failed ===============================" << endl; Index: jitrino/src/main/Jitrino.cpp =================================================================== --- jitrino/src/main/Jitrino.cpp (revision 504085) +++ jitrino/src/main/Jitrino.cpp (working copy) @@ -272,9 +272,9 @@ bool Jitrino::CompileMethod(CompilationContext* cc) { CompilationInterface* compilationInterface = cc->getVMCompilationInterface(); -#ifdef _IPF_ //IPF CG params are not safe -> add them to CompilationContext and remove this lock - compilationInterface->lockMethodData(); -#endif +//#ifdef _IPF_ //IPF CG params are not safe -> add them to CompilationContext and remove this lock +// compilationInterface->lockMethodData(); +//#endif bool success = false; MethodDesc& methodDesc = *compilationInterface->getMethodToCompile(); initialize_parameters(cc, methodDesc); @@ -285,9 +285,9 @@ } else { success = compileMethod(cc); } -#ifdef _IPF_ - compilationInterface->unlockMethodData(); -#endif +//#ifdef _IPF_ +// compilationInterface->unlockMethodData(); +//#endif return success; } Index: vmcore/src/util/linux/signals_ipf.cpp =================================================================== --- vmcore/src/util/linux/signals_ipf.cpp (revision 504085) +++ vmcore/src/util/linux/signals_ipf.cpp (working copy) @@ -81,6 +81,7 @@ void asm_jvmti_exception_catch_callback() { // FIXME: not implemented + fprintf(stderr, "FIXME: asm_jvmti_exception_catch_callback: not implemented\n"); assert(0); abort(); } @@ -88,6 +89,7 @@ static bool java_throw_from_sigcontext(ucontext_t *uc, Class* exc_clss) { // FIXME: not implemented + fprintf(stderr, "FIXME: java_throw_from_sigcontext: not implemented\n"); assert(0); abort(); return false; @@ -102,6 +104,7 @@ static void throw_from_sigcontext(ucontext_t *uc, Class* exc_clss) { // FIXME: not implemented + fprintf(stderr, "FIXME: throw_from_sigcontext: not implemented\n"); assert(0); abort(); }