AArch32: Use the shared scopes `CodeBufferCheckScope` and `EmissionCheckScope`.

This patch continues toward the goal of unifying code-generation scopes for all
backends.

The new scopes differ from the existing AArch32 mechanisms, so a few tests for
literal and veneer pools needed to be updated.

The patch also adds AArch32 tests for the new scopes.

Change-Id: Ia6a93e6e860b47e703b6c9034fefa405810c18a0
diff --git a/src/aarch32/macro-assembler-aarch32.h b/src/aarch32/macro-assembler-aarch32.h
index e0add29..50fa19c 100644
--- a/src/aarch32/macro-assembler-aarch32.h
+++ b/src/aarch32/macro-assembler-aarch32.h
@@ -28,7 +28,10 @@
 #ifndef VIXL_AARCH32_MACRO_ASSEMBLER_AARCH32_H_
 #define VIXL_AARCH32_MACRO_ASSEMBLER_AARCH32_H_
 
+#include "code-generation-scopes-vixl.h"
+#include "macro-assembler-interface.h"
 #include "utils-vixl.h"
+
 #include "aarch32/instructions-aarch32.h"
 #include "aarch32/assembler-aarch32.h"
 #include "aarch32/operands-aarch32.h"
@@ -107,32 +110,38 @@
   std::list<RawLiteral*> keep_until_delete_;
 };
 
+
 // Macro assembler for aarch32 instruction set.
-class MacroAssembler : public Assembler {
+class MacroAssembler : public Assembler, public MacroAssemblerInterface {
  public:
   enum EmitOption { kBranchRequired, kNoBranchRequired };
 
- private:
-  class AllowAssemblerEmissionScope {
-    MacroAssembler* masm_;
+  virtual AssemblerBase* AsAssemblerBase() VIXL_OVERRIDE { return this; }
 
+  virtual void BlockPools() VIXL_OVERRIDE {
+    literal_pool_manager_.Block();
+    veneer_pool_manager_.Block();
+  }
+  virtual void ReleasePools() VIXL_OVERRIDE {
+    literal_pool_manager_.Release();
+    veneer_pool_manager_.Release();
+  }
+  virtual void EnsureEmitPoolsFor(size_t size) VIXL_OVERRIDE {
+    // TODO: Optimise this. It also checks that there is space in the buffer,
+    // which we do not need to do here.
+    VIXL_ASSERT(IsUint32(size));
+    EnsureEmitFor(static_cast<uint32_t>(size));
+  }
+
+ private:
+  class MacroEmissionCheckScope : public EmissionCheckScope {
    public:
-    AllowAssemblerEmissionScope(MacroAssembler* masm, uint32_t size)
-        : masm_(masm) {
-      VIXL_ASSERT(!masm->AllowAssembler());
-      masm->EnsureEmitFor(size);
-#ifdef VIXL_DEBUG
-      masm->SetAllowAssembler(true);
-#else
-      USE(masm_);
-#endif
-    }
-    ~AllowAssemblerEmissionScope() {
-#ifdef VIXL_DEBUG
-      VIXL_ASSERT(masm_->AllowAssembler());
-      masm_->SetAllowAssembler(false);
-#endif
-    }
+    explicit MacroEmissionCheckScope(MacroAssemblerInterface* masm)
+        : EmissionCheckScope(masm, kTypicalMacroInstructionMaxSize) {}
+
+   private:
+    static const size_t kTypicalMacroInstructionMaxSize =
+        8 * kMaxInstructionSizeInBytes;
   };
 
   class MacroAssemblerContext {
@@ -286,7 +295,8 @@
 
   class LiteralPoolManager {
    public:
-    explicit LiteralPoolManager(MacroAssembler* const masm) : masm_(masm) {
+    explicit LiteralPoolManager(MacroAssembler* const masm)
+        : masm_(masm), monitor_(0) {
       ResetCheckpoint();
     }
 
@@ -327,6 +337,16 @@
 
     bool IsEmpty() const { return GetLiteralPoolSize() == 0; }
 
+    void Block() { monitor_++; }
+    void Release() {
+      VIXL_ASSERT(IsBlocked());
+      if (--monitor_ == 0) {
+        // Ensure the pool has not been blocked for too long.
+        VIXL_ASSERT(masm_->GetCursorOffset() <= checkpoint_);
+      }
+    }
+    bool IsBlocked() const { return monitor_ != 0; }
+
    private:
     MacroAssembler* const masm_;
     LiteralPool literal_pool_;
@@ -335,6 +355,8 @@
     // emitted. A default value of Label::kMaxOffset means that the checkpoint
     // is invalid.
     Label::Offset checkpoint_;
+    // Indicates whether the emission of this pool is blocked.
+    int monitor_;
   };
 
   void PerformEnsureEmit(Label::Offset target, uint32_t extra_size);
@@ -353,7 +375,7 @@
     uint32_t where = cursor + GetArchitectureStatePCOffset();
     // Emit the instruction, via the assembler
     {
-      AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+      MacroEmissionCheckScope guard(this);
       instr_callback.emit(this, literal);
     }
     if (!literal->IsManuallyPlaced()) {
@@ -362,8 +384,7 @@
         GetBuffer()->Rewind(cursor);
         literal->InvalidateLastForwardReference(RawLiteral::kNoUpdateNecessary);
         EmitLiteralPool(kBranchRequired);
-        AllowAssemblerEmissionScope allow_scope(this,
-                                                kMaxInstructionSizeInBytes);
+        MacroEmissionCheckScope guard(this);
         instr_callback.emit(this, literal);
       }
       literal_pool_manager_.GetLiteralPool()->AddLiteral(literal);
@@ -379,7 +400,6 @@
         literal_pool_manager_(this),
         veneer_pool_manager_(this),
         generate_simulator_code_(VIXL_AARCH32_GENERATE_SIMULATOR_CODE) {
-    SetAllowAssembler(false);
 #ifdef VIXL_DEBUG
     SetAllowMacroInstructions(true);
 #else
@@ -395,7 +415,6 @@
         literal_pool_manager_(this),
         veneer_pool_manager_(this),
         generate_simulator_code_(VIXL_AARCH32_GENERATE_SIMULATOR_CODE) {
-    SetAllowAssembler(false);
 #ifdef VIXL_DEBUG
     SetAllowMacroInstructions(true);
 #endif
@@ -408,7 +427,6 @@
         literal_pool_manager_(this),
         veneer_pool_manager_(this),
         generate_simulator_code_(VIXL_AARCH32_GENERATE_SIMULATOR_CODE) {
-    SetAllowAssembler(false);
 #ifdef VIXL_DEBUG
     SetAllowMacroInstructions(true);
 #endif
@@ -421,10 +439,12 @@
   // Tell whether any of the macro instruction can be used. When false the
   // MacroAssembler will assert if a method which can emit a variable number
   // of instructions is called.
-  void SetAllowMacroInstructions(bool value) {
+  void SetAllowMacroInstructions(bool value) VIXL_OVERRIDE {
     allow_macro_instructions_ = value;
   }
-  bool AllowMacroInstructions() const { return allow_macro_instructions_; }
+  bool AllowMacroInstructions() const VIXL_OVERRIDE {
+    return allow_macro_instructions_;
+  }
 #endif
 
   void FinalizeCode() {
@@ -590,6 +610,7 @@
     }
   }
   void EmitLiteralPool(EmitOption option = kBranchRequired) {
+    VIXL_ASSERT(!literal_pool_manager_.IsBlocked());
     EmitLiteralPool(literal_pool_manager_.GetLiteralPool(), option);
     literal_pool_manager_.ResetCheckpoint();
     ComputeCheckpoint();
@@ -856,7 +877,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     bool can_use_it =
         // ADC<c>{<q>} {<Rdn>,} <Rdn>, <Rm> ; T1
         operand.IsPlainRegister() && rn.IsLow() && rd.Is(rn) &&
@@ -904,7 +925,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     adcs(cond, rd, rn, operand);
   }
@@ -918,7 +939,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     if (cond.Is(al) && rd.Is(rn) && operand.IsImmediate()) {
       uint32_t immediate = operand.GetImmediate();
       if (immediate == 0) {
@@ -994,7 +1015,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     adds(cond, rd, rn, operand);
   }
@@ -1002,12 +1023,11 @@
     Adds(al, rd, rn, operand);
   }
 
-
   void Adr(Condition cond, Register rd, Label* label) {
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     adr(cond, rd, label);
   }
@@ -1019,7 +1039,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     if (cond.Is(al) && operand.IsImmediate()) {
       uint32_t immediate = operand.GetImmediate();
       if (immediate == 0) {
@@ -1077,7 +1097,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     ands(cond, rd, rn, operand);
   }
@@ -1091,7 +1111,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     bool can_use_it =
         // ASR<c>{<q>} {<Rd>,} <Rm>, #<imm> ; T2
         (operand.IsImmediate() && (operand.GetImmediate() >= 1) &&
@@ -1142,7 +1162,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     asrs(cond, rd, rm, operand);
   }
@@ -1153,7 +1173,7 @@
   void B(Condition cond, Label* label) {
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     b(cond, label);
     AddBranchLabel(label);
   }
@@ -1164,7 +1184,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     bfc(cond, rd, lsb, operand);
   }
@@ -1182,7 +1202,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     bfi(cond, rd, rn, lsb, operand);
   }
@@ -1196,7 +1216,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     if (cond.Is(al) && operand.IsImmediate()) {
       uint32_t immediate = operand.GetImmediate();
       if ((immediate == 0) && rd.Is(rn)) {
@@ -1254,7 +1274,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     bics(cond, rd, rn, operand);
   }
@@ -1265,7 +1285,7 @@
   void Bkpt(Condition cond, uint32_t imm) {
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     bkpt(cond, imm);
   }
@@ -1274,7 +1294,7 @@
   void Bl(Condition cond, Label* label) {
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     bl(cond, label);
     AddBranchLabel(label);
@@ -1284,7 +1304,7 @@
   void Blx(Condition cond, Label* label) {
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     blx(cond, label);
     AddBranchLabel(label);
@@ -1295,7 +1315,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     bool can_use_it =
         // BLX{<c>}{<q>} <Rm> ; T1
         !rm.IsPC();
@@ -1308,7 +1328,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     bool can_use_it =
         // BX{<c>}{<q>} <Rm> ; T1
         !rm.IsPC();
@@ -1321,7 +1341,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     bxj(cond, rm);
   }
@@ -1331,7 +1351,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     cbnz(rn, label);
     AddBranchLabel(label);
   }
@@ -1340,7 +1360,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     cbz(rn, label);
     AddBranchLabel(label);
   }
@@ -1348,7 +1368,7 @@
   void Clrex(Condition cond) {
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     clrex(cond);
   }
@@ -1359,7 +1379,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     clz(cond, rd, rm);
   }
@@ -1370,7 +1390,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     bool can_use_it =
         // CMN{<c>}{<q>} <Rn>, <Rm> ; T1
         operand.IsPlainRegister() && rn.IsLow() &&
@@ -1385,7 +1405,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     bool can_use_it =
         // CMP{<c>}{<q>} <Rn>, #<imm8> ; T1
         (operand.IsImmediate() && (operand.GetImmediate() <= 255) &&
@@ -1404,7 +1424,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     crc32b(cond, rd, rn, rm);
   }
@@ -1416,7 +1436,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     crc32cb(cond, rd, rn, rm);
   }
@@ -1430,7 +1450,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     crc32ch(cond, rd, rn, rm);
   }
@@ -1444,7 +1464,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     crc32cw(cond, rd, rn, rm);
   }
@@ -1458,7 +1478,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     crc32h(cond, rd, rn, rm);
   }
@@ -1470,7 +1490,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     crc32w(cond, rd, rn, rm);
   }
@@ -1479,7 +1499,7 @@
   void Dmb(Condition cond, MemoryBarrier option) {
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     dmb(cond, option);
   }
@@ -1488,7 +1508,7 @@
   void Dsb(Condition cond, MemoryBarrier option) {
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     dsb(cond, option);
   }
@@ -1500,7 +1520,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     if (cond.Is(al) && rd.Is(rn) && operand.IsImmediate()) {
       uint32_t immediate = operand.GetImmediate();
       if (immediate == 0) {
@@ -1558,7 +1578,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     eors(cond, rd, rn, operand);
   }
@@ -1574,7 +1594,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(dreglist));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     fldmdbx(cond, rn, write_back, dreglist);
   }
