// 参考:lli.cpp的实现 static void run_module(llvm::Module *mod, llvm::GenericValue &gv, QVector<llvm::GenericValue> &args) { // debug_module(mod); qDebug()<<"1111111"; llvm::InitializeNativeTarget(); llvm::InitializeNativeTargetAsmPrinter(); llvm::InitializeNativeTargetAsmParser(); llvm::ExecutionEngine *EE = NULL; qDebug()<<"222222222"; std::string Error; std::unique_ptr<llvm::Module> tmod(mod); llvm::EngineBuilder builder(std::move(tmod)); qDebug()<<EE<<"aaa is sym search disabled:"; // builder.setUseMCJIT(true); // builder.setMArch("core2"); // 这种强制设置可能引起问题,使用三个InitailzeNativexxx函数初始化。 EE = builder.create(); qDebug()<<EE<<"is sym search disabled:"<<EE->isSymbolSearchingDisabled(); //* 这些行还是有用的,否则在用Qt相关类时崩溃(在普通的print无问题) // 不过这些调用应用是每个函数都调用还是初始化调用一次呢。 EE->finalizeObject(); EE->runStaticConstructorsDestructors(false); /* for (llvm::Module::iterator I = mod->begin(), E = mod->end(); I != E; ++I) { llvm::Function *Fn = &*I; if (!Fn->isDeclaration()) EE->getPointerToFunction(Fn); } */ // */ int miret = -1; llvm::GenericValue rgv; std::vector<std::string> argv; std::vector<llvm::GenericValue> gargv; foreach (auto a, args) { gargv.push_back(a); }
u32 t31(void){ return( tmod(31)+1 ) ; }
u32 t255(void){ return( tmod(255) ) ; }
/* these are not quite timer modulo x return a value in range 1 to x rather than 0 to x-1 for modulo always non-zero */ u32 t7(void){ return( tmod(7)+1 ) ; }
u32 t5(void){ return( tmod(5) ) ; }