| 1667 | } |
| 1668 | |
| 1669 | void 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 | |
| 1709 | void resolveJunctionSites(Context* c, Event* e, SiteRecordList* frozen) |
| 1710 | { |
no test coverage detected