@@ -1590,7 +1610,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(dreglist));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     fldmiax(cond, rn, write_back, dreglist);
   }
@@ -1606,7 +1626,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(dreglist));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     fstmdbx(cond, rn, write_back, dreglist);
   }
@@ -1622,7 +1642,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(dreglist));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     fstmiax(cond, rn, write_back, dreglist);
   }
@@ -1633,7 +1653,7 @@
   void Hlt(Condition cond, uint32_t imm) {
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     hlt(cond, imm);
   }
@@ -1642,7 +1662,7 @@
   void Hvc(Condition cond, uint32_t imm) {
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     hvc(cond, imm);
   }
@@ -1651,7 +1671,7 @@
   void Isb(Condition cond, MemoryBarrier option) {
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     isb(cond, option);
   }
@@ -1663,7 +1683,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     lda(cond, rt, operand);
   }
@@ -1674,7 +1694,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     ldab(cond, rt, operand);
   }
@@ -1685,7 +1705,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     ldaex(cond, rt, operand);
   }
@@ -1696,7 +1716,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     ldaexb(cond, rt, operand);
   }
@@ -1713,7 +1733,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     ldaexd(cond, rt, rt2, operand);
   }
@@ -1726,7 +1746,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     ldaexh(cond, rt, operand);
   }
@@ -1739,7 +1759,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     ldah(cond, rt, operand);
   }
@@ -1753,7 +1773,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     ldm(cond, rn, write_back, registers);
   }
@@ -1769,7 +1789,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     ldmda(cond, rn, write_back, registers);
   }
@@ -1785,7 +1805,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     ldmdb(cond, rn, write_back, registers);
   }
@@ -1801,7 +1821,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     ldmea(cond, rn, write_back, registers);
   }
@@ -1817,7 +1837,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     ldmed(cond, rn, write_back, registers);
   }
@@ -1833,7 +1853,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     ldmfa(cond, rn, write_back, registers);
   }
@@ -1849,7 +1869,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     ldmfd(cond, rn, write_back, registers);
   }
@@ -1865,7 +1885,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     ldmib(cond, rn, write_back, registers);
   }
@@ -1878,7 +1898,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     bool can_use_it =
         // LDR{<c>}{<q>} <Rt>, [<Rn> {, #{+}<imm>}] ; T1
         (operand.IsImmediate() && rt.IsLow() &&
@@ -1904,7 +1924,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     ldr(cond, rt, label);
   }
@@ -1915,7 +1935,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     bool can_use_it =
         // LDRB{<c>}{<q>} <Rt>, [<Rn> {, #{+}<imm>}] ; T1
         (operand.IsImmediate() && rt.IsLow() &&
@@ -1936,7 +1956,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     ldrb(cond, rt, label);
   }
@@ -1951,7 +1971,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     ldrd(cond, rt, rt2, operand);
   }
@@ -1964,7 +1984,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt2));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     ldrd(cond, rt, rt2, label);
   }
@@ -1977,7 +1997,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     ldrex(cond, rt, operand);
   }
@@ -1988,7 +2008,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     ldrexb(cond, rt, operand);
   }
@@ -2005,7 +2025,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     ldrexd(cond, rt, rt2, operand);
   }
@@ -2018,7 +2038,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     ldrexh(cond, rt, operand);
   }
@@ -2031,7 +2051,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     bool can_use_it =
         // LDRH{<c>}{<q>} <Rt>, [<Rn> {, #{+}<imm>}] ; T1
         (operand.IsImmediate() && rt.IsLow() &&
@@ -2052,7 +2072,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     ldrh(cond, rt, label);
   }
@@ -2063,7 +2083,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     bool can_use_it =
         // LDRSB{<c>}{<q>} <Rt>, [<Rn>, {+}<Rm>] ; T1
         operand.IsPlainRegister() && rt.IsLow() &&
@@ -2079,7 +2099,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     ldrsb(cond, rt, label);
   }
@@ -2090,7 +2110,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     bool can_use_it =
         // LDRSH{<c>}{<q>} <Rt>, [<Rn>, {+}<Rm>] ; T1
         operand.IsPlainRegister() && rt.IsLow() &&
@@ -2106,7 +2126,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     ldrsh(cond, rt, label);
   }
@@ -2118,7 +2138,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     bool can_use_it =
         // LSL<c>{<q>} {<Rd>,} <Rm>, #<imm> ; T2
         (operand.IsImmediate() && (operand.GetImmediate() >= 1) &&
@@ -2170,7 +2190,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     lsls(cond, rd, rm, operand);
   }
@@ -2184,7 +2204,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     bool can_use_it =
         // LSR<c>{<q>} {<Rd>,} <Rm>, #<imm> ; T2
         (operand.IsImmediate() && (operand.GetImmediate() >= 1) &&
@@ -2235,7 +2255,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     lsrs(cond, rd, rm, operand);
   }
@@ -2250,7 +2270,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     mla(cond, rd, rn, rm, ra);
   }
@@ -2288,7 +2308,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     mlas(cond, rd, rn, rm, ra);
   }
@@ -2303,7 +2323,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     mls(cond, rd, rn, rm, ra);
   }
@@ -2316,7 +2336,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     bool can_use_it =
         // MOV<c>{<q>} <Rd>, #<imm8> ; T1
         (operand.IsImmediate() && rd.IsLow() &&
@@ -2385,7 +2405,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     movs(cond, rd, operand);
   }
