Home | History | Annotate | Download | only in aarch32
      1 // Copyright 2015, VIXL authors
      2 // All rights reserved.
      3 //
      4 // Redistribution and use in source and binary forms, with or without
      5 // modification, are permitted provided that the following conditions are met:
      6 //
      7 //   * Redistributions of source code must retain the above copyright notice,
      8 //     this list of conditions and the following disclaimer.
      9 //   * Redistributions in binary form must reproduce the above copyright notice,
     10 //     this list of conditions and the following disclaimer in the documentation
     11 //     and/or other materials provided with the distribution.
     12 //   * Neither the name of ARM Limited nor the names of its contributors may be
     13 //     used to endorse or promote products derived from this software without
     14 //     specific prior written permission.
     15 //
     16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS CONTRIBUTORS "AS IS" AND
     17 // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     18 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     19 // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
     20 // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     21 // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
     22 // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
     23 // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     24 // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     25 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     26 
     27 #ifndef VIXL_DISASM_AARCH32_H_
     28 #define VIXL_DISASM_AARCH32_H_
     29 
     30 extern "C" {
     31 #include <stdint.h>
     32 }
     33 
     34 #include "aarch32/constants-aarch32.h"
     35 #include "aarch32/label-aarch32.h"
     36 #include "aarch32/operands-aarch32.h"
     37 
     38 namespace vixl {
     39 namespace aarch32 {
     40 
     41 class ITBlock {
     42   Condition first_condition_;
     43   Condition condition_;
     44   uint16_t it_mask_;
     45 
     46  public:
     47   ITBlock() : first_condition_(al), condition_(al), it_mask_(0) {}
     48   void Advance() {
     49     condition_ = Condition((condition_.GetCondition() & 0xe) | (it_mask_ >> 3));
     50     it_mask_ = (it_mask_ << 1) & 0xf;
     51   }
     52   bool InITBlock() const { return it_mask_ != 0; }
     53   bool OutsideITBlock() const { return !InITBlock(); }
     54   bool LastInITBlock() const { return it_mask_ == 0x8; }
     55   bool OutsideITBlockOrLast() const {
     56     return OutsideITBlock() || LastInITBlock();
     57   }
     58   void Set(Condition first_condition, uint16_t mask) {
     59     condition_ = first_condition_ = first_condition;
     60     it_mask_ = mask;
     61   }
     62   Condition GetFirstCondition() const { return first_condition_; }
     63   Condition GetCurrentCondition() const { return condition_; }
     64 };
     65 
     66 class Disassembler {
     67  public:
     68   enum LocationType {
     69     kAnyLocation,
     70     kCodeLocation,
     71     kDataLocation,
     72     kCoprocLocation,
     73     kLoadByteLocation,
     74     kLoadHalfWordLocation,
     75     kLoadWordLocation,
     76     kLoadDoubleWordLocation,
     77     kLoadSignedByteLocation,
     78     kLoadSignedHalfWordLocation,
     79     kLoadSinglePrecisionLocation,
     80     kLoadDoublePrecisionLocation,
     81     kStoreByteLocation,
     82     kStoreHalfWordLocation,
     83     kStoreWordLocation,
     84     kStoreDoubleWordLocation,
     85     kStoreSinglePrecisionLocation,
     86     kStoreDoublePrecisionLocation,
     87     kVld1Location,
     88     kVld2Location,
     89     kVld3Location,
     90     kVld4Location,
     91     kVst1Location,
     92     kVst2Location,
     93     kVst3Location,
     94     kVst4Location
     95   };
     96 
     97   class ConditionPrinter {
     98     const ITBlock& it_block_;
     99     Condition cond_;
    100 
    101    public:
    102     ConditionPrinter(const ITBlock& it_block, Condition cond)
    103         : it_block_(it_block), cond_(cond) {}
    104     friend std::ostream& operator<<(std::ostream& os, ConditionPrinter cond) {
    105       if (cond.it_block_.InITBlock() && cond.cond_.Is(al) &&
    106           !cond.cond_.IsNone()) {
    107         return os << "al";
    108       }
    109       return os << cond.cond_;
    110     }
    111   };
    112 
    113   class PrintLabel {
    114     LocationType location_type_;
    115     Label* label_;
    116     Label::Offset position_;
    117 
    118    public:
    119     PrintLabel(LocationType location_type, Label* label, Label::Offset position)
    120         : location_type_(location_type), label_(label), position_(position) {}
    121     LocationType GetLocationType() const { return location_type_; }
    122     Label* GetLabel() const { return label_; }
    123     Label::Offset GetPosition() const { return position_; }
    124     friend inline std::ostream& operator<<(std::ostream& os,
    125                                            const PrintLabel& label) {
    126       if (label.label_->IsMinusZero()) {
    127         os << "[pc, #-0]";
    128       } else {
    129         os << "0x" << std::hex << std::setw(8) << std::setfill('0')
    130            << static_cast<int32_t>(label.label_->GetLocation() +
    131                                    label.position_) << std::dec;
    132       }
    133       return os;
    134     }
    135   };
    136 
    137   class PrintMemOperand {
    138     LocationType location_type_;
    139     const MemOperand& operand_;
    140 
    141    public:
    142     PrintMemOperand(LocationType location_type, const MemOperand& operand)
    143         : location_type_(location_type), operand_(operand) {}
    144     LocationType GetLocationType() const { return location_type_; }
    145     const MemOperand& GetOperand() const { return operand_; }
    146   };
    147 
    148   class PrintAlignedMemOperand {
    149     LocationType location_type_;
    150     const AlignedMemOperand& operand_;
    151 
    152    public:
    153     PrintAlignedMemOperand(LocationType location_type,
    154                            const AlignedMemOperand& operand)
    155         : location_type_(location_type), operand_(operand) {}
    156     LocationType GetLocationType() const { return location_type_; }
    157     const AlignedMemOperand& GetOperand() const { return operand_; }
    158   };
    159 
    160   class DisassemblerStream {
    161     std::ostream& os_;
    162     InstructionType current_instruction_type_;
    163     InstructionAttribute current_instruction_attributes_;
    164 
    165    public:
    166     explicit DisassemblerStream(std::ostream& os)  // NOLINT(runtime/references)
    167         : os_(os),
    168           current_instruction_type_(kUndefInstructionType),
    169           current_instruction_attributes_(kNoAttribute) {}
    170     virtual ~DisassemblerStream() {}
    171     std::ostream& os() const { return os_; }
    172     void SetCurrentInstruction(
    173         InstructionType current_instruction_type,
    174         InstructionAttribute current_instruction_attributes) {
    175       current_instruction_type_ = current_instruction_type;
    176       current_instruction_attributes_ = current_instruction_attributes;
    177     }
    178     InstructionType GetCurrentInstructionType() const {
    179       return current_instruction_type_;
    180     }
    181     InstructionAttribute GetCurrentInstructionAttributes() const {
    182       return current_instruction_attributes_;
    183     }
    184     bool Has(InstructionAttribute attributes) const {
    185       return (current_instruction_attributes_ & attributes) == attributes;
    186     }
    187     template <typename T>
    188     DisassemblerStream& operator<<(T value) {
    189       os_ << value;
    190       return *this;
    191     }
    192     virtual DisassemblerStream& operator<<(const ConditionPrinter& cond) {
    193       os_ << cond;
    194       return *this;
    195     }
    196     virtual DisassemblerStream& operator<<(Condition cond) {
    197       os_ << cond;
    198       return *this;
    199     }
    200     virtual DisassemblerStream& operator<<(const EncodingSize& size) {
    201       os_ << size;
    202       return *this;
    203     }
    204     virtual DisassemblerStream& operator<<(const DataType& type) {
    205       os_ << type;
    206       return *this;
    207     }
    208     virtual DisassemblerStream& operator<<(Shift shift) {
    209       os_ << shift;
    210       return *this;
    211     }
    212     virtual DisassemblerStream& operator<<(Sign sign) {
    213       os_ << sign;
    214       return *this;
    215     }
    216     virtual DisassemblerStream& operator<<(Alignment alignment) {
    217       os_ << alignment;
    218       return *this;
    219     }
    220     virtual DisassemblerStream& operator<<(const PrintLabel& label) {
    221       os_ << label;
    222       return *this;
    223     }
    224     virtual DisassemblerStream& operator<<(const WriteBack& write_back) {
    225       os_ << write_back;
    226       return *this;
    227     }
    228     virtual DisassemblerStream& operator<<(const NeonImmediate& immediate) {
    229       os_ << immediate;
    230       return *this;
    231     }
    232     virtual DisassemblerStream& operator<<(Register reg) {
    233       os_ << reg;
    234       return *this;
    235     }
    236     virtual DisassemblerStream& operator<<(SRegister reg) {
    237       os_ << reg;
    238       return *this;
    239     }
    240     virtual DisassemblerStream& operator<<(DRegister reg) {
    241       os_ << reg;
    242       return *this;
    243     }
    244     virtual DisassemblerStream& operator<<(QRegister reg) {
    245       os_ << reg;
    246       return *this;
    247     }
    248     virtual DisassemblerStream& operator<<(SpecialRegister reg) {
    249       os_ << reg;
    250       return *this;
    251     }
    252     virtual DisassemblerStream& operator<<(MaskedSpecialRegister reg) {
    253       os_ << reg;
    254       return *this;
    255     }
    256     virtual DisassemblerStream& operator<<(SpecialFPRegister reg) {
    257       os_ << reg;
    258       return *this;
    259     }
    260     virtual DisassemblerStream& operator<<(BankedRegister reg) {
    261       os_ << reg;
    262       return *this;
    263     }
    264     virtual DisassemblerStream& operator<<(const RegisterList& list) {
    265       os_ << list;
    266       return *this;
    267     }
    268     virtual DisassemblerStream& operator<<(const SRegisterList& list) {
    269       os_ << list;
    270       return *this;
    271     }
    272     virtual DisassemblerStream& operator<<(const DRegisterList& list) {
    273       os_ << list;
    274       return *this;
    275     }
    276     virtual DisassemblerStream& operator<<(const NeonRegisterList& list) {
    277       os_ << list;
    278       return *this;
    279     }
    280     virtual DisassemblerStream& operator<<(Coprocessor coproc) {
    281       os_ << coproc;
    282       return *this;
    283     }
    284     virtual DisassemblerStream& operator<<(CRegister reg) {
    285       os_ << reg;
    286       return *this;
    287     }
    288     virtual DisassemblerStream& operator<<(Endianness endian_specifier) {
    289       os_ << endian_specifier;
    290       return *this;
    291     }
    292     virtual DisassemblerStream& operator<<(MemoryBarrier option) {
    293       os_ << option;
    294       return *this;
    295     }
    296     virtual DisassemblerStream& operator<<(InterruptFlags iflags) {
    297       os_ << iflags;
    298       return *this;
    299     }
    300     virtual DisassemblerStream& operator<<(const Operand& operand) {
    301       if (operand.IsImmediate()) {
    302         if (Has(kBitwise)) {
    303           return *this << "#0x" << std::hex << operand.GetImmediate()
    304                        << std::dec;
    305         }
    306         return *this << "#" << operand.GetImmediate();
    307       }
    308       if (operand.IsImmediateShiftedRegister()) {
    309         if ((operand.GetShift().IsLSL() || operand.GetShift().IsROR()) &&
    310             (operand.GetShiftAmount() == 0)) {
    311           return *this << operand.GetBaseRegister();
    312         }
    313         if (operand.GetShift().IsRRX()) {
    314           return *this << operand.GetBaseRegister() << ", rrx";
    315         }
    316         return *this << operand.GetBaseRegister() << ", " << operand.GetShift()
    317                      << " #" << operand.GetShiftAmount();
    318       }
    319       if (operand.IsRegisterShiftedRegister()) {
    320         return *this << operand.GetBaseRegister() << ", " << operand.GetShift()
    321                      << " " << operand.GetShiftRegister();
    322       }
    323       VIXL_UNREACHABLE();
    324       return *this;
    325     }
    326     virtual DisassemblerStream& operator<<(const SOperand& operand) {
    327       if (operand.IsImmediate()) {
    328         return *this << operand.GetNeonImmediate();
    329       }
    330       return *this << operand.GetRegister();
    331     }
    332     virtual DisassemblerStream& operator<<(const DOperand& operand) {
    333       if (operand.IsImmediate()) {
    334         return *this << operand.GetNeonImmediate();
    335       }
    336       return *this << operand.GetRegister();
    337     }
    338     virtual DisassemblerStream& operator<<(const QOperand& operand) {
    339       if (operand.IsImmediate()) {
    340         return *this << operand.GetNeonImmediate();
    341       }
    342       return *this << operand.GetRegister();
    343     }
    344     virtual DisassemblerStream& operator<<(const MemOperand& operand) {
    345       *this << "[" << operand.GetBaseRegister();
    346       if (operand.GetAddrMode() == PostIndex) {
    347         *this << "]";
    348       }
    349       if (operand.IsImmediate()) {
    350         if ((operand.GetOffsetImmediate() != 0) ||
    351             operand.GetSign().IsMinus() ||
    352             ((operand.GetAddrMode() != Offset) && !operand.IsRegisterOnly())) {
    353           if (operand.GetOffsetImmediate() == 0) {
    354             *this << ", #" << operand.GetSign() << operand.GetOffsetImmediate();
    355           } else {
    356             *this << ", #" << operand.GetOffsetImmediate();
    357           }
    358         }
    359       } else if (operand.IsPlainRegister()) {
    360         *this << ", " << operand.GetSign() << operand.GetOffsetRegister();
    361       } else if (operand.IsShiftedRegister()) {
    362         *this << ", " << operand.GetSign() << operand.GetOffsetRegister()
    363               << ImmediateShiftOperand(operand.GetShift(),
    364                                        operand.GetShiftAmount());
    365       } else {
    366         VIXL_UNREACHABLE();
    367         return *this;
    368       }
    369       if (operand.GetAddrMode() == Offset) {
    370         *this << "]";
    371       } else if (operand.GetAddrMode() == PreIndex) {
    372         *this << "]!";
    373       }
    374       return *this;
    375     }
    376     virtual DisassemblerStream& operator<<(const PrintMemOperand& operand) {
    377       return *this << operand.GetOperand();
    378     }
    379     virtual DisassemblerStream& operator<<(const AlignedMemOperand& operand) {
    380       *this << "[" << operand.GetBaseRegister() << operand.GetAlignment()
    381             << "]";
    382       if (operand.GetAddrMode() == PostIndex) {
    383         if (operand.IsPlainRegister()) {
    384           *this << ", " << operand.GetOffsetRegister();
    385         } else {
    386           *this << "!";
    387         }
    388       }
    389       return *this;
    390     }
    391     virtual DisassemblerStream& operator<<(
    392         const PrintAlignedMemOperand& operand) {
    393       return *this << operand.GetOperand();
    394     }
    395   };
    396 
    397  private:
    398   class ITBlockScope {
    399     ITBlock* const it_block_;
    400     bool inside_;
    401 
    402    public:
    403     explicit ITBlockScope(ITBlock* it_block)
    404         : it_block_(it_block), inside_(it_block->InITBlock()) {}
    405     ~ITBlockScope() {
    406       if (inside_) it_block_->Advance();
    407     }
    408   };
    409 
    410   ITBlock it_block_;
    411   DisassemblerStream* os_;
    412   bool owns_os_;
    413   uint32_t code_address_;
    414 
    415  public:
    416   explicit Disassembler(std::ostream& os,  // NOLINT(runtime/references)
    417                         uint32_t code_address = 0)
    418       : os_(new DisassemblerStream(os)),
    419         owns_os_(true),
    420         code_address_(code_address) {}
    421   explicit Disassembler(DisassemblerStream* os, uint32_t code_address = 0)
    422       : os_(os), owns_os_(false), code_address_(code_address) {}
    423   virtual ~Disassembler() {
    424     if (owns_os_) {
    425       delete os_;
    426     }
    427   }
    428   DisassemblerStream& os() const { return *os_; }
    429   void SetIT(Condition first_condition, uint16_t it_mask) {
    430     it_block_.Set(first_condition, it_mask);
    431   }
    432   const ITBlock& GetITBlock() const { return it_block_; }
    433   bool InITBlock() const { return it_block_.InITBlock(); }
    434   bool OutsideITBlock() const { return it_block_.OutsideITBlock(); }
    435   bool OutsideITBlockOrLast() const { return it_block_.OutsideITBlockOrLast(); }
    436   void CheckNotIT() const { VIXL_ASSERT(it_block_.OutsideITBlock()); }
    437   // Return the current condition depending on the IT state for T32.
    438   Condition CurrentCond() const {
    439     if (it_block_.OutsideITBlock()) return al;
    440     return it_block_.GetCurrentCondition();
    441   }
    442 
    443   virtual void UnallocatedT32(uint32_t instruction) {
    444     if (T32Size(instruction) == 2) {
    445       os() << "unallocated " << std::hex << std::setw(4) << std::setfill('0')
    446            << (instruction >> 16) << std::dec;
    447     } else {
    448       os() << "unallocated " << std::hex << std::setw(8) << std::setfill('0')
    449            << instruction << std::dec;
    450     }
    451   }
    452   virtual void UnallocatedA32(uint32_t instruction) {
    453     os() << "unallocated " << std::hex << std::setw(8) << std::setfill('0')
    454          << instruction << std::dec;
    455   }
    456   virtual void UnimplementedT32_16(const char* name, uint32_t instruction) {
    457     os() << "unimplemented " << name << " T32:" << std::hex << std::setw(4)
    458          << std::setfill('0') << (instruction >> 16) << std::dec;
    459   }
    460   virtual void UnimplementedT32_32(const char* name, uint32_t instruction) {
    461     os() << "unimplemented " << name << " T32:" << std::hex << std::setw(8)
    462          << std::setfill('0') << instruction << std::dec;
    463   }
    464   virtual void UnimplementedA32(const char* name, uint32_t instruction) {
    465     os() << "unimplemented " << name << " ARM:" << std::hex << std::setw(8)
    466          << std::setfill('0') << instruction << std::dec;
    467   }
    468   virtual void Unpredictable() { os() << " ; unpredictable"; }
    469   virtual void UnpredictableT32(uint32_t /*instr*/) { return Unpredictable(); }
    470   virtual void UnpredictableA32(uint32_t /*instr*/) { return Unpredictable(); }
    471 
    472   static bool Is16BitEncoding(uint32_t instr) { return instr < 0xe8000000; }
    473   uint32_t GetCodeAddress() const { return code_address_; }
    474   void SetCodeAddress(uint32_t code_address) { code_address_ = code_address; }
    475 
    476   // Start of generated code.
    477 
    478   void adc(Condition cond,
    479            EncodingSize size,
    480            Register rd,
    481            Register rn,
    482            const Operand& operand);
    483 
    484   void adcs(Condition cond,
    485             EncodingSize size,
    486             Register rd,
    487             Register rn,
    488             const Operand& operand);
    489 
    490   void add(Condition cond,
    491            EncodingSize size,
    492            Register rd,
    493            Register rn,
    494            const Operand& operand);
    495 
    496   void add(Condition cond, Register rd, const Operand& operand);
    497 
    498   void adds(Condition cond,
    499             EncodingSize size,
    500             Register rd,
    501             Register rn,
    502             const Operand& operand);
    503 
    504   void adds(Register rd, const Operand& operand);
    505 
    506   void addw(Condition cond, Register rd, Register rn, const Operand& operand);
    507 
    508   void adr(Condition cond, EncodingSize size, Register rd, Label* label);
    509 
    510   void and_(Condition cond,
    511             EncodingSize size,
    512             Register rd,
    513             Register rn,
    514             const Operand& operand);
    515 
    516   void ands(Condition cond,
    517             EncodingSize size,
    518             Register rd,
    519             Register rn,
    520             const Operand& operand);
    521 
    522   void asr(Condition cond,
    523            EncodingSize size,
    524            Register rd,
    525            Register rm,
    526            const Operand& operand);
    527 
    528   void asrs(Condition cond,
    529             EncodingSize size,
    530             Register rd,
    531             Register rm,
    532             const Operand& operand);
    533 
    534   void b(Condition cond, EncodingSize size, Label* label);
    535 
    536   void bfc(Condition cond, Register rd, uint32_t lsb, const Operand& operand);
    537 
    538   void bfi(Condition cond,
    539            Register rd,
    540            Register rn,
    541            uint32_t lsb,
    542            const Operand& operand);
    543 
    544   void bic(Condition cond,
    545            EncodingSize size,
    546            Register rd,
    547            Register rn,
    548            const Operand& operand);
    549 
    550   void bics(Condition cond,
    551             EncodingSize size,
    552             Register rd,
    553             Register rn,
    554             const Operand& operand);
    555 
    556   void bkpt(Condition cond, uint32_t imm);
    557 
    558   void bl(Condition cond, Label* label);
    559 
    560   void blx(Condition cond, Label* label);
    561 
    562   void blx(Condition cond, Register rm);
    563 
    564   void bx(Condition cond, Register rm);
    565 
    566   void bxj(Condition cond, Register rm);
    567 
    568   void cbnz(Register rn, Label* label);
    569 
    570   void cbz(Register rn, Label* label);
    571 
    572   void clrex(Condition cond);
    573 
    574   void clz(Condition cond, Register rd, Register rm);
    575 
    576   void cmn(Condition cond,
    577            EncodingSize size,
    578            Register rn,
    579            const Operand& operand);
    580 
    581   void cmp(Condition cond,
    582            EncodingSize size,
    583            Register rn,
    584            const Operand& operand);
    585 
    586   void crc32b(Condition cond, Register rd, Register rn, Register rm);
    587 
    588   void crc32cb(Condition cond, Register rd, Register rn, Register rm);
    589 
    590   void crc32ch(Condition cond, Register rd, Register rn, Register rm);
    591 
    592   void crc32cw(Condition cond, Register rd, Register rn, Register rm);
    593 
    594   void crc32h(Condition cond, Register rd, Register rn, Register rm);
    595 
    596   void crc32w(Condition cond, Register rd, Register rn, Register rm);
    597 
    598   void dmb(Condition cond, MemoryBarrier option);
    599 
    600   void dsb(Condition cond, MemoryBarrier option);
    601 
    602   void eor(Condition cond,
    603            EncodingSize size,
    604            Register rd,
    605            Register rn,
    606            const Operand& operand);
    607 
    608   void eors(Condition cond,
    609             EncodingSize size,
    610             Register rd,
    611             Register rn,
    612             const Operand& operand);
    613 
    614   void fldmdbx(Condition cond,
    615                Register rn,
    616                WriteBack write_back,
    617                DRegisterList dreglist);
    618 
    619   void fldmiax(Condition cond,
    620                Register rn,
    621                WriteBack write_back,
    622                DRegisterList dreglist);
    623 
    624   void fstmdbx(Condition cond,
    625                Register rn,
    626                WriteBack write_back,
    627                DRegisterList dreglist);
    628 
    629   void fstmiax(Condition cond,
    630                Register rn,
    631                WriteBack write_back,
    632                DRegisterList dreglist);
    633 
    634   void hlt(Condition cond, uint32_t imm);
    635 
    636   void hvc(Condition cond, uint32_t imm);
    637 
    638   void isb(Condition cond, MemoryBarrier option);
    639 
    640   void it(Condition cond, uint16_t mask);
    641 
    642   void lda(Condition cond, Register rt, const MemOperand& operand);
    643 
    644   void ldab(Condition cond, Register rt, const MemOperand& operand);
    645 
    646   void ldaex(Condition cond, Register rt, const MemOperand& operand);
    647 
    648   void ldaexb(Condition cond, Register rt, const MemOperand& operand);
    649 
    650   void ldaexd(Condition cond,
    651               Register rt,
    652               Register rt2,
    653               const MemOperand& operand);
    654 
    655   void ldaexh(Condition cond, Register rt, const MemOperand& operand);
    656 
    657   void ldah(Condition cond, Register rt, const MemOperand& operand);
    658 
    659   void ldm(Condition cond,
    660            EncodingSize size,
    661            Register rn,
    662            WriteBack write_back,
    663            RegisterList registers);
    664 
    665   void ldmda(Condition cond,
    666              Register rn,
    667              WriteBack write_back,
    668              RegisterList registers);
    669 
    670   void ldmdb(Condition cond,
    671              Register rn,
    672              WriteBack write_back,
    673              RegisterList registers);
    674 
    675   void ldmea(Condition cond,
    676              Register rn,
    677              WriteBack write_back,
    678              RegisterList registers);
    679 
    680   void ldmed(Condition cond,
    681              Register rn,
    682              WriteBack write_back,
    683              RegisterList registers);
    684 
    685   void ldmfa(Condition cond,
    686              Register rn,
    687              WriteBack write_back,
    688              RegisterList registers);
    689 
    690   void ldmfd(Condition cond,
    691              EncodingSize size,
    692              Register rn,
    693              WriteBack write_back,
    694              RegisterList registers);
    695 
    696   void ldmib(Condition cond,
    697              Register rn,
    698              WriteBack write_back,
    699              RegisterList registers);
    700 
    701   void ldr(Condition cond,
    702            EncodingSize size,
    703            Register rt,
    704            const MemOperand& operand);
    705 
    706   void ldr(Condition cond, EncodingSize size, Register rt, Label* label);
    707 
    708   void ldrb(Condition cond,
    709             EncodingSize size,
    710             Register rt,
    711             const MemOperand& operand);
    712 
    713   void ldrb(Condition cond, Register rt, Label* label);
    714 
    715   void ldrd(Condition cond,
    716             Register rt,
    717             Register rt2,
    718             const MemOperand& operand);
    719 
    720   void ldrd(Condition cond, Register rt, Register rt2, Label* label);
    721 
    722   void ldrex(Condition cond, Register rt, const MemOperand& operand);
    723 
    724   void ldrexb(Condition cond, Register rt, const MemOperand& operand);
    725 
    726   void ldrexd(Condition cond,
    727               Register rt,
    728               Register rt2,
    729               const MemOperand& operand);
    730 
    731   void ldrexh(Condition cond, Register rt, const MemOperand& operand);
    732 
    733   void ldrh(Condition cond,
    734             EncodingSize size,
    735             Register rt,
    736             const MemOperand& operand);
    737 
    738   void ldrh(Condition cond, Register rt, Label* label);
    739 
    740   void ldrsb(Condition cond,
    741              EncodingSize size,
    742              Register rt,
    743              const MemOperand& operand);
    744 
    745   void ldrsb(Condition cond, Register rt, Label* label);
    746 
    747   void ldrsh(Condition cond,
    748              EncodingSize size,
    749              Register rt,
    750              const MemOperand& operand);
    751 
    752   void ldrsh(Condition cond, Register rt, Label* label);
    753 
    754   void lsl(Condition cond,
    755            EncodingSize size,
    756            Register rd,
    757            Register rm,
    758            const Operand& operand);
    759 
    760   void lsls(Condition cond,
    761             EncodingSize size,
    762             Register rd,
    763             Register rm,
    764             const Operand& operand);
    765 
    766   void lsr(Condition cond,
    767            EncodingSize size,
    768            Register rd,
    769            Register rm,
    770            const Operand& operand);
    771 
    772   void lsrs(Condition cond,
    773             EncodingSize size,
    774             Register rd,
    775             Register rm,
    776             const Operand& operand);
    777 
    778   void mla(Condition cond, Register rd, Register rn, Register rm, Register ra);
    779 
    780   void mlas(Condition cond, Register rd, Register rn, Register rm, Register ra);
    781 
    782   void mls(Condition cond, Register rd, Register rn, Register rm, Register ra);
    783 
    784   void mov(Condition cond,
    785            EncodingSize size,
    786            Register rd,
    787            const Operand& operand);
    788 
    789   void movs(Condition cond,
    790             EncodingSize size,
    791             Register rd,
    792             const Operand& operand);
    793 
    794   void movt(Condition cond, Register rd, const Operand& operand);
    795 
    796   void movw(Condition cond, Register rd, const Operand& operand);
    797 
    798   void mrs(Condition cond, Register rd, SpecialRegister spec_reg);
    799 
    800   void msr(Condition cond,
    801            MaskedSpecialRegister spec_reg,
    802            const Operand& operand);
    803 
    804   void mul(
    805       Condition cond, EncodingSize size, Register rd, Register rn, Register rm);
    806 
    807   void muls(Condition cond, Register rd, Register rn, Register rm);
    808 
    809   void mvn(Condition cond,
    810            EncodingSize size,
    811            Register rd,
    812            const Operand& operand);
    813 
    814   void mvns(Condition cond,
    815             EncodingSize size,
    816             Register rd,
    817             const Operand& operand);
    818 
    819   void nop(Condition cond, EncodingSize size);
    820 
    821   void orn(Condition cond, Register rd, Register rn, const Operand& operand);
    822 
    823   void orns(Condition cond, Register rd, Register rn, const Operand& operand);
    824 
    825   void orr(Condition cond,
    826            EncodingSize size,
    827            Register rd,
    828            Register rn,
    829            const Operand& operand);
    830 
    831   void orrs(Condition cond,
    832             EncodingSize size,
    833             Register rd,
    834             Register rn,
    835             const Operand& operand);
    836 
    837   void pkhbt(Condition cond, Register rd, Register rn, const Operand& operand);
    838 
    839   void pkhtb(Condition cond, Register rd, Register rn, const Operand& operand);
    840 
    841   void pld(Condition cond, Label* label);
    842 
    843   void pld(Condition cond, const MemOperand& operand);
    844 
    845   void pldw(Condition cond, const MemOperand& operand);
    846 
    847   void pli(Condition cond, const MemOperand& operand);
    848 
    849   void pli(Condition cond, Label* label);
    850 
    851   void pop(Condition cond, EncodingSize size, RegisterList registers);
    852 
    853   void pop(Condition cond, EncodingSize size, Register rt);
    854 
    855   void push(Condition cond, EncodingSize size, RegisterList registers);
    856 
    857   void push(Condition cond, EncodingSize size, Register rt);
    858 
    859   void qadd(Condition cond, Register rd, Register rm, Register rn);
    860 
    861   void qadd16(Condition cond, Register rd, Register rn, Register rm);
    862 
    863   void qadd8(Condition cond, Register rd, Register rn, Register rm);
    864 
    865   void qasx(Condition cond, Register rd, Register rn, Register rm);
    866 
    867   void qdadd(Condition cond, Register rd, Register rm, Register rn);
    868 
    869   void qdsub(Condition cond, Register rd, Register rm, Register rn);
    870 
    871   void qsax(Condition cond, Register rd, Register rn, Register rm);
    872 
    873   void qsub(Condition cond, Register rd, Register rm, Register rn);
    874 
    875   void qsub16(Condition cond, Register rd, Register rn, Register rm);
    876 
    877   void qsub8(Condition cond, Register rd, Register rn, Register rm);
    878 
    879   void rbit(Condition cond, Register rd, Register rm);
    880 
    881   void rev(Condition cond, EncodingSize size, Register rd, Register rm);
    882 
    883   void rev16(Condition cond, EncodingSize size, Register rd, Register rm);
    884 
    885   void revsh(Condition cond, EncodingSize size, Register rd, Register rm);
    886 
    887   void ror(Condition cond,
    888            EncodingSize size,
    889            Register rd,
    890            Register rm,
    891            const Operand& operand);
    892 
    893   void rors(Condition cond,
    894             EncodingSize size,
    895             Register rd,
    896             Register rm,
    897             const Operand& operand);
    898 
    899   void rrx(Condition cond, Register rd, Register rm);
    900 
    901   void rrxs(Condition cond, Register rd, Register rm);
    902 
    903   void rsb(Condition cond,
    904            EncodingSize size,
    905            Register rd,
    906            Register rn,
    907            const Operand& operand);
    908 
    909   void rsbs(Condition cond,
    910             EncodingSize size,
    911             Register rd,
    912             Register rn,
    913             const Operand& operand);
    914 
    915   void rsc(Condition cond, Register rd, Register rn, const Operand& operand);
    916 
    917   void rscs(Condition cond, Register rd, Register rn, const Operand& operand);
    918 
    919   void sadd16(Condition cond, Register rd, Register rn, Register rm);
    920 
    921   void sadd8(Condition cond, Register rd, Register rn, Register rm);
    922 
    923   void sasx(Condition cond, Register rd, Register rn, Register rm);
    924 
    925   void sbc(Condition cond,
    926            EncodingSize size,
    927            Register rd,
    928            Register rn,
    929            const Operand& operand);
    930 
    931   void sbcs(Condition cond,
    932             EncodingSize size,
    933             Register rd,
    934             Register rn,
    935             const Operand& operand);
    936 
    937   void sbfx(Condition cond,
    938             Register rd,
    939             Register rn,
    940             uint32_t lsb,
    941             const Operand& operand);
    942 
    943   void sdiv(Condition cond, Register rd, Register rn, Register rm);
    944 
    945   void sel(Condition cond, Register rd, Register rn, Register rm);
    946 
    947   void shadd16(Condition cond, Register rd, Register rn, Register rm);
    948 
    949   void shadd8(Condition cond, Register rd, Register rn, Register rm);
    950 
    951   void shasx(Condition cond, Register rd, Register rn, Register rm);
    952 
    953   void shsax(Condition cond, Register rd, Register rn, Register rm);
    954 
    955   void shsub16(Condition cond, Register rd, Register rn, Register rm);
    956 
    957   void shsub8(Condition cond, Register rd, Register rn, Register rm);
    958 
    959   void smlabb(
    960       Condition cond, Register rd, Register rn, Register rm, Register ra);
    961 
    962   void smlabt(
    963       Condition cond, Register rd, Register rn, Register rm, Register ra);
    964 
    965   void smlad(
    966       Condition cond, Register rd, Register rn, Register rm, Register ra);
    967 
    968   void smladx(
    969       Condition cond, Register rd, Register rn, Register rm, Register ra);
    970 
    971   void smlal(
    972       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
    973 
    974   void smlalbb(
    975       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
    976 
    977   void smlalbt(
    978       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
    979 
    980   void smlald(
    981       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
    982 
    983   void smlaldx(
    984       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
    985 
    986   void smlals(
    987       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
    988 
    989   void smlaltb(
    990       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
    991 
    992   void smlaltt(
    993       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
    994 
    995   void smlatb(
    996       Condition cond, Register rd, Register rn, Register rm, Register ra);
    997 
    998   void smlatt(
    999       Condition cond, Register rd, Register rn, Register rm, Register ra);
   1000 
   1001   void smlawb(
   1002       Condition cond, Register rd, Register rn, Register rm, Register ra);
   1003 
   1004   void smlawt(
   1005       Condition cond, Register rd, Register rn, Register rm, Register ra);
   1006 
   1007   void smlsd(
   1008       Condition cond, Register rd, Register rn, Register rm, Register ra);
   1009 
   1010   void smlsdx(
   1011       Condition cond, Register rd, Register rn, Register rm, Register ra);
   1012 
   1013   void smlsld(
   1014       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
   1015 
   1016   void smlsldx(
   1017       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
   1018 
   1019   void smmla(
   1020       Condition cond, Register rd, Register rn, Register rm, Register ra);
   1021 
   1022   void smmlar(
   1023       Condition cond, Register rd, Register rn, Register rm, Register ra);
   1024 
   1025   void smmls(
   1026       Condition cond, Register rd, Register rn, Register rm, Register ra);
   1027 
   1028   void smmlsr(
   1029       Condition cond, Register rd, Register rn, Register rm, Register ra);
   1030 
   1031   void smmul(Condition cond, Register rd, Register rn, Register rm);
   1032 
   1033   void smmulr(Condition cond, Register rd, Register rn, Register rm);
   1034 
   1035   void smuad(Condition cond, Register rd, Register rn, Register rm);
   1036 
   1037   void smuadx(Condition cond, Register rd, Register rn, Register rm);
   1038 
   1039   void smulbb(Condition cond, Register rd, Register rn, Register rm);
   1040 
   1041   void smulbt(Condition cond, Register rd, Register rn, Register rm);
   1042 
   1043   void smull(
   1044       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
   1045 
   1046   void smulls(
   1047       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
   1048 
   1049   void smultb(Condition cond, Register rd, Register rn, Register rm);
   1050 
   1051   void smultt(Condition cond, Register rd, Register rn, Register rm);
   1052 
   1053   void smulwb(Condition cond, Register rd, Register rn, Register rm);
   1054 
   1055   void smulwt(Condition cond, Register rd, Register rn, Register rm);
   1056 
   1057   void smusd(Condition cond, Register rd, Register rn, Register rm);
   1058 
   1059   void smusdx(Condition cond, Register rd, Register rn, Register rm);
   1060 
   1061   void ssat(Condition cond, Register rd, uint32_t imm, const Operand& operand);
   1062 
   1063   void ssat16(Condition cond, Register rd, uint32_t imm, Register rn);
   1064 
   1065   void ssax(Condition cond, Register rd, Register rn, Register rm);
   1066 
   1067   void ssub16(Condition cond, Register rd, Register rn, Register rm);
   1068 
   1069   void ssub8(Condition cond, Register rd, Register rn, Register rm);
   1070 
   1071   void stl(Condition cond, Register rt, const MemOperand& operand);
   1072 
   1073   void stlb(Condition cond, Register rt, const MemOperand& operand);
   1074 
   1075   void stlex(Condition cond,
   1076              Register rd,
   1077              Register rt,
   1078              const MemOperand& operand);
   1079 
   1080   void stlexb(Condition cond,
   1081               Register rd,
   1082               Register rt,
   1083               const MemOperand& operand);
   1084 
   1085   void stlexd(Condition cond,
   1086               Register rd,
   1087               Register rt,
   1088               Register rt2,
   1089               const MemOperand& operand);
   1090 
   1091   void stlexh(Condition cond,
   1092               Register rd,
   1093               Register rt,
   1094               const MemOperand& operand);
   1095 
   1096   void stlh(Condition cond, Register rt, const MemOperand& operand);
   1097 
   1098   void stm(Condition cond,
   1099            EncodingSize size,
   1100            Register rn,
   1101            WriteBack write_back,
   1102            RegisterList registers);
   1103 
   1104   void stmda(Condition cond,
   1105              Register rn,
   1106              WriteBack write_back,
   1107              RegisterList registers);
   1108 
   1109   void stmdb(Condition cond,
   1110              EncodingSize size,
   1111              Register rn,
   1112              WriteBack write_back,
   1113              RegisterList registers);
   1114 
   1115   void stmea(Condition cond,
   1116              EncodingSize size,
   1117              Register rn,
   1118              WriteBack write_back,
   1119              RegisterList registers);
   1120 
   1121   void stmed(Condition cond,
   1122              Register rn,
   1123              WriteBack write_back,
   1124              RegisterList registers);
   1125 
   1126   void stmfa(Condition cond,
   1127              Register rn,
   1128              WriteBack write_back,
   1129              RegisterList registers);
   1130 
   1131   void stmfd(Condition cond,
   1132              Register rn,
   1133              WriteBack write_back,
   1134              RegisterList registers);
   1135 
   1136   void stmib(Condition cond,
   1137              Register rn,
   1138              WriteBack write_back,
   1139              RegisterList registers);
   1140 
   1141   void str(Condition cond,
   1142            EncodingSize size,
   1143            Register rt,
   1144            const MemOperand& operand);
   1145 
   1146   void strb(Condition cond,
   1147             EncodingSize size,
   1148             Register rt,
   1149             const MemOperand& operand);
   1150 
   1151   void strd(Condition cond,
   1152             Register rt,
   1153             Register rt2,
   1154             const MemOperand& operand);
   1155 
   1156   void strex(Condition cond,
   1157              Register rd,
   1158              Register rt,
   1159              const MemOperand& operand);
   1160 
   1161   void strexb(Condition cond,
   1162               Register rd,
   1163               Register rt,
   1164               const MemOperand& operand);
   1165 
   1166   void strexd(Condition cond,
   1167               Register rd,
   1168               Register rt,
   1169               Register rt2,
   1170               const MemOperand& operand);
   1171 
   1172   void strexh(Condition cond,
   1173               Register rd,
   1174               Register rt,
   1175               const MemOperand& operand);
   1176 
   1177   void strh(Condition cond,
   1178             EncodingSize size,
   1179             Register rt,
   1180             const MemOperand& operand);
   1181 
   1182   void sub(Condition cond,
   1183            EncodingSize size,
   1184            Register rd,
   1185            Register rn,
   1186            const Operand& operand);
   1187 
   1188   void sub(Condition cond, Register rd, const Operand& operand);
   1189 
   1190   void subs(Condition cond,
   1191             EncodingSize size,
   1192             Register rd,
   1193             Register rn,
   1194             const Operand& operand);
   1195 
   1196   void subs(Register rd, const Operand& operand);
   1197 
   1198   void subw(Condition cond, Register rd, Register rn, const Operand& operand);
   1199 
   1200   void svc(Condition cond, uint32_t imm);
   1201 
   1202   void sxtab(Condition cond, Register rd, Register rn, const Operand& operand);
   1203 
   1204   void sxtab16(Condition cond,
   1205                Register rd,
   1206                Register rn,
   1207                const Operand& operand);
   1208 
   1209   void sxtah(Condition cond, Register rd, Register rn, const Operand& operand);
   1210 
   1211   void sxtb(Condition cond,
   1212             EncodingSize size,
   1213             Register rd,
   1214             const Operand& operand);
   1215 
   1216   void sxtb16(Condition cond, Register rd, const Operand& operand);
   1217 
   1218   void sxth(Condition cond,
   1219             EncodingSize size,
   1220             Register rd,
   1221             const Operand& operand);
   1222 
   1223   void tbb(Condition cond, Register rn, Register rm);
   1224 
   1225   void tbh(Condition cond, Register rn, Register rm);
   1226 
   1227   void teq(Condition cond, Register rn, const Operand& operand);
   1228 
   1229   void tst(Condition cond,
   1230            EncodingSize size,
   1231            Register rn,
   1232            const Operand& operand);
   1233 
   1234   void uadd16(Condition cond, Register rd, Register rn, Register rm);
   1235 
   1236   void uadd8(Condition cond, Register rd, Register rn, Register rm);
   1237 
   1238   void uasx(Condition cond, Register rd, Register rn, Register rm);
   1239 
   1240   void ubfx(Condition cond,
   1241             Register rd,
   1242             Register rn,
   1243             uint32_t lsb,
   1244             const Operand& operand);
   1245 
   1246   void udf(Condition cond, EncodingSize size, uint32_t imm);
   1247 
   1248   void udiv(Condition cond, Register rd, Register rn, Register rm);
   1249 
   1250   void uhadd16(Condition cond, Register rd, Register rn, Register rm);
   1251 
   1252   void uhadd8(Condition cond, Register rd, Register rn, Register rm);
   1253 
   1254   void uhasx(Condition cond, Register rd, Register rn, Register rm);
   1255 
   1256   void uhsax(Condition cond, Register rd, Register rn, Register rm);
   1257 
   1258   void uhsub16(Condition cond, Register rd, Register rn, Register rm);
   1259 
   1260   void uhsub8(Condition cond, Register rd, Register rn, Register rm);
   1261 
   1262   void umaal(
   1263       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
   1264 
   1265   void umlal(
   1266       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
   1267 
   1268   void umlals(
   1269       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
   1270 
   1271   void umull(
   1272       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
   1273 
   1274   void umulls(
   1275       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
   1276 
   1277   void uqadd16(Condition cond, Register rd, Register rn, Register rm);
   1278 
   1279   void uqadd8(Condition cond, Register rd, Register rn, Register rm);
   1280 
   1281   void uqasx(Condition cond, Register rd, Register rn, Register rm);
   1282 
   1283   void uqsax(Condition cond, Register rd, Register rn, Register rm);
   1284 
   1285   void uqsub16(Condition cond, Register rd, Register rn, Register rm);
   1286 
   1287   void uqsub8(Condition cond, Register rd, Register rn, Register rm);
   1288 
   1289   void usad8(Condition cond, Register rd, Register rn, Register rm);
   1290 
   1291   void usada8(
   1292       Condition cond, Register rd, Register rn, Register rm, Register ra);
   1293 
   1294   void usat(Condition cond, Register rd, uint32_t imm, const Operand& operand);
   1295 
   1296   void usat16(Condition cond, Register rd, uint32_t imm, Register rn);
   1297 
   1298   void usax(Condition cond, Register rd, Register rn, Register rm);
   1299 
   1300   void usub16(Condition cond, Register rd, Register rn, Register rm);
   1301 
   1302   void usub8(Condition cond, Register rd, Register rn, Register rm);
   1303 
   1304   void uxtab(Condition cond, Register rd, Register rn, const Operand& operand);
   1305 
   1306   void uxtab16(Condition cond,
   1307                Register rd,
   1308                Register rn,
   1309                const Operand& operand);
   1310 
   1311   void uxtah(Condition cond, Register rd, Register rn, const Operand& operand);
   1312 
   1313   void uxtb(Condition cond,
   1314             EncodingSize size,
   1315             Register rd,
   1316             const Operand& operand);
   1317 
   1318   void uxtb16(Condition cond, Register rd, const Operand& operand);
   1319 
   1320   void uxth(Condition cond,
   1321             EncodingSize size,
   1322             Register rd,
   1323             const Operand& operand);
   1324 
   1325   void vaba(
   1326       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
   1327 
   1328   void vaba(
   1329       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
   1330 
   1331   void vabal(
   1332       Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm);
   1333 
   1334   void vabd(
   1335       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
   1336 
   1337   void vabd(
   1338       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
   1339 
   1340   void vabdl(
   1341       Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm);
   1342 
   1343   void vabs(Condition cond, DataType dt, DRegister rd, DRegister rm);
   1344 
   1345   void vabs(Condition cond, DataType dt, QRegister rd, QRegister rm);
   1346 
   1347   void vabs(Condition cond, DataType dt, SRegister rd, SRegister rm);
   1348 
   1349   void vacge(
   1350       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
   1351 
   1352   void vacge(
   1353       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
   1354 
   1355   void vacgt(
   1356       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
   1357 
   1358   void vacgt(
   1359       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
   1360 
   1361   void vacle(
   1362       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
   1363 
   1364   void vacle(
   1365       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
   1366 
   1367   void vaclt(
   1368       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
   1369 
   1370   void vaclt(
   1371       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
   1372 
   1373   void vadd(
   1374       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
   1375 
   1376   void vadd(
   1377       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
   1378 
   1379   void vadd(
   1380       Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm);
   1381 
   1382   void vaddhn(
   1383       Condition cond, DataType dt, DRegister rd, QRegister rn, QRegister rm);
   1384 
   1385   void vaddl(
   1386       Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm);
   1387 
   1388   void vaddw(
   1389       Condition cond, DataType dt, QRegister rd, QRegister rn, DRegister rm);
   1390 
   1391   void vand(Condition cond,
   1392             DataType dt,
   1393             DRegister rd,
   1394             DRegister rn,
   1395             const DOperand& operand);
   1396 
   1397   void vand(Condition cond,
   1398             DataType dt,
   1399             QRegister rd,
   1400             QRegister rn,
   1401             const QOperand& operand);
   1402 
   1403   void vbic(Condition cond,
   1404             DataType dt,
   1405             DRegister rd,
   1406             DRegister rn,
   1407             const DOperand& operand);
   1408 
   1409   void vbic(Condition cond,
   1410             DataType dt,
   1411             QRegister rd,
   1412             QRegister rn,
   1413             const QOperand& operand);
   1414 
   1415   void vbif(
   1416       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
   1417 
   1418   void vbif(
   1419       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
   1420 
   1421   void vbit(
   1422       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
   1423 
   1424   void vbit(
   1425       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
   1426 
   1427   void vbsl(
   1428       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
   1429 
   1430   void vbsl(
   1431       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
   1432 
   1433   void vceq(Condition cond,
   1434             DataType dt,
   1435             DRegister rd,
   1436             DRegister rm,
   1437             const DOperand& operand);
   1438 
   1439   void vceq(Condition cond,
   1440             DataType dt,
   1441             QRegister rd,
   1442             QRegister rm,
   1443             const QOperand& operand);
   1444 
   1445   void vceq(
   1446       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
   1447 
   1448   void vceq(
   1449       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
   1450 
   1451   void vcge(Condition cond,
   1452             DataType dt,
   1453             DRegister rd,
   1454             DRegister rm,
   1455             const DOperand& operand);
   1456 
   1457   void vcge(Condition cond,
   1458             DataType dt,
   1459             QRegister rd,
   1460             QRegister rm,
   1461             const QOperand& operand);
   1462 
   1463   void vcge(
   1464       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
   1465 
   1466   void vcge(
   1467       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
   1468 
   1469   void vcgt(Condition cond,
   1470             DataType dt,
   1471             DRegister rd,
   1472             DRegister rm,
   1473             const DOperand& operand);
   1474 
   1475   void vcgt(Condition cond,
   1476             DataType dt,
   1477             QRegister rd,
   1478             QRegister rm,
   1479             const QOperand& operand);
   1480 
   1481   void vcgt(
   1482       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
   1483 
   1484   void vcgt(
   1485       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
   1486 
   1487   void vcle(Condition cond,
   1488             DataType dt,
   1489             DRegister rd,
   1490             DRegister rm,
   1491             const DOperand& operand);
   1492 
   1493   void vcle(Condition cond,
   1494             DataType dt,
   1495             QRegister rd,
   1496             QRegister rm,
   1497             const QOperand& operand);
   1498 
   1499   void vcle(
   1500       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
   1501 
   1502   void vcle(
   1503       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
   1504 
   1505   void vcls(Condition cond, DataType dt, DRegister rd, DRegister rm);
   1506 
   1507   void vcls(Condition cond, DataType dt, QRegister rd, QRegister rm);
   1508 
   1509   void vclt(Condition cond,
   1510             DataType dt,
   1511             DRegister rd,
   1512             DRegister rm,
   1513             const DOperand& operand);
   1514 
   1515   void vclt(Condition cond,
   1516             DataType dt,
   1517             QRegister rd,
   1518             QRegister rm,
   1519             const QOperand& operand);
   1520 
   1521   void vclt(
   1522       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
   1523 
   1524   void vclt(
   1525       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
   1526 
   1527   void vclz(Condition cond, DataType dt, DRegister rd, DRegister rm);
   1528 
   1529   void vclz(Condition cond, DataType dt, QRegister rd, QRegister rm);
   1530 
   1531   void vcmp(Condition cond, DataType dt, SRegister rd, SRegister rm);
   1532 
   1533   void vcmp(Condition cond, DataType dt, DRegister rd, DRegister rm);
   1534 
   1535   void vcmp(Condition cond, DataType dt, SRegister rd, double imm);
   1536 
   1537   void vcmp(Condition cond, DataType dt, DRegister rd, double imm);
   1538 
   1539   void vcmpe(Condition cond, DataType dt, SRegister rd, SRegister rm);
   1540 
   1541   void vcmpe(Condition cond, DataType dt, DRegister rd, DRegister rm);
   1542 
   1543   void vcmpe(Condition cond, DataType dt, SRegister rd, double imm);
   1544 
   1545   void vcmpe(Condition cond, DataType dt, DRegister rd, double imm);
   1546 
   1547   void vcnt(Condition cond, DataType dt, DRegister rd, DRegister rm);
   1548 
   1549   void vcnt(Condition cond, DataType dt, QRegister rd, QRegister rm);
   1550 
   1551   void vcvt(
   1552       Condition cond, DataType dt1, DataType dt2, DRegister rd, SRegister rm);
   1553 
   1554   void vcvt(
   1555       Condition cond, DataType dt1, DataType dt2, SRegister rd, DRegister rm);
   1556 
   1557   void vcvt(Condition cond,
   1558             DataType dt1,
   1559             DataType dt2,
   1560             DRegister rd,
   1561             DRegister rm,
   1562             int32_t fbits);
   1563 
   1564   void vcvt(Condition cond,
   1565             DataType dt1,
   1566             DataType dt2,
   1567             QRegister rd,
   1568             QRegister rm,
   1569             int32_t fbits);
   1570 
   1571   void vcvt(Condition cond,
   1572             DataType dt1,
   1573             DataType dt2,
   1574             SRegister rd,
   1575             SRegister rm,
   1576             int32_t fbits);
   1577 
   1578   void vcvt(
   1579       Condition cond, DataType dt1, DataType dt2, DRegister rd, DRegister rm);
   1580 
   1581   void vcvt(
   1582       Condition cond, DataType dt1, DataType dt2, QRegister rd, QRegister rm);
   1583 
   1584   void vcvt(
   1585       Condition cond, DataType dt1, DataType dt2, DRegister rd, QRegister rm);
   1586 
   1587   void vcvt(
   1588       Condition cond, DataType dt1, DataType dt2, QRegister rd, DRegister rm);
   1589 
   1590   void vcvt(
   1591       Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm);
   1592 
   1593   void vcvta(DataType dt1, DataType dt2, DRegister rd, DRegister rm);
   1594 
   1595   void vcvta(DataType dt1, DataType dt2, QRegister rd, QRegister rm);
   1596 
   1597   void vcvta(DataType dt1, DataType dt2, SRegister rd, SRegister rm);
   1598 
   1599   void vcvta(DataType dt1, DataType dt2, SRegister rd, DRegister rm);
   1600 
   1601   void vcvtb(
   1602       Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm);
   1603 
   1604   void vcvtb(
   1605       Condition cond, DataType dt1, DataType dt2, DRegister rd, SRegister rm);
   1606 
   1607   void vcvtb(
   1608       Condition cond, DataType dt1, DataType dt2, SRegister rd, DRegister rm);
   1609 
   1610   void vcvtm(DataType dt1, DataType dt2, DRegister rd, DRegister rm);
   1611 
   1612   void vcvtm(DataType dt1, DataType dt2, QRegister rd, QRegister rm);
   1613 
   1614   void vcvtm(DataType dt1, DataType dt2, SRegister rd, SRegister rm);
   1615 
   1616   void vcvtm(DataType dt1, DataType dt2, SRegister rd, DRegister rm);
   1617 
   1618   void vcvtn(DataType dt1, DataType dt2, DRegister rd, DRegister rm);
   1619 
   1620   void vcvtn(DataType dt1, DataType dt2, QRegister rd, QRegister rm);
   1621 
   1622   void vcvtn(DataType dt1, DataType dt2, SRegister rd, SRegister rm);
   1623 
   1624   void vcvtn(DataType dt1, DataType dt2, SRegister rd, DRegister rm);
   1625 
   1626   void vcvtp(DataType dt1, DataType dt2, DRegister rd, DRegister rm);
   1627 
   1628   void vcvtp(DataType dt1, DataType dt2, QRegister rd, QRegister rm);
   1629 
   1630   void vcvtp(DataType dt1, DataType dt2, SRegister rd, SRegister rm);
   1631 
   1632   void vcvtp(DataType dt1, DataType dt2, SRegister rd, DRegister rm);
   1633 
   1634   void vcvtr(
   1635       Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm);
   1636 
   1637   void vcvtr(
   1638       Condition cond, DataType dt1, DataType dt2, SRegister rd, DRegister rm);
   1639 
   1640   void vcvtt(
   1641       Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm);
   1642 
   1643   void vcvtt(
   1644       Condition cond, DataType dt1, DataType dt2, DRegister rd, SRegister rm);
   1645 
   1646   void vcvtt(
   1647       Condition cond, DataType dt1, DataType dt2, SRegister rd, DRegister rm);
   1648 
   1649   void vdiv(
   1650       Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm);
   1651 
   1652   void vdiv(
   1653       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
   1654 
   1655   void vdup(Condition cond, DataType dt, QRegister rd, Register rt);
   1656 
   1657   void vdup(Condition cond, DataType dt, DRegister rd, Register rt);
   1658 
   1659   void vdup(Condition cond, DataType dt, DRegister rd, DRegisterLane rm);
   1660 
   1661   void vdup(Condition cond, DataType dt, QRegister rd, DRegisterLane rm);
   1662 
   1663   void veor(
   1664       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
   1665 
   1666   void veor(
   1667       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
   1668 
   1669   void vext(Condition cond,
   1670             DataType dt,
   1671             DRegister rd,
   1672             DRegister rn,
   1673             DRegister rm,
   1674             const DOperand& operand);
   1675 
   1676   void vext(Condition cond,
   1677             DataType dt,
   1678             QRegister rd,
   1679             QRegister rn,
   1680             QRegister rm,
   1681             const QOperand& operand);
   1682 
   1683   void vfma(
   1684       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
   1685 
   1686   void vfma(
   1687       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
   1688 
   1689   void vfma(
   1690       Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm);
   1691 
   1692   void vfms(
   1693       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
   1694 
   1695   void vfms(
   1696       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
   1697 
   1698   void vfms(
   1699       Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm);
   1700 
   1701   void vfnma(
   1702       Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm);
   1703 
   1704   void vfnma(
   1705       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
   1706 
   1707   void vfnms(
   1708       Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm);
   1709 
   1710   void vfnms(
   1711       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
   1712 
   1713   void vhadd(
   1714       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
   1715 
   1716   void vhadd(
   1717       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
   1718 
   1719   void vhsub(
   1720       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
   1721 
   1722   void vhsub(
   1723       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
   1724 
   1725   void vld1(Condition cond,
   1726             DataType dt,
   1727             const NeonRegisterList& nreglist,
   1728             const AlignedMemOperand& operand);
   1729 
   1730   void vld2(Condition cond,
   1731             DataType dt,
   1732             const NeonRegisterList& nreglist,
   1733             const AlignedMemOperand& operand);
   1734 
   1735   void vld3(Condition cond,
   1736             DataType dt,
   1737             const NeonRegisterList& nreglist,
   1738             const AlignedMemOperand& operand);
   1739 
   1740   void vld3(Condition cond,
   1741             DataType dt,
   1742             const NeonRegisterList& nreglist,
   1743             const MemOperand& operand);
   1744 
   1745   void vld4(Condition cond,
   1746             DataType dt,
   1747             const NeonRegisterList& nreglist,
   1748             const AlignedMemOperand& operand);
   1749 
   1750   void vldm(Condition cond,
   1751             DataType dt,
   1752             Register rn,
   1753             WriteBack write_back,
   1754             DRegisterList dreglist);
   1755 
   1756   void vldm(Condition cond,
   1757             DataType dt,
   1758             Register rn,
   1759             WriteBack write_back,
   1760             SRegisterList sreglist);
   1761 
   1762   void vldmdb(Condition cond,
   1763               DataType dt,
   1764               Register rn,
   1765               WriteBack write_back,
   1766               DRegisterList dreglist);
   1767 
   1768   void vldmdb(Condition cond,
   1769               DataType dt,
   1770               Register rn,
   1771               WriteBack write_back,
   1772               SRegisterList sreglist);
   1773 
   1774   void vldmia(Condition cond,
   1775               DataType dt,
   1776               Register rn,
   1777               WriteBack write_back,
   1778               DRegisterList dreglist);
   1779 
   1780   void vldmia(Condition cond,
   1781               DataType dt,
   1782               Register rn,
   1783               WriteBack write_back,
   1784               SRegisterList sreglist);
   1785 
   1786   void vldr(Condition cond, DataType dt, DRegister rd, Label* label);
   1787 
   1788   void vldr(Condition cond,
   1789             DataType dt,
   1790             DRegister rd,
   1791             const MemOperand& operand);
   1792 
   1793   void vldr(Condition cond, DataType dt, SRegister rd, Label* label);
   1794 
   1795   void vldr(Condition cond,
   1796             DataType dt,
   1797             SRegister rd,
   1798             const MemOperand& operand);
   1799 
   1800   void vmax(
   1801       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
   1802 
   1803   void vmax(
   1804       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
   1805 
   1806   void vmaxnm(DataType dt, DRegister rd, DRegister rn, DRegister rm);
   1807 
   1808   void vmaxnm(DataType dt, QRegister rd, QRegister rn, QRegister rm);
   1809 
   1810   void vmaxnm(DataType dt, SRegister rd, SRegister rn, SRegister rm);
   1811 
   1812   void vmin(
   1813       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
   1814 
   1815   void vmin(
   1816       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
   1817 
   1818   void vminnm(DataType dt, DRegister rd, DRegister rn, DRegister rm);
   1819 
   1820   void vminnm(DataType dt, QRegister rd, QRegister rn, QRegister rm);
   1821 
   1822   void vminnm(DataType dt, SRegister rd, SRegister rn, SRegister rm);
   1823 
   1824   void vmla(Condition cond,
   1825             DataType dt,
   1826             DRegister rd,
   1827             DRegister rn,
   1828             DRegisterLane rm);
   1829 
   1830   void vmla(Condition cond,
   1831             DataType dt,
   1832             QRegister rd,
   1833             QRegister rn,
   1834             DRegisterLane rm);
   1835 
   1836   void vmla(
   1837       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
   1838 
   1839   void vmla(
   1840       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
   1841 
   1842   void vmla(
   1843       Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm);
   1844 
   1845   void vmlal(Condition cond,
   1846              DataType dt,
   1847              QRegister rd,
   1848              DRegister rn,
   1849              DRegisterLane rm);
   1850 
   1851   void vmlal(
   1852       Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm);
   1853 
   1854   void vmls(Condition cond,
   1855             DataType dt,
   1856             DRegister rd,
   1857             DRegister rn,
   1858             DRegisterLane rm);
   1859 
   1860   void vmls(Condition cond,
   1861             DataType dt,
   1862             QRegister rd,
   1863             QRegister rn,
   1864             DRegisterLane rm);
   1865 
   1866   void vmls(
   1867       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
   1868 
   1869   void vmls(
   1870       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
   1871 
   1872   void vmls(
   1873       Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm);
   1874 
   1875   void vmlsl(Condition cond,
   1876              DataType dt,
   1877              QRegister rd,
   1878              DRegister rn,
   1879              DRegisterLane rm);
   1880 
   1881   void vmlsl(
   1882       Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm);
   1883 
   1884   void vmov(Condition cond, Register rt, SRegister rn);
   1885 
   1886   void vmov(Condition cond, SRegister rn, Register rt);
   1887 
   1888   void vmov(Condition cond, Register rt, Register rt2, DRegister rm);
   1889 
   1890   void vmov(Condition cond, DRegister rm, Register rt, Register rt2);
   1891 
   1892   void vmov(
   1893       Condition cond, Register rt, Register rt2, SRegister rm, SRegister rm1);
   1894 
   1895   void vmov(
   1896       Condition cond, SRegister rm, SRegister rm1, Register rt, Register rt2);
   1897 
   1898   void vmov(Condition cond, DataType dt, DRegisterLane rd, Register rt);
   1899 
   1900   void vmov(Condition cond, DataType dt, DRegister rd, const DOperand& operand);
   1901 
   1902   void vmov(Condition cond, DataType dt, QRegister rd, const QOperand& operand);
   1903 
   1904   void vmov(Condition cond, DataType dt, SRegister rd, const SOperand& operand);
   1905 
   1906   void vmov(Condition cond, DataType dt, Register rt, DRegisterLane rn);
   1907 
   1908   void vmovl(Condition cond, DataType dt, QRegister rd, DRegister rm);
   1909 
   1910   void vmovn(Condition cond, DataType dt, DRegister rd, QRegister rm);
   1911 
   1912   void vmrs(Condition cond, RegisterOrAPSR_nzcv rt, SpecialFPRegister spec_reg);
   1913 
   1914   void vmsr(Condition cond, SpecialFPRegister spec_reg, Register rt);
   1915 
   1916   void vmul(Condition cond,
   1917             DataType dt,
   1918             DRegister rd,
   1919             DRegister rn,
   1920             DRegister dm,
   1921             unsigned index);
   1922 
   1923   void vmul(Condition cond,
   1924             DataType dt,
   1925             QRegister rd,
   1926             QRegister rn,
   1927             DRegister dm,
   1928             unsigned index);
   1929 
   1930   void vmul(
   1931       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
   1932 
   1933   void vmul(
   1934       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
   1935 
   1936   void vmul(
   1937       Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm);
   1938 
   1939   void vmull(Condition cond,
   1940              DataType dt,
   1941              QRegister rd,
   1942              DRegister rn,
   1943              DRegister dm,
   1944              unsigned index);
   1945 
   1946   void vmull(
   1947       Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm);
   1948 
   1949   void vmvn(Condition cond, DataType dt, DRegister rd, const DOperand& operand);
   1950 
   1951   void vmvn(Condition cond, DataType dt, QRegister rd, const QOperand& operand);
   1952 
   1953   void vneg(Condition cond, DataType dt, DRegister rd, DRegister rm);
   1954 
   1955   void vneg(Condition cond, DataType dt, QRegister rd, QRegister rm);
   1956 
   1957   void vneg(Condition cond, DataType dt, SRegister rd, SRegister rm);
   1958 
   1959   void vnmla(
   1960       Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm);
   1961 
   1962   void vnmla(
   1963       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
   1964 
   1965   void vnmls(
   1966       Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm);
   1967 
   1968   void vnmls(
   1969       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
   1970 
   1971   void vnmul(
   1972       Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm);
   1973 
   1974   void vnmul(
   1975       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
   1976 
   1977   void vorn(Condition cond,
   1978             DataType dt,
   1979             DRegister rd,
   1980             DRegister rn,
   1981             const DOperand& operand);
   1982 
   1983   void vorn(Condition cond,
   1984             DataType dt,
   1985             QRegister rd,
   1986             QRegister rn,
   1987             const QOperand& operand);
   1988 
   1989   void vorr(Condition cond,
   1990             DataType dt,
   1991             DRegister rd,
   1992             DRegister rn,
   1993             const DOperand& operand);
   1994 
   1995   void vorr(Condition cond,
   1996             DataType dt,
   1997             QRegister rd,
   1998             QRegister rn,
   1999             const QOperand& operand);
   2000 
   2001   void vpadal(Condition cond, DataType dt, DRegister rd, DRegister rm);
   2002 
   2003   void vpadal(Condition cond, DataType dt, QRegister rd, QRegister rm);
   2004 
   2005   void vpadd(
   2006       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
   2007 
   2008   void vpaddl(Condition cond, DataType dt, DRegister rd, DRegister rm);
   2009 
   2010   void vpaddl(Condition cond, DataType dt, QRegister rd, QRegister rm);
   2011 
   2012   void vpmax(
   2013       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
   2014 
   2015   void vpmin(
   2016       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
   2017 
   2018   void vpop(Condition cond, DataType dt, DRegisterList dreglist);
   2019 
   2020   void vpop(Condition cond, DataType dt, SRegisterList sreglist);
   2021 
   2022   void vpush(Condition cond, DataType dt, DRegisterList dreglist);
   2023 
   2024   void vpush(Condition cond, DataType dt, SRegisterList sreglist);
   2025 
   2026   void vqabs(Condition cond, DataType dt, DRegister rd, DRegister rm);
   2027 
   2028   void vqabs(Condition cond, DataType dt, QRegister rd, QRegister rm);
   2029 
   2030   void vqadd(
   2031       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
   2032 
   2033   void vqadd(
   2034       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
   2035 
   2036   void vqdmlal(
   2037       Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm);
   2038 
   2039   void vqdmlal(Condition cond,
   2040                DataType dt,
   2041                QRegister rd,
   2042                DRegister rn,
   2043                DRegister dm,
   2044                unsigned index);
   2045 
   2046   void vqdmlsl(
   2047       Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm);
   2048 
   2049   void vqdmlsl(Condition cond,
   2050                DataType dt,
   2051                QRegister rd,
   2052                DRegister rn,
   2053                DRegister dm,
   2054                unsigned index);
   2055 
   2056   void vqdmulh(
   2057       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
   2058 
   2059   void vqdmulh(
   2060       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
   2061 
   2062   void vqdmulh(Condition cond,
   2063                DataType dt,
   2064                DRegister rd,
   2065                DRegister rn,
   2066                DRegisterLane rm);
   2067 
   2068   void vqdmulh(Condition cond,
   2069                DataType dt,
   2070                QRegister rd,
   2071                QRegister rn,
   2072                DRegisterLane rm);
   2073 
   2074   void vqdmull(
   2075       Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm);
   2076 
   2077   void vqdmull(Condition cond,
   2078                DataType dt,
   2079                QRegister rd,
   2080                DRegister rn,
   2081                DRegisterLane rm);
   2082 
   2083   void vqmovn(Condition cond, DataType dt, DRegister rd, QRegister rm);
   2084 
   2085   void vqmovun(Condition cond, DataType dt, DRegister rd, QRegister rm);
   2086 
   2087   void vqneg(Condition cond, DataType dt, DRegister rd, DRegister rm);
   2088 
   2089   void vqneg(Condition cond, DataType dt, QRegister rd, QRegister rm);
   2090 
   2091   void vqrdmulh(
   2092       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
   2093 
   2094   void vqrdmulh(
   2095       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
   2096 
   2097   void vqrdmulh(Condition cond,
   2098                 DataType dt,
   2099                 DRegister rd,
   2100                 DRegister rn,
   2101                 DRegisterLane rm);
   2102 
   2103   void vqrdmulh(Condition cond,
   2104                 DataType dt,
   2105                 QRegister rd,
   2106                 QRegister rn,
   2107                 DRegisterLane rm);
   2108 
   2109   void vqrshl(
   2110       Condition cond, DataType dt, DRegister rd, DRegister rm, DRegister rn);
   2111 
   2112   void vqrshl(
   2113       Condition cond, DataType dt, QRegister rd, QRegister rm, QRegister rn);
   2114 
   2115   void vqrshrn(Condition cond,
   2116                DataType dt,
   2117                DRegister rd,
   2118                QRegister rm,
   2119                const QOperand& operand);
   2120 
   2121   void vqrshrun(Condition cond,
   2122                 DataType dt,
   2123                 DRegister rd,
   2124                 QRegister rm,
   2125                 const QOperand& operand);
   2126 
   2127   void vqshl(Condition cond,
   2128              DataType dt,
   2129              DRegister rd,
   2130              DRegister rm,
   2131              const DOperand& operand);
   2132 
   2133   void vqshl(Condition cond,
   2134              DataType dt,
   2135              QRegister rd,
   2136              QRegister rm,
   2137              const QOperand& operand);
   2138 
   2139   void vqshlu(Condition cond,
   2140               DataType dt,
   2141               DRegister rd,
   2142               DRegister rm,
   2143               const DOperand& operand);
   2144 
   2145   void vqshlu(Condition cond,
   2146               DataType dt,
   2147               QRegister rd,
   2148               QRegister rm,
   2149               const QOperand& operand);
   2150 
   2151   void vqshrn(Condition cond,
   2152               DataType dt,
   2153               DRegister rd,
   2154               QRegister rm,
   2155               const QOperand& operand);
   2156 
   2157   void vqshrun(Condition cond,
   2158                DataType dt,
   2159                DRegister rd,
   2160                QRegister rm,
   2161                const QOperand& operand);
   2162 
   2163   void vqsub(
   2164       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
   2165 
   2166   void vqsub(
   2167       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
   2168 
   2169   void vraddhn(
   2170       Condition cond, DataType dt, DRegister rd, QRegister rn, QRegister rm);
   2171 
   2172   void vrecpe(Condition cond, DataType dt, DRegister rd, DRegister rm);
   2173 
   2174   void vrecpe(Condition cond, DataType dt, QRegister rd, QRegister rm);
   2175 
   2176   void vrecps(
   2177       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
   2178 
   2179   void vrecps(
   2180       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
   2181 
   2182   void vrev16(Condition cond, DataType dt, DRegister rd, DRegister rm);
   2183 
   2184   void vrev16(Condition cond, DataType dt, QRegister rd, QRegister rm);
   2185 
   2186   void vrev32(Condition cond, DataType dt, DRegister rd, DRegister rm);
   2187 
   2188   void vrev32(Condition cond, DataType dt, QRegister rd, QRegister rm);
   2189 
   2190   void vrev64(Condition cond, DataType dt, DRegister rd, DRegister rm);
   2191 
   2192   void vrev64(Condition cond, DataType dt, QRegister rd, QRegister rm);
   2193 
   2194   void vrhadd(
   2195       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
   2196 
   2197   void vrhadd(
   2198       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
   2199 
   2200   void vrinta(DataType dt1, DataType dt2, DRegister rd, DRegister rm);
   2201 
   2202   void vrinta(DataType dt1, DataType dt2, QRegister rd, QRegister rm);
   2203 
   2204   void vrinta(DataType dt1, DataType dt2, SRegister rd, SRegister rm);
   2205 
   2206   void vrintm(DataType dt1, DataType dt2, DRegister rd, DRegister rm);
   2207 
   2208   void vrintm(DataType dt1, DataType dt2, QRegister rd, QRegister rm);
   2209 
   2210   void vrintm(DataType dt1, DataType dt2, SRegister rd, SRegister rm);
   2211 
   2212   void vrintn(DataType dt1, DataType dt2, DRegister rd, DRegister rm);
   2213 
   2214   void vrintn(DataType dt1, DataType dt2, QRegister rd, QRegister rm);
   2215 
   2216   void vrintn(DataType dt1, DataType dt2, SRegister rd, SRegister rm);
   2217 
   2218   void vrintp(DataType dt1, DataType dt2, DRegister rd, DRegister rm);
   2219 
   2220   void vrintp(DataType dt1, DataType dt2, QRegister rd, QRegister rm);
   2221 
   2222   void vrintp(DataType dt1, DataType dt2, SRegister rd, SRegister rm);
   2223 
   2224   void vrintr(
   2225       Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm);
   2226 
   2227   void vrintr(
   2228       Condition cond, DataType dt1, DataType dt2, DRegister rd, DRegister rm);
   2229 
   2230   void vrintx(
   2231       Condition cond, DataType dt1, DataType dt2, DRegister rd, DRegister rm);
   2232 
   2233   void vrintx(DataType dt1, DataType dt2, QRegister rd, QRegister rm);
   2234 
   2235   void vrintx(
   2236       Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm);
   2237 
   2238   void vrintz(
   2239       Condition cond, DataType dt1, DataType dt2, DRegister rd, DRegister rm);
   2240 
   2241   void vrintz(DataType dt1, DataType dt2, QRegister rd, QRegister rm);
   2242 
   2243   void vrintz(
   2244       Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm);
   2245 
   2246   void vrshl(
   2247       Condition cond, DataType dt, DRegister rd, DRegister rm, DRegister rn);
   2248 
   2249   void vrshl(
   2250       Condition cond, DataType dt, QRegister rd, QRegister rm, QRegister rn);
   2251 
   2252   void vrshr(Condition cond,
   2253              DataType dt,
   2254              DRegister rd,
   2255              DRegister rm,
   2256              const DOperand& operand);
   2257 
   2258   void vrshr(Condition cond,
   2259              DataType dt,
   2260              QRegister rd,
   2261              QRegister rm,
   2262              const QOperand& operand);
   2263 
   2264   void vrshrn(Condition cond,
   2265               DataType dt,
   2266               DRegister rd,
   2267               QRegister rm,
   2268               const QOperand& operand);
   2269 
   2270   void vrsqrte(Condition cond, DataType dt, DRegister rd, DRegister rm);
   2271 
   2272   void vrsqrte(Condition cond, DataType dt, QRegister rd, QRegister rm);
   2273 
   2274   void vrsqrts(
   2275       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
   2276 
   2277   void vrsqrts(
   2278       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
   2279 
   2280   void vrsra(Condition cond,
   2281              DataType dt,
   2282              DRegister rd,
   2283              DRegister rm,
   2284              const DOperand& operand);
   2285 
   2286   void vrsra(Condition cond,
   2287              DataType dt,
   2288              QRegister rd,
   2289              QRegister rm,
   2290              const QOperand& operand);
   2291 
   2292   void vrsubhn(
   2293       Condition cond, DataType dt, DRegister rd, QRegister rn, QRegister rm);
   2294 
   2295   void vseleq(DataType dt, DRegister rd, DRegister rn, DRegister rm);
   2296 
   2297   void vseleq(DataType dt, SRegister rd, SRegister rn, SRegister rm);
   2298 
   2299   void vselge(DataType dt, DRegister rd, DRegister rn, DRegister rm);
   2300 
   2301   void vselge(DataType dt, SRegister rd, SRegister rn, SRegister rm);
   2302 
   2303   void vselgt(DataType dt, DRegister rd, DRegister rn, DRegister rm);
   2304 
   2305   void vselgt(DataType dt, SRegister rd, SRegister rn, SRegister rm);
   2306 
   2307   void vselvs(DataType dt, DRegister rd, DRegister rn, DRegister rm);
   2308 
   2309   void vselvs(DataType dt, SRegister rd, SRegister rn, SRegister rm);
   2310 
   2311   void vshl(Condition cond,
   2312             DataType dt,
   2313             DRegister rd,
   2314             DRegister rm,
   2315             const DOperand& operand);
   2316 
   2317   void vshl(Condition cond,
   2318             DataType dt,
   2319             QRegister rd,
   2320             QRegister rm,
   2321             const QOperand& operand);
   2322 
   2323   void vshll(Condition cond,
   2324              DataType dt,
   2325              QRegister rd,
   2326              DRegister rm,
   2327              const DOperand& operand);
   2328 
   2329   void vshr(Condition cond,
   2330             DataType dt,
   2331             DRegister rd,
   2332             DRegister rm,
   2333             const DOperand& operand);
   2334 
   2335   void vshr(Condition cond,
   2336             DataType dt,
   2337             QRegister rd,
   2338             QRegister rm,
   2339             const QOperand& operand);
   2340 
   2341   void vshrn(Condition cond,
   2342              DataType dt,
   2343              DRegister rd,
   2344              QRegister rm,
   2345              const QOperand& operand);
   2346 
   2347   void vsli(Condition cond,
   2348             DataType dt,
   2349             DRegister rd,
   2350             DRegister rm,
   2351             const DOperand& operand);
   2352 
   2353   void vsli(Condition cond,
   2354             DataType dt,
   2355             QRegister rd,
   2356             QRegister rm,
   2357             const QOperand& operand);
   2358 
   2359   void vsqrt(Condition cond, DataType dt, SRegister rd, SRegister rm);
   2360 
   2361   void vsqrt(Condition cond, DataType dt, DRegister rd, DRegister rm);
   2362 
   2363   void vsra(Condition cond,
   2364             DataType dt,
   2365             DRegister rd,
   2366             DRegister rm,
   2367             const DOperand& operand);
   2368 
   2369   void vsra(Condition cond,
   2370             DataType dt,
   2371             QRegister rd,
   2372             QRegister rm,
   2373             const QOperand& operand);
   2374 
   2375   void vsri(Condition cond,
   2376             DataType dt,
   2377             DRegister rd,
   2378             DRegister rm,
   2379             const DOperand& operand);
   2380 
   2381   void vsri(Condition cond,
   2382             DataType dt,
   2383             QRegister rd,
   2384             QRegister rm,
   2385             const QOperand& operand);
   2386 
   2387   void vst1(Condition cond,
   2388             DataType dt,
   2389             const NeonRegisterList& nreglist,
   2390             const AlignedMemOperand& operand);
   2391 
   2392   void vst2(Condition cond,
   2393             DataType dt,
   2394             const NeonRegisterList& nreglist,
   2395             const AlignedMemOperand& operand);
   2396 
   2397   void vst3(Condition cond,
   2398             DataType dt,
   2399             const NeonRegisterList& nreglist,
   2400             const AlignedMemOperand& operand);
   2401 
   2402   void vst3(Condition cond,
   2403             DataType dt,
   2404             const NeonRegisterList& nreglist,
   2405             const MemOperand& operand);
   2406 
   2407   void vst4(Condition cond,
   2408             DataType dt,
   2409             const NeonRegisterList& nreglist,
   2410             const AlignedMemOperand& operand);
   2411 
   2412   void vstm(Condition cond,
   2413             DataType dt,
   2414             Register rn,
   2415             WriteBack write_back,
   2416             DRegisterList dreglist);
   2417 
   2418   void vstm(Condition cond,
   2419             DataType dt,
   2420             Register rn,
   2421             WriteBack write_back,
   2422             SRegisterList sreglist);
   2423 
   2424   void vstmdb(Condition cond,
   2425               DataType dt,
   2426               Register rn,
   2427               WriteBack write_back,
   2428               DRegisterList dreglist);
   2429 
   2430   void vstmdb(Condition cond,
   2431               DataType dt,
   2432               Register rn,
   2433               WriteBack write_back,
   2434               SRegisterList sreglist);
   2435 
   2436   void vstmia(Condition cond,
   2437               DataType dt,
   2438               Register rn,
   2439               WriteBack write_back,
   2440               DRegisterList dreglist);
   2441 
   2442   void vstmia(Condition cond,
   2443               DataType dt,
   2444               Register rn,
   2445               WriteBack write_back,
   2446               SRegisterList sreglist);
   2447 
   2448   void vstr(Condition cond,
   2449             DataType dt,
   2450             DRegister rd,
   2451             const MemOperand& operand);
   2452 
   2453   void vstr(Condition cond,
   2454             DataType dt,
   2455             SRegister rd,
   2456             const MemOperand& operand);
   2457 
   2458   void vsub(
   2459       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
   2460 
   2461   void vsub(
   2462       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
   2463 
   2464   void vsub(
   2465       Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm);
   2466 
   2467   void vsubhn(
   2468       Condition cond, DataType dt, DRegister rd, QRegister rn, QRegister rm);
   2469 
   2470   void vsubl(
   2471       Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm);
   2472 
   2473   void vsubw(
   2474       Condition cond, DataType dt, QRegister rd, QRegister rn, DRegister rm);
   2475 
   2476   void vswp(Condition cond, DataType dt, DRegister rd, DRegister rm);
   2477 
   2478   void vswp(Condition cond, DataType dt, QRegister rd, QRegister rm);
   2479 
   2480   void vtbl(Condition cond,
   2481             DataType dt,
   2482             DRegister rd,
   2483             const NeonRegisterList& nreglist,
   2484             DRegister rm);
   2485 
   2486   void vtbx(Condition cond,
   2487             DataType dt,
   2488             DRegister rd,
   2489             const NeonRegisterList& nreglist,
   2490             DRegister rm);
   2491 
   2492   void vtrn(Condition cond, DataType dt, DRegister rd, DRegister rm);
   2493 
   2494   void vtrn(Condition cond, DataType dt, QRegister rd, QRegister rm);
   2495 
   2496   void vtst(
   2497       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
   2498 
   2499   void vtst(
   2500       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
   2501 
   2502   void vuzp(Condition cond, DataType dt, DRegister rd, DRegister rm);
   2503 
   2504   void vuzp(Condition cond, DataType dt, QRegister rd, QRegister rm);
   2505 
   2506   void vzip(Condition cond, DataType dt, DRegister rd, DRegister rm);
   2507 
   2508   void vzip(Condition cond, DataType dt, QRegister rd, QRegister rm);
   2509 
   2510   void yield(Condition cond, EncodingSize size);
   2511 
   2512   int T32Size(uint32_t instr);
   2513   void DecodeT32(uint32_t instr);
   2514   void DecodeA32(uint32_t instr);
   2515 };
   2516 
   2517 DataTypeValue Dt_L_imm6_1_Decode(uint32_t value, uint32_t type_value);
   2518 DataTypeValue Dt_L_imm6_2_Decode(uint32_t value, uint32_t type_value);
   2519 DataTypeValue Dt_L_imm6_3_Decode(uint32_t value);
   2520 DataTypeValue Dt_L_imm6_4_Decode(uint32_t value);
   2521 DataTypeValue Dt_imm6_1_Decode(uint32_t value, uint32_t type_value);
   2522 DataTypeValue Dt_imm6_2_Decode(uint32_t value, uint32_t type_value);
   2523 DataTypeValue Dt_imm6_3_Decode(uint32_t value);
   2524 DataTypeValue Dt_imm6_4_Decode(uint32_t value, uint32_t type_value);
   2525 DataTypeValue Dt_op_U_size_1_Decode(uint32_t value);
   2526 DataTypeValue Dt_op_size_1_Decode(uint32_t value);
   2527 DataTypeValue Dt_op_size_2_Decode(uint32_t value);
   2528 DataTypeValue Dt_op_size_3_Decode(uint32_t value);
   2529 DataTypeValue Dt_U_imm3H_1_Decode(uint32_t value);
   2530 DataTypeValue Dt_U_opc1_opc2_1_Decode(uint32_t value, unsigned* lane);
   2531 DataTypeValue Dt_opc1_opc2_1_Decode(uint32_t value, unsigned* lane);
   2532 DataTypeValue Dt_imm4_1_Decode(uint32_t value, unsigned* lane);
   2533 DataTypeValue Dt_B_E_1_Decode(uint32_t value);
   2534 DataTypeValue Dt_op_1_Decode1(uint32_t value);
   2535 DataTypeValue Dt_op_1_Decode2(uint32_t value);
   2536 DataTypeValue Dt_op_2_Decode(uint32_t value);
   2537 DataTypeValue Dt_op_3_Decode(uint32_t value);
   2538 DataTypeValue Dt_U_sx_1_Decode(uint32_t value);
   2539 DataTypeValue Dt_op_U_1_Decode1(uint32_t value);
   2540 DataTypeValue Dt_op_U_1_Decode2(uint32_t value);
   2541 DataTypeValue Dt_sz_1_Decode(uint32_t value);
   2542 DataTypeValue Dt_F_size_1_Decode(uint32_t value);
   2543 DataTypeValue Dt_F_size_2_Decode(uint32_t value);
   2544 DataTypeValue Dt_F_size_3_Decode(uint32_t value);
   2545 DataTypeValue Dt_F_size_4_Decode(uint32_t value);
   2546 DataTypeValue Dt_U_size_1_Decode(uint32_t value);
   2547 DataTypeValue Dt_U_size_2_Decode(uint32_t value);
   2548 DataTypeValue Dt_U_size_3_Decode(uint32_t value);
   2549 DataTypeValue Dt_size_1_Decode(uint32_t value);
   2550 DataTypeValue Dt_size_2_Decode(uint32_t value);
   2551 DataTypeValue Dt_size_3_Decode(uint32_t value);
   2552 DataTypeValue Dt_size_4_Decode(uint32_t value);
   2553 DataTypeValue Dt_size_5_Decode(uint32_t value);
   2554 DataTypeValue Dt_size_6_Decode(uint32_t value);
   2555 DataTypeValue Dt_size_7_Decode(uint32_t value);
   2556 DataTypeValue Dt_size_8_Decode(uint32_t value);
   2557 DataTypeValue Dt_size_9_Decode(uint32_t value, uint32_t type_value);
   2558 DataTypeValue Dt_size_10_Decode(uint32_t value);
   2559 DataTypeValue Dt_size_11_Decode(uint32_t value, uint32_t type_value);
   2560 DataTypeValue Dt_size_12_Decode(uint32_t value, uint32_t type_value);
   2561 DataTypeValue Dt_size_13_Decode(uint32_t value);
   2562 DataTypeValue Dt_size_14_Decode(uint32_t value);
   2563 DataTypeValue Dt_size_15_Decode(uint32_t value);
   2564 DataTypeValue Dt_size_16_Decode(uint32_t value);
   2565 // End of generated code.
   2566 
   2567 class PrintDisassembler : public Disassembler {
   2568  public:
   2569   explicit PrintDisassembler(std::ostream& os,  // NOLINT(runtime/references)
   2570                              uint32_t code_address = 0)
   2571       : Disassembler(os, code_address) {}
   2572   explicit PrintDisassembler(DisassemblerStream* os, uint32_t code_address = 0)
   2573       : Disassembler(os, code_address) {}
   2574 
   2575   virtual void PrintCodeAddress(uint32_t code_address) {
   2576     os() << "0x" << std::hex << std::setw(8) << std::setfill('0')
   2577          << code_address << "\t";
   2578   }
   2579 
   2580   virtual void PrintOpcode16(uint32_t opcode) {
   2581     os() << std::hex << std::setw(4) << std::setfill('0') << opcode << "    "
   2582          << std::dec << "\t";
   2583   }
   2584 
   2585   virtual void PrintOpcode32(uint32_t opcode) {
   2586     os() << std::hex << std::setw(8) << std::setfill('0') << opcode << std::dec
   2587          << "\t";
   2588   }
   2589 
   2590   const uint32_t* DecodeA32At(const uint32_t* instruction_address) {
   2591     DecodeA32(*instruction_address);
   2592     return instruction_address + 1;
   2593   }
   2594 
   2595   // Returns the address of the next instruction.
   2596   const uint16_t* DecodeT32At(const uint16_t* instruction_address,
   2597                               const uint16_t* buffer_end);
   2598   void DecodeT32(uint32_t instruction);
   2599   void DecodeA32(uint32_t instruction);
   2600   void DisassembleA32Buffer(const uint32_t* buffer, size_t size_in_bytes);
   2601   void DisassembleT32Buffer(const uint16_t* buffer, size_t size_in_bytes);
   2602 };
   2603 
   2604 }  // namespace aarch32
   2605 }  // namespace vixl
   2606 
   2607 #endif  // VIXL_DISASM_AARCH32_H_
   2608