void smashJcc(TCA inst, TCA target, ConditionCode cc) { always_assert(is_aligned(inst, Alignment::SmashJcc)); if (cc == CC_None) { X64Assembler::patchJcc(inst, target); } else { auto& cb = mcg->code().blockFor(inst); CodeCursor cursor { cb, inst }; X64Assembler a { cb }; a.jcc(cc, target); } }
std::pair<TCA,TCA> emitSmashableJccAndJmp(CodeBlock& cb, TCA target, ConditionCode cc) { assertx(cc != CC_None); align(cb, Alignment::SmashJccAndJmp, AlignContext::Live); X64Assembler a { cb }; auto const jcc = cb.frontier(); a.jcc(cc, target); auto const jmp = cb.frontier(); a.jmp(target); return std::make_pair(jcc, jmp); }