@@ -2396,18 +2416,17 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     movt(cond, rd, operand);
   }
   void Movt(Register rd, const Operand& operand) { Movt(al, rd, operand); }
 
-
   void Mrs(Condition cond, Register rd, SpecialRegister spec_reg) {
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     mrs(cond, rd, spec_reg);
   }
@@ -2419,7 +2438,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     msr(cond, spec_reg, operand);
   }
@@ -2433,7 +2452,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     bool can_use_it =
         // MUL<c>{<q>} <Rdm>, <Rn>{, <Rdm>} ; T1
         rd.Is(rm) && rn.IsLow() && rm.IsLow();
@@ -2474,7 +2493,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     muls(cond, rd, rn, rm);
   }
@@ -2485,7 +2504,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     bool can_use_it =
         // MVN<c>{<q>} <Rd>, <Rm> ; T1
         operand.IsPlainRegister() && rd.IsLow() &&
@@ -2526,7 +2545,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     mvns(cond, rd, operand);
   }
@@ -2535,7 +2554,7 @@
   void Nop(Condition cond) {
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     nop(cond);
   }
@@ -2547,7 +2566,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     if (cond.Is(al) && operand.IsImmediate()) {
       uint32_t immediate = operand.GetImmediate();
       if (immediate == 0) {
@@ -2594,7 +2613,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     orns(cond, rd, rn, operand);
   }
@@ -2608,7 +2627,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     if (cond.Is(al) && operand.IsImmediate()) {
       uint32_t immediate = operand.GetImmediate();
       if ((immediate == 0) && rd.Is(rn)) {
@@ -2666,7 +2685,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     orrs(cond, rd, rn, operand);
   }
@@ -2680,7 +2699,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     pkhbt(cond, rd, rn, operand);
   }
@@ -2694,7 +2713,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     pkhtb(cond, rd, rn, operand);
   }
@@ -2705,7 +2724,7 @@
   void Pld(Condition cond, Label* label) {
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     pld(cond, label);
   }
@@ -2715,7 +2734,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     pld(cond, operand);
   }
@@ -2725,7 +2744,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     pldw(cond, operand);
   }
@@ -2735,7 +2754,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     pli(cond, operand);
   }
@@ -2744,7 +2763,7 @@
   void Pli(Condition cond, Label* label) {
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     pli(cond, label);
   }
@@ -2754,7 +2773,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     pop(cond, registers);
   }
@@ -2764,7 +2783,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     pop(cond, rt);
   }
@@ -2774,7 +2793,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     push(cond, registers);
   }
@@ -2784,7 +2803,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     push(cond, rt);
   }
@@ -2796,7 +2815,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     qadd(cond, rd, rm, rn);
   }
@@ -2808,7 +2827,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     qadd16(cond, rd, rn, rm);
   }
@@ -2820,7 +2839,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     qadd8(cond, rd, rn, rm);
   }
@@ -2832,7 +2851,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     qasx(cond, rd, rn, rm);
   }
@@ -2844,7 +2863,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     qdadd(cond, rd, rm, rn);
   }
@@ -2856,7 +2875,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     qdsub(cond, rd, rm, rn);
   }
@@ -2868,7 +2887,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     qsax(cond, rd, rn, rm);
   }
@@ -2880,7 +2899,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     qsub(cond, rd, rm, rn);
   }
@@ -2892,7 +2911,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     qsub16(cond, rd, rn, rm);
   }
@@ -2904,7 +2923,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     qsub8(cond, rd, rn, rm);
   }
@@ -2915,7 +2934,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     rbit(cond, rd, rm);
   }
@@ -2926,7 +2945,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     rev(cond, rd, rm);
   }
@@ -2937,7 +2956,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     rev16(cond, rd, rm);
   }
@@ -2948,7 +2967,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     revsh(cond, rd, rm);
   }
@@ -2960,7 +2979,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     bool can_use_it =
         // ROR<c>{<q>} {<Rdm>,} <Rdm>, <Rs> ; T1
         operand.IsPlainRegister() && rd.Is(rm) && rd.IsLow() &&
@@ -3001,7 +3020,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     rors(cond, rd, rm, operand);
   }
@@ -3014,7 +3033,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     rrx(cond, rd, rm);
   }
@@ -3041,7 +3060,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     rrxs(cond, rd, rm);
   }
@@ -3053,7 +3072,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     bool can_use_it =
         // RSB<c>{<q>} {<Rd>, }<Rn>, #0 ; T1
         operand.IsImmediate() && rd.IsLow() && rn.IsLow() &&
@@ -3101,7 +3120,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     rsbs(cond, rd, rn, operand);
   }
@@ -3115,7 +3134,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     rsc(cond, rd, rn, operand);
   }
@@ -3152,7 +3171,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     rscs(cond, rd, rn, operand);
   }
@@ -3166,7 +3185,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     sadd16(cond, rd, rn, rm);
   }
@@ -3178,7 +3197,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     sadd8(cond, rd, rn, rm);
   }
@@ -3190,7 +3209,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     sasx(cond, rd, rn, rm);
   }
@@ -3202,7 +3221,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     bool can_use_it =
         // SBC<c>{<q>} {<Rdn>,} <Rdn>, <Rm> ; T1
         operand.IsPlainRegister() && rn.IsLow() && rd.Is(rn) &&
@@ -3250,7 +3269,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     sbcs(cond, rd, rn, operand);
   }
@@ -3268,7 +3287,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     sbfx(cond, rd, rn, lsb, operand);
   }
@@ -3282,7 +3301,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     sdiv(cond, rd, rn, rm);
   }
@@ -3294,7 +3313,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     sel(cond, rd, rn, rm);
   }
@@ -3306,7 +3325,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     shadd16(cond, rd, rn, rm);
   }
@@ -3320,7 +3339,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     shadd8(cond, rd, rn, rm);
   }
@@ -3332,7 +3351,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     shasx(cond, rd, rn, rm);
   }
@@ -3344,7 +3363,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     shsax(cond, rd, rn, rm);
   }
@@ -3356,7 +3375,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     shsub16(cond, rd, rn, rm);
   }
@@ -3370,7 +3389,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     shsub8(cond, rd, rn, rm);
   }
@@ -3384,7 +3403,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     smlabb(cond, rd, rn, rm, ra);
   }
@@ -3400,7 +3419,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     smlabt(cond, rd, rn, rm, ra);
   }
@@ -3416,7 +3435,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     smlad(cond, rd, rn, rm, ra);
   }
@@ -3432,7 +3451,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     smladx(cond, rd, rn, rm, ra);
   }
@@ -3448,7 +3467,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     smlal(cond, rdlo, rdhi, rn, rm);
   }
@@ -3464,7 +3483,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     smlalbb(cond, rdlo, rdhi, rn, rm);
   }
@@ -3480,7 +3499,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     smlalbt(cond, rdlo, rdhi, rn, rm);
   }
@@ -3496,7 +3515,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     smlald(cond, rdlo, rdhi, rn, rm);
   }
@@ -3512,7 +3531,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     smlaldx(cond, rdlo, rdhi, rn, rm);
   }
@@ -3528,7 +3547,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     smlals(cond, rdlo, rdhi, rn, rm);
   }
@@ -3544,7 +3563,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     smlaltb(cond, rdlo, rdhi, rn, rm);
   }
@@ -3560,7 +3579,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     smlaltt(cond, rdlo, rdhi, rn, rm);
   }
@@ -3576,7 +3595,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     smlatb(cond, rd, rn, rm, ra);
   }
@@ -3592,7 +3611,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     smlatt(cond, rd, rn, rm, ra);
   }
@@ -3608,7 +3627,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     smlawb(cond, rd, rn, rm, ra);
   }
@@ -3624,7 +3643,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     smlawt(cond, rd, rn, rm, ra);
   }
@@ -3640,7 +3659,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     smlsd(cond, rd, rn, rm, ra);
   }
@@ -3656,7 +3675,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     smlsdx(cond, rd, rn, rm, ra);
   }
@@ -3672,7 +3691,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     smlsld(cond, rdlo, rdhi, rn, rm);
   }
@@ -3688,7 +3707,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     smlsldx(cond, rdlo, rdhi, rn, rm);
   }
@@ -3704,7 +3723,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     smmla(cond, rd, rn, rm, ra);
   }
@@ -3720,7 +3739,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     smmlar(cond, rd, rn, rm, ra);
   }
@@ -3736,7 +3755,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     smmls(cond, rd, rn, rm, ra);
   }
@@ -3752,7 +3771,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     smmlsr(cond, rd, rn, rm, ra);
   }
@@ -3766,7 +3785,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     smmul(cond, rd, rn, rm);
   }
@@ -3778,7 +3797,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     smmulr(cond, rd, rn, rm);
   }
@@ -3790,7 +3809,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     smuad(cond, rd, rn, rm);
   }
@@ -3802,7 +3821,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     smuadx(cond, rd, rn, rm);
   }
