1// Copyright 2017, 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_AARCH32_ASSEMBLER_AARCH32_H_
28#define VIXL_AARCH32_ASSEMBLER_AARCH32_H_
29
30#include "assembler-base-vixl.h"
31
32#include "aarch32/instructions-aarch32.h"
33#include "aarch32/location-aarch32.h"
34
35namespace vixl {
36namespace aarch32 {
37
38class Assembler : public internal::AssemblerBase {
39  InstructionSet isa_;
40  Condition first_condition_;
41  uint16_t it_mask_;
42  bool has_32_dregs_;
43  bool allow_unpredictable_;
44  bool allow_strongly_discouraged_;
45
46 protected:
47  void EmitT32_16(uint16_t instr);
48  void EmitT32_32(uint32_t instr);
49  void EmitA32(uint32_t instr);
50  // Check that the condition of the current instruction is consistent with the
51  // IT state.
52  void CheckIT(Condition condition) {
53#ifdef VIXL_DEBUG
54    PerformCheckIT(condition);
55#else
56    USE(condition);
57#endif
58  }
59#ifdef VIXL_DEBUG
60  void PerformCheckIT(Condition condition);
61#endif
62  void AdvanceIT() {
63    first_condition_ =
64        Condition((first_condition_.GetCondition() & 0xe) | (it_mask_ >> 3));
65    it_mask_ = (it_mask_ << 1) & 0xf;
66  }
67  // Virtual, in order to be overridden by the MacroAssembler, which needs to
68  // notify the pool manager.
69  virtual void BindHelper(Label* label);
70
71  uint32_t Link(uint32_t instr,
72                Location* location,
73                const Location::EmitOperator& op,
74                const ReferenceInfo* info);
75
76 public:
77  class AllowUnpredictableScope {
78    Assembler* assembler_;
79    bool old_;
80
81   public:
82    explicit AllowUnpredictableScope(Assembler* assembler)
83        : assembler_(assembler), old_(assembler->allow_unpredictable_) {
84      assembler_->allow_unpredictable_ = true;
85    }
86    ~AllowUnpredictableScope() { assembler_->allow_unpredictable_ = old_; }
87  };
88  class AllowStronglyDiscouragedScope {
89    Assembler* assembler_;
90    bool old_;
91
92   public:
93    explicit AllowStronglyDiscouragedScope(Assembler* assembler)
94        : assembler_(assembler), old_(assembler->allow_strongly_discouraged_) {
95      assembler_->allow_strongly_discouraged_ = true;
96    }
97    ~AllowStronglyDiscouragedScope() {
98      assembler_->allow_strongly_discouraged_ = old_;
99    }
100  };
101
102  explicit Assembler(InstructionSet isa = kDefaultISA)
103      : isa_(isa),
104        first_condition_(al),
105        it_mask_(0),
106        has_32_dregs_(true),
107        allow_unpredictable_(false),
108        allow_strongly_discouraged_(false) {
109#if defined(VIXL_INCLUDE_TARGET_A32_ONLY)
110    // Avoid compiler warning.
111    USE(isa_);
112    VIXL_ASSERT(isa == A32);
113#elif defined(VIXL_INCLUDE_TARGET_T32_ONLY)
114    USE(isa_);
115    VIXL_ASSERT(isa == T32);
116#endif
117  }
118  explicit Assembler(size_t capacity, InstructionSet isa = kDefaultISA)
119      : AssemblerBase(capacity),
120        isa_(isa),
121        first_condition_(al),
122        it_mask_(0),
123        has_32_dregs_(true),
124        allow_unpredictable_(false),
125        allow_strongly_discouraged_(false) {
126#if defined(VIXL_INCLUDE_TARGET_A32_ONLY)
127    VIXL_ASSERT(isa == A32);
128#elif defined(VIXL_INCLUDE_TARGET_T32_ONLY)
129    VIXL_ASSERT(isa == T32);
130#endif
131  }
132  Assembler(byte* buffer, size_t capacity, InstructionSet isa = kDefaultISA)
133      : AssemblerBase(buffer, capacity),
134        isa_(isa),
135        first_condition_(al),
136        it_mask_(0),
137        has_32_dregs_(true),
138        allow_unpredictable_(false),
139        allow_strongly_discouraged_(false) {
140#if defined(VIXL_INCLUDE_TARGET_A32_ONLY)
141    VIXL_ASSERT(isa == A32);
142#elif defined(VIXL_INCLUDE_TARGET_T32_ONLY)
143    VIXL_ASSERT(isa == T32);
144#endif
145  }
146  virtual ~Assembler() {}
147
148  void UseInstructionSet(InstructionSet isa) {
149#if defined(VIXL_INCLUDE_TARGET_A32_ONLY)
150    USE(isa);
151    VIXL_ASSERT(isa == A32);
152#elif defined(VIXL_INCLUDE_TARGET_T32_ONLY)
153    USE(isa);
154    VIXL_ASSERT(isa == T32);
155#else
156    VIXL_ASSERT((isa_ == isa) || (GetCursorOffset() == 0));
157    isa_ = isa;
158#endif
159  }
160
161#if defined(VIXL_INCLUDE_TARGET_A32_ONLY)
162  InstructionSet GetInstructionSetInUse() const { return A32; }
163#elif defined(VIXL_INCLUDE_TARGET_T32_ONLY)
164  InstructionSet GetInstructionSetInUse() const { return T32; }
165#else
166  InstructionSet GetInstructionSetInUse() const { return isa_; }
167#endif
168
169  void UseT32() { UseInstructionSet(T32); }
170  void UseA32() { UseInstructionSet(A32); }
171  bool IsUsingT32() const { return GetInstructionSetInUse() == T32; }
172  bool IsUsingA32() const { return GetInstructionSetInUse() == A32; }
173
174  void SetIT(Condition first_condition, uint16_t it_mask) {
175    VIXL_ASSERT(it_mask_ == 0);
176    first_condition_ = first_condition;
177    it_mask_ = it_mask;
178  }
179  bool InITBlock() { return it_mask_ != 0; }
180  bool OutsideITBlock() { return it_mask_ == 0; }
181  bool OutsideITBlockOrLast() { return (it_mask_ == 0) || (it_mask_ == 0x8); }
182  bool OutsideITBlockAndAlOrLast(Condition cond) {
183    return ((it_mask_ == 0) && cond.Is(al)) || (it_mask_ == 0x8);
184  }
185  void CheckNotIT() { VIXL_ASSERT(it_mask_ == 0); }
186  bool Has32DRegs() const { return has_32_dregs_; }
187  void SetHas32DRegs(bool has_32_dregs) { has_32_dregs_ = has_32_dregs; }
188
189  int32_t GetCursorOffset() const {
190    ptrdiff_t offset = buffer_.GetCursorOffset();
191    VIXL_ASSERT(IsInt32(offset));
192    return static_cast<int32_t>(offset);
193  }
194
195  uint32_t GetArchitectureStatePCOffset() const { return IsUsingT32() ? 4 : 8; }
196
197  // Bind a raw Location that will never be tracked by the pool manager.
198  void bind(Location* location) {
199    VIXL_ASSERT(AllowAssembler());
200    VIXL_ASSERT(!location->IsBound());
201    location->SetLocation(this, GetCursorOffset());
202    location->MarkBound();
203  }
204
205  // Bind a Label, which may be tracked by the pool manager in the presence of a
206  // MacroAssembler.
207  void bind(Label* label) {
208    VIXL_ASSERT(AllowAssembler());
209    BindHelper(label);
210  }
211
212  void place(RawLiteral* literal) {
213    VIXL_ASSERT(AllowAssembler());
214    VIXL_ASSERT(literal->IsManuallyPlaced());
215    literal->SetLocation(this, GetCursorOffset());
216    literal->MarkBound();
217    GetBuffer()->EnsureSpaceFor(literal->GetSize());
218    GetBuffer()->EmitData(literal->GetDataAddress(), literal->GetSize());
219  }
220
221  size_t GetSizeOfCodeGeneratedSince(Label* label) const {
222    VIXL_ASSERT(label->IsBound());
223    return buffer_.GetOffsetFrom(label->GetLocation());
224  }
225
226  // Helpers for it instruction.
227  void it(Condition cond) { it(cond, 0x8); }
228  void itt(Condition cond) { it(cond, 0x4); }
229  void ite(Condition cond) { it(cond, 0xc); }
230  void ittt(Condition cond) { it(cond, 0x2); }
231  void itet(Condition cond) { it(cond, 0xa); }
232  void itte(Condition cond) { it(cond, 0x6); }
233  void itee(Condition cond) { it(cond, 0xe); }
234  void itttt(Condition cond) { it(cond, 0x1); }
235  void itett(Condition cond) { it(cond, 0x9); }
236  void ittet(Condition cond) { it(cond, 0x5); }
237  void iteet(Condition cond) { it(cond, 0xd); }
238  void ittte(Condition cond) { it(cond, 0x3); }
239  void itete(Condition cond) { it(cond, 0xb); }
240  void ittee(Condition cond) { it(cond, 0x7); }
241  void iteee(Condition cond) { it(cond, 0xf); }
242
243  // Start of generated code.
244  typedef void (Assembler::*InstructionCondSizeRROp)(Condition cond,
245                                                     EncodingSize size,
246                                                     Register rd,
247                                                     Register rn,
248                                                     const Operand& operand);
249  typedef void (Assembler::*InstructionCondROp)(Condition cond,
250                                                Register rd,
251                                                const Operand& operand);
252  typedef void (Assembler::*InstructionROp)(Register rd,
253                                            const Operand& operand);
254  typedef void (Assembler::*InstructionCondRROp)(Condition cond,
255                                                 Register rd,
256                                                 Register rn,
257                                                 const Operand& operand);
258  typedef void (Assembler::*InstructionCondSizeRL)(Condition cond,
259                                                   EncodingSize size,
260                                                   Register rd,
261                                                   Location* location);
262  typedef void (Assembler::*InstructionCondSizeL)(Condition cond,
263                                                  EncodingSize size,
264                                                  Location* location);
265  typedef void (Assembler::*InstructionCondRII)(Condition cond,
266                                                Register rd,
267                                                uint32_t lsb,
268                                                uint32_t width);
269  typedef void (Assembler::*InstructionCondRRII)(
270      Condition cond, Register rd, Register rn, uint32_t lsb, uint32_t width);
271  typedef void (Assembler::*InstructionCondI)(Condition cond, uint32_t imm);
272  typedef void (Assembler::*InstructionCondL)(Condition cond,
273                                              Location* location);
274  typedef void (Assembler::*InstructionCondR)(Condition cond, Register rm);
275  typedef void (Assembler::*InstructionRL)(Register rn, Location* location);
276  typedef void (Assembler::*InstructionCond)(Condition cond);
277  typedef void (Assembler::*InstructionCondRR)(Condition cond,
278                                               Register rd,
279                                               Register rm);
280  typedef void (Assembler::*InstructionCondSizeROp)(Condition cond,
281                                                    EncodingSize size,
282                                                    Register rn,
283                                                    const Operand& operand);
284  typedef void (Assembler::*InstructionCondRRR)(Condition cond,
285                                                Register rd,
286                                                Register rn,
287                                                Register rm);
288  typedef void (Assembler::*InstructionCondBa)(Condition cond,
289                                               MemoryBarrier option);
290  typedef void (Assembler::*InstructionCondRwbDrl)(Condition cond,
291                                                   Register rn,
292                                                   WriteBack write_back,
293                                                   DRegisterList dreglist);
294  typedef void (Assembler::*InstructionCondRMop)(Condition cond,
295                                                 Register rt,
296                                                 const MemOperand& operand);
297  typedef void (Assembler::*InstructionCondRRMop)(Condition cond,
298                                                  Register rt,
299                                                  Register rt2,
300                                                  const MemOperand& operand);
301  typedef void (Assembler::*InstructionCondSizeRwbRl)(Condition cond,
302                                                      EncodingSize size,
303                                                      Register rn,
304                                                      WriteBack write_back,
305                                                      RegisterList registers);
306  typedef void (Assembler::*InstructionCondRwbRl)(Condition cond,
307                                                  Register rn,
308                                                  WriteBack write_back,
309                                                  RegisterList registers);
310  typedef void (Assembler::*InstructionCondSizeRMop)(Condition cond,
311                                                     EncodingSize size,
312                                                     Register rt,
313                                                     const MemOperand& operand);
314  typedef void (Assembler::*InstructionCondRL)(Condition cond,
315                                               Register rt,
316                                               Location* location);
317  typedef void (Assembler::*InstructionCondRRL)(Condition cond,
318                                                Register rt,
319                                                Register rt2,
320                                                Location* location);
321  typedef void (Assembler::*InstructionCondRRRR)(
322      Condition cond, Register rd, Register rn, Register rm, Register ra);
323  typedef void (Assembler::*InstructionCondRSr)(Condition cond,
324                                                Register rd,
325                                                SpecialRegister spec_reg);
326  typedef void (Assembler::*InstructionCondMsrOp)(
327      Condition cond, MaskedSpecialRegister spec_reg, const Operand& operand);
328  typedef void (Assembler::*InstructionCondSizeRRR)(
329      Condition cond, EncodingSize size, Register rd, Register rn, Register rm);
330  typedef void (Assembler::*InstructionCondSize)(Condition cond,
331                                                 EncodingSize size);
332  typedef void (Assembler::*InstructionCondMop)(Condition cond,
333                                                const MemOperand& operand);
334  typedef void (Assembler::*InstructionCondSizeRl)(Condition cond,
335                                                   EncodingSize size,
336                                                   RegisterList registers);
337  typedef void (Assembler::*InstructionCondSizeOrl)(Condition cond,
338                                                    EncodingSize size,
339                                                    Register rt);
340  typedef void (Assembler::*InstructionCondSizeRR)(Condition cond,
341                                                   EncodingSize size,
342                                                   Register rd,
343                                                   Register rm);
344  typedef void (Assembler::*InstructionDtQQQ)(DataType dt,
345                                              QRegister rd,
346                                              QRegister rn,
347                                              QRegister rm);
348  typedef void (Assembler::*InstructionCondRIOp)(Condition cond,
349                                                 Register rd,
350                                                 uint32_t imm,
351                                                 const Operand& operand);
352  typedef void (Assembler::*InstructionCondRIR)(Condition cond,
353                                                Register rd,
354                                                uint32_t imm,
355                                                Register rn);
356  typedef void (Assembler::*InstructionCondRRRMop)(Condition cond,
357                                                   Register rd,
358                                                   Register rt,
359                                                   Register rt2,
360                                                   const MemOperand& operand);
361  typedef void (Assembler::*InstructionCondSizeI)(Condition cond,
362                                                  EncodingSize size,
363                                                  uint32_t imm);
364  typedef void (Assembler::*InstructionCondDtDDD)(
365      Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
366  typedef void (Assembler::*InstructionCondDtQQQ)(
367      Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
368  typedef void (Assembler::*InstructionCondDtQDD)(
369      Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm);
370  typedef void (Assembler::*InstructionCondDtDD)(Condition cond,
371                                                 DataType dt,
372                                                 DRegister rd,
373                                                 DRegister rm);
374  typedef void (Assembler::*InstructionCondDtQQ)(Condition cond,
375                                                 DataType dt,
376                                                 QRegister rd,
377                                                 QRegister rm);
378  typedef void (Assembler::*InstructionCondDtSS)(Condition cond,
379                                                 DataType dt,
380                                                 SRegister rd,
381                                                 SRegister rm);
382  typedef void (Assembler::*InstructionCondDtSSS)(
383      Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm);
384  typedef void (Assembler::*InstructionCondDtDQQ)(
385      Condition cond, DataType dt, DRegister rd, QRegister rn, QRegister rm);
386  typedef void (Assembler::*InstructionCondDtQQD)(
387      Condition cond, DataType dt, QRegister rd, QRegister rn, DRegister rm);
388  typedef void (Assembler::*InstructionCondDtDDDop)(Condition cond,
389                                                    DataType dt,
390                                                    DRegister rd,
391                                                    DRegister rn,
392                                                    const DOperand& operand);
393  typedef void (Assembler::*InstructionCondDtQQQop)(Condition cond,
394                                                    DataType dt,
395                                                    QRegister rd,
396                                                    QRegister rn,
397                                                    const QOperand& operand);
398  typedef void (Assembler::*InstructionCondDtSSop)(Condition cond,
399                                                   DataType dt,
400                                                   SRegister rd,
401                                                   const SOperand& operand);
402  typedef void (Assembler::*InstructionCondDtDDop)(Condition cond,
403                                                   DataType dt,
404                                                   DRegister rd,
405                                                   const DOperand& operand);
406  typedef void (Assembler::*InstructionCondDtDtDS)(
407      Condition cond, DataType dt1, DataType dt2, DRegister rd, SRegister rm);
408  typedef void (Assembler::*InstructionCondDtDtSD)(
409      Condition cond, DataType dt1, DataType dt2, SRegister rd, DRegister rm);
410  typedef void (Assembler::*InstructionCondDtDtDDSi)(Condition cond,
411                                                     DataType dt1,
412                                                     DataType dt2,
413                                                     DRegister rd,
414                                                     DRegister rm,
415                                                     int32_t fbits);
416  typedef void (Assembler::*InstructionCondDtDtQQSi)(Condition cond,
417                                                     DataType dt1,
418                                                     DataType dt2,
419                                                     QRegister rd,
420                                                     QRegister rm,
421                                                     int32_t fbits);
422  typedef void (Assembler::*InstructionCondDtDtSSSi)(Condition cond,
423                                                     DataType dt1,
424                                                     DataType dt2,
425                                                     SRegister rd,
426                                                     SRegister rm,
427                                                     int32_t fbits);
428  typedef void (Assembler::*InstructionCondDtDtDD)(
429      Condition cond, DataType dt1, DataType dt2, DRegister rd, DRegister rm);
430  typedef void (Assembler::*InstructionCondDtDtQQ)(
431      Condition cond, DataType dt1, DataType dt2, QRegister rd, QRegister rm);
432  typedef void (Assembler::*InstructionCondDtDtDQ)(
433      Condition cond, DataType dt1, DataType dt2, DRegister rd, QRegister rm);
434  typedef void (Assembler::*InstructionCondDtDtQD)(
435      Condition cond, DataType dt1, DataType dt2, QRegister rd, DRegister rm);
436  typedef void (Assembler::*InstructionCondDtDtSS)(
437      Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm);
438  typedef void (Assembler::*InstructionDtDtDD)(DataType dt1,
439                                               DataType dt2,
440                                               DRegister rd,
441                                               DRegister rm);
442  typedef void (Assembler::*InstructionDtDtQQ)(DataType dt1,
443                                               DataType dt2,
444                                               QRegister rd,
445                                               QRegister rm);
446  typedef void (Assembler::*InstructionDtDtSS)(DataType dt1,
447                                               DataType dt2,
448                                               SRegister rd,
449                                               SRegister rm);
450  typedef void (Assembler::*InstructionDtDtSD)(DataType dt1,
451                                               DataType dt2,
452                                               SRegister rd,
453                                               DRegister rm);
454  typedef void (Assembler::*InstructionCondDtQR)(Condition cond,
455                                                 DataType dt,
456                                                 QRegister rd,
457                                                 Register rt);
458  typedef void (Assembler::*InstructionCondDtDR)(Condition cond,
459                                                 DataType dt,
460                                                 DRegister rd,
461                                                 Register rt);
462  typedef void (Assembler::*InstructionCondDtDDx)(Condition cond,
463                                                  DataType dt,
464                                                  DRegister rd,
465                                                  DRegisterLane rm);
466  typedef void (Assembler::*InstructionCondDtQDx)(Condition cond,
467                                                  DataType dt,
468                                                  QRegister rd,
469                                                  DRegisterLane rm);
470  typedef void (Assembler::*InstructionCondDtDDDDop)(Condition cond,
471                                                     DataType dt,
472                                                     DRegister rd,
473                                                     DRegister rn,
474                                                     DRegister rm,
475                                                     const DOperand& operand);
476  typedef void (Assembler::*InstructionCondDtQQQQop)(Condition cond,
477                                                     DataType dt,
478                                                     QRegister rd,
479                                                     QRegister rn,
480                                                     QRegister rm,
481                                                     const QOperand& operand);
482  typedef void (Assembler::*InstructionCondDtNrlAmop)(
483      Condition cond,
484      DataType dt,
485      const NeonRegisterList& nreglist,
486      const AlignedMemOperand& operand);
487  typedef void (Assembler::*InstructionCondDtNrlMop)(
488      Condition cond,
489      DataType dt,
490      const NeonRegisterList& nreglist,
491      const MemOperand& operand);
492  typedef void (Assembler::*InstructionCondDtRwbDrl)(Condition cond,
493                                                     DataType dt,
494                                                     Register rn,
495                                                     WriteBack write_back,
496                                                     DRegisterList dreglist);
497  typedef void (Assembler::*InstructionCondDtRwbSrl)(Condition cond,
498                                                     DataType dt,
499                                                     Register rn,
500                                                     WriteBack write_back,
501                                                     SRegisterList sreglist);
502  typedef void (Assembler::*InstructionCondDtDL)(Condition cond,
503                                                 DataType dt,
504                                                 DRegister rd,
505                                                 Location* location);
506  typedef void (Assembler::*InstructionCondDtDMop)(Condition cond,
507                                                   DataType dt,
508                                                   DRegister rd,
509                                                   const MemOperand& operand);
510  typedef void (Assembler::*InstructionCondDtSL)(Condition cond,
511                                                 DataType dt,
512                                                 SRegister rd,
513                                                 Location* location);
514  typedef void (Assembler::*InstructionCondDtSMop)(Condition cond,
515                                                   DataType dt,
516                                                   SRegister rd,
517                                                   const MemOperand& operand);
518  typedef void (Assembler::*InstructionDtDDD)(DataType dt,
519                                              DRegister rd,
520                                              DRegister rn,
521                                              DRegister rm);
522  typedef void (Assembler::*InstructionDtSSS)(DataType dt,
523                                              SRegister rd,
524                                              SRegister rn,
525                                              SRegister rm);
526  typedef void (Assembler::*InstructionCondDtDDDx)(Condition cond,
527                                                   DataType dt,
528                                                   DRegister rd,
529                                                   DRegister rn,
530                                                   DRegisterLane rm);
531  typedef void (Assembler::*InstructionCondDtQQDx)(Condition cond,
532                                                   DataType dt,
533                                                   QRegister rd,
534                                                   QRegister rn,
535                                                   DRegisterLane rm);
536  typedef void (Assembler::*InstructionCondDtQDDx)(Condition cond,
537                                                   DataType dt,
538                                                   QRegister rd,
539                                                   DRegister rn,
540                                                   DRegisterLane rm);
541  typedef void (Assembler::*InstructionCondRS)(Condition cond,
542                                               Register rt,
543                                               SRegister rn);
544  typedef void (Assembler::*InstructionCondSR)(Condition cond,
545                                               SRegister rn,
546                                               Register rt);
547  typedef void (Assembler::*InstructionCondRRD)(Condition cond,
548                                                Register rt,
549                                                Register rt2,
550                                                DRegister rm);
551  typedef void (Assembler::*InstructionCondDRR)(Condition cond,
552                                                DRegister rm,
553                                                Register rt,
554                                                Register rt2);
555  typedef void (Assembler::*InstructionCondRRSS)(
556      Condition cond, Register rt, Register rt2, SRegister rm, SRegister rm1);
557  typedef void (Assembler::*InstructionCondSSRR)(
558      Condition cond, SRegister rm, SRegister rm1, Register rt, Register rt2);
559  typedef void (Assembler::*InstructionCondDtDxR)(Condition cond,
560                                                  DataType dt,
561                                                  DRegisterLane rd,
562                                                  Register rt);
563  typedef void (Assembler::*InstructionCondDtQQop)(Condition cond,
564                                                   DataType dt,
565                                                   QRegister rd,
566                                                   const QOperand& operand);
567  typedef void (Assembler::*InstructionCondDtRDx)(Condition cond,
568                                                  DataType dt,
569                                                  Register rt,
570                                                  DRegisterLane rn);
571  typedef void (Assembler::*InstructionCondDtQD)(Condition cond,
572                                                 DataType dt,
573                                                 QRegister rd,
574                                                 DRegister rm);
575  typedef void (Assembler::*InstructionCondDtDQ)(Condition cond,
576                                                 DataType dt,
577                                                 DRegister rd,
578                                                 QRegister rm);
579  typedef void (Assembler::*InstructionCondRoaSfp)(Condition cond,
580                                                   RegisterOrAPSR_nzcv rt,
581                                                   SpecialFPRegister spec_reg);
582  typedef void (Assembler::*InstructionCondSfpR)(Condition cond,
583                                                 SpecialFPRegister spec_reg,
584                                                 Register rt);
585  typedef void (Assembler::*InstructionCondDtDDIr)(Condition cond,
586                                                   DataType dt,
587                                                   DRegister rd,
588                                                   DRegister rn,
589                                                   DRegister dm,
590                                                   unsigned index);
591  typedef void (Assembler::*InstructionCondDtQQIr)(Condition cond,
592                                                   DataType dt,
593                                                   QRegister rd,
594                                                   QRegister rn,
595                                                   DRegister dm,
596                                                   unsigned index);
597  typedef void (Assembler::*InstructionCondDtQDIr)(Condition cond,
598                                                   DataType dt,
599                                                   QRegister rd,
600                                                   DRegister rn,
601                                                   DRegister dm,
602                                                   unsigned index);
603  typedef void (Assembler::*InstructionCondDtDrl)(Condition cond,
604                                                  DataType dt,
605                                                  DRegisterList dreglist);
606  typedef void (Assembler::*InstructionCondDtSrl)(Condition cond,
607                                                  DataType dt,
608                                                  SRegisterList sreglist);
609  typedef void (Assembler::*InstructionCondDtDQQop)(Condition cond,
610                                                    DataType dt,
611                                                    DRegister rd,
612                                                    QRegister rm,
613                                                    const QOperand& operand);
614  typedef void (Assembler::*InstructionCondDtQDDop)(Condition cond,
615                                                    DataType dt,
616                                                    QRegister rd,
617                                                    DRegister rm,
618                                                    const DOperand& operand);
619  typedef void (Assembler::*InstructionCondDtDNrlD)(
620      Condition cond,
621      DataType dt,
622      DRegister rd,
623      const NeonRegisterList& nreglist,
624      DRegister rm);
625  virtual void Delegate(InstructionType type,
626                        InstructionCondSizeRROp /*instruction*/,
627                        Condition /*cond*/,
628                        EncodingSize /*size*/,
629                        Register /*rd*/,
630                        Register /*rn*/,
631                        const Operand& /*operand*/) {
632    USE(type);
633    VIXL_ASSERT((type == kAdc) || (type == kAdcs) || (type == kAdd) ||
634                (type == kAdds) || (type == kAnd) || (type == kAnds) ||
635                (type == kAsr) || (type == kAsrs) || (type == kBic) ||
636                (type == kBics) || (type == kEor) || (type == kEors) ||
637                (type == kLsl) || (type == kLsls) || (type == kLsr) ||
638                (type == kLsrs) || (type == kOrr) || (type == kOrrs) ||
639                (type == kRor) || (type == kRors) || (type == kRsb) ||
640                (type == kRsbs) || (type == kSbc) || (type == kSbcs) ||
641                (type == kSub) || (type == kSubs));
642    UnimplementedDelegate(type);
643  }
644  virtual void Delegate(InstructionType type,
645                        InstructionCondROp /*instruction*/,
646                        Condition /*cond*/,
647                        Register /*rd*/,
648                        const Operand& /*operand*/) {
649    USE(type);
650    VIXL_ASSERT((type == kAdd) || (type == kMovt) || (type == kMovw) ||
651                (type == kSub) || (type == kSxtb16) || (type == kTeq) ||
652                (type == kUxtb16));
653    UnimplementedDelegate(type);
654  }
655  virtual void Delegate(InstructionType type,
656                        InstructionROp /*instruction*/,
657                        Register /*rd*/,
658                        const Operand& /*operand*/) {
659    USE(type);
660    VIXL_ASSERT((type == kAdds) || (type == kSubs));
661    UnimplementedDelegate(type);
662  }
663  virtual void Delegate(InstructionType type,
664                        InstructionCondRROp /*instruction*/,
665                        Condition /*cond*/,
666                        Register /*rd*/,
667                        Register /*rn*/,
668                        const Operand& /*operand*/) {
669    USE(type);
670    VIXL_ASSERT((type == kAddw) || (type == kOrn) || (type == kOrns) ||
671                (type == kPkhbt) || (type == kPkhtb) || (type == kRsc) ||
672                (type == kRscs) || (type == kSubw) || (type == kSxtab) ||
673                (type == kSxtab16) || (type == kSxtah) || (type == kUxtab) ||
674                (type == kUxtab16) || (type == kUxtah));
675    UnimplementedDelegate(type);
676  }
677  virtual void Delegate(InstructionType type,
678                        InstructionCondSizeRL /*instruction*/,
679                        Condition /*cond*/,
680                        EncodingSize /*size*/,
681                        Register /*rd*/,
682                        Location* /*location*/) {
683    USE(type);
684    VIXL_ASSERT((type == kAdr) || (type == kLdr));
685    UnimplementedDelegate(type);
686  }
687  virtual void Delegate(InstructionType type,
688                        InstructionCondSizeL /*instruction*/,
689                        Condition /*cond*/,
690                        EncodingSize /*size*/,
691                        Location* /*location*/) {
692    USE(type);
693    VIXL_ASSERT((type == kB));
694    UnimplementedDelegate(type);
695  }
696  virtual void Delegate(InstructionType type,
697                        InstructionCondRII /*instruction*/,
698                        Condition /*cond*/,
699                        Register /*rd*/,
700                        uint32_t /*lsb*/,
701                        uint32_t /*width*/) {
702    USE(type);
703    VIXL_ASSERT((type == kBfc));
704    UnimplementedDelegate(type);
705  }
706  virtual void Delegate(InstructionType type,
707                        InstructionCondRRII /*instruction*/,
708                        Condition /*cond*/,
709                        Register /*rd*/,
710                        Register /*rn*/,
711                        uint32_t /*lsb*/,
712                        uint32_t /*width*/) {
713    USE(type);
714    VIXL_ASSERT((type == kBfi) || (type == kSbfx) || (type == kUbfx));
715    UnimplementedDelegate(type);
716  }
717  virtual void Delegate(InstructionType type,
718                        InstructionCondI /*instruction*/,
719                        Condition /*cond*/,
720                        uint32_t /*imm*/) {
721    USE(type);
722    VIXL_ASSERT((type == kBkpt) || (type == kHlt) || (type == kHvc) ||
723                (type == kSvc));
724    UnimplementedDelegate(type);
725  }
726  virtual void Delegate(InstructionType type,
727                        InstructionCondL /*instruction*/,
728                        Condition /*cond*/,
729                        Location* /*location*/) {
730    USE(type);
731    VIXL_ASSERT((type == kBl) || (type == kBlx) || (type == kPld) ||
732                (type == kPli));
733    UnimplementedDelegate(type);
734  }
735  virtual void Delegate(InstructionType type,
736                        InstructionCondR /*instruction*/,
737                        Condition /*cond*/,
738                        Register /*rm*/) {
739    USE(type);
740    VIXL_ASSERT((type == kBlx) || (type == kBx) || (type == kBxj));
741    UnimplementedDelegate(type);
742  }
743  virtual void Delegate(InstructionType type,
744                        InstructionRL /*instruction*/,
745                        Register /*rn*/,
746                        Location* /*location*/) {
747    USE(type);
748    VIXL_ASSERT((type == kCbnz) || (type == kCbz));
749    UnimplementedDelegate(type);
750  }
751  virtual void Delegate(InstructionType type,
752                        InstructionCond /*instruction*/,
753                        Condition /*cond*/) {
754    USE(type);
755    VIXL_ASSERT((type == kClrex));
756    UnimplementedDelegate(type);
757  }
758  virtual void Delegate(InstructionType type,
759                        InstructionCondRR /*instruction*/,
760                        Condition /*cond*/,
761                        Register /*rd*/,
762                        Register /*rm*/) {
763    USE(type);
764    VIXL_ASSERT((type == kClz) || (type == kRbit) || (type == kRrx) ||
765                (type == kRrxs));
766    UnimplementedDelegate(type);
767  }
768  virtual void Delegate(InstructionType type,
769                        InstructionCondSizeROp /*instruction*/,
770                        Condition /*cond*/,
771                        EncodingSize /*size*/,
772                        Register /*rn*/,
773                        const Operand& /*operand*/) {
774    USE(type);
775    VIXL_ASSERT((type == kCmn) || (type == kCmp) || (type == kMov) ||
776                (type == kMovs) || (type == kMvn) || (type == kMvns) ||
777                (type == kSxtb) || (type == kSxth) || (type == kTst) ||
778                (type == kUxtb) || (type == kUxth));
779    UnimplementedDelegate(type);
780  }
781  virtual void Delegate(InstructionType type,
782                        InstructionCondRRR /*instruction*/,
783                        Condition /*cond*/,
784                        Register /*rd*/,
785                        Register /*rn*/,
786                        Register /*rm*/) {
787    USE(type);
788    VIXL_ASSERT((type == kCrc32b) || (type == kCrc32cb) || (type == kCrc32ch) ||
789                (type == kCrc32cw) || (type == kCrc32h) || (type == kCrc32w) ||
790                (type == kMuls) || (type == kQadd) || (type == kQadd16) ||
791                (type == kQadd8) || (type == kQasx) || (type == kQdadd) ||
792                (type == kQdsub) || (type == kQsax) || (type == kQsub) ||
793                (type == kQsub16) || (type == kQsub8) || (type == kSadd16) ||
794                (type == kSadd8) || (type == kSasx) || (type == kSdiv) ||
795                (type == kSel) || (type == kShadd16) || (type == kShadd8) ||
796                (type == kShasx) || (type == kShsax) || (type == kShsub16) ||
797                (type == kShsub8) || (type == kSmmul) || (type == kSmmulr) ||
798                (type == kSmuad) || (type == kSmuadx) || (type == kSmulbb) ||
799                (type == kSmulbt) || (type == kSmultb) || (type == kSmultt) ||
800                (type == kSmulwb) || (type == kSmulwt) || (type == kSmusd) ||
801                (type == kSmusdx) || (type == kSsax) || (type == kSsub16) ||
802                (type == kSsub8) || (type == kUadd16) || (type == kUadd8) ||
803                (type == kUasx) || (type == kUdiv) || (type == kUhadd16) ||
804                (type == kUhadd8) || (type == kUhasx) || (type == kUhsax) ||
805                (type == kUhsub16) || (type == kUhsub8) || (type == kUqadd16) ||
806                (type == kUqadd8) || (type == kUqasx) || (type == kUqsax) ||
807                (type == kUqsub16) || (type == kUqsub8) || (type == kUsad8) ||
808                (type == kUsax) || (type == kUsub16) || (type == kUsub8));
809    UnimplementedDelegate(type);
810  }
811  virtual void Delegate(InstructionType type,
812                        InstructionCondBa /*instruction*/,
813                        Condition /*cond*/,
814                        MemoryBarrier /*option*/) {
815    USE(type);
816    VIXL_ASSERT((type == kDmb) || (type == kDsb) || (type == kIsb));
817    UnimplementedDelegate(type);
818  }
819  virtual void Delegate(InstructionType type,
820                        InstructionCondRwbDrl /*instruction*/,
821                        Condition /*cond*/,
822                        Register /*rn*/,
823                        WriteBack /*write_back*/,
824                        DRegisterList /*dreglist*/) {
825    USE(type);
826    VIXL_ASSERT((type == kFldmdbx) || (type == kFldmiax) ||
827                (type == kFstmdbx) || (type == kFstmiax));
828    UnimplementedDelegate(type);
829  }
830  virtual void DelegateIt(Condition /*cond*/, uint16_t /*mask*/) {
831    UnimplementedDelegate(kIt);
832  }
833  virtual void Delegate(InstructionType type,
834                        InstructionCondRMop /*instruction*/,
835                        Condition /*cond*/,
836                        Register /*rt*/,
837                        const MemOperand& /*operand*/) {
838    USE(type);
839    VIXL_ASSERT((type == kLda) || (type == kLdab) || (type == kLdaex) ||
840                (type == kLdaexb) || (type == kLdaexh) || (type == kLdah) ||
841                (type == kLdrex) || (type == kLdrexb) || (type == kLdrexh) ||
842                (type == kStl) || (type == kStlb) || (type == kStlh));
843    UnimplementedDelegate(type);
844  }
845  virtual void Delegate(InstructionType type,
846                        InstructionCondRRMop /*instruction*/,
847                        Condition /*cond*/,
848                        Register /*rt*/,
849                        Register /*rt2*/,
850                        const MemOperand& /*operand*/) {
851    USE(type);
852    VIXL_ASSERT((type == kLdaexd) || (type == kLdrd) || (type == kLdrexd) ||
853                (type == kStlex) || (type == kStlexb) || (type == kStlexh) ||
854                (type == kStrd) || (type == kStrex) || (type == kStrexb) ||
855                (type == kStrexh));
856    UnimplementedDelegate(type);
857  }
858  virtual void Delegate(InstructionType type,
859                        InstructionCondSizeRwbRl /*instruction*/,
860                        Condition /*cond*/,
861                        EncodingSize /*size*/,
862                        Register /*rn*/,
863                        WriteBack /*write_back*/,
864                        RegisterList /*registers*/) {
865    USE(type);
866    VIXL_ASSERT((type == kLdm) || (type == kLdmfd) || (type == kStm) ||
867                (type == kStmdb) || (type == kStmea));
868    UnimplementedDelegate(type);
869  }
870  virtual void Delegate(InstructionType type,
871                        InstructionCondRwbRl /*instruction*/,
872                        Condition /*cond*/,
873                        Register /*rn*/,
874                        WriteBack /*write_back*/,
875                        RegisterList /*registers*/) {
876    USE(type);
877    VIXL_ASSERT((type == kLdmda) || (type == kLdmdb) || (type == kLdmea) ||
878                (type == kLdmed) || (type == kLdmfa) || (type == kLdmib) ||
879                (type == kStmda) || (type == kStmed) || (type == kStmfa) ||
880                (type == kStmfd) || (type == kStmib));
881    UnimplementedDelegate(type);
882  }
883  virtual void Delegate(InstructionType type,
884                        InstructionCondSizeRMop /*instruction*/,
885                        Condition /*cond*/,
886                        EncodingSize /*size*/,
887                        Register /*rt*/,
888                        const MemOperand& /*operand*/) {
889    USE(type);
890    VIXL_ASSERT((type == kLdr) || (type == kLdrb) || (type == kLdrh) ||
891                (type == kLdrsb) || (type == kLdrsh) || (type == kStr) ||
892                (type == kStrb) || (type == kStrh));
893    UnimplementedDelegate(type);
894  }
895  virtual void Delegate(InstructionType type,
896                        InstructionCondRL /*instruction*/,
897                        Condition /*cond*/,
898                        Register /*rt*/,
899                        Location* /*location*/) {
900    USE(type);
901    VIXL_ASSERT((type == kLdrb) || (type == kLdrh) || (type == kLdrsb) ||
902                (type == kLdrsh));
903    UnimplementedDelegate(type);
904  }
905  virtual void Delegate(InstructionType type,
906                        InstructionCondRRL /*instruction*/,
907                        Condition /*cond*/,
908                        Register /*rt*/,
909                        Register /*rt2*/,
910                        Location* /*location*/) {
911    USE(type);
912    VIXL_ASSERT((type == kLdrd));
913    UnimplementedDelegate(type);
914  }
915  virtual void Delegate(InstructionType type,
916                        InstructionCondRRRR /*instruction*/,
917                        Condition /*cond*/,
918                        Register /*rd*/,
919                        Register /*rn*/,
920                        Register /*rm*/,
921                        Register /*ra*/) {
922    USE(type);
923    VIXL_ASSERT((type == kMla) || (type == kMlas) || (type == kMls) ||
924                (type == kSmlabb) || (type == kSmlabt) || (type == kSmlad) ||
925                (type == kSmladx) || (type == kSmlal) || (type == kSmlalbb) ||
926                (type == kSmlalbt) || (type == kSmlald) || (type == kSmlaldx) ||
927                (type == kSmlals) || (type == kSmlaltb) || (type == kSmlaltt) ||
928                (type == kSmlatb) || (type == kSmlatt) || (type == kSmlawb) ||
929                (type == kSmlawt) || (type == kSmlsd) || (type == kSmlsdx) ||
930                (type == kSmlsld) || (type == kSmlsldx) || (type == kSmmla) ||
931                (type == kSmmlar) || (type == kSmmls) || (type == kSmmlsr) ||
932                (type == kSmull) || (type == kSmulls) || (type == kUmaal) ||
933                (type == kUmlal) || (type == kUmlals) || (type == kUmull) ||
934                (type == kUmulls) || (type == kUsada8));
935    UnimplementedDelegate(type);
936  }
937  virtual void Delegate(InstructionType type,
938                        InstructionCondRSr /*instruction*/,
939                        Condition /*cond*/,
940                        Register /*rd*/,
941                        SpecialRegister /*spec_reg*/) {
942    USE(type);
943    VIXL_ASSERT((type == kMrs));
944    UnimplementedDelegate(type);
945  }
946  virtual void Delegate(InstructionType type,
947                        InstructionCondMsrOp /*instruction*/,
948                        Condition /*cond*/,
949                        MaskedSpecialRegister /*spec_reg*/,
950                        const Operand& /*operand*/) {
951    USE(type);
952    VIXL_ASSERT((type == kMsr));
953    UnimplementedDelegate(type);
954  }
955  virtual void Delegate(InstructionType type,
956                        InstructionCondSizeRRR /*instruction*/,
957                        Condition /*cond*/,
958                        EncodingSize /*size*/,
959                        Register /*rd*/,
960                        Register /*rn*/,
961                        Register /*rm*/) {
962    USE(type);
963    VIXL_ASSERT((type == kMul));
964    UnimplementedDelegate(type);
965  }
966  virtual void Delegate(InstructionType type,
967                        InstructionCondSize /*instruction*/,
968                        Condition /*cond*/,
969                        EncodingSize /*size*/) {
970    USE(type);
971    VIXL_ASSERT((type == kNop) || (type == kYield));
972    UnimplementedDelegate(type);
973  }
974  virtual void Delegate(InstructionType type,
975                        InstructionCondMop /*instruction*/,
976                        Condition /*cond*/,
977                        const MemOperand& /*operand*/) {
978    USE(type);
979    VIXL_ASSERT((type == kPld) || (type == kPldw) || (type == kPli));
980    UnimplementedDelegate(type);
981  }
982  virtual void Delegate(InstructionType type,
983                        InstructionCondSizeRl /*instruction*/,
984                        Condition /*cond*/,
985                        EncodingSize /*size*/,
986                        RegisterList /*registers*/) {
987    USE(type);
988    VIXL_ASSERT((type == kPop) || (type == kPush));
989    UnimplementedDelegate(type);
990  }
991  virtual void Delegate(InstructionType type,
992                        InstructionCondSizeOrl /*instruction*/,
993                        Condition /*cond*/,
994                        EncodingSize /*size*/,
995                        Register /*rt*/) {
996    USE(type);
997    VIXL_ASSERT((type == kPop) || (type == kPush));
998    UnimplementedDelegate(type);
999  }
1000  virtual void Delegate(InstructionType type,
1001                        InstructionCondSizeRR /*instruction*/,
1002                        Condition /*cond*/,
1003                        EncodingSize /*size*/,
1004                        Register /*rd*/,
1005                        Register /*rm*/) {
1006    USE(type);
1007    VIXL_ASSERT((type == kRev) || (type == kRev16) || (type == kRevsh));
1008    UnimplementedDelegate(type);
1009  }
1010  virtual void Delegate(InstructionType type,
1011                        InstructionDtQQQ /*instruction*/,
1012                        DataType /*dt*/,
1013                        QRegister /*rd*/,
1014                        QRegister /*rn*/,
1015                        QRegister /*rm*/) {
1016    USE(type);
1017    VIXL_ASSERT((type == kVmaxnm) || (type == kVminnm));
1018    UnimplementedDelegate(type);
1019  }
1020  virtual void Delegate(InstructionType type,
1021                        InstructionCondRIOp /*instruction*/,
1022                        Condition /*cond*/,
1023                        Register /*rd*/,
1024                        uint32_t /*imm*/,
1025                        const Operand& /*operand*/) {
1026    USE(type);
1027    VIXL_ASSERT((type == kSsat) || (type == kUsat));
1028    UnimplementedDelegate(type);
1029  }
1030  virtual void Delegate(InstructionType type,
1031                        InstructionCondRIR /*instruction*/,
1032                        Condition /*cond*/,
1033                        Register /*rd*/,
1034                        uint32_t /*imm*/,
1035                        Register /*rn*/) {
1036    USE(type);
1037    VIXL_ASSERT((type == kSsat16) || (type == kUsat16));
1038    UnimplementedDelegate(type);
1039  }
1040  virtual void Delegate(InstructionType type,
1041                        InstructionCondRRRMop /*instruction*/,
1042                        Condition /*cond*/,
1043                        Register /*rd*/,
1044                        Register /*rt*/,
1045                        Register /*rt2*/,
1046                        const MemOperand& /*operand*/) {
1047    USE(type);
1048    VIXL_ASSERT((type == kStlexd) || (type == kStrexd));
1049    UnimplementedDelegate(type);
1050  }
1051  virtual void Delegate(InstructionType type,
1052                        InstructionCondSizeI /*instruction*/,
1053                        Condition /*cond*/,
1054                        EncodingSize /*size*/,
1055                        uint32_t /*imm*/) {
1056    USE(type);
1057    VIXL_ASSERT((type == kUdf));
1058    UnimplementedDelegate(type);
1059  }
1060  virtual void Delegate(InstructionType type,
1061                        InstructionCondDtDDD /*instruction*/,
1062                        Condition /*cond*/,
1063                        DataType /*dt*/,
1064                        DRegister /*rd*/,
1065                        DRegister /*rn*/,
1066                        DRegister /*rm*/) {
1067    USE(type);
1068    VIXL_ASSERT((type == kVaba) || (type == kVabd) || (type == kVacge) ||
1069                (type == kVacgt) || (type == kVacle) || (type == kVaclt) ||
1070                (type == kVadd) || (type == kVbif) || (type == kVbit) ||
1071                (type == kVbsl) || (type == kVceq) || (type == kVcge) ||
1072                (type == kVcgt) || (type == kVcle) || (type == kVclt) ||
1073                (type == kVdiv) || (type == kVeor) || (type == kVfma) ||
1074                (type == kVfms) || (type == kVfnma) || (type == kVfnms) ||
1075                (type == kVhadd) || (type == kVhsub) || (type == kVmax) ||
1076                (type == kVmin) || (type == kVmla) || (type == kVmls) ||
1077                (type == kVmul) || (type == kVnmla) || (type == kVnmls) ||
1078                (type == kVnmul) || (type == kVpadd) || (type == kVpmax) ||
1079                (type == kVpmin) || (type == kVqadd) || (type == kVqdmulh) ||
1080                (type == kVqrdmulh) || (type == kVqrshl) || (type == kVqsub) ||
1081                (type == kVrecps) || (type == kVrhadd) || (type == kVrshl) ||
1082                (type == kVrsqrts) || (type == kVsub) || (type == kVtst));
1083    UnimplementedDelegate(type);
1084  }
1085  virtual void Delegate(InstructionType type,
1086                        InstructionCondDtQQQ /*instruction*/,
1087                        Condition /*cond*/,
1088                        DataType /*dt*/,
1089                        QRegister /*rd*/,
1090                        QRegister /*rn*/,
1091                        QRegister /*rm*/) {
1092    USE(type);
1093    VIXL_ASSERT((type == kVaba) || (type == kVabd) || (type == kVacge) ||
1094                (type == kVacgt) || (type == kVacle) || (type == kVaclt) ||
1095                (type == kVadd) || (type == kVbif) || (type == kVbit) ||
1096                (type == kVbsl) || (type == kVceq) || (type == kVcge) ||
1097                (type == kVcgt) || (type == kVcle) || (type == kVclt) ||
1098                (type == kVeor) || (type == kVfma) || (type == kVfms) ||
1099                (type == kVhadd) || (type == kVhsub) || (type == kVmax) ||
1100                (type == kVmin) || (type == kVmla) || (type == kVmls) ||
1101                (type == kVmul) || (type == kVqadd) || (type == kVqdmulh) ||
1102                (type == kVqrdmulh) || (type == kVqrshl) || (type == kVqsub) ||
1103                (type == kVrecps) || (type == kVrhadd) || (type == kVrshl) ||
1104                (type == kVrsqrts) || (type == kVsub) || (type == kVtst));
1105    UnimplementedDelegate(type);
1106  }
1107  virtual void Delegate(InstructionType type,
1108                        InstructionCondDtQDD /*instruction*/,
1109                        Condition /*cond*/,
1110                        DataType /*dt*/,
1111                        QRegister /*rd*/,
1112                        DRegister /*rn*/,
1113                        DRegister /*rm*/) {
1114    USE(type);
1115    VIXL_ASSERT((type == kVabal) || (type == kVabdl) || (type == kVaddl) ||
1116                (type == kVmlal) || (type == kVmlsl) || (type == kVmull) ||
1117                (type == kVqdmlal) || (type == kVqdmlsl) ||
1118                (type == kVqdmull) || (type == kVsubl));
1119    UnimplementedDelegate(type);
1120  }
1121  virtual void Delegate(InstructionType type,
1122                        InstructionCondDtDD /*instruction*/,
1123                        Condition /*cond*/,
1124                        DataType /*dt*/,
1125                        DRegister /*rd*/,
1126                        DRegister /*rm*/) {
1127    USE(type);
1128    VIXL_ASSERT((type == kVabs) || (type == kVcls) || (type == kVclz) ||
1129                (type == kVcnt) || (type == kVneg) || (type == kVpadal) ||
1130                (type == kVpaddl) || (type == kVqabs) || (type == kVqneg) ||
1131                (type == kVrecpe) || (type == kVrev16) || (type == kVrev32) ||
1132                (type == kVrev64) || (type == kVrsqrte) || (type == kVsqrt) ||
1133                (type == kVswp) || (type == kVtrn) || (type == kVuzp) ||
1134                (type == kVzip));
1135    UnimplementedDelegate(type);
1136  }
1137  virtual void Delegate(InstructionType type,
1138                        InstructionCondDtQQ /*instruction*/,
1139                        Condition /*cond*/,
1140                        DataType /*dt*/,
1141                        QRegister /*rd*/,
1142                        QRegister /*rm*/) {
1143    USE(type);
1144    VIXL_ASSERT((type == kVabs) || (type == kVcls) || (type == kVclz) ||
1145                (type == kVcnt) || (type == kVneg) || (type == kVpadal) ||
1146                (type == kVpaddl) || (type == kVqabs) || (type == kVqneg) ||
1147                (type == kVrecpe) || (type == kVrev16) || (type == kVrev32) ||
1148                (type == kVrev64) || (type == kVrsqrte) || (type == kVswp) ||
1149                (type == kVtrn) || (type == kVuzp) || (type == kVzip));
1150    UnimplementedDelegate(type);
1151  }
1152  virtual void Delegate(InstructionType type,
1153                        InstructionCondDtSS /*instruction*/,
1154                        Condition /*cond*/,
1155                        DataType /*dt*/,
1156                        SRegister /*rd*/,
1157                        SRegister /*rm*/) {
1158    USE(type);
1159    VIXL_ASSERT((type == kVabs) || (type == kVneg) || (type == kVsqrt));
1160    UnimplementedDelegate(type);
1161  }
1162  virtual void Delegate(InstructionType type,
1163                        InstructionCondDtSSS /*instruction*/,
1164                        Condition /*cond*/,
1165                        DataType /*dt*/,
1166                        SRegister /*rd*/,
1167                        SRegister /*rn*/,
1168                        SRegister /*rm*/) {
1169    USE(type);
1170    VIXL_ASSERT((type == kVadd) || (type == kVdiv) || (type == kVfma) ||
1171                (type == kVfms) || (type == kVfnma) || (type == kVfnms) ||
1172                (type == kVmla) || (type == kVmls) || (type == kVmul) ||
1173                (type == kVnmla) || (type == kVnmls) || (type == kVnmul) ||
1174                (type == kVsub));
1175    UnimplementedDelegate(type);
1176  }
1177  virtual void Delegate(InstructionType type,
1178                        InstructionCondDtDQQ /*instruction*/,
1179                        Condition /*cond*/,
1180                        DataType /*dt*/,
1181                        DRegister /*rd*/,
1182                        QRegister /*rn*/,
1183                        QRegister /*rm*/) {
1184    USE(type);
1185    VIXL_ASSERT((type == kVaddhn) || (type == kVraddhn) || (type == kVrsubhn) ||
1186                (type == kVsubhn));
1187    UnimplementedDelegate(type);
1188  }
1189  virtual void Delegate(InstructionType type,
1190                        InstructionCondDtQQD /*instruction*/,
1191                        Condition /*cond*/,
1192                        DataType /*dt*/,
1193                        QRegister /*rd*/,
1194                        QRegister /*rn*/,
1195                        DRegister /*rm*/) {
1196    USE(type);
1197    VIXL_ASSERT((type == kVaddw) || (type == kVsubw));
1198    UnimplementedDelegate(type);
1199  }
1200  virtual void Delegate(InstructionType type,
1201                        InstructionCondDtDDDop /*instruction*/,
1202                        Condition /*cond*/,
1203                        DataType /*dt*/,
1204                        DRegister /*rd*/,
1205                        DRegister /*rn*/,
1206                        const DOperand& /*operand*/) {
1207    USE(type);
1208    VIXL_ASSERT((type == kVand) || (type == kVbic) || (type == kVceq) ||
1209                (type == kVcge) || (type == kVcgt) || (type == kVcle) ||
1210                (type == kVclt) || (type == kVorn) || (type == kVorr) ||
1211                (type == kVqshl) || (type == kVqshlu) || (type == kVrshr) ||
1212                (type == kVrsra) || (type == kVshl) || (type == kVshr) ||
1213                (type == kVsli) || (type == kVsra) || (type == kVsri));
1214    UnimplementedDelegate(type);
1215  }
1216  virtual void Delegate(InstructionType type,
1217                        InstructionCondDtQQQop /*instruction*/,
1218                        Condition /*cond*/,
1219                        DataType /*dt*/,
1220                        QRegister /*rd*/,
1221                        QRegister /*rn*/,
1222                        const QOperand& /*operand*/) {
1223    USE(type);
1224    VIXL_ASSERT((type == kVand) || (type == kVbic) || (type == kVceq) ||
1225                (type == kVcge) || (type == kVcgt) || (type == kVcle) ||
1226                (type == kVclt) || (type == kVorn) || (type == kVorr) ||
1227                (type == kVqshl) || (type == kVqshlu) || (type == kVrshr) ||
1228                (type == kVrsra) || (type == kVshl) || (type == kVshr) ||
1229                (type == kVsli) || (type == kVsra) || (type == kVsri));
1230    UnimplementedDelegate(type);
1231  }
1232  virtual void Delegate(InstructionType type,
1233                        InstructionCondDtSSop /*instruction*/,
1234                        Condition /*cond*/,
1235                        DataType /*dt*/,
1236                        SRegister /*rd*/,
1237                        const SOperand& /*operand*/) {
1238    USE(type);
1239    VIXL_ASSERT((type == kVcmp) || (type == kVcmpe) || (type == kVmov));
1240    UnimplementedDelegate(type);
1241  }
1242  virtual void Delegate(InstructionType type,
1243                        InstructionCondDtDDop /*instruction*/,
1244                        Condition /*cond*/,
1245                        DataType /*dt*/,
1246                        DRegister /*rd*/,
1247                        const DOperand& /*operand*/) {
1248    USE(type);
1249    VIXL_ASSERT((type == kVcmp) || (type == kVcmpe) || (type == kVmov) ||
1250                (type == kVmvn));
1251    UnimplementedDelegate(type);
1252  }
1253  virtual void Delegate(InstructionType type,
1254                        InstructionCondDtDtDS /*instruction*/,
1255                        Condition /*cond*/,
1256                        DataType /*dt1*/,
1257                        DataType /*dt2*/,
1258                        DRegister /*rd*/,
1259                        SRegister /*rm*/) {
1260    USE(type);
1261    VIXL_ASSERT((type == kVcvt) || (type == kVcvtb) || (type == kVcvtt));
1262    UnimplementedDelegate(type);
1263  }
1264  virtual void Delegate(InstructionType type,
1265                        InstructionCondDtDtSD /*instruction*/,
1266                        Condition /*cond*/,
1267                        DataType /*dt1*/,
1268                        DataType /*dt2*/,
1269                        SRegister /*rd*/,
1270                        DRegister /*rm*/) {
1271    USE(type);
1272    VIXL_ASSERT((type == kVcvt) || (type == kVcvtb) || (type == kVcvtr) ||
1273                (type == kVcvtt));
1274    UnimplementedDelegate(type);
1275  }
1276  virtual void Delegate(InstructionType type,
1277                        InstructionCondDtDtDDSi /*instruction*/,
1278                        Condition /*cond*/,
1279                        DataType /*dt1*/,
1280                        DataType /*dt2*/,
1281                        DRegister /*rd*/,
1282                        DRegister /*rm*/,
1283                        int32_t /*fbits*/) {
1284    USE(type);
1285    VIXL_ASSERT((type == kVcvt));
1286    UnimplementedDelegate(type);
1287  }
1288  virtual void Delegate(InstructionType type,
1289                        InstructionCondDtDtQQSi /*instruction*/,
1290                        Condition /*cond*/,
1291                        DataType /*dt1*/,
1292                        DataType /*dt2*/,
1293                        QRegister /*rd*/,
1294                        QRegister /*rm*/,
1295                        int32_t /*fbits*/) {
1296    USE(type);
1297    VIXL_ASSERT((type == kVcvt));
1298    UnimplementedDelegate(type);
1299  }
1300  virtual void Delegate(InstructionType type,
1301                        InstructionCondDtDtSSSi /*instruction*/,
1302                        Condition /*cond*/,
1303                        DataType /*dt1*/,
1304                        DataType /*dt2*/,
1305                        SRegister /*rd*/,
1306                        SRegister /*rm*/,
1307                        int32_t /*fbits*/) {
1308    USE(type);
1309    VIXL_ASSERT((type == kVcvt));
1310    UnimplementedDelegate(type);
1311  }
1312  virtual void Delegate(InstructionType type,
1313                        InstructionCondDtDtDD /*instruction*/,
1314                        Condition /*cond*/,
1315                        DataType /*dt1*/,
1316                        DataType /*dt2*/,
1317                        DRegister /*rd*/,
1318                        DRegister /*rm*/) {
1319    USE(type);
1320    VIXL_ASSERT((type == kVcvt) || (type == kVrintr) || (type == kVrintx) ||
1321                (type == kVrintz));
1322    UnimplementedDelegate(type);
1323  }
1324  virtual void Delegate(InstructionType type,
1325                        InstructionCondDtDtQQ /*instruction*/,
1326                        Condition /*cond*/,
1327                        DataType /*dt1*/,
1328                        DataType /*dt2*/,
1329                        QRegister /*rd*/,
1330                        QRegister /*rm*/) {
1331    USE(type);
1332    VIXL_ASSERT((type == kVcvt));
1333    UnimplementedDelegate(type);
1334  }
1335  virtual void Delegate(InstructionType type,
1336                        InstructionCondDtDtDQ /*instruction*/,
1337                        Condition /*cond*/,
1338                        DataType /*dt1*/,
1339                        DataType /*dt2*/,
1340                        DRegister /*rd*/,
1341                        QRegister /*rm*/) {
1342    USE(type);
1343    VIXL_ASSERT((type == kVcvt));
1344    UnimplementedDelegate(type);
1345  }
1346  virtual void Delegate(InstructionType type,
1347                        InstructionCondDtDtQD /*instruction*/,
1348                        Condition /*cond*/,
1349                        DataType /*dt1*/,
1350                        DataType /*dt2*/,
1351                        QRegister /*rd*/,
1352                        DRegister /*rm*/) {
1353    USE(type);
1354    VIXL_ASSERT((type == kVcvt));
1355    UnimplementedDelegate(type);
1356  }
1357  virtual void Delegate(InstructionType type,
1358                        InstructionCondDtDtSS /*instruction*/,
1359                        Condition /*cond*/,
1360                        DataType /*dt1*/,
1361                        DataType /*dt2*/,
1362                        SRegister /*rd*/,
1363                        SRegister /*rm*/) {
1364    USE(type);
1365    VIXL_ASSERT((type == kVcvt) || (type == kVcvtb) || (type == kVcvtr) ||
1366                (type == kVcvtt) || (type == kVrintr) || (type == kVrintx) ||
1367                (type == kVrintz));
1368    UnimplementedDelegate(type);
1369  }
1370  virtual void Delegate(InstructionType type,
1371                        InstructionDtDtDD /*instruction*/,
1372                        DataType /*dt1*/,
1373                        DataType /*dt2*/,
1374                        DRegister /*rd*/,
1375                        DRegister /*rm*/) {
1376    USE(type);
1377    VIXL_ASSERT((type == kVcvta) || (type == kVcvtm) || (type == kVcvtn) ||
1378                (type == kVcvtp) || (type == kVrinta) || (type == kVrintm) ||
1379                (type == kVrintn) || (type == kVrintp));
1380    UnimplementedDelegate(type);
1381  }
1382  virtual void Delegate(InstructionType type,
1383                        InstructionDtDtQQ /*instruction*/,
1384                        DataType /*dt1*/,
1385                        DataType /*dt2*/,
1386                        QRegister /*rd*/,
1387                        QRegister /*rm*/) {
1388    USE(type);
1389    VIXL_ASSERT((type == kVcvta) || (type == kVcvtm) || (type == kVcvtn) ||
1390                (type == kVcvtp) || (type == kVrinta) || (type == kVrintm) ||
1391                (type == kVrintn) || (type == kVrintp) || (type == kVrintx) ||
1392                (type == kVrintz));
1393    UnimplementedDelegate(type);
1394  }
1395  virtual void Delegate(InstructionType type,
1396                        InstructionDtDtSS /*instruction*/,
1397                        DataType /*dt1*/,
1398                        DataType /*dt2*/,
1399                        SRegister /*rd*/,
1400                        SRegister /*rm*/) {
1401    USE(type);
1402    VIXL_ASSERT((type == kVcvta) || (type == kVcvtm) || (type == kVcvtn) ||
1403                (type == kVcvtp) || (type == kVrinta) || (type == kVrintm) ||
1404                (type == kVrintn) || (type == kVrintp));
1405    UnimplementedDelegate(type);
1406  }
1407  virtual void Delegate(InstructionType type,
1408                        InstructionDtDtSD /*instruction*/,
1409                        DataType /*dt1*/,
1410                        DataType /*dt2*/,
1411                        SRegister /*rd*/,
1412                        DRegister /*rm*/) {
1413    USE(type);
1414    VIXL_ASSERT((type == kVcvta) || (type == kVcvtm) || (type == kVcvtn) ||
1415                (type == kVcvtp));
1416    UnimplementedDelegate(type);
1417  }
1418  virtual void Delegate(InstructionType type,
1419                        InstructionCondDtQR /*instruction*/,
1420                        Condition /*cond*/,
1421                        DataType /*dt*/,
1422                        QRegister /*rd*/,
1423                        Register /*rt*/) {
1424    USE(type);
1425    VIXL_ASSERT((type == kVdup));
1426    UnimplementedDelegate(type);
1427  }
1428  virtual void Delegate(InstructionType type,
1429                        InstructionCondDtDR /*instruction*/,
1430                        Condition /*cond*/,
1431                        DataType /*dt*/,
1432                        DRegister /*rd*/,
1433                        Register /*rt*/) {
1434    USE(type);
1435    VIXL_ASSERT((type == kVdup));
1436    UnimplementedDelegate(type);
1437  }
1438  virtual void Delegate(InstructionType type,
1439                        InstructionCondDtDDx /*instruction*/,
1440                        Condition /*cond*/,
1441                        DataType /*dt*/,
1442                        DRegister /*rd*/,
1443                        DRegisterLane /*rm*/) {
1444    USE(type);
1445    VIXL_ASSERT((type == kVdup));
1446    UnimplementedDelegate(type);
1447  }
1448  virtual void Delegate(InstructionType type,
1449                        InstructionCondDtQDx /*instruction*/,
1450                        Condition /*cond*/,
1451                        DataType /*dt*/,
1452                        QRegister /*rd*/,
1453                        DRegisterLane /*rm*/) {
1454    USE(type);
1455    VIXL_ASSERT((type == kVdup));
1456    UnimplementedDelegate(type);
1457  }
1458  virtual void Delegate(InstructionType type,
1459                        InstructionCondDtDDDDop /*instruction*/,
1460                        Condition /*cond*/,
1461                        DataType /*dt*/,
1462                        DRegister /*rd*/,
1463                        DRegister /*rn*/,
1464                        DRegister /*rm*/,
1465                        const DOperand& /*operand*/) {
1466    USE(type);
1467    VIXL_ASSERT((type == kVext));
1468    UnimplementedDelegate(type);
1469  }
1470  virtual void Delegate(InstructionType type,
1471                        InstructionCondDtQQQQop /*instruction*/,
1472                        Condition /*cond*/,
1473                        DataType /*dt*/,
1474                        QRegister /*rd*/,
1475                        QRegister /*rn*/,
1476                        QRegister /*rm*/,
1477                        const QOperand& /*operand*/) {
1478    USE(type);
1479    VIXL_ASSERT((type == kVext));
1480    UnimplementedDelegate(type);
1481  }
1482  virtual void Delegate(InstructionType type,
1483                        InstructionCondDtNrlAmop /*instruction*/,
1484                        Condition /*cond*/,
1485                        DataType /*dt*/,
1486                        const NeonRegisterList& /*nreglist*/,
1487                        const AlignedMemOperand& /*operand*/) {
1488    USE(type);
1489    VIXL_ASSERT((type == kVld1) || (type == kVld2) || (type == kVld3) ||
1490                (type == kVld4) || (type == kVst1) || (type == kVst2) ||
1491                (type == kVst3) || (type == kVst4));
1492    UnimplementedDelegate(type);
1493  }
1494  virtual void Delegate(InstructionType type,
1495                        InstructionCondDtNrlMop /*instruction*/,
1496                        Condition /*cond*/,
1497                        DataType /*dt*/,
1498                        const NeonRegisterList& /*nreglist*/,
1499                        const MemOperand& /*operand*/) {
1500    USE(type);
1501    VIXL_ASSERT((type == kVld3) || (type == kVst3));
1502    UnimplementedDelegate(type);
1503  }
1504  virtual void Delegate(InstructionType type,
1505                        InstructionCondDtRwbDrl /*instruction*/,
1506                        Condition /*cond*/,
1507                        DataType /*dt*/,
1508                        Register /*rn*/,
1509                        WriteBack /*write_back*/,
1510                        DRegisterList /*dreglist*/) {
1511    USE(type);
1512    VIXL_ASSERT((type == kVldm) || (type == kVldmdb) || (type == kVldmia) ||
1513                (type == kVstm) || (type == kVstmdb) || (type == kVstmia));
1514    UnimplementedDelegate(type);
1515  }
1516  virtual void Delegate(InstructionType type,
1517                        InstructionCondDtRwbSrl /*instruction*/,
1518                        Condition /*cond*/,
1519                        DataType /*dt*/,
1520                        Register /*rn*/,
1521                        WriteBack /*write_back*/,
1522                        SRegisterList /*sreglist*/) {
1523    USE(type);
1524    VIXL_ASSERT((type == kVldm) || (type == kVldmdb) || (type == kVldmia) ||
1525                (type == kVstm) || (type == kVstmdb) || (type == kVstmia));
1526    UnimplementedDelegate(type);
1527  }
1528  virtual void Delegate(InstructionType type,
1529                        InstructionCondDtDL /*instruction*/,
1530                        Condition /*cond*/,
1531                        DataType /*dt*/,
1532                        DRegister /*rd*/,
1533                        Location* /*location*/) {
1534    USE(type);
1535    VIXL_ASSERT((type == kVldr));
1536    UnimplementedDelegate(type);
1537  }
1538  virtual void Delegate(InstructionType type,
1539                        InstructionCondDtDMop /*instruction*/,
1540                        Condition /*cond*/,
1541                        DataType /*dt*/,
1542                        DRegister /*rd*/,
1543                        const MemOperand& /*operand*/) {
1544    USE(type);
1545    VIXL_ASSERT((type == kVldr) || (type == kVstr));
1546    UnimplementedDelegate(type);
1547  }
1548  virtual void Delegate(InstructionType type,
1549                        InstructionCondDtSL /*instruction*/,
1550                        Condition /*cond*/,
1551                        DataType /*dt*/,
1552                        SRegister /*rd*/,
1553                        Location* /*location*/) {
1554    USE(type);
1555    VIXL_ASSERT((type == kVldr));
1556    UnimplementedDelegate(type);
1557  }
1558  virtual void Delegate(InstructionType type,
1559                        InstructionCondDtSMop /*instruction*/,
1560                        Condition /*cond*/,
1561                        DataType /*dt*/,
1562                        SRegister /*rd*/,
1563                        const MemOperand& /*operand*/) {
1564    USE(type);
1565    VIXL_ASSERT((type == kVldr) || (type == kVstr));
1566    UnimplementedDelegate(type);
1567  }
1568  virtual void Delegate(InstructionType type,
1569                        InstructionDtDDD /*instruction*/,
1570                        DataType /*dt*/,
1571                        DRegister /*rd*/,
1572                        DRegister /*rn*/,
1573                        DRegister /*rm*/) {
1574    USE(type);
1575    VIXL_ASSERT((type == kVmaxnm) || (type == kVminnm) || (type == kVseleq) ||
1576                (type == kVselge) || (type == kVselgt) || (type == kVselvs));
1577    UnimplementedDelegate(type);
1578  }
1579  virtual void Delegate(InstructionType type,
1580                        InstructionDtSSS /*instruction*/,
1581                        DataType /*dt*/,
1582                        SRegister /*rd*/,
1583                        SRegister /*rn*/,
1584                        SRegister /*rm*/) {
1585    USE(type);
1586    VIXL_ASSERT((type == kVmaxnm) || (type == kVminnm) || (type == kVseleq) ||
1587                (type == kVselge) || (type == kVselgt) || (type == kVselvs));
1588    UnimplementedDelegate(type);
1589  }
1590  virtual void Delegate(InstructionType type,
1591                        InstructionCondDtDDDx /*instruction*/,
1592                        Condition /*cond*/,
1593                        DataType /*dt*/,
1594                        DRegister /*rd*/,
1595                        DRegister /*rn*/,
1596                        DRegisterLane /*rm*/) {
1597    USE(type);
1598    VIXL_ASSERT((type == kVmla) || (type == kVmls) || (type == kVqdmulh) ||
1599                (type == kVqrdmulh));
1600    UnimplementedDelegate(type);
1601  }
1602  virtual void Delegate(InstructionType type,
1603                        InstructionCondDtQQDx /*instruction*/,
1604                        Condition /*cond*/,
1605                        DataType /*dt*/,
1606                        QRegister /*rd*/,
1607                        QRegister /*rn*/,
1608                        DRegisterLane /*rm*/) {
1609    USE(type);
1610    VIXL_ASSERT((type == kVmla) || (type == kVmls) || (type == kVqdmulh) ||
1611                (type == kVqrdmulh));
1612    UnimplementedDelegate(type);
1613  }
1614  virtual void Delegate(InstructionType type,
1615                        InstructionCondDtQDDx /*instruction*/,
1616                        Condition /*cond*/,
1617                        DataType /*dt*/,
1618                        QRegister /*rd*/,
1619                        DRegister /*rn*/,
1620                        DRegisterLane /*rm*/) {
1621    USE(type);
1622    VIXL_ASSERT((type == kVmlal) || (type == kVmlsl) || (type == kVqdmull));
1623    UnimplementedDelegate(type);
1624  }
1625  virtual void Delegate(InstructionType type,
1626                        InstructionCondRS /*instruction*/,
1627                        Condition /*cond*/,
1628                        Register /*rt*/,
1629                        SRegister /*rn*/) {
1630    USE(type);
1631    VIXL_ASSERT((type == kVmov));
1632    UnimplementedDelegate(type);
1633  }
1634  virtual void Delegate(InstructionType type,
1635                        InstructionCondSR /*instruction*/,
1636                        Condition /*cond*/,
1637                        SRegister /*rn*/,
1638                        Register /*rt*/) {
1639    USE(type);
1640    VIXL_ASSERT((type == kVmov));
1641    UnimplementedDelegate(type);
1642  }
1643  virtual void Delegate(InstructionType type,
1644                        InstructionCondRRD /*instruction*/,
1645                        Condition /*cond*/,
1646                        Register /*rt*/,
1647                        Register /*rt2*/,
1648                        DRegister /*rm*/) {
1649    USE(type);
1650    VIXL_ASSERT((type == kVmov));
1651    UnimplementedDelegate(type);
1652  }
1653  virtual void Delegate(InstructionType type,
1654                        InstructionCondDRR /*instruction*/,
1655                        Condition /*cond*/,
1656                        DRegister /*rm*/,
1657                        Register /*rt*/,
1658                        Register /*rt2*/) {
1659    USE(type);
1660    VIXL_ASSERT((type == kVmov));
1661    UnimplementedDelegate(type);
1662  }
1663  virtual void Delegate(InstructionType type,
1664                        InstructionCondRRSS /*instruction*/,
1665                        Condition /*cond*/,
1666                        Register /*rt*/,
1667                        Register /*rt2*/,
1668                        SRegister /*rm*/,
1669                        SRegister /*rm1*/) {
1670    USE(type);
1671    VIXL_ASSERT((type == kVmov));
1672    UnimplementedDelegate(type);
1673  }
1674  virtual void Delegate(InstructionType type,
1675                        InstructionCondSSRR /*instruction*/,
1676                        Condition /*cond*/,
1677                        SRegister /*rm*/,
1678                        SRegister /*rm1*/,
1679                        Register /*rt*/,
1680                        Register /*rt2*/) {
1681    USE(type);
1682    VIXL_ASSERT((type == kVmov));
1683    UnimplementedDelegate(type);
1684  }
1685  virtual void Delegate(InstructionType type,
1686                        InstructionCondDtDxR /*instruction*/,
1687                        Condition /*cond*/,
1688                        DataType /*dt*/,
1689                        DRegisterLane /*rd*/,
1690                        Register /*rt*/) {
1691    USE(type);
1692    VIXL_ASSERT((type == kVmov));
1693    UnimplementedDelegate(type);
1694  }
1695  virtual void Delegate(InstructionType type,
1696                        InstructionCondDtQQop /*instruction*/,
1697                        Condition /*cond*/,
1698                        DataType /*dt*/,
1699                        QRegister /*rd*/,
1700                        const QOperand& /*operand*/) {
1701    USE(type);
1702    VIXL_ASSERT((type == kVmov) || (type == kVmvn));
1703    UnimplementedDelegate(type);
1704  }
1705  virtual void Delegate(InstructionType type,
1706                        InstructionCondDtRDx /*instruction*/,
1707                        Condition /*cond*/,
1708                        DataType /*dt*/,
1709                        Register /*rt*/,
1710                        DRegisterLane /*rn*/) {
1711    USE(type);
1712    VIXL_ASSERT((type == kVmov));
1713    UnimplementedDelegate(type);
1714  }
1715  virtual void Delegate(InstructionType type,
1716                        InstructionCondDtQD /*instruction*/,
1717                        Condition /*cond*/,
1718                        DataType /*dt*/,
1719                        QRegister /*rd*/,
1720                        DRegister /*rm*/) {
1721    USE(type);
1722    VIXL_ASSERT((type == kVmovl));
1723    UnimplementedDelegate(type);
1724  }
1725  virtual void Delegate(InstructionType type,
1726                        InstructionCondDtDQ /*instruction*/,
1727                        Condition /*cond*/,
1728                        DataType /*dt*/,
1729                        DRegister /*rd*/,
1730                        QRegister /*rm*/) {
1731    USE(type);
1732    VIXL_ASSERT((type == kVmovn) || (type == kVqmovn) || (type == kVqmovun));
1733    UnimplementedDelegate(type);
1734  }
1735  virtual void Delegate(InstructionType type,
1736                        InstructionCondRoaSfp /*instruction*/,
1737                        Condition /*cond*/,
1738                        RegisterOrAPSR_nzcv /*rt*/,
1739                        SpecialFPRegister /*spec_reg*/) {
1740    USE(type);
1741    VIXL_ASSERT((type == kVmrs));
1742    UnimplementedDelegate(type);
1743  }
1744  virtual void Delegate(InstructionType type,
1745                        InstructionCondSfpR /*instruction*/,
1746                        Condition /*cond*/,
1747                        SpecialFPRegister /*spec_reg*/,
1748                        Register /*rt*/) {
1749    USE(type);
1750    VIXL_ASSERT((type == kVmsr));
1751    UnimplementedDelegate(type);
1752  }
1753  virtual void Delegate(InstructionType type,
1754                        InstructionCondDtDDIr /*instruction*/,
1755                        Condition /*cond*/,
1756                        DataType /*dt*/,
1757                        DRegister /*rd*/,
1758                        DRegister /*rn*/,
1759                        DRegister /*dm*/,
1760                        unsigned /*index*/) {
1761    USE(type);
1762    VIXL_ASSERT((type == kVmul));
1763    UnimplementedDelegate(type);
1764  }
1765  virtual void Delegate(InstructionType type,
1766                        InstructionCondDtQQIr /*instruction*/,
1767                        Condition /*cond*/,
1768                        DataType /*dt*/,
1769                        QRegister /*rd*/,
1770                        QRegister /*rn*/,
1771                        DRegister /*dm*/,
1772                        unsigned /*index*/) {
1773    USE(type);
1774    VIXL_ASSERT((type == kVmul));
1775    UnimplementedDelegate(type);
1776  }
1777  virtual void Delegate(InstructionType type,
1778                        InstructionCondDtQDIr /*instruction*/,
1779                        Condition /*cond*/,
1780                        DataType /*dt*/,
1781                        QRegister /*rd*/,
1782                        DRegister /*rn*/,
1783                        DRegister /*dm*/,
1784                        unsigned /*index*/) {
1785    USE(type);
1786    VIXL_ASSERT((type == kVmull) || (type == kVqdmlal) || (type == kVqdmlsl));
1787    UnimplementedDelegate(type);
1788  }
1789  virtual void Delegate(InstructionType type,
1790                        InstructionCondDtDrl /*instruction*/,
1791                        Condition /*cond*/,
1792                        DataType /*dt*/,
1793                        DRegisterList /*dreglist*/) {
1794    USE(type);
1795    VIXL_ASSERT((type == kVpop) || (type == kVpush));
1796    UnimplementedDelegate(type);
1797  }
1798  virtual void Delegate(InstructionType type,
1799                        InstructionCondDtSrl /*instruction*/,
1800                        Condition /*cond*/,
1801                        DataType /*dt*/,
1802                        SRegisterList /*sreglist*/) {
1803    USE(type);
1804    VIXL_ASSERT((type == kVpop) || (type == kVpush));
1805    UnimplementedDelegate(type);
1806  }
1807  virtual void Delegate(InstructionType type,
1808                        InstructionCondDtDQQop /*instruction*/,
1809                        Condition /*cond*/,
1810                        DataType /*dt*/,
1811                        DRegister /*rd*/,
1812                        QRegister /*rm*/,
1813                        const QOperand& /*operand*/) {
1814    USE(type);
1815    VIXL_ASSERT((type == kVqrshrn) || (type == kVqrshrun) ||
1816                (type == kVqshrn) || (type == kVqshrun) || (type == kVrshrn) ||
1817                (type == kVshrn));
1818    UnimplementedDelegate(type);
1819  }
1820  virtual void Delegate(InstructionType type,
1821                        InstructionCondDtQDDop /*instruction*/,
1822                        Condition /*cond*/,
1823                        DataType /*dt*/,
1824                        QRegister /*rd*/,
1825                        DRegister /*rm*/,
1826                        const DOperand& /*operand*/) {
1827    USE(type);
1828    VIXL_ASSERT((type == kVshll));
1829    UnimplementedDelegate(type);
1830  }
1831  virtual void Delegate(InstructionType type,
1832                        InstructionCondDtDNrlD /*instruction*/,
1833                        Condition /*cond*/,
1834                        DataType /*dt*/,
1835                        DRegister /*rd*/,
1836                        const NeonRegisterList& /*nreglist*/,
1837                        DRegister /*rm*/) {
1838    USE(type);
1839    VIXL_ASSERT((type == kVtbl) || (type == kVtbx));
1840    UnimplementedDelegate(type);
1841  }
1842
1843  void adc(Condition cond,
1844           EncodingSize size,
1845           Register rd,
1846           Register rn,
1847           const Operand& operand);
1848  void adc(Register rd, Register rn, const Operand& operand) {
1849    adc(al, Best, rd, rn, operand);
1850  }
1851  void adc(Condition cond, Register rd, Register rn, const Operand& operand) {
1852    adc(cond, Best, rd, rn, operand);
1853  }
1854  void adc(EncodingSize size,
1855           Register rd,
1856           Register rn,
1857           const Operand& operand) {
1858    adc(al, size, rd, rn, operand);
1859  }
1860
1861  void adcs(Condition cond,
1862            EncodingSize size,
1863            Register rd,
1864            Register rn,
1865            const Operand& operand);
1866  void adcs(Register rd, Register rn, const Operand& operand) {
1867    adcs(al, Best, rd, rn, operand);
1868  }
1869  void adcs(Condition cond, Register rd, Register rn, const Operand& operand) {
1870    adcs(cond, Best, rd, rn, operand);
1871  }
1872  void adcs(EncodingSize size,
1873            Register rd,
1874            Register rn,
1875            const Operand& operand) {
1876    adcs(al, size, rd, rn, operand);
1877  }
1878
1879  void add(Condition cond,
1880           EncodingSize size,
1881           Register rd,
1882           Register rn,
1883           const Operand& operand);
1884  void add(Register rd, Register rn, const Operand& operand) {
1885    add(al, Best, rd, rn, operand);
1886  }
1887  void add(Condition cond, Register rd, Register rn, const Operand& operand) {
1888    add(cond, Best, rd, rn, operand);
1889  }
1890  void add(EncodingSize size,
1891           Register rd,
1892           Register rn,
1893           const Operand& operand) {
1894    add(al, size, rd, rn, operand);
1895  }
1896
1897  void add(Condition cond, Register rd, const Operand& operand);
1898  void add(Register rd, const Operand& operand) { add(al, rd, operand); }
1899
1900  void adds(Condition cond,
1901            EncodingSize size,
1902            Register rd,
1903            Register rn,
1904            const Operand& operand);
1905  void adds(Register rd, Register rn, const Operand& operand) {
1906    adds(al, Best, rd, rn, operand);
1907  }
1908  void adds(Condition cond, Register rd, Register rn, const Operand& operand) {
1909    adds(cond, Best, rd, rn, operand);
1910  }
1911  void adds(EncodingSize size,
1912            Register rd,
1913            Register rn,
1914            const Operand& operand) {
1915    adds(al, size, rd, rn, operand);
1916  }
1917
1918  void adds(Register rd, const Operand& operand);
1919
1920  void addw(Condition cond, Register rd, Register rn, const Operand& operand);
1921  void addw(Register rd, Register rn, const Operand& operand) {
1922    addw(al, rd, rn, operand);
1923  }
1924
1925  void adr(Condition cond, EncodingSize size, Register rd, Location* location);
1926  bool adr_info(Condition cond,
1927                EncodingSize size,
1928                Register rd,
1929                Location* location,
1930                const struct ReferenceInfo** info);
1931  void adr(Register rd, Location* location) { adr(al, Best, rd, location); }
1932  void adr(Condition cond, Register rd, Location* location) {
1933    adr(cond, Best, rd, location);
1934  }
1935  void adr(EncodingSize size, Register rd, Location* location) {
1936    adr(al, size, rd, location);
1937  }
1938
1939  void and_(Condition cond,
1940            EncodingSize size,
1941            Register rd,
1942            Register rn,
1943            const Operand& operand);
1944  void and_(Register rd, Register rn, const Operand& operand) {
1945    and_(al, Best, rd, rn, operand);
1946  }
1947  void and_(Condition cond, Register rd, Register rn, const Operand& operand) {
1948    and_(cond, Best, rd, rn, operand);
1949  }
1950  void and_(EncodingSize size,
1951            Register rd,
1952            Register rn,
1953            const Operand& operand) {
1954    and_(al, size, rd, rn, operand);
1955  }
1956
1957  void ands(Condition cond,
1958            EncodingSize size,
1959            Register rd,
1960            Register rn,
1961            const Operand& operand);
1962  void ands(Register rd, Register rn, const Operand& operand) {
1963    ands(al, Best, rd, rn, operand);
1964  }
1965  void ands(Condition cond, Register rd, Register rn, const Operand& operand) {
1966    ands(cond, Best, rd, rn, operand);
1967  }
1968  void ands(EncodingSize size,
1969            Register rd,
1970            Register rn,
1971            const Operand& operand) {
1972    ands(al, size, rd, rn, operand);
1973  }
1974
1975  void asr(Condition cond,
1976           EncodingSize size,
1977           Register rd,
1978           Register rm,
1979           const Operand& operand);
1980  void asr(Register rd, Register rm, const Operand& operand) {
1981    asr(al, Best, rd, rm, operand);
1982  }
1983  void asr(Condition cond, Register rd, Register rm, const Operand& operand) {
1984    asr(cond, Best, rd, rm, operand);
1985  }
1986  void asr(EncodingSize size,
1987           Register rd,
1988           Register rm,
1989           const Operand& operand) {
1990    asr(al, size, rd, rm, operand);
1991  }
1992
1993  void asrs(Condition cond,
1994            EncodingSize size,
1995            Register rd,
1996            Register rm,
1997            const Operand& operand);
1998  void asrs(Register rd, Register rm, const Operand& operand) {
1999    asrs(al, Best, rd, rm, operand);
2000  }
2001  void asrs(Condition cond, Register rd, Register rm, const Operand& operand) {
2002    asrs(cond, Best, rd, rm, operand);
2003  }
2004  void asrs(EncodingSize size,
2005            Register rd,
2006            Register rm,
2007            const Operand& operand) {
2008    asrs(al, size, rd, rm, operand);
2009  }
2010
2011  void b(Condition cond, EncodingSize size, Location* location);
2012  bool b_info(Condition cond,
2013              EncodingSize size,
2014              Location* location,
2015              const struct ReferenceInfo** info);
2016  void b(Location* location) { b(al, Best, location); }
2017  void b(Condition cond, Location* location) { b(cond, Best, location); }
2018  void b(EncodingSize size, Location* location) { b(al, size, location); }
2019
2020  void bfc(Condition cond, Register rd, uint32_t lsb, uint32_t width);
2021  void bfc(Register rd, uint32_t lsb, uint32_t width) {
2022    bfc(al, rd, lsb, width);
2023  }
2024
2025  void bfi(
2026      Condition cond, Register rd, Register rn, uint32_t lsb, uint32_t width);
2027  void bfi(Register rd, Register rn, uint32_t lsb, uint32_t width) {
2028    bfi(al, rd, rn, lsb, width);
2029  }
2030
2031  void bic(Condition cond,
2032           EncodingSize size,
2033           Register rd,
2034           Register rn,
2035           const Operand& operand);
2036  void bic(Register rd, Register rn, const Operand& operand) {
2037    bic(al, Best, rd, rn, operand);
2038  }
2039  void bic(Condition cond, Register rd, Register rn, const Operand& operand) {
2040    bic(cond, Best, rd, rn, operand);
2041  }
2042  void bic(EncodingSize size,
2043           Register rd,
2044           Register rn,
2045           const Operand& operand) {
2046    bic(al, size, rd, rn, operand);
2047  }
2048
2049  void bics(Condition cond,
2050            EncodingSize size,
2051            Register rd,
2052            Register rn,
2053            const Operand& operand);
2054  void bics(Register rd, Register rn, const Operand& operand) {
2055    bics(al, Best, rd, rn, operand);
2056  }
2057  void bics(Condition cond, Register rd, Register rn, const Operand& operand) {
2058    bics(cond, Best, rd, rn, operand);
2059  }
2060  void bics(EncodingSize size,
2061            Register rd,
2062            Register rn,
2063            const Operand& operand) {
2064    bics(al, size, rd, rn, operand);
2065  }
2066
2067  void bkpt(Condition cond, uint32_t imm);
2068  void bkpt(uint32_t imm) { bkpt(al, imm); }
2069
2070  void bl(Condition cond, Location* location);
2071  bool bl_info(Condition cond,
2072               Location* location,
2073               const struct ReferenceInfo** info);
2074  void bl(Location* location) { bl(al, location); }
2075
2076  void blx(Condition cond, Location* location);
2077  bool blx_info(Condition cond,
2078                Location* location,
2079                const struct ReferenceInfo** info);
2080  void blx(Location* location) { blx(al, location); }
2081
2082  void blx(Condition cond, Register rm);
2083  void blx(Register rm) { blx(al, rm); }
2084
2085  void bx(Condition cond, Register rm);
2086  void bx(Register rm) { bx(al, rm); }
2087
2088  void bxj(Condition cond, Register rm);
2089  void bxj(Register rm) { bxj(al, rm); }
2090
2091  void cbnz(Register rn, Location* location);
2092  bool cbnz_info(Register rn,
2093                 Location* location,
2094                 const struct ReferenceInfo** info);
2095
2096  void cbz(Register rn, Location* location);
2097  bool cbz_info(Register rn,
2098                Location* location,
2099                const struct ReferenceInfo** info);
2100
2101  void clrex(Condition cond);
2102  void clrex() { clrex(al); }
2103
2104  void clz(Condition cond, Register rd, Register rm);
2105  void clz(Register rd, Register rm) { clz(al, rd, rm); }
2106
2107  void cmn(Condition cond,
2108           EncodingSize size,
2109           Register rn,
2110           const Operand& operand);
2111  void cmn(Register rn, const Operand& operand) { cmn(al, Best, rn, operand); }
2112  void cmn(Condition cond, Register rn, const Operand& operand) {
2113    cmn(cond, Best, rn, operand);
2114  }
2115  void cmn(EncodingSize size, Register rn, const Operand& operand) {
2116    cmn(al, size, rn, operand);
2117  }
2118
2119  void cmp(Condition cond,
2120           EncodingSize size,
2121           Register rn,
2122           const Operand& operand);
2123  void cmp(Register rn, const Operand& operand) { cmp(al, Best, rn, operand); }
2124  void cmp(Condition cond, Register rn, const Operand& operand) {
2125    cmp(cond, Best, rn, operand);
2126  }
2127  void cmp(EncodingSize size, Register rn, const Operand& operand) {
2128    cmp(al, size, rn, operand);
2129  }
2130
2131  void crc32b(Condition cond, Register rd, Register rn, Register rm);
2132  void crc32b(Register rd, Register rn, Register rm) { crc32b(al, rd, rn, rm); }
2133
2134  void crc32cb(Condition cond, Register rd, Register rn, Register rm);
2135  void crc32cb(Register rd, Register rn, Register rm) {
2136    crc32cb(al, rd, rn, rm);
2137  }
2138
2139  void crc32ch(Condition cond, Register rd, Register rn, Register rm);
2140  void crc32ch(Register rd, Register rn, Register rm) {
2141    crc32ch(al, rd, rn, rm);
2142  }
2143
2144  void crc32cw(Condition cond, Register rd, Register rn, Register rm);
2145  void crc32cw(Register rd, Register rn, Register rm) {
2146    crc32cw(al, rd, rn, rm);
2147  }
2148
2149  void crc32h(Condition cond, Register rd, Register rn, Register rm);
2150  void crc32h(Register rd, Register rn, Register rm) { crc32h(al, rd, rn, rm); }
2151
2152  void crc32w(Condition cond, Register rd, Register rn, Register rm);
2153  void crc32w(Register rd, Register rn, Register rm) { crc32w(al, rd, rn, rm); }
2154
2155  void dmb(Condition cond, MemoryBarrier option);
2156  void dmb(MemoryBarrier option) { dmb(al, option); }
2157
2158  void dsb(Condition cond, MemoryBarrier option);
2159  void dsb(MemoryBarrier option) { dsb(al, option); }
2160
2161  void eor(Condition cond,
2162           EncodingSize size,
2163           Register rd,
2164           Register rn,
2165           const Operand& operand);
2166  void eor(Register rd, Register rn, const Operand& operand) {
2167    eor(al, Best, rd, rn, operand);
2168  }
2169  void eor(Condition cond, Register rd, Register rn, const Operand& operand) {
2170    eor(cond, Best, rd, rn, operand);
2171  }
2172  void eor(EncodingSize size,
2173           Register rd,
2174           Register rn,
2175           const Operand& operand) {
2176    eor(al, size, rd, rn, operand);
2177  }
2178
2179  void eors(Condition cond,
2180            EncodingSize size,
2181            Register rd,
2182            Register rn,
2183            const Operand& operand);
2184  void eors(Register rd, Register rn, const Operand& operand) {
2185    eors(al, Best, rd, rn, operand);
2186  }
2187  void eors(Condition cond, Register rd, Register rn, const Operand& operand) {
2188    eors(cond, Best, rd, rn, operand);
2189  }
2190  void eors(EncodingSize size,
2191            Register rd,
2192            Register rn,
2193            const Operand& operand) {
2194    eors(al, size, rd, rn, operand);
2195  }
2196
2197  void fldmdbx(Condition cond,
2198               Register rn,
2199               WriteBack write_back,
2200               DRegisterList dreglist);
2201  void fldmdbx(Register rn, WriteBack write_back, DRegisterList dreglist) {
2202    fldmdbx(al, rn, write_back, dreglist);
2203  }
2204
2205  void fldmiax(Condition cond,
2206               Register rn,
2207               WriteBack write_back,
2208               DRegisterList dreglist);
2209  void fldmiax(Register rn, WriteBack write_back, DRegisterList dreglist) {
2210    fldmiax(al, rn, write_back, dreglist);
2211  }
2212
2213  void fstmdbx(Condition cond,
2214               Register rn,
2215               WriteBack write_back,
2216               DRegisterList dreglist);
2217  void fstmdbx(Register rn, WriteBack write_back, DRegisterList dreglist) {
2218    fstmdbx(al, rn, write_back, dreglist);
2219  }
2220
2221  void fstmiax(Condition cond,
2222               Register rn,
2223               WriteBack write_back,
2224               DRegisterList dreglist);
2225  void fstmiax(Register rn, WriteBack write_back, DRegisterList dreglist) {
2226    fstmiax(al, rn, write_back, dreglist);
2227  }
2228
2229  void hlt(Condition cond, uint32_t imm);
2230  void hlt(uint32_t imm) { hlt(al, imm); }
2231
2232  void hvc(Condition cond, uint32_t imm);
2233  void hvc(uint32_t imm) { hvc(al, imm); }
2234
2235  void isb(Condition cond, MemoryBarrier option);
2236  void isb(MemoryBarrier option) { isb(al, option); }
2237
2238  void it(Condition cond, uint16_t mask);
2239
2240  void lda(Condition cond, Register rt, const MemOperand& operand);
2241  void lda(Register rt, const MemOperand& operand) { lda(al, rt, operand); }
2242
2243  void ldab(Condition cond, Register rt, const MemOperand& operand);
2244  void ldab(Register rt, const MemOperand& operand) { ldab(al, rt, operand); }
2245
2246  void ldaex(Condition cond, Register rt, const MemOperand& operand);
2247  void ldaex(Register rt, const MemOperand& operand) { ldaex(al, rt, operand); }
2248
2249  void ldaexb(Condition cond, Register rt, const MemOperand& operand);
2250  void ldaexb(Register rt, const MemOperand& operand) {
2251    ldaexb(al, rt, operand);
2252  }
2253
2254  void ldaexd(Condition cond,
2255              Register rt,
2256              Register rt2,
2257              const MemOperand& operand);
2258  void ldaexd(Register rt, Register rt2, const MemOperand& operand) {
2259    ldaexd(al, rt, rt2, operand);
2260  }
2261
2262  void ldaexh(Condition cond, Register rt, const MemOperand& operand);
2263  void ldaexh(Register rt, const MemOperand& operand) {
2264    ldaexh(al, rt, operand);
2265  }
2266
2267  void ldah(Condition cond, Register rt, const MemOperand& operand);
2268  void ldah(Register rt, const MemOperand& operand) { ldah(al, rt, operand); }
2269
2270  void ldm(Condition cond,
2271           EncodingSize size,
2272           Register rn,
2273           WriteBack write_back,
2274           RegisterList registers);
2275  void ldm(Register rn, WriteBack write_back, RegisterList registers) {
2276    ldm(al, Best, rn, write_back, registers);
2277  }
2278  void ldm(Condition cond,
2279           Register rn,
2280           WriteBack write_back,
2281           RegisterList registers) {
2282    ldm(cond, Best, rn, write_back, registers);
2283  }
2284  void ldm(EncodingSize size,
2285           Register rn,
2286           WriteBack write_back,
2287           RegisterList registers) {
2288    ldm(al, size, rn, write_back, registers);
2289  }
2290
2291  void ldmda(Condition cond,
2292             Register rn,
2293             WriteBack write_back,
2294             RegisterList registers);
2295  void ldmda(Register rn, WriteBack write_back, RegisterList registers) {
2296    ldmda(al, rn, write_back, registers);
2297  }
2298
2299  void ldmdb(Condition cond,
2300             Register rn,
2301             WriteBack write_back,
2302             RegisterList registers);
2303  void ldmdb(Register rn, WriteBack write_back, RegisterList registers) {
2304    ldmdb(al, rn, write_back, registers);
2305  }
2306
2307  void ldmea(Condition cond,
2308             Register rn,
2309             WriteBack write_back,
2310             RegisterList registers);
2311  void ldmea(Register rn, WriteBack write_back, RegisterList registers) {
2312    ldmea(al, rn, write_back, registers);
2313  }
2314
2315  void ldmed(Condition cond,
2316             Register rn,
2317             WriteBack write_back,
2318             RegisterList registers);
2319  void ldmed(Register rn, WriteBack write_back, RegisterList registers) {
2320    ldmed(al, rn, write_back, registers);
2321  }
2322
2323  void ldmfa(Condition cond,
2324             Register rn,
2325             WriteBack write_back,
2326             RegisterList registers);
2327  void ldmfa(Register rn, WriteBack write_back, RegisterList registers) {
2328    ldmfa(al, rn, write_back, registers);
2329  }
2330
2331  void ldmfd(Condition cond,
2332             EncodingSize size,
2333             Register rn,
2334             WriteBack write_back,
2335             RegisterList registers);
2336  void ldmfd(Register rn, WriteBack write_back, RegisterList registers) {
2337    ldmfd(al, Best, rn, write_back, registers);
2338  }
2339  void ldmfd(Condition cond,
2340             Register rn,
2341             WriteBack write_back,
2342             RegisterList registers) {
2343    ldmfd(cond, Best, rn, write_back, registers);
2344  }
2345  void ldmfd(EncodingSize size,
2346             Register rn,
2347             WriteBack write_back,
2348             RegisterList registers) {
2349    ldmfd(al, size, rn, write_back, registers);
2350  }
2351
2352  void ldmib(Condition cond,
2353             Register rn,
2354             WriteBack write_back,
2355             RegisterList registers);
2356  void ldmib(Register rn, WriteBack write_back, RegisterList registers) {
2357    ldmib(al, rn, write_back, registers);
2358  }
2359
2360  void ldr(Condition cond,
2361           EncodingSize size,
2362           Register rt,
2363           const MemOperand& operand);
2364  void ldr(Register rt, const MemOperand& operand) {
2365    ldr(al, Best, rt, operand);
2366  }
2367  void ldr(Condition cond, Register rt, const MemOperand& operand) {
2368    ldr(cond, Best, rt, operand);
2369  }
2370  void ldr(EncodingSize size, Register rt, const MemOperand& operand) {
2371    ldr(al, size, rt, operand);
2372  }
2373
2374  void ldr(Condition cond, EncodingSize size, Register rt, Location* location);
2375  bool ldr_info(Condition cond,
2376                EncodingSize size,
2377                Register rt,
2378                Location* location,
2379                const struct ReferenceInfo** info);
2380  void ldr(Register rt, Location* location) { ldr(al, Best, rt, location); }
2381  void ldr(Condition cond, Register rt, Location* location) {
2382    ldr(cond, Best, rt, location);
2383  }
2384  void ldr(EncodingSize size, Register rt, Location* location) {
2385    ldr(al, size, rt, location);
2386  }
2387
2388  void ldrb(Condition cond,
2389            EncodingSize size,
2390            Register rt,
2391            const MemOperand& operand);
2392  void ldrb(Register rt, const MemOperand& operand) {
2393    ldrb(al, Best, rt, operand);
2394  }
2395  void ldrb(Condition cond, Register rt, const MemOperand& operand) {
2396    ldrb(cond, Best, rt, operand);
2397  }
2398  void ldrb(EncodingSize size, Register rt, const MemOperand& operand) {
2399    ldrb(al, size, rt, operand);
2400  }
2401
2402  void ldrb(Condition cond, Register rt, Location* location);
2403  bool ldrb_info(Condition cond,
2404                 Register rt,
2405                 Location* location,
2406                 const struct ReferenceInfo** info);
2407  void ldrb(Register rt, Location* location) { ldrb(al, rt, location); }
2408
2409  void ldrd(Condition cond,
2410            Register rt,
2411            Register rt2,
2412            const MemOperand& operand);
2413  void ldrd(Register rt, Register rt2, const MemOperand& operand) {
2414    ldrd(al, rt, rt2, operand);
2415  }
2416
2417  void ldrd(Condition cond, Register rt, Register rt2, Location* location);
2418  bool ldrd_info(Condition cond,
2419                 Register rt,
2420                 Register rt2,
2421                 Location* location,
2422                 const struct ReferenceInfo** info);
2423  void ldrd(Register rt, Register rt2, Location* location) {
2424    ldrd(al, rt, rt2, location);
2425  }
2426
2427  void ldrex(Condition cond, Register rt, const MemOperand& operand);
2428  void ldrex(Register rt, const MemOperand& operand) { ldrex(al, rt, operand); }
2429
2430  void ldrexb(Condition cond, Register rt, const MemOperand& operand);
2431  void ldrexb(Register rt, const MemOperand& operand) {
2432    ldrexb(al, rt, operand);
2433  }
2434
2435  void ldrexd(Condition cond,
2436              Register rt,
2437              Register rt2,
2438              const MemOperand& operand);
2439  void ldrexd(Register rt, Register rt2, const MemOperand& operand) {
2440    ldrexd(al, rt, rt2, operand);
2441  }
2442
2443  void ldrexh(Condition cond, Register rt, const MemOperand& operand);
2444  void ldrexh(Register rt, const MemOperand& operand) {
2445    ldrexh(al, rt, operand);
2446  }
2447
2448  void ldrh(Condition cond,
2449            EncodingSize size,
2450            Register rt,
2451            const MemOperand& operand);
2452  void ldrh(Register rt, const MemOperand& operand) {
2453    ldrh(al, Best, rt, operand);
2454  }
2455  void ldrh(Condition cond, Register rt, const MemOperand& operand) {
2456    ldrh(cond, Best, rt, operand);
2457  }
2458  void ldrh(EncodingSize size, Register rt, const MemOperand& operand) {
2459    ldrh(al, size, rt, operand);
2460  }
2461
2462  void ldrh(Condition cond, Register rt, Location* location);
2463  bool ldrh_info(Condition cond,
2464                 Register rt,
2465                 Location* location,
2466                 const struct ReferenceInfo** info);
2467  void ldrh(Register rt, Location* location) { ldrh(al, rt, location); }
2468
2469  void ldrsb(Condition cond,
2470             EncodingSize size,
2471             Register rt,
2472             const MemOperand& operand);
2473  void ldrsb(Register rt, const MemOperand& operand) {
2474    ldrsb(al, Best, rt, operand);
2475  }
2476  void ldrsb(Condition cond, Register rt, const MemOperand& operand) {
2477    ldrsb(cond, Best, rt, operand);
2478  }
2479  void ldrsb(EncodingSize size, Register rt, const MemOperand& operand) {
2480    ldrsb(al, size, rt, operand);
2481  }
2482
2483  void ldrsb(Condition cond, Register rt, Location* location);
2484  bool ldrsb_info(Condition cond,
2485                  Register rt,
2486                  Location* location,
2487                  const struct ReferenceInfo** info);
2488  void ldrsb(Register rt, Location* location) { ldrsb(al, rt, location); }
2489
2490  void ldrsh(Condition cond,
2491             EncodingSize size,
2492             Register rt,
2493             const MemOperand& operand);
2494  void ldrsh(Register rt, const MemOperand& operand) {
2495    ldrsh(al, Best, rt, operand);
2496  }
2497  void ldrsh(Condition cond, Register rt, const MemOperand& operand) {
2498    ldrsh(cond, Best, rt, operand);
2499  }
2500  void ldrsh(EncodingSize size, Register rt, const MemOperand& operand) {
2501    ldrsh(al, size, rt, operand);
2502  }
2503
2504  void ldrsh(Condition cond, Register rt, Location* location);
2505  bool ldrsh_info(Condition cond,
2506                  Register rt,
2507                  Location* location,
2508                  const struct ReferenceInfo** info);
2509  void ldrsh(Register rt, Location* location) { ldrsh(al, rt, location); }
2510
2511  void lsl(Condition cond,
2512           EncodingSize size,
2513           Register rd,
2514           Register rm,
2515           const Operand& operand);
2516  void lsl(Register rd, Register rm, const Operand& operand) {
2517    lsl(al, Best, rd, rm, operand);
2518  }
2519  void lsl(Condition cond, Register rd, Register rm, const Operand& operand) {
2520    lsl(cond, Best, rd, rm, operand);
2521  }
2522  void lsl(EncodingSize size,
2523           Register rd,
2524           Register rm,
2525           const Operand& operand) {
2526    lsl(al, size, rd, rm, operand);
2527  }
2528
2529  void lsls(Condition cond,
2530            EncodingSize size,
2531            Register rd,
2532            Register rm,
2533            const Operand& operand);
2534  void lsls(Register rd, Register rm, const Operand& operand) {
2535    lsls(al, Best, rd, rm, operand);
2536  }
2537  void lsls(Condition cond, Register rd, Register rm, const Operand& operand) {
2538    lsls(cond, Best, rd, rm, operand);
2539  }
2540  void lsls(EncodingSize size,
2541            Register rd,
2542            Register rm,
2543            const Operand& operand) {
2544    lsls(al, size, rd, rm, operand);
2545  }
2546
2547  void lsr(Condition cond,
2548           EncodingSize size,
2549           Register rd,
2550           Register rm,
2551           const Operand& operand);
2552  void lsr(Register rd, Register rm, const Operand& operand) {
2553    lsr(al, Best, rd, rm, operand);
2554  }
2555  void lsr(Condition cond, Register rd, Register rm, const Operand& operand) {
2556    lsr(cond, Best, rd, rm, operand);
2557  }
2558  void lsr(EncodingSize size,
2559           Register rd,
2560           Register rm,
2561           const Operand& operand) {
2562    lsr(al, size, rd, rm, operand);
2563  }
2564
2565  void lsrs(Condition cond,
2566            EncodingSize size,
2567            Register rd,
2568            Register rm,
2569            const Operand& operand);
2570  void lsrs(Register rd, Register rm, const Operand& operand) {
2571    lsrs(al, Best, rd, rm, operand);
2572  }
2573  void lsrs(Condition cond, Register rd, Register rm, const Operand& operand) {
2574    lsrs(cond, Best, rd, rm, operand);
2575  }
2576  void lsrs(EncodingSize size,
2577            Register rd,
2578            Register rm,
2579            const Operand& operand) {
2580    lsrs(al, size, rd, rm, operand);
2581  }
2582
2583  void mla(Condition cond, Register rd, Register rn, Register rm, Register ra);
2584  void mla(Register rd, Register rn, Register rm, Register ra) {
2585    mla(al, rd, rn, rm, ra);
2586  }
2587
2588  void mlas(Condition cond, Register rd, Register rn, Register rm, Register ra);
2589  void mlas(Register rd, Register rn, Register rm, Register ra) {
2590    mlas(al, rd, rn, rm, ra);
2591  }
2592
2593  void mls(Condition cond, Register rd, Register rn, Register rm, Register ra);
2594  void mls(Register rd, Register rn, Register rm, Register ra) {
2595    mls(al, rd, rn, rm, ra);
2596  }
2597
2598  void mov(Condition cond,
2599           EncodingSize size,
2600           Register rd,
2601           const Operand& operand);
2602  void mov(Register rd, const Operand& operand) { mov(al, Best, rd, operand); }
2603  void mov(Condition cond, Register rd, const Operand& operand) {
2604    mov(cond, Best, rd, operand);
2605  }
2606  void mov(EncodingSize size, Register rd, const Operand& operand) {
2607    mov(al, size, rd, operand);
2608  }
2609
2610  void movs(Condition cond,
2611            EncodingSize size,
2612            Register rd,
2613            const Operand& operand);
2614  void movs(Register rd, const Operand& operand) {
2615    movs(al, Best, rd, operand);
2616  }
2617  void movs(Condition cond, Register rd, const Operand& operand) {
2618    movs(cond, Best, rd, operand);
2619  }
2620  void movs(EncodingSize size, Register rd, const Operand& operand) {
2621    movs(al, size, rd, operand);
2622  }
2623
2624  void movt(Condition cond, Register rd, const Operand& operand);
2625  void movt(Register rd, const Operand& operand) { movt(al, rd, operand); }
2626
2627  void movw(Condition cond, Register rd, const Operand& operand);
2628  void movw(Register rd, const Operand& operand) { movw(al, rd, operand); }
2629
2630  void mrs(Condition cond, Register rd, SpecialRegister spec_reg);
2631  void mrs(Register rd, SpecialRegister spec_reg) { mrs(al, rd, spec_reg); }
2632
2633  void msr(Condition cond,
2634           MaskedSpecialRegister spec_reg,
2635           const Operand& operand);
2636  void msr(MaskedSpecialRegister spec_reg, const Operand& operand) {
2637    msr(al, spec_reg, operand);
2638  }
2639
2640  void mul(
2641      Condition cond, EncodingSize size, Register rd, Register rn, Register rm);
2642  void mul(Register rd, Register rn, Register rm) { mul(al, Best, rd, rn, rm); }
2643  void mul(Condition cond, Register rd, Register rn, Register rm) {
2644    mul(cond, Best, rd, rn, rm);
2645  }
2646  void mul(EncodingSize size, Register rd, Register rn, Register rm) {
2647    mul(al, size, rd, rn, rm);
2648  }
2649
2650  void muls(Condition cond, Register rd, Register rn, Register rm);
2651  void muls(Register rd, Register rn, Register rm) { muls(al, rd, rn, rm); }
2652
2653  void mvn(Condition cond,
2654           EncodingSize size,
2655           Register rd,
2656           const Operand& operand);
2657  void mvn(Register rd, const Operand& operand) { mvn(al, Best, rd, operand); }
2658  void mvn(Condition cond, Register rd, const Operand& operand) {
2659    mvn(cond, Best, rd, operand);
2660  }
2661  void mvn(EncodingSize size, Register rd, const Operand& operand) {
2662    mvn(al, size, rd, operand);
2663  }
2664
2665  void mvns(Condition cond,
2666            EncodingSize size,
2667            Register rd,
2668            const Operand& operand);
2669  void mvns(Register rd, const Operand& operand) {
2670    mvns(al, Best, rd, operand);
2671  }
2672  void mvns(Condition cond, Register rd, const Operand& operand) {
2673    mvns(cond, Best, rd, operand);
2674  }
2675  void mvns(EncodingSize size, Register rd, const Operand& operand) {
2676    mvns(al, size, rd, operand);
2677  }
2678
2679  void nop(Condition cond, EncodingSize size);
2680  void nop() { nop(al, Best); }
2681  void nop(Condition cond) { nop(cond, Best); }
2682  void nop(EncodingSize size) { nop(al, size); }
2683
2684  void orn(Condition cond, Register rd, Register rn, const Operand& operand);
2685  void orn(Register rd, Register rn, const Operand& operand) {
2686    orn(al, rd, rn, operand);
2687  }
2688
2689  void orns(Condition cond, Register rd, Register rn, const Operand& operand);
2690  void orns(Register rd, Register rn, const Operand& operand) {
2691    orns(al, rd, rn, operand);
2692  }
2693
2694  void orr(Condition cond,
2695           EncodingSize size,
2696           Register rd,
2697           Register rn,
2698           const Operand& operand);
2699  void orr(Register rd, Register rn, const Operand& operand) {
2700    orr(al, Best, rd, rn, operand);
2701  }
2702  void orr(Condition cond, Register rd, Register rn, const Operand& operand) {
2703    orr(cond, Best, rd, rn, operand);
2704  }
2705  void orr(EncodingSize size,
2706           Register rd,
2707           Register rn,
2708           const Operand& operand) {
2709    orr(al, size, rd, rn, operand);
2710  }
2711
2712  void orrs(Condition cond,
2713            EncodingSize size,
2714            Register rd,
2715            Register rn,
2716            const Operand& operand);
2717  void orrs(Register rd, Register rn, const Operand& operand) {
2718    orrs(al, Best, rd, rn, operand);
2719  }
2720  void orrs(Condition cond, Register rd, Register rn, const Operand& operand) {
2721    orrs(cond, Best, rd, rn, operand);
2722  }
2723  void orrs(EncodingSize size,
2724            Register rd,
2725            Register rn,
2726            const Operand& operand) {
2727    orrs(al, size, rd, rn, operand);
2728  }
2729
2730  void pkhbt(Condition cond, Register rd, Register rn, const Operand& operand);
2731  void pkhbt(Register rd, Register rn, const Operand& operand) {
2732    pkhbt(al, rd, rn, operand);
2733  }
2734
2735  void pkhtb(Condition cond, Register rd, Register rn, const Operand& operand);
2736  void pkhtb(Register rd, Register rn, const Operand& operand) {
2737    pkhtb(al, rd, rn, operand);
2738  }
2739
2740  void pld(Condition cond, Location* location);
2741  bool pld_info(Condition cond,
2742                Location* location,
2743                const struct ReferenceInfo** info);
2744  void pld(Location* location) { pld(al, location); }
2745
2746  void pld(Condition cond, const MemOperand& operand);
2747  void pld(const MemOperand& operand) { pld(al, operand); }
2748
2749  void pldw(Condition cond, const MemOperand& operand);
2750  void pldw(const MemOperand& operand) { pldw(al, operand); }
2751
2752  void pli(Condition cond, const MemOperand& operand);
2753  void pli(const MemOperand& operand) { pli(al, operand); }
2754
2755  void pli(Condition cond, Location* location);
2756  bool pli_info(Condition cond,
2757                Location* location,
2758                const struct ReferenceInfo** info);
2759  void pli(Location* location) { pli(al, location); }
2760
2761  void pop(Condition cond, EncodingSize size, RegisterList registers);
2762  void pop(RegisterList registers) { pop(al, Best, registers); }
2763  void pop(Condition cond, RegisterList registers) {
2764    pop(cond, Best, registers);
2765  }
2766  void pop(EncodingSize size, RegisterList registers) {
2767    pop(al, size, registers);
2768  }
2769
2770  void pop(Condition cond, EncodingSize size, Register rt);
2771  void pop(Register rt) { pop(al, Best, rt); }
2772  void pop(Condition cond, Register rt) { pop(cond, Best, rt); }
2773  void pop(EncodingSize size, Register rt) { pop(al, size, rt); }
2774
2775  void push(Condition cond, EncodingSize size, RegisterList registers);
2776  void push(RegisterList registers) { push(al, Best, registers); }
2777  void push(Condition cond, RegisterList registers) {
2778    push(cond, Best, registers);
2779  }
2780  void push(EncodingSize size, RegisterList registers) {
2781    push(al, size, registers);
2782  }
2783
2784  void push(Condition cond, EncodingSize size, Register rt);
2785  void push(Register rt) { push(al, Best, rt); }
2786  void push(Condition cond, Register rt) { push(cond, Best, rt); }
2787  void push(EncodingSize size, Register rt) { push(al, size, rt); }
2788
2789  void qadd(Condition cond, Register rd, Register rm, Register rn);
2790  void qadd(Register rd, Register rm, Register rn) { qadd(al, rd, rm, rn); }
2791
2792  void qadd16(Condition cond, Register rd, Register rn, Register rm);
2793  void qadd16(Register rd, Register rn, Register rm) { qadd16(al, rd, rn, rm); }
2794
2795  void qadd8(Condition cond, Register rd, Register rn, Register rm);
2796  void qadd8(Register rd, Register rn, Register rm) { qadd8(al, rd, rn, rm); }
2797
2798  void qasx(Condition cond, Register rd, Register rn, Register rm);
2799  void qasx(Register rd, Register rn, Register rm) { qasx(al, rd, rn, rm); }
2800
2801  void qdadd(Condition cond, Register rd, Register rm, Register rn);
2802  void qdadd(Register rd, Register rm, Register rn) { qdadd(al, rd, rm, rn); }
2803
2804  void qdsub(Condition cond, Register rd, Register rm, Register rn);
2805  void qdsub(Register rd, Register rm, Register rn) { qdsub(al, rd, rm, rn); }
2806
2807  void qsax(Condition cond, Register rd, Register rn, Register rm);
2808  void qsax(Register rd, Register rn, Register rm) { qsax(al, rd, rn, rm); }
2809
2810  void qsub(Condition cond, Register rd, Register rm, Register rn);
2811  void qsub(Register rd, Register rm, Register rn) { qsub(al, rd, rm, rn); }
2812
2813  void qsub16(Condition cond, Register rd, Register rn, Register rm);
2814  void qsub16(Register rd, Register rn, Register rm) { qsub16(al, rd, rn, rm); }
2815
2816  void qsub8(Condition cond, Register rd, Register rn, Register rm);
2817  void qsub8(Register rd, Register rn, Register rm) { qsub8(al, rd, rn, rm); }
2818
2819  void rbit(Condition cond, Register rd, Register rm);
2820  void rbit(Register rd, Register rm) { rbit(al, rd, rm); }
2821
2822  void rev(Condition cond, EncodingSize size, Register rd, Register rm);
2823  void rev(Register rd, Register rm) { rev(al, Best, rd, rm); }
2824  void rev(Condition cond, Register rd, Register rm) {
2825    rev(cond, Best, rd, rm);
2826  }
2827  void rev(EncodingSize size, Register rd, Register rm) {
2828    rev(al, size, rd, rm);
2829  }
2830
2831  void rev16(Condition cond, EncodingSize size, Register rd, Register rm);
2832  void rev16(Register rd, Register rm) { rev16(al, Best, rd, rm); }
2833  void rev16(Condition cond, Register rd, Register rm) {
2834    rev16(cond, Best, rd, rm);
2835  }
2836  void rev16(EncodingSize size, Register rd, Register rm) {
2837    rev16(al, size, rd, rm);
2838  }
2839
2840  void revsh(Condition cond, EncodingSize size, Register rd, Register rm);
2841  void revsh(Register rd, Register rm) { revsh(al, Best, rd, rm); }
2842  void revsh(Condition cond, Register rd, Register rm) {
2843    revsh(cond, Best, rd, rm);
2844  }
2845  void revsh(EncodingSize size, Register rd, Register rm) {
2846    revsh(al, size, rd, rm);
2847  }
2848
2849  void ror(Condition cond,
2850           EncodingSize size,
2851           Register rd,
2852           Register rm,
2853           const Operand& operand);
2854  void ror(Register rd, Register rm, const Operand& operand) {
2855    ror(al, Best, rd, rm, operand);
2856  }
2857  void ror(Condition cond, Register rd, Register rm, const Operand& operand) {
2858    ror(cond, Best, rd, rm, operand);
2859  }
2860  void ror(EncodingSize size,
2861           Register rd,
2862           Register rm,
2863           const Operand& operand) {
2864    ror(al, size, rd, rm, operand);
2865  }
2866
2867  void rors(Condition cond,
2868            EncodingSize size,
2869            Register rd,
2870            Register rm,
2871            const Operand& operand);
2872  void rors(Register rd, Register rm, const Operand& operand) {
2873    rors(al, Best, rd, rm, operand);
2874  }
2875  void rors(Condition cond, Register rd, Register rm, const Operand& operand) {
2876    rors(cond, Best, rd, rm, operand);
2877  }
2878  void rors(EncodingSize size,
2879            Register rd,
2880            Register rm,
2881            const Operand& operand) {
2882    rors(al, size, rd, rm, operand);
2883  }
2884
2885  void rrx(Condition cond, Register rd, Register rm);
2886  void rrx(Register rd, Register rm) { rrx(al, rd, rm); }
2887
2888  void rrxs(Condition cond, Register rd, Register rm);
2889  void rrxs(Register rd, Register rm) { rrxs(al, rd, rm); }
2890
2891  void rsb(Condition cond,
2892           EncodingSize size,
2893           Register rd,
2894           Register rn,
2895           const Operand& operand);
2896  void rsb(Register rd, Register rn, const Operand& operand) {
2897    rsb(al, Best, rd, rn, operand);
2898  }
2899  void rsb(Condition cond, Register rd, Register rn, const Operand& operand) {
2900    rsb(cond, Best, rd, rn, operand);
2901  }
2902  void rsb(EncodingSize size,
2903           Register rd,
2904           Register rn,
2905           const Operand& operand) {
2906    rsb(al, size, rd, rn, operand);
2907  }
2908
2909  void rsbs(Condition cond,
2910            EncodingSize size,
2911            Register rd,
2912            Register rn,
2913            const Operand& operand);
2914  void rsbs(Register rd, Register rn, const Operand& operand) {
2915    rsbs(al, Best, rd, rn, operand);
2916  }
2917  void rsbs(Condition cond, Register rd, Register rn, const Operand& operand) {
2918    rsbs(cond, Best, rd, rn, operand);
2919  }
2920  void rsbs(EncodingSize size,
2921            Register rd,
2922            Register rn,
2923            const Operand& operand) {
2924    rsbs(al, size, rd, rn, operand);
2925  }
2926
2927  void rsc(Condition cond, Register rd, Register rn, const Operand& operand);
2928  void rsc(Register rd, Register rn, const Operand& operand) {
2929    rsc(al, rd, rn, operand);
2930  }
2931
2932  void rscs(Condition cond, Register rd, Register rn, const Operand& operand);
2933  void rscs(Register rd, Register rn, const Operand& operand) {
2934    rscs(al, rd, rn, operand);
2935  }
2936
2937  void sadd16(Condition cond, Register rd, Register rn, Register rm);
2938  void sadd16(Register rd, Register rn, Register rm) { sadd16(al, rd, rn, rm); }
2939
2940  void sadd8(Condition cond, Register rd, Register rn, Register rm);
2941  void sadd8(Register rd, Register rn, Register rm) { sadd8(al, rd, rn, rm); }
2942
2943  void sasx(Condition cond, Register rd, Register rn, Register rm);
2944  void sasx(Register rd, Register rn, Register rm) { sasx(al, rd, rn, rm); }
2945
2946  void sbc(Condition cond,
2947           EncodingSize size,
2948           Register rd,
2949           Register rn,
2950           const Operand& operand);
2951  void sbc(Register rd, Register rn, const Operand& operand) {
2952    sbc(al, Best, rd, rn, operand);
2953  }
2954  void sbc(Condition cond, Register rd, Register rn, const Operand& operand) {
2955    sbc(cond, Best, rd, rn, operand);
2956  }
2957  void sbc(EncodingSize size,
2958           Register rd,
2959           Register rn,
2960           const Operand& operand) {
2961    sbc(al, size, rd, rn, operand);
2962  }
2963
2964  void sbcs(Condition cond,
2965            EncodingSize size,
2966            Register rd,
2967            Register rn,
2968            const Operand& operand);
2969  void sbcs(Register rd, Register rn, const Operand& operand) {
2970    sbcs(al, Best, rd, rn, operand);
2971  }
2972  void sbcs(Condition cond, Register rd, Register rn, const Operand& operand) {
2973    sbcs(cond, Best, rd, rn, operand);
2974  }
2975  void sbcs(EncodingSize size,
2976            Register rd,
2977            Register rn,
2978            const Operand& operand) {
2979    sbcs(al, size, rd, rn, operand);
2980  }
2981
2982  void sbfx(
2983      Condition cond, Register rd, Register rn, uint32_t lsb, uint32_t width);
2984  void sbfx(Register rd, Register rn, uint32_t lsb, uint32_t width) {
2985    sbfx(al, rd, rn, lsb, width);
2986  }
2987
2988  void sdiv(Condition cond, Register rd, Register rn, Register rm);
2989  void sdiv(Register rd, Register rn, Register rm) { sdiv(al, rd, rn, rm); }
2990
2991  void sel(Condition cond, Register rd, Register rn, Register rm);
2992  void sel(Register rd, Register rn, Register rm) { sel(al, rd, rn, rm); }
2993
2994  void shadd16(Condition cond, Register rd, Register rn, Register rm);
2995  void shadd16(Register rd, Register rn, Register rm) {
2996    shadd16(al, rd, rn, rm);
2997  }
2998
2999  void shadd8(Condition cond, Register rd, Register rn, Register rm);
3000  void shadd8(Register rd, Register rn, Register rm) { shadd8(al, rd, rn, rm); }
3001
3002  void shasx(Condition cond, Register rd, Register rn, Register rm);
3003  void shasx(Register rd, Register rn, Register rm) { shasx(al, rd, rn, rm); }
3004
3005  void shsax(Condition cond, Register rd, Register rn, Register rm);
3006  void shsax(Register rd, Register rn, Register rm) { shsax(al, rd, rn, rm); }
3007
3008  void shsub16(Condition cond, Register rd, Register rn, Register rm);
3009  void shsub16(Register rd, Register rn, Register rm) {
3010    shsub16(al, rd, rn, rm);
3011  }
3012
3013  void shsub8(Condition cond, Register rd, Register rn, Register rm);
3014  void shsub8(Register rd, Register rn, Register rm) { shsub8(al, rd, rn, rm); }
3015
3016  void smlabb(
3017      Condition cond, Register rd, Register rn, Register rm, Register ra);
3018  void smlabb(Register rd, Register rn, Register rm, Register ra) {
3019    smlabb(al, rd, rn, rm, ra);
3020  }
3021
3022  void smlabt(
3023      Condition cond, Register rd, Register rn, Register rm, Register ra);
3024  void smlabt(Register rd, Register rn, Register rm, Register ra) {
3025    smlabt(al, rd, rn, rm, ra);
3026  }
3027
3028  void smlad(
3029      Condition cond, Register rd, Register rn, Register rm, Register ra);
3030  void smlad(Register rd, Register rn, Register rm, Register ra) {
3031    smlad(al, rd, rn, rm, ra);
3032  }
3033
3034  void smladx(
3035      Condition cond, Register rd, Register rn, Register rm, Register ra);
3036  void smladx(Register rd, Register rn, Register rm, Register ra) {
3037    smladx(al, rd, rn, rm, ra);
3038  }
3039
3040  void smlal(
3041      Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
3042  void smlal(Register rdlo, Register rdhi, Register rn, Register rm) {
3043    smlal(al, rdlo, rdhi, rn, rm);
3044  }
3045
3046  void smlalbb(
3047      Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
3048  void smlalbb(Register rdlo, Register rdhi, Register rn, Register rm) {
3049    smlalbb(al, rdlo, rdhi, rn, rm);
3050  }
3051
3052  void smlalbt(
3053      Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
3054  void smlalbt(Register rdlo, Register rdhi, Register rn, Register rm) {
3055    smlalbt(al, rdlo, rdhi, rn, rm);
3056  }
3057
3058  void smlald(
3059      Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
3060  void smlald(Register rdlo, Register rdhi, Register rn, Register rm) {
3061    smlald(al, rdlo, rdhi, rn, rm);
3062  }
3063
3064  void smlaldx(
3065      Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
3066  void smlaldx(Register rdlo, Register rdhi, Register rn, Register rm) {
3067    smlaldx(al, rdlo, rdhi, rn, rm);
3068  }
3069
3070  void smlals(
3071      Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
3072  void smlals(Register rdlo, Register rdhi, Register rn, Register rm) {
3073    smlals(al, rdlo, rdhi, rn, rm);
3074  }
3075
3076  void smlaltb(
3077      Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
3078  void smlaltb(Register rdlo, Register rdhi, Register rn, Register rm) {
3079    smlaltb(al, rdlo, rdhi, rn, rm);
3080  }
3081
3082  void smlaltt(
3083      Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
3084  void smlaltt(Register rdlo, Register rdhi, Register rn, Register rm) {
3085    smlaltt(al, rdlo, rdhi, rn, rm);
3086  }
3087
3088  void smlatb(
3089      Condition cond, Register rd, Register rn, Register rm, Register ra);
3090  void smlatb(Register rd, Register rn, Register rm, Register ra) {
3091    smlatb(al, rd, rn, rm, ra);
3092  }
3093
3094  void smlatt(
3095      Condition cond, Register rd, Register rn, Register rm, Register ra);
3096  void smlatt(Register rd, Register rn, Register rm, Register ra) {
3097    smlatt(al, rd, rn, rm, ra);
3098  }
3099
3100  void smlawb(
3101      Condition cond, Register rd, Register rn, Register rm, Register ra);
3102  void smlawb(Register rd, Register rn, Register rm, Register ra) {
3103    smlawb(al, rd, rn, rm, ra);
3104  }
3105
3106  void smlawt(
3107      Condition cond, Register rd, Register rn, Register rm, Register ra);
3108  void smlawt(Register rd, Register rn, Register rm, Register ra) {
3109    smlawt(al, rd, rn, rm, ra);
3110  }
3111
3112  void smlsd(
3113      Condition cond, Register rd, Register rn, Register rm, Register ra);
3114  void smlsd(Register rd, Register rn, Register rm, Register ra) {
3115    smlsd(al, rd, rn, rm, ra);
3116  }
3117
3118  void smlsdx(
3119      Condition cond, Register rd, Register rn, Register rm, Register ra);
3120  void smlsdx(Register rd, Register rn, Register rm, Register ra) {
3121    smlsdx(al, rd, rn, rm, ra);
3122  }
3123
3124  void smlsld(
3125      Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
3126  void smlsld(Register rdlo, Register rdhi, Register rn, Register rm) {
3127    smlsld(al, rdlo, rdhi, rn, rm);
3128  }
3129
3130  void smlsldx(
3131      Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
3132  void smlsldx(Register rdlo, Register rdhi, Register rn, Register rm) {
3133    smlsldx(al, rdlo, rdhi, rn, rm);
3134  }
3135
3136  void smmla(
3137      Condition cond, Register rd, Register rn, Register rm, Register ra);
3138  void smmla(Register rd, Register rn, Register rm, Register ra) {
3139    smmla(al, rd, rn, rm, ra);
3140  }
3141
3142  void smmlar(
3143      Condition cond, Register rd, Register rn, Register rm, Register ra);
3144  void smmlar(Register rd, Register rn, Register rm, Register ra) {
3145    smmlar(al, rd, rn, rm, ra);
3146  }
3147
3148  void smmls(
3149      Condition cond, Register rd, Register rn, Register rm, Register ra);
3150  void smmls(Register rd, Register rn, Register rm, Register ra) {
3151    smmls(al, rd, rn, rm, ra);
3152  }
3153
3154  void smmlsr(
3155      Condition cond, Register rd, Register rn, Register rm, Register ra);
3156  void smmlsr(Register rd, Register rn, Register rm, Register ra) {
3157    smmlsr(al, rd, rn, rm, ra);
3158  }
3159
3160  void smmul(Condition cond, Register rd, Register rn, Register rm);
3161  void smmul(Register rd, Register rn, Register rm) { smmul(al, rd, rn, rm); }
3162
3163  void smmulr(Condition cond, Register rd, Register rn, Register rm);
3164  void smmulr(Register rd, Register rn, Register rm) { smmulr(al, rd, rn, rm); }
3165
3166  void smuad(Condition cond, Register rd, Register rn, Register rm);
3167  void smuad(Register rd, Register rn, Register rm) { smuad(al, rd, rn, rm); }
3168
3169  void smuadx(Condition cond, Register rd, Register rn, Register rm);
3170  void smuadx(Register rd, Register rn, Register rm) { smuadx(al, rd, rn, rm); }
3171
3172  void smulbb(Condition cond, Register rd, Register rn, Register rm);
3173  void smulbb(Register rd, Register rn, Register rm) { smulbb(al, rd, rn, rm); }
3174
3175  void smulbt(Condition cond, Register rd, Register rn, Register rm);
3176  void smulbt(Register rd, Register rn, Register rm) { smulbt(al, rd, rn, rm); }
3177
3178  void smull(
3179      Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
3180  void smull(Register rdlo, Register rdhi, Register rn, Register rm) {
3181    smull(al, rdlo, rdhi, rn, rm);
3182  }
3183
3184  void smulls(
3185      Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
3186  void smulls(Register rdlo, Register rdhi, Register rn, Register rm) {
3187    smulls(al, rdlo, rdhi, rn, rm);
3188  }
3189
3190  void smultb(Condition cond, Register rd, Register rn, Register rm);
3191  void smultb(Register rd, Register rn, Register rm) { smultb(al, rd, rn, rm); }
3192
3193  void smultt(Condition cond, Register rd, Register rn, Register rm);
3194  void smultt(Register rd, Register rn, Register rm) { smultt(al, rd, rn, rm); }
3195
3196  void smulwb(Condition cond, Register rd, Register rn, Register rm);
3197  void smulwb(Register rd, Register rn, Register rm) { smulwb(al, rd, rn, rm); }
3198
3199  void smulwt(Condition cond, Register rd, Register rn, Register rm);
3200  void smulwt(Register rd, Register rn, Register rm) { smulwt(al, rd, rn, rm); }
3201
3202  void smusd(Condition cond, Register rd, Register rn, Register rm);
3203  void smusd(Register rd, Register rn, Register rm) { smusd(al, rd, rn, rm); }
3204
3205  void smusdx(Condition cond, Register rd, Register rn, Register rm);
3206  void smusdx(Register rd, Register rn, Register rm) { smusdx(al, rd, rn, rm); }
3207
3208  void ssat(Condition cond, Register rd, uint32_t imm, const Operand& operand);
3209  void ssat(Register rd, uint32_t imm, const Operand& operand) {
3210    ssat(al, rd, imm, operand);
3211  }
3212
3213  void ssat16(Condition cond, Register rd, uint32_t imm, Register rn);
3214  void ssat16(Register rd, uint32_t imm, Register rn) {
3215    ssat16(al, rd, imm, rn);
3216  }
3217
3218  void ssax(Condition cond, Register rd, Register rn, Register rm);
3219  void ssax(Register rd, Register rn, Register rm) { ssax(al, rd, rn, rm); }
3220
3221  void ssub16(Condition cond, Register rd, Register rn, Register rm);
3222  void ssub16(Register rd, Register rn, Register rm) { ssub16(al, rd, rn, rm); }
3223
3224  void ssub8(Condition cond, Register rd, Register rn, Register rm);
3225  void ssub8(Register rd, Register rn, Register rm) { ssub8(al, rd, rn, rm); }
3226
3227  void stl(Condition cond, Register rt, const MemOperand& operand);
3228  void stl(Register rt, const MemOperand& operand) { stl(al, rt, operand); }
3229
3230  void stlb(Condition cond, Register rt, const MemOperand& operand);
3231  void stlb(Register rt, const MemOperand& operand) { stlb(al, rt, operand); }
3232
3233  void stlex(Condition cond,
3234             Register rd,
3235             Register rt,
3236             const MemOperand& operand);
3237  void stlex(Register rd, Register rt, const MemOperand& operand) {
3238    stlex(al, rd, rt, operand);
3239  }
3240
3241  void stlexb(Condition cond,
3242              Register rd,
3243              Register rt,
3244              const MemOperand& operand);
3245  void stlexb(Register rd, Register rt, const MemOperand& operand) {
3246    stlexb(al, rd, rt, operand);
3247  }
3248
3249  void stlexd(Condition cond,
3250              Register rd,
3251              Register rt,
3252              Register rt2,
3253              const MemOperand& operand);
3254  void stlexd(Register rd,
3255              Register rt,
3256              Register rt2,
3257              const MemOperand& operand) {
3258    stlexd(al, rd, rt, rt2, operand);
3259  }
3260
3261  void stlexh(Condition cond,
3262              Register rd,
3263              Register rt,
3264              const MemOperand& operand);
3265  void stlexh(Register rd, Register rt, const MemOperand& operand) {
3266    stlexh(al, rd, rt, operand);
3267  }
3268
3269  void stlh(Condition cond, Register rt, const MemOperand& operand);
3270  void stlh(Register rt, const MemOperand& operand) { stlh(al, rt, operand); }
3271
3272  void stm(Condition cond,
3273           EncodingSize size,
3274           Register rn,
3275           WriteBack write_back,
3276           RegisterList registers);
3277  void stm(Register rn, WriteBack write_back, RegisterList registers) {
3278    stm(al, Best, rn, write_back, registers);
3279  }
3280  void stm(Condition cond,
3281           Register rn,
3282           WriteBack write_back,
3283           RegisterList registers) {
3284    stm(cond, Best, rn, write_back, registers);
3285  }
3286  void stm(EncodingSize size,
3287           Register rn,
3288           WriteBack write_back,
3289           RegisterList registers) {
3290    stm(al, size, rn, write_back, registers);
3291  }
3292
3293  void stmda(Condition cond,
3294             Register rn,
3295             WriteBack write_back,
3296             RegisterList registers);
3297  void stmda(Register rn, WriteBack write_back, RegisterList registers) {
3298    stmda(al, rn, write_back, registers);
3299  }
3300
3301  void stmdb(Condition cond,
3302             EncodingSize size,
3303             Register rn,
3304             WriteBack write_back,
3305             RegisterList registers);
3306  void stmdb(Register rn, WriteBack write_back, RegisterList registers) {
3307    stmdb(al, Best, rn, write_back, registers);
3308  }
3309  void stmdb(Condition cond,
3310             Register rn,
3311             WriteBack write_back,
3312             RegisterList registers) {
3313    stmdb(cond, Best, rn, write_back, registers);
3314  }
3315  void stmdb(EncodingSize size,
3316             Register rn,
3317             WriteBack write_back,
3318             RegisterList registers) {
3319    stmdb(al, size, rn, write_back, registers);
3320  }
3321
3322  void stmea(Condition cond,
3323             EncodingSize size,
3324             Register rn,
3325             WriteBack write_back,
3326             RegisterList registers);
3327  void stmea(Register rn, WriteBack write_back, RegisterList registers) {
3328    stmea(al, Best, rn, write_back, registers);
3329  }
3330  void stmea(Condition cond,
3331             Register rn,
3332             WriteBack write_back,
3333             RegisterList registers) {
3334    stmea(cond, Best, rn, write_back, registers);
3335  }
3336  void stmea(EncodingSize size,
3337             Register rn,
3338             WriteBack write_back,
3339             RegisterList registers) {
3340    stmea(al, size, rn, write_back, registers);
3341  }
3342
3343  void stmed(Condition cond,
3344             Register rn,
3345             WriteBack write_back,
3346             RegisterList registers);
3347  void stmed(Register rn, WriteBack write_back, RegisterList registers) {
3348    stmed(al, rn, write_back, registers);
3349  }
3350
3351  void stmfa(Condition cond,
3352             Register rn,
3353             WriteBack write_back,
3354             RegisterList registers);
3355  void stmfa(Register rn, WriteBack write_back, RegisterList registers) {
3356    stmfa(al, rn, write_back, registers);
3357  }
3358
3359  void stmfd(Condition cond,
3360             Register rn,
3361             WriteBack write_back,
3362             RegisterList registers);
3363  void stmfd(Register rn, WriteBack write_back, RegisterList registers) {
3364    stmfd(al, rn, write_back, registers);
3365  }
3366
3367  void stmib(Condition cond,
3368             Register rn,
3369             WriteBack write_back,
3370             RegisterList registers);
3371  void stmib(Register rn, WriteBack write_back, RegisterList registers) {
3372    stmib(al, rn, write_back, registers);
3373  }
3374
3375  void str(Condition cond,
3376           EncodingSize size,
3377           Register rt,
3378           const MemOperand& operand);
3379  void str(Register rt, const MemOperand& operand) {
3380    str(al, Best, rt, operand);
3381  }
3382  void str(Condition cond, Register rt, const MemOperand& operand) {
3383    str(cond, Best, rt, operand);
3384  }
3385  void str(EncodingSize size, Register rt, const MemOperand& operand) {
3386    str(al, size, rt, operand);
3387  }
3388
3389  void strb(Condition cond,
3390            EncodingSize size,
3391            Register rt,
3392            const MemOperand& operand);
3393  void strb(Register rt, const MemOperand& operand) {
3394    strb(al, Best, rt, operand);
3395  }
3396  void strb(Condition cond, Register rt, const MemOperand& operand) {
3397    strb(cond, Best, rt, operand);
3398  }
3399  void strb(EncodingSize size, Register rt, const MemOperand& operand) {
3400    strb(al, size, rt, operand);
3401  }
3402
3403  void strd(Condition cond,
3404            Register rt,
3405            Register rt2,
3406            const MemOperand& operand);
3407  void strd(Register rt, Register rt2, const MemOperand& operand) {
3408    strd(al, rt, rt2, operand);
3409  }
3410
3411  void strex(Condition cond,
3412             Register rd,
3413             Register rt,
3414             const MemOperand& operand);
3415  void strex(Register rd, Register rt, const MemOperand& operand) {
3416    strex(al, rd, rt, operand);
3417  }
3418
3419  void strexb(Condition cond,
3420              Register rd,
3421              Register rt,
3422              const MemOperand& operand);
3423  void strexb(Register rd, Register rt, const MemOperand& operand) {
3424    strexb(al, rd, rt, operand);
3425  }
3426
3427  void strexd(Condition cond,
3428              Register rd,
3429              Register rt,
3430              Register rt2,
3431              const MemOperand& operand);
3432  void strexd(Register rd,
3433              Register rt,
3434              Register rt2,
3435              const MemOperand& operand) {
3436    strexd(al, rd, rt, rt2, operand);
3437  }
3438
3439  void strexh(Condition cond,
3440              Register rd,
3441              Register rt,
3442              const MemOperand& operand);
3443  void strexh(Register rd, Register rt, const MemOperand& operand) {
3444    strexh(al, rd, rt, operand);
3445  }
3446
3447  void strh(Condition cond,
3448            EncodingSize size,
3449            Register rt,
3450            const MemOperand& operand);
3451  void strh(Register rt, const MemOperand& operand) {
3452    strh(al, Best, rt, operand);
3453  }
3454  void strh(Condition cond, Register rt, const MemOperand& operand) {
3455    strh(cond, Best, rt, operand);
3456  }
3457  void strh(EncodingSize size, Register rt, const MemOperand& operand) {
3458    strh(al, size, rt, operand);
3459  }
3460
3461  void sub(Condition cond,
3462           EncodingSize size,
3463           Register rd,
3464           Register rn,
3465           const Operand& operand);
3466  void sub(Register rd, Register rn, const Operand& operand) {
3467    sub(al, Best, rd, rn, operand);
3468  }
3469  void sub(Condition cond, Register rd, Register rn, const Operand& operand) {
3470    sub(cond, Best, rd, rn, operand);
3471  }
3472  void sub(EncodingSize size,
3473           Register rd,
3474           Register rn,
3475           const Operand& operand) {
3476    sub(al, size, rd, rn, operand);
3477  }
3478
3479  void sub(Condition cond, Register rd, const Operand& operand);
3480  void sub(Register rd, const Operand& operand) { sub(al, rd, operand); }
3481
3482  void subs(Condition cond,
3483            EncodingSize size,
3484            Register rd,
3485            Register rn,
3486            const Operand& operand);
3487  void subs(Register rd, Register rn, const Operand& operand) {
3488    subs(al, Best, rd, rn, operand);
3489  }
3490  void subs(Condition cond, Register rd, Register rn, const Operand& operand) {
3491    subs(cond, Best, rd, rn, operand);
3492  }
3493  void subs(EncodingSize size,
3494            Register rd,
3495            Register rn,
3496            const Operand& operand) {
3497    subs(al, size, rd, rn, operand);
3498  }
3499
3500  void subs(Register rd, const Operand& operand);
3501
3502  void subw(Condition cond, Register rd, Register rn, const Operand& operand);
3503  void subw(Register rd, Register rn, const Operand& operand) {
3504    subw(al, rd, rn, operand);
3505  }
3506
3507  void svc(Condition cond, uint32_t imm);
3508  void svc(uint32_t imm) { svc(al, imm); }
3509
3510  void sxtab(Condition cond, Register rd, Register rn, const Operand& operand);
3511  void sxtab(Register rd, Register rn, const Operand& operand) {
3512    sxtab(al, rd, rn, operand);
3513  }
3514
3515  void sxtab16(Condition cond,
3516               Register rd,
3517               Register rn,
3518               const Operand& operand);
3519  void sxtab16(Register rd, Register rn, const Operand& operand) {
3520    sxtab16(al, rd, rn, operand);
3521  }
3522
3523  void sxtah(Condition cond, Register rd, Register rn, const Operand& operand);
3524  void sxtah(Register rd, Register rn, const Operand& operand) {
3525    sxtah(al, rd, rn, operand);
3526  }
3527
3528  void sxtb(Condition cond,
3529            EncodingSize size,
3530            Register rd,
3531            const Operand& operand);
3532  void sxtb(Register rd, const Operand& operand) {
3533    sxtb(al, Best, rd, operand);
3534  }
3535  void sxtb(Condition cond, Register rd, const Operand& operand) {
3536    sxtb(cond, Best, rd, operand);
3537  }
3538  void sxtb(EncodingSize size, Register rd, const Operand& operand) {
3539    sxtb(al, size, rd, operand);
3540  }
3541
3542  void sxtb16(Condition cond, Register rd, const Operand& operand);
3543  void sxtb16(Register rd, const Operand& operand) { sxtb16(al, rd, operand); }
3544
3545  void sxth(Condition cond,
3546            EncodingSize size,
3547            Register rd,
3548            const Operand& operand);
3549  void sxth(Register rd, const Operand& operand) {
3550    sxth(al, Best, rd, operand);
3551  }
3552  void sxth(Condition cond, Register rd, const Operand& operand) {
3553    sxth(cond, Best, rd, operand);
3554  }
3555  void sxth(EncodingSize size, Register rd, const Operand& operand) {
3556    sxth(al, size, rd, operand);
3557  }
3558
3559  void tbb(Condition cond, Register rn, Register rm);
3560  void tbb(Register rn, Register rm) { tbb(al, rn, rm); }
3561
3562  void tbh(Condition cond, Register rn, Register rm);
3563  void tbh(Register rn, Register rm) { tbh(al, rn, rm); }
3564
3565  void teq(Condition cond, Register rn, const Operand& operand);
3566  void teq(Register rn, const Operand& operand) { teq(al, rn, operand); }
3567
3568  void tst(Condition cond,
3569           EncodingSize size,
3570           Register rn,
3571           const Operand& operand);
3572  void tst(Register rn, const Operand& operand) { tst(al, Best, rn, operand); }
3573  void tst(Condition cond, Register rn, const Operand& operand) {
3574    tst(cond, Best, rn, operand);
3575  }
3576  void tst(EncodingSize size, Register rn, const Operand& operand) {
3577    tst(al, size, rn, operand);
3578  }
3579
3580  void uadd16(Condition cond, Register rd, Register rn, Register rm);
3581  void uadd16(Register rd, Register rn, Register rm) { uadd16(al, rd, rn, rm); }
3582
3583  void uadd8(Condition cond, Register rd, Register rn, Register rm);
3584  void uadd8(Register rd, Register rn, Register rm) { uadd8(al, rd, rn, rm); }
3585
3586  void uasx(Condition cond, Register rd, Register rn, Register rm);
3587  void uasx(Register rd, Register rn, Register rm) { uasx(al, rd, rn, rm); }
3588
3589  void ubfx(
3590      Condition cond, Register rd, Register rn, uint32_t lsb, uint32_t width);
3591  void ubfx(Register rd, Register rn, uint32_t lsb, uint32_t width) {
3592    ubfx(al, rd, rn, lsb, width);
3593  }
3594
3595  void udf(Condition cond, EncodingSize size, uint32_t imm);
3596  void udf(uint32_t imm) { udf(al, Best, imm); }
3597  void udf(Condition cond, uint32_t imm) { udf(cond, Best, imm); }
3598  void udf(EncodingSize size, uint32_t imm) { udf(al, size, imm); }
3599
3600  void udiv(Condition cond, Register rd, Register rn, Register rm);
3601  void udiv(Register rd, Register rn, Register rm) { udiv(al, rd, rn, rm); }
3602
3603  void uhadd16(Condition cond, Register rd, Register rn, Register rm);
3604  void uhadd16(Register rd, Register rn, Register rm) {
3605    uhadd16(al, rd, rn, rm);
3606  }
3607
3608  void uhadd8(Condition cond, Register rd, Register rn, Register rm);
3609  void uhadd8(Register rd, Register rn, Register rm) { uhadd8(al, rd, rn, rm); }
3610
3611  void uhasx(Condition cond, Register rd, Register rn, Register rm);
3612  void uhasx(Register rd, Register rn, Register rm) { uhasx(al, rd, rn, rm); }
3613
3614  void uhsax(Condition cond, Register rd, Register rn, Register rm);
3615  void uhsax(Register rd, Register rn, Register rm) { uhsax(al, rd, rn, rm); }
3616
3617  void uhsub16(Condition cond, Register rd, Register rn, Register rm);
3618  void uhsub16(Register rd, Register rn, Register rm) {
3619    uhsub16(al, rd, rn, rm);
3620  }
3621
3622  void uhsub8(Condition cond, Register rd, Register rn, Register rm);
3623  void uhsub8(Register rd, Register rn, Register rm) { uhsub8(al, rd, rn, rm); }
3624
3625  void umaal(
3626      Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
3627  void umaal(Register rdlo, Register rdhi, Register rn, Register rm) {
3628    umaal(al, rdlo, rdhi, rn, rm);
3629  }
3630
3631  void umlal(
3632      Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
3633  void umlal(Register rdlo, Register rdhi, Register rn, Register rm) {
3634    umlal(al, rdlo, rdhi, rn, rm);
3635  }
3636
3637  void umlals(
3638      Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
3639  void umlals(Register rdlo, Register rdhi, Register rn, Register rm) {
3640    umlals(al, rdlo, rdhi, rn, rm);
3641  }
3642
3643  void umull(
3644      Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
3645  void umull(Register rdlo, Register rdhi, Register rn, Register rm) {
3646    umull(al, rdlo, rdhi, rn, rm);
3647  }
3648
3649  void umulls(
3650      Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
3651  void umulls(Register rdlo, Register rdhi, Register rn, Register rm) {
3652    umulls(al, rdlo, rdhi, rn, rm);
3653  }
3654
3655  void uqadd16(Condition cond, Register rd, Register rn, Register rm);
3656  void uqadd16(Register rd, Register rn, Register rm) {
3657    uqadd16(al, rd, rn, rm);
3658  }
3659
3660  void uqadd8(Condition cond, Register rd, Register rn, Register rm);
3661  void uqadd8(Register rd, Register rn, Register rm) { uqadd8(al, rd, rn, rm); }
3662
3663  void uqasx(Condition cond, Register rd, Register rn, Register rm);
3664  void uqasx(Register rd, Register rn, Register rm) { uqasx(al, rd, rn, rm); }
3665
3666  void uqsax(Condition cond, Register rd, Register rn, Register rm);
3667  void uqsax(Register rd, Register rn, Register rm) { uqsax(al, rd, rn, rm); }
3668
3669  void uqsub16(Condition cond, Register rd, Register rn, Register rm);
3670  void uqsub16(Register rd, Register rn, Register rm) {
3671    uqsub16(al, rd, rn, rm);
3672  }
3673
3674  void uqsub8(Condition cond, Register rd, Register rn, Register rm);
3675  void uqsub8(Register rd, Register rn, Register rm) { uqsub8(al, rd, rn, rm); }
3676
3677  void usad8(Condition cond, Register rd, Register rn, Register rm);
3678  void usad8(Register rd, Register rn, Register rm) { usad8(al, rd, rn, rm); }
3679
3680  void usada8(
3681      Condition cond, Register rd, Register rn, Register rm, Register ra);
3682  void usada8(Register rd, Register rn, Register rm, Register ra) {
3683    usada8(al, rd, rn, rm, ra);
3684  }
3685
3686  void usat(Condition cond, Register rd, uint32_t imm, const Operand& operand);
3687  void usat(Register rd, uint32_t imm, const Operand& operand) {
3688    usat(al, rd, imm, operand);
3689  }
3690
3691  void usat16(Condition cond, Register rd, uint32_t imm, Register rn);
3692  void usat16(Register rd, uint32_t imm, Register rn) {
3693    usat16(al, rd, imm, rn);
3694  }
3695
3696  void usax(Condition cond, Register rd, Register rn, Register rm);
3697  void usax(Register rd, Register rn, Register rm) { usax(al, rd, rn, rm); }
3698
3699  void usub16(Condition cond, Register rd, Register rn, Register rm);
3700  void usub16(Register rd, Register rn, Register rm) { usub16(al, rd, rn, rm); }
3701
3702  void usub8(Condition cond, Register rd, Register rn, Register rm);
3703  void usub8(Register rd, Register rn, Register rm) { usub8(al, rd, rn, rm); }
3704
3705  void uxtab(Condition cond, Register rd, Register rn, const Operand& operand);
3706  void uxtab(Register rd, Register rn, const Operand& operand) {
3707    uxtab(al, rd, rn, operand);
3708  }
3709
3710  void uxtab16(Condition cond,
3711               Register rd,
3712               Register rn,
3713               const Operand& operand);
3714  void uxtab16(Register rd, Register rn, const Operand& operand) {
3715    uxtab16(al, rd, rn, operand);
3716  }
3717
3718  void uxtah(Condition cond, Register rd, Register rn, const Operand& operand);
3719  void uxtah(Register rd, Register rn, const Operand& operand) {
3720    uxtah(al, rd, rn, operand);
3721  }
3722
3723  void uxtb(Condition cond,
3724            EncodingSize size,
3725            Register rd,
3726            const Operand& operand);
3727  void uxtb(Register rd, const Operand& operand) {
3728    uxtb(al, Best, rd, operand);
3729  }
3730  void uxtb(Condition cond, Register rd, const Operand& operand) {
3731    uxtb(cond, Best, rd, operand);
3732  }
3733  void uxtb(EncodingSize size, Register rd, const Operand& operand) {
3734    uxtb(al, size, rd, operand);
3735  }
3736
3737  void uxtb16(Condition cond, Register rd, const Operand& operand);
3738  void uxtb16(Register rd, const Operand& operand) { uxtb16(al, rd, operand); }
3739
3740  void uxth(Condition cond,
3741            EncodingSize size,
3742            Register rd,
3743            const Operand& operand);
3744  void uxth(Register rd, const Operand& operand) {
3745    uxth(al, Best, rd, operand);
3746  }
3747  void uxth(Condition cond, Register rd, const Operand& operand) {
3748    uxth(cond, Best, rd, operand);
3749  }
3750  void uxth(EncodingSize size, Register rd, const Operand& operand) {
3751    uxth(al, size, rd, operand);
3752  }
3753
3754  void vaba(
3755      Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
3756  void vaba(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
3757    vaba(al, dt, rd, rn, rm);
3758  }
3759
3760  void vaba(
3761      Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
3762  void vaba(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
3763    vaba(al, dt, rd, rn, rm);
3764  }
3765
3766  void vabal(
3767      Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm);
3768  void vabal(DataType dt, QRegister rd, DRegister rn, DRegister rm) {
3769    vabal(al, dt, rd, rn, rm);
3770  }
3771
3772  void vabd(
3773      Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
3774  void vabd(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
3775    vabd(al, dt, rd, rn, rm);
3776  }
3777
3778  void vabd(
3779      Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
3780  void vabd(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
3781    vabd(al, dt, rd, rn, rm);
3782  }
3783
3784  void vabdl(
3785      Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm);
3786  void vabdl(DataType dt, QRegister rd, DRegister rn, DRegister rm) {
3787    vabdl(al, dt, rd, rn, rm);
3788  }
3789
3790  void vabs(Condition cond, DataType dt, DRegister rd, DRegister rm);
3791  void vabs(DataType dt, DRegister rd, DRegister rm) { vabs(al, dt, rd, rm); }
3792
3793  void vabs(Condition cond, DataType dt, QRegister rd, QRegister rm);
3794  void vabs(DataType dt, QRegister rd, QRegister rm) { vabs(al, dt, rd, rm); }
3795
3796  void vabs(Condition cond, DataType dt, SRegister rd, SRegister rm);
3797  void vabs(DataType dt, SRegister rd, SRegister rm) { vabs(al, dt, rd, rm); }
3798
3799  void vacge(
3800      Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
3801  void vacge(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
3802    vacge(al, dt, rd, rn, rm);
3803  }
3804
3805  void vacge(
3806      Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
3807  void vacge(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
3808    vacge(al, dt, rd, rn, rm);
3809  }
3810
3811  void vacgt(
3812      Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
3813  void vacgt(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
3814    vacgt(al, dt, rd, rn, rm);
3815  }
3816
3817  void vacgt(
3818      Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
3819  void vacgt(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
3820    vacgt(al, dt, rd, rn, rm);
3821  }
3822
3823  void vacle(
3824      Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
3825  void vacle(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
3826    vacle(al, dt, rd, rn, rm);
3827  }
3828
3829  void vacle(
3830      Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
3831  void vacle(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
3832    vacle(al, dt, rd, rn, rm);
3833  }
3834
3835  void vaclt(
3836      Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
3837  void vaclt(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
3838    vaclt(al, dt, rd, rn, rm);
3839  }
3840
3841  void vaclt(
3842      Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
3843  void vaclt(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
3844    vaclt(al, dt, rd, rn, rm);
3845  }
3846
3847  void vadd(
3848      Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
3849  void vadd(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
3850    vadd(al, dt, rd, rn, rm);
3851  }
3852
3853  void vadd(
3854      Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
3855  void vadd(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
3856    vadd(al, dt, rd, rn, rm);
3857  }
3858
3859  void vadd(
3860      Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm);
3861  void vadd(DataType dt, SRegister rd, SRegister rn, SRegister rm) {
3862    vadd(al, dt, rd, rn, rm);
3863  }
3864
3865  void vaddhn(
3866      Condition cond, DataType dt, DRegister rd, QRegister rn, QRegister rm);
3867  void vaddhn(DataType dt, DRegister rd, QRegister rn, QRegister rm) {
3868    vaddhn(al, dt, rd, rn, rm);
3869  }
3870
3871  void vaddl(
3872      Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm);
3873  void vaddl(DataType dt, QRegister rd, DRegister rn, DRegister rm) {
3874    vaddl(al, dt, rd, rn, rm);
3875  }
3876
3877  void vaddw(
3878      Condition cond, DataType dt, QRegister rd, QRegister rn, DRegister rm);
3879  void vaddw(DataType dt, QRegister rd, QRegister rn, DRegister rm) {
3880    vaddw(al, dt, rd, rn, rm);
3881  }
3882
3883  void vand(Condition cond,
3884            DataType dt,
3885            DRegister rd,
3886            DRegister rn,
3887            const DOperand& operand);
3888  void vand(DataType dt, DRegister rd, DRegister rn, const DOperand& operand) {
3889    vand(al, dt, rd, rn, operand);
3890  }
3891
3892  void vand(Condition cond,
3893            DataType dt,
3894            QRegister rd,
3895            QRegister rn,
3896            const QOperand& operand);
3897  void vand(DataType dt, QRegister rd, QRegister rn, const QOperand& operand) {
3898    vand(al, dt, rd, rn, operand);
3899  }
3900
3901  void vbic(Condition cond,
3902            DataType dt,
3903            DRegister rd,
3904            DRegister rn,
3905            const DOperand& operand);
3906  void vbic(DataType dt, DRegister rd, DRegister rn, const DOperand& operand) {
3907    vbic(al, dt, rd, rn, operand);
3908  }
3909
3910  void vbic(Condition cond,
3911            DataType dt,
3912            QRegister rd,
3913            QRegister rn,
3914            const QOperand& operand);
3915  void vbic(DataType dt, QRegister rd, QRegister rn, const QOperand& operand) {
3916    vbic(al, dt, rd, rn, operand);
3917  }
3918
3919  void vbif(
3920      Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
3921  void vbif(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
3922    vbif(al, dt, rd, rn, rm);
3923  }
3924  void vbif(DRegister rd, DRegister rn, DRegister rm) {
3925    vbif(al, kDataTypeValueNone, rd, rn, rm);
3926  }
3927  void vbif(Condition cond, DRegister rd, DRegister rn, DRegister rm) {
3928    vbif(cond, kDataTypeValueNone, rd, rn, rm);
3929  }
3930
3931  void vbif(
3932      Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
3933  void vbif(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
3934    vbif(al, dt, rd, rn, rm);
3935  }
3936  void vbif(QRegister rd, QRegister rn, QRegister rm) {
3937    vbif(al, kDataTypeValueNone, rd, rn, rm);
3938  }
3939  void vbif(Condition cond, QRegister rd, QRegister rn, QRegister rm) {
3940    vbif(cond, kDataTypeValueNone, rd, rn, rm);
3941  }
3942
3943  void vbit(
3944      Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
3945  void vbit(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
3946    vbit(al, dt, rd, rn, rm);
3947  }
3948  void vbit(DRegister rd, DRegister rn, DRegister rm) {
3949    vbit(al, kDataTypeValueNone, rd, rn, rm);
3950  }
3951  void vbit(Condition cond, DRegister rd, DRegister rn, DRegister rm) {
3952    vbit(cond, kDataTypeValueNone, rd, rn, rm);
3953  }
3954
3955  void vbit(
3956      Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
3957  void vbit(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
3958    vbit(al, dt, rd, rn, rm);
3959  }
3960  void vbit(QRegister rd, QRegister rn, QRegister rm) {
3961    vbit(al, kDataTypeValueNone, rd, rn, rm);
3962  }
3963  void vbit(Condition cond, QRegister rd, QRegister rn, QRegister rm) {
3964    vbit(cond, kDataTypeValueNone, rd, rn, rm);
3965  }
3966
3967  void vbsl(
3968      Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
3969  void vbsl(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
3970    vbsl(al, dt, rd, rn, rm);
3971  }
3972  void vbsl(DRegister rd, DRegister rn, DRegister rm) {
3973    vbsl(al, kDataTypeValueNone, rd, rn, rm);
3974  }
3975  void vbsl(Condition cond, DRegister rd, DRegister rn, DRegister rm) {
3976    vbsl(cond, kDataTypeValueNone, rd, rn, rm);
3977  }
3978
3979  void vbsl(
3980      Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
3981  void vbsl(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
3982    vbsl(al, dt, rd, rn, rm);
3983  }
3984  void vbsl(QRegister rd, QRegister rn, QRegister rm) {
3985    vbsl(al, kDataTypeValueNone, rd, rn, rm);
3986  }
3987  void vbsl(Condition cond, QRegister rd, QRegister rn, QRegister rm) {
3988    vbsl(cond, kDataTypeValueNone, rd, rn, rm);
3989  }
3990
3991  void vceq(Condition cond,
3992            DataType dt,
3993            DRegister rd,
3994            DRegister rm,
3995            const DOperand& operand);
3996  void vceq(DataType dt, DRegister rd, DRegister rm, const DOperand& operand) {
3997    vceq(al, dt, rd, rm, operand);
3998  }
3999
4000  void vceq(Condition cond,
4001            DataType dt,
4002            QRegister rd,
4003            QRegister rm,
4004            const QOperand& operand);
4005  void vceq(DataType dt, QRegister rd, QRegister rm, const QOperand& operand) {
4006    vceq(al, dt, rd, rm, operand);
4007  }
4008
4009  void vceq(
4010      Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
4011  void vceq(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
4012    vceq(al, dt, rd, rn, rm);
4013  }
4014
4015  void vceq(
4016      Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
4017  void vceq(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
4018    vceq(al, dt, rd, rn, rm);
4019  }
4020
4021  void vcge(Condition cond,
4022            DataType dt,
4023            DRegister rd,
4024            DRegister rm,
4025            const DOperand& operand);
4026  void vcge(DataType dt, DRegister rd, DRegister rm, const DOperand& operand) {
4027    vcge(al, dt, rd, rm, operand);
4028  }
4029
4030  void vcge(Condition cond,
4031            DataType dt,
4032            QRegister rd,
4033            QRegister rm,
4034            const QOperand& operand);
4035  void vcge(DataType dt, QRegister rd, QRegister rm, const QOperand& operand) {
4036    vcge(al, dt, rd, rm, operand);
4037  }
4038
4039  void vcge(
4040      Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
4041  void vcge(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
4042    vcge(al, dt, rd, rn, rm);
4043  }
4044
4045  void vcge(
4046      Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
4047  void vcge(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
4048    vcge(al, dt, rd, rn, rm);
4049  }
4050
4051  void vcgt(Condition cond,
4052            DataType dt,
4053            DRegister rd,
4054            DRegister rm,
4055            const DOperand& operand);
4056  void vcgt(DataType dt, DRegister rd, DRegister rm, const DOperand& operand) {
4057    vcgt(al, dt, rd, rm, operand);
4058  }
4059
4060  void vcgt(Condition cond,
4061            DataType dt,
4062            QRegister rd,
4063            QRegister rm,
4064            const QOperand& operand);
4065  void vcgt(DataType dt, QRegister rd, QRegister rm, const QOperand& operand) {
4066    vcgt(al, dt, rd, rm, operand);
4067  }
4068
4069  void vcgt(
4070      Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
4071  void vcgt(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
4072    vcgt(al, dt, rd, rn, rm);
4073  }
4074
4075  void vcgt(
4076      Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
4077  void vcgt(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
4078    vcgt(al, dt, rd, rn, rm);
4079  }
4080
4081  void vcle(Condition cond,
4082            DataType dt,
4083            DRegister rd,
4084            DRegister rm,
4085            const DOperand& operand);
4086  void vcle(DataType dt, DRegister rd, DRegister rm, const DOperand& operand) {
4087    vcle(al, dt, rd, rm, operand);
4088  }
4089
4090  void vcle(Condition cond,
4091            DataType dt,
4092            QRegister rd,
4093            QRegister rm,
4094            const QOperand& operand);
4095  void vcle(DataType dt, QRegister rd, QRegister rm, const QOperand& operand) {
4096    vcle(al, dt, rd, rm, operand);
4097  }
4098
4099  void vcle(
4100      Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
4101  void vcle(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
4102    vcle(al, dt, rd, rn, rm);
4103  }
4104
4105  void vcle(
4106      Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
4107  void vcle(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
4108    vcle(al, dt, rd, rn, rm);
4109  }
4110
4111  void vcls(Condition cond, DataType dt, DRegister rd, DRegister rm);
4112  void vcls(DataType dt, DRegister rd, DRegister rm) { vcls(al, dt, rd, rm); }
4113
4114  void vcls(Condition cond, DataType dt, QRegister rd, QRegister rm);
4115  void vcls(DataType dt, QRegister rd, QRegister rm) { vcls(al, dt, rd, rm); }
4116
4117  void vclt(Condition cond,
4118            DataType dt,
4119            DRegister rd,
4120            DRegister rm,
4121            const DOperand& operand);
4122  void vclt(DataType dt, DRegister rd, DRegister rm, const DOperand& operand) {
4123    vclt(al, dt, rd, rm, operand);
4124  }
4125
4126  void vclt(Condition cond,
4127            DataType dt,
4128            QRegister rd,
4129            QRegister rm,
4130            const QOperand& operand);
4131  void vclt(DataType dt, QRegister rd, QRegister rm, const QOperand& operand) {
4132    vclt(al, dt, rd, rm, operand);
4133  }
4134
4135  void vclt(
4136      Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
4137  void vclt(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
4138    vclt(al, dt, rd, rn, rm);
4139  }
4140
4141  void vclt(
4142      Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
4143  void vclt(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
4144    vclt(al, dt, rd, rn, rm);
4145  }
4146
4147  void vclz(Condition cond, DataType dt, DRegister rd, DRegister rm);
4148  void vclz(DataType dt, DRegister rd, DRegister rm) { vclz(al, dt, rd, rm); }
4149
4150  void vclz(Condition cond, DataType dt, QRegister rd, QRegister rm);
4151  void vclz(DataType dt, QRegister rd, QRegister rm) { vclz(al, dt, rd, rm); }
4152
4153  void vcmp(Condition cond, DataType dt, SRegister rd, const SOperand& operand);
4154  void vcmp(DataType dt, SRegister rd, const SOperand& operand) {
4155    vcmp(al, dt, rd, operand);
4156  }
4157
4158  void vcmp(Condition cond, DataType dt, DRegister rd, const DOperand& operand);
4159  void vcmp(DataType dt, DRegister rd, const DOperand& operand) {
4160    vcmp(al, dt, rd, operand);
4161  }
4162
4163  void vcmpe(Condition cond,
4164             DataType dt,
4165             SRegister rd,
4166             const SOperand& operand);
4167  void vcmpe(DataType dt, SRegister rd, const SOperand& operand) {
4168    vcmpe(al, dt, rd, operand);
4169  }
4170
4171  void vcmpe(Condition cond,
4172             DataType dt,
4173             DRegister rd,
4174             const DOperand& operand);
4175  void vcmpe(DataType dt, DRegister rd, const DOperand& operand) {
4176    vcmpe(al, dt, rd, operand);
4177  }
4178
4179  void vcnt(Condition cond, DataType dt, DRegister rd, DRegister rm);
4180  void vcnt(DataType dt, DRegister rd, DRegister rm) { vcnt(al, dt, rd, rm); }
4181
4182  void vcnt(Condition cond, DataType dt, QRegister rd, QRegister rm);
4183  void vcnt(DataType dt, QRegister rd, QRegister rm) { vcnt(al, dt, rd, rm); }
4184
4185  void vcvt(
4186      Condition cond, DataType dt1, DataType dt2, DRegister rd, SRegister rm);
4187  void vcvt(DataType dt1, DataType dt2, DRegister rd, SRegister rm) {
4188    vcvt(al, dt1, dt2, rd, rm);
4189  }
4190
4191  void vcvt(
4192      Condition cond, DataType dt1, DataType dt2, SRegister rd, DRegister rm);
4193  void vcvt(DataType dt1, DataType dt2, SRegister rd, DRegister rm) {
4194    vcvt(al, dt1, dt2, rd, rm);
4195  }
4196
4197  void vcvt(Condition cond,
4198            DataType dt1,
4199            DataType dt2,
4200            DRegister rd,
4201            DRegister rm,
4202            int32_t fbits);
4203  void vcvt(
4204      DataType dt1, DataType dt2, DRegister rd, DRegister rm, int32_t fbits) {
4205    vcvt(al, dt1, dt2, rd, rm, fbits);
4206  }
4207
4208  void vcvt(Condition cond,
4209            DataType dt1,
4210            DataType dt2,
4211            QRegister rd,
4212            QRegister rm,
4213            int32_t fbits);
4214  void vcvt(
4215      DataType dt1, DataType dt2, QRegister rd, QRegister rm, int32_t fbits) {
4216    vcvt(al, dt1, dt2, rd, rm, fbits);
4217  }
4218
4219  void vcvt(Condition cond,
4220            DataType dt1,
4221            DataType dt2,
4222            SRegister rd,
4223            SRegister rm,
4224            int32_t fbits);
4225  void vcvt(
4226      DataType dt1, DataType dt2, SRegister rd, SRegister rm, int32_t fbits) {
4227    vcvt(al, dt1, dt2, rd, rm, fbits);
4228  }
4229
4230  void vcvt(
4231      Condition cond, DataType dt1, DataType dt2, DRegister rd, DRegister rm);
4232  void vcvt(DataType dt1, DataType dt2, DRegister rd, DRegister rm) {
4233    vcvt(al, dt1, dt2, rd, rm);
4234  }
4235
4236  void vcvt(
4237      Condition cond, DataType dt1, DataType dt2, QRegister rd, QRegister rm);
4238  void vcvt(DataType dt1, DataType dt2, QRegister rd, QRegister rm) {
4239    vcvt(al, dt1, dt2, rd, rm);
4240  }
4241
4242  void vcvt(
4243      Condition cond, DataType dt1, DataType dt2, DRegister rd, QRegister rm);
4244  void vcvt(DataType dt1, DataType dt2, DRegister rd, QRegister rm) {
4245    vcvt(al, dt1, dt2, rd, rm);
4246  }
4247
4248  void vcvt(
4249      Condition cond, DataType dt1, DataType dt2, QRegister rd, DRegister rm);
4250  void vcvt(DataType dt1, DataType dt2, QRegister rd, DRegister rm) {
4251    vcvt(al, dt1, dt2, rd, rm);
4252  }
4253
4254  void vcvt(
4255      Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm);
4256  void vcvt(DataType dt1, DataType dt2, SRegister rd, SRegister rm) {
4257    vcvt(al, dt1, dt2, rd, rm);
4258  }
4259
4260  void vcvta(DataType dt1, DataType dt2, DRegister rd, DRegister rm);
4261
4262  void vcvta(DataType dt1, DataType dt2, QRegister rd, QRegister rm);
4263
4264  void vcvta(DataType dt1, DataType dt2, SRegister rd, SRegister rm);
4265
4266  void vcvta(DataType dt1, DataType dt2, SRegister rd, DRegister rm);
4267
4268  void vcvtb(
4269      Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm);
4270  void vcvtb(DataType dt1, DataType dt2, SRegister rd, SRegister rm) {
4271    vcvtb(al, dt1, dt2, rd, rm);
4272  }
4273
4274  void vcvtb(
4275      Condition cond, DataType dt1, DataType dt2, DRegister rd, SRegister rm);
4276  void vcvtb(DataType dt1, DataType dt2, DRegister rd, SRegister rm) {
4277    vcvtb(al, dt1, dt2, rd, rm);
4278  }
4279
4280  void vcvtb(
4281      Condition cond, DataType dt1, DataType dt2, SRegister rd, DRegister rm);
4282  void vcvtb(DataType dt1, DataType dt2, SRegister rd, DRegister rm) {
4283    vcvtb(al, dt1, dt2, rd, rm);
4284  }
4285
4286  void vcvtm(DataType dt1, DataType dt2, DRegister rd, DRegister rm);
4287
4288  void vcvtm(DataType dt1, DataType dt2, QRegister rd, QRegister rm);
4289
4290  void vcvtm(DataType dt1, DataType dt2, SRegister rd, SRegister rm);
4291
4292  void vcvtm(DataType dt1, DataType dt2, SRegister rd, DRegister rm);
4293
4294  void vcvtn(DataType dt1, DataType dt2, DRegister rd, DRegister rm);
4295
4296  void vcvtn(DataType dt1, DataType dt2, QRegister rd, QRegister rm);
4297
4298  void vcvtn(DataType dt1, DataType dt2, SRegister rd, SRegister rm);
4299
4300  void vcvtn(DataType dt1, DataType dt2, SRegister rd, DRegister rm);
4301
4302  void vcvtp(DataType dt1, DataType dt2, DRegister rd, DRegister rm);
4303
4304  void vcvtp(DataType dt1, DataType dt2, QRegister rd, QRegister rm);
4305
4306  void vcvtp(DataType dt1, DataType dt2, SRegister rd, SRegister rm);
4307
4308  void vcvtp(DataType dt1, DataType dt2, SRegister rd, DRegister rm);
4309
4310  void vcvtr(
4311      Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm);
4312  void vcvtr(DataType dt1, DataType dt2, SRegister rd, SRegister rm) {
4313    vcvtr(al, dt1, dt2, rd, rm);
4314  }
4315
4316  void vcvtr(
4317      Condition cond, DataType dt1, DataType dt2, SRegister rd, DRegister rm);
4318  void vcvtr(DataType dt1, DataType dt2, SRegister rd, DRegister rm) {
4319    vcvtr(al, dt1, dt2, rd, rm);
4320  }
4321
4322  void vcvtt(
4323      Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm);
4324  void vcvtt(DataType dt1, DataType dt2, SRegister rd, SRegister rm) {
4325    vcvtt(al, dt1, dt2, rd, rm);
4326  }
4327
4328  void vcvtt(
4329      Condition cond, DataType dt1, DataType dt2, DRegister rd, SRegister rm);
4330  void vcvtt(DataType dt1, DataType dt2, DRegister rd, SRegister rm) {
4331    vcvtt(al, dt1, dt2, rd, rm);
4332  }
4333
4334  void vcvtt(
4335      Condition cond, DataType dt1, DataType dt2, SRegister rd, DRegister rm);
4336  void vcvtt(DataType dt1, DataType dt2, SRegister rd, DRegister rm) {
4337    vcvtt(al, dt1, dt2, rd, rm);
4338  }
4339
4340  void vdiv(
4341      Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm);
4342  void vdiv(DataType dt, SRegister rd, SRegister rn, SRegister rm) {
4343    vdiv(al, dt, rd, rn, rm);
4344  }
4345
4346  void vdiv(
4347      Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
4348  void vdiv(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
4349    vdiv(al, dt, rd, rn, rm);
4350  }
4351
4352  void vdup(Condition cond, DataType dt, QRegister rd, Register rt);
4353  void vdup(DataType dt, QRegister rd, Register rt) { vdup(al, dt, rd, rt); }
4354
4355  void vdup(Condition cond, DataType dt, DRegister rd, Register rt);
4356  void vdup(DataType dt, DRegister rd, Register rt) { vdup(al, dt, rd, rt); }
4357
4358  void vdup(Condition cond, DataType dt, DRegister rd, DRegisterLane rm);
4359  void vdup(DataType dt, DRegister rd, DRegisterLane rm) {
4360    vdup(al, dt, rd, rm);
4361  }
4362
4363  void vdup(Condition cond, DataType dt, QRegister rd, DRegisterLane rm);
4364  void vdup(DataType dt, QRegister rd, DRegisterLane rm) {
4365    vdup(al, dt, rd, rm);
4366  }
4367
4368  void veor(
4369      Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
4370  void veor(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
4371    veor(al, dt, rd, rn, rm);
4372  }
4373  void veor(DRegister rd, DRegister rn, DRegister rm) {
4374    veor(al, kDataTypeValueNone, rd, rn, rm);
4375  }
4376  void veor(Condition cond, DRegister rd, DRegister rn, DRegister rm) {
4377    veor(cond, kDataTypeValueNone, rd, rn, rm);
4378  }
4379
4380  void veor(
4381      Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
4382  void veor(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
4383    veor(al, dt, rd, rn, rm);
4384  }
4385  void veor(QRegister rd, QRegister rn, QRegister rm) {
4386    veor(al, kDataTypeValueNone, rd, rn, rm);
4387  }
4388  void veor(Condition cond, QRegister rd, QRegister rn, QRegister rm) {
4389    veor(cond, kDataTypeValueNone, rd, rn, rm);
4390  }
4391
4392  void vext(Condition cond,
4393            DataType dt,
4394            DRegister rd,
4395            DRegister rn,
4396            DRegister rm,
4397            const DOperand& operand);
4398  void vext(DataType dt,
4399            DRegister rd,
4400            DRegister rn,
4401            DRegister rm,
4402            const DOperand& operand) {
4403    vext(al, dt, rd, rn, rm, operand);
4404  }
4405
4406  void vext(Condition cond,
4407            DataType dt,
4408            QRegister rd,
4409            QRegister rn,
4410            QRegister rm,
4411            const QOperand& operand);
4412  void vext(DataType dt,
4413            QRegister rd,
4414            QRegister rn,
4415            QRegister rm,
4416            const QOperand& operand) {
4417    vext(al, dt, rd, rn, rm, operand);
4418  }
4419
4420  void vfma(
4421      Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
4422  void vfma(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
4423    vfma(al, dt, rd, rn, rm);
4424  }
4425
4426  void vfma(
4427      Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
4428  void vfma(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
4429    vfma(al, dt, rd, rn, rm);
4430  }
4431
4432  void vfma(
4433      Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm);
4434  void vfma(DataType dt, SRegister rd, SRegister rn, SRegister rm) {
4435    vfma(al, dt, rd, rn, rm);
4436  }
4437
4438  void vfms(
4439      Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
4440  void vfms(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
4441    vfms(al, dt, rd, rn, rm);
4442  }
4443
4444  void vfms(
4445      Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
4446  void vfms(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
4447    vfms(al, dt, rd, rn, rm);
4448  }
4449
4450  void vfms(
4451      Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm);
4452  void vfms(DataType dt, SRegister rd, SRegister rn, SRegister rm) {
4453    vfms(al, dt, rd, rn, rm);
4454  }
4455
4456  void vfnma(
4457      Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm);
4458  void vfnma(DataType dt, SRegister rd, SRegister rn, SRegister rm) {
4459    vfnma(al, dt, rd, rn, rm);
4460  }
4461
4462  void vfnma(
4463      Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
4464  void vfnma(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
4465    vfnma(al, dt, rd, rn, rm);
4466  }
4467
4468  void vfnms(
4469      Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm);
4470  void vfnms(DataType dt, SRegister rd, SRegister rn, SRegister rm) {
4471    vfnms(al, dt, rd, rn, rm);
4472  }
4473
4474  void vfnms(
4475      Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
4476  void vfnms(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
4477    vfnms(al, dt, rd, rn, rm);
4478  }
4479
4480  void vhadd(
4481      Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
4482  void vhadd(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
4483    vhadd(al, dt, rd, rn, rm);
4484  }
4485
4486  void vhadd(
4487      Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
4488  void vhadd(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
4489    vhadd(al, dt, rd, rn, rm);
4490  }
4491
4492  void vhsub(
4493      Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
4494  void vhsub(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
4495    vhsub(al, dt, rd, rn, rm);
4496  }
4497
4498  void vhsub(
4499      Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
4500  void vhsub(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
4501    vhsub(al, dt, rd, rn, rm);
4502  }
4503
4504  void vld1(Condition cond,
4505            DataType dt,
4506            const NeonRegisterList& nreglist,
4507            const AlignedMemOperand& operand);
4508  void vld1(DataType dt,
4509            const NeonRegisterList& nreglist,
4510            const AlignedMemOperand& operand) {
4511    vld1(al, dt, nreglist, operand);
4512  }
4513
4514  void vld2(Condition cond,
4515            DataType dt,
4516            const NeonRegisterList& nreglist,
4517            const AlignedMemOperand& operand);
4518  void vld2(DataType dt,
4519            const NeonRegisterList& nreglist,
4520            const AlignedMemOperand& operand) {
4521    vld2(al, dt, nreglist, operand);
4522  }
4523
4524  void vld3(Condition cond,
4525            DataType dt,
4526            const NeonRegisterList& nreglist,
4527            const AlignedMemOperand& operand);
4528  void vld3(DataType dt,
4529            const NeonRegisterList& nreglist,
4530            const AlignedMemOperand& operand) {
4531    vld3(al, dt, nreglist, operand);
4532  }
4533
4534  void vld3(Condition cond,
4535            DataType dt,
4536            const NeonRegisterList& nreglist,
4537            const MemOperand& operand);
4538  void vld3(DataType dt,
4539            const NeonRegisterList& nreglist,
4540            const MemOperand& operand) {
4541    vld3(al, dt, nreglist, operand);
4542  }
4543
4544  void vld4(Condition cond,
4545            DataType dt,
4546            const NeonRegisterList& nreglist,
4547            const AlignedMemOperand& operand);
4548  void vld4(DataType dt,
4549            const NeonRegisterList& nreglist,
4550            const AlignedMemOperand& operand) {
4551    vld4(al, dt, nreglist, operand);
4552  }
4553
4554  void vldm(Condition cond,
4555            DataType dt,
4556            Register rn,
4557            WriteBack write_back,
4558            DRegisterList dreglist);
4559  void vldm(DataType dt,
4560            Register rn,
4561            WriteBack write_back,
4562            DRegisterList dreglist) {
4563    vldm(al, dt, rn, write_back, dreglist);
4564  }
4565  void vldm(Register rn, WriteBack write_back, DRegisterList dreglist) {
4566    vldm(al, kDataTypeValueNone, rn, write_back, dreglist);
4567  }
4568  void vldm(Condition cond,
4569            Register rn,
4570            WriteBack write_back,
4571            DRegisterList dreglist) {
4572    vldm(cond, kDataTypeValueNone, rn, write_back, dreglist);
4573  }
4574
4575  void vldm(Condition cond,
4576            DataType dt,
4577            Register rn,
4578            WriteBack write_back,
4579            SRegisterList sreglist);
4580  void vldm(DataType dt,
4581            Register rn,
4582            WriteBack write_back,
4583            SRegisterList sreglist) {
4584    vldm(al, dt, rn, write_back, sreglist);
4585  }
4586  void vldm(Register rn, WriteBack write_back, SRegisterList sreglist) {
4587    vldm(al, kDataTypeValueNone, rn, write_back, sreglist);
4588  }
4589  void vldm(Condition cond,
4590            Register rn,
4591            WriteBack write_back,
4592            SRegisterList sreglist) {
4593    vldm(cond, kDataTypeValueNone, rn, write_back, sreglist);
4594  }
4595
4596  void vldmdb(Condition cond,
4597              DataType dt,
4598              Register rn,
4599              WriteBack write_back,
4600              DRegisterList dreglist);
4601  void vldmdb(DataType dt,
4602              Register rn,
4603              WriteBack write_back,
4604              DRegisterList dreglist) {
4605    vldmdb(al, dt, rn, write_back, dreglist);
4606  }
4607  void vldmdb(Register rn, WriteBack write_back, DRegisterList dreglist) {
4608    vldmdb(al, kDataTypeValueNone, rn, write_back, dreglist);
4609  }
4610  void vldmdb(Condition cond,
4611              Register rn,
4612              WriteBack write_back,
4613              DRegisterList dreglist) {
4614    vldmdb(cond, kDataTypeValueNone, rn, write_back, dreglist);
4615  }
4616
4617  void vldmdb(Condition cond,
4618              DataType dt,
4619              Register rn,
4620              WriteBack write_back,
4621              SRegisterList sreglist);
4622  void vldmdb(DataType dt,
4623              Register rn,
4624              WriteBack write_back,
4625              SRegisterList sreglist) {
4626    vldmdb(al, dt, rn, write_back, sreglist);
4627  }
4628  void vldmdb(Register rn, WriteBack write_back, SRegisterList sreglist) {
4629    vldmdb(al, kDataTypeValueNone, rn, write_back, sreglist);
4630  }
4631  void vldmdb(Condition cond,
4632              Register rn,
4633              WriteBack write_back,
4634              SRegisterList sreglist) {
4635    vldmdb(cond, kDataTypeValueNone, rn, write_back, sreglist);
4636  }
4637
4638  void vldmia(Condition cond,
4639              DataType dt,
4640              Register rn,
4641              WriteBack write_back,
4642              DRegisterList dreglist);
4643  void vldmia(DataType dt,
4644              Register rn,
4645              WriteBack write_back,
4646              DRegisterList dreglist) {
4647    vldmia(al, dt, rn, write_back, dreglist);
4648  }
4649  void vldmia(Register rn, WriteBack write_back, DRegisterList dreglist) {
4650    vldmia(al, kDataTypeValueNone, rn, write_back, dreglist);
4651  }
4652  void vldmia(Condition cond,
4653              Register rn,
4654              WriteBack write_back,
4655              DRegisterList dreglist) {
4656    vldmia(cond, kDataTypeValueNone, rn, write_back, dreglist);
4657  }
4658
4659  void vldmia(Condition cond,
4660              DataType dt,
4661              Register rn,
4662              WriteBack write_back,
4663              SRegisterList sreglist);
4664  void vldmia(DataType dt,
4665              Register rn,
4666              WriteBack write_back,
4667              SRegisterList sreglist) {
4668    vldmia(al, dt, rn, write_back, sreglist);
4669  }
4670  void vldmia(Register rn, WriteBack write_back, SRegisterList sreglist) {
4671    vldmia(al, kDataTypeValueNone, rn, write_back, sreglist);
4672  }
4673  void vldmia(Condition cond,
4674              Register rn,
4675              WriteBack write_back,
4676              SRegisterList sreglist) {
4677    vldmia(cond, kDataTypeValueNone, rn, write_back, sreglist);
4678  }
4679
4680  void vldr(Condition cond, DataType dt, DRegister rd, Location* location);
4681  bool vldr_info(Condition cond,
4682                 DataType dt,
4683                 DRegister rd,
4684                 Location* location,
4685                 const struct ReferenceInfo** info);
4686  void vldr(DataType dt, DRegister rd, Location* location) {
4687    vldr(al, dt, rd, location);
4688  }
4689  void vldr(DRegister rd, Location* location) {
4690    vldr(al, Untyped64, rd, location);
4691  }
4692  void vldr(Condition cond, DRegister rd, Location* location) {
4693    vldr(cond, Untyped64, rd, location);
4694  }
4695
4696  void vldr(Condition cond,
4697            DataType dt,
4698            DRegister rd,
4699            const MemOperand& operand);
4700  void vldr(DataType dt, DRegister rd, const MemOperand& operand) {
4701    vldr(al, dt, rd, operand);
4702  }
4703  void vldr(DRegister rd, const MemOperand& operand) {
4704    vldr(al, Untyped64, rd, operand);
4705  }
4706  void vldr(Condition cond, DRegister rd, const MemOperand& operand) {
4707    vldr(cond, Untyped64, rd, operand);
4708  }
4709
4710  void vldr(Condition cond, DataType dt, SRegister rd, Location* location);
4711  bool vldr_info(Condition cond,
4712                 DataType dt,
4713                 SRegister rd,
4714                 Location* location,
4715                 const struct ReferenceInfo** info);
4716  void vldr(DataType dt, SRegister rd, Location* location) {
4717    vldr(al, dt, rd, location);
4718  }
4719  void vldr(SRegister rd, Location* location) {
4720    vldr(al, Untyped32, rd, location);
4721  }
4722  void vldr(Condition cond, SRegister rd, Location* location) {
4723    vldr(cond, Untyped32, rd, location);
4724  }
4725
4726  void vldr(Condition cond,
4727            DataType dt,
4728            SRegister rd,
4729            const MemOperand& operand);
4730  void vldr(DataType dt, SRegister rd, const MemOperand& operand) {
4731    vldr(al, dt, rd, operand);
4732  }
4733  void vldr(SRegister rd, const MemOperand& operand) {
4734    vldr(al, Untyped32, rd, operand);
4735  }
4736  void vldr(Condition cond, SRegister rd, const MemOperand& operand) {
4737    vldr(cond, Untyped32, rd, operand);
4738  }
4739
4740  void vmax(
4741      Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
4742  void vmax(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
4743    vmax(al, dt, rd, rn, rm);
4744  }
4745
4746  void vmax(
4747      Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
4748  void vmax(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
4749    vmax(al, dt, rd, rn, rm);
4750  }
4751
4752  void vmaxnm(DataType dt, DRegister rd, DRegister rn, DRegister rm);
4753
4754  void vmaxnm(DataType dt, QRegister rd, QRegister rn, QRegister rm);
4755
4756  void vmaxnm(DataType dt, SRegister rd, SRegister rn, SRegister rm);
4757
4758  void vmin(
4759      Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
4760  void vmin(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
4761    vmin(al, dt, rd, rn, rm);
4762  }
4763
4764  void vmin(
4765      Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
4766  void vmin(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
4767    vmin(al, dt, rd, rn, rm);
4768  }
4769
4770  void vminnm(DataType dt, DRegister rd, DRegister rn, DRegister rm);
4771
4772  void vminnm(DataType dt, QRegister rd, QRegister rn, QRegister rm);
4773
4774  void vminnm(DataType dt, SRegister rd, SRegister rn, SRegister rm);
4775
4776  void vmla(Condition cond,
4777            DataType dt,
4778            DRegister rd,
4779            DRegister rn,
4780            DRegisterLane rm);
4781  void vmla(DataType dt, DRegister rd, DRegister rn, DRegisterLane rm) {
4782    vmla(al, dt, rd, rn, rm);
4783  }
4784
4785  void vmla(Condition cond,
4786            DataType dt,
4787            QRegister rd,
4788            QRegister rn,
4789            DRegisterLane rm);
4790  void vmla(DataType dt, QRegister rd, QRegister rn, DRegisterLane rm) {
4791    vmla(al, dt, rd, rn, rm);
4792  }
4793
4794  void vmla(
4795      Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
4796  void vmla(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
4797    vmla(al, dt, rd, rn, rm);
4798  }
4799
4800  void vmla(
4801      Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
4802  void vmla(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
4803    vmla(al, dt, rd, rn, rm);
4804  }
4805
4806  void vmla(
4807      Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm);
4808  void vmla(DataType dt, SRegister rd, SRegister rn, SRegister rm) {
4809    vmla(al, dt, rd, rn, rm);
4810  }
4811
4812  void vmlal(Condition cond,
4813             DataType dt,
4814             QRegister rd,
4815             DRegister rn,
4816             DRegisterLane rm);
4817  void vmlal(DataType dt, QRegister rd, DRegister rn, DRegisterLane rm) {
4818    vmlal(al, dt, rd, rn, rm);
4819  }
4820
4821  void vmlal(
4822      Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm);
4823  void vmlal(DataType dt, QRegister rd, DRegister rn, DRegister rm) {
4824    vmlal(al, dt, rd, rn, rm);
4825  }
4826
4827  void vmls(Condition cond,
4828            DataType dt,
4829            DRegister rd,
4830            DRegister rn,
4831            DRegisterLane rm);
4832  void vmls(DataType dt, DRegister rd, DRegister rn, DRegisterLane rm) {
4833    vmls(al, dt, rd, rn, rm);
4834  }
4835
4836  void vmls(Condition cond,
4837            DataType dt,
4838            QRegister rd,
4839            QRegister rn,
4840            DRegisterLane rm);
4841  void vmls(DataType dt, QRegister rd, QRegister rn, DRegisterLane rm) {
4842    vmls(al, dt, rd, rn, rm);
4843  }
4844
4845  void vmls(
4846      Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
4847  void vmls(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
4848    vmls(al, dt, rd, rn, rm);
4849  }
4850
4851  void vmls(
4852      Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
4853  void vmls(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
4854    vmls(al, dt, rd, rn, rm);
4855  }
4856
4857  void vmls(
4858      Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm);
4859  void vmls(DataType dt, SRegister rd, SRegister rn, SRegister rm) {
4860    vmls(al, dt, rd, rn, rm);
4861  }
4862
4863  void vmlsl(Condition cond,
4864             DataType dt,
4865             QRegister rd,
4866             DRegister rn,
4867             DRegisterLane rm);
4868  void vmlsl(DataType dt, QRegister rd, DRegister rn, DRegisterLane rm) {
4869    vmlsl(al, dt, rd, rn, rm);
4870  }
4871
4872  void vmlsl(
4873      Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm);
4874  void vmlsl(DataType dt, QRegister rd, DRegister rn, DRegister rm) {
4875    vmlsl(al, dt, rd, rn, rm);
4876  }
4877
4878  void vmov(Condition cond, Register rt, SRegister rn);
4879  void vmov(Register rt, SRegister rn) { vmov(al, rt, rn); }
4880
4881  void vmov(Condition cond, SRegister rn, Register rt);
4882  void vmov(SRegister rn, Register rt) { vmov(al, rn, rt); }
4883
4884  void vmov(Condition cond, Register rt, Register rt2, DRegister rm);
4885  void vmov(Register rt, Register rt2, DRegister rm) { vmov(al, rt, rt2, rm); }
4886
4887  void vmov(Condition cond, DRegister rm, Register rt, Register rt2);
4888  void vmov(DRegister rm, Register rt, Register rt2) { vmov(al, rm, rt, rt2); }
4889
4890  void vmov(
4891      Condition cond, Register rt, Register rt2, SRegister rm, SRegister rm1);
4892  void vmov(Register rt, Register rt2, SRegister rm, SRegister rm1) {
4893    vmov(al, rt, rt2, rm, rm1);
4894  }
4895
4896  void vmov(
4897      Condition cond, SRegister rm, SRegister rm1, Register rt, Register rt2);
4898  void vmov(SRegister rm, SRegister rm1, Register rt, Register rt2) {
4899    vmov(al, rm, rm1, rt, rt2);
4900  }
4901
4902  void vmov(Condition cond, DataType dt, DRegisterLane rd, Register rt);
4903  void vmov(DataType dt, DRegisterLane rd, Register rt) {
4904    vmov(al, dt, rd, rt);
4905  }
4906  void vmov(DRegisterLane rd, Register rt) {
4907    vmov(al, kDataTypeValueNone, rd, rt);
4908  }
4909  void vmov(Condition cond, DRegisterLane rd, Register rt) {
4910    vmov(cond, kDataTypeValueNone, rd, rt);
4911  }
4912
4913  void vmov(Condition cond, DataType dt, DRegister rd, const DOperand& operand);
4914  void vmov(DataType dt, DRegister rd, const DOperand& operand) {
4915    vmov(al, dt, rd, operand);
4916  }
4917
4918  void vmov(Condition cond, DataType dt, QRegister rd, const QOperand& operand);
4919  void vmov(DataType dt, QRegister rd, const QOperand& operand) {
4920    vmov(al, dt, rd, operand);
4921  }
4922
4923  void vmov(Condition cond, DataType dt, SRegister rd, const SOperand& operand);
4924  void vmov(DataType dt, SRegister rd, const SOperand& operand) {
4925    vmov(al, dt, rd, operand);
4926  }
4927
4928  void vmov(Condition cond, DataType dt, Register rt, DRegisterLane rn);
4929  void vmov(DataType dt, Register rt, DRegisterLane rn) {
4930    vmov(al, dt, rt, rn);
4931  }
4932  void vmov(Register rt, DRegisterLane rn) {
4933    vmov(al, kDataTypeValueNone, rt, rn);
4934  }
4935  void vmov(Condition cond, Register rt, DRegisterLane rn) {
4936    vmov(cond, kDataTypeValueNone, rt, rn);
4937  }
4938
4939  void vmovl(Condition cond, DataType dt, QRegister rd, DRegister rm);
4940  void vmovl(DataType dt, QRegister rd, DRegister rm) { vmovl(al, dt, rd, rm); }
4941
4942  void vmovn(Condition cond, DataType dt, DRegister rd, QRegister rm);
4943  void vmovn(DataType dt, DRegister rd, QRegister rm) { vmovn(al, dt, rd, rm); }
4944
4945  void vmrs(Condition cond, RegisterOrAPSR_nzcv rt, SpecialFPRegister spec_reg);
4946  void vmrs(RegisterOrAPSR_nzcv rt, SpecialFPRegister spec_reg) {
4947    vmrs(al, rt, spec_reg);
4948  }
4949
4950  void vmsr(Condition cond, SpecialFPRegister spec_reg, Register rt);
4951  void vmsr(SpecialFPRegister spec_reg, Register rt) { vmsr(al, spec_reg, rt); }
4952
4953  void vmul(Condition cond,
4954            DataType dt,
4955            DRegister rd,
4956            DRegister rn,
4957            DRegister dm,
4958            unsigned index);
4959  void vmul(
4960      DataType dt, DRegister rd, DRegister rn, DRegister dm, unsigned index) {
4961    vmul(al, dt, rd, rn, dm, index);
4962  }
4963
4964  void vmul(Condition cond,
4965            DataType dt,
4966            QRegister rd,
4967            QRegister rn,
4968            DRegister dm,
4969            unsigned index);
4970  void vmul(
4971      DataType dt, QRegister rd, QRegister rn, DRegister dm, unsigned index) {
4972    vmul(al, dt, rd, rn, dm, index);
4973  }
4974
4975  void vmul(
4976      Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
4977  void vmul(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
4978    vmul(al, dt, rd, rn, rm);
4979  }
4980
4981  void vmul(
4982      Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
4983  void vmul(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
4984    vmul(al, dt, rd, rn, rm);
4985  }
4986
4987  void vmul(
4988      Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm);
4989  void vmul(DataType dt, SRegister rd, SRegister rn, SRegister rm) {
4990    vmul(al, dt, rd, rn, rm);
4991  }
4992
4993  void vmull(Condition cond,
4994             DataType dt,
4995             QRegister rd,
4996             DRegister rn,
4997             DRegister dm,
4998             unsigned index);
4999  void vmull(
5000      DataType dt, QRegister rd, DRegister rn, DRegister dm, unsigned index) {
5001    vmull(al, dt, rd, rn, dm, index);
5002  }
5003
5004  void vmull(
5005      Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm);
5006  void vmull(DataType dt, QRegister rd, DRegister rn, DRegister rm) {
5007    vmull(al, dt, rd, rn, rm);
5008  }
5009
5010  void vmvn(Condition cond, DataType dt, DRegister rd, const DOperand& operand);
5011  void vmvn(DataType dt, DRegister rd, const DOperand& operand) {
5012    vmvn(al, dt, rd, operand);
5013  }
5014
5015  void vmvn(Condition cond, DataType dt, QRegister rd, const QOperand& operand);
5016  void vmvn(DataType dt, QRegister rd, const QOperand& operand) {
5017    vmvn(al, dt, rd, operand);
5018  }
5019
5020  void vneg(Condition cond, DataType dt, DRegister rd, DRegister rm);
5021  void vneg(DataType dt, DRegister rd, DRegister rm) { vneg(al, dt, rd, rm); }
5022
5023  void vneg(Condition cond, DataType dt, QRegister rd, QRegister rm);
5024  void vneg(DataType dt, QRegister rd, QRegister rm) { vneg(al, dt, rd, rm); }
5025
5026  void vneg(Condition cond, DataType dt, SRegister rd, SRegister rm);
5027  void vneg(DataType dt, SRegister rd, SRegister rm) { vneg(al, dt, rd, rm); }
5028
5029  void vnmla(
5030      Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm);
5031  void vnmla(DataType dt, SRegister rd, SRegister rn, SRegister rm) {
5032    vnmla(al, dt, rd, rn, rm);
5033  }
5034
5035  void vnmla(
5036      Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
5037  void vnmla(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5038    vnmla(al, dt, rd, rn, rm);
5039  }
5040
5041  void vnmls(
5042      Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm);
5043  void vnmls(DataType dt, SRegister rd, SRegister rn, SRegister rm) {
5044    vnmls(al, dt, rd, rn, rm);
5045  }
5046
5047  void vnmls(
5048      Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
5049  void vnmls(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5050    vnmls(al, dt, rd, rn, rm);
5051  }
5052
5053  void vnmul(
5054      Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm);
5055  void vnmul(DataType dt, SRegister rd, SRegister rn, SRegister rm) {
5056    vnmul(al, dt, rd, rn, rm);
5057  }
5058
5059  void vnmul(
5060      Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
5061  void vnmul(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5062    vnmul(al, dt, rd, rn, rm);
5063  }
5064
5065  void vorn(Condition cond,
5066            DataType dt,
5067            DRegister rd,
5068            DRegister rn,
5069            const DOperand& operand);
5070  void vorn(DataType dt, DRegister rd, DRegister rn, const DOperand& operand) {
5071    vorn(al, dt, rd, rn, operand);
5072  }
5073
5074  void vorn(Condition cond,
5075            DataType dt,
5076            QRegister rd,
5077            QRegister rn,
5078            const QOperand& operand);
5079  void vorn(DataType dt, QRegister rd, QRegister rn, const QOperand& operand) {
5080    vorn(al, dt, rd, rn, operand);
5081  }
5082
5083  void vorr(Condition cond,
5084            DataType dt,
5085            DRegister rd,
5086            DRegister rn,
5087            const DOperand& operand);
5088  void vorr(DataType dt, DRegister rd, DRegister rn, const DOperand& operand) {
5089    vorr(al, dt, rd, rn, operand);
5090  }
5091  void vorr(DRegister rd, DRegister rn, const DOperand& operand) {
5092    vorr(al, kDataTypeValueNone, rd, rn, operand);
5093  }
5094  void vorr(Condition cond,
5095            DRegister rd,
5096            DRegister rn,
5097            const DOperand& operand) {
5098    vorr(cond, kDataTypeValueNone, rd, rn, operand);
5099  }
5100
5101  void vorr(Condition cond,
5102            DataType dt,
5103            QRegister rd,
5104            QRegister rn,
5105            const QOperand& operand);
5106  void vorr(DataType dt, QRegister rd, QRegister rn, const QOperand& operand) {
5107    vorr(al, dt, rd, rn, operand);
5108  }
5109  void vorr(QRegister rd, QRegister rn, const QOperand& operand) {
5110    vorr(al, kDataTypeValueNone, rd, rn, operand);
5111  }
5112  void vorr(Condition cond,
5113            QRegister rd,
5114            QRegister rn,
5115            const QOperand& operand) {
5116    vorr(cond, kDataTypeValueNone, rd, rn, operand);
5117  }
5118
5119  void vpadal(Condition cond, DataType dt, DRegister rd, DRegister rm);
5120  void vpadal(DataType dt, DRegister rd, DRegister rm) {
5121    vpadal(al, dt, rd, rm);
5122  }
5123
5124  void vpadal(Condition cond, DataType dt, QRegister rd, QRegister rm);
5125  void vpadal(DataType dt, QRegister rd, QRegister rm) {
5126    vpadal(al, dt, rd, rm);
5127  }
5128
5129  void vpadd(
5130      Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
5131  void vpadd(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5132    vpadd(al, dt, rd, rn, rm);
5133  }
5134
5135  void vpaddl(Condition cond, DataType dt, DRegister rd, DRegister rm);
5136  void vpaddl(DataType dt, DRegister rd, DRegister rm) {
5137    vpaddl(al, dt, rd, rm);
5138  }
5139
5140  void vpaddl(Condition cond, DataType dt, QRegister rd, QRegister rm);
5141  void vpaddl(DataType dt, QRegister rd, QRegister rm) {
5142    vpaddl(al, dt, rd, rm);
5143  }
5144
5145  void vpmax(
5146      Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
5147  void vpmax(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5148    vpmax(al, dt, rd, rn, rm);
5149  }
5150
5151  void vpmin(
5152      Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
5153  void vpmin(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5154    vpmin(al, dt, rd, rn, rm);
5155  }
5156
5157  void vpop(Condition cond, DataType dt, DRegisterList dreglist);
5158  void vpop(DataType dt, DRegisterList dreglist) { vpop(al, dt, dreglist); }
5159  void vpop(DRegisterList dreglist) { vpop(al, kDataTypeValueNone, dreglist); }
5160  void vpop(Condition cond, DRegisterList dreglist) {
5161    vpop(cond, kDataTypeValueNone, dreglist);
5162  }
5163
5164  void vpop(Condition cond, DataType dt, SRegisterList sreglist);
5165  void vpop(DataType dt, SRegisterList sreglist) { vpop(al, dt, sreglist); }
5166  void vpop(SRegisterList sreglist) { vpop(al, kDataTypeValueNone, sreglist); }
5167  void vpop(Condition cond, SRegisterList sreglist) {
5168    vpop(cond, kDataTypeValueNone, sreglist);
5169  }
5170
5171  void vpush(Condition cond, DataType dt, DRegisterList dreglist);
5172  void vpush(DataType dt, DRegisterList dreglist) { vpush(al, dt, dreglist); }
5173  void vpush(DRegisterList dreglist) {
5174    vpush(al, kDataTypeValueNone, dreglist);
5175  }
5176  void vpush(Condition cond, DRegisterList dreglist) {
5177    vpush(cond, kDataTypeValueNone, dreglist);
5178  }
5179
5180  void vpush(Condition cond, DataType dt, SRegisterList sreglist);
5181  void vpush(DataType dt, SRegisterList sreglist) { vpush(al, dt, sreglist); }
5182  void vpush(SRegisterList sreglist) {
5183    vpush(al, kDataTypeValueNone, sreglist);
5184  }
5185  void vpush(Condition cond, SRegisterList sreglist) {
5186    vpush(cond, kDataTypeValueNone, sreglist);
5187  }
5188
5189  void vqabs(Condition cond, DataType dt, DRegister rd, DRegister rm);
5190  void vqabs(DataType dt, DRegister rd, DRegister rm) { vqabs(al, dt, rd, rm); }
5191
5192  void vqabs(Condition cond, DataType dt, QRegister rd, QRegister rm);
5193  void vqabs(DataType dt, QRegister rd, QRegister rm) { vqabs(al, dt, rd, rm); }
5194
5195  void vqadd(
5196      Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
5197  void vqadd(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5198    vqadd(al, dt, rd, rn, rm);
5199  }
5200
5201  void vqadd(
5202      Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
5203  void vqadd(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5204    vqadd(al, dt, rd, rn, rm);
5205  }
5206
5207  void vqdmlal(
5208      Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm);
5209  void vqdmlal(DataType dt, QRegister rd, DRegister rn, DRegister rm) {
5210    vqdmlal(al, dt, rd, rn, rm);
5211  }
5212
5213  void vqdmlal(Condition cond,
5214               DataType dt,
5215               QRegister rd,
5216               DRegister rn,
5217               DRegister dm,
5218               unsigned index);
5219  void vqdmlal(
5220      DataType dt, QRegister rd, DRegister rn, DRegister dm, unsigned index) {
5221    vqdmlal(al, dt, rd, rn, dm, index);
5222  }
5223
5224  void vqdmlsl(
5225      Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm);
5226  void vqdmlsl(DataType dt, QRegister rd, DRegister rn, DRegister rm) {
5227    vqdmlsl(al, dt, rd, rn, rm);
5228  }
5229
5230  void vqdmlsl(Condition cond,
5231               DataType dt,
5232               QRegister rd,
5233               DRegister rn,
5234               DRegister dm,
5235               unsigned index);
5236  void vqdmlsl(
5237      DataType dt, QRegister rd, DRegister rn, DRegister dm, unsigned index) {
5238    vqdmlsl(al, dt, rd, rn, dm, index);
5239  }
5240
5241  void vqdmulh(
5242      Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
5243  void vqdmulh(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5244    vqdmulh(al, dt, rd, rn, rm);
5245  }
5246
5247  void vqdmulh(
5248      Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
5249  void vqdmulh(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5250    vqdmulh(al, dt, rd, rn, rm);
5251  }
5252
5253  void vqdmulh(Condition cond,
5254               DataType dt,
5255               DRegister rd,
5256               DRegister rn,
5257               DRegisterLane rm);
5258  void vqdmulh(DataType dt, DRegister rd, DRegister rn, DRegisterLane rm) {
5259    vqdmulh(al, dt, rd, rn, rm);
5260  }
5261
5262  void vqdmulh(Condition cond,
5263               DataType dt,
5264               QRegister rd,
5265               QRegister rn,
5266               DRegisterLane rm);
5267  void vqdmulh(DataType dt, QRegister rd, QRegister rn, DRegisterLane rm) {
5268    vqdmulh(al, dt, rd, rn, rm);
5269  }
5270
5271  void vqdmull(
5272      Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm);
5273  void vqdmull(DataType dt, QRegister rd, DRegister rn, DRegister rm) {
5274    vqdmull(al, dt, rd, rn, rm);
5275  }
5276
5277  void vqdmull(Condition cond,
5278               DataType dt,
5279               QRegister rd,
5280               DRegister rn,
5281               DRegisterLane rm);
5282  void vqdmull(DataType dt, QRegister rd, DRegister rn, DRegisterLane rm) {
5283    vqdmull(al, dt, rd, rn, rm);
5284  }
5285
5286  void vqmovn(Condition cond, DataType dt, DRegister rd, QRegister rm);
5287  void vqmovn(DataType dt, DRegister rd, QRegister rm) {
5288    vqmovn(al, dt, rd, rm);
5289  }
5290
5291  void vqmovun(Condition cond, DataType dt, DRegister rd, QRegister rm);
5292  void vqmovun(DataType dt, DRegister rd, QRegister rm) {
5293    vqmovun(al, dt, rd, rm);
5294  }
5295
5296  void vqneg(Condition cond, DataType dt, DRegister rd, DRegister rm);
5297  void vqneg(DataType dt, DRegister rd, DRegister rm) { vqneg(al, dt, rd, rm); }
5298
5299  void vqneg(Condition cond, DataType dt, QRegister rd, QRegister rm);
5300  void vqneg(DataType dt, QRegister rd, QRegister rm) { vqneg(al, dt, rd, rm); }
5301
5302  void vqrdmulh(
5303      Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
5304  void vqrdmulh(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5305    vqrdmulh(al, dt, rd, rn, rm);
5306  }
5307
5308  void vqrdmulh(
5309      Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
5310  void vqrdmulh(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5311    vqrdmulh(al, dt, rd, rn, rm);
5312  }
5313
5314  void vqrdmulh(Condition cond,
5315                DataType dt,
5316                DRegister rd,
5317                DRegister rn,
5318                DRegisterLane rm);
5319  void vqrdmulh(DataType dt, DRegister rd, DRegister rn, DRegisterLane rm) {
5320    vqrdmulh(al, dt, rd, rn, rm);
5321  }
5322
5323  void vqrdmulh(Condition cond,
5324                DataType dt,
5325                QRegister rd,
5326                QRegister rn,
5327                DRegisterLane rm);
5328  void vqrdmulh(DataType dt, QRegister rd, QRegister rn, DRegisterLane rm) {
5329    vqrdmulh(al, dt, rd, rn, rm);
5330  }
5331
5332  void vqrshl(
5333      Condition cond, DataType dt, DRegister rd, DRegister rm, DRegister rn);
5334  void vqrshl(DataType dt, DRegister rd, DRegister rm, DRegister rn) {
5335    vqrshl(al, dt, rd, rm, rn);
5336  }
5337
5338  void vqrshl(
5339      Condition cond, DataType dt, QRegister rd, QRegister rm, QRegister rn);
5340  void vqrshl(DataType dt, QRegister rd, QRegister rm, QRegister rn) {
5341    vqrshl(al, dt, rd, rm, rn);
5342  }
5343
5344  void vqrshrn(Condition cond,
5345               DataType dt,
5346               DRegister rd,
5347               QRegister rm,
5348               const QOperand& operand);
5349  void vqrshrn(DataType dt,
5350               DRegister rd,
5351               QRegister rm,
5352               const QOperand& operand) {
5353    vqrshrn(al, dt, rd, rm, operand);
5354  }
5355
5356  void vqrshrun(Condition cond,
5357                DataType dt,
5358                DRegister rd,
5359                QRegister rm,
5360                const QOperand& operand);
5361  void vqrshrun(DataType dt,
5362                DRegister rd,
5363                QRegister rm,
5364                const QOperand& operand) {
5365    vqrshrun(al, dt, rd, rm, operand);
5366  }
5367
5368  void vqshl(Condition cond,
5369             DataType dt,
5370             DRegister rd,
5371             DRegister rm,
5372             const DOperand& operand);
5373  void vqshl(DataType dt, DRegister rd, DRegister rm, const DOperand& operand) {
5374    vqshl(al, dt, rd, rm, operand);
5375  }
5376
5377  void vqshl(Condition cond,
5378             DataType dt,
5379             QRegister rd,
5380             QRegister rm,
5381             const QOperand& operand);
5382  void vqshl(DataType dt, QRegister rd, QRegister rm, const QOperand& operand) {
5383    vqshl(al, dt, rd, rm, operand);
5384  }
5385
5386  void vqshlu(Condition cond,
5387              DataType dt,
5388              DRegister rd,
5389              DRegister rm,
5390              const DOperand& operand);
5391  void vqshlu(DataType dt,
5392              DRegister rd,
5393              DRegister rm,
5394              const DOperand& operand) {
5395    vqshlu(al, dt, rd, rm, operand);
5396  }
5397
5398  void vqshlu(Condition cond,
5399              DataType dt,
5400              QRegister rd,
5401              QRegister rm,
5402              const QOperand& operand);
5403  void vqshlu(DataType dt,
5404              QRegister rd,
5405              QRegister rm,
5406              const QOperand& operand) {
5407    vqshlu(al, dt, rd, rm, operand);
5408  }
5409
5410  void vqshrn(Condition cond,
5411              DataType dt,
5412              DRegister rd,
5413              QRegister rm,
5414              const QOperand& operand);
5415  void vqshrn(DataType dt,
5416              DRegister rd,
5417              QRegister rm,
5418              const QOperand& operand) {
5419    vqshrn(al, dt, rd, rm, operand);
5420  }
5421
5422  void vqshrun(Condition cond,
5423               DataType dt,
5424               DRegister rd,
5425               QRegister rm,
5426               const QOperand& operand);
5427  void vqshrun(DataType dt,
5428               DRegister rd,
5429               QRegister rm,
5430               const QOperand& operand) {
5431    vqshrun(al, dt, rd, rm, operand);
5432  }
5433
5434  void vqsub(
5435      Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
5436  void vqsub(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5437    vqsub(al, dt, rd, rn, rm);
5438  }
5439
5440  void vqsub(
5441      Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
5442  void vqsub(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5443    vqsub(al, dt, rd, rn, rm);
5444  }
5445
5446  void vraddhn(
5447      Condition cond, DataType dt, DRegister rd, QRegister rn, QRegister rm);
5448  void vraddhn(DataType dt, DRegister rd, QRegister rn, QRegister rm) {
5449    vraddhn(al, dt, rd, rn, rm);
5450  }
5451
5452  void vrecpe(Condition cond, DataType dt, DRegister rd, DRegister rm);
5453  void vrecpe(DataType dt, DRegister rd, DRegister rm) {
5454    vrecpe(al, dt, rd, rm);
5455  }
5456
5457  void vrecpe(Condition cond, DataType dt, QRegister rd, QRegister rm);
5458  void vrecpe(DataType dt, QRegister rd, QRegister rm) {
5459    vrecpe(al, dt, rd, rm);
5460  }
5461
5462  void vrecps(
5463      Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
5464  void vrecps(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5465    vrecps(al, dt, rd, rn, rm);
5466  }
5467
5468  void vrecps(
5469      Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
5470  void vrecps(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5471    vrecps(al, dt, rd, rn, rm);
5472  }
5473
5474  void vrev16(Condition cond, DataType dt, DRegister rd, DRegister rm);
5475  void vrev16(DataType dt, DRegister rd, DRegister rm) {
5476    vrev16(al, dt, rd, rm);
5477  }
5478
5479  void vrev16(Condition cond, DataType dt, QRegister rd, QRegister rm);
5480  void vrev16(DataType dt, QRegister rd, QRegister rm) {
5481    vrev16(al, dt, rd, rm);
5482  }
5483
5484  void vrev32(Condition cond, DataType dt, DRegister rd, DRegister rm);
5485  void vrev32(DataType dt, DRegister rd, DRegister rm) {
5486    vrev32(al, dt, rd, rm);
5487  }
5488
5489  void vrev32(Condition cond, DataType dt, QRegister rd, QRegister rm);
5490  void vrev32(DataType dt, QRegister rd, QRegister rm) {
5491    vrev32(al, dt, rd, rm);
5492  }
5493
5494  void vrev64(Condition cond, DataType dt, DRegister rd, DRegister rm);
5495  void vrev64(DataType dt, DRegister rd, DRegister rm) {
5496    vrev64(al, dt, rd, rm);
5497  }
5498
5499  void vrev64(Condition cond, DataType dt, QRegister rd, QRegister rm);
5500  void vrev64(DataType dt, QRegister rd, QRegister rm) {
5501    vrev64(al, dt, rd, rm);
5502  }
5503
5504  void vrhadd(
5505      Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
5506  void vrhadd(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5507    vrhadd(al, dt, rd, rn, rm);
5508  }
5509
5510  void vrhadd(
5511      Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
5512  void vrhadd(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5513    vrhadd(al, dt, rd, rn, rm);
5514  }
5515
5516  void vrinta(DataType dt1, DataType dt2, DRegister rd, DRegister rm);
5517
5518  void vrinta(DataType dt1, DataType dt2, QRegister rd, QRegister rm);
5519
5520  void vrinta(DataType dt1, DataType dt2, SRegister rd, SRegister rm);
5521
5522  void vrintm(DataType dt1, DataType dt2, DRegister rd, DRegister rm);
5523
5524  void vrintm(DataType dt1, DataType dt2, QRegister rd, QRegister rm);
5525
5526  void vrintm(DataType dt1, DataType dt2, SRegister rd, SRegister rm);
5527
5528  void vrintn(DataType dt1, DataType dt2, DRegister rd, DRegister rm);
5529
5530  void vrintn(DataType dt1, DataType dt2, QRegister rd, QRegister rm);
5531
5532  void vrintn(DataType dt1, DataType dt2, SRegister rd, SRegister rm);
5533
5534  void vrintp(DataType dt1, DataType dt2, DRegister rd, DRegister rm);
5535
5536  void vrintp(DataType dt1, DataType dt2, QRegister rd, QRegister rm);
5537
5538  void vrintp(DataType dt1, DataType dt2, SRegister rd, SRegister rm);
5539
5540  void vrintr(
5541      Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm);
5542  void vrintr(DataType dt1, DataType dt2, SRegister rd, SRegister rm) {
5543    vrintr(al, dt1, dt2, rd, rm);
5544  }
5545
5546  void vrintr(
5547      Condition cond, DataType dt1, DataType dt2, DRegister rd, DRegister rm);
5548  void vrintr(DataType dt1, DataType dt2, DRegister rd, DRegister rm) {
5549    vrintr(al, dt1, dt2, rd, rm);
5550  }
5551
5552  void vrintx(
5553      Condition cond, DataType dt1, DataType dt2, DRegister rd, DRegister rm);
5554  void vrintx(DataType dt1, DataType dt2, DRegister rd, DRegister rm) {
5555    vrintx(al, dt1, dt2, rd, rm);
5556  }
5557
5558  void vrintx(DataType dt1, DataType dt2, QRegister rd, QRegister rm);
5559
5560  void vrintx(
5561      Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm);
5562  void vrintx(DataType dt1, DataType dt2, SRegister rd, SRegister rm) {
5563    vrintx(al, dt1, dt2, rd, rm);
5564  }
5565
5566  void vrintz(
5567      Condition cond, DataType dt1, DataType dt2, DRegister rd, DRegister rm);
5568  void vrintz(DataType dt1, DataType dt2, DRegister rd, DRegister rm) {
5569    vrintz(al, dt1, dt2, rd, rm);
5570  }
5571
5572  void vrintz(DataType dt1, DataType dt2, QRegister rd, QRegister rm);
5573
5574  void vrintz(
5575      Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm);
5576  void vrintz(DataType dt1, DataType dt2, SRegister rd, SRegister rm) {
5577    vrintz(al, dt1, dt2, rd, rm);
5578  }
5579
5580  void vrshl(
5581      Condition cond, DataType dt, DRegister rd, DRegister rm, DRegister rn);
5582  void vrshl(DataType dt, DRegister rd, DRegister rm, DRegister rn) {
5583    vrshl(al, dt, rd, rm, rn);
5584  }
5585
5586  void vrshl(
5587      Condition cond, DataType dt, QRegister rd, QRegister rm, QRegister rn);
5588  void vrshl(DataType dt, QRegister rd, QRegister rm, QRegister rn) {
5589    vrshl(al, dt, rd, rm, rn);
5590  }
5591
5592  void vrshr(Condition cond,
5593             DataType dt,
5594             DRegister rd,
5595             DRegister rm,
5596             const DOperand& operand);
5597  void vrshr(DataType dt, DRegister rd, DRegister rm, const DOperand& operand) {
5598    vrshr(al, dt, rd, rm, operand);
5599  }
5600
5601  void vrshr(Condition cond,
5602             DataType dt,
5603             QRegister rd,
5604             QRegister rm,
5605             const QOperand& operand);
5606  void vrshr(DataType dt, QRegister rd, QRegister rm, const QOperand& operand) {
5607    vrshr(al, dt, rd, rm, operand);
5608  }
5609
5610  void vrshrn(Condition cond,
5611              DataType dt,
5612              DRegister rd,
5613              QRegister rm,
5614              const QOperand& operand);
5615  void vrshrn(DataType dt,
5616              DRegister rd,
5617              QRegister rm,
5618              const QOperand& operand) {
5619    vrshrn(al, dt, rd, rm, operand);
5620  }
5621
5622  void vrsqrte(Condition cond, DataType dt, DRegister rd, DRegister rm);
5623  void vrsqrte(DataType dt, DRegister rd, DRegister rm) {
5624    vrsqrte(al, dt, rd, rm);
5625  }
5626
5627  void vrsqrte(Condition cond, DataType dt, QRegister rd, QRegister rm);
5628  void vrsqrte(DataType dt, QRegister rd, QRegister rm) {
5629    vrsqrte(al, dt, rd, rm);
5630  }
5631
5632  void vrsqrts(
5633      Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
5634  void vrsqrts(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5635    vrsqrts(al, dt, rd, rn, rm);
5636  }
5637
5638  void vrsqrts(
5639      Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
5640  void vrsqrts(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5641    vrsqrts(al, dt, rd, rn, rm);
5642  }
5643
5644  void vrsra(Condition cond,
5645             DataType dt,
5646             DRegister rd,
5647             DRegister rm,
5648             const DOperand& operand);
5649  void vrsra(DataType dt, DRegister rd, DRegister rm, const DOperand& operand) {
5650    vrsra(al, dt, rd, rm, operand);
5651  }
5652
5653  void vrsra(Condition cond,
5654             DataType dt,
5655             QRegister rd,
5656             QRegister rm,
5657             const QOperand& operand);
5658  void vrsra(DataType dt, QRegister rd, QRegister rm, const QOperand& operand) {
5659    vrsra(al, dt, rd, rm, operand);
5660  }
5661
5662  void vrsubhn(
5663      Condition cond, DataType dt, DRegister rd, QRegister rn, QRegister rm);
5664  void vrsubhn(DataType dt, DRegister rd, QRegister rn, QRegister rm) {
5665    vrsubhn(al, dt, rd, rn, rm);
5666  }
5667
5668  void vseleq(DataType dt, DRegister rd, DRegister rn, DRegister rm);
5669
5670  void vseleq(DataType dt, SRegister rd, SRegister rn, SRegister rm);
5671
5672  void vselge(DataType dt, DRegister rd, DRegister rn, DRegister rm);
5673
5674  void vselge(DataType dt, SRegister rd, SRegister rn, SRegister rm);
5675
5676  void vselgt(DataType dt, DRegister rd, DRegister rn, DRegister rm);
5677
5678  void vselgt(DataType dt, SRegister rd, SRegister rn, SRegister rm);
5679
5680  void vselvs(DataType dt, DRegister rd, DRegister rn, DRegister rm);
5681
5682  void vselvs(DataType dt, SRegister rd, SRegister rn, SRegister rm);
5683
5684  void vshl(Condition cond,
5685            DataType dt,
5686            DRegister rd,
5687            DRegister rm,
5688            const DOperand& operand);
5689  void vshl(DataType dt, DRegister rd, DRegister rm, const DOperand& operand) {
5690    vshl(al, dt, rd, rm, operand);
5691  }
5692
5693  void vshl(Condition cond,
5694            DataType dt,
5695            QRegister rd,
5696            QRegister rm,
5697            const QOperand& operand);
5698  void vshl(DataType dt, QRegister rd, QRegister rm, const QOperand& operand) {
5699    vshl(al, dt, rd, rm, operand);
5700  }
5701
5702  void vshll(Condition cond,
5703             DataType dt,
5704             QRegister rd,
5705             DRegister rm,
5706             const DOperand& operand);
5707  void vshll(DataType dt, QRegister rd, DRegister rm, const DOperand& operand) {
5708    vshll(al, dt, rd, rm, operand);
5709  }
5710
5711  void vshr(Condition cond,
5712            DataType dt,
5713            DRegister rd,
5714            DRegister rm,
5715            const DOperand& operand);
5716  void vshr(DataType dt, DRegister rd, DRegister rm, const DOperand& operand) {
5717    vshr(al, dt, rd, rm, operand);
5718  }
5719
5720  void vshr(Condition cond,
5721            DataType dt,
5722            QRegister rd,
5723            QRegister rm,
5724            const QOperand& operand);
5725  void vshr(DataType dt, QRegister rd, QRegister rm, const QOperand& operand) {
5726    vshr(al, dt, rd, rm, operand);
5727  }
5728
5729  void vshrn(Condition cond,
5730             DataType dt,
5731             DRegister rd,
5732             QRegister rm,
5733             const QOperand& operand);
5734  void vshrn(DataType dt, DRegister rd, QRegister rm, const QOperand& operand) {
5735    vshrn(al, dt, rd, rm, operand);
5736  }
5737
5738  void vsli(Condition cond,
5739            DataType dt,
5740            DRegister rd,
5741            DRegister rm,
5742            const DOperand& operand);
5743  void vsli(DataType dt, DRegister rd, DRegister rm, const DOperand& operand) {
5744    vsli(al, dt, rd, rm, operand);
5745  }
5746
5747  void vsli(Condition cond,
5748            DataType dt,
5749            QRegister rd,
5750            QRegister rm,
5751            const QOperand& operand);
5752  void vsli(DataType dt, QRegister rd, QRegister rm, const QOperand& operand) {
5753    vsli(al, dt, rd, rm, operand);
5754  }
5755
5756  void vsqrt(Condition cond, DataType dt, SRegister rd, SRegister rm);
5757  void vsqrt(DataType dt, SRegister rd, SRegister rm) { vsqrt(al, dt, rd, rm); }
5758
5759  void vsqrt(Condition cond, DataType dt, DRegister rd, DRegister rm);
5760  void vsqrt(DataType dt, DRegister rd, DRegister rm) { vsqrt(al, dt, rd, rm); }
5761
5762  void vsra(Condition cond,
5763            DataType dt,
5764            DRegister rd,
5765            DRegister rm,
5766            const DOperand& operand);
5767  void vsra(DataType dt, DRegister rd, DRegister rm, const DOperand& operand) {
5768    vsra(al, dt, rd, rm, operand);
5769  }
5770
5771  void vsra(Condition cond,
5772            DataType dt,
5773            QRegister rd,
5774            QRegister rm,
5775            const QOperand& operand);
5776  void vsra(DataType dt, QRegister rd, QRegister rm, const QOperand& operand) {
5777    vsra(al, dt, rd, rm, operand);
5778  }
5779
5780  void vsri(Condition cond,
5781            DataType dt,
5782            DRegister rd,
5783            DRegister rm,
5784            const DOperand& operand);
5785  void vsri(DataType dt, DRegister rd, DRegister rm, const DOperand& operand) {
5786    vsri(al, dt, rd, rm, operand);
5787  }
5788
5789  void vsri(Condition cond,
5790            DataType dt,
5791            QRegister rd,
5792            QRegister rm,
5793            const QOperand& operand);
5794  void vsri(DataType dt, QRegister rd, QRegister rm, const QOperand& operand) {
5795    vsri(al, dt, rd, rm, operand);
5796  }
5797
5798  void vst1(Condition cond,
5799            DataType dt,
5800            const NeonRegisterList& nreglist,
5801            const AlignedMemOperand& operand);
5802  void vst1(DataType dt,
5803            const NeonRegisterList& nreglist,
5804            const AlignedMemOperand& operand) {
5805    vst1(al, dt, nreglist, operand);
5806  }
5807
5808  void vst2(Condition cond,
5809            DataType dt,
5810            const NeonRegisterList& nreglist,
5811            const AlignedMemOperand& operand);
5812  void vst2(DataType dt,
5813            const NeonRegisterList& nreglist,
5814            const AlignedMemOperand& operand) {
5815    vst2(al, dt, nreglist, operand);
5816  }
5817
5818  void vst3(Condition cond,
5819            DataType dt,
5820            const NeonRegisterList& nreglist,
5821            const AlignedMemOperand& operand);
5822  void vst3(DataType dt,
5823            const NeonRegisterList& nreglist,
5824            const AlignedMemOperand& operand) {
5825    vst3(al, dt, nreglist, operand);
5826  }
5827
5828  void vst3(Condition cond,
5829            DataType dt,
5830            const NeonRegisterList& nreglist,
5831            const MemOperand& operand);
5832  void vst3(DataType dt,
5833            const NeonRegisterList& nreglist,
5834            const MemOperand& operand) {
5835    vst3(al, dt, nreglist, operand);
5836  }
5837
5838  void vst4(Condition cond,
5839            DataType dt,
5840            const NeonRegisterList& nreglist,
5841            const AlignedMemOperand& operand);
5842  void vst4(DataType dt,
5843            const NeonRegisterList& nreglist,
5844            const AlignedMemOperand& operand) {
5845    vst4(al, dt, nreglist, operand);
5846  }
5847
5848  void vstm(Condition cond,
5849            DataType dt,
5850            Register rn,
5851            WriteBack write_back,
5852            DRegisterList dreglist);
5853  void vstm(DataType dt,
5854            Register rn,
5855            WriteBack write_back,
5856            DRegisterList dreglist) {
5857    vstm(al, dt, rn, write_back, dreglist);
5858  }
5859  void vstm(Register rn, WriteBack write_back, DRegisterList dreglist) {
5860    vstm(al, kDataTypeValueNone, rn, write_back, dreglist);
5861  }
5862  void vstm(Condition cond,
5863            Register rn,
5864            WriteBack write_back,
5865            DRegisterList dreglist) {
5866    vstm(cond, kDataTypeValueNone, rn, write_back, dreglist);
5867  }
5868
5869  void vstm(Condition cond,
5870            DataType dt,
5871            Register rn,
5872            WriteBack write_back,
5873            SRegisterList sreglist);
5874  void vstm(DataType dt,
5875            Register rn,
5876            WriteBack write_back,
5877            SRegisterList sreglist) {
5878    vstm(al, dt, rn, write_back, sreglist);
5879  }
5880  void vstm(Register rn, WriteBack write_back, SRegisterList sreglist) {
5881    vstm(al, kDataTypeValueNone, rn, write_back, sreglist);
5882  }
5883  void vstm(Condition cond,
5884            Register rn,
5885            WriteBack write_back,
5886            SRegisterList sreglist) {
5887    vstm(cond, kDataTypeValueNone, rn, write_back, sreglist);
5888  }
5889
5890  void vstmdb(Condition cond,
5891              DataType dt,
5892              Register rn,
5893              WriteBack write_back,
5894              DRegisterList dreglist);
5895  void vstmdb(DataType dt,
5896              Register rn,
5897              WriteBack write_back,
5898              DRegisterList dreglist) {
5899    vstmdb(al, dt, rn, write_back, dreglist);
5900  }
5901  void vstmdb(Register rn, WriteBack write_back, DRegisterList dreglist) {
5902    vstmdb(al, kDataTypeValueNone, rn, write_back, dreglist);
5903  }
5904  void vstmdb(Condition cond,
5905              Register rn,
5906              WriteBack write_back,
5907              DRegisterList dreglist) {
5908    vstmdb(cond, kDataTypeValueNone, rn, write_back, dreglist);
5909  }
5910
5911  void vstmdb(Condition cond,
5912              DataType dt,
5913              Register rn,
5914              WriteBack write_back,
5915              SRegisterList sreglist);
5916  void vstmdb(DataType dt,
5917              Register rn,
5918              WriteBack write_back,
5919              SRegisterList sreglist) {
5920    vstmdb(al, dt, rn, write_back, sreglist);
5921  }
5922  void vstmdb(Register rn, WriteBack write_back, SRegisterList sreglist) {
5923    vstmdb(al, kDataTypeValueNone, rn, write_back, sreglist);
5924  }
5925  void vstmdb(Condition cond,
5926              Register rn,
5927              WriteBack write_back,
5928              SRegisterList sreglist) {
5929    vstmdb(cond, kDataTypeValueNone, rn, write_back, sreglist);
5930  }
5931
5932  void vstmia(Condition cond,
5933              DataType dt,
5934              Register rn,
5935              WriteBack write_back,
5936              DRegisterList dreglist);
5937  void vstmia(DataType dt,
5938              Register rn,
5939              WriteBack write_back,
5940              DRegisterList dreglist) {
5941    vstmia(al, dt, rn, write_back, dreglist);
5942  }
5943  void vstmia(Register rn, WriteBack write_back, DRegisterList dreglist) {
5944    vstmia(al, kDataTypeValueNone, rn, write_back, dreglist);
5945  }
5946  void vstmia(Condition cond,
5947              Register rn,
5948              WriteBack write_back,
5949              DRegisterList dreglist) {
5950    vstmia(cond, kDataTypeValueNone, rn, write_back, dreglist);
5951  }
5952
5953  void vstmia(Condition cond,
5954              DataType dt,
5955              Register rn,
5956              WriteBack write_back,
5957              SRegisterList sreglist);
5958  void vstmia(DataType dt,
5959              Register rn,
5960              WriteBack write_back,
5961              SRegisterList sreglist) {
5962    vstmia(al, dt, rn, write_back, sreglist);
5963  }
5964  void vstmia(Register rn, WriteBack write_back, SRegisterList sreglist) {
5965    vstmia(al, kDataTypeValueNone, rn, write_back, sreglist);
5966  }
5967  void vstmia(Condition cond,
5968              Register rn,
5969              WriteBack write_back,
5970              SRegisterList sreglist) {
5971    vstmia(cond, kDataTypeValueNone, rn, write_back, sreglist);
5972  }
5973
5974  void vstr(Condition cond,
5975            DataType dt,
5976            DRegister rd,
5977            const MemOperand& operand);
5978  void vstr(DataType dt, DRegister rd, const MemOperand& operand) {
5979    vstr(al, dt, rd, operand);
5980  }
5981  void vstr(DRegister rd, const MemOperand& operand) {
5982    vstr(al, Untyped64, rd, operand);
5983  }
5984  void vstr(Condition cond, DRegister rd, const MemOperand& operand) {
5985    vstr(cond, Untyped64, rd, operand);
5986  }
5987
5988  void vstr(Condition cond,
5989            DataType dt,
5990            SRegister rd,
5991            const MemOperand& operand);
5992  void vstr(DataType dt, SRegister rd, const MemOperand& operand) {
5993    vstr(al, dt, rd, operand);
5994  }
5995  void vstr(SRegister rd, const MemOperand& operand) {
5996    vstr(al, Untyped32, rd, operand);
5997  }
5998  void vstr(Condition cond, SRegister rd, const MemOperand& operand) {
5999    vstr(cond, Untyped32, rd, operand);
6000  }
6001
6002  void vsub(
6003      Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
6004  void vsub(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
6005    vsub(al, dt, rd, rn, rm);
6006  }
6007
6008  void vsub(
6009      Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
6010  void vsub(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
6011    vsub(al, dt, rd, rn, rm);
6012  }
6013
6014  void vsub(
6015      Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm);
6016  void vsub(DataType dt, SRegister rd, SRegister rn, SRegister rm) {
6017    vsub(al, dt, rd, rn, rm);
6018  }
6019
6020  void vsubhn(
6021      Condition cond, DataType dt, DRegister rd, QRegister rn, QRegister rm);
6022  void vsubhn(DataType dt, DRegister rd, QRegister rn, QRegister rm) {
6023    vsubhn(al, dt, rd, rn, rm);
6024  }
6025
6026  void vsubl(
6027      Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm);
6028  void vsubl(DataType dt, QRegister rd, DRegister rn, DRegister rm) {
6029    vsubl(al, dt, rd, rn, rm);
6030  }
6031
6032  void vsubw(
6033      Condition cond, DataType dt, QRegister rd, QRegister rn, DRegister rm);
6034  void vsubw(DataType dt, QRegister rd, QRegister rn, DRegister rm) {
6035    vsubw(al, dt, rd, rn, rm);
6036  }
6037
6038  void vswp(Condition cond, DataType dt, DRegister rd, DRegister rm);
6039  void vswp(DataType dt, DRegister rd, DRegister rm) { vswp(al, dt, rd, rm); }
6040  void vswp(DRegister rd, DRegister rm) {
6041    vswp(al, kDataTypeValueNone, rd, rm);
6042  }
6043  void vswp(Condition cond, DRegister rd, DRegister rm) {
6044    vswp(cond, kDataTypeValueNone, rd, rm);
6045  }
6046
6047  void vswp(Condition cond, DataType dt, QRegister rd, QRegister rm);
6048  void vswp(DataType dt, QRegister rd, QRegister rm) { vswp(al, dt, rd, rm); }
6049  void vswp(QRegister rd, QRegister rm) {
6050    vswp(al, kDataTypeValueNone, rd, rm);
6051  }
6052  void vswp(Condition cond, QRegister rd, QRegister rm) {
6053    vswp(cond, kDataTypeValueNone, rd, rm);
6054  }
6055
6056  void vtbl(Condition cond,
6057            DataType dt,
6058            DRegister rd,
6059            const NeonRegisterList& nreglist,
6060            DRegister rm);
6061  void vtbl(DataType dt,
6062            DRegister rd,
6063            const NeonRegisterList& nreglist,
6064            DRegister rm) {
6065    vtbl(al, dt, rd, nreglist, rm);
6066  }
6067
6068  void vtbx(Condition cond,
6069            DataType dt,
6070            DRegister rd,
6071            const NeonRegisterList& nreglist,
6072            DRegister rm);
6073  void vtbx(DataType dt,
6074            DRegister rd,
6075            const NeonRegisterList& nreglist,
6076            DRegister rm) {
6077    vtbx(al, dt, rd, nreglist, rm);
6078  }
6079
6080  void vtrn(Condition cond, DataType dt, DRegister rd, DRegister rm);
6081  void vtrn(DataType dt, DRegister rd, DRegister rm) { vtrn(al, dt, rd, rm); }
6082
6083  void vtrn(Condition cond, DataType dt, QRegister rd, QRegister rm);
6084  void vtrn(DataType dt, QRegister rd, QRegister rm) { vtrn(al, dt, rd, rm); }
6085
6086  void vtst(
6087      Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
6088  void vtst(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
6089    vtst(al, dt, rd, rn, rm);
6090  }
6091
6092  void vtst(
6093      Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
6094  void vtst(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
6095    vtst(al, dt, rd, rn, rm);
6096  }
6097
6098  void vuzp(Condition cond, DataType dt, DRegister rd, DRegister rm);
6099  void vuzp(DataType dt, DRegister rd, DRegister rm) { vuzp(al, dt, rd, rm); }
6100
6101  void vuzp(Condition cond, DataType dt, QRegister rd, QRegister rm);
6102  void vuzp(DataType dt, QRegister rd, QRegister rm) { vuzp(al, dt, rd, rm); }
6103
6104  void vzip(Condition cond, DataType dt, DRegister rd, DRegister rm);
6105  void vzip(DataType dt, DRegister rd, DRegister rm) { vzip(al, dt, rd, rm); }
6106
6107  void vzip(Condition cond, DataType dt, QRegister rd, QRegister rm);
6108  void vzip(DataType dt, QRegister rd, QRegister rm) { vzip(al, dt, rd, rm); }
6109
6110  void yield(Condition cond, EncodingSize size);
6111  void yield() { yield(al, Best); }
6112  void yield(Condition cond) { yield(cond, Best); }
6113  void yield(EncodingSize size) { yield(al, size); }
6114  // End of generated code.
6115  virtual void UnimplementedDelegate(InstructionType type) {
6116    std::string error_message(std::string("Ill-formed '") +
6117                              std::string(ToCString(type)) +
6118                              std::string("' instruction.\n"));
6119    VIXL_ABORT_WITH_MSG(error_message.c_str());
6120  }
6121  virtual bool AllowUnpredictable() { return allow_unpredictable_; }
6122  virtual bool AllowStronglyDiscouraged() {
6123    return allow_strongly_discouraged_;
6124  }
6125};
6126
6127}  // namespace aarch32
6128}  // namespace vixl
6129
6130#endif  // VIXL_AARCH32_ASSEMBLER_AARCH32_H_
6131