/* * Satisfy an alignment constraint. Bridge the gap with int3's. */ void moveToAlign(CodeBlock& cb, const size_t align /* =kJmpTargetAlign */) { X64Assembler a { cb }; assertx(folly::isPowTwo(align)); size_t leftInBlock = align - ((align - 1) & uintptr_t(cb.frontier())); if (leftInBlock == align) return; if (leftInBlock > 2) { a.ud2(); leftInBlock -= 2; } if (leftInBlock > 0) { a.emitInt3s(leftInBlock); } }
/* * Satisfy an alignment constraint. Bridge the gap with int3's. */ void moveToAlign(CodeBlock& cb, const size_t align /* =kJmpTargetAlign */) { // TODO(2967396) implement properly, move function if (arch() == Arch::ARM) return; using namespace HPHP::Util; X64Assembler a { cb }; assert(isPowerOfTwo(align)); size_t leftInBlock = align - ((align - 1) & uintptr_t(cb.frontier())); if (leftInBlock == align) return; if (leftInBlock > 2) { a.ud2(); leftInBlock -= 2; } if (leftInBlock > 0) { a.emitInt3s(leftInBlock); } }