@@ -3814,7 +3833,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     smulbb(cond, rd, rn, rm);
   }
@@ -3826,7 +3845,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     smulbt(cond, rd, rn, rm);
   }
@@ -3840,7 +3859,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     smull(cond, rdlo, rdhi, rn, rm);
   }
@@ -3881,7 +3900,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     smulls(cond, rdlo, rdhi, rn, rm);
   }
@@ -3895,7 +3914,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     smultb(cond, rd, rn, rm);
   }
@@ -3907,7 +3926,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     smultt(cond, rd, rn, rm);
   }
@@ -3919,7 +3938,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     smulwb(cond, rd, rn, rm);
   }
@@ -3931,7 +3950,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     smulwt(cond, rd, rn, rm);
   }
@@ -3943,7 +3962,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     smusd(cond, rd, rn, rm);
   }
@@ -3955,7 +3974,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     smusdx(cond, rd, rn, rm);
   }
@@ -3966,7 +3985,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     ssat(cond, rd, imm, operand);
   }
@@ -3979,7 +3998,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     ssat16(cond, rd, imm, rn);
   }
@@ -3993,7 +4012,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     ssax(cond, rd, rn, rm);
   }
@@ -4005,7 +4024,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     ssub16(cond, rd, rn, rm);
   }
@@ -4017,7 +4036,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     ssub8(cond, rd, rn, rm);
   }
@@ -4028,7 +4047,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     stl(cond, rt, operand);
   }
@@ -4039,7 +4058,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     stlb(cond, rt, operand);
   }
@@ -4054,7 +4073,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     stlex(cond, rd, rt, operand);
   }
@@ -4071,7 +4090,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     stlexb(cond, rd, rt, operand);
   }
@@ -4090,7 +4109,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     stlexd(cond, rd, rt, rt2, operand);
   }
@@ -4110,7 +4129,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     stlexh(cond, rd, rt, operand);
   }
@@ -4123,7 +4142,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     stlh(cond, rt, operand);
   }
@@ -4137,7 +4156,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     stm(cond, rn, write_back, registers);
   }
@@ -4153,7 +4172,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     stmda(cond, rn, write_back, registers);
   }
@@ -4169,7 +4188,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     stmdb(cond, rn, write_back, registers);
   }
@@ -4185,7 +4204,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     stmea(cond, rn, write_back, registers);
   }
@@ -4201,7 +4220,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     stmed(cond, rn, write_back, registers);
   }
@@ -4217,7 +4236,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     stmfa(cond, rn, write_back, registers);
   }
@@ -4233,7 +4252,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     stmfd(cond, rn, write_back, registers);
   }
@@ -4249,7 +4268,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     stmib(cond, rn, write_back, registers);
   }
@@ -4262,7 +4281,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     bool can_use_it =
         // STR{<c>}{<q>} <Rt>, [<Rn> {, #{+}<imm>}] ; T1
         (operand.IsImmediate() && rt.IsLow() &&
@@ -4289,7 +4308,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     bool can_use_it =
         // STRB{<c>}{<q>} <Rt>, [<Rn> {, #{+}<imm>}] ; T1
         (operand.IsImmediate() && rt.IsLow() &&
@@ -4315,7 +4334,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     strd(cond, rt, rt2, operand);
   }
@@ -4332,7 +4351,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     strex(cond, rd, rt, operand);
   }
@@ -4349,7 +4368,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     strexb(cond, rd, rt, operand);
   }
@@ -4368,7 +4387,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     strexd(cond, rd, rt, rt2, operand);
   }
@@ -4388,7 +4407,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     strexh(cond, rd, rt, operand);
   }
@@ -4401,7 +4420,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     bool can_use_it =
         // STRH{<c>}{<q>} <Rt>, [<Rn> {, #{+}<imm>}] ; T1
         (operand.IsImmediate() && rt.IsLow() &&
@@ -4424,7 +4443,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     if (cond.Is(al) && rd.Is(rn) && operand.IsImmediate()) {
       uint32_t immediate = operand.GetImmediate();
       if (immediate == 0) {
@@ -4488,7 +4507,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     subs(cond, rd, rn, operand);
   }
@@ -4496,11 +4515,10 @@
     Subs(al, rd, rn, operand);
   }
 
-
   void Svc(Condition cond, uint32_t imm) {
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     svc(cond, imm);
   }
@@ -4512,7 +4530,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     sxtab(cond, rd, rn, operand);
   }
@@ -4529,7 +4547,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     sxtab16(cond, rd, rn, operand);
   }
@@ -4543,7 +4561,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     sxtah(cond, rd, rn, operand);
   }
@@ -4556,7 +4574,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     sxtb(cond, rd, operand);
   }
@@ -4567,7 +4585,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     sxtb16(cond, rd, operand);
   }
@@ -4578,19 +4596,18 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     sxth(cond, rd, operand);
   }
   void Sxth(Register rd, const Operand& operand) { Sxth(al, rd, operand); }
 
-
   void Teq(Condition cond, Register rn, const Operand& operand) {
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     teq(cond, rn, operand);
   }
@@ -4601,7 +4618,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     bool can_use_it =
         // TST{<c>}{<q>} <Rn>, <Rm> ; T1
         operand.IsPlainRegister() && rn.IsLow() &&
@@ -4617,7 +4634,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     uadd16(cond, rd, rn, rm);
   }
@@ -4629,7 +4646,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     uadd8(cond, rd, rn, rm);
   }
@@ -4641,7 +4658,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     uasx(cond, rd, rn, rm);
   }
@@ -4657,7 +4674,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     ubfx(cond, rd, rn, lsb, operand);
   }
@@ -4668,7 +4685,7 @@
   void Udf(Condition cond, uint32_t imm) {
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     udf(cond, imm);
   }
@@ -4680,7 +4697,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     udiv(cond, rd, rn, rm);
   }
@@ -4692,7 +4709,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     uhadd16(cond, rd, rn, rm);
   }
@@ -4706,7 +4723,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     uhadd8(cond, rd, rn, rm);
   }
@@ -4718,7 +4735,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     uhasx(cond, rd, rn, rm);
   }
@@ -4730,7 +4747,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     uhsax(cond, rd, rn, rm);
   }
@@ -4742,7 +4759,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     uhsub16(cond, rd, rn, rm);
   }
@@ -4756,7 +4773,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     uhsub8(cond, rd, rn, rm);
   }
@@ -4770,7 +4787,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     umaal(cond, rdlo, rdhi, rn, rm);
   }
@@ -4786,7 +4803,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     umlal(cond, rdlo, rdhi, rn, rm);
   }
@@ -4827,7 +4844,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     umlals(cond, rdlo, rdhi, rn, rm);
   }
@@ -4843,7 +4860,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     umull(cond, rdlo, rdhi, rn, rm);
   }
@@ -4884,7 +4901,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     umulls(cond, rdlo, rdhi, rn, rm);
   }
@@ -4898,7 +4915,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     uqadd16(cond, rd, rn, rm);
   }
@@ -4912,7 +4929,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     uqadd8(cond, rd, rn, rm);
   }
@@ -4924,7 +4941,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     uqasx(cond, rd, rn, rm);
   }
@@ -4936,7 +4953,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     uqsax(cond, rd, rn, rm);
   }
@@ -4948,7 +4965,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     uqsub16(cond, rd, rn, rm);
   }
@@ -4962,7 +4979,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     uqsub8(cond, rd, rn, rm);
   }
@@ -4974,7 +4991,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     usad8(cond, rd, rn, rm);
   }
@@ -4988,7 +5005,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     usada8(cond, rd, rn, rm, ra);
   }
@@ -5001,7 +5018,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     usat(cond, rd, imm, operand);
   }
@@ -5014,7 +5031,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     usat16(cond, rd, imm, rn);
   }
@@ -5028,7 +5045,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     usax(cond, rd, rn, rm);
   }
@@ -5040,7 +5057,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     usub16(cond, rd, rn, rm);
   }
@@ -5052,7 +5069,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     usub8(cond, rd, rn, rm);
   }
@@ -5064,7 +5081,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     uxtab(cond, rd, rn, operand);
   }
@@ -5081,7 +5098,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     uxtab16(cond, rd, rn, operand);
   }
@@ -5095,7 +5112,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     uxtah(cond, rd, rn, operand);
   }
@@ -5108,7 +5125,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     uxtb(cond, rd, operand);
   }
@@ -5119,7 +5136,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     uxtb16(cond, rd, operand);
   }
@@ -5130,7 +5147,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     uxth(cond, rd, operand);
   }
@@ -5143,7 +5160,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vaba(cond, dt, rd, rn, rm);
   }
@@ -5158,7 +5175,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vaba(cond, dt, rd, rn, rm);
   }
@@ -5173,7 +5190,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vabal(cond, dt, rd, rn, rm);
   }
@@ -5188,7 +5205,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vabd(cond, dt, rd, rn, rm);
   }
