void SrcRec::chainFrom(IncomingBranch br) { assert(br.type() == IncomingBranch::Tag::ADDR || mcg->code.isValidCodeAddress(br.toSmash())); TCA destAddr = getTopTranslation(); m_incomingBranches.push_back(br); TRACE(1, "SrcRec(%p)::chainFrom %p -> %p (type %d); %zd incoming branches\n", this, br.toSmash(), destAddr, br.type(), m_incomingBranches.size()); br.patch(destAddr); }
void SrcRec::chainFrom(IncomingBranch br) { assertx(br.type() == IncomingBranch::Tag::ADDR || tc::isValidCodeAddress(br.toSmash())); TCA destAddr = getTopTranslation(); m_incomingBranches.push_back(br); TRACE(1, "SrcRec(%p)::chainFrom %p -> %p (type %d); %zd incoming branches\n", this, br.toSmash(), destAddr, static_cast<int>(br.type()), m_incomingBranches.size()); br.patch(destAddr); if (RuntimeOption::EvalEnableReusableTC) { tc::recordJump(br.toSmash(), this); } }