TCA genFuncPrologue(TransID transID, Func* func, int argc) { auto context = prologue_context(transID, func, func->getEntryForNumArgs(argc)); IRGS env{context, TransFlags{}}; auto& cb = mcg->code.main(); // Dump the func guard in the TC before anything else. emitFuncGuard(func, cb); auto const start = cb.frontier(); irgen::emitFuncPrologue(env, argc, transID); irgen::sealUnit(env); genCode(env.unit, CodeKind::CrossTrace); return start; }
TCA genFuncPrologue(TransID transID, TransKind kind, Func* func, int argc, CodeCache::View code, CGMeta& fixups) { auto context = prologue_context(transID, kind, func, func->getEntryForNumArgs(argc)); IRUnit unit{context}; irgen::IRGS env{unit}; auto& cb = code.main(); // Dump the func guard in the TC before anything else. emitFuncGuard(func, cb, fixups); auto const start = cb.frontier(); irgen::emitFuncPrologue(env, argc, transID); irgen::sealUnit(env); irlower::genCode(env.unit, code, fixups, CodeKind::CrossTrace); return start; }
bool emit(Venv& env, const funcguard& i) { emitFuncGuard(i.func, *env.cb, env.meta, i.watch); return true; }