@@ -5203,7 +5220,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vabd(cond, dt, rd, rn, rm);
   }
@@ -5218,7 +5235,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vabdl(cond, dt, rd, rn, rm);
   }
@@ -5231,7 +5248,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vabs(cond, dt, rd, rm);
   }
@@ -5242,7 +5259,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vabs(cond, dt, rd, rm);
   }
@@ -5253,7 +5270,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vabs(cond, dt, rd, rm);
   }
@@ -5266,7 +5283,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vacge(cond, dt, rd, rn, rm);
   }
@@ -5281,7 +5298,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vacge(cond, dt, rd, rn, rm);
   }
@@ -5296,7 +5313,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vacgt(cond, dt, rd, rn, rm);
   }
@@ -5311,7 +5328,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vacgt(cond, dt, rd, rn, rm);
   }
@@ -5326,7 +5343,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vacle(cond, dt, rd, rn, rm);
   }
@@ -5341,7 +5358,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vacle(cond, dt, rd, rn, rm);
   }
@@ -5356,7 +5373,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vaclt(cond, dt, rd, rn, rm);
   }
@@ -5371,7 +5388,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vaclt(cond, dt, rd, rn, rm);
   }
@@ -5386,7 +5403,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vadd(cond, dt, rd, rn, rm);
   }
@@ -5401,7 +5418,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vadd(cond, dt, rd, rn, rm);
   }
@@ -5416,7 +5433,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vadd(cond, dt, rd, rn, rm);
   }
@@ -5431,7 +5448,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vaddhn(cond, dt, rd, rn, rm);
   }
@@ -5446,7 +5463,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vaddl(cond, dt, rd, rn, rm);
   }
@@ -5461,7 +5478,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vaddw(cond, dt, rd, rn, rm);
   }
@@ -5479,7 +5496,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vand(cond, dt, rd, rn, operand);
   }
@@ -5497,7 +5514,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vand(cond, dt, rd, rn, operand);
   }
@@ -5515,7 +5532,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vbic(cond, dt, rd, rn, operand);
   }
@@ -5533,7 +5550,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vbic(cond, dt, rd, rn, operand);
   }
@@ -5548,7 +5565,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vbif(cond, dt, rd, rn, rm);
   }
@@ -5569,7 +5586,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vbif(cond, dt, rd, rn, rm);
   }
@@ -5590,7 +5607,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vbit(cond, dt, rd, rn, rm);
   }
@@ -5611,7 +5628,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vbit(cond, dt, rd, rn, rm);
   }
@@ -5632,7 +5649,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vbsl(cond, dt, rd, rn, rm);
   }
@@ -5653,7 +5670,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vbsl(cond, dt, rd, rn, rm);
   }
@@ -5677,7 +5694,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vceq(cond, dt, rd, rm, operand);
   }
@@ -5695,7 +5712,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vceq(cond, dt, rd, rm, operand);
   }
@@ -5710,7 +5727,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vceq(cond, dt, rd, rn, rm);
   }
@@ -5725,7 +5742,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vceq(cond, dt, rd, rn, rm);
   }
@@ -5743,7 +5760,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vcge(cond, dt, rd, rm, operand);
   }
@@ -5761,7 +5778,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vcge(cond, dt, rd, rm, operand);
   }
@@ -5776,7 +5793,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vcge(cond, dt, rd, rn, rm);
   }
@@ -5791,7 +5808,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vcge(cond, dt, rd, rn, rm);
   }
@@ -5809,7 +5826,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vcgt(cond, dt, rd, rm, operand);
   }
@@ -5827,7 +5844,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vcgt(cond, dt, rd, rm, operand);
   }
@@ -5842,7 +5859,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vcgt(cond, dt, rd, rn, rm);
   }
@@ -5857,7 +5874,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vcgt(cond, dt, rd, rn, rm);
   }
@@ -5875,7 +5892,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vcle(cond, dt, rd, rm, operand);
   }
@@ -5893,7 +5910,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vcle(cond, dt, rd, rm, operand);
   }
@@ -5908,7 +5925,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vcle(cond, dt, rd, rn, rm);
   }
@@ -5923,7 +5940,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vcle(cond, dt, rd, rn, rm);
   }
@@ -5936,7 +5953,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vcls(cond, dt, rd, rm);
   }
@@ -5947,7 +5964,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vcls(cond, dt, rd, rm);
   }
@@ -5963,7 +5980,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vclt(cond, dt, rd, rm, operand);
   }
@@ -5981,7 +5998,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vclt(cond, dt, rd, rm, operand);
   }
@@ -5996,7 +6013,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vclt(cond, dt, rd, rn, rm);
   }
@@ -6011,7 +6028,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vclt(cond, dt, rd, rn, rm);
   }
@@ -6024,7 +6041,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vclz(cond, dt, rd, rm);
   }
@@ -6035,7 +6052,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vclz(cond, dt, rd, rm);
   }
@@ -6046,7 +6063,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vcmp(cond, dt, rd, rm);
   }
@@ -6057,7 +6074,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vcmp(cond, dt, rd, rm);
   }
@@ -6067,7 +6084,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vcmp(cond, dt, rd, imm);
   }
@@ -6077,7 +6094,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vcmp(cond, dt, rd, imm);
   }
@@ -6088,7 +6105,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vcmpe(cond, dt, rd, rm);
   }
@@ -6099,7 +6116,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vcmpe(cond, dt, rd, rm);
   }
@@ -6109,7 +6126,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vcmpe(cond, dt, rd, imm);
   }
@@ -6119,7 +6136,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vcmpe(cond, dt, rd, imm);
   }
@@ -6130,7 +6147,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vcnt(cond, dt, rd, rm);
   }
@@ -6141,7 +6158,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vcnt(cond, dt, rd, rm);
   }
@@ -6153,7 +6170,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vcvt(cond, dt1, dt2, rd, rm);
   }
@@ -6167,7 +6184,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vcvt(cond, dt1, dt2, rd, rm);
   }
@@ -6185,7 +6202,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vcvt(cond, dt1, dt2, rd, rm, fbits);
   }
@@ -6204,7 +6221,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vcvt(cond, dt1, dt2, rd, rm, fbits);
   }
@@ -6223,7 +6240,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vcvt(cond, dt1, dt2, rd, rm, fbits);
   }
@@ -6238,7 +6255,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vcvt(cond, dt1, dt2, rd, rm);
   }
@@ -6252,7 +6269,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vcvt(cond, dt1, dt2, rd, rm);
   }
@@ -6266,7 +6283,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vcvt(cond, dt1, dt2, rd, rm);
   }
@@ -6280,7 +6297,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vcvt(cond, dt1, dt2, rd, rm);
   }
@@ -6294,7 +6311,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vcvt(cond, dt1, dt2, rd, rm);
   }
@@ -6307,7 +6324,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     vcvta(dt1, dt2, rd, rm);
   }
 
@@ -6316,7 +6333,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     vcvta(dt1, dt2, rd, rm);
   }
 
@@ -6325,7 +6342,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     vcvta(dt1, dt2, rd, rm);
   }
 
@@ -6334,7 +6351,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     vcvta(dt1, dt2, rd, rm);
   }
 
@@ -6344,7 +6361,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vcvtb(cond, dt1, dt2, rd, rm);
   }
@@ -6358,7 +6375,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vcvtb(cond, dt1, dt2, rd, rm);
   }
@@ -6372,7 +6389,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vcvtb(cond, dt1, dt2, rd, rm);
   }
@@ -6385,7 +6402,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     vcvtm(dt1, dt2, rd, rm);
   }
 
@@ -6394,7 +6411,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     vcvtm(dt1, dt2, rd, rm);
   }
 
@@ -6403,7 +6420,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     vcvtm(dt1, dt2, rd, rm);
   }
 
@@ -6412,7 +6429,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     vcvtm(dt1, dt2, rd, rm);
   }
 
@@ -6421,7 +6438,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     vcvtn(dt1, dt2, rd, rm);
   }
 
@@ -6430,7 +6447,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     vcvtn(dt1, dt2, rd, rm);
   }
 
@@ -6439,7 +6456,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     vcvtn(dt1, dt2, rd, rm);
   }
 
@@ -6448,7 +6465,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     vcvtn(dt1, dt2, rd, rm);
   }
 
@@ -6457,7 +6474,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     vcvtp(dt1, dt2, rd, rm);
   }
 
@@ -6466,7 +6483,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     vcvtp(dt1, dt2, rd, rm);
   }
 
@@ -6475,7 +6492,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     vcvtp(dt1, dt2, rd, rm);
   }
 
@@ -6484,7 +6501,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     vcvtp(dt1, dt2, rd, rm);
   }
 
@@ -6494,7 +6511,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vcvtr(cond, dt1, dt2, rd, rm);
   }
@@ -6508,7 +6525,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vcvtr(cond, dt1, dt2, rd, rm);
   }
@@ -6522,7 +6539,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vcvtt(cond, dt1, dt2, rd, rm);
   }
