MCPcopy Create free account
hub / github.com/ReadyTalk/avian / resolveTargetSites

Function resolveTargetSites

src/codegen/compiler.cpp:1669–1707  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1667}
1668
1669void resolveTargetSites(Context* c,
1670 Event* e,
1671 SiteRecordList* frozen,
1672 Site** sites)
1673{
1674 for (FrameIterator it(c, e->stackAfter, e->localsAfter); it.hasMore();) {
1675 FrameIterator::Element el = it.next(c);
1676 Value* v = el.value;
1677 Read* r = live(c, v);
1678
1679 if (r and sites[el.localIndex] == 0) {
1680 SiteMask mask(lir::Operand::RegisterPairMask | lir::Operand::MemoryMask,
1681 c->regFile->generalRegisters,
1682 AnyFrameIndex);
1683
1684 Site* s = pickSourceSite(
1685 c, r, 0, 0, &mask, false, true, true, acceptForResolve);
1686
1687 if (s == 0) {
1688 s = maybeMove(c, v, mask, false, true, ResolveRegisterReserveCount);
1689 }
1690
1691 freeze(c, frozen, s, v);
1692
1693 sites[el.localIndex] = s->copy(c);
1694
1695 if (DebugControl) {
1696 char buffer[256];
1697 sites[el.localIndex]->toString(c, buffer, 256);
1698 fprintf(stderr,
1699 "resolve target %s for %p local %d frame %d\n",
1700 buffer,
1701 el.value,
1702 el.localIndex,
1703 el.frameIndex(c));
1704 }
1705 }
1706 }
1707}
1708
1709void resolveJunctionSites(Context* c, Event* e, SiteRecordList* frozen)
1710{

Callers 2

resolveJunctionSitesFunction · 0.85
resolveBranchSitesFunction · 0.85

Calls 8

pickSourceSiteFunction · 0.85
maybeMoveFunction · 0.85
freezeFunction · 0.85
frameIndexMethod · 0.80
nextMethod · 0.65
toStringMethod · 0.65
hasMoreMethod · 0.45
copyMethod · 0.45

Tested by

no test coverage detected