@@ -6536,7 +6553,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vcvtt(cond, dt1, dt2, rd, rm);
   }
@@ -6550,7 +6567,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vcvtt(cond, dt1, dt2, rd, rm);
   }
@@ -6565,7 +6582,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vdiv(cond, dt, rd, rn, rm);
   }
@@ -6580,7 +6597,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vdiv(cond, dt, rd, rn, rm);
   }
@@ -6593,7 +6610,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vdup(cond, dt, rd, rt);
   }
@@ -6604,7 +6621,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vdup(cond, dt, rd, rt);
   }
@@ -6615,7 +6632,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vdup(cond, dt, rd, rm);
   }
@@ -6628,7 +6645,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vdup(cond, dt, rd, rm);
   }
@@ -6643,7 +6660,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     veor(cond, dt, rd, rn, rm);
   }
@@ -6664,7 +6681,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     veor(cond, dt, rd, rn, rm);
   }
@@ -6690,7 +6707,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vext(cond, dt, rd, rn, rm, operand);
   }
@@ -6714,7 +6731,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vext(cond, dt, rd, rn, rm, operand);
   }
@@ -6733,7 +6750,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vfma(cond, dt, rd, rn, rm);
   }
@@ -6748,7 +6765,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vfma(cond, dt, rd, rn, rm);
   }
@@ -6763,7 +6780,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vfma(cond, dt, rd, rn, rm);
   }
@@ -6778,7 +6795,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vfms(cond, dt, rd, rn, rm);
   }
@@ -6793,7 +6810,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vfms(cond, dt, rd, rn, rm);
   }
@@ -6808,7 +6825,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vfms(cond, dt, rd, rn, rm);
   }
@@ -6823,7 +6840,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vfnma(cond, dt, rd, rn, rm);
   }
@@ -6838,7 +6855,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vfnma(cond, dt, rd, rn, rm);
   }
@@ -6853,7 +6870,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vfnms(cond, dt, rd, rn, rm);
   }
@@ -6868,7 +6885,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vfnms(cond, dt, rd, rn, rm);
   }
@@ -6883,7 +6900,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vhadd(cond, dt, rd, rn, rm);
   }
@@ -6898,7 +6915,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vhadd(cond, dt, rd, rn, rm);
   }
@@ -6913,7 +6930,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vhsub(cond, dt, rd, rn, rm);
   }
@@ -6928,7 +6945,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vhsub(cond, dt, rd, rn, rm);
   }
@@ -6944,7 +6961,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vld1(cond, dt, nreglist, operand);
   }
@@ -6962,7 +6979,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vld2(cond, dt, nreglist, operand);
   }
@@ -6980,7 +6997,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vld3(cond, dt, nreglist, operand);
   }
@@ -6998,7 +7015,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vld3(cond, dt, nreglist, operand);
   }
@@ -7016,7 +7033,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vld4(cond, dt, nreglist, operand);
   }
@@ -7035,7 +7052,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(dreglist));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vldm(cond, dt, rn, write_back, dreglist);
   }
@@ -7064,7 +7081,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(sreglist));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vldm(cond, dt, rn, write_back, sreglist);
   }
@@ -7093,7 +7110,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(dreglist));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vldmdb(cond, dt, rn, write_back, dreglist);
   }
@@ -7122,7 +7139,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(sreglist));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vldmdb(cond, dt, rn, write_back, sreglist);
   }
@@ -7151,7 +7168,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(dreglist));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vldmia(cond, dt, rn, write_back, dreglist);
   }
@@ -7180,7 +7197,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(sreglist));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vldmia(cond, dt, rn, write_back, sreglist);
   }
@@ -7204,7 +7221,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vldr(cond, dt, rd, label);
   }
@@ -7224,7 +7241,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vldr(cond, dt, rd, operand);
   }
@@ -7242,7 +7259,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vldr(cond, dt, rd, label);
   }
@@ -7262,7 +7279,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vldr(cond, dt, rd, operand);
   }
@@ -7283,7 +7300,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vmax(cond, dt, rd, rn, rm);
   }
@@ -7298,7 +7315,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vmax(cond, dt, rd, rn, rm);
   }
@@ -7312,7 +7329,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     vmaxnm(dt, rd, rn, rm);
   }
 
@@ -7322,7 +7339,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     vmaxnm(dt, rd, rn, rm);
   }
 
@@ -7332,7 +7349,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     vmaxnm(dt, rd, rn, rm);
   }
 
@@ -7343,7 +7360,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vmin(cond, dt, rd, rn, rm);
   }
@@ -7358,7 +7375,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vmin(cond, dt, rd, rn, rm);
   }
@@ -7372,7 +7389,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     vminnm(dt, rd, rn, rm);
   }
 
@@ -7382,7 +7399,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     vminnm(dt, rd, rn, rm);
   }
 
@@ -7392,7 +7409,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     vminnm(dt, rd, rn, rm);
   }
 
@@ -7406,7 +7423,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vmla(cond, dt, rd, rn, rm);
   }
@@ -7424,7 +7441,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vmla(cond, dt, rd, rn, rm);
   }
@@ -7439,7 +7456,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vmla(cond, dt, rd, rn, rm);
   }
@@ -7454,7 +7471,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vmla(cond, dt, rd, rn, rm);
   }
@@ -7469,7 +7486,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vmla(cond, dt, rd, rn, rm);
   }
@@ -7487,7 +7504,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vmlal(cond, dt, rd, rn, rm);
   }
@@ -7502,7 +7519,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vmlal(cond, dt, rd, rn, rm);
   }
@@ -7520,7 +7537,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vmls(cond, dt, rd, rn, rm);
   }
@@ -7538,7 +7555,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vmls(cond, dt, rd, rn, rm);
   }
@@ -7553,7 +7570,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vmls(cond, dt, rd, rn, rm);
   }
@@ -7568,7 +7585,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vmls(cond, dt, rd, rn, rm);
   }
@@ -7583,7 +7600,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vmls(cond, dt, rd, rn, rm);
   }
@@ -7601,7 +7618,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vmlsl(cond, dt, rd, rn, rm);
   }
@@ -7616,7 +7633,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vmlsl(cond, dt, rd, rn, rm);
   }
@@ -7629,7 +7646,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vmov(cond, rt, rn);
   }
@@ -7640,7 +7657,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vmov(cond, rn, rt);
   }
@@ -7652,7 +7669,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vmov(cond, rt, rt2, rm);
   }
@@ -7664,7 +7681,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt2));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vmov(cond, rm, rt, rt2);
   }
@@ -7678,7 +7695,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm1));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vmov(cond, rt, rt2, rm, rm1);
   }
@@ -7694,7 +7711,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt2));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vmov(cond, rm, rm1, rt, rt2);
   }
@@ -7707,7 +7724,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vmov(cond, dt, rd, rt);
   }
@@ -7729,7 +7746,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vmov(cond, dt, rd, operand);
   }
@@ -7745,7 +7762,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vmov(cond, dt, rd, operand);
   }
@@ -7761,7 +7778,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vmov(cond, dt, rd, operand);
   }
@@ -7774,7 +7791,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vmov(cond, dt, rt, rn);
   }
@@ -7793,7 +7810,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vmovl(cond, dt, rd, rm);
   }
@@ -7804,7 +7821,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vmovn(cond, dt, rd, rm);
   }
@@ -7816,7 +7833,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vmrs(cond, rt, spec_reg);
   }
@@ -7828,7 +7845,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vmsr(cond, spec_reg, rt);
   }
@@ -7845,7 +7862,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(dm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vmul(cond, dt, rd, rn, dm, index);
   }
@@ -7865,7 +7882,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(dm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vmul(cond, dt, rd, rn, dm, index);
   }
@@ -7881,7 +7898,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vmul(cond, dt, rd, rn, rm);
   }
@@ -7896,7 +7913,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vmul(cond, dt, rd, rn, rm);
   }
@@ -7911,7 +7928,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vmul(cond, dt, rd, rn, rm);
   }
@@ -7930,7 +7947,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(dm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vmull(cond, dt, rd, rn, dm, index);
   }
@@ -7946,7 +7963,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vmull(cond, dt, rd, rn, rm);
   }
@@ -7962,7 +7979,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vmvn(cond, dt, rd, operand);
   }
@@ -7978,7 +7995,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vmvn(cond, dt, rd, operand);
   }
@@ -7991,7 +8008,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vneg(cond, dt, rd, rm);
   }
@@ -8002,7 +8019,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vneg(cond, dt, rd, rm);
   }
@@ -8013,7 +8030,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vneg(cond, dt, rd, rm);
   }
@@ -8026,7 +8043,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vnmla(cond, dt, rd, rn, rm);
   }
@@ -8041,7 +8058,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vnmla(cond, dt, rd, rn, rm);
   }
@@ -8056,7 +8073,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vnmls(cond, dt, rd, rn, rm);
   }
@@ -8071,7 +8088,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vnmls(cond, dt, rd, rn, rm);
   }
@@ -8086,7 +8103,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vnmul(cond, dt, rd, rn, rm);
   }
@@ -8101,7 +8118,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vnmul(cond, dt, rd, rn, rm);
   }
@@ -8119,7 +8136,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vorn(cond, dt, rd, rn, operand);
   }
@@ -8137,7 +8154,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vorn(cond, dt, rd, rn, operand);
   }
@@ -8155,7 +8172,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vorr(cond, dt, rd, rn, operand);
   }
@@ -8182,7 +8199,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vorr(cond, dt, rd, rn, operand);
   }
@@ -8204,7 +8221,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vpadal(cond, dt, rd, rm);
   }
@@ -8217,7 +8234,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vpadal(cond, dt, rd, rm);
   }
@@ -8232,7 +8249,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vpadd(cond, dt, rd, rn, rm);
   }
@@ -8245,7 +8262,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vpaddl(cond, dt, rd, rm);
   }
@@ -8258,7 +8275,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vpaddl(cond, dt, rd, rm);
   }
@@ -8273,7 +8290,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vpmax(cond, dt, rd, rn, rm);
   }
@@ -8288,7 +8305,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vpmin(cond, dt, rd, rn, rm);
   }
@@ -8300,7 +8317,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(dreglist));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vpop(cond, dt, dreglist);
   }
@@ -8314,7 +8331,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(sreglist));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vpop(cond, dt, sreglist);
   }
@@ -8328,7 +8345,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(dreglist));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vpush(cond, dt, dreglist);
   }
@@ -8344,7 +8361,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(sreglist));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vpush(cond, dt, sreglist);
   }
@@ -8361,7 +8378,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vqabs(cond, dt, rd, rm);
   }
@@ -8372,7 +8389,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vqabs(cond, dt, rd, rm);
   }
@@ -8385,7 +8402,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vqadd(cond, dt, rd, rn, rm);
   }
@@ -8400,7 +8417,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vqadd(cond, dt, rd, rn, rm);
   }
@@ -8415,7 +8432,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vqdmlal(cond, dt, rd, rn, rm);
   }
@@ -8434,7 +8451,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(dm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vqdmlal(cond, dt, rd, rn, dm, index);
   }
@@ -8450,7 +8467,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vqdmlsl(cond, dt, rd, rn, rm);
   }
@@ -8469,7 +8486,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(dm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vqdmlsl(cond, dt, rd, rn, dm, index);
   }
@@ -8485,7 +8502,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vqdmulh(cond, dt, rd, rn, rm);
   }
@@ -8500,7 +8517,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vqdmulh(cond, dt, rd, rn, rm);
   }
@@ -8518,7 +8535,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vqdmulh(cond, dt, rd, rn, rm);
   }
@@ -8536,7 +8553,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vqdmulh(cond, dt, rd, rn, rm);
   }
@@ -8551,7 +8568,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vqdmull(cond, dt, rd, rn, rm);
   }
@@ -8569,7 +8586,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vqdmull(cond, dt, rd, rn, rm);
   }
@@ -8582,7 +8599,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vqmovn(cond, dt, rd, rm);
   }
@@ -8595,7 +8612,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vqmovun(cond, dt, rd, rm);
   }
@@ -8608,7 +8625,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vqneg(cond, dt, rd, rm);
   }
@@ -8619,7 +8636,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vqneg(cond, dt, rd, rm);
   }
@@ -8632,7 +8649,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vqrdmulh(cond, dt, rd, rn, rm);
   }
@@ -8647,7 +8664,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vqrdmulh(cond, dt, rd, rn, rm);
   }
@@ -8665,7 +8682,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vqrdmulh(cond, dt, rd, rn, rm);
   }
@@ -8683,7 +8700,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vqrdmulh(cond, dt, rd, rn, rm);
   }
@@ -8698,7 +8715,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vqrshl(cond, dt, rd, rm, rn);
   }
@@ -8713,7 +8730,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vqrshl(cond, dt, rd, rm, rn);
   }
@@ -8731,7 +8748,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vqrshrn(cond, dt, rd, rm, operand);
   }
@@ -8752,7 +8769,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vqrshrun(cond, dt, rd, rm, operand);
   }
@@ -8773,7 +8790,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vqshl(cond, dt, rd, rm, operand);
   }
@@ -8791,7 +8808,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vqshl(cond, dt, rd, rm, operand);
   }
@@ -8809,7 +8826,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vqshlu(cond, dt, rd, rm, operand);
   }
@@ -8830,7 +8847,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vqshlu(cond, dt, rd, rm, operand);
   }
@@ -8851,7 +8868,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vqshrn(cond, dt, rd, rm, operand);
   }
@@ -8872,7 +8889,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vqshrun(cond, dt, rd, rm, operand);
   }
@@ -8890,7 +8907,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vqsub(cond, dt, rd, rn, rm);
   }
@@ -8905,7 +8922,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vqsub(cond, dt, rd, rn, rm);
   }
@@ -8920,7 +8937,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vraddhn(cond, dt, rd, rn, rm);
   }
@@ -8933,7 +8950,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vrecpe(cond, dt, rd, rm);
   }
@@ -8946,7 +8963,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vrecpe(cond, dt, rd, rm);
   }
@@ -8961,7 +8978,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vrecps(cond, dt, rd, rn, rm);
   }
@@ -8976,7 +8993,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vrecps(cond, dt, rd, rn, rm);
   }
@@ -8989,7 +9006,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vrev16(cond, dt, rd, rm);
   }
@@ -9002,7 +9019,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vrev16(cond, dt, rd, rm);
   }
@@ -9015,7 +9032,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vrev32(cond, dt, rd, rm);
   }
@@ -9028,7 +9045,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vrev32(cond, dt, rd, rm);
   }
@@ -9041,7 +9058,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vrev64(cond, dt, rd, rm);
   }
@@ -9054,7 +9071,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vrev64(cond, dt, rd, rm);
   }
@@ -9069,7 +9086,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vrhadd(cond, dt, rd, rn, rm);
   }
@@ -9084,7 +9101,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vrhadd(cond, dt, rd, rn, rm);
   }
@@ -9097,7 +9114,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     vrinta(dt1, dt2, rd, rm);
   }
 
@@ -9106,7 +9123,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     vrinta(dt1, dt2, rd, rm);
   }
 
@@ -9115,7 +9132,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     vrinta(dt1, dt2, rd, rm);
   }
 
@@ -9124,7 +9141,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     vrintm(dt1, dt2, rd, rm);
   }
 
@@ -9133,7 +9150,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     vrintm(dt1, dt2, rd, rm);
   }
 
@@ -9142,7 +9159,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     vrintm(dt1, dt2, rd, rm);
   }
 
@@ -9151,7 +9168,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     vrintn(dt1, dt2, rd, rm);
   }
 
@@ -9160,7 +9177,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     vrintn(dt1, dt2, rd, rm);
   }
 
@@ -9169,7 +9186,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     vrintn(dt1, dt2, rd, rm);
   }
 
@@ -9178,7 +9195,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     vrintp(dt1, dt2, rd, rm);
   }
 
@@ -9187,7 +9204,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     vrintp(dt1, dt2, rd, rm);
   }
 
@@ -9196,7 +9213,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     vrintp(dt1, dt2, rd, rm);
   }
 
@@ -9206,7 +9223,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vrintr(cond, dt1, dt2, rd, rm);
   }
@@ -9220,7 +9237,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vrintr(cond, dt1, dt2, rd, rm);
   }
@@ -9234,7 +9251,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vrintx(cond, dt1, dt2, rd, rm);
   }
@@ -9247,7 +9264,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     vrintx(dt1, dt2, rd, rm);
   }
 
@@ -9257,7 +9274,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vrintx(cond, dt1, dt2, rd, rm);
   }
@@ -9271,7 +9288,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vrintz(cond, dt1, dt2, rd, rm);
   }
@@ -9284,7 +9301,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     vrintz(dt1, dt2, rd, rm);
   }
 
@@ -9294,7 +9311,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vrintz(cond, dt1, dt2, rd, rm);
   }
@@ -9309,7 +9326,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vrshl(cond, dt, rd, rm, rn);
   }
@@ -9324,7 +9341,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vrshl(cond, dt, rd, rm, rn);
   }
@@ -9342,7 +9359,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vrshr(cond, dt, rd, rm, operand);
   }
@@ -9360,7 +9377,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vrshr(cond, dt, rd, rm, operand);
   }
@@ -9378,7 +9395,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vrshrn(cond, dt, rd, rm, operand);
   }
@@ -9394,7 +9411,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vrsqrte(cond, dt, rd, rm);
   }
@@ -9407,7 +9424,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vrsqrte(cond, dt, rd, rm);
   }
@@ -9422,7 +9439,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vrsqrts(cond, dt, rd, rn, rm);
   }
@@ -9437,7 +9454,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vrsqrts(cond, dt, rd, rn, rm);
   }
@@ -9455,7 +9472,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vrsra(cond, dt, rd, rm, operand);
   }
@@ -9473,7 +9490,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vrsra(cond, dt, rd, rm, operand);
   }
@@ -9488,7 +9505,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vrsubhn(cond, dt, rd, rn, rm);
   }
@@ -9502,7 +9519,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     vseleq(dt, rd, rn, rm);
   }
 
@@ -9512,7 +9529,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     vseleq(dt, rd, rn, rm);
   }
 
@@ -9522,7 +9539,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     vselge(dt, rd, rn, rm);
   }
 
@@ -9532,7 +9549,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     vselge(dt, rd, rn, rm);
   }
 
@@ -9542,7 +9559,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     vselgt(dt, rd, rn, rm);
   }
 
@@ -9552,7 +9569,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     vselgt(dt, rd, rn, rm);
   }
 
@@ -9562,7 +9579,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     vselvs(dt, rd, rn, rm);
   }
 
@@ -9572,7 +9589,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     vselvs(dt, rd, rn, rm);
   }
 
@@ -9586,7 +9603,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vshl(cond, dt, rd, rm, operand);
   }
@@ -9604,7 +9621,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vshl(cond, dt, rd, rm, operand);
   }
@@ -9622,7 +9639,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vshll(cond, dt, rd, rm, operand);
   }
@@ -9640,7 +9657,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vshr(cond, dt, rd, rm, operand);
   }
@@ -9658,7 +9675,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vshr(cond, dt, rd, rm, operand);
   }
@@ -9676,7 +9693,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vshrn(cond, dt, rd, rm, operand);
   }
@@ -9694,7 +9711,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vsli(cond, dt, rd, rm, operand);
   }
@@ -9712,7 +9729,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vsli(cond, dt, rd, rm, operand);
   }
@@ -9725,7 +9742,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vsqrt(cond, dt, rd, rm);
   }
@@ -9736,7 +9753,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vsqrt(cond, dt, rd, rm);
   }
@@ -9752,7 +9769,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vsra(cond, dt, rd, rm, operand);
   }
@@ -9770,7 +9787,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vsra(cond, dt, rd, rm, operand);
   }
@@ -9788,7 +9805,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vsri(cond, dt, rd, rm, operand);
   }
@@ -9806,7 +9823,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vsri(cond, dt, rd, rm, operand);
   }
@@ -9822,7 +9839,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vst1(cond, dt, nreglist, operand);
   }
@@ -9840,7 +9857,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vst2(cond, dt, nreglist, operand);
   }
@@ -9858,7 +9875,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vst3(cond, dt, nreglist, operand);
   }
@@ -9876,7 +9893,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vst3(cond, dt, nreglist, operand);
   }
@@ -9894,7 +9911,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vst4(cond, dt, nreglist, operand);
   }
@@ -9913,7 +9930,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(dreglist));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vstm(cond, dt, rn, write_back, dreglist);
   }
@@ -9942,7 +9959,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(sreglist));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vstm(cond, dt, rn, write_back, sreglist);
   }
@@ -9971,7 +9988,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(dreglist));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vstmdb(cond, dt, rn, write_back, dreglist);
   }
@@ -10000,7 +10017,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(sreglist));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vstmdb(cond, dt, rn, write_back, sreglist);
   }
@@ -10029,7 +10046,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(dreglist));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vstmia(cond, dt, rn, write_back, dreglist);
   }
@@ -10058,7 +10075,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(sreglist));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vstmia(cond, dt, rn, write_back, sreglist);
   }
@@ -10086,7 +10103,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vstr(cond, dt, rd, operand);
   }
@@ -10108,7 +10125,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vstr(cond, dt, rd, operand);
   }
@@ -10129,7 +10146,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vsub(cond, dt, rd, rn, rm);
   }
@@ -10144,7 +10161,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vsub(cond, dt, rd, rn, rm);
   }
@@ -10159,7 +10176,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vsub(cond, dt, rd, rn, rm);
   }
@@ -10174,7 +10191,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vsubhn(cond, dt, rd, rn, rm);
   }
@@ -10189,7 +10206,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vsubl(cond, dt, rd, rn, rm);
   }
@@ -10204,7 +10221,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vsubw(cond, dt, rd, rn, rm);
   }
@@ -10217,7 +10234,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vswp(cond, dt, rd, rm);
   }
@@ -10234,7 +10251,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vswp(cond, dt, rd, rm);
   }
@@ -10256,7 +10273,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vtbl(cond, dt, rd, nreglist, rm);
   }
@@ -10277,7 +10294,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vtbx(cond, dt, rd, nreglist, rm);
   }
@@ -10293,7 +10310,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vtrn(cond, dt, rd, rm);
   }
@@ -10304,7 +10321,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vtrn(cond, dt, rd, rm);
   }
@@ -10317,7 +10334,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vtst(cond, dt, rd, rn, rm);
   }
@@ -10332,7 +10349,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vtst(cond, dt, rd, rn, rm);
   }
@@ -10345,7 +10362,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vuzp(cond, dt, rd, rm);
   }
@@ -10356,7 +10373,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vuzp(cond, dt, rd, rm);
   }
@@ -10367,7 +10384,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vzip(cond, dt, rd, rm);
   }
@@ -10378,7 +10395,7 @@
     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     vzip(cond, dt, rd, rm);
   }
@@ -10387,7 +10404,7 @@
   void Yield(Condition cond) {
     VIXL_ASSERT(allow_macro_instructions_);
     VIXL_ASSERT(OutsideITBlock());
-    AllowAssemblerEmissionScope allow_scope(this, kMaxInstructionSizeInBytes);
+    MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond);
     yield(cond);
   }
@@ -10688,60 +10705,6 @@
   bool allow_macro_instructions_;
 };
 
-// This scope is used to ensure that the specified size of instructions will be
-// emitted contiguously. The assert policy kExtactSize should only be used
-// when you use directly the assembler as it's difficult to know exactly how
-// many instructions will be emitted by the macro-assembler. Using the assembler
-// means that you directly use the assembler instructions (in lower case) from a
-// MacroAssembler object.
-class CodeBufferCheckScope {
- public:
-  // Tell whether or not the scope should assert the amount of code emitted
-  // within the scope is consistent with the requested amount.
-  enum AssertPolicy {
-    kNoAssert,    // No assert required.
-    kExactSize,   // The code emitted must be exactly size bytes.
-    kMaximumSize  // The code emitted must be at most size bytes.
-  };
-
-  CodeBufferCheckScope(MacroAssembler* masm,
-                       uint32_t size,
-                       AssertPolicy assert_policy = kMaximumSize)
-      : masm_(masm) {
-    masm->EnsureEmitFor(size);
-#ifdef VIXL_DEBUG
-    initial_cursor_offset_ = masm->GetCursorOffset();
-    size_ = size;
-    assert_policy_ = assert_policy;
-#else
-    USE(assert_policy);
-#endif
-  }
-
-  ~CodeBufferCheckScope() {
-#ifdef VIXL_DEBUG
-    switch (assert_policy_) {
-      case kNoAssert:
-        break;
-      case kExactSize:
-        VIXL_ASSERT(masm_->GetCursorOffset() - initial_cursor_offset_ == size_);
-        break;
-      case kMaximumSize:
-        VIXL_ASSERT(masm_->GetCursorOffset() - initial_cursor_offset_ <= size_);
-        break;
-      default:
-        VIXL_UNREACHABLE();
-    }
-#endif
-  }
-
- protected:
-  MacroAssembler* masm_;
-  uint32_t initial_cursor_offset_;
-  uint32_t size_;
-  AssertPolicy assert_policy_;
-};
-
 // Use this scope when you need a one-to-one mapping between methods and
 // instructions. This scope prevents the MacroAssembler functions from being
 // called and the literal pools and veneers from being emitted (they can only be
@@ -10754,9 +10717,14 @@
  public:
   AssemblerAccurateScope(MacroAssembler* masm,
                          uint32_t size,
-                         AssertPolicy policy = kExactSize)
-      : CodeBufferCheckScope(masm, size, policy) {
-    VIXL_ASSERT(policy != kNoAssert);
+                         SizePolicy size_policy = kExactSize)
+      : masm_(masm) {
+    VIXL_ASSERT(size_policy != kNoAssert);
+    masm_->EnsureEmitFor(size);
+    // We cannot initialise the `CodeBufferCheckScope` in the initialisation
+    // list, as the size checks must be performed after we have checked for the
+    // pools.
+    CodeBufferCheckScope::Open(masm, size, kReserveBufferSpace, size_policy);
 #ifdef VIXL_DEBUG
     old_allow_macro_instructions_ = masm->AllowMacroInstructions();
     old_allow_assembler_ = masm->AllowAssembler();
@@ -10776,6 +10744,7 @@
   }
 
  private:
+  MacroAssembler* masm_;
   bool old_allow_macro_instructions_;
   bool old_allow_assembler_;
 };