• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2015, VIXL authors
2 // All rights reserved.
3 //
4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions are met:
6 //
7 //   * Redistributions of source code must retain the above copyright notice,
8 //     this list of conditions and the following disclaimer.
9 //   * Redistributions in binary form must reproduce the above copyright
10 //     notice, this list of conditions and the following disclaimer in the
11 //     documentation and/or other materials provided with the distribution.
12 //   * Neither the name of ARM Limited nor the names of its contributors may
13 //     be used to endorse or promote products derived from this software
14 //     without 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
18 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
20 // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23 // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24 // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26 // POSSIBILITY OF SUCH DAMAGE.
27 
28 #ifndef VIXL_AARCH32_MACRO_ASSEMBLER_AARCH32_H_
29 #define VIXL_AARCH32_MACRO_ASSEMBLER_AARCH32_H_
30 
31 #include "code-generation-scopes-vixl.h"
32 #include "macro-assembler-interface.h"
33 #include "utils-vixl.h"
34 
35 #include "aarch32/instructions-aarch32.h"
36 #include "aarch32/assembler-aarch32.h"
37 #include "aarch32/operands-aarch32.h"
38 
39 namespace vixl {
40 namespace aarch32 {
41 
42 class UseScratchRegisterScope;
43 
44 enum FlagsUpdate { LeaveFlags = 0, SetFlags = 1, DontCare = 2 };
45 
46 // LiteralPool class, defined as a container for literals
47 class LiteralPool {
48  public:
49   typedef std::list<RawLiteral*>::iterator RawLiteralListIterator;
50 
51  public:
LiteralPool()52   LiteralPool() : size_(0) {}
~LiteralPool()53   ~LiteralPool() {
54     VIXL_ASSERT(literals_.empty() && (size_ == 0));
55     for (RawLiteralListIterator literal_it = keep_until_delete_.begin();
56          literal_it != keep_until_delete_.end();
57          literal_it++) {
58       delete *literal_it;
59     }
60     keep_until_delete_.clear();
61   }
62 
GetSize()63   unsigned GetSize() const { return size_; }
64 
65   // Add a literal to the literal container.
AddLiteral(RawLiteral * literal)66   void AddLiteral(RawLiteral* literal) {
67     // Manually placed literals can't be added to a literal pool.
68     VIXL_ASSERT(!literal->IsManuallyPlaced());
69     VIXL_ASSERT(!literal->IsBound());
70     if (literal->GetPositionInPool() == Label::kMaxOffset) {
71       uint32_t position = GetSize();
72       literal->SetPositionInPool(position);
73       literals_.push_back(literal);
74       size_ += literal->GetAlignedSize();
75     }
76   }
77 
78   // First literal to be emitted.
GetFirst()79   RawLiteralListIterator GetFirst() { return literals_.begin(); }
80 
81   // Mark the end of the literal container.
GetEnd()82   RawLiteralListIterator GetEnd() { return literals_.end(); }
83 
84   // Remove all the literals from the container.
85   // If the literal's memory management has been delegated to the container
86   // it will be delete'd.
Clear()87   void Clear() {
88     for (RawLiteralListIterator literal_it = GetFirst(); literal_it != GetEnd();
89          literal_it++) {
90       RawLiteral* literal = *literal_it;
91       switch (literal->GetDeletionPolicy()) {
92         case RawLiteral::kDeletedOnPlacementByPool:
93           delete literal;
94           break;
95         case RawLiteral::kDeletedOnPoolDestruction:
96           keep_until_delete_.push_back(literal);
97           break;
98         case RawLiteral::kManuallyDeleted:
99           break;
100       }
101     }
102     literals_.clear();
103     size_ = 0;
104   }
105 
106  private:
107   // Size (in bytes and including alignments) of the literal pool.
108   unsigned size_;
109 
110   // Literal container.
111   std::list<RawLiteral*> literals_;
112   // Already bound Literal container the app requested this pool to keep.
113   std::list<RawLiteral*> keep_until_delete_;
114 };
115 
116 
117 // Macro assembler for aarch32 instruction set.
118 class MacroAssembler : public Assembler, public MacroAssemblerInterface {
119  public:
120   enum EmitOption { kBranchRequired, kNoBranchRequired };
121 
AsAssemblerBase()122   virtual internal::AssemblerBase* AsAssemblerBase() VIXL_OVERRIDE {
123     return this;
124   }
125 
ArePoolsBlocked()126   virtual bool ArePoolsBlocked() const VIXL_OVERRIDE {
127     return IsLiteralPoolBlocked() && IsVeneerPoolBlocked();
128   }
129 
130  private:
131   class MacroEmissionCheckScope : public EmissionCheckScope {
132    public:
MacroEmissionCheckScope(MacroAssemblerInterface * masm)133     explicit MacroEmissionCheckScope(MacroAssemblerInterface* masm)
134         : EmissionCheckScope(masm, kTypicalMacroInstructionMaxSize) {}
135 
136    private:
137     static const size_t kTypicalMacroInstructionMaxSize =
138         8 * kMaxInstructionSizeInBytes;
139   };
140 
141   class MacroAssemblerContext {
142    public:
MacroAssemblerContext()143     MacroAssemblerContext() : count_(0) {}
~MacroAssemblerContext()144     ~MacroAssemblerContext() {}
GetRecursiveCount()145     unsigned GetRecursiveCount() const { return count_; }
Up(const char * loc)146     void Up(const char* loc) {
147       location_stack_[count_] = loc;
148       count_++;
149       if (count_ >= kMaxRecursion) {
150         printf(
151             "Recursion limit reached; unable to resolve macro assembler "
152             "call.\n");
153         printf("Macro assembler context stack:\n");
154         for (unsigned i = 0; i < kMaxRecursion; i++) {
155           printf("%10s %s\n", (i == 0) ? "oldest -> " : "", location_stack_[i]);
156         }
157         VIXL_ABORT();
158       }
159     }
Down()160     void Down() {
161       VIXL_ASSERT((count_ > 0) && (count_ < kMaxRecursion));
162       count_--;
163     }
164 
165    private:
166     unsigned count_;
167     static const uint32_t kMaxRecursion = 6;
168     const char* location_stack_[kMaxRecursion];
169   };
170 
171   // This scope is used at each Delegate entry to avoid infinite recursion of
172   // Delegate calls. The limit is defined by
173   // MacroAssemblerContext::kMaxRecursion.
174   class ContextScope {
175    public:
ContextScope(MacroAssembler * const masm,const char * loc)176     explicit ContextScope(MacroAssembler* const masm, const char* loc)
177         : masm_(masm) {
178       VIXL_ASSERT(masm_->AllowMacroInstructions());
179       masm_->GetContext()->Up(loc);
180     }
~ContextScope()181     ~ContextScope() { masm_->GetContext()->Down(); }
182 
183    private:
184     MacroAssembler* const masm_;
185   };
186 
GetContext()187   MacroAssemblerContext* GetContext() { return &context_; }
188 
189   class ITScope {
190    public:
191     ITScope(MacroAssembler* masm, Condition* cond, bool can_use_it = false)
masm_(masm)192         : masm_(masm), cond_(*cond), can_use_it_(can_use_it) {
193       if (!cond_.Is(al) && masm->IsUsingT32()) {
194         if (can_use_it_) {
195           // IT is not deprecated (that implies a 16 bit T32 instruction).
196           // We generate an IT instruction and a conditional instruction.
197           masm->it(cond_);
198         } else {
199           // The usage of IT is deprecated for the instruction.
200           // We generate a conditional branch and an unconditional instruction.
201           // TODO: Use a scope utility with a size check. To do that, we'd need
202           // one with Open() and Close() implemented.
203           masm_->EnsureEmitFor(kMaxT32MacroInstructionSizeInBytes);
204           // Generate the branch.
205           masm_->b(cond_.Negate(), Narrow, &label_);
206           // Tell the macro-assembler to generate unconditional instructions.
207           *cond = al;
208         }
209       }
210 #ifdef VIXL_DEBUG
211       initial_cursor_offset_ = masm->GetCursorOffset();
212 #else
213       USE(initial_cursor_offset_);
214 #endif
215     }
~ITScope()216     ~ITScope() {
217       if (label_.IsReferenced()) {
218         // We only use the label for conditional T32 instructions for which we
219         // cannot use IT.
220         VIXL_ASSERT(!cond_.Is(al));
221         VIXL_ASSERT(masm_->IsUsingT32());
222         VIXL_ASSERT(!can_use_it_);
223         VIXL_ASSERT(masm_->GetCursorOffset() - initial_cursor_offset_ <=
224                     kMaxT32MacroInstructionSizeInBytes);
225         masm_->BindHelper(&label_);
226       } else if (masm_->IsUsingT32() && !cond_.Is(al)) {
227         // If we've generated a conditional T32 instruction but haven't used the
228         // label, we must have used IT. Check that we did not generate a
229         // deprecated sequence.
230         VIXL_ASSERT(can_use_it_);
231         VIXL_ASSERT(masm_->GetCursorOffset() - initial_cursor_offset_ <=
232                     k16BitT32InstructionSizeInBytes);
233       }
234     }
235 
236    private:
237     MacroAssembler* masm_;
238     Condition cond_;
239     Label label_;
240     bool can_use_it_;
241     uint32_t initial_cursor_offset_;
242   };
243 
244   template <Assembler::InstructionCondDtDL asmfn>
245   class EmitLiteralCondDtDL {
246    public:
EmitLiteralCondDtDL(DataType dt,DRegister rt)247     EmitLiteralCondDtDL(DataType dt, DRegister rt) : dt_(dt), rt_(rt) {}
emit(MacroAssembler * const masm,Condition cond,RawLiteral * const literal)248     void emit(MacroAssembler* const masm,
249               Condition cond,
250               RawLiteral* const literal) {
251       (masm->*asmfn)(cond, dt_, rt_, literal);
252     }
253 
254    private:
255     DataType dt_;
256     DRegister rt_;
257   };
258 
259   template <Assembler::InstructionCondDtSL asmfn>
260   class EmitLiteralCondDtSL {
261    public:
EmitLiteralCondDtSL(DataType dt,SRegister rt)262     EmitLiteralCondDtSL(DataType dt, SRegister rt) : dt_(dt), rt_(rt) {}
emit(MacroAssembler * const masm,Condition cond,RawLiteral * const literal)263     void emit(MacroAssembler* const masm,
264               Condition cond,
265               RawLiteral* const literal) {
266       (masm->*asmfn)(cond, dt_, rt_, literal);
267     }
268 
269    private:
270     DataType dt_;
271     SRegister rt_;
272   };
273 
274   template <Assembler::InstructionCondRL asmfn>
275   class EmitLiteralCondRL {
276    public:
EmitLiteralCondRL(Register rt)277     explicit EmitLiteralCondRL(Register rt) : rt_(rt) {}
emit(MacroAssembler * const masm,Condition cond,RawLiteral * const literal)278     void emit(MacroAssembler* const masm,
279               Condition cond,
280               RawLiteral* const literal) {
281       (masm->*asmfn)(cond, rt_, literal);
282     }
283 
284    private:
285     Register rt_;
286   };
287 
288   template <Assembler::InstructionCondRRL asmfn>
289   class EmitLiteralCondRRL {
290    public:
EmitLiteralCondRRL(Register rt,Register rt2)291     EmitLiteralCondRRL(Register rt, Register rt2) : rt_(rt), rt2_(rt2) {}
emit(MacroAssembler * const masm,Condition cond,RawLiteral * const literal)292     void emit(MacroAssembler* const masm,
293               Condition cond,
294               RawLiteral* const literal) {
295       (masm->*asmfn)(cond, rt_, rt2_, literal);
296     }
297 
298    private:
299     Register rt_, rt2_;
300   };
301 
302   class LiteralPoolManager {
303    public:
LiteralPoolManager(MacroAssembler * const masm)304     explicit LiteralPoolManager(MacroAssembler* const masm)
305         : masm_(masm), monitor_(0) {
306       ResetCheckpoint();
307     }
308 
ResetCheckpoint()309     void ResetCheckpoint() { checkpoint_ = Label::kMaxOffset; }
310 
GetLiteralPool()311     LiteralPool* GetLiteralPool() { return &literal_pool_; }
GetCheckpoint()312     Label::Offset GetCheckpoint() const {
313       // Make room for a branch over the pools.
314       return checkpoint_ - kMaxInstructionSizeInBytes;
315     }
GetLiteralPoolSize()316     size_t GetLiteralPoolSize() const { return literal_pool_.GetSize(); }
317 
318     // Checks if the insertion of the literal will put the forward reference
319     // too far in the literal pool.
320     // This function is called after generating an instruction with a literal.
321     // We want to know if the literal can be reached by the instruction.
322     // If not, we will unwind the instruction, generate the pool (without the
323     // last literal) and generate the instruction again.
324     // "literal" is the literal we want to insert into the pool.
325     // "from" is the location where the instruction which uses the literal has
326     // been generated.
WasInsertedTooFar(RawLiteral * literal)327     bool WasInsertedTooFar(RawLiteral* literal) const {
328       // Last accessible location for the instruction we just generated, which
329       // uses the literal.
330       Label::ForwardReference& reference = literal->GetBackForwardRef();
331       Label::Offset new_checkpoint = AlignDown(reference.GetCheckpoint(), 4);
332 
333       // TODO: We should not need to get the min of new_checkpoint and the
334       // existing checkpoint. The existing checkpoint should already have
335       // been checked when reserving space for this load literal instruction.
336       // The assertion below asserts that we don't need the min operation here.
337       Label::Offset checkpoint =
338           std::min(new_checkpoint, literal->GetAlignedCheckpoint(4));
339       bool literal_in_pool =
340           (literal->GetPositionInPool() != Label::kMaxOffset);
341       Label::Offset position_in_pool = literal_in_pool
342                                            ? literal->GetPositionInPool()
343                                            : literal_pool_.GetSize();
344       // Compare the checkpoint to the location where the literal should be
345       // added.
346       // We add space for two instructions: one branch and one potential veneer
347       // which may be added after the check. In this particular use case, no
348       // veneer can be added but, this way, we are consistent with all the
349       // literal pool checks.
350       int32_t from =
351           reference.GetLocation() + masm_->GetArchitectureStatePCOffset();
352       bool too_far =
353           checkpoint < from + position_in_pool +
354                            2 * static_cast<int32_t>(kMaxInstructionSizeInBytes);
355       // Assert if the literal is already in the pool and the existing
356       // checkpoint triggers a rewind here, as this means the pool should
357       // already have been emitted (perhaps we have not reserved enough space
358       // for the instruction we are about to rewind).
359       VIXL_ASSERT(!(too_far && (literal->GetCheckpoint() < new_checkpoint)));
360       return too_far;
361     }
362 
363     // Set the different checkpoints where the literal pool has to be emited.
UpdateCheckpoint(RawLiteral * literal)364     void UpdateCheckpoint(RawLiteral* literal) {
365       // The literal should have been placed somewhere in the literal pool
366       VIXL_ASSERT(literal->GetPositionInPool() != Label::kMaxOffset);
367       // TODO(all): Consider AddForwardRef as a  virtual so the checkpoint is
368       //   updated when inserted. Or move checkpoint_ into Label,
369       literal->UpdateCheckpoint();
370       Label::Offset tmp =
371           literal->GetAlignedCheckpoint(4) - literal->GetPositionInPool();
372       if (checkpoint_ > tmp) {
373         checkpoint_ = tmp;
374         masm_->ComputeCheckpoint();
375       }
376     }
377 
IsEmpty()378     bool IsEmpty() const { return GetLiteralPoolSize() == 0; }
379 
Block()380     void Block() { monitor_++; }
Release()381     void Release() {
382       VIXL_ASSERT(IsBlocked());
383       if (--monitor_ == 0) {
384         // Ensure the pool has not been blocked for too long.
385         VIXL_ASSERT(masm_->GetCursorOffset() <= checkpoint_);
386       }
387     }
IsBlocked()388     bool IsBlocked() const { return monitor_ != 0; }
389 
390    private:
391     MacroAssembler* const masm_;
392     LiteralPool literal_pool_;
393 
394     // Max offset in the code buffer where the literal needs to be
395     // emitted. A default value of Label::kMaxOffset means that the checkpoint
396     // is invalid.
397     Label::Offset checkpoint_;
398     // Indicates whether the emission of this pool is blocked.
399     int monitor_;
400   };
401 
402   void PerformEnsureEmit(Label::Offset target, uint32_t extra_size);
403 
404  protected:
BlockPools()405   virtual void BlockPools() VIXL_OVERRIDE {
406     BlockLiteralPool();
407     BlockVeneerPool();
408   }
ReleasePools()409   virtual void ReleasePools() VIXL_OVERRIDE {
410     ReleaseLiteralPool();
411     ReleaseVeneerPool();
412   }
EnsureEmitPoolsFor(size_t size)413   virtual void EnsureEmitPoolsFor(size_t size) VIXL_OVERRIDE {
414     // TODO: Optimise this. It also checks that there is space in the buffer,
415     // which we do not need to do here.
416     VIXL_ASSERT(IsUint32(size));
417     EnsureEmitFor(static_cast<uint32_t>(size));
418   }
419 
420   // Tell whether any of the macro instruction can be used. When false the
421   // MacroAssembler will assert if a method which can emit a variable number
422   // of instructions is called.
SetAllowMacroInstructions(bool value)423   virtual void SetAllowMacroInstructions(bool value) VIXL_OVERRIDE {
424     allow_macro_instructions_ = value;
425   }
426 
BlockLiteralPool()427   void BlockLiteralPool() { literal_pool_manager_.Block(); }
ReleaseLiteralPool()428   void ReleaseLiteralPool() { literal_pool_manager_.Release(); }
IsLiteralPoolBlocked()429   bool IsLiteralPoolBlocked() const {
430     return literal_pool_manager_.IsBlocked();
431   }
BlockVeneerPool()432   void BlockVeneerPool() { veneer_pool_manager_.Block(); }
ReleaseVeneerPool()433   void ReleaseVeneerPool() { veneer_pool_manager_.Release(); }
IsVeneerPoolBlocked()434   bool IsVeneerPoolBlocked() const { return veneer_pool_manager_.IsBlocked(); }
435 
436   void HandleOutOfBoundsImmediate(Condition cond, Register tmp, uint32_t imm);
437   void PadToMinimumBranchRange(Label* label);
438 
439   // Generate the instruction and if it's not possible revert the whole thing.
440   // emit the literal pool and regenerate the instruction.
441   // Note: The instruction is generated via
442   // void T::emit(MacroAssembler* const, RawLiteral* const)
443   template <typename T>
GenerateInstruction(Condition cond,T instr_callback,RawLiteral * const literal)444   void GenerateInstruction(Condition cond,
445                            T instr_callback,
446                            RawLiteral* const literal) {
447     int32_t cursor = GetCursorOffset();
448     // Emit the instruction, via the assembler
449     {
450       MacroEmissionCheckScope guard(this);
451       // The ITScope can change the condition and we want to be able to revert
452       // this.
453       Condition c(cond);
454       ITScope it_scope(this, &c);
455       instr_callback.emit(this, c, literal);
456     }
457     if (!literal->IsManuallyPlaced() && !literal->IsBound() &&
458         !IsLiteralPoolBlocked()) {
459       if (WasInsertedTooFar(literal)) {
460         // The instruction's data is too far: revert the emission
461         GetBuffer()->Rewind(cursor);
462         literal->InvalidateLastForwardReference(RawLiteral::kNoUpdateNecessary);
463         EmitLiteralPool(kBranchRequired);
464         MacroEmissionCheckScope guard(this);
465         ITScope it_scope(this, &cond);
466         instr_callback.emit(this, cond, literal);
467       }
468       // The literal pool above might have included the literal - in which
469       // case it will now be bound.
470       if (!literal->IsBound()) {
471         literal_pool_manager_.GetLiteralPool()->AddLiteral(literal);
472         literal_pool_manager_.UpdateCheckpoint(literal);
473       }
474     }
475   }
476 
477  public:
478   explicit MacroAssembler(InstructionSet isa = kDefaultISA)
Assembler(isa)479       : Assembler(isa),
480         available_(r12),
481         current_scratch_scope_(NULL),
482         checkpoint_(Label::kMaxOffset),
483         literal_pool_manager_(this),
484         veneer_pool_manager_(this),
485         generate_simulator_code_(VIXL_AARCH32_GENERATE_SIMULATOR_CODE) {
486 #ifdef VIXL_DEBUG
487     SetAllowMacroInstructions(true);
488 #else
489     USE(literal_pool_manager_);
490     USE(allow_macro_instructions_);
491 #endif
492     ComputeCheckpoint();
493   }
494   explicit MacroAssembler(size_t size, InstructionSet isa = kDefaultISA)
Assembler(size,isa)495       : Assembler(size, isa),
496         available_(r12),
497         current_scratch_scope_(NULL),
498         checkpoint_(Label::kMaxOffset),
499         literal_pool_manager_(this),
500         veneer_pool_manager_(this),
501         generate_simulator_code_(VIXL_AARCH32_GENERATE_SIMULATOR_CODE) {
502 #ifdef VIXL_DEBUG
503     SetAllowMacroInstructions(true);
504 #endif
505     ComputeCheckpoint();
506   }
507   MacroAssembler(byte* buffer, size_t size, InstructionSet isa = kDefaultISA)
Assembler(buffer,size,isa)508       : Assembler(buffer, size, isa),
509         available_(r12),
510         current_scratch_scope_(NULL),
511         checkpoint_(Label::kMaxOffset),
512         literal_pool_manager_(this),
513         veneer_pool_manager_(this),
514         generate_simulator_code_(VIXL_AARCH32_GENERATE_SIMULATOR_CODE) {
515 #ifdef VIXL_DEBUG
516     SetAllowMacroInstructions(true);
517 #endif
518     ComputeCheckpoint();
519   }
520 
GenerateSimulatorCode()521   bool GenerateSimulatorCode() const { return generate_simulator_code_; }
522 
AllowMacroInstructions()523   virtual bool AllowMacroInstructions() const VIXL_OVERRIDE {
524     return allow_macro_instructions_;
525   }
526 
FinalizeCode()527   void FinalizeCode() {
528     EmitLiteralPool(kNoBranchRequired);
529     Assembler::FinalizeCode();
530   }
531 
GetScratchRegisterList()532   RegisterList* GetScratchRegisterList() { return &available_; }
GetScratchVRegisterList()533   VRegisterList* GetScratchVRegisterList() { return &available_vfp_; }
534 
535   // Get or set the current (most-deeply-nested) UseScratchRegisterScope.
SetCurrentScratchRegisterScope(UseScratchRegisterScope * scope)536   void SetCurrentScratchRegisterScope(UseScratchRegisterScope* scope) {
537     current_scratch_scope_ = scope;
538   }
GetCurrentScratchRegisterScope()539   UseScratchRegisterScope* GetCurrentScratchRegisterScope() {
540     return current_scratch_scope_;
541   }
542 
543   // Given an address calculation (Register + immediate), generate code to
544   // partially compute the address. The returned MemOperand will perform any
545   // remaining computation in a subsequent load or store instruction.
546   //
547   // The offset provided should be the offset that would be used in a load or
548   // store instruction (if it had sufficient range). This only matters where
549   // base.Is(pc), since load and store instructions align the pc before
550   // dereferencing it.
551   //
552   // TODO: Improve the handling of negative offsets. They are not implemented
553   // precisely for now because they only have a marginal benefit for the
554   // existing uses (in delegates).
555   MemOperand MemOperandComputationHelper(Condition cond,
556                                          Register scratch,
557                                          Register base,
558                                          uint32_t offset,
559                                          uint32_t extra_offset_mask = 0);
560 
561   MemOperand MemOperandComputationHelper(Register scratch,
562                                          Register base,
563                                          uint32_t offset,
564                                          uint32_t extra_offset_mask = 0) {
565     return MemOperandComputationHelper(al,
566                                        scratch,
567                                        base,
568                                        offset,
569                                        extra_offset_mask);
570   }
571   MemOperand MemOperandComputationHelper(Condition cond,
572                                          Register scratch,
573                                          Label* label,
574                                          uint32_t extra_offset_mask = 0) {
575     // Check for buffer space _before_ calculating the offset, in case we
576     // generate a pool that affects the offset calculation.
577     CodeBufferCheckScope scope(this, 4 * kMaxInstructionSizeInBytes);
578     Label::Offset offset =
579         label->GetLocation() -
580         AlignDown(GetCursorOffset() + GetArchitectureStatePCOffset(), 4);
581     return MemOperandComputationHelper(cond,
582                                        scratch,
583                                        pc,
584                                        offset,
585                                        extra_offset_mask);
586   }
587   MemOperand MemOperandComputationHelper(Register scratch,
588                                          Label* label,
589                                          uint32_t extra_offset_mask = 0) {
590     return MemOperandComputationHelper(al, scratch, label, extra_offset_mask);
591   }
592 
593   // Determine the appropriate mask to pass into MemOperandComputationHelper.
594   uint32_t GetOffsetMask(InstructionType type, AddrMode addrmode);
595 
596   // State and type helpers.
IsModifiedImmediate(uint32_t imm)597   bool IsModifiedImmediate(uint32_t imm) {
598     return IsUsingT32() ? ImmediateT32::IsImmediateT32(imm)
599                         : ImmediateA32::IsImmediateA32(imm);
600   }
601 
Bind(Label * label)602   void Bind(Label* label) {
603     VIXL_ASSERT(allow_macro_instructions_);
604     PadToMinimumBranchRange(label);
605     BindHelper(label);
606   }
607 
AddBranchLabel(Label * label)608   void AddBranchLabel(Label* label) {
609     if (label->IsBound()) return;
610     veneer_pool_manager_.AddLabel(label);
611   }
612 
Place(RawLiteral * literal)613   void Place(RawLiteral* literal) {
614     VIXL_ASSERT(allow_macro_instructions_);
615     VIXL_ASSERT(literal->IsManuallyPlaced());
616     // We have two calls to `GetBuffer()->Align()` below, that aligns on word
617     // (4 bytes) boundaries. Only one is taken into account in
618     // `GetAlignedSize()`.
619     static const size_t kMaxAlignSize = 3;
620     size_t size = literal->GetAlignedSize() + kMaxAlignSize;
621     VIXL_ASSERT(IsUint32(size));
622     // TODO: We should use a scope here to check the size of data emitted.  We
623     // currently cannot because `aarch32::CodeBufferCheckScope` currently checks
624     // for pools, so that could lead to an infinite loop.
625     EnsureEmitFor(static_cast<uint32_t>(size));
626     // Literals must be emitted aligned on word (4 bytes) boundaries.
627     GetBuffer()->Align();
628     PlaceHelper(literal);
629     GetBuffer()->Align();
630   }
631 
632   void ComputeCheckpoint();
633 
GetMarginBeforeVeneerEmission()634   int32_t GetMarginBeforeVeneerEmission() const {
635     return veneer_pool_manager_.GetCheckpoint() - GetCursorOffset();
636   }
637 
GetTargetForLiteralEmission()638   Label::Offset GetTargetForLiteralEmission() const {
639     if (literal_pool_manager_.IsEmpty()) return Label::kMaxOffset;
640     // We add an instruction to the size as the instruction which calls this
641     // function may add a veneer and, without this extra instruction, could put
642     // the literals out of range. For example, it's the case for a "B"
643     // instruction. At the beginning of the instruction we call EnsureEmitFor
644     // which calls this function. However, the target of the branch hasn't been
645     // inserted yet in the veneer pool.
646     size_t veneer_max_size =
647         veneer_pool_manager_.GetMaxSize() + kMaxInstructionSizeInBytes;
648     VIXL_ASSERT(IsInt32(veneer_max_size));
649     // We must be able to generate the veneer pool first.
650     Label::Offset tmp = literal_pool_manager_.GetCheckpoint() -
651                         static_cast<Label::Offset>(veneer_max_size);
652     VIXL_ASSERT(tmp >= 0);
653     return tmp;
654   }
655 
GetMarginBeforeLiteralEmission()656   int32_t GetMarginBeforeLiteralEmission() const {
657     Label::Offset tmp = GetTargetForLiteralEmission();
658     VIXL_ASSERT(tmp >= GetCursorOffset());
659     return tmp - GetCursorOffset();
660   }
661 
VeneerPoolIsEmpty()662   bool VeneerPoolIsEmpty() const { return veneer_pool_manager_.IsEmpty(); }
LiteralPoolIsEmpty()663   bool LiteralPoolIsEmpty() const { return literal_pool_manager_.IsEmpty(); }
664 
EnsureEmitFor(uint32_t size)665   void EnsureEmitFor(uint32_t size) {
666     Label::Offset target = GetCursorOffset() + size;
667     if (target <= checkpoint_) return;
668     PerformEnsureEmit(target, size);
669   }
670 
WasInsertedTooFar(RawLiteral * literal)671   bool WasInsertedTooFar(RawLiteral* literal) {
672     return literal_pool_manager_.WasInsertedTooFar(literal);
673   }
674 
AliasesAvailableScratchRegister(Register reg)675   bool AliasesAvailableScratchRegister(Register reg) {
676     return GetScratchRegisterList()->Includes(reg);
677   }
678 
AliasesAvailableScratchRegister(RegisterOrAPSR_nzcv reg)679   bool AliasesAvailableScratchRegister(RegisterOrAPSR_nzcv reg) {
680     if (reg.IsAPSR_nzcv()) return false;
681     return GetScratchRegisterList()->Includes(reg.AsRegister());
682   }
683 
AliasesAvailableScratchRegister(VRegister reg)684   bool AliasesAvailableScratchRegister(VRegister reg) {
685     return GetScratchVRegisterList()->IncludesAliasOf(reg);
686   }
687 
AliasesAvailableScratchRegister(const Operand & operand)688   bool AliasesAvailableScratchRegister(const Operand& operand) {
689     if (operand.IsImmediate()) return false;
690     return AliasesAvailableScratchRegister(operand.GetBaseRegister()) ||
691            (operand.IsRegisterShiftedRegister() &&
692             AliasesAvailableScratchRegister(operand.GetShiftRegister()));
693   }
694 
AliasesAvailableScratchRegister(const NeonOperand & operand)695   bool AliasesAvailableScratchRegister(const NeonOperand& operand) {
696     if (operand.IsImmediate()) return false;
697     return AliasesAvailableScratchRegister(operand.GetRegister());
698   }
699 
AliasesAvailableScratchRegister(SRegisterList list)700   bool AliasesAvailableScratchRegister(SRegisterList list) {
701     for (int n = 0; n < list.GetLength(); n++) {
702       if (AliasesAvailableScratchRegister(list.GetSRegister(n))) return true;
703     }
704     return false;
705   }
706 
AliasesAvailableScratchRegister(DRegisterList list)707   bool AliasesAvailableScratchRegister(DRegisterList list) {
708     for (int n = 0; n < list.GetLength(); n++) {
709       if (AliasesAvailableScratchRegister(list.GetDRegister(n))) return true;
710     }
711     return false;
712   }
713 
AliasesAvailableScratchRegister(NeonRegisterList list)714   bool AliasesAvailableScratchRegister(NeonRegisterList list) {
715     for (int n = 0; n < list.GetLength(); n++) {
716       if (AliasesAvailableScratchRegister(list.GetDRegister(n))) return true;
717     }
718     return false;
719   }
720 
AliasesAvailableScratchRegister(RegisterList list)721   bool AliasesAvailableScratchRegister(RegisterList list) {
722     return GetScratchRegisterList()->Overlaps(list);
723   }
724 
AliasesAvailableScratchRegister(const MemOperand & operand)725   bool AliasesAvailableScratchRegister(const MemOperand& operand) {
726     return AliasesAvailableScratchRegister(operand.GetBaseRegister()) ||
727            (operand.IsShiftedRegister() &&
728             AliasesAvailableScratchRegister(operand.GetOffsetRegister()));
729   }
730 
731   // Emit the literal pool in the code buffer.
732   // Every literal is placed on a 32bit boundary
733   // All the literals in the pool will be removed from the pool and potentially
734   // delete'd.
735   void EmitLiteralPool(LiteralPool* const literal_pool, EmitOption option);
736   void EmitLiteralPool(EmitOption option = kBranchRequired) {
737     VIXL_ASSERT(!IsLiteralPoolBlocked());
738     EmitLiteralPool(literal_pool_manager_.GetLiteralPool(), option);
739     literal_pool_manager_.ResetCheckpoint();
740     ComputeCheckpoint();
741   }
742 
GetLiteralPoolSize()743   size_t GetLiteralPoolSize() const {
744     return literal_pool_manager_.GetLiteralPoolSize();
745   }
746 
747   // Adr with a literal already constructed. Add the literal to the pool if it
748   // is not already done.
Adr(Condition cond,Register rd,RawLiteral * literal)749   void Adr(Condition cond, Register rd, RawLiteral* literal) {
750     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
751     VIXL_ASSERT(allow_macro_instructions_);
752     VIXL_ASSERT(OutsideITBlock());
753     EmitLiteralCondRL<&Assembler::adr> emit_helper(rd);
754     GenerateInstruction(cond, emit_helper, literal);
755   }
Adr(Register rd,RawLiteral * literal)756   void Adr(Register rd, RawLiteral* literal) { Adr(al, rd, literal); }
757 
758   // Loads with literals already constructed. Add the literal to the pool
759   // if it is not already done.
Ldr(Condition cond,Register rt,RawLiteral * literal)760   void Ldr(Condition cond, Register rt, RawLiteral* literal) {
761     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
762     VIXL_ASSERT(allow_macro_instructions_);
763     VIXL_ASSERT(OutsideITBlock());
764     EmitLiteralCondRL<&Assembler::ldr> emit_helper(rt);
765     GenerateInstruction(cond, emit_helper, literal);
766   }
Ldr(Register rt,RawLiteral * literal)767   void Ldr(Register rt, RawLiteral* literal) { Ldr(al, rt, literal); }
768 
Ldrb(Condition cond,Register rt,RawLiteral * literal)769   void Ldrb(Condition cond, Register rt, RawLiteral* literal) {
770     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
771     VIXL_ASSERT(allow_macro_instructions_);
772     VIXL_ASSERT(OutsideITBlock());
773     EmitLiteralCondRL<&Assembler::ldrb> emit_helper(rt);
774     GenerateInstruction(cond, emit_helper, literal);
775   }
Ldrb(Register rt,RawLiteral * literal)776   void Ldrb(Register rt, RawLiteral* literal) { Ldrb(al, rt, literal); }
777 
Ldrd(Condition cond,Register rt,Register rt2,RawLiteral * literal)778   void Ldrd(Condition cond, Register rt, Register rt2, RawLiteral* literal) {
779     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
780     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt2));
781     VIXL_ASSERT(allow_macro_instructions_);
782     VIXL_ASSERT(OutsideITBlock());
783     EmitLiteralCondRRL<&Assembler::ldrd> emit_helper(rt, rt2);
784     GenerateInstruction(cond, emit_helper, literal);
785   }
Ldrd(Register rt,Register rt2,RawLiteral * literal)786   void Ldrd(Register rt, Register rt2, RawLiteral* literal) {
787     Ldrd(al, rt, rt2, literal);
788   }
789 
Ldrh(Condition cond,Register rt,RawLiteral * literal)790   void Ldrh(Condition cond, Register rt, RawLiteral* literal) {
791     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
792     VIXL_ASSERT(allow_macro_instructions_);
793     VIXL_ASSERT(OutsideITBlock());
794     EmitLiteralCondRL<&Assembler::ldrh> emit_helper(rt);
795     GenerateInstruction(cond, emit_helper, literal);
796   }
Ldrh(Register rt,RawLiteral * literal)797   void Ldrh(Register rt, RawLiteral* literal) { Ldrh(al, rt, literal); }
798 
Ldrsb(Condition cond,Register rt,RawLiteral * literal)799   void Ldrsb(Condition cond, Register rt, RawLiteral* literal) {
800     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
801     VIXL_ASSERT(allow_macro_instructions_);
802     VIXL_ASSERT(OutsideITBlock());
803     EmitLiteralCondRL<&Assembler::ldrsb> emit_helper(rt);
804     GenerateInstruction(cond, emit_helper, literal);
805   }
Ldrsb(Register rt,RawLiteral * literal)806   void Ldrsb(Register rt, RawLiteral* literal) { Ldrsb(al, rt, literal); }
807 
Ldrsh(Condition cond,Register rt,RawLiteral * literal)808   void Ldrsh(Condition cond, Register rt, RawLiteral* literal) {
809     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
810     VIXL_ASSERT(allow_macro_instructions_);
811     VIXL_ASSERT(OutsideITBlock());
812     EmitLiteralCondRL<&Assembler::ldrsh> emit_helper(rt);
813     GenerateInstruction(cond, emit_helper, literal);
814   }
Ldrsh(Register rt,RawLiteral * literal)815   void Ldrsh(Register rt, RawLiteral* literal) { Ldrsh(al, rt, literal); }
816 
Vldr(Condition cond,DataType dt,DRegister rd,RawLiteral * literal)817   void Vldr(Condition cond, DataType dt, DRegister rd, RawLiteral* literal) {
818     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
819     VIXL_ASSERT(allow_macro_instructions_);
820     VIXL_ASSERT(OutsideITBlock());
821     EmitLiteralCondDtDL<&Assembler::vldr> emit_helper(dt, rd);
822     GenerateInstruction(cond, emit_helper, literal);
823   }
Vldr(DataType dt,DRegister rd,RawLiteral * literal)824   void Vldr(DataType dt, DRegister rd, RawLiteral* literal) {
825     Vldr(al, dt, rd, literal);
826   }
Vldr(Condition cond,DRegister rd,RawLiteral * literal)827   void Vldr(Condition cond, DRegister rd, RawLiteral* literal) {
828     Vldr(cond, Untyped64, rd, literal);
829   }
Vldr(DRegister rd,RawLiteral * literal)830   void Vldr(DRegister rd, RawLiteral* literal) {
831     Vldr(al, Untyped64, rd, literal);
832   }
833 
Vldr(Condition cond,DataType dt,SRegister rd,RawLiteral * literal)834   void Vldr(Condition cond, DataType dt, SRegister rd, RawLiteral* literal) {
835     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
836     VIXL_ASSERT(allow_macro_instructions_);
837     VIXL_ASSERT(OutsideITBlock());
838     EmitLiteralCondDtSL<&Assembler::vldr> emit_helper(dt, rd);
839     GenerateInstruction(cond, emit_helper, literal);
840   }
Vldr(DataType dt,SRegister rd,RawLiteral * literal)841   void Vldr(DataType dt, SRegister rd, RawLiteral* literal) {
842     Vldr(al, dt, rd, literal);
843   }
Vldr(Condition cond,SRegister rd,RawLiteral * literal)844   void Vldr(Condition cond, SRegister rd, RawLiteral* literal) {
845     Vldr(cond, Untyped32, rd, literal);
846   }
Vldr(SRegister rd,RawLiteral * literal)847   void Vldr(SRegister rd, RawLiteral* literal) {
848     Vldr(al, Untyped32, rd, literal);
849   }
850 
851   // Generic Ldr(register, data)
Ldr(Condition cond,Register rt,uint32_t v)852   void Ldr(Condition cond, Register rt, uint32_t v) {
853     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
854     VIXL_ASSERT(allow_macro_instructions_);
855     VIXL_ASSERT(OutsideITBlock());
856     RawLiteral* literal =
857         new Literal<uint32_t>(v, RawLiteral::kDeletedOnPlacementByPool);
858     EmitLiteralCondRL<&Assembler::ldr> emit_helper(rt);
859     GenerateInstruction(cond, emit_helper, literal);
860   }
861   template <typename T>
Ldr(Register rt,T v)862   void Ldr(Register rt, T v) {
863     Ldr(al, rt, v);
864   }
865 
866   // Generic Ldrd(rt, rt2, data)
Ldrd(Condition cond,Register rt,Register rt2,uint64_t v)867   void Ldrd(Condition cond, Register rt, Register rt2, uint64_t v) {
868     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
869     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt2));
870     VIXL_ASSERT(allow_macro_instructions_);
871     VIXL_ASSERT(OutsideITBlock());
872     RawLiteral* literal =
873         new Literal<uint64_t>(v, RawLiteral::kDeletedOnPlacementByPool);
874     EmitLiteralCondRRL<&Assembler::ldrd> emit_helper(rt, rt2);
875     GenerateInstruction(cond, emit_helper, literal);
876   }
877   template <typename T>
Ldrd(Register rt,Register rt2,T v)878   void Ldrd(Register rt, Register rt2, T v) {
879     Ldrd(al, rt, rt2, v);
880   }
881 
Vldr(Condition cond,SRegister rd,float v)882   void Vldr(Condition cond, SRegister rd, float v) {
883     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
884     VIXL_ASSERT(allow_macro_instructions_);
885     VIXL_ASSERT(OutsideITBlock());
886     RawLiteral* literal =
887         new Literal<float>(v, RawLiteral::kDeletedOnPlacementByPool);
888     EmitLiteralCondDtSL<&Assembler::vldr> emit_helper(Untyped32, rd);
889     GenerateInstruction(cond, emit_helper, literal);
890   }
Vldr(SRegister rd,float v)891   void Vldr(SRegister rd, float v) { Vldr(al, rd, v); }
892 
Vldr(Condition cond,DRegister rd,double v)893   void Vldr(Condition cond, DRegister rd, double v) {
894     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
895     VIXL_ASSERT(allow_macro_instructions_);
896     VIXL_ASSERT(OutsideITBlock());
897     RawLiteral* literal =
898         new Literal<double>(v, RawLiteral::kDeletedOnPlacementByPool);
899     EmitLiteralCondDtDL<&Assembler::vldr> emit_helper(Untyped64, rd);
900     GenerateInstruction(cond, emit_helper, literal);
901   }
Vldr(DRegister rd,double v)902   void Vldr(DRegister rd, double v) { Vldr(al, rd, v); }
903 
Vmov(Condition cond,DRegister rt,double v)904   void Vmov(Condition cond, DRegister rt, double v) { Vmov(cond, F64, rt, v); }
Vmov(DRegister rt,double v)905   void Vmov(DRegister rt, double v) { Vmov(al, F64, rt, v); }
Vmov(Condition cond,SRegister rt,float v)906   void Vmov(Condition cond, SRegister rt, float v) { Vmov(cond, F32, rt, v); }
Vmov(SRegister rt,float v)907   void Vmov(SRegister rt, float v) { Vmov(al, F32, rt, v); }
908 
909   // Claim memory on the stack.
910   // Note that the Claim, Drop, and Peek helpers below ensure that offsets used
911   // are multiples of 32 bits to help maintain 32-bit SP alignment.
912   // We could `Align{Up,Down}(size, 4)`, but that's potentially problematic:
913   //     Claim(3)
914   //     Claim(1)
915   //     Drop(4)
916   // would seem correct, when in fact:
917   //    Claim(3) -> sp = sp - 4
918   //    Claim(1) -> sp = sp - 4
919   //    Drop(4)  -> sp = sp + 4
920   //
Claim(int32_t size)921   void Claim(int32_t size) {
922     if (size == 0) return;
923     // The stack must be kept 32bit aligned.
924     VIXL_ASSERT((size > 0) && ((size % 4) == 0));
925     Sub(sp, sp, size);
926   }
927   // Release memory on the stack
Drop(int32_t size)928   void Drop(int32_t size) {
929     if (size == 0) return;
930     // The stack must be kept 32bit aligned.
931     VIXL_ASSERT((size > 0) && ((size % 4) == 0));
932     Add(sp, sp, size);
933   }
Peek(Register dst,int32_t offset)934   void Peek(Register dst, int32_t offset) {
935     VIXL_ASSERT((offset >= 0) && ((offset % 4) == 0));
936     Ldr(dst, MemOperand(sp, offset));
937   }
Poke(Register src,int32_t offset)938   void Poke(Register src, int32_t offset) {
939     VIXL_ASSERT((offset >= 0) && ((offset % 4) == 0));
940     Str(src, MemOperand(sp, offset));
941   }
942   void Printf(const char* format,
943               CPURegister reg1 = NoReg,
944               CPURegister reg2 = NoReg,
945               CPURegister reg3 = NoReg,
946               CPURegister reg4 = NoReg);
947   // Functions used by Printf for generation.
948   void PushRegister(CPURegister reg);
949   void PreparePrintfArgument(CPURegister reg,
950                              int* core_count,
951                              int* vfp_count,
952                              uint32_t* printf_type);
953   // Handlers for cases not handled by the assembler.
954   // ADD, MOVT, MOVW, SUB, SXTB16, TEQ, UXTB16
955   virtual void Delegate(InstructionType type,
956                         InstructionCondROp instruction,
957                         Condition cond,
958                         Register rn,
959                         const Operand& operand) VIXL_OVERRIDE;
960   // CMN, CMP, MOV, MOVS, MVN, MVNS, SXTB, SXTH, TST, UXTB, UXTH
961   virtual void Delegate(InstructionType type,
962                         InstructionCondSizeROp instruction,
963                         Condition cond,
964                         EncodingSize size,
965                         Register rn,
966                         const Operand& operand) VIXL_OVERRIDE;
967   // ADDW, ORN, ORNS, PKHBT, PKHTB, RSC, RSCS, SUBW, SXTAB, SXTAB16, SXTAH,
968   // UXTAB, UXTAB16, UXTAH
969   virtual void Delegate(InstructionType type,
970                         InstructionCondRROp instruction,
971                         Condition cond,
972                         Register rd,
973                         Register rn,
974                         const Operand& operand) VIXL_OVERRIDE;
975   // ADC, ADCS, ADD, ADDS, AND, ANDS, ASR, ASRS, BIC, BICS, EOR, EORS, LSL,
976   // LSLS, LSR, LSRS, ORR, ORRS, ROR, RORS, RSB, RSBS, SBC, SBCS, SUB, SUBS
977   virtual void Delegate(InstructionType type,
978                         InstructionCondSizeRL instruction,
979                         Condition cond,
980                         EncodingSize size,
981                         Register rd,
982                         Label* label) VIXL_OVERRIDE;
983   bool GenerateSplitInstruction(InstructionCondSizeRROp instruction,
984                                 Condition cond,
985                                 Register rd,
986                                 Register rn,
987                                 uint32_t imm,
988                                 uint32_t mask);
989   virtual void Delegate(InstructionType type,
990                         InstructionCondSizeRROp instruction,
991                         Condition cond,
992                         EncodingSize size,
993                         Register rd,
994                         Register rn,
995                         const Operand& operand) VIXL_OVERRIDE;
996   // CBNZ, CBZ
997   virtual void Delegate(InstructionType type,
998                         InstructionRL instruction,
999                         Register rn,
1000                         Label* label) VIXL_OVERRIDE;
1001   // VMOV
1002   virtual void Delegate(InstructionType type,
1003                         InstructionCondDtSSop instruction,
1004                         Condition cond,
1005                         DataType dt,
1006                         SRegister rd,
1007                         const SOperand& operand) VIXL_OVERRIDE;
1008   // VMOV, VMVN
1009   virtual void Delegate(InstructionType type,
1010                         InstructionCondDtDDop instruction,
1011                         Condition cond,
1012                         DataType dt,
1013                         DRegister rd,
1014                         const DOperand& operand) VIXL_OVERRIDE;
1015   // VMOV, VMVN
1016   virtual void Delegate(InstructionType type,
1017                         InstructionCondDtQQop instruction,
1018                         Condition cond,
1019                         DataType dt,
1020                         QRegister rd,
1021                         const QOperand& operand) VIXL_OVERRIDE;
1022   // LDR, LDRB, LDRH, LDRSB, LDRSH, STR, STRB, STRH
1023   virtual void Delegate(InstructionType type,
1024                         InstructionCondSizeRMop instruction,
1025                         Condition cond,
1026                         EncodingSize size,
1027                         Register rd,
1028                         const MemOperand& operand) VIXL_OVERRIDE;
1029   // LDAEXD, LDRD, LDREXD, STLEX, STLEXB, STLEXH, STRD, STREX, STREXB, STREXH
1030   virtual void Delegate(InstructionType type,
1031                         InstructionCondRL instruction,
1032                         Condition cond,
1033                         Register rt,
1034                         Label* label) VIXL_OVERRIDE;
1035   virtual void Delegate(InstructionType type,
1036                         InstructionCondRRL instruction,
1037                         Condition cond,
1038                         Register rt,
1039                         Register rt2,
1040                         Label* label) VIXL_OVERRIDE;
1041   virtual void Delegate(InstructionType type,
1042                         InstructionCondRRMop instruction,
1043                         Condition cond,
1044                         Register rt,
1045                         Register rt2,
1046                         const MemOperand& operand) VIXL_OVERRIDE;
1047   // VLDR, VSTR
1048   virtual void Delegate(InstructionType type,
1049                         InstructionCondDtSMop instruction,
1050                         Condition cond,
1051                         DataType dt,
1052                         SRegister rd,
1053                         const MemOperand& operand) VIXL_OVERRIDE;
1054   // VLDR, VSTR
1055   virtual void Delegate(InstructionType type,
1056                         InstructionCondDtDMop instruction,
1057                         Condition cond,
1058                         DataType dt,
1059                         DRegister rd,
1060                         const MemOperand& operand) VIXL_OVERRIDE;
1061   // MSR
1062   virtual void Delegate(InstructionType type,
1063                         InstructionCondMsrOp instruction,
1064                         Condition cond,
1065                         MaskedSpecialRegister spec_reg,
1066                         const Operand& operand) VIXL_OVERRIDE;
1067   virtual void Delegate(InstructionType type,
1068                         InstructionCondDtDL instruction,
1069                         Condition cond,
1070                         DataType dt,
1071                         DRegister rd,
1072                         Label* label) VIXL_OVERRIDE;
1073   virtual void Delegate(InstructionType type,
1074                         InstructionCondDtSL instruction,
1075                         Condition cond,
1076                         DataType dt,
1077                         SRegister rd,
1078                         Label* label) VIXL_OVERRIDE;
1079 
1080   // Start of generated code.
1081 
Adc(Condition cond,Register rd,Register rn,const Operand & operand)1082   void Adc(Condition cond, Register rd, Register rn, const Operand& operand) {
1083     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
1084     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1085     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
1086     VIXL_ASSERT(allow_macro_instructions_);
1087     VIXL_ASSERT(OutsideITBlock());
1088     MacroEmissionCheckScope guard(this);
1089     bool can_use_it =
1090         // ADC<c>{<q>} {<Rdn>,} <Rdn>, <Rm> ; T1
1091         operand.IsPlainRegister() && rn.IsLow() && rd.Is(rn) &&
1092         operand.GetBaseRegister().IsLow();
1093     ITScope it_scope(this, &cond, can_use_it);
1094     adc(cond, rd, rn, operand);
1095   }
Adc(Register rd,Register rn,const Operand & operand)1096   void Adc(Register rd, Register rn, const Operand& operand) {
1097     Adc(al, rd, rn, operand);
1098   }
Adc(FlagsUpdate flags,Condition cond,Register rd,Register rn,const Operand & operand)1099   void Adc(FlagsUpdate flags,
1100            Condition cond,
1101            Register rd,
1102            Register rn,
1103            const Operand& operand) {
1104     switch (flags) {
1105       case LeaveFlags:
1106         Adc(cond, rd, rn, operand);
1107         break;
1108       case SetFlags:
1109         Adcs(cond, rd, rn, operand);
1110         break;
1111       case DontCare:
1112         bool setflags_is_smaller = IsUsingT32() && cond.Is(al) && rd.IsLow() &&
1113                                    rn.Is(rd) && operand.IsPlainRegister() &&
1114                                    operand.GetBaseRegister().IsLow();
1115         if (setflags_is_smaller) {
1116           Adcs(cond, rd, rn, operand);
1117         } else {
1118           Adc(cond, rd, rn, operand);
1119         }
1120         break;
1121     }
1122   }
Adc(FlagsUpdate flags,Register rd,Register rn,const Operand & operand)1123   void Adc(FlagsUpdate flags,
1124            Register rd,
1125            Register rn,
1126            const Operand& operand) {
1127     Adc(flags, al, rd, rn, operand);
1128   }
1129 
Adcs(Condition cond,Register rd,Register rn,const Operand & operand)1130   void Adcs(Condition cond, Register rd, Register rn, const Operand& operand) {
1131     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
1132     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1133     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
1134     VIXL_ASSERT(allow_macro_instructions_);
1135     VIXL_ASSERT(OutsideITBlock());
1136     MacroEmissionCheckScope guard(this);
1137     ITScope it_scope(this, &cond);
1138     adcs(cond, rd, rn, operand);
1139   }
Adcs(Register rd,Register rn,const Operand & operand)1140   void Adcs(Register rd, Register rn, const Operand& operand) {
1141     Adcs(al, rd, rn, operand);
1142   }
1143 
Add(Condition cond,Register rd,Register rn,const Operand & operand)1144   void Add(Condition cond, Register rd, Register rn, const Operand& operand) {
1145     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
1146     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1147     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
1148     VIXL_ASSERT(allow_macro_instructions_);
1149     VIXL_ASSERT(OutsideITBlock());
1150     MacroEmissionCheckScope guard(this);
1151     if (cond.Is(al) && rd.Is(rn) && operand.IsImmediate()) {
1152       uint32_t immediate = operand.GetImmediate();
1153       if (immediate == 0) {
1154         return;
1155       }
1156     }
1157     bool can_use_it =
1158         // ADD<c>{<q>} <Rd>, <Rn>, #<imm3> ; T1
1159         (operand.IsImmediate() && (operand.GetImmediate() <= 7) && rn.IsLow() &&
1160          rd.IsLow()) ||
1161         // ADD<c>{<q>} {<Rdn>,} <Rdn>, #<imm8> ; T2
1162         (operand.IsImmediate() && (operand.GetImmediate() <= 255) &&
1163          rd.IsLow() && rn.Is(rd)) ||
1164         // ADD{<c>}{<q>} <Rd>, SP, #<imm8> ; T1
1165         (operand.IsImmediate() && (operand.GetImmediate() <= 1020) &&
1166          ((operand.GetImmediate() & 0x3) == 0) && rd.IsLow() && rn.IsSP()) ||
1167         // ADD<c>{<q>} <Rd>, <Rn>, <Rm>
1168         (operand.IsPlainRegister() && rd.IsLow() && rn.IsLow() &&
1169          operand.GetBaseRegister().IsLow()) ||
1170         // ADD<c>{<q>} <Rdn>, <Rm> ; T2
1171         (operand.IsPlainRegister() && !rd.IsPC() && rn.Is(rd) &&
1172          !operand.GetBaseRegister().IsSP() &&
1173          !operand.GetBaseRegister().IsPC()) ||
1174         // ADD{<c>}{<q>} {<Rdm>,} SP, <Rdm> ; T1
1175         (operand.IsPlainRegister() && !rd.IsPC() && rn.IsSP() &&
1176          operand.GetBaseRegister().Is(rd));
1177     ITScope it_scope(this, &cond, can_use_it);
1178     add(cond, rd, rn, operand);
1179   }
Add(Register rd,Register rn,const Operand & operand)1180   void Add(Register rd, Register rn, const Operand& operand) {
1181     Add(al, rd, rn, operand);
1182   }
Add(FlagsUpdate flags,Condition cond,Register rd,Register rn,const Operand & operand)1183   void Add(FlagsUpdate flags,
1184            Condition cond,
1185            Register rd,
1186            Register rn,
1187            const Operand& operand) {
1188     switch (flags) {
1189       case LeaveFlags:
1190         Add(cond, rd, rn, operand);
1191         break;
1192       case SetFlags:
1193         Adds(cond, rd, rn, operand);
1194         break;
1195       case DontCare:
1196         bool setflags_is_smaller =
1197             IsUsingT32() && cond.Is(al) &&
1198             ((operand.IsPlainRegister() && rd.IsLow() && rn.IsLow() &&
1199               !rd.Is(rn) && operand.GetBaseRegister().IsLow()) ||
1200              (operand.IsImmediate() &&
1201               ((rd.IsLow() && rn.IsLow() && (operand.GetImmediate() < 8)) ||
1202                (rd.IsLow() && rn.Is(rd) && (operand.GetImmediate() < 256)))));
1203         if (setflags_is_smaller) {
1204           Adds(cond, rd, rn, operand);
1205         } else {
1206           bool changed_op_is_smaller =
1207               operand.IsImmediate() && (operand.GetSignedImmediate() < 0) &&
1208               ((rd.IsLow() && rn.IsLow() &&
1209                 (operand.GetSignedImmediate() >= -7)) ||
1210                (rd.IsLow() && rn.Is(rd) &&
1211                 (operand.GetSignedImmediate() >= -255)));
1212           if (changed_op_is_smaller) {
1213             Subs(cond, rd, rn, -operand.GetSignedImmediate());
1214           } else {
1215             Add(cond, rd, rn, operand);
1216           }
1217         }
1218         break;
1219     }
1220   }
Add(FlagsUpdate flags,Register rd,Register rn,const Operand & operand)1221   void Add(FlagsUpdate flags,
1222            Register rd,
1223            Register rn,
1224            const Operand& operand) {
1225     Add(flags, al, rd, rn, operand);
1226   }
1227 
Adds(Condition cond,Register rd,Register rn,const Operand & operand)1228   void Adds(Condition cond, Register rd, Register rn, const Operand& operand) {
1229     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
1230     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1231     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
1232     VIXL_ASSERT(allow_macro_instructions_);
1233     VIXL_ASSERT(OutsideITBlock());
1234     MacroEmissionCheckScope guard(this);
1235     ITScope it_scope(this, &cond);
1236     adds(cond, rd, rn, operand);
1237   }
Adds(Register rd,Register rn,const Operand & operand)1238   void Adds(Register rd, Register rn, const Operand& operand) {
1239     Adds(al, rd, rn, operand);
1240   }
1241 
And(Condition cond,Register rd,Register rn,const Operand & operand)1242   void And(Condition cond, Register rd, Register rn, const Operand& operand) {
1243     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
1244     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1245     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
1246     VIXL_ASSERT(allow_macro_instructions_);
1247     VIXL_ASSERT(OutsideITBlock());
1248     MacroEmissionCheckScope guard(this);
1249     if (rd.Is(rn) && operand.IsPlainRegister() &&
1250         rd.Is(operand.GetBaseRegister())) {
1251       return;
1252     }
1253     if (cond.Is(al) && operand.IsImmediate()) {
1254       uint32_t immediate = operand.GetImmediate();
1255       if (immediate == 0) {
1256         mov(rd, 0);
1257         return;
1258       }
1259       if ((immediate == 0xffffffff) && rd.Is(rn)) {
1260         return;
1261       }
1262     }
1263     bool can_use_it =
1264         // AND<c>{<q>} {<Rdn>,} <Rdn>, <Rm> ; T1
1265         operand.IsPlainRegister() && rd.Is(rn) && rn.IsLow() &&
1266         operand.GetBaseRegister().IsLow();
1267     ITScope it_scope(this, &cond, can_use_it);
1268     and_(cond, rd, rn, operand);
1269   }
And(Register rd,Register rn,const Operand & operand)1270   void And(Register rd, Register rn, const Operand& operand) {
1271     And(al, rd, rn, operand);
1272   }
And(FlagsUpdate flags,Condition cond,Register rd,Register rn,const Operand & operand)1273   void And(FlagsUpdate flags,
1274            Condition cond,
1275            Register rd,
1276            Register rn,
1277            const Operand& operand) {
1278     switch (flags) {
1279       case LeaveFlags:
1280         And(cond, rd, rn, operand);
1281         break;
1282       case SetFlags:
1283         Ands(cond, rd, rn, operand);
1284         break;
1285       case DontCare:
1286         if (operand.IsPlainRegister() && rd.Is(rn) &&
1287             rd.Is(operand.GetBaseRegister())) {
1288           return;
1289         }
1290         bool setflags_is_smaller = IsUsingT32() && cond.Is(al) && rd.IsLow() &&
1291                                    rn.Is(rd) && operand.IsPlainRegister() &&
1292                                    operand.GetBaseRegister().IsLow();
1293         if (setflags_is_smaller) {
1294           Ands(cond, rd, rn, operand);
1295         } else {
1296           And(cond, rd, rn, operand);
1297         }
1298         break;
1299     }
1300   }
And(FlagsUpdate flags,Register rd,Register rn,const Operand & operand)1301   void And(FlagsUpdate flags,
1302            Register rd,
1303            Register rn,
1304            const Operand& operand) {
1305     And(flags, al, rd, rn, operand);
1306   }
1307 
Ands(Condition cond,Register rd,Register rn,const Operand & operand)1308   void Ands(Condition cond, Register rd, Register rn, const Operand& operand) {
1309     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
1310     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1311     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
1312     VIXL_ASSERT(allow_macro_instructions_);
1313     VIXL_ASSERT(OutsideITBlock());
1314     MacroEmissionCheckScope guard(this);
1315     ITScope it_scope(this, &cond);
1316     ands(cond, rd, rn, operand);
1317   }
Ands(Register rd,Register rn,const Operand & operand)1318   void Ands(Register rd, Register rn, const Operand& operand) {
1319     Ands(al, rd, rn, operand);
1320   }
1321 
Asr(Condition cond,Register rd,Register rm,const Operand & operand)1322   void Asr(Condition cond, Register rd, Register rm, const Operand& operand) {
1323     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
1324     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
1325     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
1326     VIXL_ASSERT(allow_macro_instructions_);
1327     VIXL_ASSERT(OutsideITBlock());
1328     MacroEmissionCheckScope guard(this);
1329     bool can_use_it =
1330         // ASR<c>{<q>} {<Rd>,} <Rm>, #<imm> ; T2
1331         (operand.IsImmediate() && (operand.GetImmediate() >= 1) &&
1332          (operand.GetImmediate() <= 32) && rd.IsLow() && rm.IsLow()) ||
1333         // ASR<c>{<q>} {<Rdm>,} <Rdm>, <Rs> ; T1
1334         (operand.IsPlainRegister() && rd.Is(rm) && rd.IsLow() &&
1335          operand.GetBaseRegister().IsLow());
1336     ITScope it_scope(this, &cond, can_use_it);
1337     asr(cond, rd, rm, operand);
1338   }
Asr(Register rd,Register rm,const Operand & operand)1339   void Asr(Register rd, Register rm, const Operand& operand) {
1340     Asr(al, rd, rm, operand);
1341   }
Asr(FlagsUpdate flags,Condition cond,Register rd,Register rm,const Operand & operand)1342   void Asr(FlagsUpdate flags,
1343            Condition cond,
1344            Register rd,
1345            Register rm,
1346            const Operand& operand) {
1347     switch (flags) {
1348       case LeaveFlags:
1349         Asr(cond, rd, rm, operand);
1350         break;
1351       case SetFlags:
1352         Asrs(cond, rd, rm, operand);
1353         break;
1354       case DontCare:
1355         bool setflags_is_smaller =
1356             IsUsingT32() && cond.Is(al) && rd.IsLow() && rm.IsLow() &&
1357             ((operand.IsImmediate() && (operand.GetImmediate() >= 1) &&
1358               (operand.GetImmediate() <= 32)) ||
1359              (operand.IsPlainRegister() && rd.Is(rm)));
1360         if (setflags_is_smaller) {
1361           Asrs(cond, rd, rm, operand);
1362         } else {
1363           Asr(cond, rd, rm, operand);
1364         }
1365         break;
1366     }
1367   }
Asr(FlagsUpdate flags,Register rd,Register rm,const Operand & operand)1368   void Asr(FlagsUpdate flags,
1369            Register rd,
1370            Register rm,
1371            const Operand& operand) {
1372     Asr(flags, al, rd, rm, operand);
1373   }
1374 
Asrs(Condition cond,Register rd,Register rm,const Operand & operand)1375   void Asrs(Condition cond, Register rd, Register rm, const Operand& operand) {
1376     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
1377     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
1378     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
1379     VIXL_ASSERT(allow_macro_instructions_);
1380     VIXL_ASSERT(OutsideITBlock());
1381     MacroEmissionCheckScope guard(this);
1382     ITScope it_scope(this, &cond);
1383     asrs(cond, rd, rm, operand);
1384   }
Asrs(Register rd,Register rm,const Operand & operand)1385   void Asrs(Register rd, Register rm, const Operand& operand) {
1386     Asrs(al, rd, rm, operand);
1387   }
1388 
1389   void B(Condition cond, Label* label, BranchHint hint = kBranchWithoutHint) {
1390     VIXL_ASSERT(allow_macro_instructions_);
1391     VIXL_ASSERT(OutsideITBlock());
1392     MacroEmissionCheckScope guard(this);
1393     if (hint == kNear) {
1394       if (label->IsBound()) {
1395         b(cond, label);
1396       } else {
1397         b(cond, Narrow, label);
1398       }
1399     } else {
1400       b(cond, label);
1401     }
1402     AddBranchLabel(label);
1403   }
1404   void B(Label* label, BranchHint hint = kBranchWithoutHint) {
1405     B(al, label, hint);
1406   }
BPreferNear(Condition cond,Label * label)1407   void BPreferNear(Condition cond, Label* label) { B(cond, label, kNear); }
BPreferNear(Label * label)1408   void BPreferNear(Label* label) { B(al, label, kNear); }
1409 
Bfc(Condition cond,Register rd,uint32_t lsb,const Operand & operand)1410   void Bfc(Condition cond, Register rd, uint32_t lsb, const Operand& operand) {
1411     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
1412     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
1413     VIXL_ASSERT(allow_macro_instructions_);
1414     VIXL_ASSERT(OutsideITBlock());
1415     MacroEmissionCheckScope guard(this);
1416     ITScope it_scope(this, &cond);
1417     bfc(cond, rd, lsb, operand);
1418   }
Bfc(Register rd,uint32_t lsb,const Operand & operand)1419   void Bfc(Register rd, uint32_t lsb, const Operand& operand) {
1420     Bfc(al, rd, lsb, operand);
1421   }
1422 
Bfi(Condition cond,Register rd,Register rn,uint32_t lsb,const Operand & operand)1423   void Bfi(Condition cond,
1424            Register rd,
1425            Register rn,
1426            uint32_t lsb,
1427            const Operand& operand) {
1428     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
1429     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1430     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
1431     VIXL_ASSERT(allow_macro_instructions_);
1432     VIXL_ASSERT(OutsideITBlock());
1433     MacroEmissionCheckScope guard(this);
1434     ITScope it_scope(this, &cond);
1435     bfi(cond, rd, rn, lsb, operand);
1436   }
Bfi(Register rd,Register rn,uint32_t lsb,const Operand & operand)1437   void Bfi(Register rd, Register rn, uint32_t lsb, const Operand& operand) {
1438     Bfi(al, rd, rn, lsb, operand);
1439   }
1440 
Bic(Condition cond,Register rd,Register rn,const Operand & operand)1441   void Bic(Condition cond, Register rd, Register rn, const Operand& operand) {
1442     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
1443     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1444     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
1445     VIXL_ASSERT(allow_macro_instructions_);
1446     VIXL_ASSERT(OutsideITBlock());
1447     MacroEmissionCheckScope guard(this);
1448     if (cond.Is(al) && operand.IsImmediate()) {
1449       uint32_t immediate = operand.GetImmediate();
1450       if ((immediate == 0) && rd.Is(rn)) {
1451         return;
1452       }
1453       if (immediate == 0xffffffff) {
1454         mov(rd, 0);
1455         return;
1456       }
1457     }
1458     bool can_use_it =
1459         // BIC<c>{<q>} {<Rdn>,} <Rdn>, <Rm> ; T1
1460         operand.IsPlainRegister() && rd.Is(rn) && rn.IsLow() &&
1461         operand.GetBaseRegister().IsLow();
1462     ITScope it_scope(this, &cond, can_use_it);
1463     bic(cond, rd, rn, operand);
1464   }
Bic(Register rd,Register rn,const Operand & operand)1465   void Bic(Register rd, Register rn, const Operand& operand) {
1466     Bic(al, rd, rn, operand);
1467   }
Bic(FlagsUpdate flags,Condition cond,Register rd,Register rn,const Operand & operand)1468   void Bic(FlagsUpdate flags,
1469            Condition cond,
1470            Register rd,
1471            Register rn,
1472            const Operand& operand) {
1473     switch (flags) {
1474       case LeaveFlags:
1475         Bic(cond, rd, rn, operand);
1476         break;
1477       case SetFlags:
1478         Bics(cond, rd, rn, operand);
1479         break;
1480       case DontCare:
1481         bool setflags_is_smaller = IsUsingT32() && cond.Is(al) && rd.IsLow() &&
1482                                    rn.Is(rd) && operand.IsPlainRegister() &&
1483                                    operand.GetBaseRegister().IsLow();
1484         if (setflags_is_smaller) {
1485           Bics(cond, rd, rn, operand);
1486         } else {
1487           Bic(cond, rd, rn, operand);
1488         }
1489         break;
1490     }
1491   }
Bic(FlagsUpdate flags,Register rd,Register rn,const Operand & operand)1492   void Bic(FlagsUpdate flags,
1493            Register rd,
1494            Register rn,
1495            const Operand& operand) {
1496     Bic(flags, al, rd, rn, operand);
1497   }
1498 
Bics(Condition cond,Register rd,Register rn,const Operand & operand)1499   void Bics(Condition cond, Register rd, Register rn, const Operand& operand) {
1500     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
1501     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1502     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
1503     VIXL_ASSERT(allow_macro_instructions_);
1504     VIXL_ASSERT(OutsideITBlock());
1505     MacroEmissionCheckScope guard(this);
1506     ITScope it_scope(this, &cond);
1507     bics(cond, rd, rn, operand);
1508   }
Bics(Register rd,Register rn,const Operand & operand)1509   void Bics(Register rd, Register rn, const Operand& operand) {
1510     Bics(al, rd, rn, operand);
1511   }
1512 
Bkpt(Condition cond,uint32_t imm)1513   void Bkpt(Condition cond, uint32_t imm) {
1514     VIXL_ASSERT(allow_macro_instructions_);
1515     VIXL_ASSERT(OutsideITBlock());
1516     MacroEmissionCheckScope guard(this);
1517     ITScope it_scope(this, &cond);
1518     bkpt(cond, imm);
1519   }
Bkpt(uint32_t imm)1520   void Bkpt(uint32_t imm) { Bkpt(al, imm); }
1521 
Bl(Condition cond,Label * label)1522   void Bl(Condition cond, Label* label) {
1523     VIXL_ASSERT(allow_macro_instructions_);
1524     VIXL_ASSERT(OutsideITBlock());
1525     MacroEmissionCheckScope guard(this);
1526     ITScope it_scope(this, &cond);
1527     bl(cond, label);
1528     AddBranchLabel(label);
1529   }
Bl(Label * label)1530   void Bl(Label* label) { Bl(al, label); }
1531 
Blx(Condition cond,Label * label)1532   void Blx(Condition cond, Label* label) {
1533     VIXL_ASSERT(allow_macro_instructions_);
1534     VIXL_ASSERT(OutsideITBlock());
1535     MacroEmissionCheckScope guard(this);
1536     ITScope it_scope(this, &cond);
1537     blx(cond, label);
1538     AddBranchLabel(label);
1539   }
Blx(Label * label)1540   void Blx(Label* label) { Blx(al, label); }
1541 
Blx(Condition cond,Register rm)1542   void Blx(Condition cond, Register rm) {
1543     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
1544     VIXL_ASSERT(allow_macro_instructions_);
1545     VIXL_ASSERT(OutsideITBlock());
1546     MacroEmissionCheckScope guard(this);
1547     bool can_use_it =
1548         // BLX{<c>}{<q>} <Rm> ; T1
1549         !rm.IsPC();
1550     ITScope it_scope(this, &cond, can_use_it);
1551     blx(cond, rm);
1552   }
Blx(Register rm)1553   void Blx(Register rm) { Blx(al, rm); }
1554 
Bx(Condition cond,Register rm)1555   void Bx(Condition cond, Register rm) {
1556     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
1557     VIXL_ASSERT(allow_macro_instructions_);
1558     VIXL_ASSERT(OutsideITBlock());
1559     MacroEmissionCheckScope guard(this);
1560     bool can_use_it =
1561         // BX{<c>}{<q>} <Rm> ; T1
1562         !rm.IsPC();
1563     ITScope it_scope(this, &cond, can_use_it);
1564     bx(cond, rm);
1565   }
Bx(Register rm)1566   void Bx(Register rm) { Bx(al, rm); }
1567 
Bxj(Condition cond,Register rm)1568   void Bxj(Condition cond, Register rm) {
1569     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
1570     VIXL_ASSERT(allow_macro_instructions_);
1571     VIXL_ASSERT(OutsideITBlock());
1572     MacroEmissionCheckScope guard(this);
1573     ITScope it_scope(this, &cond);
1574     bxj(cond, rm);
1575   }
Bxj(Register rm)1576   void Bxj(Register rm) { Bxj(al, rm); }
1577 
Cbnz(Register rn,Label * label)1578   void Cbnz(Register rn, Label* label) {
1579     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1580     VIXL_ASSERT(allow_macro_instructions_);
1581     VIXL_ASSERT(OutsideITBlock());
1582     MacroEmissionCheckScope guard(this);
1583     cbnz(rn, label);
1584     AddBranchLabel(label);
1585   }
1586 
Cbz(Register rn,Label * label)1587   void Cbz(Register rn, Label* label) {
1588     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1589     VIXL_ASSERT(allow_macro_instructions_);
1590     VIXL_ASSERT(OutsideITBlock());
1591     MacroEmissionCheckScope guard(this);
1592     cbz(rn, label);
1593     AddBranchLabel(label);
1594   }
1595 
Clrex(Condition cond)1596   void Clrex(Condition cond) {
1597     VIXL_ASSERT(allow_macro_instructions_);
1598     VIXL_ASSERT(OutsideITBlock());
1599     MacroEmissionCheckScope guard(this);
1600     ITScope it_scope(this, &cond);
1601     clrex(cond);
1602   }
Clrex()1603   void Clrex() { Clrex(al); }
1604 
Clz(Condition cond,Register rd,Register rm)1605   void Clz(Condition cond, Register rd, Register rm) {
1606     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
1607     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
1608     VIXL_ASSERT(allow_macro_instructions_);
1609     VIXL_ASSERT(OutsideITBlock());
1610     MacroEmissionCheckScope guard(this);
1611     ITScope it_scope(this, &cond);
1612     clz(cond, rd, rm);
1613   }
Clz(Register rd,Register rm)1614   void Clz(Register rd, Register rm) { Clz(al, rd, rm); }
1615 
Cmn(Condition cond,Register rn,const Operand & operand)1616   void Cmn(Condition cond, Register rn, const Operand& operand) {
1617     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1618     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
1619     VIXL_ASSERT(allow_macro_instructions_);
1620     VIXL_ASSERT(OutsideITBlock());
1621     MacroEmissionCheckScope guard(this);
1622     bool can_use_it =
1623         // CMN{<c>}{<q>} <Rn>, <Rm> ; T1
1624         operand.IsPlainRegister() && rn.IsLow() &&
1625         operand.GetBaseRegister().IsLow();
1626     ITScope it_scope(this, &cond, can_use_it);
1627     cmn(cond, rn, operand);
1628   }
Cmn(Register rn,const Operand & operand)1629   void Cmn(Register rn, const Operand& operand) { Cmn(al, rn, operand); }
1630 
Cmp(Condition cond,Register rn,const Operand & operand)1631   void Cmp(Condition cond, Register rn, const Operand& operand) {
1632     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1633     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
1634     VIXL_ASSERT(allow_macro_instructions_);
1635     VIXL_ASSERT(OutsideITBlock());
1636     MacroEmissionCheckScope guard(this);
1637     bool can_use_it =
1638         // CMP{<c>}{<q>} <Rn>, #<imm8> ; T1
1639         (operand.IsImmediate() && (operand.GetImmediate() <= 255) &&
1640          rn.IsLow()) ||
1641         // CMP{<c>}{<q>} <Rn>, <Rm> ; T1 T2
1642         (operand.IsPlainRegister() && !rn.IsPC() &&
1643          !operand.GetBaseRegister().IsPC());
1644     ITScope it_scope(this, &cond, can_use_it);
1645     cmp(cond, rn, operand);
1646   }
Cmp(Register rn,const Operand & operand)1647   void Cmp(Register rn, const Operand& operand) { Cmp(al, rn, operand); }
1648 
Crc32b(Condition cond,Register rd,Register rn,Register rm)1649   void Crc32b(Condition cond, Register rd, Register rn, Register rm) {
1650     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
1651     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1652     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
1653     VIXL_ASSERT(allow_macro_instructions_);
1654     VIXL_ASSERT(OutsideITBlock());
1655     MacroEmissionCheckScope guard(this);
1656     ITScope it_scope(this, &cond);
1657     crc32b(cond, rd, rn, rm);
1658   }
Crc32b(Register rd,Register rn,Register rm)1659   void Crc32b(Register rd, Register rn, Register rm) { Crc32b(al, rd, rn, rm); }
1660 
Crc32cb(Condition cond,Register rd,Register rn,Register rm)1661   void Crc32cb(Condition cond, Register rd, Register rn, Register rm) {
1662     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
1663     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1664     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
1665     VIXL_ASSERT(allow_macro_instructions_);
1666     VIXL_ASSERT(OutsideITBlock());
1667     MacroEmissionCheckScope guard(this);
1668     ITScope it_scope(this, &cond);
1669     crc32cb(cond, rd, rn, rm);
1670   }
Crc32cb(Register rd,Register rn,Register rm)1671   void Crc32cb(Register rd, Register rn, Register rm) {
1672     Crc32cb(al, rd, rn, rm);
1673   }
1674 
Crc32ch(Condition cond,Register rd,Register rn,Register rm)1675   void Crc32ch(Condition cond, Register rd, Register rn, Register rm) {
1676     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
1677     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1678     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
1679     VIXL_ASSERT(allow_macro_instructions_);
1680     VIXL_ASSERT(OutsideITBlock());
1681     MacroEmissionCheckScope guard(this);
1682     ITScope it_scope(this, &cond);
1683     crc32ch(cond, rd, rn, rm);
1684   }
Crc32ch(Register rd,Register rn,Register rm)1685   void Crc32ch(Register rd, Register rn, Register rm) {
1686     Crc32ch(al, rd, rn, rm);
1687   }
1688 
Crc32cw(Condition cond,Register rd,Register rn,Register rm)1689   void Crc32cw(Condition cond, Register rd, Register rn, Register rm) {
1690     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
1691     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1692     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
1693     VIXL_ASSERT(allow_macro_instructions_);
1694     VIXL_ASSERT(OutsideITBlock());
1695     MacroEmissionCheckScope guard(this);
1696     ITScope it_scope(this, &cond);
1697     crc32cw(cond, rd, rn, rm);
1698   }
Crc32cw(Register rd,Register rn,Register rm)1699   void Crc32cw(Register rd, Register rn, Register rm) {
1700     Crc32cw(al, rd, rn, rm);
1701   }
1702 
Crc32h(Condition cond,Register rd,Register rn,Register rm)1703   void Crc32h(Condition cond, Register rd, Register rn, Register rm) {
1704     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
1705     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1706     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
1707     VIXL_ASSERT(allow_macro_instructions_);
1708     VIXL_ASSERT(OutsideITBlock());
1709     MacroEmissionCheckScope guard(this);
1710     ITScope it_scope(this, &cond);
1711     crc32h(cond, rd, rn, rm);
1712   }
Crc32h(Register rd,Register rn,Register rm)1713   void Crc32h(Register rd, Register rn, Register rm) { Crc32h(al, rd, rn, rm); }
1714 
Crc32w(Condition cond,Register rd,Register rn,Register rm)1715   void Crc32w(Condition cond, Register rd, Register rn, Register rm) {
1716     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
1717     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1718     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
1719     VIXL_ASSERT(allow_macro_instructions_);
1720     VIXL_ASSERT(OutsideITBlock());
1721     MacroEmissionCheckScope guard(this);
1722     ITScope it_scope(this, &cond);
1723     crc32w(cond, rd, rn, rm);
1724   }
Crc32w(Register rd,Register rn,Register rm)1725   void Crc32w(Register rd, Register rn, Register rm) { Crc32w(al, rd, rn, rm); }
1726 
Dmb(Condition cond,MemoryBarrier option)1727   void Dmb(Condition cond, MemoryBarrier option) {
1728     VIXL_ASSERT(allow_macro_instructions_);
1729     VIXL_ASSERT(OutsideITBlock());
1730     MacroEmissionCheckScope guard(this);
1731     ITScope it_scope(this, &cond);
1732     dmb(cond, option);
1733   }
Dmb(MemoryBarrier option)1734   void Dmb(MemoryBarrier option) { Dmb(al, option); }
1735 
Dsb(Condition cond,MemoryBarrier option)1736   void Dsb(Condition cond, MemoryBarrier option) {
1737     VIXL_ASSERT(allow_macro_instructions_);
1738     VIXL_ASSERT(OutsideITBlock());
1739     MacroEmissionCheckScope guard(this);
1740     ITScope it_scope(this, &cond);
1741     dsb(cond, option);
1742   }
Dsb(MemoryBarrier option)1743   void Dsb(MemoryBarrier option) { Dsb(al, option); }
1744 
Eor(Condition cond,Register rd,Register rn,const Operand & operand)1745   void Eor(Condition cond, Register rd, Register rn, const Operand& operand) {
1746     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
1747     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1748     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
1749     VIXL_ASSERT(allow_macro_instructions_);
1750     VIXL_ASSERT(OutsideITBlock());
1751     MacroEmissionCheckScope guard(this);
1752     if (cond.Is(al) && rd.Is(rn) && operand.IsImmediate()) {
1753       uint32_t immediate = operand.GetImmediate();
1754       if (immediate == 0) {
1755         return;
1756       }
1757       if (immediate == 0xffffffff) {
1758         mvn(rd, rn);
1759         return;
1760       }
1761     }
1762     bool can_use_it =
1763         // EOR<c>{<q>} {<Rdn>,} <Rdn>, <Rm> ; T1
1764         operand.IsPlainRegister() && rd.Is(rn) && rn.IsLow() &&
1765         operand.GetBaseRegister().IsLow();
1766     ITScope it_scope(this, &cond, can_use_it);
1767     eor(cond, rd, rn, operand);
1768   }
Eor(Register rd,Register rn,const Operand & operand)1769   void Eor(Register rd, Register rn, const Operand& operand) {
1770     Eor(al, rd, rn, operand);
1771   }
Eor(FlagsUpdate flags,Condition cond,Register rd,Register rn,const Operand & operand)1772   void Eor(FlagsUpdate flags,
1773            Condition cond,
1774            Register rd,
1775            Register rn,
1776            const Operand& operand) {
1777     switch (flags) {
1778       case LeaveFlags:
1779         Eor(cond, rd, rn, operand);
1780         break;
1781       case SetFlags:
1782         Eors(cond, rd, rn, operand);
1783         break;
1784       case DontCare:
1785         bool setflags_is_smaller = IsUsingT32() && cond.Is(al) && rd.IsLow() &&
1786                                    rn.Is(rd) && operand.IsPlainRegister() &&
1787                                    operand.GetBaseRegister().IsLow();
1788         if (setflags_is_smaller) {
1789           Eors(cond, rd, rn, operand);
1790         } else {
1791           Eor(cond, rd, rn, operand);
1792         }
1793         break;
1794     }
1795   }
Eor(FlagsUpdate flags,Register rd,Register rn,const Operand & operand)1796   void Eor(FlagsUpdate flags,
1797            Register rd,
1798            Register rn,
1799            const Operand& operand) {
1800     Eor(flags, al, rd, rn, operand);
1801   }
1802 
Eors(Condition cond,Register rd,Register rn,const Operand & operand)1803   void Eors(Condition cond, Register rd, Register rn, const Operand& operand) {
1804     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
1805     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1806     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
1807     VIXL_ASSERT(allow_macro_instructions_);
1808     VIXL_ASSERT(OutsideITBlock());
1809     MacroEmissionCheckScope guard(this);
1810     ITScope it_scope(this, &cond);
1811     eors(cond, rd, rn, operand);
1812   }
Eors(Register rd,Register rn,const Operand & operand)1813   void Eors(Register rd, Register rn, const Operand& operand) {
1814     Eors(al, rd, rn, operand);
1815   }
1816 
Fldmdbx(Condition cond,Register rn,WriteBack write_back,DRegisterList dreglist)1817   void Fldmdbx(Condition cond,
1818                Register rn,
1819                WriteBack write_back,
1820                DRegisterList dreglist) {
1821     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1822     VIXL_ASSERT(!AliasesAvailableScratchRegister(dreglist));
1823     VIXL_ASSERT(allow_macro_instructions_);
1824     VIXL_ASSERT(OutsideITBlock());
1825     MacroEmissionCheckScope guard(this);
1826     ITScope it_scope(this, &cond);
1827     fldmdbx(cond, rn, write_back, dreglist);
1828   }
Fldmdbx(Register rn,WriteBack write_back,DRegisterList dreglist)1829   void Fldmdbx(Register rn, WriteBack write_back, DRegisterList dreglist) {
1830     Fldmdbx(al, rn, write_back, dreglist);
1831   }
1832 
Fldmiax(Condition cond,Register rn,WriteBack write_back,DRegisterList dreglist)1833   void Fldmiax(Condition cond,
1834                Register rn,
1835                WriteBack write_back,
1836                DRegisterList dreglist) {
1837     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1838     VIXL_ASSERT(!AliasesAvailableScratchRegister(dreglist));
1839     VIXL_ASSERT(allow_macro_instructions_);
1840     VIXL_ASSERT(OutsideITBlock());
1841     MacroEmissionCheckScope guard(this);
1842     ITScope it_scope(this, &cond);
1843     fldmiax(cond, rn, write_back, dreglist);
1844   }
Fldmiax(Register rn,WriteBack write_back,DRegisterList dreglist)1845   void Fldmiax(Register rn, WriteBack write_back, DRegisterList dreglist) {
1846     Fldmiax(al, rn, write_back, dreglist);
1847   }
1848 
Fstmdbx(Condition cond,Register rn,WriteBack write_back,DRegisterList dreglist)1849   void Fstmdbx(Condition cond,
1850                Register rn,
1851                WriteBack write_back,
1852                DRegisterList dreglist) {
1853     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1854     VIXL_ASSERT(!AliasesAvailableScratchRegister(dreglist));
1855     VIXL_ASSERT(allow_macro_instructions_);
1856     VIXL_ASSERT(OutsideITBlock());
1857     MacroEmissionCheckScope guard(this);
1858     ITScope it_scope(this, &cond);
1859     fstmdbx(cond, rn, write_back, dreglist);
1860   }
Fstmdbx(Register rn,WriteBack write_back,DRegisterList dreglist)1861   void Fstmdbx(Register rn, WriteBack write_back, DRegisterList dreglist) {
1862     Fstmdbx(al, rn, write_back, dreglist);
1863   }
1864 
Fstmiax(Condition cond,Register rn,WriteBack write_back,DRegisterList dreglist)1865   void Fstmiax(Condition cond,
1866                Register rn,
1867                WriteBack write_back,
1868                DRegisterList dreglist) {
1869     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1870     VIXL_ASSERT(!AliasesAvailableScratchRegister(dreglist));
1871     VIXL_ASSERT(allow_macro_instructions_);
1872     VIXL_ASSERT(OutsideITBlock());
1873     MacroEmissionCheckScope guard(this);
1874     ITScope it_scope(this, &cond);
1875     fstmiax(cond, rn, write_back, dreglist);
1876   }
Fstmiax(Register rn,WriteBack write_back,DRegisterList dreglist)1877   void Fstmiax(Register rn, WriteBack write_back, DRegisterList dreglist) {
1878     Fstmiax(al, rn, write_back, dreglist);
1879   }
1880 
Hlt(Condition cond,uint32_t imm)1881   void Hlt(Condition cond, uint32_t imm) {
1882     VIXL_ASSERT(allow_macro_instructions_);
1883     VIXL_ASSERT(OutsideITBlock());
1884     MacroEmissionCheckScope guard(this);
1885     ITScope it_scope(this, &cond);
1886     hlt(cond, imm);
1887   }
Hlt(uint32_t imm)1888   void Hlt(uint32_t imm) { Hlt(al, imm); }
1889 
Hvc(Condition cond,uint32_t imm)1890   void Hvc(Condition cond, uint32_t imm) {
1891     VIXL_ASSERT(allow_macro_instructions_);
1892     VIXL_ASSERT(OutsideITBlock());
1893     MacroEmissionCheckScope guard(this);
1894     ITScope it_scope(this, &cond);
1895     hvc(cond, imm);
1896   }
Hvc(uint32_t imm)1897   void Hvc(uint32_t imm) { Hvc(al, imm); }
1898 
Isb(Condition cond,MemoryBarrier option)1899   void Isb(Condition cond, MemoryBarrier option) {
1900     VIXL_ASSERT(allow_macro_instructions_);
1901     VIXL_ASSERT(OutsideITBlock());
1902     MacroEmissionCheckScope guard(this);
1903     ITScope it_scope(this, &cond);
1904     isb(cond, option);
1905   }
Isb(MemoryBarrier option)1906   void Isb(MemoryBarrier option) { Isb(al, option); }
1907 
Lda(Condition cond,Register rt,const MemOperand & operand)1908   void Lda(Condition cond, Register rt, const MemOperand& operand) {
1909     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
1910     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
1911     VIXL_ASSERT(allow_macro_instructions_);
1912     VIXL_ASSERT(OutsideITBlock());
1913     MacroEmissionCheckScope guard(this);
1914     ITScope it_scope(this, &cond);
1915     lda(cond, rt, operand);
1916   }
Lda(Register rt,const MemOperand & operand)1917   void Lda(Register rt, const MemOperand& operand) { Lda(al, rt, operand); }
1918 
Ldab(Condition cond,Register rt,const MemOperand & operand)1919   void Ldab(Condition cond, Register rt, const MemOperand& operand) {
1920     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
1921     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
1922     VIXL_ASSERT(allow_macro_instructions_);
1923     VIXL_ASSERT(OutsideITBlock());
1924     MacroEmissionCheckScope guard(this);
1925     ITScope it_scope(this, &cond);
1926     ldab(cond, rt, operand);
1927   }
Ldab(Register rt,const MemOperand & operand)1928   void Ldab(Register rt, const MemOperand& operand) { Ldab(al, rt, operand); }
1929 
Ldaex(Condition cond,Register rt,const MemOperand & operand)1930   void Ldaex(Condition cond, Register rt, const MemOperand& operand) {
1931     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
1932     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
1933     VIXL_ASSERT(allow_macro_instructions_);
1934     VIXL_ASSERT(OutsideITBlock());
1935     MacroEmissionCheckScope guard(this);
1936     ITScope it_scope(this, &cond);
1937     ldaex(cond, rt, operand);
1938   }
Ldaex(Register rt,const MemOperand & operand)1939   void Ldaex(Register rt, const MemOperand& operand) { Ldaex(al, rt, operand); }
1940 
Ldaexb(Condition cond,Register rt,const MemOperand & operand)1941   void Ldaexb(Condition cond, Register rt, const MemOperand& operand) {
1942     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
1943     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
1944     VIXL_ASSERT(allow_macro_instructions_);
1945     VIXL_ASSERT(OutsideITBlock());
1946     MacroEmissionCheckScope guard(this);
1947     ITScope it_scope(this, &cond);
1948     ldaexb(cond, rt, operand);
1949   }
Ldaexb(Register rt,const MemOperand & operand)1950   void Ldaexb(Register rt, const MemOperand& operand) {
1951     Ldaexb(al, rt, operand);
1952   }
1953 
Ldaexd(Condition cond,Register rt,Register rt2,const MemOperand & operand)1954   void Ldaexd(Condition cond,
1955               Register rt,
1956               Register rt2,
1957               const MemOperand& operand) {
1958     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
1959     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt2));
1960     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
1961     VIXL_ASSERT(allow_macro_instructions_);
1962     VIXL_ASSERT(OutsideITBlock());
1963     MacroEmissionCheckScope guard(this);
1964     ITScope it_scope(this, &cond);
1965     ldaexd(cond, rt, rt2, operand);
1966   }
Ldaexd(Register rt,Register rt2,const MemOperand & operand)1967   void Ldaexd(Register rt, Register rt2, const MemOperand& operand) {
1968     Ldaexd(al, rt, rt2, operand);
1969   }
1970 
Ldaexh(Condition cond,Register rt,const MemOperand & operand)1971   void Ldaexh(Condition cond, Register rt, const MemOperand& operand) {
1972     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
1973     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
1974     VIXL_ASSERT(allow_macro_instructions_);
1975     VIXL_ASSERT(OutsideITBlock());
1976     MacroEmissionCheckScope guard(this);
1977     ITScope it_scope(this, &cond);
1978     ldaexh(cond, rt, operand);
1979   }
Ldaexh(Register rt,const MemOperand & operand)1980   void Ldaexh(Register rt, const MemOperand& operand) {
1981     Ldaexh(al, rt, operand);
1982   }
1983 
Ldah(Condition cond,Register rt,const MemOperand & operand)1984   void Ldah(Condition cond, Register rt, const MemOperand& operand) {
1985     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
1986     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
1987     VIXL_ASSERT(allow_macro_instructions_);
1988     VIXL_ASSERT(OutsideITBlock());
1989     MacroEmissionCheckScope guard(this);
1990     ITScope it_scope(this, &cond);
1991     ldah(cond, rt, operand);
1992   }
Ldah(Register rt,const MemOperand & operand)1993   void Ldah(Register rt, const MemOperand& operand) { Ldah(al, rt, operand); }
1994 
Ldm(Condition cond,Register rn,WriteBack write_back,RegisterList registers)1995   void Ldm(Condition cond,
1996            Register rn,
1997            WriteBack write_back,
1998            RegisterList registers) {
1999     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
2000     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
2001     VIXL_ASSERT(allow_macro_instructions_);
2002     VIXL_ASSERT(OutsideITBlock());
2003     MacroEmissionCheckScope guard(this);
2004     ITScope it_scope(this, &cond);
2005     ldm(cond, rn, write_back, registers);
2006   }
Ldm(Register rn,WriteBack write_back,RegisterList registers)2007   void Ldm(Register rn, WriteBack write_back, RegisterList registers) {
2008     Ldm(al, rn, write_back, registers);
2009   }
2010 
Ldmda(Condition cond,Register rn,WriteBack write_back,RegisterList registers)2011   void Ldmda(Condition cond,
2012              Register rn,
2013              WriteBack write_back,
2014              RegisterList registers) {
2015     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
2016     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
2017     VIXL_ASSERT(allow_macro_instructions_);
2018     VIXL_ASSERT(OutsideITBlock());
2019     MacroEmissionCheckScope guard(this);
2020     ITScope it_scope(this, &cond);
2021     ldmda(cond, rn, write_back, registers);
2022   }
Ldmda(Register rn,WriteBack write_back,RegisterList registers)2023   void Ldmda(Register rn, WriteBack write_back, RegisterList registers) {
2024     Ldmda(al, rn, write_back, registers);
2025   }
2026 
Ldmdb(Condition cond,Register rn,WriteBack write_back,RegisterList registers)2027   void Ldmdb(Condition cond,
2028              Register rn,
2029              WriteBack write_back,
2030              RegisterList registers) {
2031     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
2032     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
2033     VIXL_ASSERT(allow_macro_instructions_);
2034     VIXL_ASSERT(OutsideITBlock());
2035     MacroEmissionCheckScope guard(this);
2036     ITScope it_scope(this, &cond);
2037     ldmdb(cond, rn, write_back, registers);
2038   }
Ldmdb(Register rn,WriteBack write_back,RegisterList registers)2039   void Ldmdb(Register rn, WriteBack write_back, RegisterList registers) {
2040     Ldmdb(al, rn, write_back, registers);
2041   }
2042 
Ldmea(Condition cond,Register rn,WriteBack write_back,RegisterList registers)2043   void Ldmea(Condition cond,
2044              Register rn,
2045              WriteBack write_back,
2046              RegisterList registers) {
2047     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
2048     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
2049     VIXL_ASSERT(allow_macro_instructions_);
2050     VIXL_ASSERT(OutsideITBlock());
2051     MacroEmissionCheckScope guard(this);
2052     ITScope it_scope(this, &cond);
2053     ldmea(cond, rn, write_back, registers);
2054   }
Ldmea(Register rn,WriteBack write_back,RegisterList registers)2055   void Ldmea(Register rn, WriteBack write_back, RegisterList registers) {
2056     Ldmea(al, rn, write_back, registers);
2057   }
2058 
Ldmed(Condition cond,Register rn,WriteBack write_back,RegisterList registers)2059   void Ldmed(Condition cond,
2060              Register rn,
2061              WriteBack write_back,
2062              RegisterList registers) {
2063     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
2064     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
2065     VIXL_ASSERT(allow_macro_instructions_);
2066     VIXL_ASSERT(OutsideITBlock());
2067     MacroEmissionCheckScope guard(this);
2068     ITScope it_scope(this, &cond);
2069     ldmed(cond, rn, write_back, registers);
2070   }
Ldmed(Register rn,WriteBack write_back,RegisterList registers)2071   void Ldmed(Register rn, WriteBack write_back, RegisterList registers) {
2072     Ldmed(al, rn, write_back, registers);
2073   }
2074 
Ldmfa(Condition cond,Register rn,WriteBack write_back,RegisterList registers)2075   void Ldmfa(Condition cond,
2076              Register rn,
2077              WriteBack write_back,
2078              RegisterList registers) {
2079     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
2080     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
2081     VIXL_ASSERT(allow_macro_instructions_);
2082     VIXL_ASSERT(OutsideITBlock());
2083     MacroEmissionCheckScope guard(this);
2084     ITScope it_scope(this, &cond);
2085     ldmfa(cond, rn, write_back, registers);
2086   }
Ldmfa(Register rn,WriteBack write_back,RegisterList registers)2087   void Ldmfa(Register rn, WriteBack write_back, RegisterList registers) {
2088     Ldmfa(al, rn, write_back, registers);
2089   }
2090 
Ldmfd(Condition cond,Register rn,WriteBack write_back,RegisterList registers)2091   void Ldmfd(Condition cond,
2092              Register rn,
2093              WriteBack write_back,
2094              RegisterList registers) {
2095     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
2096     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
2097     VIXL_ASSERT(allow_macro_instructions_);
2098     VIXL_ASSERT(OutsideITBlock());
2099     MacroEmissionCheckScope guard(this);
2100     ITScope it_scope(this, &cond);
2101     ldmfd(cond, rn, write_back, registers);
2102   }
Ldmfd(Register rn,WriteBack write_back,RegisterList registers)2103   void Ldmfd(Register rn, WriteBack write_back, RegisterList registers) {
2104     Ldmfd(al, rn, write_back, registers);
2105   }
2106 
Ldmib(Condition cond,Register rn,WriteBack write_back,RegisterList registers)2107   void Ldmib(Condition cond,
2108              Register rn,
2109              WriteBack write_back,
2110              RegisterList registers) {
2111     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
2112     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
2113     VIXL_ASSERT(allow_macro_instructions_);
2114     VIXL_ASSERT(OutsideITBlock());
2115     MacroEmissionCheckScope guard(this);
2116     ITScope it_scope(this, &cond);
2117     ldmib(cond, rn, write_back, registers);
2118   }
Ldmib(Register rn,WriteBack write_back,RegisterList registers)2119   void Ldmib(Register rn, WriteBack write_back, RegisterList registers) {
2120     Ldmib(al, rn, write_back, registers);
2121   }
2122 
Ldr(Condition cond,Register rt,const MemOperand & operand)2123   void Ldr(Condition cond, Register rt, const MemOperand& operand) {
2124     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
2125     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2126     VIXL_ASSERT(allow_macro_instructions_);
2127     VIXL_ASSERT(OutsideITBlock());
2128     MacroEmissionCheckScope guard(this);
2129     bool can_use_it =
2130         // LDR{<c>}{<q>} <Rt>, [<Rn> {, #{+}<imm>}] ; T1
2131         (operand.IsImmediate() && rt.IsLow() &&
2132          operand.GetBaseRegister().IsLow() &&
2133          operand.IsOffsetImmediateWithinRange(0, 124, 4) &&
2134          (operand.GetAddrMode() == Offset)) ||
2135         // LDR{<c>}{<q>} <Rt>, [SP{, #{+}<imm>}] ; T2
2136         (operand.IsImmediate() && rt.IsLow() &&
2137          operand.GetBaseRegister().IsSP() &&
2138          operand.IsOffsetImmediateWithinRange(0, 1020, 4) &&
2139          (operand.GetAddrMode() == Offset)) ||
2140         // LDR{<c>}{<q>} <Rt>, [<Rn>, {+}<Rm>] ; T1
2141         (operand.IsPlainRegister() && rt.IsLow() &&
2142          operand.GetBaseRegister().IsLow() &&
2143          operand.GetOffsetRegister().IsLow() && operand.GetSign().IsPlus() &&
2144          (operand.GetAddrMode() == Offset));
2145     ITScope it_scope(this, &cond, can_use_it);
2146     ldr(cond, rt, operand);
2147   }
Ldr(Register rt,const MemOperand & operand)2148   void Ldr(Register rt, const MemOperand& operand) { Ldr(al, rt, operand); }
2149 
2150 
Ldrb(Condition cond,Register rt,const MemOperand & operand)2151   void Ldrb(Condition cond, Register rt, const MemOperand& operand) {
2152     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
2153     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2154     VIXL_ASSERT(allow_macro_instructions_);
2155     VIXL_ASSERT(OutsideITBlock());
2156     MacroEmissionCheckScope guard(this);
2157     bool can_use_it =
2158         // LDRB{<c>}{<q>} <Rt>, [<Rn> {, #{+}<imm>}] ; T1
2159         (operand.IsImmediate() && rt.IsLow() &&
2160          operand.GetBaseRegister().IsLow() &&
2161          operand.IsOffsetImmediateWithinRange(0, 31) &&
2162          (operand.GetAddrMode() == Offset)) ||
2163         // LDRB{<c>}{<q>} <Rt>, [<Rn>, {+}<Rm>] ; T1
2164         (operand.IsPlainRegister() && rt.IsLow() &&
2165          operand.GetBaseRegister().IsLow() &&
2166          operand.GetOffsetRegister().IsLow() && operand.GetSign().IsPlus() &&
2167          (operand.GetAddrMode() == Offset));
2168     ITScope it_scope(this, &cond, can_use_it);
2169     ldrb(cond, rt, operand);
2170   }
Ldrb(Register rt,const MemOperand & operand)2171   void Ldrb(Register rt, const MemOperand& operand) { Ldrb(al, rt, operand); }
2172 
2173 
Ldrd(Condition cond,Register rt,Register rt2,const MemOperand & operand)2174   void Ldrd(Condition cond,
2175             Register rt,
2176             Register rt2,
2177             const MemOperand& operand) {
2178     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
2179     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt2));
2180     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2181     VIXL_ASSERT(allow_macro_instructions_);
2182     VIXL_ASSERT(OutsideITBlock());
2183     MacroEmissionCheckScope guard(this);
2184     ITScope it_scope(this, &cond);
2185     ldrd(cond, rt, rt2, operand);
2186   }
Ldrd(Register rt,Register rt2,const MemOperand & operand)2187   void Ldrd(Register rt, Register rt2, const MemOperand& operand) {
2188     Ldrd(al, rt, rt2, operand);
2189   }
2190 
2191 
Ldrex(Condition cond,Register rt,const MemOperand & operand)2192   void Ldrex(Condition cond, Register rt, const MemOperand& operand) {
2193     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
2194     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2195     VIXL_ASSERT(allow_macro_instructions_);
2196     VIXL_ASSERT(OutsideITBlock());
2197     MacroEmissionCheckScope guard(this);
2198     ITScope it_scope(this, &cond);
2199     ldrex(cond, rt, operand);
2200   }
Ldrex(Register rt,const MemOperand & operand)2201   void Ldrex(Register rt, const MemOperand& operand) { Ldrex(al, rt, operand); }
2202 
Ldrexb(Condition cond,Register rt,const MemOperand & operand)2203   void Ldrexb(Condition cond, Register rt, const MemOperand& operand) {
2204     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
2205     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2206     VIXL_ASSERT(allow_macro_instructions_);
2207     VIXL_ASSERT(OutsideITBlock());
2208     MacroEmissionCheckScope guard(this);
2209     ITScope it_scope(this, &cond);
2210     ldrexb(cond, rt, operand);
2211   }
Ldrexb(Register rt,const MemOperand & operand)2212   void Ldrexb(Register rt, const MemOperand& operand) {
2213     Ldrexb(al, rt, operand);
2214   }
2215 
Ldrexd(Condition cond,Register rt,Register rt2,const MemOperand & operand)2216   void Ldrexd(Condition cond,
2217               Register rt,
2218               Register rt2,
2219               const MemOperand& operand) {
2220     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
2221     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt2));
2222     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2223     VIXL_ASSERT(allow_macro_instructions_);
2224     VIXL_ASSERT(OutsideITBlock());
2225     MacroEmissionCheckScope guard(this);
2226     ITScope it_scope(this, &cond);
2227     ldrexd(cond, rt, rt2, operand);
2228   }
Ldrexd(Register rt,Register rt2,const MemOperand & operand)2229   void Ldrexd(Register rt, Register rt2, const MemOperand& operand) {
2230     Ldrexd(al, rt, rt2, operand);
2231   }
2232 
Ldrexh(Condition cond,Register rt,const MemOperand & operand)2233   void Ldrexh(Condition cond, Register rt, const MemOperand& operand) {
2234     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
2235     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2236     VIXL_ASSERT(allow_macro_instructions_);
2237     VIXL_ASSERT(OutsideITBlock());
2238     MacroEmissionCheckScope guard(this);
2239     ITScope it_scope(this, &cond);
2240     ldrexh(cond, rt, operand);
2241   }
Ldrexh(Register rt,const MemOperand & operand)2242   void Ldrexh(Register rt, const MemOperand& operand) {
2243     Ldrexh(al, rt, operand);
2244   }
2245 
Ldrh(Condition cond,Register rt,const MemOperand & operand)2246   void Ldrh(Condition cond, Register rt, const MemOperand& operand) {
2247     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
2248     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2249     VIXL_ASSERT(allow_macro_instructions_);
2250     VIXL_ASSERT(OutsideITBlock());
2251     MacroEmissionCheckScope guard(this);
2252     bool can_use_it =
2253         // LDRH{<c>}{<q>} <Rt>, [<Rn> {, #{+}<imm>}] ; T1
2254         (operand.IsImmediate() && rt.IsLow() &&
2255          operand.GetBaseRegister().IsLow() &&
2256          operand.IsOffsetImmediateWithinRange(0, 62, 2) &&
2257          (operand.GetAddrMode() == Offset)) ||
2258         // LDRH{<c>}{<q>} <Rt>, [<Rn>, {+}<Rm>] ; T1
2259         (operand.IsPlainRegister() && rt.IsLow() &&
2260          operand.GetBaseRegister().IsLow() &&
2261          operand.GetOffsetRegister().IsLow() && operand.GetSign().IsPlus() &&
2262          (operand.GetAddrMode() == Offset));
2263     ITScope it_scope(this, &cond, can_use_it);
2264     ldrh(cond, rt, operand);
2265   }
Ldrh(Register rt,const MemOperand & operand)2266   void Ldrh(Register rt, const MemOperand& operand) { Ldrh(al, rt, operand); }
2267 
2268 
Ldrsb(Condition cond,Register rt,const MemOperand & operand)2269   void Ldrsb(Condition cond, Register rt, const MemOperand& operand) {
2270     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
2271     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2272     VIXL_ASSERT(allow_macro_instructions_);
2273     VIXL_ASSERT(OutsideITBlock());
2274     MacroEmissionCheckScope guard(this);
2275     bool can_use_it =
2276         // LDRSB{<c>}{<q>} <Rt>, [<Rn>, {+}<Rm>] ; T1
2277         operand.IsPlainRegister() && rt.IsLow() &&
2278         operand.GetBaseRegister().IsLow() &&
2279         operand.GetOffsetRegister().IsLow() && operand.GetSign().IsPlus() &&
2280         (operand.GetAddrMode() == Offset);
2281     ITScope it_scope(this, &cond, can_use_it);
2282     ldrsb(cond, rt, operand);
2283   }
Ldrsb(Register rt,const MemOperand & operand)2284   void Ldrsb(Register rt, const MemOperand& operand) { Ldrsb(al, rt, operand); }
2285 
2286 
Ldrsh(Condition cond,Register rt,const MemOperand & operand)2287   void Ldrsh(Condition cond, Register rt, const MemOperand& operand) {
2288     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
2289     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2290     VIXL_ASSERT(allow_macro_instructions_);
2291     VIXL_ASSERT(OutsideITBlock());
2292     MacroEmissionCheckScope guard(this);
2293     bool can_use_it =
2294         // LDRSH{<c>}{<q>} <Rt>, [<Rn>, {+}<Rm>] ; T1
2295         operand.IsPlainRegister() && rt.IsLow() &&
2296         operand.GetBaseRegister().IsLow() &&
2297         operand.GetOffsetRegister().IsLow() && operand.GetSign().IsPlus() &&
2298         (operand.GetAddrMode() == Offset);
2299     ITScope it_scope(this, &cond, can_use_it);
2300     ldrsh(cond, rt, operand);
2301   }
Ldrsh(Register rt,const MemOperand & operand)2302   void Ldrsh(Register rt, const MemOperand& operand) { Ldrsh(al, rt, operand); }
2303 
2304 
Lsl(Condition cond,Register rd,Register rm,const Operand & operand)2305   void Lsl(Condition cond, Register rd, Register rm, const Operand& operand) {
2306     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2307     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
2308     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2309     VIXL_ASSERT(allow_macro_instructions_);
2310     VIXL_ASSERT(OutsideITBlock());
2311     MacroEmissionCheckScope guard(this);
2312     bool can_use_it =
2313         // LSL<c>{<q>} {<Rd>,} <Rm>, #<imm> ; T2
2314         (operand.IsImmediate() && (operand.GetImmediate() >= 1) &&
2315          (operand.GetImmediate() <= 31) && rd.IsLow() && rm.IsLow()) ||
2316         // LSL<c>{<q>} {<Rdm>,} <Rdm>, <Rs> ; T1
2317         (operand.IsPlainRegister() && rd.Is(rm) && rd.IsLow() &&
2318          operand.GetBaseRegister().IsLow());
2319     ITScope it_scope(this, &cond, can_use_it);
2320     lsl(cond, rd, rm, operand);
2321   }
Lsl(Register rd,Register rm,const Operand & operand)2322   void Lsl(Register rd, Register rm, const Operand& operand) {
2323     Lsl(al, rd, rm, operand);
2324   }
Lsl(FlagsUpdate flags,Condition cond,Register rd,Register rm,const Operand & operand)2325   void Lsl(FlagsUpdate flags,
2326            Condition cond,
2327            Register rd,
2328            Register rm,
2329            const Operand& operand) {
2330     switch (flags) {
2331       case LeaveFlags:
2332         Lsl(cond, rd, rm, operand);
2333         break;
2334       case SetFlags:
2335         Lsls(cond, rd, rm, operand);
2336         break;
2337       case DontCare:
2338         bool setflags_is_smaller =
2339             IsUsingT32() && cond.Is(al) && rd.IsLow() && rm.IsLow() &&
2340             ((operand.IsImmediate() && (operand.GetImmediate() >= 1) &&
2341               (operand.GetImmediate() < 32)) ||
2342              (operand.IsPlainRegister() && rd.Is(rm)));
2343         if (setflags_is_smaller) {
2344           Lsls(cond, rd, rm, operand);
2345         } else {
2346           Lsl(cond, rd, rm, operand);
2347         }
2348         break;
2349     }
2350   }
Lsl(FlagsUpdate flags,Register rd,Register rm,const Operand & operand)2351   void Lsl(FlagsUpdate flags,
2352            Register rd,
2353            Register rm,
2354            const Operand& operand) {
2355     Lsl(flags, al, rd, rm, operand);
2356   }
2357 
Lsls(Condition cond,Register rd,Register rm,const Operand & operand)2358   void Lsls(Condition cond, Register rd, Register rm, const Operand& operand) {
2359     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2360     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
2361     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2362     VIXL_ASSERT(allow_macro_instructions_);
2363     VIXL_ASSERT(OutsideITBlock());
2364     MacroEmissionCheckScope guard(this);
2365     ITScope it_scope(this, &cond);
2366     lsls(cond, rd, rm, operand);
2367   }
Lsls(Register rd,Register rm,const Operand & operand)2368   void Lsls(Register rd, Register rm, const Operand& operand) {
2369     Lsls(al, rd, rm, operand);
2370   }
2371 
Lsr(Condition cond,Register rd,Register rm,const Operand & operand)2372   void Lsr(Condition cond, Register rd, Register rm, const Operand& operand) {
2373     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2374     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
2375     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2376     VIXL_ASSERT(allow_macro_instructions_);
2377     VIXL_ASSERT(OutsideITBlock());
2378     MacroEmissionCheckScope guard(this);
2379     bool can_use_it =
2380         // LSR<c>{<q>} {<Rd>,} <Rm>, #<imm> ; T2
2381         (operand.IsImmediate() && (operand.GetImmediate() >= 1) &&
2382          (operand.GetImmediate() <= 32) && rd.IsLow() && rm.IsLow()) ||
2383         // LSR<c>{<q>} {<Rdm>,} <Rdm>, <Rs> ; T1
2384         (operand.IsPlainRegister() && rd.Is(rm) && rd.IsLow() &&
2385          operand.GetBaseRegister().IsLow());
2386     ITScope it_scope(this, &cond, can_use_it);
2387     lsr(cond, rd, rm, operand);
2388   }
Lsr(Register rd,Register rm,const Operand & operand)2389   void Lsr(Register rd, Register rm, const Operand& operand) {
2390     Lsr(al, rd, rm, operand);
2391   }
Lsr(FlagsUpdate flags,Condition cond,Register rd,Register rm,const Operand & operand)2392   void Lsr(FlagsUpdate flags,
2393            Condition cond,
2394            Register rd,
2395            Register rm,
2396            const Operand& operand) {
2397     switch (flags) {
2398       case LeaveFlags:
2399         Lsr(cond, rd, rm, operand);
2400         break;
2401       case SetFlags:
2402         Lsrs(cond, rd, rm, operand);
2403         break;
2404       case DontCare:
2405         bool setflags_is_smaller =
2406             IsUsingT32() && cond.Is(al) && rd.IsLow() && rm.IsLow() &&
2407             ((operand.IsImmediate() && (operand.GetImmediate() >= 1) &&
2408               (operand.GetImmediate() <= 32)) ||
2409              (operand.IsPlainRegister() && rd.Is(rm)));
2410         if (setflags_is_smaller) {
2411           Lsrs(cond, rd, rm, operand);
2412         } else {
2413           Lsr(cond, rd, rm, operand);
2414         }
2415         break;
2416     }
2417   }
Lsr(FlagsUpdate flags,Register rd,Register rm,const Operand & operand)2418   void Lsr(FlagsUpdate flags,
2419            Register rd,
2420            Register rm,
2421            const Operand& operand) {
2422     Lsr(flags, al, rd, rm, operand);
2423   }
2424 
Lsrs(Condition cond,Register rd,Register rm,const Operand & operand)2425   void Lsrs(Condition cond, Register rd, Register rm, const Operand& operand) {
2426     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2427     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
2428     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2429     VIXL_ASSERT(allow_macro_instructions_);
2430     VIXL_ASSERT(OutsideITBlock());
2431     MacroEmissionCheckScope guard(this);
2432     ITScope it_scope(this, &cond);
2433     lsrs(cond, rd, rm, operand);
2434   }
Lsrs(Register rd,Register rm,const Operand & operand)2435   void Lsrs(Register rd, Register rm, const Operand& operand) {
2436     Lsrs(al, rd, rm, operand);
2437   }
2438 
Mla(Condition cond,Register rd,Register rn,Register rm,Register ra)2439   void Mla(Condition cond, Register rd, Register rn, Register rm, Register ra) {
2440     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2441     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
2442     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
2443     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
2444     VIXL_ASSERT(allow_macro_instructions_);
2445     VIXL_ASSERT(OutsideITBlock());
2446     MacroEmissionCheckScope guard(this);
2447     ITScope it_scope(this, &cond);
2448     mla(cond, rd, rn, rm, ra);
2449   }
Mla(Register rd,Register rn,Register rm,Register ra)2450   void Mla(Register rd, Register rn, Register rm, Register ra) {
2451     Mla(al, rd, rn, rm, ra);
2452   }
Mla(FlagsUpdate flags,Condition cond,Register rd,Register rn,Register rm,Register ra)2453   void Mla(FlagsUpdate flags,
2454            Condition cond,
2455            Register rd,
2456            Register rn,
2457            Register rm,
2458            Register ra) {
2459     switch (flags) {
2460       case LeaveFlags:
2461         Mla(cond, rd, rn, rm, ra);
2462         break;
2463       case SetFlags:
2464         Mlas(cond, rd, rn, rm, ra);
2465         break;
2466       case DontCare:
2467         Mla(cond, rd, rn, rm, ra);
2468         break;
2469     }
2470   }
Mla(FlagsUpdate flags,Register rd,Register rn,Register rm,Register ra)2471   void Mla(
2472       FlagsUpdate flags, Register rd, Register rn, Register rm, Register ra) {
2473     Mla(flags, al, rd, rn, rm, ra);
2474   }
2475 
Mlas(Condition cond,Register rd,Register rn,Register rm,Register ra)2476   void Mlas(
2477       Condition cond, Register rd, Register rn, Register rm, Register ra) {
2478     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2479     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
2480     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
2481     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
2482     VIXL_ASSERT(allow_macro_instructions_);
2483     VIXL_ASSERT(OutsideITBlock());
2484     MacroEmissionCheckScope guard(this);
2485     ITScope it_scope(this, &cond);
2486     mlas(cond, rd, rn, rm, ra);
2487   }
Mlas(Register rd,Register rn,Register rm,Register ra)2488   void Mlas(Register rd, Register rn, Register rm, Register ra) {
2489     Mlas(al, rd, rn, rm, ra);
2490   }
2491 
Mls(Condition cond,Register rd,Register rn,Register rm,Register ra)2492   void Mls(Condition cond, Register rd, Register rn, Register rm, Register ra) {
2493     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2494     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
2495     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
2496     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
2497     VIXL_ASSERT(allow_macro_instructions_);
2498     VIXL_ASSERT(OutsideITBlock());
2499     MacroEmissionCheckScope guard(this);
2500     ITScope it_scope(this, &cond);
2501     mls(cond, rd, rn, rm, ra);
2502   }
Mls(Register rd,Register rn,Register rm,Register ra)2503   void Mls(Register rd, Register rn, Register rm, Register ra) {
2504     Mls(al, rd, rn, rm, ra);
2505   }
2506 
Mov(Condition cond,Register rd,const Operand & operand)2507   void Mov(Condition cond, Register rd, const Operand& operand) {
2508     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2509     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2510     VIXL_ASSERT(allow_macro_instructions_);
2511     VIXL_ASSERT(OutsideITBlock());
2512     MacroEmissionCheckScope guard(this);
2513     if (operand.IsPlainRegister() && rd.Is(operand.GetBaseRegister())) {
2514       return;
2515     }
2516     bool can_use_it =
2517         // MOV<c>{<q>} <Rd>, #<imm8> ; T1
2518         (operand.IsImmediate() && rd.IsLow() &&
2519          (operand.GetImmediate() <= 255)) ||
2520         // MOV{<c>}{<q>} <Rd>, <Rm> ; T1
2521         (operand.IsPlainRegister() && !rd.IsPC() &&
2522          !operand.GetBaseRegister().IsPC()) ||
2523         // MOV<c>{<q>} <Rd>, <Rm> {, <shift> #<amount>} ; T2
2524         (operand.IsImmediateShiftedRegister() && rd.IsLow() &&
2525          operand.GetBaseRegister().IsLow() &&
2526          (operand.GetShift().Is(LSL) || operand.GetShift().Is(LSR) ||
2527           operand.GetShift().Is(ASR))) ||
2528         // MOV<c>{<q>} <Rdm>, <Rdm>, LSL <Rs> ; T1
2529         // MOV<c>{<q>} <Rdm>, <Rdm>, LSR <Rs> ; T1
2530         // MOV<c>{<q>} <Rdm>, <Rdm>, ASR <Rs> ; T1
2531         // MOV<c>{<q>} <Rdm>, <Rdm>, ROR <Rs> ; T1
2532         (operand.IsRegisterShiftedRegister() &&
2533          rd.Is(operand.GetBaseRegister()) && rd.IsLow() &&
2534          (operand.GetShift().Is(LSL) || operand.GetShift().Is(LSR) ||
2535           operand.GetShift().Is(ASR) || operand.GetShift().Is(ROR)) &&
2536          operand.GetShiftRegister().IsLow());
2537     ITScope it_scope(this, &cond, can_use_it);
2538     mov(cond, rd, operand);
2539   }
Mov(Register rd,const Operand & operand)2540   void Mov(Register rd, const Operand& operand) { Mov(al, rd, operand); }
Mov(FlagsUpdate flags,Condition cond,Register rd,const Operand & operand)2541   void Mov(FlagsUpdate flags,
2542            Condition cond,
2543            Register rd,
2544            const Operand& operand) {
2545     switch (flags) {
2546       case LeaveFlags:
2547         Mov(cond, rd, operand);
2548         break;
2549       case SetFlags:
2550         Movs(cond, rd, operand);
2551         break;
2552       case DontCare:
2553         if (operand.IsPlainRegister() && rd.Is(operand.GetBaseRegister())) {
2554           return;
2555         }
2556         bool setflags_is_smaller =
2557             IsUsingT32() && cond.Is(al) &&
2558             ((operand.IsImmediateShiftedRegister() && rd.IsLow() &&
2559               operand.GetBaseRegister().IsLow() &&
2560               (operand.GetShiftAmount() >= 1) &&
2561               (((operand.GetShiftAmount() <= 32) &&
2562                 ((operand.GetShift().IsLSR() || operand.GetShift().IsASR()))) ||
2563                ((operand.GetShiftAmount() < 32) &&
2564                 operand.GetShift().IsLSL()))) ||
2565              (operand.IsRegisterShiftedRegister() && rd.IsLow() &&
2566               operand.GetBaseRegister().Is(rd) &&
2567               operand.GetShiftRegister().IsLow() &&
2568               (operand.GetShift().IsLSL() || operand.GetShift().IsLSR() ||
2569                operand.GetShift().IsASR() || operand.GetShift().IsROR())) ||
2570              (operand.IsImmediate() && rd.IsLow() &&
2571               (operand.GetImmediate() < 256)));
2572         if (setflags_is_smaller) {
2573           Movs(cond, rd, operand);
2574         } else {
2575           Mov(cond, rd, operand);
2576         }
2577         break;
2578     }
2579   }
Mov(FlagsUpdate flags,Register rd,const Operand & operand)2580   void Mov(FlagsUpdate flags, Register rd, const Operand& operand) {
2581     Mov(flags, al, rd, operand);
2582   }
2583 
Movs(Condition cond,Register rd,const Operand & operand)2584   void Movs(Condition cond, Register rd, const Operand& operand) {
2585     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2586     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2587     VIXL_ASSERT(allow_macro_instructions_);
2588     VIXL_ASSERT(OutsideITBlock());
2589     MacroEmissionCheckScope guard(this);
2590     ITScope it_scope(this, &cond);
2591     movs(cond, rd, operand);
2592   }
Movs(Register rd,const Operand & operand)2593   void Movs(Register rd, const Operand& operand) { Movs(al, rd, operand); }
2594 
Movt(Condition cond,Register rd,const Operand & operand)2595   void Movt(Condition cond, Register rd, const Operand& operand) {
2596     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2597     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2598     VIXL_ASSERT(allow_macro_instructions_);
2599     VIXL_ASSERT(OutsideITBlock());
2600     MacroEmissionCheckScope guard(this);
2601     ITScope it_scope(this, &cond);
2602     movt(cond, rd, operand);
2603   }
Movt(Register rd,const Operand & operand)2604   void Movt(Register rd, const Operand& operand) { Movt(al, rd, operand); }
2605 
Mrs(Condition cond,Register rd,SpecialRegister spec_reg)2606   void Mrs(Condition cond, Register rd, SpecialRegister spec_reg) {
2607     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2608     VIXL_ASSERT(allow_macro_instructions_);
2609     VIXL_ASSERT(OutsideITBlock());
2610     MacroEmissionCheckScope guard(this);
2611     ITScope it_scope(this, &cond);
2612     mrs(cond, rd, spec_reg);
2613   }
Mrs(Register rd,SpecialRegister spec_reg)2614   void Mrs(Register rd, SpecialRegister spec_reg) { Mrs(al, rd, spec_reg); }
2615 
Msr(Condition cond,MaskedSpecialRegister spec_reg,const Operand & operand)2616   void Msr(Condition cond,
2617            MaskedSpecialRegister spec_reg,
2618            const Operand& operand) {
2619     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2620     VIXL_ASSERT(allow_macro_instructions_);
2621     VIXL_ASSERT(OutsideITBlock());
2622     MacroEmissionCheckScope guard(this);
2623     ITScope it_scope(this, &cond);
2624     msr(cond, spec_reg, operand);
2625   }
Msr(MaskedSpecialRegister spec_reg,const Operand & operand)2626   void Msr(MaskedSpecialRegister spec_reg, const Operand& operand) {
2627     Msr(al, spec_reg, operand);
2628   }
2629 
Mul(Condition cond,Register rd,Register rn,Register rm)2630   void Mul(Condition cond, Register rd, Register rn, Register rm) {
2631     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2632     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
2633     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
2634     VIXL_ASSERT(allow_macro_instructions_);
2635     VIXL_ASSERT(OutsideITBlock());
2636     MacroEmissionCheckScope guard(this);
2637     bool can_use_it =
2638         // MUL<c>{<q>} <Rdm>, <Rn>{, <Rdm>} ; T1
2639         rd.Is(rm) && rn.IsLow() && rm.IsLow();
2640     ITScope it_scope(this, &cond, can_use_it);
2641     mul(cond, rd, rn, rm);
2642   }
Mul(Register rd,Register rn,Register rm)2643   void Mul(Register rd, Register rn, Register rm) { Mul(al, rd, rn, rm); }
Mul(FlagsUpdate flags,Condition cond,Register rd,Register rn,Register rm)2644   void Mul(FlagsUpdate flags,
2645            Condition cond,
2646            Register rd,
2647            Register rn,
2648            Register rm) {
2649     switch (flags) {
2650       case LeaveFlags:
2651         Mul(cond, rd, rn, rm);
2652         break;
2653       case SetFlags:
2654         Muls(cond, rd, rn, rm);
2655         break;
2656       case DontCare:
2657         bool setflags_is_smaller = IsUsingT32() && cond.Is(al) && rd.IsLow() &&
2658                                    rn.IsLow() && rm.Is(rd);
2659         if (setflags_is_smaller) {
2660           Muls(cond, rd, rn, rm);
2661         } else {
2662           Mul(cond, rd, rn, rm);
2663         }
2664         break;
2665     }
2666   }
Mul(FlagsUpdate flags,Register rd,Register rn,Register rm)2667   void Mul(FlagsUpdate flags, Register rd, Register rn, Register rm) {
2668     Mul(flags, al, rd, rn, rm);
2669   }
2670 
Muls(Condition cond,Register rd,Register rn,Register rm)2671   void Muls(Condition cond, Register rd, Register rn, Register rm) {
2672     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2673     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
2674     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
2675     VIXL_ASSERT(allow_macro_instructions_);
2676     VIXL_ASSERT(OutsideITBlock());
2677     MacroEmissionCheckScope guard(this);
2678     ITScope it_scope(this, &cond);
2679     muls(cond, rd, rn, rm);
2680   }
Muls(Register rd,Register rn,Register rm)2681   void Muls(Register rd, Register rn, Register rm) { Muls(al, rd, rn, rm); }
2682 
Mvn(Condition cond,Register rd,const Operand & operand)2683   void Mvn(Condition cond, Register rd, const Operand& operand) {
2684     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2685     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2686     VIXL_ASSERT(allow_macro_instructions_);
2687     VIXL_ASSERT(OutsideITBlock());
2688     MacroEmissionCheckScope guard(this);
2689     bool can_use_it =
2690         // MVN<c>{<q>} <Rd>, <Rm> ; T1
2691         operand.IsPlainRegister() && rd.IsLow() &&
2692         operand.GetBaseRegister().IsLow();
2693     ITScope it_scope(this, &cond, can_use_it);
2694     mvn(cond, rd, operand);
2695   }
Mvn(Register rd,const Operand & operand)2696   void Mvn(Register rd, const Operand& operand) { Mvn(al, rd, operand); }
Mvn(FlagsUpdate flags,Condition cond,Register rd,const Operand & operand)2697   void Mvn(FlagsUpdate flags,
2698            Condition cond,
2699            Register rd,
2700            const Operand& operand) {
2701     switch (flags) {
2702       case LeaveFlags:
2703         Mvn(cond, rd, operand);
2704         break;
2705       case SetFlags:
2706         Mvns(cond, rd, operand);
2707         break;
2708       case DontCare:
2709         bool setflags_is_smaller = IsUsingT32() && cond.Is(al) && rd.IsLow() &&
2710                                    operand.IsPlainRegister() &&
2711                                    operand.GetBaseRegister().IsLow();
2712         if (setflags_is_smaller) {
2713           Mvns(cond, rd, operand);
2714         } else {
2715           Mvn(cond, rd, operand);
2716         }
2717         break;
2718     }
2719   }
Mvn(FlagsUpdate flags,Register rd,const Operand & operand)2720   void Mvn(FlagsUpdate flags, Register rd, const Operand& operand) {
2721     Mvn(flags, al, rd, operand);
2722   }
2723 
Mvns(Condition cond,Register rd,const Operand & operand)2724   void Mvns(Condition cond, Register rd, const Operand& operand) {
2725     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2726     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2727     VIXL_ASSERT(allow_macro_instructions_);
2728     VIXL_ASSERT(OutsideITBlock());
2729     MacroEmissionCheckScope guard(this);
2730     ITScope it_scope(this, &cond);
2731     mvns(cond, rd, operand);
2732   }
Mvns(Register rd,const Operand & operand)2733   void Mvns(Register rd, const Operand& operand) { Mvns(al, rd, operand); }
2734 
Nop(Condition cond)2735   void Nop(Condition cond) {
2736     VIXL_ASSERT(allow_macro_instructions_);
2737     VIXL_ASSERT(OutsideITBlock());
2738     MacroEmissionCheckScope guard(this);
2739     ITScope it_scope(this, &cond);
2740     nop(cond);
2741   }
Nop()2742   void Nop() { Nop(al); }
2743 
Orn(Condition cond,Register rd,Register rn,const Operand & operand)2744   void Orn(Condition cond, Register rd, Register rn, const Operand& operand) {
2745     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2746     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
2747     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2748     VIXL_ASSERT(allow_macro_instructions_);
2749     VIXL_ASSERT(OutsideITBlock());
2750     MacroEmissionCheckScope guard(this);
2751     if (cond.Is(al) && operand.IsImmediate()) {
2752       uint32_t immediate = operand.GetImmediate();
2753       if (immediate == 0) {
2754         mvn(rd, 0);
2755         return;
2756       }
2757       if ((immediate == 0xffffffff) && rd.Is(rn)) {
2758         return;
2759       }
2760     }
2761     ITScope it_scope(this, &cond);
2762     orn(cond, rd, rn, operand);
2763   }
Orn(Register rd,Register rn,const Operand & operand)2764   void Orn(Register rd, Register rn, const Operand& operand) {
2765     Orn(al, rd, rn, operand);
2766   }
Orn(FlagsUpdate flags,Condition cond,Register rd,Register rn,const Operand & operand)2767   void Orn(FlagsUpdate flags,
2768            Condition cond,
2769            Register rd,
2770            Register rn,
2771            const Operand& operand) {
2772     switch (flags) {
2773       case LeaveFlags:
2774         Orn(cond, rd, rn, operand);
2775         break;
2776       case SetFlags:
2777         Orns(cond, rd, rn, operand);
2778         break;
2779       case DontCare:
2780         Orn(cond, rd, rn, operand);
2781         break;
2782     }
2783   }
Orn(FlagsUpdate flags,Register rd,Register rn,const Operand & operand)2784   void Orn(FlagsUpdate flags,
2785            Register rd,
2786            Register rn,
2787            const Operand& operand) {
2788     Orn(flags, al, rd, rn, operand);
2789   }
2790 
Orns(Condition cond,Register rd,Register rn,const Operand & operand)2791   void Orns(Condition cond, Register rd, Register rn, const Operand& operand) {
2792     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2793     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
2794     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2795     VIXL_ASSERT(allow_macro_instructions_);
2796     VIXL_ASSERT(OutsideITBlock());
2797     MacroEmissionCheckScope guard(this);
2798     ITScope it_scope(this, &cond);
2799     orns(cond, rd, rn, operand);
2800   }
Orns(Register rd,Register rn,const Operand & operand)2801   void Orns(Register rd, Register rn, const Operand& operand) {
2802     Orns(al, rd, rn, operand);
2803   }
2804 
Orr(Condition cond,Register rd,Register rn,const Operand & operand)2805   void Orr(Condition cond, Register rd, Register rn, const Operand& operand) {
2806     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2807     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
2808     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2809     VIXL_ASSERT(allow_macro_instructions_);
2810     VIXL_ASSERT(OutsideITBlock());
2811     MacroEmissionCheckScope guard(this);
2812     if (rd.Is(rn) && operand.IsPlainRegister() &&
2813         rd.Is(operand.GetBaseRegister())) {
2814       return;
2815     }
2816     if (cond.Is(al) && operand.IsImmediate()) {
2817       uint32_t immediate = operand.GetImmediate();
2818       if ((immediate == 0) && rd.Is(rn)) {
2819         return;
2820       }
2821       if (immediate == 0xffffffff) {
2822         mvn(rd, 0);
2823         return;
2824       }
2825     }
2826     bool can_use_it =
2827         // ORR<c>{<q>} {<Rdn>,} <Rdn>, <Rm> ; T1
2828         operand.IsPlainRegister() && rd.Is(rn) && rn.IsLow() &&
2829         operand.GetBaseRegister().IsLow();
2830     ITScope it_scope(this, &cond, can_use_it);
2831     orr(cond, rd, rn, operand);
2832   }
Orr(Register rd,Register rn,const Operand & operand)2833   void Orr(Register rd, Register rn, const Operand& operand) {
2834     Orr(al, rd, rn, operand);
2835   }
Orr(FlagsUpdate flags,Condition cond,Register rd,Register rn,const Operand & operand)2836   void Orr(FlagsUpdate flags,
2837            Condition cond,
2838            Register rd,
2839            Register rn,
2840            const Operand& operand) {
2841     switch (flags) {
2842       case LeaveFlags:
2843         Orr(cond, rd, rn, operand);
2844         break;
2845       case SetFlags:
2846         Orrs(cond, rd, rn, operand);
2847         break;
2848       case DontCare:
2849         if (operand.IsPlainRegister() && rd.Is(rn) &&
2850             rd.Is(operand.GetBaseRegister())) {
2851           return;
2852         }
2853         bool setflags_is_smaller = IsUsingT32() && cond.Is(al) && rd.IsLow() &&
2854                                    rn.Is(rd) && operand.IsPlainRegister() &&
2855                                    operand.GetBaseRegister().IsLow();
2856         if (setflags_is_smaller) {
2857           Orrs(cond, rd, rn, operand);
2858         } else {
2859           Orr(cond, rd, rn, operand);
2860         }
2861         break;
2862     }
2863   }
Orr(FlagsUpdate flags,Register rd,Register rn,const Operand & operand)2864   void Orr(FlagsUpdate flags,
2865            Register rd,
2866            Register rn,
2867            const Operand& operand) {
2868     Orr(flags, al, rd, rn, operand);
2869   }
2870 
Orrs(Condition cond,Register rd,Register rn,const Operand & operand)2871   void Orrs(Condition cond, Register rd, Register rn, const Operand& operand) {
2872     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2873     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
2874     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2875     VIXL_ASSERT(allow_macro_instructions_);
2876     VIXL_ASSERT(OutsideITBlock());
2877     MacroEmissionCheckScope guard(this);
2878     ITScope it_scope(this, &cond);
2879     orrs(cond, rd, rn, operand);
2880   }
Orrs(Register rd,Register rn,const Operand & operand)2881   void Orrs(Register rd, Register rn, const Operand& operand) {
2882     Orrs(al, rd, rn, operand);
2883   }
2884 
Pkhbt(Condition cond,Register rd,Register rn,const Operand & operand)2885   void Pkhbt(Condition cond, Register rd, Register rn, const Operand& operand) {
2886     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2887     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
2888     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2889     VIXL_ASSERT(allow_macro_instructions_);
2890     VIXL_ASSERT(OutsideITBlock());
2891     MacroEmissionCheckScope guard(this);
2892     ITScope it_scope(this, &cond);
2893     pkhbt(cond, rd, rn, operand);
2894   }
Pkhbt(Register rd,Register rn,const Operand & operand)2895   void Pkhbt(Register rd, Register rn, const Operand& operand) {
2896     Pkhbt(al, rd, rn, operand);
2897   }
2898 
Pkhtb(Condition cond,Register rd,Register rn,const Operand & operand)2899   void Pkhtb(Condition cond, Register rd, Register rn, const Operand& operand) {
2900     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2901     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
2902     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2903     VIXL_ASSERT(allow_macro_instructions_);
2904     VIXL_ASSERT(OutsideITBlock());
2905     MacroEmissionCheckScope guard(this);
2906     ITScope it_scope(this, &cond);
2907     pkhtb(cond, rd, rn, operand);
2908   }
Pkhtb(Register rd,Register rn,const Operand & operand)2909   void Pkhtb(Register rd, Register rn, const Operand& operand) {
2910     Pkhtb(al, rd, rn, operand);
2911   }
2912 
Pld(Condition cond,Label * label)2913   void Pld(Condition cond, Label* label) {
2914     VIXL_ASSERT(allow_macro_instructions_);
2915     VIXL_ASSERT(OutsideITBlock());
2916     MacroEmissionCheckScope guard(this);
2917     ITScope it_scope(this, &cond);
2918     pld(cond, label);
2919   }
Pld(Label * label)2920   void Pld(Label* label) { Pld(al, label); }
2921 
Pld(Condition cond,const MemOperand & operand)2922   void Pld(Condition cond, const MemOperand& operand) {
2923     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2924     VIXL_ASSERT(allow_macro_instructions_);
2925     VIXL_ASSERT(OutsideITBlock());
2926     MacroEmissionCheckScope guard(this);
2927     ITScope it_scope(this, &cond);
2928     pld(cond, operand);
2929   }
Pld(const MemOperand & operand)2930   void Pld(const MemOperand& operand) { Pld(al, operand); }
2931 
Pldw(Condition cond,const MemOperand & operand)2932   void Pldw(Condition cond, const MemOperand& operand) {
2933     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2934     VIXL_ASSERT(allow_macro_instructions_);
2935     VIXL_ASSERT(OutsideITBlock());
2936     MacroEmissionCheckScope guard(this);
2937     ITScope it_scope(this, &cond);
2938     pldw(cond, operand);
2939   }
Pldw(const MemOperand & operand)2940   void Pldw(const MemOperand& operand) { Pldw(al, operand); }
2941 
Pli(Condition cond,const MemOperand & operand)2942   void Pli(Condition cond, const MemOperand& operand) {
2943     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2944     VIXL_ASSERT(allow_macro_instructions_);
2945     VIXL_ASSERT(OutsideITBlock());
2946     MacroEmissionCheckScope guard(this);
2947     ITScope it_scope(this, &cond);
2948     pli(cond, operand);
2949   }
Pli(const MemOperand & operand)2950   void Pli(const MemOperand& operand) { Pli(al, operand); }
2951 
Pli(Condition cond,Label * label)2952   void Pli(Condition cond, Label* label) {
2953     VIXL_ASSERT(allow_macro_instructions_);
2954     VIXL_ASSERT(OutsideITBlock());
2955     MacroEmissionCheckScope guard(this);
2956     ITScope it_scope(this, &cond);
2957     pli(cond, label);
2958   }
Pli(Label * label)2959   void Pli(Label* label) { Pli(al, label); }
2960 
Pop(Condition cond,RegisterList registers)2961   void Pop(Condition cond, RegisterList registers) {
2962     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
2963     VIXL_ASSERT(allow_macro_instructions_);
2964     VIXL_ASSERT(OutsideITBlock());
2965     MacroEmissionCheckScope guard(this);
2966     ITScope it_scope(this, &cond);
2967     pop(cond, registers);
2968   }
Pop(RegisterList registers)2969   void Pop(RegisterList registers) { Pop(al, registers); }
2970 
Pop(Condition cond,Register rt)2971   void Pop(Condition cond, Register rt) {
2972     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
2973     VIXL_ASSERT(allow_macro_instructions_);
2974     VIXL_ASSERT(OutsideITBlock());
2975     MacroEmissionCheckScope guard(this);
2976     ITScope it_scope(this, &cond);
2977     pop(cond, rt);
2978   }
Pop(Register rt)2979   void Pop(Register rt) { Pop(al, rt); }
2980 
Push(Condition cond,RegisterList registers)2981   void Push(Condition cond, RegisterList registers) {
2982     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
2983     VIXL_ASSERT(allow_macro_instructions_);
2984     VIXL_ASSERT(OutsideITBlock());
2985     MacroEmissionCheckScope guard(this);
2986     ITScope it_scope(this, &cond);
2987     push(cond, registers);
2988   }
Push(RegisterList registers)2989   void Push(RegisterList registers) { Push(al, registers); }
2990 
Push(Condition cond,Register rt)2991   void Push(Condition cond, Register rt) {
2992     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
2993     VIXL_ASSERT(allow_macro_instructions_);
2994     VIXL_ASSERT(OutsideITBlock());
2995     MacroEmissionCheckScope guard(this);
2996     ITScope it_scope(this, &cond);
2997     push(cond, rt);
2998   }
Push(Register rt)2999   void Push(Register rt) { Push(al, rt); }
3000 
Qadd(Condition cond,Register rd,Register rm,Register rn)3001   void Qadd(Condition cond, Register rd, Register rm, Register rn) {
3002     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3003     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3004     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3005     VIXL_ASSERT(allow_macro_instructions_);
3006     VIXL_ASSERT(OutsideITBlock());
3007     MacroEmissionCheckScope guard(this);
3008     ITScope it_scope(this, &cond);
3009     qadd(cond, rd, rm, rn);
3010   }
Qadd(Register rd,Register rm,Register rn)3011   void Qadd(Register rd, Register rm, Register rn) { Qadd(al, rd, rm, rn); }
3012 
Qadd16(Condition cond,Register rd,Register rn,Register rm)3013   void Qadd16(Condition cond, Register rd, Register rn, Register rm) {
3014     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3015     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3016     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3017     VIXL_ASSERT(allow_macro_instructions_);
3018     VIXL_ASSERT(OutsideITBlock());
3019     MacroEmissionCheckScope guard(this);
3020     ITScope it_scope(this, &cond);
3021     qadd16(cond, rd, rn, rm);
3022   }
Qadd16(Register rd,Register rn,Register rm)3023   void Qadd16(Register rd, Register rn, Register rm) { Qadd16(al, rd, rn, rm); }
3024 
Qadd8(Condition cond,Register rd,Register rn,Register rm)3025   void Qadd8(Condition cond, Register rd, Register rn, Register rm) {
3026     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3027     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3028     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3029     VIXL_ASSERT(allow_macro_instructions_);
3030     VIXL_ASSERT(OutsideITBlock());
3031     MacroEmissionCheckScope guard(this);
3032     ITScope it_scope(this, &cond);
3033     qadd8(cond, rd, rn, rm);
3034   }
Qadd8(Register rd,Register rn,Register rm)3035   void Qadd8(Register rd, Register rn, Register rm) { Qadd8(al, rd, rn, rm); }
3036 
Qasx(Condition cond,Register rd,Register rn,Register rm)3037   void Qasx(Condition cond, Register rd, Register rn, Register rm) {
3038     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3039     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3040     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3041     VIXL_ASSERT(allow_macro_instructions_);
3042     VIXL_ASSERT(OutsideITBlock());
3043     MacroEmissionCheckScope guard(this);
3044     ITScope it_scope(this, &cond);
3045     qasx(cond, rd, rn, rm);
3046   }
Qasx(Register rd,Register rn,Register rm)3047   void Qasx(Register rd, Register rn, Register rm) { Qasx(al, rd, rn, rm); }
3048 
Qdadd(Condition cond,Register rd,Register rm,Register rn)3049   void Qdadd(Condition cond, Register rd, Register rm, Register rn) {
3050     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3051     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3052     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3053     VIXL_ASSERT(allow_macro_instructions_);
3054     VIXL_ASSERT(OutsideITBlock());
3055     MacroEmissionCheckScope guard(this);
3056     ITScope it_scope(this, &cond);
3057     qdadd(cond, rd, rm, rn);
3058   }
Qdadd(Register rd,Register rm,Register rn)3059   void Qdadd(Register rd, Register rm, Register rn) { Qdadd(al, rd, rm, rn); }
3060 
Qdsub(Condition cond,Register rd,Register rm,Register rn)3061   void Qdsub(Condition cond, Register rd, Register rm, Register rn) {
3062     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3063     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3064     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3065     VIXL_ASSERT(allow_macro_instructions_);
3066     VIXL_ASSERT(OutsideITBlock());
3067     MacroEmissionCheckScope guard(this);
3068     ITScope it_scope(this, &cond);
3069     qdsub(cond, rd, rm, rn);
3070   }
Qdsub(Register rd,Register rm,Register rn)3071   void Qdsub(Register rd, Register rm, Register rn) { Qdsub(al, rd, rm, rn); }
3072 
Qsax(Condition cond,Register rd,Register rn,Register rm)3073   void Qsax(Condition cond, Register rd, Register rn, Register rm) {
3074     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3075     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3076     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3077     VIXL_ASSERT(allow_macro_instructions_);
3078     VIXL_ASSERT(OutsideITBlock());
3079     MacroEmissionCheckScope guard(this);
3080     ITScope it_scope(this, &cond);
3081     qsax(cond, rd, rn, rm);
3082   }
Qsax(Register rd,Register rn,Register rm)3083   void Qsax(Register rd, Register rn, Register rm) { Qsax(al, rd, rn, rm); }
3084 
Qsub(Condition cond,Register rd,Register rm,Register rn)3085   void Qsub(Condition cond, Register rd, Register rm, Register rn) {
3086     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3087     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3088     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3089     VIXL_ASSERT(allow_macro_instructions_);
3090     VIXL_ASSERT(OutsideITBlock());
3091     MacroEmissionCheckScope guard(this);
3092     ITScope it_scope(this, &cond);
3093     qsub(cond, rd, rm, rn);
3094   }
Qsub(Register rd,Register rm,Register rn)3095   void Qsub(Register rd, Register rm, Register rn) { Qsub(al, rd, rm, rn); }
3096 
Qsub16(Condition cond,Register rd,Register rn,Register rm)3097   void Qsub16(Condition cond, Register rd, Register rn, Register rm) {
3098     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3099     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3100     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3101     VIXL_ASSERT(allow_macro_instructions_);
3102     VIXL_ASSERT(OutsideITBlock());
3103     MacroEmissionCheckScope guard(this);
3104     ITScope it_scope(this, &cond);
3105     qsub16(cond, rd, rn, rm);
3106   }
Qsub16(Register rd,Register rn,Register rm)3107   void Qsub16(Register rd, Register rn, Register rm) { Qsub16(al, rd, rn, rm); }
3108 
Qsub8(Condition cond,Register rd,Register rn,Register rm)3109   void Qsub8(Condition cond, Register rd, Register rn, Register rm) {
3110     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3111     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3112     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3113     VIXL_ASSERT(allow_macro_instructions_);
3114     VIXL_ASSERT(OutsideITBlock());
3115     MacroEmissionCheckScope guard(this);
3116     ITScope it_scope(this, &cond);
3117     qsub8(cond, rd, rn, rm);
3118   }
Qsub8(Register rd,Register rn,Register rm)3119   void Qsub8(Register rd, Register rn, Register rm) { Qsub8(al, rd, rn, rm); }
3120 
Rbit(Condition cond,Register rd,Register rm)3121   void Rbit(Condition cond, Register rd, Register rm) {
3122     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3123     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3124     VIXL_ASSERT(allow_macro_instructions_);
3125     VIXL_ASSERT(OutsideITBlock());
3126     MacroEmissionCheckScope guard(this);
3127     ITScope it_scope(this, &cond);
3128     rbit(cond, rd, rm);
3129   }
Rbit(Register rd,Register rm)3130   void Rbit(Register rd, Register rm) { Rbit(al, rd, rm); }
3131 
Rev(Condition cond,Register rd,Register rm)3132   void Rev(Condition cond, Register rd, Register rm) {
3133     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3134     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3135     VIXL_ASSERT(allow_macro_instructions_);
3136     VIXL_ASSERT(OutsideITBlock());
3137     MacroEmissionCheckScope guard(this);
3138     ITScope it_scope(this, &cond);
3139     rev(cond, rd, rm);
3140   }
Rev(Register rd,Register rm)3141   void Rev(Register rd, Register rm) { Rev(al, rd, rm); }
3142 
Rev16(Condition cond,Register rd,Register rm)3143   void Rev16(Condition cond, Register rd, Register rm) {
3144     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3145     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3146     VIXL_ASSERT(allow_macro_instructions_);
3147     VIXL_ASSERT(OutsideITBlock());
3148     MacroEmissionCheckScope guard(this);
3149     ITScope it_scope(this, &cond);
3150     rev16(cond, rd, rm);
3151   }
Rev16(Register rd,Register rm)3152   void Rev16(Register rd, Register rm) { Rev16(al, rd, rm); }
3153 
Revsh(Condition cond,Register rd,Register rm)3154   void Revsh(Condition cond, Register rd, Register rm) {
3155     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3156     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3157     VIXL_ASSERT(allow_macro_instructions_);
3158     VIXL_ASSERT(OutsideITBlock());
3159     MacroEmissionCheckScope guard(this);
3160     ITScope it_scope(this, &cond);
3161     revsh(cond, rd, rm);
3162   }
Revsh(Register rd,Register rm)3163   void Revsh(Register rd, Register rm) { Revsh(al, rd, rm); }
3164 
Ror(Condition cond,Register rd,Register rm,const Operand & operand)3165   void Ror(Condition cond, Register rd, Register rm, const Operand& operand) {
3166     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3167     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3168     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
3169     VIXL_ASSERT(allow_macro_instructions_);
3170     VIXL_ASSERT(OutsideITBlock());
3171     MacroEmissionCheckScope guard(this);
3172     bool can_use_it =
3173         // ROR<c>{<q>} {<Rdm>,} <Rdm>, <Rs> ; T1
3174         operand.IsPlainRegister() && rd.Is(rm) && rd.IsLow() &&
3175         operand.GetBaseRegister().IsLow();
3176     ITScope it_scope(this, &cond, can_use_it);
3177     ror(cond, rd, rm, operand);
3178   }
Ror(Register rd,Register rm,const Operand & operand)3179   void Ror(Register rd, Register rm, const Operand& operand) {
3180     Ror(al, rd, rm, operand);
3181   }
Ror(FlagsUpdate flags,Condition cond,Register rd,Register rm,const Operand & operand)3182   void Ror(FlagsUpdate flags,
3183            Condition cond,
3184            Register rd,
3185            Register rm,
3186            const Operand& operand) {
3187     switch (flags) {
3188       case LeaveFlags:
3189         Ror(cond, rd, rm, operand);
3190         break;
3191       case SetFlags:
3192         Rors(cond, rd, rm, operand);
3193         break;
3194       case DontCare:
3195         bool setflags_is_smaller = IsUsingT32() && cond.Is(al) && rd.IsLow() &&
3196                                    rm.IsLow() && operand.IsPlainRegister() &&
3197                                    rd.Is(rm);
3198         if (setflags_is_smaller) {
3199           Rors(cond, rd, rm, operand);
3200         } else {
3201           Ror(cond, rd, rm, operand);
3202         }
3203         break;
3204     }
3205   }
Ror(FlagsUpdate flags,Register rd,Register rm,const Operand & operand)3206   void Ror(FlagsUpdate flags,
3207            Register rd,
3208            Register rm,
3209            const Operand& operand) {
3210     Ror(flags, al, rd, rm, operand);
3211   }
3212 
Rors(Condition cond,Register rd,Register rm,const Operand & operand)3213   void Rors(Condition cond, Register rd, Register rm, const Operand& operand) {
3214     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3215     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3216     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
3217     VIXL_ASSERT(allow_macro_instructions_);
3218     VIXL_ASSERT(OutsideITBlock());
3219     MacroEmissionCheckScope guard(this);
3220     ITScope it_scope(this, &cond);
3221     rors(cond, rd, rm, operand);
3222   }
Rors(Register rd,Register rm,const Operand & operand)3223   void Rors(Register rd, Register rm, const Operand& operand) {
3224     Rors(al, rd, rm, operand);
3225   }
3226 
Rrx(Condition cond,Register rd,Register rm)3227   void Rrx(Condition cond, Register rd, Register rm) {
3228     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3229     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3230     VIXL_ASSERT(allow_macro_instructions_);
3231     VIXL_ASSERT(OutsideITBlock());
3232     MacroEmissionCheckScope guard(this);
3233     ITScope it_scope(this, &cond);
3234     rrx(cond, rd, rm);
3235   }
Rrx(Register rd,Register rm)3236   void Rrx(Register rd, Register rm) { Rrx(al, rd, rm); }
Rrx(FlagsUpdate flags,Condition cond,Register rd,Register rm)3237   void Rrx(FlagsUpdate flags, Condition cond, Register rd, Register rm) {
3238     switch (flags) {
3239       case LeaveFlags:
3240         Rrx(cond, rd, rm);
3241         break;
3242       case SetFlags:
3243         Rrxs(cond, rd, rm);
3244         break;
3245       case DontCare:
3246         Rrx(cond, rd, rm);
3247         break;
3248     }
3249   }
Rrx(FlagsUpdate flags,Register rd,Register rm)3250   void Rrx(FlagsUpdate flags, Register rd, Register rm) {
3251     Rrx(flags, al, rd, rm);
3252   }
3253 
Rrxs(Condition cond,Register rd,Register rm)3254   void Rrxs(Condition cond, Register rd, Register rm) {
3255     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3256     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3257     VIXL_ASSERT(allow_macro_instructions_);
3258     VIXL_ASSERT(OutsideITBlock());
3259     MacroEmissionCheckScope guard(this);
3260     ITScope it_scope(this, &cond);
3261     rrxs(cond, rd, rm);
3262   }
Rrxs(Register rd,Register rm)3263   void Rrxs(Register rd, Register rm) { Rrxs(al, rd, rm); }
3264 
Rsb(Condition cond,Register rd,Register rn,const Operand & operand)3265   void Rsb(Condition cond, Register rd, Register rn, const Operand& operand) {
3266     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3267     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3268     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
3269     VIXL_ASSERT(allow_macro_instructions_);
3270     VIXL_ASSERT(OutsideITBlock());
3271     MacroEmissionCheckScope guard(this);
3272     bool can_use_it =
3273         // RSB<c>{<q>} {<Rd>, }<Rn>, #0 ; T1
3274         operand.IsImmediate() && rd.IsLow() && rn.IsLow() &&
3275         (operand.GetImmediate() == 0);
3276     ITScope it_scope(this, &cond, can_use_it);
3277     rsb(cond, rd, rn, operand);
3278   }
Rsb(Register rd,Register rn,const Operand & operand)3279   void Rsb(Register rd, Register rn, const Operand& operand) {
3280     Rsb(al, rd, rn, operand);
3281   }
Rsb(FlagsUpdate flags,Condition cond,Register rd,Register rn,const Operand & operand)3282   void Rsb(FlagsUpdate flags,
3283            Condition cond,
3284            Register rd,
3285            Register rn,
3286            const Operand& operand) {
3287     switch (flags) {
3288       case LeaveFlags:
3289         Rsb(cond, rd, rn, operand);
3290         break;
3291       case SetFlags:
3292         Rsbs(cond, rd, rn, operand);
3293         break;
3294       case DontCare:
3295         bool setflags_is_smaller = IsUsingT32() && cond.Is(al) && rd.IsLow() &&
3296                                    rn.IsLow() && operand.IsImmediate() &&
3297                                    (operand.GetImmediate() == 0);
3298         if (setflags_is_smaller) {
3299           Rsbs(cond, rd, rn, operand);
3300         } else {
3301           Rsb(cond, rd, rn, operand);
3302         }
3303         break;
3304     }
3305   }
Rsb(FlagsUpdate flags,Register rd,Register rn,const Operand & operand)3306   void Rsb(FlagsUpdate flags,
3307            Register rd,
3308            Register rn,
3309            const Operand& operand) {
3310     Rsb(flags, al, rd, rn, operand);
3311   }
3312 
Rsbs(Condition cond,Register rd,Register rn,const Operand & operand)3313   void Rsbs(Condition cond, Register rd, Register rn, const Operand& operand) {
3314     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3315     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3316     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
3317     VIXL_ASSERT(allow_macro_instructions_);
3318     VIXL_ASSERT(OutsideITBlock());
3319     MacroEmissionCheckScope guard(this);
3320     ITScope it_scope(this, &cond);
3321     rsbs(cond, rd, rn, operand);
3322   }
Rsbs(Register rd,Register rn,const Operand & operand)3323   void Rsbs(Register rd, Register rn, const Operand& operand) {
3324     Rsbs(al, rd, rn, operand);
3325   }
3326 
Rsc(Condition cond,Register rd,Register rn,const Operand & operand)3327   void Rsc(Condition cond, Register rd, Register rn, const Operand& operand) {
3328     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3329     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3330     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
3331     VIXL_ASSERT(allow_macro_instructions_);
3332     VIXL_ASSERT(OutsideITBlock());
3333     MacroEmissionCheckScope guard(this);
3334     ITScope it_scope(this, &cond);
3335     rsc(cond, rd, rn, operand);
3336   }
Rsc(Register rd,Register rn,const Operand & operand)3337   void Rsc(Register rd, Register rn, const Operand& operand) {
3338     Rsc(al, rd, rn, operand);
3339   }
Rsc(FlagsUpdate flags,Condition cond,Register rd,Register rn,const Operand & operand)3340   void Rsc(FlagsUpdate flags,
3341            Condition cond,
3342            Register rd,
3343            Register rn,
3344            const Operand& operand) {
3345     switch (flags) {
3346       case LeaveFlags:
3347         Rsc(cond, rd, rn, operand);
3348         break;
3349       case SetFlags:
3350         Rscs(cond, rd, rn, operand);
3351         break;
3352       case DontCare:
3353         Rsc(cond, rd, rn, operand);
3354         break;
3355     }
3356   }
Rsc(FlagsUpdate flags,Register rd,Register rn,const Operand & operand)3357   void Rsc(FlagsUpdate flags,
3358            Register rd,
3359            Register rn,
3360            const Operand& operand) {
3361     Rsc(flags, al, rd, rn, operand);
3362   }
3363 
Rscs(Condition cond,Register rd,Register rn,const Operand & operand)3364   void Rscs(Condition cond, Register rd, Register rn, const Operand& operand) {
3365     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3366     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3367     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
3368     VIXL_ASSERT(allow_macro_instructions_);
3369     VIXL_ASSERT(OutsideITBlock());
3370     MacroEmissionCheckScope guard(this);
3371     ITScope it_scope(this, &cond);
3372     rscs(cond, rd, rn, operand);
3373   }
Rscs(Register rd,Register rn,const Operand & operand)3374   void Rscs(Register rd, Register rn, const Operand& operand) {
3375     Rscs(al, rd, rn, operand);
3376   }
3377 
Sadd16(Condition cond,Register rd,Register rn,Register rm)3378   void Sadd16(Condition cond, Register rd, Register rn, Register rm) {
3379     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3380     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3381     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3382     VIXL_ASSERT(allow_macro_instructions_);
3383     VIXL_ASSERT(OutsideITBlock());
3384     MacroEmissionCheckScope guard(this);
3385     ITScope it_scope(this, &cond);
3386     sadd16(cond, rd, rn, rm);
3387   }
Sadd16(Register rd,Register rn,Register rm)3388   void Sadd16(Register rd, Register rn, Register rm) { Sadd16(al, rd, rn, rm); }
3389 
Sadd8(Condition cond,Register rd,Register rn,Register rm)3390   void Sadd8(Condition cond, Register rd, Register rn, Register rm) {
3391     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3392     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3393     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3394     VIXL_ASSERT(allow_macro_instructions_);
3395     VIXL_ASSERT(OutsideITBlock());
3396     MacroEmissionCheckScope guard(this);
3397     ITScope it_scope(this, &cond);
3398     sadd8(cond, rd, rn, rm);
3399   }
Sadd8(Register rd,Register rn,Register rm)3400   void Sadd8(Register rd, Register rn, Register rm) { Sadd8(al, rd, rn, rm); }
3401 
Sasx(Condition cond,Register rd,Register rn,Register rm)3402   void Sasx(Condition cond, Register rd, Register rn, Register rm) {
3403     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3404     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3405     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3406     VIXL_ASSERT(allow_macro_instructions_);
3407     VIXL_ASSERT(OutsideITBlock());
3408     MacroEmissionCheckScope guard(this);
3409     ITScope it_scope(this, &cond);
3410     sasx(cond, rd, rn, rm);
3411   }
Sasx(Register rd,Register rn,Register rm)3412   void Sasx(Register rd, Register rn, Register rm) { Sasx(al, rd, rn, rm); }
3413 
Sbc(Condition cond,Register rd,Register rn,const Operand & operand)3414   void Sbc(Condition cond, Register rd, Register rn, const Operand& operand) {
3415     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3416     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3417     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
3418     VIXL_ASSERT(allow_macro_instructions_);
3419     VIXL_ASSERT(OutsideITBlock());
3420     MacroEmissionCheckScope guard(this);
3421     bool can_use_it =
3422         // SBC<c>{<q>} {<Rdn>,} <Rdn>, <Rm> ; T1
3423         operand.IsPlainRegister() && rn.IsLow() && rd.Is(rn) &&
3424         operand.GetBaseRegister().IsLow();
3425     ITScope it_scope(this, &cond, can_use_it);
3426     sbc(cond, rd, rn, operand);
3427   }
Sbc(Register rd,Register rn,const Operand & operand)3428   void Sbc(Register rd, Register rn, const Operand& operand) {
3429     Sbc(al, rd, rn, operand);
3430   }
Sbc(FlagsUpdate flags,Condition cond,Register rd,Register rn,const Operand & operand)3431   void Sbc(FlagsUpdate flags,
3432            Condition cond,
3433            Register rd,
3434            Register rn,
3435            const Operand& operand) {
3436     switch (flags) {
3437       case LeaveFlags:
3438         Sbc(cond, rd, rn, operand);
3439         break;
3440       case SetFlags:
3441         Sbcs(cond, rd, rn, operand);
3442         break;
3443       case DontCare:
3444         bool setflags_is_smaller = IsUsingT32() && cond.Is(al) && rd.IsLow() &&
3445                                    rn.Is(rd) && operand.IsPlainRegister() &&
3446                                    operand.GetBaseRegister().IsLow();
3447         if (setflags_is_smaller) {
3448           Sbcs(cond, rd, rn, operand);
3449         } else {
3450           Sbc(cond, rd, rn, operand);
3451         }
3452         break;
3453     }
3454   }
Sbc(FlagsUpdate flags,Register rd,Register rn,const Operand & operand)3455   void Sbc(FlagsUpdate flags,
3456            Register rd,
3457            Register rn,
3458            const Operand& operand) {
3459     Sbc(flags, al, rd, rn, operand);
3460   }
3461 
Sbcs(Condition cond,Register rd,Register rn,const Operand & operand)3462   void Sbcs(Condition cond, Register rd, Register rn, const Operand& operand) {
3463     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3464     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3465     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
3466     VIXL_ASSERT(allow_macro_instructions_);
3467     VIXL_ASSERT(OutsideITBlock());
3468     MacroEmissionCheckScope guard(this);
3469     ITScope it_scope(this, &cond);
3470     sbcs(cond, rd, rn, operand);
3471   }
Sbcs(Register rd,Register rn,const Operand & operand)3472   void Sbcs(Register rd, Register rn, const Operand& operand) {
3473     Sbcs(al, rd, rn, operand);
3474   }
3475 
Sbfx(Condition cond,Register rd,Register rn,uint32_t lsb,const Operand & operand)3476   void Sbfx(Condition cond,
3477             Register rd,
3478             Register rn,
3479             uint32_t lsb,
3480             const Operand& operand) {
3481     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3482     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3483     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
3484     VIXL_ASSERT(allow_macro_instructions_);
3485     VIXL_ASSERT(OutsideITBlock());
3486     MacroEmissionCheckScope guard(this);
3487     ITScope it_scope(this, &cond);
3488     sbfx(cond, rd, rn, lsb, operand);
3489   }
Sbfx(Register rd,Register rn,uint32_t lsb,const Operand & operand)3490   void Sbfx(Register rd, Register rn, uint32_t lsb, const Operand& operand) {
3491     Sbfx(al, rd, rn, lsb, operand);
3492   }
3493 
Sdiv(Condition cond,Register rd,Register rn,Register rm)3494   void Sdiv(Condition cond, Register rd, Register rn, Register rm) {
3495     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3496     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3497     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3498     VIXL_ASSERT(allow_macro_instructions_);
3499     VIXL_ASSERT(OutsideITBlock());
3500     MacroEmissionCheckScope guard(this);
3501     ITScope it_scope(this, &cond);
3502     sdiv(cond, rd, rn, rm);
3503   }
Sdiv(Register rd,Register rn,Register rm)3504   void Sdiv(Register rd, Register rn, Register rm) { Sdiv(al, rd, rn, rm); }
3505 
Sel(Condition cond,Register rd,Register rn,Register rm)3506   void Sel(Condition cond, Register rd, Register rn, Register rm) {
3507     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3508     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3509     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3510     VIXL_ASSERT(allow_macro_instructions_);
3511     VIXL_ASSERT(OutsideITBlock());
3512     MacroEmissionCheckScope guard(this);
3513     ITScope it_scope(this, &cond);
3514     sel(cond, rd, rn, rm);
3515   }
Sel(Register rd,Register rn,Register rm)3516   void Sel(Register rd, Register rn, Register rm) { Sel(al, rd, rn, rm); }
3517 
Shadd16(Condition cond,Register rd,Register rn,Register rm)3518   void Shadd16(Condition cond, Register rd, Register rn, Register rm) {
3519     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3520     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3521     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3522     VIXL_ASSERT(allow_macro_instructions_);
3523     VIXL_ASSERT(OutsideITBlock());
3524     MacroEmissionCheckScope guard(this);
3525     ITScope it_scope(this, &cond);
3526     shadd16(cond, rd, rn, rm);
3527   }
Shadd16(Register rd,Register rn,Register rm)3528   void Shadd16(Register rd, Register rn, Register rm) {
3529     Shadd16(al, rd, rn, rm);
3530   }
3531 
Shadd8(Condition cond,Register rd,Register rn,Register rm)3532   void Shadd8(Condition cond, Register rd, Register rn, Register rm) {
3533     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3534     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3535     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3536     VIXL_ASSERT(allow_macro_instructions_);
3537     VIXL_ASSERT(OutsideITBlock());
3538     MacroEmissionCheckScope guard(this);
3539     ITScope it_scope(this, &cond);
3540     shadd8(cond, rd, rn, rm);
3541   }
Shadd8(Register rd,Register rn,Register rm)3542   void Shadd8(Register rd, Register rn, Register rm) { Shadd8(al, rd, rn, rm); }
3543 
Shasx(Condition cond,Register rd,Register rn,Register rm)3544   void Shasx(Condition cond, Register rd, Register rn, Register rm) {
3545     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3546     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3547     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3548     VIXL_ASSERT(allow_macro_instructions_);
3549     VIXL_ASSERT(OutsideITBlock());
3550     MacroEmissionCheckScope guard(this);
3551     ITScope it_scope(this, &cond);
3552     shasx(cond, rd, rn, rm);
3553   }
Shasx(Register rd,Register rn,Register rm)3554   void Shasx(Register rd, Register rn, Register rm) { Shasx(al, rd, rn, rm); }
3555 
Shsax(Condition cond,Register rd,Register rn,Register rm)3556   void Shsax(Condition cond, Register rd, Register rn, Register rm) {
3557     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3558     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3559     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3560     VIXL_ASSERT(allow_macro_instructions_);
3561     VIXL_ASSERT(OutsideITBlock());
3562     MacroEmissionCheckScope guard(this);
3563     ITScope it_scope(this, &cond);
3564     shsax(cond, rd, rn, rm);
3565   }
Shsax(Register rd,Register rn,Register rm)3566   void Shsax(Register rd, Register rn, Register rm) { Shsax(al, rd, rn, rm); }
3567 
Shsub16(Condition cond,Register rd,Register rn,Register rm)3568   void Shsub16(Condition cond, Register rd, Register rn, Register rm) {
3569     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3570     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3571     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3572     VIXL_ASSERT(allow_macro_instructions_);
3573     VIXL_ASSERT(OutsideITBlock());
3574     MacroEmissionCheckScope guard(this);
3575     ITScope it_scope(this, &cond);
3576     shsub16(cond, rd, rn, rm);
3577   }
Shsub16(Register rd,Register rn,Register rm)3578   void Shsub16(Register rd, Register rn, Register rm) {
3579     Shsub16(al, rd, rn, rm);
3580   }
3581 
Shsub8(Condition cond,Register rd,Register rn,Register rm)3582   void Shsub8(Condition cond, Register rd, Register rn, Register rm) {
3583     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3584     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3585     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3586     VIXL_ASSERT(allow_macro_instructions_);
3587     VIXL_ASSERT(OutsideITBlock());
3588     MacroEmissionCheckScope guard(this);
3589     ITScope it_scope(this, &cond);
3590     shsub8(cond, rd, rn, rm);
3591   }
Shsub8(Register rd,Register rn,Register rm)3592   void Shsub8(Register rd, Register rn, Register rm) { Shsub8(al, rd, rn, rm); }
3593 
Smlabb(Condition cond,Register rd,Register rn,Register rm,Register ra)3594   void Smlabb(
3595       Condition cond, Register rd, Register rn, Register rm, Register ra) {
3596     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3597     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3598     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3599     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
3600     VIXL_ASSERT(allow_macro_instructions_);
3601     VIXL_ASSERT(OutsideITBlock());
3602     MacroEmissionCheckScope guard(this);
3603     ITScope it_scope(this, &cond);
3604     smlabb(cond, rd, rn, rm, ra);
3605   }
Smlabb(Register rd,Register rn,Register rm,Register ra)3606   void Smlabb(Register rd, Register rn, Register rm, Register ra) {
3607     Smlabb(al, rd, rn, rm, ra);
3608   }
3609 
Smlabt(Condition cond,Register rd,Register rn,Register rm,Register ra)3610   void Smlabt(
3611       Condition cond, Register rd, Register rn, Register rm, Register ra) {
3612     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3613     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3614     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3615     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
3616     VIXL_ASSERT(allow_macro_instructions_);
3617     VIXL_ASSERT(OutsideITBlock());
3618     MacroEmissionCheckScope guard(this);
3619     ITScope it_scope(this, &cond);
3620     smlabt(cond, rd, rn, rm, ra);
3621   }
Smlabt(Register rd,Register rn,Register rm,Register ra)3622   void Smlabt(Register rd, Register rn, Register rm, Register ra) {
3623     Smlabt(al, rd, rn, rm, ra);
3624   }
3625 
Smlad(Condition cond,Register rd,Register rn,Register rm,Register ra)3626   void Smlad(
3627       Condition cond, Register rd, Register rn, Register rm, Register ra) {
3628     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3629     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3630     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3631     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
3632     VIXL_ASSERT(allow_macro_instructions_);
3633     VIXL_ASSERT(OutsideITBlock());
3634     MacroEmissionCheckScope guard(this);
3635     ITScope it_scope(this, &cond);
3636     smlad(cond, rd, rn, rm, ra);
3637   }
Smlad(Register rd,Register rn,Register rm,Register ra)3638   void Smlad(Register rd, Register rn, Register rm, Register ra) {
3639     Smlad(al, rd, rn, rm, ra);
3640   }
3641 
Smladx(Condition cond,Register rd,Register rn,Register rm,Register ra)3642   void Smladx(
3643       Condition cond, Register rd, Register rn, Register rm, Register ra) {
3644     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3645     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3646     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3647     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
3648     VIXL_ASSERT(allow_macro_instructions_);
3649     VIXL_ASSERT(OutsideITBlock());
3650     MacroEmissionCheckScope guard(this);
3651     ITScope it_scope(this, &cond);
3652     smladx(cond, rd, rn, rm, ra);
3653   }
Smladx(Register rd,Register rn,Register rm,Register ra)3654   void Smladx(Register rd, Register rn, Register rm, Register ra) {
3655     Smladx(al, rd, rn, rm, ra);
3656   }
3657 
Smlal(Condition cond,Register rdlo,Register rdhi,Register rn,Register rm)3658   void Smlal(
3659       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
3660     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo));
3661     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi));
3662     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3663     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3664     VIXL_ASSERT(allow_macro_instructions_);
3665     VIXL_ASSERT(OutsideITBlock());
3666     MacroEmissionCheckScope guard(this);
3667     ITScope it_scope(this, &cond);
3668     smlal(cond, rdlo, rdhi, rn, rm);
3669   }
Smlal(Register rdlo,Register rdhi,Register rn,Register rm)3670   void Smlal(Register rdlo, Register rdhi, Register rn, Register rm) {
3671     Smlal(al, rdlo, rdhi, rn, rm);
3672   }
3673 
Smlalbb(Condition cond,Register rdlo,Register rdhi,Register rn,Register rm)3674   void Smlalbb(
3675       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
3676     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo));
3677     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi));
3678     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3679     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3680     VIXL_ASSERT(allow_macro_instructions_);
3681     VIXL_ASSERT(OutsideITBlock());
3682     MacroEmissionCheckScope guard(this);
3683     ITScope it_scope(this, &cond);
3684     smlalbb(cond, rdlo, rdhi, rn, rm);
3685   }
Smlalbb(Register rdlo,Register rdhi,Register rn,Register rm)3686   void Smlalbb(Register rdlo, Register rdhi, Register rn, Register rm) {
3687     Smlalbb(al, rdlo, rdhi, rn, rm);
3688   }
3689 
Smlalbt(Condition cond,Register rdlo,Register rdhi,Register rn,Register rm)3690   void Smlalbt(
3691       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
3692     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo));
3693     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi));
3694     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3695     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3696     VIXL_ASSERT(allow_macro_instructions_);
3697     VIXL_ASSERT(OutsideITBlock());
3698     MacroEmissionCheckScope guard(this);
3699     ITScope it_scope(this, &cond);
3700     smlalbt(cond, rdlo, rdhi, rn, rm);
3701   }
Smlalbt(Register rdlo,Register rdhi,Register rn,Register rm)3702   void Smlalbt(Register rdlo, Register rdhi, Register rn, Register rm) {
3703     Smlalbt(al, rdlo, rdhi, rn, rm);
3704   }
3705 
Smlald(Condition cond,Register rdlo,Register rdhi,Register rn,Register rm)3706   void Smlald(
3707       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
3708     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo));
3709     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi));
3710     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3711     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3712     VIXL_ASSERT(allow_macro_instructions_);
3713     VIXL_ASSERT(OutsideITBlock());
3714     MacroEmissionCheckScope guard(this);
3715     ITScope it_scope(this, &cond);
3716     smlald(cond, rdlo, rdhi, rn, rm);
3717   }
Smlald(Register rdlo,Register rdhi,Register rn,Register rm)3718   void Smlald(Register rdlo, Register rdhi, Register rn, Register rm) {
3719     Smlald(al, rdlo, rdhi, rn, rm);
3720   }
3721 
Smlaldx(Condition cond,Register rdlo,Register rdhi,Register rn,Register rm)3722   void Smlaldx(
3723       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
3724     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo));
3725     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi));
3726     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3727     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3728     VIXL_ASSERT(allow_macro_instructions_);
3729     VIXL_ASSERT(OutsideITBlock());
3730     MacroEmissionCheckScope guard(this);
3731     ITScope it_scope(this, &cond);
3732     smlaldx(cond, rdlo, rdhi, rn, rm);
3733   }
Smlaldx(Register rdlo,Register rdhi,Register rn,Register rm)3734   void Smlaldx(Register rdlo, Register rdhi, Register rn, Register rm) {
3735     Smlaldx(al, rdlo, rdhi, rn, rm);
3736   }
3737 
Smlals(Condition cond,Register rdlo,Register rdhi,Register rn,Register rm)3738   void Smlals(
3739       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
3740     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo));
3741     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi));
3742     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3743     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3744     VIXL_ASSERT(allow_macro_instructions_);
3745     VIXL_ASSERT(OutsideITBlock());
3746     MacroEmissionCheckScope guard(this);
3747     ITScope it_scope(this, &cond);
3748     smlals(cond, rdlo, rdhi, rn, rm);
3749   }
Smlals(Register rdlo,Register rdhi,Register rn,Register rm)3750   void Smlals(Register rdlo, Register rdhi, Register rn, Register rm) {
3751     Smlals(al, rdlo, rdhi, rn, rm);
3752   }
3753 
Smlaltb(Condition cond,Register rdlo,Register rdhi,Register rn,Register rm)3754   void Smlaltb(
3755       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
3756     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo));
3757     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi));
3758     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3759     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3760     VIXL_ASSERT(allow_macro_instructions_);
3761     VIXL_ASSERT(OutsideITBlock());
3762     MacroEmissionCheckScope guard(this);
3763     ITScope it_scope(this, &cond);
3764     smlaltb(cond, rdlo, rdhi, rn, rm);
3765   }
Smlaltb(Register rdlo,Register rdhi,Register rn,Register rm)3766   void Smlaltb(Register rdlo, Register rdhi, Register rn, Register rm) {
3767     Smlaltb(al, rdlo, rdhi, rn, rm);
3768   }
3769 
Smlaltt(Condition cond,Register rdlo,Register rdhi,Register rn,Register rm)3770   void Smlaltt(
3771       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
3772     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo));
3773     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi));
3774     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3775     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3776     VIXL_ASSERT(allow_macro_instructions_);
3777     VIXL_ASSERT(OutsideITBlock());
3778     MacroEmissionCheckScope guard(this);
3779     ITScope it_scope(this, &cond);
3780     smlaltt(cond, rdlo, rdhi, rn, rm);
3781   }
Smlaltt(Register rdlo,Register rdhi,Register rn,Register rm)3782   void Smlaltt(Register rdlo, Register rdhi, Register rn, Register rm) {
3783     Smlaltt(al, rdlo, rdhi, rn, rm);
3784   }
3785 
Smlatb(Condition cond,Register rd,Register rn,Register rm,Register ra)3786   void Smlatb(
3787       Condition cond, Register rd, Register rn, Register rm, Register ra) {
3788     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3789     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3790     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3791     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
3792     VIXL_ASSERT(allow_macro_instructions_);
3793     VIXL_ASSERT(OutsideITBlock());
3794     MacroEmissionCheckScope guard(this);
3795     ITScope it_scope(this, &cond);
3796     smlatb(cond, rd, rn, rm, ra);
3797   }
Smlatb(Register rd,Register rn,Register rm,Register ra)3798   void Smlatb(Register rd, Register rn, Register rm, Register ra) {
3799     Smlatb(al, rd, rn, rm, ra);
3800   }
3801 
Smlatt(Condition cond,Register rd,Register rn,Register rm,Register ra)3802   void Smlatt(
3803       Condition cond, Register rd, Register rn, Register rm, Register ra) {
3804     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3805     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3806     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3807     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
3808     VIXL_ASSERT(allow_macro_instructions_);
3809     VIXL_ASSERT(OutsideITBlock());
3810     MacroEmissionCheckScope guard(this);
3811     ITScope it_scope(this, &cond);
3812     smlatt(cond, rd, rn, rm, ra);
3813   }
Smlatt(Register rd,Register rn,Register rm,Register ra)3814   void Smlatt(Register rd, Register rn, Register rm, Register ra) {
3815     Smlatt(al, rd, rn, rm, ra);
3816   }
3817 
Smlawb(Condition cond,Register rd,Register rn,Register rm,Register ra)3818   void Smlawb(
3819       Condition cond, Register rd, Register rn, Register rm, Register ra) {
3820     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3821     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3822     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3823     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
3824     VIXL_ASSERT(allow_macro_instructions_);
3825     VIXL_ASSERT(OutsideITBlock());
3826     MacroEmissionCheckScope guard(this);
3827     ITScope it_scope(this, &cond);
3828     smlawb(cond, rd, rn, rm, ra);
3829   }
Smlawb(Register rd,Register rn,Register rm,Register ra)3830   void Smlawb(Register rd, Register rn, Register rm, Register ra) {
3831     Smlawb(al, rd, rn, rm, ra);
3832   }
3833 
Smlawt(Condition cond,Register rd,Register rn,Register rm,Register ra)3834   void Smlawt(
3835       Condition cond, Register rd, Register rn, Register rm, Register ra) {
3836     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3837     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3838     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3839     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
3840     VIXL_ASSERT(allow_macro_instructions_);
3841     VIXL_ASSERT(OutsideITBlock());
3842     MacroEmissionCheckScope guard(this);
3843     ITScope it_scope(this, &cond);
3844     smlawt(cond, rd, rn, rm, ra);
3845   }
Smlawt(Register rd,Register rn,Register rm,Register ra)3846   void Smlawt(Register rd, Register rn, Register rm, Register ra) {
3847     Smlawt(al, rd, rn, rm, ra);
3848   }
3849 
Smlsd(Condition cond,Register rd,Register rn,Register rm,Register ra)3850   void Smlsd(
3851       Condition cond, Register rd, Register rn, Register rm, Register ra) {
3852     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3853     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3854     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3855     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
3856     VIXL_ASSERT(allow_macro_instructions_);
3857     VIXL_ASSERT(OutsideITBlock());
3858     MacroEmissionCheckScope guard(this);
3859     ITScope it_scope(this, &cond);
3860     smlsd(cond, rd, rn, rm, ra);
3861   }
Smlsd(Register rd,Register rn,Register rm,Register ra)3862   void Smlsd(Register rd, Register rn, Register rm, Register ra) {
3863     Smlsd(al, rd, rn, rm, ra);
3864   }
3865 
Smlsdx(Condition cond,Register rd,Register rn,Register rm,Register ra)3866   void Smlsdx(
3867       Condition cond, Register rd, Register rn, Register rm, Register ra) {
3868     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3869     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3870     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3871     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
3872     VIXL_ASSERT(allow_macro_instructions_);
3873     VIXL_ASSERT(OutsideITBlock());
3874     MacroEmissionCheckScope guard(this);
3875     ITScope it_scope(this, &cond);
3876     smlsdx(cond, rd, rn, rm, ra);
3877   }
Smlsdx(Register rd,Register rn,Register rm,Register ra)3878   void Smlsdx(Register rd, Register rn, Register rm, Register ra) {
3879     Smlsdx(al, rd, rn, rm, ra);
3880   }
3881 
Smlsld(Condition cond,Register rdlo,Register rdhi,Register rn,Register rm)3882   void Smlsld(
3883       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
3884     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo));
3885     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi));
3886     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3887     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3888     VIXL_ASSERT(allow_macro_instructions_);
3889     VIXL_ASSERT(OutsideITBlock());
3890     MacroEmissionCheckScope guard(this);
3891     ITScope it_scope(this, &cond);
3892     smlsld(cond, rdlo, rdhi, rn, rm);
3893   }
Smlsld(Register rdlo,Register rdhi,Register rn,Register rm)3894   void Smlsld(Register rdlo, Register rdhi, Register rn, Register rm) {
3895     Smlsld(al, rdlo, rdhi, rn, rm);
3896   }
3897 
Smlsldx(Condition cond,Register rdlo,Register rdhi,Register rn,Register rm)3898   void Smlsldx(
3899       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
3900     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo));
3901     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi));
3902     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3903     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3904     VIXL_ASSERT(allow_macro_instructions_);
3905     VIXL_ASSERT(OutsideITBlock());
3906     MacroEmissionCheckScope guard(this);
3907     ITScope it_scope(this, &cond);
3908     smlsldx(cond, rdlo, rdhi, rn, rm);
3909   }
Smlsldx(Register rdlo,Register rdhi,Register rn,Register rm)3910   void Smlsldx(Register rdlo, Register rdhi, Register rn, Register rm) {
3911     Smlsldx(al, rdlo, rdhi, rn, rm);
3912   }
3913 
Smmla(Condition cond,Register rd,Register rn,Register rm,Register ra)3914   void Smmla(
3915       Condition cond, Register rd, Register rn, Register rm, Register ra) {
3916     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3917     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3918     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3919     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
3920     VIXL_ASSERT(allow_macro_instructions_);
3921     VIXL_ASSERT(OutsideITBlock());
3922     MacroEmissionCheckScope guard(this);
3923     ITScope it_scope(this, &cond);
3924     smmla(cond, rd, rn, rm, ra);
3925   }
Smmla(Register rd,Register rn,Register rm,Register ra)3926   void Smmla(Register rd, Register rn, Register rm, Register ra) {
3927     Smmla(al, rd, rn, rm, ra);
3928   }
3929 
Smmlar(Condition cond,Register rd,Register rn,Register rm,Register ra)3930   void Smmlar(
3931       Condition cond, Register rd, Register rn, Register rm, Register ra) {
3932     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3933     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3934     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3935     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
3936     VIXL_ASSERT(allow_macro_instructions_);
3937     VIXL_ASSERT(OutsideITBlock());
3938     MacroEmissionCheckScope guard(this);
3939     ITScope it_scope(this, &cond);
3940     smmlar(cond, rd, rn, rm, ra);
3941   }
Smmlar(Register rd,Register rn,Register rm,Register ra)3942   void Smmlar(Register rd, Register rn, Register rm, Register ra) {
3943     Smmlar(al, rd, rn, rm, ra);
3944   }
3945 
Smmls(Condition cond,Register rd,Register rn,Register rm,Register ra)3946   void Smmls(
3947       Condition cond, Register rd, Register rn, Register rm, Register ra) {
3948     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3949     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3950     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3951     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
3952     VIXL_ASSERT(allow_macro_instructions_);
3953     VIXL_ASSERT(OutsideITBlock());
3954     MacroEmissionCheckScope guard(this);
3955     ITScope it_scope(this, &cond);
3956     smmls(cond, rd, rn, rm, ra);
3957   }
Smmls(Register rd,Register rn,Register rm,Register ra)3958   void Smmls(Register rd, Register rn, Register rm, Register ra) {
3959     Smmls(al, rd, rn, rm, ra);
3960   }
3961 
Smmlsr(Condition cond,Register rd,Register rn,Register rm,Register ra)3962   void Smmlsr(
3963       Condition cond, Register rd, Register rn, Register rm, Register ra) {
3964     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3965     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3966     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3967     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
3968     VIXL_ASSERT(allow_macro_instructions_);
3969     VIXL_ASSERT(OutsideITBlock());
3970     MacroEmissionCheckScope guard(this);
3971     ITScope it_scope(this, &cond);
3972     smmlsr(cond, rd, rn, rm, ra);
3973   }
Smmlsr(Register rd,Register rn,Register rm,Register ra)3974   void Smmlsr(Register rd, Register rn, Register rm, Register ra) {
3975     Smmlsr(al, rd, rn, rm, ra);
3976   }
3977 
Smmul(Condition cond,Register rd,Register rn,Register rm)3978   void Smmul(Condition cond, Register rd, Register rn, Register rm) {
3979     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3980     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3981     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3982     VIXL_ASSERT(allow_macro_instructions_);
3983     VIXL_ASSERT(OutsideITBlock());
3984     MacroEmissionCheckScope guard(this);
3985     ITScope it_scope(this, &cond);
3986     smmul(cond, rd, rn, rm);
3987   }
Smmul(Register rd,Register rn,Register rm)3988   void Smmul(Register rd, Register rn, Register rm) { Smmul(al, rd, rn, rm); }
3989 
Smmulr(Condition cond,Register rd,Register rn,Register rm)3990   void Smmulr(Condition cond, Register rd, Register rn, Register rm) {
3991     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3992     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3993     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3994     VIXL_ASSERT(allow_macro_instructions_);
3995     VIXL_ASSERT(OutsideITBlock());
3996     MacroEmissionCheckScope guard(this);
3997     ITScope it_scope(this, &cond);
3998     smmulr(cond, rd, rn, rm);
3999   }
Smmulr(Register rd,Register rn,Register rm)4000   void Smmulr(Register rd, Register rn, Register rm) { Smmulr(al, rd, rn, rm); }
4001 
Smuad(Condition cond,Register rd,Register rn,Register rm)4002   void Smuad(Condition cond, Register rd, Register rn, Register rm) {
4003     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4004     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4005     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4006     VIXL_ASSERT(allow_macro_instructions_);
4007     VIXL_ASSERT(OutsideITBlock());
4008     MacroEmissionCheckScope guard(this);
4009     ITScope it_scope(this, &cond);
4010     smuad(cond, rd, rn, rm);
4011   }
Smuad(Register rd,Register rn,Register rm)4012   void Smuad(Register rd, Register rn, Register rm) { Smuad(al, rd, rn, rm); }
4013 
Smuadx(Condition cond,Register rd,Register rn,Register rm)4014   void Smuadx(Condition cond, Register rd, Register rn, Register rm) {
4015     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4016     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4017     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4018     VIXL_ASSERT(allow_macro_instructions_);
4019     VIXL_ASSERT(OutsideITBlock());
4020     MacroEmissionCheckScope guard(this);
4021     ITScope it_scope(this, &cond);
4022     smuadx(cond, rd, rn, rm);
4023   }
Smuadx(Register rd,Register rn,Register rm)4024   void Smuadx(Register rd, Register rn, Register rm) { Smuadx(al, rd, rn, rm); }
4025 
Smulbb(Condition cond,Register rd,Register rn,Register rm)4026   void Smulbb(Condition cond, Register rd, Register rn, Register rm) {
4027     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4028     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4029     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4030     VIXL_ASSERT(allow_macro_instructions_);
4031     VIXL_ASSERT(OutsideITBlock());
4032     MacroEmissionCheckScope guard(this);
4033     ITScope it_scope(this, &cond);
4034     smulbb(cond, rd, rn, rm);
4035   }
Smulbb(Register rd,Register rn,Register rm)4036   void Smulbb(Register rd, Register rn, Register rm) { Smulbb(al, rd, rn, rm); }
4037 
Smulbt(Condition cond,Register rd,Register rn,Register rm)4038   void Smulbt(Condition cond, Register rd, Register rn, Register rm) {
4039     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4040     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4041     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4042     VIXL_ASSERT(allow_macro_instructions_);
4043     VIXL_ASSERT(OutsideITBlock());
4044     MacroEmissionCheckScope guard(this);
4045     ITScope it_scope(this, &cond);
4046     smulbt(cond, rd, rn, rm);
4047   }
Smulbt(Register rd,Register rn,Register rm)4048   void Smulbt(Register rd, Register rn, Register rm) { Smulbt(al, rd, rn, rm); }
4049 
Smull(Condition cond,Register rdlo,Register rdhi,Register rn,Register rm)4050   void Smull(
4051       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
4052     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo));
4053     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi));
4054     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4055     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4056     VIXL_ASSERT(allow_macro_instructions_);
4057     VIXL_ASSERT(OutsideITBlock());
4058     MacroEmissionCheckScope guard(this);
4059     ITScope it_scope(this, &cond);
4060     smull(cond, rdlo, rdhi, rn, rm);
4061   }
Smull(Register rdlo,Register rdhi,Register rn,Register rm)4062   void Smull(Register rdlo, Register rdhi, Register rn, Register rm) {
4063     Smull(al, rdlo, rdhi, rn, rm);
4064   }
Smull(FlagsUpdate flags,Condition cond,Register rdlo,Register rdhi,Register rn,Register rm)4065   void Smull(FlagsUpdate flags,
4066              Condition cond,
4067              Register rdlo,
4068              Register rdhi,
4069              Register rn,
4070              Register rm) {
4071     switch (flags) {
4072       case LeaveFlags:
4073         Smull(cond, rdlo, rdhi, rn, rm);
4074         break;
4075       case SetFlags:
4076         Smulls(cond, rdlo, rdhi, rn, rm);
4077         break;
4078       case DontCare:
4079         Smull(cond, rdlo, rdhi, rn, rm);
4080         break;
4081     }
4082   }
Smull(FlagsUpdate flags,Register rdlo,Register rdhi,Register rn,Register rm)4083   void Smull(FlagsUpdate flags,
4084              Register rdlo,
4085              Register rdhi,
4086              Register rn,
4087              Register rm) {
4088     Smull(flags, al, rdlo, rdhi, rn, rm);
4089   }
4090 
Smulls(Condition cond,Register rdlo,Register rdhi,Register rn,Register rm)4091   void Smulls(
4092       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
4093     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo));
4094     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi));
4095     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4096     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4097     VIXL_ASSERT(allow_macro_instructions_);
4098     VIXL_ASSERT(OutsideITBlock());
4099     MacroEmissionCheckScope guard(this);
4100     ITScope it_scope(this, &cond);
4101     smulls(cond, rdlo, rdhi, rn, rm);
4102   }
Smulls(Register rdlo,Register rdhi,Register rn,Register rm)4103   void Smulls(Register rdlo, Register rdhi, Register rn, Register rm) {
4104     Smulls(al, rdlo, rdhi, rn, rm);
4105   }
4106 
Smultb(Condition cond,Register rd,Register rn,Register rm)4107   void Smultb(Condition cond, Register rd, Register rn, Register rm) {
4108     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4109     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4110     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4111     VIXL_ASSERT(allow_macro_instructions_);
4112     VIXL_ASSERT(OutsideITBlock());
4113     MacroEmissionCheckScope guard(this);
4114     ITScope it_scope(this, &cond);
4115     smultb(cond, rd, rn, rm);
4116   }
Smultb(Register rd,Register rn,Register rm)4117   void Smultb(Register rd, Register rn, Register rm) { Smultb(al, rd, rn, rm); }
4118 
Smultt(Condition cond,Register rd,Register rn,Register rm)4119   void Smultt(Condition cond, Register rd, Register rn, Register rm) {
4120     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4121     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4122     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4123     VIXL_ASSERT(allow_macro_instructions_);
4124     VIXL_ASSERT(OutsideITBlock());
4125     MacroEmissionCheckScope guard(this);
4126     ITScope it_scope(this, &cond);
4127     smultt(cond, rd, rn, rm);
4128   }
Smultt(Register rd,Register rn,Register rm)4129   void Smultt(Register rd, Register rn, Register rm) { Smultt(al, rd, rn, rm); }
4130 
Smulwb(Condition cond,Register rd,Register rn,Register rm)4131   void Smulwb(Condition cond, Register rd, Register rn, Register rm) {
4132     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4133     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4134     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4135     VIXL_ASSERT(allow_macro_instructions_);
4136     VIXL_ASSERT(OutsideITBlock());
4137     MacroEmissionCheckScope guard(this);
4138     ITScope it_scope(this, &cond);
4139     smulwb(cond, rd, rn, rm);
4140   }
Smulwb(Register rd,Register rn,Register rm)4141   void Smulwb(Register rd, Register rn, Register rm) { Smulwb(al, rd, rn, rm); }
4142 
Smulwt(Condition cond,Register rd,Register rn,Register rm)4143   void Smulwt(Condition cond, Register rd, Register rn, Register rm) {
4144     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4145     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4146     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4147     VIXL_ASSERT(allow_macro_instructions_);
4148     VIXL_ASSERT(OutsideITBlock());
4149     MacroEmissionCheckScope guard(this);
4150     ITScope it_scope(this, &cond);
4151     smulwt(cond, rd, rn, rm);
4152   }
Smulwt(Register rd,Register rn,Register rm)4153   void Smulwt(Register rd, Register rn, Register rm) { Smulwt(al, rd, rn, rm); }
4154 
Smusd(Condition cond,Register rd,Register rn,Register rm)4155   void Smusd(Condition cond, Register rd, Register rn, Register rm) {
4156     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4157     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4158     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4159     VIXL_ASSERT(allow_macro_instructions_);
4160     VIXL_ASSERT(OutsideITBlock());
4161     MacroEmissionCheckScope guard(this);
4162     ITScope it_scope(this, &cond);
4163     smusd(cond, rd, rn, rm);
4164   }
Smusd(Register rd,Register rn,Register rm)4165   void Smusd(Register rd, Register rn, Register rm) { Smusd(al, rd, rn, rm); }
4166 
Smusdx(Condition cond,Register rd,Register rn,Register rm)4167   void Smusdx(Condition cond, Register rd, Register rn, Register rm) {
4168     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4169     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4170     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4171     VIXL_ASSERT(allow_macro_instructions_);
4172     VIXL_ASSERT(OutsideITBlock());
4173     MacroEmissionCheckScope guard(this);
4174     ITScope it_scope(this, &cond);
4175     smusdx(cond, rd, rn, rm);
4176   }
Smusdx(Register rd,Register rn,Register rm)4177   void Smusdx(Register rd, Register rn, Register rm) { Smusdx(al, rd, rn, rm); }
4178 
Ssat(Condition cond,Register rd,uint32_t imm,const Operand & operand)4179   void Ssat(Condition cond, Register rd, uint32_t imm, const Operand& operand) {
4180     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4181     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4182     VIXL_ASSERT(allow_macro_instructions_);
4183     VIXL_ASSERT(OutsideITBlock());
4184     MacroEmissionCheckScope guard(this);
4185     ITScope it_scope(this, &cond);
4186     ssat(cond, rd, imm, operand);
4187   }
Ssat(Register rd,uint32_t imm,const Operand & operand)4188   void Ssat(Register rd, uint32_t imm, const Operand& operand) {
4189     Ssat(al, rd, imm, operand);
4190   }
4191 
Ssat16(Condition cond,Register rd,uint32_t imm,Register rn)4192   void Ssat16(Condition cond, Register rd, uint32_t imm, Register rn) {
4193     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4194     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4195     VIXL_ASSERT(allow_macro_instructions_);
4196     VIXL_ASSERT(OutsideITBlock());
4197     MacroEmissionCheckScope guard(this);
4198     ITScope it_scope(this, &cond);
4199     ssat16(cond, rd, imm, rn);
4200   }
Ssat16(Register rd,uint32_t imm,Register rn)4201   void Ssat16(Register rd, uint32_t imm, Register rn) {
4202     Ssat16(al, rd, imm, rn);
4203   }
4204 
Ssax(Condition cond,Register rd,Register rn,Register rm)4205   void Ssax(Condition cond, Register rd, Register rn, Register rm) {
4206     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4207     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4208     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4209     VIXL_ASSERT(allow_macro_instructions_);
4210     VIXL_ASSERT(OutsideITBlock());
4211     MacroEmissionCheckScope guard(this);
4212     ITScope it_scope(this, &cond);
4213     ssax(cond, rd, rn, rm);
4214   }
Ssax(Register rd,Register rn,Register rm)4215   void Ssax(Register rd, Register rn, Register rm) { Ssax(al, rd, rn, rm); }
4216 
Ssub16(Condition cond,Register rd,Register rn,Register rm)4217   void Ssub16(Condition cond, Register rd, Register rn, Register rm) {
4218     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4219     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4220     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4221     VIXL_ASSERT(allow_macro_instructions_);
4222     VIXL_ASSERT(OutsideITBlock());
4223     MacroEmissionCheckScope guard(this);
4224     ITScope it_scope(this, &cond);
4225     ssub16(cond, rd, rn, rm);
4226   }
Ssub16(Register rd,Register rn,Register rm)4227   void Ssub16(Register rd, Register rn, Register rm) { Ssub16(al, rd, rn, rm); }
4228 
Ssub8(Condition cond,Register rd,Register rn,Register rm)4229   void Ssub8(Condition cond, Register rd, Register rn, Register rm) {
4230     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4231     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4232     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4233     VIXL_ASSERT(allow_macro_instructions_);
4234     VIXL_ASSERT(OutsideITBlock());
4235     MacroEmissionCheckScope guard(this);
4236     ITScope it_scope(this, &cond);
4237     ssub8(cond, rd, rn, rm);
4238   }
Ssub8(Register rd,Register rn,Register rm)4239   void Ssub8(Register rd, Register rn, Register rm) { Ssub8(al, rd, rn, rm); }
4240 
Stl(Condition cond,Register rt,const MemOperand & operand)4241   void Stl(Condition cond, Register rt, const MemOperand& operand) {
4242     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
4243     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4244     VIXL_ASSERT(allow_macro_instructions_);
4245     VIXL_ASSERT(OutsideITBlock());
4246     MacroEmissionCheckScope guard(this);
4247     ITScope it_scope(this, &cond);
4248     stl(cond, rt, operand);
4249   }
Stl(Register rt,const MemOperand & operand)4250   void Stl(Register rt, const MemOperand& operand) { Stl(al, rt, operand); }
4251 
Stlb(Condition cond,Register rt,const MemOperand & operand)4252   void Stlb(Condition cond, Register rt, const MemOperand& operand) {
4253     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
4254     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4255     VIXL_ASSERT(allow_macro_instructions_);
4256     VIXL_ASSERT(OutsideITBlock());
4257     MacroEmissionCheckScope guard(this);
4258     ITScope it_scope(this, &cond);
4259     stlb(cond, rt, operand);
4260   }
Stlb(Register rt,const MemOperand & operand)4261   void Stlb(Register rt, const MemOperand& operand) { Stlb(al, rt, operand); }
4262 
Stlex(Condition cond,Register rd,Register rt,const MemOperand & operand)4263   void Stlex(Condition cond,
4264              Register rd,
4265              Register rt,
4266              const MemOperand& operand) {
4267     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4268     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
4269     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4270     VIXL_ASSERT(allow_macro_instructions_);
4271     VIXL_ASSERT(OutsideITBlock());
4272     MacroEmissionCheckScope guard(this);
4273     ITScope it_scope(this, &cond);
4274     stlex(cond, rd, rt, operand);
4275   }
Stlex(Register rd,Register rt,const MemOperand & operand)4276   void Stlex(Register rd, Register rt, const MemOperand& operand) {
4277     Stlex(al, rd, rt, operand);
4278   }
4279 
Stlexb(Condition cond,Register rd,Register rt,const MemOperand & operand)4280   void Stlexb(Condition cond,
4281               Register rd,
4282               Register rt,
4283               const MemOperand& operand) {
4284     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4285     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
4286     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4287     VIXL_ASSERT(allow_macro_instructions_);
4288     VIXL_ASSERT(OutsideITBlock());
4289     MacroEmissionCheckScope guard(this);
4290     ITScope it_scope(this, &cond);
4291     stlexb(cond, rd, rt, operand);
4292   }
Stlexb(Register rd,Register rt,const MemOperand & operand)4293   void Stlexb(Register rd, Register rt, const MemOperand& operand) {
4294     Stlexb(al, rd, rt, operand);
4295   }
4296 
Stlexd(Condition cond,Register rd,Register rt,Register rt2,const MemOperand & operand)4297   void Stlexd(Condition cond,
4298               Register rd,
4299               Register rt,
4300               Register rt2,
4301               const MemOperand& operand) {
4302     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4303     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
4304     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt2));
4305     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4306     VIXL_ASSERT(allow_macro_instructions_);
4307     VIXL_ASSERT(OutsideITBlock());
4308     MacroEmissionCheckScope guard(this);
4309     ITScope it_scope(this, &cond);
4310     stlexd(cond, rd, rt, rt2, operand);
4311   }
Stlexd(Register rd,Register rt,Register rt2,const MemOperand & operand)4312   void Stlexd(Register rd,
4313               Register rt,
4314               Register rt2,
4315               const MemOperand& operand) {
4316     Stlexd(al, rd, rt, rt2, operand);
4317   }
4318 
Stlexh(Condition cond,Register rd,Register rt,const MemOperand & operand)4319   void Stlexh(Condition cond,
4320               Register rd,
4321               Register rt,
4322               const MemOperand& operand) {
4323     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4324     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
4325     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4326     VIXL_ASSERT(allow_macro_instructions_);
4327     VIXL_ASSERT(OutsideITBlock());
4328     MacroEmissionCheckScope guard(this);
4329     ITScope it_scope(this, &cond);
4330     stlexh(cond, rd, rt, operand);
4331   }
Stlexh(Register rd,Register rt,const MemOperand & operand)4332   void Stlexh(Register rd, Register rt, const MemOperand& operand) {
4333     Stlexh(al, rd, rt, operand);
4334   }
4335 
Stlh(Condition cond,Register rt,const MemOperand & operand)4336   void Stlh(Condition cond, Register rt, const MemOperand& operand) {
4337     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
4338     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4339     VIXL_ASSERT(allow_macro_instructions_);
4340     VIXL_ASSERT(OutsideITBlock());
4341     MacroEmissionCheckScope guard(this);
4342     ITScope it_scope(this, &cond);
4343     stlh(cond, rt, operand);
4344   }
Stlh(Register rt,const MemOperand & operand)4345   void Stlh(Register rt, const MemOperand& operand) { Stlh(al, rt, operand); }
4346 
Stm(Condition cond,Register rn,WriteBack write_back,RegisterList registers)4347   void Stm(Condition cond,
4348            Register rn,
4349            WriteBack write_back,
4350            RegisterList registers) {
4351     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4352     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
4353     VIXL_ASSERT(allow_macro_instructions_);
4354     VIXL_ASSERT(OutsideITBlock());
4355     MacroEmissionCheckScope guard(this);
4356     ITScope it_scope(this, &cond);
4357     stm(cond, rn, write_back, registers);
4358   }
Stm(Register rn,WriteBack write_back,RegisterList registers)4359   void Stm(Register rn, WriteBack write_back, RegisterList registers) {
4360     Stm(al, rn, write_back, registers);
4361   }
4362 
Stmda(Condition cond,Register rn,WriteBack write_back,RegisterList registers)4363   void Stmda(Condition cond,
4364              Register rn,
4365              WriteBack write_back,
4366              RegisterList registers) {
4367     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4368     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
4369     VIXL_ASSERT(allow_macro_instructions_);
4370     VIXL_ASSERT(OutsideITBlock());
4371     MacroEmissionCheckScope guard(this);
4372     ITScope it_scope(this, &cond);
4373     stmda(cond, rn, write_back, registers);
4374   }
Stmda(Register rn,WriteBack write_back,RegisterList registers)4375   void Stmda(Register rn, WriteBack write_back, RegisterList registers) {
4376     Stmda(al, rn, write_back, registers);
4377   }
4378 
Stmdb(Condition cond,Register rn,WriteBack write_back,RegisterList registers)4379   void Stmdb(Condition cond,
4380              Register rn,
4381              WriteBack write_back,
4382              RegisterList registers) {
4383     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4384     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
4385     VIXL_ASSERT(allow_macro_instructions_);
4386     VIXL_ASSERT(OutsideITBlock());
4387     MacroEmissionCheckScope guard(this);
4388     ITScope it_scope(this, &cond);
4389     stmdb(cond, rn, write_back, registers);
4390   }
Stmdb(Register rn,WriteBack write_back,RegisterList registers)4391   void Stmdb(Register rn, WriteBack write_back, RegisterList registers) {
4392     Stmdb(al, rn, write_back, registers);
4393   }
4394 
Stmea(Condition cond,Register rn,WriteBack write_back,RegisterList registers)4395   void Stmea(Condition cond,
4396              Register rn,
4397              WriteBack write_back,
4398              RegisterList registers) {
4399     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4400     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
4401     VIXL_ASSERT(allow_macro_instructions_);
4402     VIXL_ASSERT(OutsideITBlock());
4403     MacroEmissionCheckScope guard(this);
4404     ITScope it_scope(this, &cond);
4405     stmea(cond, rn, write_back, registers);
4406   }
Stmea(Register rn,WriteBack write_back,RegisterList registers)4407   void Stmea(Register rn, WriteBack write_back, RegisterList registers) {
4408     Stmea(al, rn, write_back, registers);
4409   }
4410 
Stmed(Condition cond,Register rn,WriteBack write_back,RegisterList registers)4411   void Stmed(Condition cond,
4412              Register rn,
4413              WriteBack write_back,
4414              RegisterList registers) {
4415     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4416     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
4417     VIXL_ASSERT(allow_macro_instructions_);
4418     VIXL_ASSERT(OutsideITBlock());
4419     MacroEmissionCheckScope guard(this);
4420     ITScope it_scope(this, &cond);
4421     stmed(cond, rn, write_back, registers);
4422   }
Stmed(Register rn,WriteBack write_back,RegisterList registers)4423   void Stmed(Register rn, WriteBack write_back, RegisterList registers) {
4424     Stmed(al, rn, write_back, registers);
4425   }
4426 
Stmfa(Condition cond,Register rn,WriteBack write_back,RegisterList registers)4427   void Stmfa(Condition cond,
4428              Register rn,
4429              WriteBack write_back,
4430              RegisterList registers) {
4431     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4432     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
4433     VIXL_ASSERT(allow_macro_instructions_);
4434     VIXL_ASSERT(OutsideITBlock());
4435     MacroEmissionCheckScope guard(this);
4436     ITScope it_scope(this, &cond);
4437     stmfa(cond, rn, write_back, registers);
4438   }
Stmfa(Register rn,WriteBack write_back,RegisterList registers)4439   void Stmfa(Register rn, WriteBack write_back, RegisterList registers) {
4440     Stmfa(al, rn, write_back, registers);
4441   }
4442 
Stmfd(Condition cond,Register rn,WriteBack write_back,RegisterList registers)4443   void Stmfd(Condition cond,
4444              Register rn,
4445              WriteBack write_back,
4446              RegisterList registers) {
4447     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4448     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
4449     VIXL_ASSERT(allow_macro_instructions_);
4450     VIXL_ASSERT(OutsideITBlock());
4451     MacroEmissionCheckScope guard(this);
4452     ITScope it_scope(this, &cond);
4453     stmfd(cond, rn, write_back, registers);
4454   }
Stmfd(Register rn,WriteBack write_back,RegisterList registers)4455   void Stmfd(Register rn, WriteBack write_back, RegisterList registers) {
4456     Stmfd(al, rn, write_back, registers);
4457   }
4458 
Stmib(Condition cond,Register rn,WriteBack write_back,RegisterList registers)4459   void Stmib(Condition cond,
4460              Register rn,
4461              WriteBack write_back,
4462              RegisterList registers) {
4463     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4464     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
4465     VIXL_ASSERT(allow_macro_instructions_);
4466     VIXL_ASSERT(OutsideITBlock());
4467     MacroEmissionCheckScope guard(this);
4468     ITScope it_scope(this, &cond);
4469     stmib(cond, rn, write_back, registers);
4470   }
Stmib(Register rn,WriteBack write_back,RegisterList registers)4471   void Stmib(Register rn, WriteBack write_back, RegisterList registers) {
4472     Stmib(al, rn, write_back, registers);
4473   }
4474 
Str(Condition cond,Register rt,const MemOperand & operand)4475   void Str(Condition cond, Register rt, const MemOperand& operand) {
4476     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
4477     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4478     VIXL_ASSERT(allow_macro_instructions_);
4479     VIXL_ASSERT(OutsideITBlock());
4480     MacroEmissionCheckScope guard(this);
4481     bool can_use_it =
4482         // STR{<c>}{<q>} <Rt>, [<Rn> {, #{+}<imm>}] ; T1
4483         (operand.IsImmediate() && rt.IsLow() &&
4484          operand.GetBaseRegister().IsLow() &&
4485          operand.IsOffsetImmediateWithinRange(0, 124, 4) &&
4486          (operand.GetAddrMode() == Offset)) ||
4487         // STR{<c>}{<q>} <Rt>, [SP{, #{+}<imm>}] ; T2
4488         (operand.IsImmediate() && rt.IsLow() &&
4489          operand.GetBaseRegister().IsSP() &&
4490          operand.IsOffsetImmediateWithinRange(0, 1020, 4) &&
4491          (operand.GetAddrMode() == Offset)) ||
4492         // STR{<c>}{<q>} <Rt>, [<Rn>, {+}<Rm>] ; T1
4493         (operand.IsPlainRegister() && rt.IsLow() &&
4494          operand.GetBaseRegister().IsLow() &&
4495          operand.GetOffsetRegister().IsLow() && operand.GetSign().IsPlus() &&
4496          (operand.GetAddrMode() == Offset));
4497     ITScope it_scope(this, &cond, can_use_it);
4498     str(cond, rt, operand);
4499   }
Str(Register rt,const MemOperand & operand)4500   void Str(Register rt, const MemOperand& operand) { Str(al, rt, operand); }
4501 
Strb(Condition cond,Register rt,const MemOperand & operand)4502   void Strb(Condition cond, Register rt, const MemOperand& operand) {
4503     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
4504     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4505     VIXL_ASSERT(allow_macro_instructions_);
4506     VIXL_ASSERT(OutsideITBlock());
4507     MacroEmissionCheckScope guard(this);
4508     bool can_use_it =
4509         // STRB{<c>}{<q>} <Rt>, [<Rn> {, #{+}<imm>}] ; T1
4510         (operand.IsImmediate() && rt.IsLow() &&
4511          operand.GetBaseRegister().IsLow() &&
4512          operand.IsOffsetImmediateWithinRange(0, 31) &&
4513          (operand.GetAddrMode() == Offset)) ||
4514         // STRB{<c>}{<q>} <Rt>, [<Rn>, {+}<Rm>] ; T1
4515         (operand.IsPlainRegister() && rt.IsLow() &&
4516          operand.GetBaseRegister().IsLow() &&
4517          operand.GetOffsetRegister().IsLow() && operand.GetSign().IsPlus() &&
4518          (operand.GetAddrMode() == Offset));
4519     ITScope it_scope(this, &cond, can_use_it);
4520     strb(cond, rt, operand);
4521   }
Strb(Register rt,const MemOperand & operand)4522   void Strb(Register rt, const MemOperand& operand) { Strb(al, rt, operand); }
4523 
Strd(Condition cond,Register rt,Register rt2,const MemOperand & operand)4524   void Strd(Condition cond,
4525             Register rt,
4526             Register rt2,
4527             const MemOperand& operand) {
4528     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
4529     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt2));
4530     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4531     VIXL_ASSERT(allow_macro_instructions_);
4532     VIXL_ASSERT(OutsideITBlock());
4533     MacroEmissionCheckScope guard(this);
4534     ITScope it_scope(this, &cond);
4535     strd(cond, rt, rt2, operand);
4536   }
Strd(Register rt,Register rt2,const MemOperand & operand)4537   void Strd(Register rt, Register rt2, const MemOperand& operand) {
4538     Strd(al, rt, rt2, operand);
4539   }
4540 
Strex(Condition cond,Register rd,Register rt,const MemOperand & operand)4541   void Strex(Condition cond,
4542              Register rd,
4543              Register rt,
4544              const MemOperand& operand) {
4545     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4546     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
4547     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4548     VIXL_ASSERT(allow_macro_instructions_);
4549     VIXL_ASSERT(OutsideITBlock());
4550     MacroEmissionCheckScope guard(this);
4551     ITScope it_scope(this, &cond);
4552     strex(cond, rd, rt, operand);
4553   }
Strex(Register rd,Register rt,const MemOperand & operand)4554   void Strex(Register rd, Register rt, const MemOperand& operand) {
4555     Strex(al, rd, rt, operand);
4556   }
4557 
Strexb(Condition cond,Register rd,Register rt,const MemOperand & operand)4558   void Strexb(Condition cond,
4559               Register rd,
4560               Register rt,
4561               const MemOperand& operand) {
4562     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4563     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
4564     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4565     VIXL_ASSERT(allow_macro_instructions_);
4566     VIXL_ASSERT(OutsideITBlock());
4567     MacroEmissionCheckScope guard(this);
4568     ITScope it_scope(this, &cond);
4569     strexb(cond, rd, rt, operand);
4570   }
Strexb(Register rd,Register rt,const MemOperand & operand)4571   void Strexb(Register rd, Register rt, const MemOperand& operand) {
4572     Strexb(al, rd, rt, operand);
4573   }
4574 
Strexd(Condition cond,Register rd,Register rt,Register rt2,const MemOperand & operand)4575   void Strexd(Condition cond,
4576               Register rd,
4577               Register rt,
4578               Register rt2,
4579               const MemOperand& operand) {
4580     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4581     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
4582     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt2));
4583     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4584     VIXL_ASSERT(allow_macro_instructions_);
4585     VIXL_ASSERT(OutsideITBlock());
4586     MacroEmissionCheckScope guard(this);
4587     ITScope it_scope(this, &cond);
4588     strexd(cond, rd, rt, rt2, operand);
4589   }
Strexd(Register rd,Register rt,Register rt2,const MemOperand & operand)4590   void Strexd(Register rd,
4591               Register rt,
4592               Register rt2,
4593               const MemOperand& operand) {
4594     Strexd(al, rd, rt, rt2, operand);
4595   }
4596 
Strexh(Condition cond,Register rd,Register rt,const MemOperand & operand)4597   void Strexh(Condition cond,
4598               Register rd,
4599               Register rt,
4600               const MemOperand& operand) {
4601     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4602     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
4603     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4604     VIXL_ASSERT(allow_macro_instructions_);
4605     VIXL_ASSERT(OutsideITBlock());
4606     MacroEmissionCheckScope guard(this);
4607     ITScope it_scope(this, &cond);
4608     strexh(cond, rd, rt, operand);
4609   }
Strexh(Register rd,Register rt,const MemOperand & operand)4610   void Strexh(Register rd, Register rt, const MemOperand& operand) {
4611     Strexh(al, rd, rt, operand);
4612   }
4613 
Strh(Condition cond,Register rt,const MemOperand & operand)4614   void Strh(Condition cond, Register rt, const MemOperand& operand) {
4615     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
4616     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4617     VIXL_ASSERT(allow_macro_instructions_);
4618     VIXL_ASSERT(OutsideITBlock());
4619     MacroEmissionCheckScope guard(this);
4620     bool can_use_it =
4621         // STRH{<c>}{<q>} <Rt>, [<Rn> {, #{+}<imm>}] ; T1
4622         (operand.IsImmediate() && rt.IsLow() &&
4623          operand.GetBaseRegister().IsLow() &&
4624          operand.IsOffsetImmediateWithinRange(0, 62, 2) &&
4625          (operand.GetAddrMode() == Offset)) ||
4626         // STRH{<c>}{<q>} <Rt>, [<Rn>, {+}<Rm>] ; T1
4627         (operand.IsPlainRegister() && rt.IsLow() &&
4628          operand.GetBaseRegister().IsLow() &&
4629          operand.GetOffsetRegister().IsLow() && operand.GetSign().IsPlus() &&
4630          (operand.GetAddrMode() == Offset));
4631     ITScope it_scope(this, &cond, can_use_it);
4632     strh(cond, rt, operand);
4633   }
Strh(Register rt,const MemOperand & operand)4634   void Strh(Register rt, const MemOperand& operand) { Strh(al, rt, operand); }
4635 
Sub(Condition cond,Register rd,Register rn,const Operand & operand)4636   void Sub(Condition cond, Register rd, Register rn, const Operand& operand) {
4637     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4638     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4639     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4640     VIXL_ASSERT(allow_macro_instructions_);
4641     VIXL_ASSERT(OutsideITBlock());
4642     MacroEmissionCheckScope guard(this);
4643     if (cond.Is(al) && rd.Is(rn) && operand.IsImmediate()) {
4644       uint32_t immediate = operand.GetImmediate();
4645       if (immediate == 0) {
4646         return;
4647       }
4648     }
4649     bool can_use_it =
4650         // SUB<c>{<q>} <Rd>, <Rn>, #<imm3> ; T1
4651         (operand.IsImmediate() && (operand.GetImmediate() <= 7) && rn.IsLow() &&
4652          rd.IsLow()) ||
4653         // SUB<c>{<q>} {<Rdn>,} <Rdn>, #<imm8> ; T2
4654         (operand.IsImmediate() && (operand.GetImmediate() <= 255) &&
4655          rd.IsLow() && rn.Is(rd)) ||
4656         // SUB<c>{<q>} <Rd>, <Rn>, <Rm>
4657         (operand.IsPlainRegister() && rd.IsLow() && rn.IsLow() &&
4658          operand.GetBaseRegister().IsLow());
4659     ITScope it_scope(this, &cond, can_use_it);
4660     sub(cond, rd, rn, operand);
4661   }
Sub(Register rd,Register rn,const Operand & operand)4662   void Sub(Register rd, Register rn, const Operand& operand) {
4663     Sub(al, rd, rn, operand);
4664   }
Sub(FlagsUpdate flags,Condition cond,Register rd,Register rn,const Operand & operand)4665   void Sub(FlagsUpdate flags,
4666            Condition cond,
4667            Register rd,
4668            Register rn,
4669            const Operand& operand) {
4670     switch (flags) {
4671       case LeaveFlags:
4672         Sub(cond, rd, rn, operand);
4673         break;
4674       case SetFlags:
4675         Subs(cond, rd, rn, operand);
4676         break;
4677       case DontCare:
4678         bool setflags_is_smaller =
4679             IsUsingT32() && cond.Is(al) &&
4680             ((operand.IsPlainRegister() && rd.IsLow() && rn.IsLow() &&
4681               operand.GetBaseRegister().IsLow()) ||
4682              (operand.IsImmediate() &&
4683               ((rd.IsLow() && rn.IsLow() && (operand.GetImmediate() < 8)) ||
4684                (rd.IsLow() && rn.Is(rd) && (operand.GetImmediate() < 256)))));
4685         if (setflags_is_smaller) {
4686           Subs(cond, rd, rn, operand);
4687         } else {
4688           bool changed_op_is_smaller =
4689               operand.IsImmediate() && (operand.GetSignedImmediate() < 0) &&
4690               ((rd.IsLow() && rn.IsLow() &&
4691                 (operand.GetSignedImmediate() >= -7)) ||
4692                (rd.IsLow() && rn.Is(rd) &&
4693                 (operand.GetSignedImmediate() >= -255)));
4694           if (changed_op_is_smaller) {
4695             Adds(cond, rd, rn, -operand.GetSignedImmediate());
4696           } else {
4697             Sub(cond, rd, rn, operand);
4698           }
4699         }
4700         break;
4701     }
4702   }
Sub(FlagsUpdate flags,Register rd,Register rn,const Operand & operand)4703   void Sub(FlagsUpdate flags,
4704            Register rd,
4705            Register rn,
4706            const Operand& operand) {
4707     Sub(flags, al, rd, rn, operand);
4708   }
4709 
Subs(Condition cond,Register rd,Register rn,const Operand & operand)4710   void Subs(Condition cond, Register rd, Register rn, const Operand& operand) {
4711     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4712     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4713     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4714     VIXL_ASSERT(allow_macro_instructions_);
4715     VIXL_ASSERT(OutsideITBlock());
4716     MacroEmissionCheckScope guard(this);
4717     ITScope it_scope(this, &cond);
4718     subs(cond, rd, rn, operand);
4719   }
Subs(Register rd,Register rn,const Operand & operand)4720   void Subs(Register rd, Register rn, const Operand& operand) {
4721     Subs(al, rd, rn, operand);
4722   }
4723 
Svc(Condition cond,uint32_t imm)4724   void Svc(Condition cond, uint32_t imm) {
4725     VIXL_ASSERT(allow_macro_instructions_);
4726     VIXL_ASSERT(OutsideITBlock());
4727     MacroEmissionCheckScope guard(this);
4728     ITScope it_scope(this, &cond);
4729     svc(cond, imm);
4730   }
Svc(uint32_t imm)4731   void Svc(uint32_t imm) { Svc(al, imm); }
4732 
Sxtab(Condition cond,Register rd,Register rn,const Operand & operand)4733   void Sxtab(Condition cond, Register rd, Register rn, const Operand& operand) {
4734     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4735     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4736     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4737     VIXL_ASSERT(allow_macro_instructions_);
4738     VIXL_ASSERT(OutsideITBlock());
4739     MacroEmissionCheckScope guard(this);
4740     ITScope it_scope(this, &cond);
4741     sxtab(cond, rd, rn, operand);
4742   }
Sxtab(Register rd,Register rn,const Operand & operand)4743   void Sxtab(Register rd, Register rn, const Operand& operand) {
4744     Sxtab(al, rd, rn, operand);
4745   }
4746 
Sxtab16(Condition cond,Register rd,Register rn,const Operand & operand)4747   void Sxtab16(Condition cond,
4748                Register rd,
4749                Register rn,
4750                const Operand& operand) {
4751     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4752     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4753     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4754     VIXL_ASSERT(allow_macro_instructions_);
4755     VIXL_ASSERT(OutsideITBlock());
4756     MacroEmissionCheckScope guard(this);
4757     ITScope it_scope(this, &cond);
4758     sxtab16(cond, rd, rn, operand);
4759   }
Sxtab16(Register rd,Register rn,const Operand & operand)4760   void Sxtab16(Register rd, Register rn, const Operand& operand) {
4761     Sxtab16(al, rd, rn, operand);
4762   }
4763 
Sxtah(Condition cond,Register rd,Register rn,const Operand & operand)4764   void Sxtah(Condition cond, Register rd, Register rn, const Operand& operand) {
4765     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4766     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4767     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4768     VIXL_ASSERT(allow_macro_instructions_);
4769     VIXL_ASSERT(OutsideITBlock());
4770     MacroEmissionCheckScope guard(this);
4771     ITScope it_scope(this, &cond);
4772     sxtah(cond, rd, rn, operand);
4773   }
Sxtah(Register rd,Register rn,const Operand & operand)4774   void Sxtah(Register rd, Register rn, const Operand& operand) {
4775     Sxtah(al, rd, rn, operand);
4776   }
4777 
Sxtb(Condition cond,Register rd,const Operand & operand)4778   void Sxtb(Condition cond, Register rd, const Operand& operand) {
4779     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4780     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4781     VIXL_ASSERT(allow_macro_instructions_);
4782     VIXL_ASSERT(OutsideITBlock());
4783     MacroEmissionCheckScope guard(this);
4784     ITScope it_scope(this, &cond);
4785     sxtb(cond, rd, operand);
4786   }
Sxtb(Register rd,const Operand & operand)4787   void Sxtb(Register rd, const Operand& operand) { Sxtb(al, rd, operand); }
4788 
Sxtb16(Condition cond,Register rd,const Operand & operand)4789   void Sxtb16(Condition cond, Register rd, const Operand& operand) {
4790     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4791     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4792     VIXL_ASSERT(allow_macro_instructions_);
4793     VIXL_ASSERT(OutsideITBlock());
4794     MacroEmissionCheckScope guard(this);
4795     ITScope it_scope(this, &cond);
4796     sxtb16(cond, rd, operand);
4797   }
Sxtb16(Register rd,const Operand & operand)4798   void Sxtb16(Register rd, const Operand& operand) { Sxtb16(al, rd, operand); }
4799 
Sxth(Condition cond,Register rd,const Operand & operand)4800   void Sxth(Condition cond, Register rd, const Operand& operand) {
4801     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4802     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4803     VIXL_ASSERT(allow_macro_instructions_);
4804     VIXL_ASSERT(OutsideITBlock());
4805     MacroEmissionCheckScope guard(this);
4806     ITScope it_scope(this, &cond);
4807     sxth(cond, rd, operand);
4808   }
Sxth(Register rd,const Operand & operand)4809   void Sxth(Register rd, const Operand& operand) { Sxth(al, rd, operand); }
4810 
Teq(Condition cond,Register rn,const Operand & operand)4811   void Teq(Condition cond, Register rn, const Operand& operand) {
4812     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4813     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4814     VIXL_ASSERT(allow_macro_instructions_);
4815     VIXL_ASSERT(OutsideITBlock());
4816     MacroEmissionCheckScope guard(this);
4817     ITScope it_scope(this, &cond);
4818     teq(cond, rn, operand);
4819   }
Teq(Register rn,const Operand & operand)4820   void Teq(Register rn, const Operand& operand) { Teq(al, rn, operand); }
4821 
Tst(Condition cond,Register rn,const Operand & operand)4822   void Tst(Condition cond, Register rn, const Operand& operand) {
4823     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4824     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4825     VIXL_ASSERT(allow_macro_instructions_);
4826     VIXL_ASSERT(OutsideITBlock());
4827     MacroEmissionCheckScope guard(this);
4828     bool can_use_it =
4829         // TST{<c>}{<q>} <Rn>, <Rm> ; T1
4830         operand.IsPlainRegister() && rn.IsLow() &&
4831         operand.GetBaseRegister().IsLow();
4832     ITScope it_scope(this, &cond, can_use_it);
4833     tst(cond, rn, operand);
4834   }
Tst(Register rn,const Operand & operand)4835   void Tst(Register rn, const Operand& operand) { Tst(al, rn, operand); }
4836 
Uadd16(Condition cond,Register rd,Register rn,Register rm)4837   void Uadd16(Condition cond, Register rd, Register rn, Register rm) {
4838     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4839     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4840     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4841     VIXL_ASSERT(allow_macro_instructions_);
4842     VIXL_ASSERT(OutsideITBlock());
4843     MacroEmissionCheckScope guard(this);
4844     ITScope it_scope(this, &cond);
4845     uadd16(cond, rd, rn, rm);
4846   }
Uadd16(Register rd,Register rn,Register rm)4847   void Uadd16(Register rd, Register rn, Register rm) { Uadd16(al, rd, rn, rm); }
4848 
Uadd8(Condition cond,Register rd,Register rn,Register rm)4849   void Uadd8(Condition cond, Register rd, Register rn, Register rm) {
4850     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4851     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4852     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4853     VIXL_ASSERT(allow_macro_instructions_);
4854     VIXL_ASSERT(OutsideITBlock());
4855     MacroEmissionCheckScope guard(this);
4856     ITScope it_scope(this, &cond);
4857     uadd8(cond, rd, rn, rm);
4858   }
Uadd8(Register rd,Register rn,Register rm)4859   void Uadd8(Register rd, Register rn, Register rm) { Uadd8(al, rd, rn, rm); }
4860 
Uasx(Condition cond,Register rd,Register rn,Register rm)4861   void Uasx(Condition cond, Register rd, Register rn, Register rm) {
4862     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4863     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4864     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4865     VIXL_ASSERT(allow_macro_instructions_);
4866     VIXL_ASSERT(OutsideITBlock());
4867     MacroEmissionCheckScope guard(this);
4868     ITScope it_scope(this, &cond);
4869     uasx(cond, rd, rn, rm);
4870   }
Uasx(Register rd,Register rn,Register rm)4871   void Uasx(Register rd, Register rn, Register rm) { Uasx(al, rd, rn, rm); }
4872 
Ubfx(Condition cond,Register rd,Register rn,uint32_t lsb,const Operand & operand)4873   void Ubfx(Condition cond,
4874             Register rd,
4875             Register rn,
4876             uint32_t lsb,
4877             const Operand& operand) {
4878     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4879     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4880     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4881     VIXL_ASSERT(allow_macro_instructions_);
4882     VIXL_ASSERT(OutsideITBlock());
4883     MacroEmissionCheckScope guard(this);
4884     ITScope it_scope(this, &cond);
4885     ubfx(cond, rd, rn, lsb, operand);
4886   }
Ubfx(Register rd,Register rn,uint32_t lsb,const Operand & operand)4887   void Ubfx(Register rd, Register rn, uint32_t lsb, const Operand& operand) {
4888     Ubfx(al, rd, rn, lsb, operand);
4889   }
4890 
Udf(Condition cond,uint32_t imm)4891   void Udf(Condition cond, uint32_t imm) {
4892     VIXL_ASSERT(allow_macro_instructions_);
4893     VIXL_ASSERT(OutsideITBlock());
4894     MacroEmissionCheckScope guard(this);
4895     ITScope it_scope(this, &cond);
4896     udf(cond, imm);
4897   }
Udf(uint32_t imm)4898   void Udf(uint32_t imm) { Udf(al, imm); }
4899 
Udiv(Condition cond,Register rd,Register rn,Register rm)4900   void Udiv(Condition cond, Register rd, Register rn, Register rm) {
4901     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4902     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4903     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4904     VIXL_ASSERT(allow_macro_instructions_);
4905     VIXL_ASSERT(OutsideITBlock());
4906     MacroEmissionCheckScope guard(this);
4907     ITScope it_scope(this, &cond);
4908     udiv(cond, rd, rn, rm);
4909   }
Udiv(Register rd,Register rn,Register rm)4910   void Udiv(Register rd, Register rn, Register rm) { Udiv(al, rd, rn, rm); }
4911 
Uhadd16(Condition cond,Register rd,Register rn,Register rm)4912   void Uhadd16(Condition cond, Register rd, Register rn, Register rm) {
4913     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4914     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4915     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4916     VIXL_ASSERT(allow_macro_instructions_);
4917     VIXL_ASSERT(OutsideITBlock());
4918     MacroEmissionCheckScope guard(this);
4919     ITScope it_scope(this, &cond);
4920     uhadd16(cond, rd, rn, rm);
4921   }
Uhadd16(Register rd,Register rn,Register rm)4922   void Uhadd16(Register rd, Register rn, Register rm) {
4923     Uhadd16(al, rd, rn, rm);
4924   }
4925 
Uhadd8(Condition cond,Register rd,Register rn,Register rm)4926   void Uhadd8(Condition cond, Register rd, Register rn, Register rm) {
4927     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4928     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4929     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4930     VIXL_ASSERT(allow_macro_instructions_);
4931     VIXL_ASSERT(OutsideITBlock());
4932     MacroEmissionCheckScope guard(this);
4933     ITScope it_scope(this, &cond);
4934     uhadd8(cond, rd, rn, rm);
4935   }
Uhadd8(Register rd,Register rn,Register rm)4936   void Uhadd8(Register rd, Register rn, Register rm) { Uhadd8(al, rd, rn, rm); }
4937 
Uhasx(Condition cond,Register rd,Register rn,Register rm)4938   void Uhasx(Condition cond, Register rd, Register rn, Register rm) {
4939     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4940     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4941     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4942     VIXL_ASSERT(allow_macro_instructions_);
4943     VIXL_ASSERT(OutsideITBlock());
4944     MacroEmissionCheckScope guard(this);
4945     ITScope it_scope(this, &cond);
4946     uhasx(cond, rd, rn, rm);
4947   }
Uhasx(Register rd,Register rn,Register rm)4948   void Uhasx(Register rd, Register rn, Register rm) { Uhasx(al, rd, rn, rm); }
4949 
Uhsax(Condition cond,Register rd,Register rn,Register rm)4950   void Uhsax(Condition cond, Register rd, Register rn, Register rm) {
4951     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4952     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4953     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4954     VIXL_ASSERT(allow_macro_instructions_);
4955     VIXL_ASSERT(OutsideITBlock());
4956     MacroEmissionCheckScope guard(this);
4957     ITScope it_scope(this, &cond);
4958     uhsax(cond, rd, rn, rm);
4959   }
Uhsax(Register rd,Register rn,Register rm)4960   void Uhsax(Register rd, Register rn, Register rm) { Uhsax(al, rd, rn, rm); }
4961 
Uhsub16(Condition cond,Register rd,Register rn,Register rm)4962   void Uhsub16(Condition cond, Register rd, Register rn, Register rm) {
4963     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4964     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4965     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4966     VIXL_ASSERT(allow_macro_instructions_);
4967     VIXL_ASSERT(OutsideITBlock());
4968     MacroEmissionCheckScope guard(this);
4969     ITScope it_scope(this, &cond);
4970     uhsub16(cond, rd, rn, rm);
4971   }
Uhsub16(Register rd,Register rn,Register rm)4972   void Uhsub16(Register rd, Register rn, Register rm) {
4973     Uhsub16(al, rd, rn, rm);
4974   }
4975 
Uhsub8(Condition cond,Register rd,Register rn,Register rm)4976   void Uhsub8(Condition cond, Register rd, Register rn, Register rm) {
4977     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4978     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4979     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4980     VIXL_ASSERT(allow_macro_instructions_);
4981     VIXL_ASSERT(OutsideITBlock());
4982     MacroEmissionCheckScope guard(this);
4983     ITScope it_scope(this, &cond);
4984     uhsub8(cond, rd, rn, rm);
4985   }
Uhsub8(Register rd,Register rn,Register rm)4986   void Uhsub8(Register rd, Register rn, Register rm) { Uhsub8(al, rd, rn, rm); }
4987 
Umaal(Condition cond,Register rdlo,Register rdhi,Register rn,Register rm)4988   void Umaal(
4989       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
4990     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo));
4991     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi));
4992     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4993     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4994     VIXL_ASSERT(allow_macro_instructions_);
4995     VIXL_ASSERT(OutsideITBlock());
4996     MacroEmissionCheckScope guard(this);
4997     ITScope it_scope(this, &cond);
4998     umaal(cond, rdlo, rdhi, rn, rm);
4999   }
Umaal(Register rdlo,Register rdhi,Register rn,Register rm)5000   void Umaal(Register rdlo, Register rdhi, Register rn, Register rm) {
5001     Umaal(al, rdlo, rdhi, rn, rm);
5002   }
5003 
Umlal(Condition cond,Register rdlo,Register rdhi,Register rn,Register rm)5004   void Umlal(
5005       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
5006     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo));
5007     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi));
5008     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5009     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5010     VIXL_ASSERT(allow_macro_instructions_);
5011     VIXL_ASSERT(OutsideITBlock());
5012     MacroEmissionCheckScope guard(this);
5013     ITScope it_scope(this, &cond);
5014     umlal(cond, rdlo, rdhi, rn, rm);
5015   }
Umlal(Register rdlo,Register rdhi,Register rn,Register rm)5016   void Umlal(Register rdlo, Register rdhi, Register rn, Register rm) {
5017     Umlal(al, rdlo, rdhi, rn, rm);
5018   }
Umlal(FlagsUpdate flags,Condition cond,Register rdlo,Register rdhi,Register rn,Register rm)5019   void Umlal(FlagsUpdate flags,
5020              Condition cond,
5021              Register rdlo,
5022              Register rdhi,
5023              Register rn,
5024              Register rm) {
5025     switch (flags) {
5026       case LeaveFlags:
5027         Umlal(cond, rdlo, rdhi, rn, rm);
5028         break;
5029       case SetFlags:
5030         Umlals(cond, rdlo, rdhi, rn, rm);
5031         break;
5032       case DontCare:
5033         Umlal(cond, rdlo, rdhi, rn, rm);
5034         break;
5035     }
5036   }
Umlal(FlagsUpdate flags,Register rdlo,Register rdhi,Register rn,Register rm)5037   void Umlal(FlagsUpdate flags,
5038              Register rdlo,
5039              Register rdhi,
5040              Register rn,
5041              Register rm) {
5042     Umlal(flags, al, rdlo, rdhi, rn, rm);
5043   }
5044 
Umlals(Condition cond,Register rdlo,Register rdhi,Register rn,Register rm)5045   void Umlals(
5046       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
5047     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo));
5048     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi));
5049     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5050     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5051     VIXL_ASSERT(allow_macro_instructions_);
5052     VIXL_ASSERT(OutsideITBlock());
5053     MacroEmissionCheckScope guard(this);
5054     ITScope it_scope(this, &cond);
5055     umlals(cond, rdlo, rdhi, rn, rm);
5056   }
Umlals(Register rdlo,Register rdhi,Register rn,Register rm)5057   void Umlals(Register rdlo, Register rdhi, Register rn, Register rm) {
5058     Umlals(al, rdlo, rdhi, rn, rm);
5059   }
5060 
Umull(Condition cond,Register rdlo,Register rdhi,Register rn,Register rm)5061   void Umull(
5062       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
5063     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo));
5064     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi));
5065     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5066     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5067     VIXL_ASSERT(allow_macro_instructions_);
5068     VIXL_ASSERT(OutsideITBlock());
5069     MacroEmissionCheckScope guard(this);
5070     ITScope it_scope(this, &cond);
5071     umull(cond, rdlo, rdhi, rn, rm);
5072   }
Umull(Register rdlo,Register rdhi,Register rn,Register rm)5073   void Umull(Register rdlo, Register rdhi, Register rn, Register rm) {
5074     Umull(al, rdlo, rdhi, rn, rm);
5075   }
Umull(FlagsUpdate flags,Condition cond,Register rdlo,Register rdhi,Register rn,Register rm)5076   void Umull(FlagsUpdate flags,
5077              Condition cond,
5078              Register rdlo,
5079              Register rdhi,
5080              Register rn,
5081              Register rm) {
5082     switch (flags) {
5083       case LeaveFlags:
5084         Umull(cond, rdlo, rdhi, rn, rm);
5085         break;
5086       case SetFlags:
5087         Umulls(cond, rdlo, rdhi, rn, rm);
5088         break;
5089       case DontCare:
5090         Umull(cond, rdlo, rdhi, rn, rm);
5091         break;
5092     }
5093   }
Umull(FlagsUpdate flags,Register rdlo,Register rdhi,Register rn,Register rm)5094   void Umull(FlagsUpdate flags,
5095              Register rdlo,
5096              Register rdhi,
5097              Register rn,
5098              Register rm) {
5099     Umull(flags, al, rdlo, rdhi, rn, rm);
5100   }
5101 
Umulls(Condition cond,Register rdlo,Register rdhi,Register rn,Register rm)5102   void Umulls(
5103       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
5104     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo));
5105     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi));
5106     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5107     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5108     VIXL_ASSERT(allow_macro_instructions_);
5109     VIXL_ASSERT(OutsideITBlock());
5110     MacroEmissionCheckScope guard(this);
5111     ITScope it_scope(this, &cond);
5112     umulls(cond, rdlo, rdhi, rn, rm);
5113   }
Umulls(Register rdlo,Register rdhi,Register rn,Register rm)5114   void Umulls(Register rdlo, Register rdhi, Register rn, Register rm) {
5115     Umulls(al, rdlo, rdhi, rn, rm);
5116   }
5117 
Uqadd16(Condition cond,Register rd,Register rn,Register rm)5118   void Uqadd16(Condition cond, Register rd, Register rn, Register rm) {
5119     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5120     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5121     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5122     VIXL_ASSERT(allow_macro_instructions_);
5123     VIXL_ASSERT(OutsideITBlock());
5124     MacroEmissionCheckScope guard(this);
5125     ITScope it_scope(this, &cond);
5126     uqadd16(cond, rd, rn, rm);
5127   }
Uqadd16(Register rd,Register rn,Register rm)5128   void Uqadd16(Register rd, Register rn, Register rm) {
5129     Uqadd16(al, rd, rn, rm);
5130   }
5131 
Uqadd8(Condition cond,Register rd,Register rn,Register rm)5132   void Uqadd8(Condition cond, Register rd, Register rn, Register rm) {
5133     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5134     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5135     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5136     VIXL_ASSERT(allow_macro_instructions_);
5137     VIXL_ASSERT(OutsideITBlock());
5138     MacroEmissionCheckScope guard(this);
5139     ITScope it_scope(this, &cond);
5140     uqadd8(cond, rd, rn, rm);
5141   }
Uqadd8(Register rd,Register rn,Register rm)5142   void Uqadd8(Register rd, Register rn, Register rm) { Uqadd8(al, rd, rn, rm); }
5143 
Uqasx(Condition cond,Register rd,Register rn,Register rm)5144   void Uqasx(Condition cond, Register rd, Register rn, Register rm) {
5145     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5146     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5147     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5148     VIXL_ASSERT(allow_macro_instructions_);
5149     VIXL_ASSERT(OutsideITBlock());
5150     MacroEmissionCheckScope guard(this);
5151     ITScope it_scope(this, &cond);
5152     uqasx(cond, rd, rn, rm);
5153   }
Uqasx(Register rd,Register rn,Register rm)5154   void Uqasx(Register rd, Register rn, Register rm) { Uqasx(al, rd, rn, rm); }
5155 
Uqsax(Condition cond,Register rd,Register rn,Register rm)5156   void Uqsax(Condition cond, Register rd, Register rn, Register rm) {
5157     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5158     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5159     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5160     VIXL_ASSERT(allow_macro_instructions_);
5161     VIXL_ASSERT(OutsideITBlock());
5162     MacroEmissionCheckScope guard(this);
5163     ITScope it_scope(this, &cond);
5164     uqsax(cond, rd, rn, rm);
5165   }
Uqsax(Register rd,Register rn,Register rm)5166   void Uqsax(Register rd, Register rn, Register rm) { Uqsax(al, rd, rn, rm); }
5167 
Uqsub16(Condition cond,Register rd,Register rn,Register rm)5168   void Uqsub16(Condition cond, Register rd, Register rn, Register rm) {
5169     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5170     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5171     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5172     VIXL_ASSERT(allow_macro_instructions_);
5173     VIXL_ASSERT(OutsideITBlock());
5174     MacroEmissionCheckScope guard(this);
5175     ITScope it_scope(this, &cond);
5176     uqsub16(cond, rd, rn, rm);
5177   }
Uqsub16(Register rd,Register rn,Register rm)5178   void Uqsub16(Register rd, Register rn, Register rm) {
5179     Uqsub16(al, rd, rn, rm);
5180   }
5181 
Uqsub8(Condition cond,Register rd,Register rn,Register rm)5182   void Uqsub8(Condition cond, Register rd, Register rn, Register rm) {
5183     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5184     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5185     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5186     VIXL_ASSERT(allow_macro_instructions_);
5187     VIXL_ASSERT(OutsideITBlock());
5188     MacroEmissionCheckScope guard(this);
5189     ITScope it_scope(this, &cond);
5190     uqsub8(cond, rd, rn, rm);
5191   }
Uqsub8(Register rd,Register rn,Register rm)5192   void Uqsub8(Register rd, Register rn, Register rm) { Uqsub8(al, rd, rn, rm); }
5193 
Usad8(Condition cond,Register rd,Register rn,Register rm)5194   void Usad8(Condition cond, Register rd, Register rn, Register rm) {
5195     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5196     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5197     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5198     VIXL_ASSERT(allow_macro_instructions_);
5199     VIXL_ASSERT(OutsideITBlock());
5200     MacroEmissionCheckScope guard(this);
5201     ITScope it_scope(this, &cond);
5202     usad8(cond, rd, rn, rm);
5203   }
Usad8(Register rd,Register rn,Register rm)5204   void Usad8(Register rd, Register rn, Register rm) { Usad8(al, rd, rn, rm); }
5205 
Usada8(Condition cond,Register rd,Register rn,Register rm,Register ra)5206   void Usada8(
5207       Condition cond, Register rd, Register rn, Register rm, Register ra) {
5208     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5209     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5210     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5211     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
5212     VIXL_ASSERT(allow_macro_instructions_);
5213     VIXL_ASSERT(OutsideITBlock());
5214     MacroEmissionCheckScope guard(this);
5215     ITScope it_scope(this, &cond);
5216     usada8(cond, rd, rn, rm, ra);
5217   }
Usada8(Register rd,Register rn,Register rm,Register ra)5218   void Usada8(Register rd, Register rn, Register rm, Register ra) {
5219     Usada8(al, rd, rn, rm, ra);
5220   }
5221 
Usat(Condition cond,Register rd,uint32_t imm,const Operand & operand)5222   void Usat(Condition cond, Register rd, uint32_t imm, const Operand& operand) {
5223     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5224     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
5225     VIXL_ASSERT(allow_macro_instructions_);
5226     VIXL_ASSERT(OutsideITBlock());
5227     MacroEmissionCheckScope guard(this);
5228     ITScope it_scope(this, &cond);
5229     usat(cond, rd, imm, operand);
5230   }
Usat(Register rd,uint32_t imm,const Operand & operand)5231   void Usat(Register rd, uint32_t imm, const Operand& operand) {
5232     Usat(al, rd, imm, operand);
5233   }
5234 
Usat16(Condition cond,Register rd,uint32_t imm,Register rn)5235   void Usat16(Condition cond, Register rd, uint32_t imm, Register rn) {
5236     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5237     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5238     VIXL_ASSERT(allow_macro_instructions_);
5239     VIXL_ASSERT(OutsideITBlock());
5240     MacroEmissionCheckScope guard(this);
5241     ITScope it_scope(this, &cond);
5242     usat16(cond, rd, imm, rn);
5243   }
Usat16(Register rd,uint32_t imm,Register rn)5244   void Usat16(Register rd, uint32_t imm, Register rn) {
5245     Usat16(al, rd, imm, rn);
5246   }
5247 
Usax(Condition cond,Register rd,Register rn,Register rm)5248   void Usax(Condition cond, Register rd, Register rn, Register rm) {
5249     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5250     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5251     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5252     VIXL_ASSERT(allow_macro_instructions_);
5253     VIXL_ASSERT(OutsideITBlock());
5254     MacroEmissionCheckScope guard(this);
5255     ITScope it_scope(this, &cond);
5256     usax(cond, rd, rn, rm);
5257   }
Usax(Register rd,Register rn,Register rm)5258   void Usax(Register rd, Register rn, Register rm) { Usax(al, rd, rn, rm); }
5259 
Usub16(Condition cond,Register rd,Register rn,Register rm)5260   void Usub16(Condition cond, Register rd, Register rn, Register rm) {
5261     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5262     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5263     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5264     VIXL_ASSERT(allow_macro_instructions_);
5265     VIXL_ASSERT(OutsideITBlock());
5266     MacroEmissionCheckScope guard(this);
5267     ITScope it_scope(this, &cond);
5268     usub16(cond, rd, rn, rm);
5269   }
Usub16(Register rd,Register rn,Register rm)5270   void Usub16(Register rd, Register rn, Register rm) { Usub16(al, rd, rn, rm); }
5271 
Usub8(Condition cond,Register rd,Register rn,Register rm)5272   void Usub8(Condition cond, Register rd, Register rn, Register rm) {
5273     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5274     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5275     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5276     VIXL_ASSERT(allow_macro_instructions_);
5277     VIXL_ASSERT(OutsideITBlock());
5278     MacroEmissionCheckScope guard(this);
5279     ITScope it_scope(this, &cond);
5280     usub8(cond, rd, rn, rm);
5281   }
Usub8(Register rd,Register rn,Register rm)5282   void Usub8(Register rd, Register rn, Register rm) { Usub8(al, rd, rn, rm); }
5283 
Uxtab(Condition cond,Register rd,Register rn,const Operand & operand)5284   void Uxtab(Condition cond, Register rd, Register rn, const Operand& operand) {
5285     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5286     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5287     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
5288     VIXL_ASSERT(allow_macro_instructions_);
5289     VIXL_ASSERT(OutsideITBlock());
5290     MacroEmissionCheckScope guard(this);
5291     ITScope it_scope(this, &cond);
5292     uxtab(cond, rd, rn, operand);
5293   }
Uxtab(Register rd,Register rn,const Operand & operand)5294   void Uxtab(Register rd, Register rn, const Operand& operand) {
5295     Uxtab(al, rd, rn, operand);
5296   }
5297 
Uxtab16(Condition cond,Register rd,Register rn,const Operand & operand)5298   void Uxtab16(Condition cond,
5299                Register rd,
5300                Register rn,
5301                const Operand& operand) {
5302     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5303     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5304     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
5305     VIXL_ASSERT(allow_macro_instructions_);
5306     VIXL_ASSERT(OutsideITBlock());
5307     MacroEmissionCheckScope guard(this);
5308     ITScope it_scope(this, &cond);
5309     uxtab16(cond, rd, rn, operand);
5310   }
Uxtab16(Register rd,Register rn,const Operand & operand)5311   void Uxtab16(Register rd, Register rn, const Operand& operand) {
5312     Uxtab16(al, rd, rn, operand);
5313   }
5314 
Uxtah(Condition cond,Register rd,Register rn,const Operand & operand)5315   void Uxtah(Condition cond, Register rd, Register rn, const Operand& operand) {
5316     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5317     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5318     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
5319     VIXL_ASSERT(allow_macro_instructions_);
5320     VIXL_ASSERT(OutsideITBlock());
5321     MacroEmissionCheckScope guard(this);
5322     ITScope it_scope(this, &cond);
5323     uxtah(cond, rd, rn, operand);
5324   }
Uxtah(Register rd,Register rn,const Operand & operand)5325   void Uxtah(Register rd, Register rn, const Operand& operand) {
5326     Uxtah(al, rd, rn, operand);
5327   }
5328 
Uxtb(Condition cond,Register rd,const Operand & operand)5329   void Uxtb(Condition cond, Register rd, const Operand& operand) {
5330     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5331     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
5332     VIXL_ASSERT(allow_macro_instructions_);
5333     VIXL_ASSERT(OutsideITBlock());
5334     MacroEmissionCheckScope guard(this);
5335     ITScope it_scope(this, &cond);
5336     uxtb(cond, rd, operand);
5337   }
Uxtb(Register rd,const Operand & operand)5338   void Uxtb(Register rd, const Operand& operand) { Uxtb(al, rd, operand); }
5339 
Uxtb16(Condition cond,Register rd,const Operand & operand)5340   void Uxtb16(Condition cond, Register rd, const Operand& operand) {
5341     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5342     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
5343     VIXL_ASSERT(allow_macro_instructions_);
5344     VIXL_ASSERT(OutsideITBlock());
5345     MacroEmissionCheckScope guard(this);
5346     ITScope it_scope(this, &cond);
5347     uxtb16(cond, rd, operand);
5348   }
Uxtb16(Register rd,const Operand & operand)5349   void Uxtb16(Register rd, const Operand& operand) { Uxtb16(al, rd, operand); }
5350 
Uxth(Condition cond,Register rd,const Operand & operand)5351   void Uxth(Condition cond, Register rd, const Operand& operand) {
5352     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5353     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
5354     VIXL_ASSERT(allow_macro_instructions_);
5355     VIXL_ASSERT(OutsideITBlock());
5356     MacroEmissionCheckScope guard(this);
5357     ITScope it_scope(this, &cond);
5358     uxth(cond, rd, operand);
5359   }
Uxth(Register rd,const Operand & operand)5360   void Uxth(Register rd, const Operand& operand) { Uxth(al, rd, operand); }
5361 
Vaba(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)5362   void Vaba(
5363       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5364     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5365     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5366     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5367     VIXL_ASSERT(allow_macro_instructions_);
5368     VIXL_ASSERT(OutsideITBlock());
5369     MacroEmissionCheckScope guard(this);
5370     ITScope it_scope(this, &cond);
5371     vaba(cond, dt, rd, rn, rm);
5372   }
Vaba(DataType dt,DRegister rd,DRegister rn,DRegister rm)5373   void Vaba(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5374     Vaba(al, dt, rd, rn, rm);
5375   }
5376 
Vaba(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)5377   void Vaba(
5378       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5379     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5380     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5381     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5382     VIXL_ASSERT(allow_macro_instructions_);
5383     VIXL_ASSERT(OutsideITBlock());
5384     MacroEmissionCheckScope guard(this);
5385     ITScope it_scope(this, &cond);
5386     vaba(cond, dt, rd, rn, rm);
5387   }
Vaba(DataType dt,QRegister rd,QRegister rn,QRegister rm)5388   void Vaba(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5389     Vaba(al, dt, rd, rn, rm);
5390   }
5391 
Vabal(Condition cond,DataType dt,QRegister rd,DRegister rn,DRegister rm)5392   void Vabal(
5393       Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm) {
5394     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5395     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5396     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5397     VIXL_ASSERT(allow_macro_instructions_);
5398     VIXL_ASSERT(OutsideITBlock());
5399     MacroEmissionCheckScope guard(this);
5400     ITScope it_scope(this, &cond);
5401     vabal(cond, dt, rd, rn, rm);
5402   }
Vabal(DataType dt,QRegister rd,DRegister rn,DRegister rm)5403   void Vabal(DataType dt, QRegister rd, DRegister rn, DRegister rm) {
5404     Vabal(al, dt, rd, rn, rm);
5405   }
5406 
Vabd(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)5407   void Vabd(
5408       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5409     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5410     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5411     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5412     VIXL_ASSERT(allow_macro_instructions_);
5413     VIXL_ASSERT(OutsideITBlock());
5414     MacroEmissionCheckScope guard(this);
5415     ITScope it_scope(this, &cond);
5416     vabd(cond, dt, rd, rn, rm);
5417   }
Vabd(DataType dt,DRegister rd,DRegister rn,DRegister rm)5418   void Vabd(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5419     Vabd(al, dt, rd, rn, rm);
5420   }
5421 
Vabd(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)5422   void Vabd(
5423       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5424     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5425     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5426     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5427     VIXL_ASSERT(allow_macro_instructions_);
5428     VIXL_ASSERT(OutsideITBlock());
5429     MacroEmissionCheckScope guard(this);
5430     ITScope it_scope(this, &cond);
5431     vabd(cond, dt, rd, rn, rm);
5432   }
Vabd(DataType dt,QRegister rd,QRegister rn,QRegister rm)5433   void Vabd(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5434     Vabd(al, dt, rd, rn, rm);
5435   }
5436 
Vabdl(Condition cond,DataType dt,QRegister rd,DRegister rn,DRegister rm)5437   void Vabdl(
5438       Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm) {
5439     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5440     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5441     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5442     VIXL_ASSERT(allow_macro_instructions_);
5443     VIXL_ASSERT(OutsideITBlock());
5444     MacroEmissionCheckScope guard(this);
5445     ITScope it_scope(this, &cond);
5446     vabdl(cond, dt, rd, rn, rm);
5447   }
Vabdl(DataType dt,QRegister rd,DRegister rn,DRegister rm)5448   void Vabdl(DataType dt, QRegister rd, DRegister rn, DRegister rm) {
5449     Vabdl(al, dt, rd, rn, rm);
5450   }
5451 
Vabs(Condition cond,DataType dt,DRegister rd,DRegister rm)5452   void Vabs(Condition cond, DataType dt, DRegister rd, DRegister rm) {
5453     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5454     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5455     VIXL_ASSERT(allow_macro_instructions_);
5456     VIXL_ASSERT(OutsideITBlock());
5457     MacroEmissionCheckScope guard(this);
5458     ITScope it_scope(this, &cond);
5459     vabs(cond, dt, rd, rm);
5460   }
Vabs(DataType dt,DRegister rd,DRegister rm)5461   void Vabs(DataType dt, DRegister rd, DRegister rm) { Vabs(al, dt, rd, rm); }
5462 
Vabs(Condition cond,DataType dt,QRegister rd,QRegister rm)5463   void Vabs(Condition cond, DataType dt, QRegister rd, QRegister rm) {
5464     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5465     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5466     VIXL_ASSERT(allow_macro_instructions_);
5467     VIXL_ASSERT(OutsideITBlock());
5468     MacroEmissionCheckScope guard(this);
5469     ITScope it_scope(this, &cond);
5470     vabs(cond, dt, rd, rm);
5471   }
Vabs(DataType dt,QRegister rd,QRegister rm)5472   void Vabs(DataType dt, QRegister rd, QRegister rm) { Vabs(al, dt, rd, rm); }
5473 
Vabs(Condition cond,DataType dt,SRegister rd,SRegister rm)5474   void Vabs(Condition cond, DataType dt, SRegister rd, SRegister rm) {
5475     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5476     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5477     VIXL_ASSERT(allow_macro_instructions_);
5478     VIXL_ASSERT(OutsideITBlock());
5479     MacroEmissionCheckScope guard(this);
5480     ITScope it_scope(this, &cond);
5481     vabs(cond, dt, rd, rm);
5482   }
Vabs(DataType dt,SRegister rd,SRegister rm)5483   void Vabs(DataType dt, SRegister rd, SRegister rm) { Vabs(al, dt, rd, rm); }
5484 
Vacge(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)5485   void Vacge(
5486       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5487     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5488     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5489     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5490     VIXL_ASSERT(allow_macro_instructions_);
5491     VIXL_ASSERT(OutsideITBlock());
5492     MacroEmissionCheckScope guard(this);
5493     ITScope it_scope(this, &cond);
5494     vacge(cond, dt, rd, rn, rm);
5495   }
Vacge(DataType dt,DRegister rd,DRegister rn,DRegister rm)5496   void Vacge(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5497     Vacge(al, dt, rd, rn, rm);
5498   }
5499 
Vacge(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)5500   void Vacge(
5501       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5502     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5503     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5504     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5505     VIXL_ASSERT(allow_macro_instructions_);
5506     VIXL_ASSERT(OutsideITBlock());
5507     MacroEmissionCheckScope guard(this);
5508     ITScope it_scope(this, &cond);
5509     vacge(cond, dt, rd, rn, rm);
5510   }
Vacge(DataType dt,QRegister rd,QRegister rn,QRegister rm)5511   void Vacge(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5512     Vacge(al, dt, rd, rn, rm);
5513   }
5514 
Vacgt(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)5515   void Vacgt(
5516       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5517     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5518     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5519     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5520     VIXL_ASSERT(allow_macro_instructions_);
5521     VIXL_ASSERT(OutsideITBlock());
5522     MacroEmissionCheckScope guard(this);
5523     ITScope it_scope(this, &cond);
5524     vacgt(cond, dt, rd, rn, rm);
5525   }
Vacgt(DataType dt,DRegister rd,DRegister rn,DRegister rm)5526   void Vacgt(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5527     Vacgt(al, dt, rd, rn, rm);
5528   }
5529 
Vacgt(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)5530   void Vacgt(
5531       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5532     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5533     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5534     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5535     VIXL_ASSERT(allow_macro_instructions_);
5536     VIXL_ASSERT(OutsideITBlock());
5537     MacroEmissionCheckScope guard(this);
5538     ITScope it_scope(this, &cond);
5539     vacgt(cond, dt, rd, rn, rm);
5540   }
Vacgt(DataType dt,QRegister rd,QRegister rn,QRegister rm)5541   void Vacgt(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5542     Vacgt(al, dt, rd, rn, rm);
5543   }
5544 
Vacle(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)5545   void Vacle(
5546       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5547     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5548     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5549     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5550     VIXL_ASSERT(allow_macro_instructions_);
5551     VIXL_ASSERT(OutsideITBlock());
5552     MacroEmissionCheckScope guard(this);
5553     ITScope it_scope(this, &cond);
5554     vacle(cond, dt, rd, rn, rm);
5555   }
Vacle(DataType dt,DRegister rd,DRegister rn,DRegister rm)5556   void Vacle(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5557     Vacle(al, dt, rd, rn, rm);
5558   }
5559 
Vacle(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)5560   void Vacle(
5561       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5562     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5563     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5564     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5565     VIXL_ASSERT(allow_macro_instructions_);
5566     VIXL_ASSERT(OutsideITBlock());
5567     MacroEmissionCheckScope guard(this);
5568     ITScope it_scope(this, &cond);
5569     vacle(cond, dt, rd, rn, rm);
5570   }
Vacle(DataType dt,QRegister rd,QRegister rn,QRegister rm)5571   void Vacle(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5572     Vacle(al, dt, rd, rn, rm);
5573   }
5574 
Vaclt(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)5575   void Vaclt(
5576       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5577     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5578     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5579     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5580     VIXL_ASSERT(allow_macro_instructions_);
5581     VIXL_ASSERT(OutsideITBlock());
5582     MacroEmissionCheckScope guard(this);
5583     ITScope it_scope(this, &cond);
5584     vaclt(cond, dt, rd, rn, rm);
5585   }
Vaclt(DataType dt,DRegister rd,DRegister rn,DRegister rm)5586   void Vaclt(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5587     Vaclt(al, dt, rd, rn, rm);
5588   }
5589 
Vaclt(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)5590   void Vaclt(
5591       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5592     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5593     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5594     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5595     VIXL_ASSERT(allow_macro_instructions_);
5596     VIXL_ASSERT(OutsideITBlock());
5597     MacroEmissionCheckScope guard(this);
5598     ITScope it_scope(this, &cond);
5599     vaclt(cond, dt, rd, rn, rm);
5600   }
Vaclt(DataType dt,QRegister rd,QRegister rn,QRegister rm)5601   void Vaclt(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5602     Vaclt(al, dt, rd, rn, rm);
5603   }
5604 
Vadd(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)5605   void Vadd(
5606       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5607     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5608     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5609     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5610     VIXL_ASSERT(allow_macro_instructions_);
5611     VIXL_ASSERT(OutsideITBlock());
5612     MacroEmissionCheckScope guard(this);
5613     ITScope it_scope(this, &cond);
5614     vadd(cond, dt, rd, rn, rm);
5615   }
Vadd(DataType dt,DRegister rd,DRegister rn,DRegister rm)5616   void Vadd(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5617     Vadd(al, dt, rd, rn, rm);
5618   }
5619 
Vadd(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)5620   void Vadd(
5621       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5622     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5623     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5624     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5625     VIXL_ASSERT(allow_macro_instructions_);
5626     VIXL_ASSERT(OutsideITBlock());
5627     MacroEmissionCheckScope guard(this);
5628     ITScope it_scope(this, &cond);
5629     vadd(cond, dt, rd, rn, rm);
5630   }
Vadd(DataType dt,QRegister rd,QRegister rn,QRegister rm)5631   void Vadd(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5632     Vadd(al, dt, rd, rn, rm);
5633   }
5634 
Vadd(Condition cond,DataType dt,SRegister rd,SRegister rn,SRegister rm)5635   void Vadd(
5636       Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) {
5637     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5638     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5639     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5640     VIXL_ASSERT(allow_macro_instructions_);
5641     VIXL_ASSERT(OutsideITBlock());
5642     MacroEmissionCheckScope guard(this);
5643     ITScope it_scope(this, &cond);
5644     vadd(cond, dt, rd, rn, rm);
5645   }
Vadd(DataType dt,SRegister rd,SRegister rn,SRegister rm)5646   void Vadd(DataType dt, SRegister rd, SRegister rn, SRegister rm) {
5647     Vadd(al, dt, rd, rn, rm);
5648   }
5649 
Vaddhn(Condition cond,DataType dt,DRegister rd,QRegister rn,QRegister rm)5650   void Vaddhn(
5651       Condition cond, DataType dt, DRegister rd, QRegister rn, QRegister rm) {
5652     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5653     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5654     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5655     VIXL_ASSERT(allow_macro_instructions_);
5656     VIXL_ASSERT(OutsideITBlock());
5657     MacroEmissionCheckScope guard(this);
5658     ITScope it_scope(this, &cond);
5659     vaddhn(cond, dt, rd, rn, rm);
5660   }
Vaddhn(DataType dt,DRegister rd,QRegister rn,QRegister rm)5661   void Vaddhn(DataType dt, DRegister rd, QRegister rn, QRegister rm) {
5662     Vaddhn(al, dt, rd, rn, rm);
5663   }
5664 
Vaddl(Condition cond,DataType dt,QRegister rd,DRegister rn,DRegister rm)5665   void Vaddl(
5666       Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm) {
5667     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5668     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5669     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5670     VIXL_ASSERT(allow_macro_instructions_);
5671     VIXL_ASSERT(OutsideITBlock());
5672     MacroEmissionCheckScope guard(this);
5673     ITScope it_scope(this, &cond);
5674     vaddl(cond, dt, rd, rn, rm);
5675   }
Vaddl(DataType dt,QRegister rd,DRegister rn,DRegister rm)5676   void Vaddl(DataType dt, QRegister rd, DRegister rn, DRegister rm) {
5677     Vaddl(al, dt, rd, rn, rm);
5678   }
5679 
Vaddw(Condition cond,DataType dt,QRegister rd,QRegister rn,DRegister rm)5680   void Vaddw(
5681       Condition cond, DataType dt, QRegister rd, QRegister rn, DRegister rm) {
5682     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5683     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5684     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5685     VIXL_ASSERT(allow_macro_instructions_);
5686     VIXL_ASSERT(OutsideITBlock());
5687     MacroEmissionCheckScope guard(this);
5688     ITScope it_scope(this, &cond);
5689     vaddw(cond, dt, rd, rn, rm);
5690   }
Vaddw(DataType dt,QRegister rd,QRegister rn,DRegister rm)5691   void Vaddw(DataType dt, QRegister rd, QRegister rn, DRegister rm) {
5692     Vaddw(al, dt, rd, rn, rm);
5693   }
5694 
Vand(Condition cond,DataType dt,DRegister rd,DRegister rn,const DOperand & operand)5695   void Vand(Condition cond,
5696             DataType dt,
5697             DRegister rd,
5698             DRegister rn,
5699             const DOperand& operand) {
5700     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5701     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5702     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
5703     VIXL_ASSERT(allow_macro_instructions_);
5704     VIXL_ASSERT(OutsideITBlock());
5705     MacroEmissionCheckScope guard(this);
5706     ITScope it_scope(this, &cond);
5707     vand(cond, dt, rd, rn, operand);
5708   }
Vand(DataType dt,DRegister rd,DRegister rn,const DOperand & operand)5709   void Vand(DataType dt, DRegister rd, DRegister rn, const DOperand& operand) {
5710     Vand(al, dt, rd, rn, operand);
5711   }
5712 
Vand(Condition cond,DataType dt,QRegister rd,QRegister rn,const QOperand & operand)5713   void Vand(Condition cond,
5714             DataType dt,
5715             QRegister rd,
5716             QRegister rn,
5717             const QOperand& operand) {
5718     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5719     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5720     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
5721     VIXL_ASSERT(allow_macro_instructions_);
5722     VIXL_ASSERT(OutsideITBlock());
5723     MacroEmissionCheckScope guard(this);
5724     ITScope it_scope(this, &cond);
5725     vand(cond, dt, rd, rn, operand);
5726   }
Vand(DataType dt,QRegister rd,QRegister rn,const QOperand & operand)5727   void Vand(DataType dt, QRegister rd, QRegister rn, const QOperand& operand) {
5728     Vand(al, dt, rd, rn, operand);
5729   }
5730 
Vbic(Condition cond,DataType dt,DRegister rd,DRegister rn,const DOperand & operand)5731   void Vbic(Condition cond,
5732             DataType dt,
5733             DRegister rd,
5734             DRegister rn,
5735             const DOperand& operand) {
5736     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5737     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5738     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
5739     VIXL_ASSERT(allow_macro_instructions_);
5740     VIXL_ASSERT(OutsideITBlock());
5741     MacroEmissionCheckScope guard(this);
5742     ITScope it_scope(this, &cond);
5743     vbic(cond, dt, rd, rn, operand);
5744   }
Vbic(DataType dt,DRegister rd,DRegister rn,const DOperand & operand)5745   void Vbic(DataType dt, DRegister rd, DRegister rn, const DOperand& operand) {
5746     Vbic(al, dt, rd, rn, operand);
5747   }
5748 
Vbic(Condition cond,DataType dt,QRegister rd,QRegister rn,const QOperand & operand)5749   void Vbic(Condition cond,
5750             DataType dt,
5751             QRegister rd,
5752             QRegister rn,
5753             const QOperand& operand) {
5754     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5755     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5756     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
5757     VIXL_ASSERT(allow_macro_instructions_);
5758     VIXL_ASSERT(OutsideITBlock());
5759     MacroEmissionCheckScope guard(this);
5760     ITScope it_scope(this, &cond);
5761     vbic(cond, dt, rd, rn, operand);
5762   }
Vbic(DataType dt,QRegister rd,QRegister rn,const QOperand & operand)5763   void Vbic(DataType dt, QRegister rd, QRegister rn, const QOperand& operand) {
5764     Vbic(al, dt, rd, rn, operand);
5765   }
5766 
Vbif(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)5767   void Vbif(
5768       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5769     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5770     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5771     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5772     VIXL_ASSERT(allow_macro_instructions_);
5773     VIXL_ASSERT(OutsideITBlock());
5774     MacroEmissionCheckScope guard(this);
5775     ITScope it_scope(this, &cond);
5776     vbif(cond, dt, rd, rn, rm);
5777   }
Vbif(DataType dt,DRegister rd,DRegister rn,DRegister rm)5778   void Vbif(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5779     Vbif(al, dt, rd, rn, rm);
5780   }
Vbif(Condition cond,DRegister rd,DRegister rn,DRegister rm)5781   void Vbif(Condition cond, DRegister rd, DRegister rn, DRegister rm) {
5782     Vbif(cond, kDataTypeValueNone, rd, rn, rm);
5783   }
Vbif(DRegister rd,DRegister rn,DRegister rm)5784   void Vbif(DRegister rd, DRegister rn, DRegister rm) {
5785     Vbif(al, kDataTypeValueNone, rd, rn, rm);
5786   }
5787 
Vbif(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)5788   void Vbif(
5789       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5790     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5791     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5792     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5793     VIXL_ASSERT(allow_macro_instructions_);
5794     VIXL_ASSERT(OutsideITBlock());
5795     MacroEmissionCheckScope guard(this);
5796     ITScope it_scope(this, &cond);
5797     vbif(cond, dt, rd, rn, rm);
5798   }
Vbif(DataType dt,QRegister rd,QRegister rn,QRegister rm)5799   void Vbif(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5800     Vbif(al, dt, rd, rn, rm);
5801   }
Vbif(Condition cond,QRegister rd,QRegister rn,QRegister rm)5802   void Vbif(Condition cond, QRegister rd, QRegister rn, QRegister rm) {
5803     Vbif(cond, kDataTypeValueNone, rd, rn, rm);
5804   }
Vbif(QRegister rd,QRegister rn,QRegister rm)5805   void Vbif(QRegister rd, QRegister rn, QRegister rm) {
5806     Vbif(al, kDataTypeValueNone, rd, rn, rm);
5807   }
5808 
Vbit(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)5809   void Vbit(
5810       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5811     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5812     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5813     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5814     VIXL_ASSERT(allow_macro_instructions_);
5815     VIXL_ASSERT(OutsideITBlock());
5816     MacroEmissionCheckScope guard(this);
5817     ITScope it_scope(this, &cond);
5818     vbit(cond, dt, rd, rn, rm);
5819   }
Vbit(DataType dt,DRegister rd,DRegister rn,DRegister rm)5820   void Vbit(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5821     Vbit(al, dt, rd, rn, rm);
5822   }
Vbit(Condition cond,DRegister rd,DRegister rn,DRegister rm)5823   void Vbit(Condition cond, DRegister rd, DRegister rn, DRegister rm) {
5824     Vbit(cond, kDataTypeValueNone, rd, rn, rm);
5825   }
Vbit(DRegister rd,DRegister rn,DRegister rm)5826   void Vbit(DRegister rd, DRegister rn, DRegister rm) {
5827     Vbit(al, kDataTypeValueNone, rd, rn, rm);
5828   }
5829 
Vbit(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)5830   void Vbit(
5831       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5832     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5833     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5834     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5835     VIXL_ASSERT(allow_macro_instructions_);
5836     VIXL_ASSERT(OutsideITBlock());
5837     MacroEmissionCheckScope guard(this);
5838     ITScope it_scope(this, &cond);
5839     vbit(cond, dt, rd, rn, rm);
5840   }
Vbit(DataType dt,QRegister rd,QRegister rn,QRegister rm)5841   void Vbit(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5842     Vbit(al, dt, rd, rn, rm);
5843   }
Vbit(Condition cond,QRegister rd,QRegister rn,QRegister rm)5844   void Vbit(Condition cond, QRegister rd, QRegister rn, QRegister rm) {
5845     Vbit(cond, kDataTypeValueNone, rd, rn, rm);
5846   }
Vbit(QRegister rd,QRegister rn,QRegister rm)5847   void Vbit(QRegister rd, QRegister rn, QRegister rm) {
5848     Vbit(al, kDataTypeValueNone, rd, rn, rm);
5849   }
5850 
Vbsl(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)5851   void Vbsl(
5852       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5853     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5854     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5855     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5856     VIXL_ASSERT(allow_macro_instructions_);
5857     VIXL_ASSERT(OutsideITBlock());
5858     MacroEmissionCheckScope guard(this);
5859     ITScope it_scope(this, &cond);
5860     vbsl(cond, dt, rd, rn, rm);
5861   }
Vbsl(DataType dt,DRegister rd,DRegister rn,DRegister rm)5862   void Vbsl(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5863     Vbsl(al, dt, rd, rn, rm);
5864   }
Vbsl(Condition cond,DRegister rd,DRegister rn,DRegister rm)5865   void Vbsl(Condition cond, DRegister rd, DRegister rn, DRegister rm) {
5866     Vbsl(cond, kDataTypeValueNone, rd, rn, rm);
5867   }
Vbsl(DRegister rd,DRegister rn,DRegister rm)5868   void Vbsl(DRegister rd, DRegister rn, DRegister rm) {
5869     Vbsl(al, kDataTypeValueNone, rd, rn, rm);
5870   }
5871 
Vbsl(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)5872   void Vbsl(
5873       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5874     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5875     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5876     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5877     VIXL_ASSERT(allow_macro_instructions_);
5878     VIXL_ASSERT(OutsideITBlock());
5879     MacroEmissionCheckScope guard(this);
5880     ITScope it_scope(this, &cond);
5881     vbsl(cond, dt, rd, rn, rm);
5882   }
Vbsl(DataType dt,QRegister rd,QRegister rn,QRegister rm)5883   void Vbsl(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5884     Vbsl(al, dt, rd, rn, rm);
5885   }
Vbsl(Condition cond,QRegister rd,QRegister rn,QRegister rm)5886   void Vbsl(Condition cond, QRegister rd, QRegister rn, QRegister rm) {
5887     Vbsl(cond, kDataTypeValueNone, rd, rn, rm);
5888   }
Vbsl(QRegister rd,QRegister rn,QRegister rm)5889   void Vbsl(QRegister rd, QRegister rn, QRegister rm) {
5890     Vbsl(al, kDataTypeValueNone, rd, rn, rm);
5891   }
5892 
Vceq(Condition cond,DataType dt,DRegister rd,DRegister rm,const DOperand & operand)5893   void Vceq(Condition cond,
5894             DataType dt,
5895             DRegister rd,
5896             DRegister rm,
5897             const DOperand& operand) {
5898     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5899     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5900     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
5901     VIXL_ASSERT(allow_macro_instructions_);
5902     VIXL_ASSERT(OutsideITBlock());
5903     MacroEmissionCheckScope guard(this);
5904     ITScope it_scope(this, &cond);
5905     vceq(cond, dt, rd, rm, operand);
5906   }
Vceq(DataType dt,DRegister rd,DRegister rm,const DOperand & operand)5907   void Vceq(DataType dt, DRegister rd, DRegister rm, const DOperand& operand) {
5908     Vceq(al, dt, rd, rm, operand);
5909   }
5910 
Vceq(Condition cond,DataType dt,QRegister rd,QRegister rm,const QOperand & operand)5911   void Vceq(Condition cond,
5912             DataType dt,
5913             QRegister rd,
5914             QRegister rm,
5915             const QOperand& operand) {
5916     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5917     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5918     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
5919     VIXL_ASSERT(allow_macro_instructions_);
5920     VIXL_ASSERT(OutsideITBlock());
5921     MacroEmissionCheckScope guard(this);
5922     ITScope it_scope(this, &cond);
5923     vceq(cond, dt, rd, rm, operand);
5924   }
Vceq(DataType dt,QRegister rd,QRegister rm,const QOperand & operand)5925   void Vceq(DataType dt, QRegister rd, QRegister rm, const QOperand& operand) {
5926     Vceq(al, dt, rd, rm, operand);
5927   }
5928 
Vceq(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)5929   void Vceq(
5930       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5931     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5932     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5933     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5934     VIXL_ASSERT(allow_macro_instructions_);
5935     VIXL_ASSERT(OutsideITBlock());
5936     MacroEmissionCheckScope guard(this);
5937     ITScope it_scope(this, &cond);
5938     vceq(cond, dt, rd, rn, rm);
5939   }
Vceq(DataType dt,DRegister rd,DRegister rn,DRegister rm)5940   void Vceq(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5941     Vceq(al, dt, rd, rn, rm);
5942   }
5943 
Vceq(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)5944   void Vceq(
5945       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5946     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5947     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5948     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5949     VIXL_ASSERT(allow_macro_instructions_);
5950     VIXL_ASSERT(OutsideITBlock());
5951     MacroEmissionCheckScope guard(this);
5952     ITScope it_scope(this, &cond);
5953     vceq(cond, dt, rd, rn, rm);
5954   }
Vceq(DataType dt,QRegister rd,QRegister rn,QRegister rm)5955   void Vceq(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5956     Vceq(al, dt, rd, rn, rm);
5957   }
5958 
Vcge(Condition cond,DataType dt,DRegister rd,DRegister rm,const DOperand & operand)5959   void Vcge(Condition cond,
5960             DataType dt,
5961             DRegister rd,
5962             DRegister rm,
5963             const DOperand& operand) {
5964     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5965     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5966     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
5967     VIXL_ASSERT(allow_macro_instructions_);
5968     VIXL_ASSERT(OutsideITBlock());
5969     MacroEmissionCheckScope guard(this);
5970     ITScope it_scope(this, &cond);
5971     vcge(cond, dt, rd, rm, operand);
5972   }
Vcge(DataType dt,DRegister rd,DRegister rm,const DOperand & operand)5973   void Vcge(DataType dt, DRegister rd, DRegister rm, const DOperand& operand) {
5974     Vcge(al, dt, rd, rm, operand);
5975   }
5976 
Vcge(Condition cond,DataType dt,QRegister rd,QRegister rm,const QOperand & operand)5977   void Vcge(Condition cond,
5978             DataType dt,
5979             QRegister rd,
5980             QRegister rm,
5981             const QOperand& operand) {
5982     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5983     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5984     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
5985     VIXL_ASSERT(allow_macro_instructions_);
5986     VIXL_ASSERT(OutsideITBlock());
5987     MacroEmissionCheckScope guard(this);
5988     ITScope it_scope(this, &cond);
5989     vcge(cond, dt, rd, rm, operand);
5990   }
Vcge(DataType dt,QRegister rd,QRegister rm,const QOperand & operand)5991   void Vcge(DataType dt, QRegister rd, QRegister rm, const QOperand& operand) {
5992     Vcge(al, dt, rd, rm, operand);
5993   }
5994 
Vcge(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)5995   void Vcge(
5996       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5997     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5998     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5999     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6000     VIXL_ASSERT(allow_macro_instructions_);
6001     VIXL_ASSERT(OutsideITBlock());
6002     MacroEmissionCheckScope guard(this);
6003     ITScope it_scope(this, &cond);
6004     vcge(cond, dt, rd, rn, rm);
6005   }
Vcge(DataType dt,DRegister rd,DRegister rn,DRegister rm)6006   void Vcge(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
6007     Vcge(al, dt, rd, rn, rm);
6008   }
6009 
Vcge(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)6010   void Vcge(
6011       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
6012     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6013     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
6014     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6015     VIXL_ASSERT(allow_macro_instructions_);
6016     VIXL_ASSERT(OutsideITBlock());
6017     MacroEmissionCheckScope guard(this);
6018     ITScope it_scope(this, &cond);
6019     vcge(cond, dt, rd, rn, rm);
6020   }
Vcge(DataType dt,QRegister rd,QRegister rn,QRegister rm)6021   void Vcge(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
6022     Vcge(al, dt, rd, rn, rm);
6023   }
6024 
Vcgt(Condition cond,DataType dt,DRegister rd,DRegister rm,const DOperand & operand)6025   void Vcgt(Condition cond,
6026             DataType dt,
6027             DRegister rd,
6028             DRegister rm,
6029             const DOperand& operand) {
6030     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6031     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6032     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
6033     VIXL_ASSERT(allow_macro_instructions_);
6034     VIXL_ASSERT(OutsideITBlock());
6035     MacroEmissionCheckScope guard(this);
6036     ITScope it_scope(this, &cond);
6037     vcgt(cond, dt, rd, rm, operand);
6038   }
Vcgt(DataType dt,DRegister rd,DRegister rm,const DOperand & operand)6039   void Vcgt(DataType dt, DRegister rd, DRegister rm, const DOperand& operand) {
6040     Vcgt(al, dt, rd, rm, operand);
6041   }
6042 
Vcgt(Condition cond,DataType dt,QRegister rd,QRegister rm,const QOperand & operand)6043   void Vcgt(Condition cond,
6044             DataType dt,
6045             QRegister rd,
6046             QRegister rm,
6047             const QOperand& operand) {
6048     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6049     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6050     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
6051     VIXL_ASSERT(allow_macro_instructions_);
6052     VIXL_ASSERT(OutsideITBlock());
6053     MacroEmissionCheckScope guard(this);
6054     ITScope it_scope(this, &cond);
6055     vcgt(cond, dt, rd, rm, operand);
6056   }
Vcgt(DataType dt,QRegister rd,QRegister rm,const QOperand & operand)6057   void Vcgt(DataType dt, QRegister rd, QRegister rm, const QOperand& operand) {
6058     Vcgt(al, dt, rd, rm, operand);
6059   }
6060 
Vcgt(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)6061   void Vcgt(
6062       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
6063     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6064     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
6065     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6066     VIXL_ASSERT(allow_macro_instructions_);
6067     VIXL_ASSERT(OutsideITBlock());
6068     MacroEmissionCheckScope guard(this);
6069     ITScope it_scope(this, &cond);
6070     vcgt(cond, dt, rd, rn, rm);
6071   }
Vcgt(DataType dt,DRegister rd,DRegister rn,DRegister rm)6072   void Vcgt(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
6073     Vcgt(al, dt, rd, rn, rm);
6074   }
6075 
Vcgt(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)6076   void Vcgt(
6077       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
6078     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6079     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
6080     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6081     VIXL_ASSERT(allow_macro_instructions_);
6082     VIXL_ASSERT(OutsideITBlock());
6083     MacroEmissionCheckScope guard(this);
6084     ITScope it_scope(this, &cond);
6085     vcgt(cond, dt, rd, rn, rm);
6086   }
Vcgt(DataType dt,QRegister rd,QRegister rn,QRegister rm)6087   void Vcgt(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
6088     Vcgt(al, dt, rd, rn, rm);
6089   }
6090 
Vcle(Condition cond,DataType dt,DRegister rd,DRegister rm,const DOperand & operand)6091   void Vcle(Condition cond,
6092             DataType dt,
6093             DRegister rd,
6094             DRegister rm,
6095             const DOperand& operand) {
6096     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6097     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6098     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
6099     VIXL_ASSERT(allow_macro_instructions_);
6100     VIXL_ASSERT(OutsideITBlock());
6101     MacroEmissionCheckScope guard(this);
6102     ITScope it_scope(this, &cond);
6103     vcle(cond, dt, rd, rm, operand);
6104   }
Vcle(DataType dt,DRegister rd,DRegister rm,const DOperand & operand)6105   void Vcle(DataType dt, DRegister rd, DRegister rm, const DOperand& operand) {
6106     Vcle(al, dt, rd, rm, operand);
6107   }
6108 
Vcle(Condition cond,DataType dt,QRegister rd,QRegister rm,const QOperand & operand)6109   void Vcle(Condition cond,
6110             DataType dt,
6111             QRegister rd,
6112             QRegister rm,
6113             const QOperand& operand) {
6114     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6115     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6116     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
6117     VIXL_ASSERT(allow_macro_instructions_);
6118     VIXL_ASSERT(OutsideITBlock());
6119     MacroEmissionCheckScope guard(this);
6120     ITScope it_scope(this, &cond);
6121     vcle(cond, dt, rd, rm, operand);
6122   }
Vcle(DataType dt,QRegister rd,QRegister rm,const QOperand & operand)6123   void Vcle(DataType dt, QRegister rd, QRegister rm, const QOperand& operand) {
6124     Vcle(al, dt, rd, rm, operand);
6125   }
6126 
Vcle(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)6127   void Vcle(
6128       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
6129     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6130     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
6131     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6132     VIXL_ASSERT(allow_macro_instructions_);
6133     VIXL_ASSERT(OutsideITBlock());
6134     MacroEmissionCheckScope guard(this);
6135     ITScope it_scope(this, &cond);
6136     vcle(cond, dt, rd, rn, rm);
6137   }
Vcle(DataType dt,DRegister rd,DRegister rn,DRegister rm)6138   void Vcle(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
6139     Vcle(al, dt, rd, rn, rm);
6140   }
6141 
Vcle(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)6142   void Vcle(
6143       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
6144     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6145     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
6146     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6147     VIXL_ASSERT(allow_macro_instructions_);
6148     VIXL_ASSERT(OutsideITBlock());
6149     MacroEmissionCheckScope guard(this);
6150     ITScope it_scope(this, &cond);
6151     vcle(cond, dt, rd, rn, rm);
6152   }
Vcle(DataType dt,QRegister rd,QRegister rn,QRegister rm)6153   void Vcle(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
6154     Vcle(al, dt, rd, rn, rm);
6155   }
6156 
Vcls(Condition cond,DataType dt,DRegister rd,DRegister rm)6157   void Vcls(Condition cond, DataType dt, DRegister rd, DRegister rm) {
6158     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6159     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6160     VIXL_ASSERT(allow_macro_instructions_);
6161     VIXL_ASSERT(OutsideITBlock());
6162     MacroEmissionCheckScope guard(this);
6163     ITScope it_scope(this, &cond);
6164     vcls(cond, dt, rd, rm);
6165   }
Vcls(DataType dt,DRegister rd,DRegister rm)6166   void Vcls(DataType dt, DRegister rd, DRegister rm) { Vcls(al, dt, rd, rm); }
6167 
Vcls(Condition cond,DataType dt,QRegister rd,QRegister rm)6168   void Vcls(Condition cond, DataType dt, QRegister rd, QRegister rm) {
6169     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6170     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6171     VIXL_ASSERT(allow_macro_instructions_);
6172     VIXL_ASSERT(OutsideITBlock());
6173     MacroEmissionCheckScope guard(this);
6174     ITScope it_scope(this, &cond);
6175     vcls(cond, dt, rd, rm);
6176   }
Vcls(DataType dt,QRegister rd,QRegister rm)6177   void Vcls(DataType dt, QRegister rd, QRegister rm) { Vcls(al, dt, rd, rm); }
6178 
Vclt(Condition cond,DataType dt,DRegister rd,DRegister rm,const DOperand & operand)6179   void Vclt(Condition cond,
6180             DataType dt,
6181             DRegister rd,
6182             DRegister rm,
6183             const DOperand& operand) {
6184     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6185     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6186     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
6187     VIXL_ASSERT(allow_macro_instructions_);
6188     VIXL_ASSERT(OutsideITBlock());
6189     MacroEmissionCheckScope guard(this);
6190     ITScope it_scope(this, &cond);
6191     vclt(cond, dt, rd, rm, operand);
6192   }
Vclt(DataType dt,DRegister rd,DRegister rm,const DOperand & operand)6193   void Vclt(DataType dt, DRegister rd, DRegister rm, const DOperand& operand) {
6194     Vclt(al, dt, rd, rm, operand);
6195   }
6196 
Vclt(Condition cond,DataType dt,QRegister rd,QRegister rm,const QOperand & operand)6197   void Vclt(Condition cond,
6198             DataType dt,
6199             QRegister rd,
6200             QRegister rm,
6201             const QOperand& operand) {
6202     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6203     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6204     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
6205     VIXL_ASSERT(allow_macro_instructions_);
6206     VIXL_ASSERT(OutsideITBlock());
6207     MacroEmissionCheckScope guard(this);
6208     ITScope it_scope(this, &cond);
6209     vclt(cond, dt, rd, rm, operand);
6210   }
Vclt(DataType dt,QRegister rd,QRegister rm,const QOperand & operand)6211   void Vclt(DataType dt, QRegister rd, QRegister rm, const QOperand& operand) {
6212     Vclt(al, dt, rd, rm, operand);
6213   }
6214 
Vclt(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)6215   void Vclt(
6216       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
6217     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6218     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
6219     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6220     VIXL_ASSERT(allow_macro_instructions_);
6221     VIXL_ASSERT(OutsideITBlock());
6222     MacroEmissionCheckScope guard(this);
6223     ITScope it_scope(this, &cond);
6224     vclt(cond, dt, rd, rn, rm);
6225   }
Vclt(DataType dt,DRegister rd,DRegister rn,DRegister rm)6226   void Vclt(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
6227     Vclt(al, dt, rd, rn, rm);
6228   }
6229 
Vclt(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)6230   void Vclt(
6231       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
6232     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6233     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
6234     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6235     VIXL_ASSERT(allow_macro_instructions_);
6236     VIXL_ASSERT(OutsideITBlock());
6237     MacroEmissionCheckScope guard(this);
6238     ITScope it_scope(this, &cond);
6239     vclt(cond, dt, rd, rn, rm);
6240   }
Vclt(DataType dt,QRegister rd,QRegister rn,QRegister rm)6241   void Vclt(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
6242     Vclt(al, dt, rd, rn, rm);
6243   }
6244 
Vclz(Condition cond,DataType dt,DRegister rd,DRegister rm)6245   void Vclz(Condition cond, DataType dt, DRegister rd, DRegister rm) {
6246     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6247     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6248     VIXL_ASSERT(allow_macro_instructions_);
6249     VIXL_ASSERT(OutsideITBlock());
6250     MacroEmissionCheckScope guard(this);
6251     ITScope it_scope(this, &cond);
6252     vclz(cond, dt, rd, rm);
6253   }
Vclz(DataType dt,DRegister rd,DRegister rm)6254   void Vclz(DataType dt, DRegister rd, DRegister rm) { Vclz(al, dt, rd, rm); }
6255 
Vclz(Condition cond,DataType dt,QRegister rd,QRegister rm)6256   void Vclz(Condition cond, DataType dt, QRegister rd, QRegister rm) {
6257     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6258     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6259     VIXL_ASSERT(allow_macro_instructions_);
6260     VIXL_ASSERT(OutsideITBlock());
6261     MacroEmissionCheckScope guard(this);
6262     ITScope it_scope(this, &cond);
6263     vclz(cond, dt, rd, rm);
6264   }
Vclz(DataType dt,QRegister rd,QRegister rm)6265   void Vclz(DataType dt, QRegister rd, QRegister rm) { Vclz(al, dt, rd, rm); }
6266 
Vcmp(Condition cond,DataType dt,SRegister rd,SRegister rm)6267   void Vcmp(Condition cond, DataType dt, SRegister rd, SRegister rm) {
6268     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6269     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6270     VIXL_ASSERT(allow_macro_instructions_);
6271     VIXL_ASSERT(OutsideITBlock());
6272     MacroEmissionCheckScope guard(this);
6273     ITScope it_scope(this, &cond);
6274     vcmp(cond, dt, rd, rm);
6275   }
Vcmp(DataType dt,SRegister rd,SRegister rm)6276   void Vcmp(DataType dt, SRegister rd, SRegister rm) { Vcmp(al, dt, rd, rm); }
6277 
Vcmp(Condition cond,DataType dt,DRegister rd,DRegister rm)6278   void Vcmp(Condition cond, DataType dt, DRegister rd, DRegister rm) {
6279     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6280     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6281     VIXL_ASSERT(allow_macro_instructions_);
6282     VIXL_ASSERT(OutsideITBlock());
6283     MacroEmissionCheckScope guard(this);
6284     ITScope it_scope(this, &cond);
6285     vcmp(cond, dt, rd, rm);
6286   }
Vcmp(DataType dt,DRegister rd,DRegister rm)6287   void Vcmp(DataType dt, DRegister rd, DRegister rm) { Vcmp(al, dt, rd, rm); }
6288 
Vcmp(Condition cond,DataType dt,SRegister rd,double imm)6289   void Vcmp(Condition cond, DataType dt, SRegister rd, double imm) {
6290     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6291     VIXL_ASSERT(allow_macro_instructions_);
6292     VIXL_ASSERT(OutsideITBlock());
6293     MacroEmissionCheckScope guard(this);
6294     ITScope it_scope(this, &cond);
6295     vcmp(cond, dt, rd, imm);
6296   }
Vcmp(DataType dt,SRegister rd,double imm)6297   void Vcmp(DataType dt, SRegister rd, double imm) { Vcmp(al, dt, rd, imm); }
6298 
Vcmp(Condition cond,DataType dt,DRegister rd,double imm)6299   void Vcmp(Condition cond, DataType dt, DRegister rd, double imm) {
6300     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6301     VIXL_ASSERT(allow_macro_instructions_);
6302     VIXL_ASSERT(OutsideITBlock());
6303     MacroEmissionCheckScope guard(this);
6304     ITScope it_scope(this, &cond);
6305     vcmp(cond, dt, rd, imm);
6306   }
Vcmp(DataType dt,DRegister rd,double imm)6307   void Vcmp(DataType dt, DRegister rd, double imm) { Vcmp(al, dt, rd, imm); }
6308 
Vcmpe(Condition cond,DataType dt,SRegister rd,SRegister rm)6309   void Vcmpe(Condition cond, DataType dt, SRegister rd, SRegister rm) {
6310     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6311     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6312     VIXL_ASSERT(allow_macro_instructions_);
6313     VIXL_ASSERT(OutsideITBlock());
6314     MacroEmissionCheckScope guard(this);
6315     ITScope it_scope(this, &cond);
6316     vcmpe(cond, dt, rd, rm);
6317   }
Vcmpe(DataType dt,SRegister rd,SRegister rm)6318   void Vcmpe(DataType dt, SRegister rd, SRegister rm) { Vcmpe(al, dt, rd, rm); }
6319 
Vcmpe(Condition cond,DataType dt,DRegister rd,DRegister rm)6320   void Vcmpe(Condition cond, DataType dt, DRegister rd, DRegister rm) {
6321     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6322     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6323     VIXL_ASSERT(allow_macro_instructions_);
6324     VIXL_ASSERT(OutsideITBlock());
6325     MacroEmissionCheckScope guard(this);
6326     ITScope it_scope(this, &cond);
6327     vcmpe(cond, dt, rd, rm);
6328   }
Vcmpe(DataType dt,DRegister rd,DRegister rm)6329   void Vcmpe(DataType dt, DRegister rd, DRegister rm) { Vcmpe(al, dt, rd, rm); }
6330 
Vcmpe(Condition cond,DataType dt,SRegister rd,double imm)6331   void Vcmpe(Condition cond, DataType dt, SRegister rd, double imm) {
6332     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6333     VIXL_ASSERT(allow_macro_instructions_);
6334     VIXL_ASSERT(OutsideITBlock());
6335     MacroEmissionCheckScope guard(this);
6336     ITScope it_scope(this, &cond);
6337     vcmpe(cond, dt, rd, imm);
6338   }
Vcmpe(DataType dt,SRegister rd,double imm)6339   void Vcmpe(DataType dt, SRegister rd, double imm) { Vcmpe(al, dt, rd, imm); }
6340 
Vcmpe(Condition cond,DataType dt,DRegister rd,double imm)6341   void Vcmpe(Condition cond, DataType dt, DRegister rd, double imm) {
6342     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6343     VIXL_ASSERT(allow_macro_instructions_);
6344     VIXL_ASSERT(OutsideITBlock());
6345     MacroEmissionCheckScope guard(this);
6346     ITScope it_scope(this, &cond);
6347     vcmpe(cond, dt, rd, imm);
6348   }
Vcmpe(DataType dt,DRegister rd,double imm)6349   void Vcmpe(DataType dt, DRegister rd, double imm) { Vcmpe(al, dt, rd, imm); }
6350 
Vcnt(Condition cond,DataType dt,DRegister rd,DRegister rm)6351   void Vcnt(Condition cond, DataType dt, DRegister rd, DRegister rm) {
6352     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6353     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6354     VIXL_ASSERT(allow_macro_instructions_);
6355     VIXL_ASSERT(OutsideITBlock());
6356     MacroEmissionCheckScope guard(this);
6357     ITScope it_scope(this, &cond);
6358     vcnt(cond, dt, rd, rm);
6359   }
Vcnt(DataType dt,DRegister rd,DRegister rm)6360   void Vcnt(DataType dt, DRegister rd, DRegister rm) { Vcnt(al, dt, rd, rm); }
6361 
Vcnt(Condition cond,DataType dt,QRegister rd,QRegister rm)6362   void Vcnt(Condition cond, DataType dt, QRegister rd, QRegister rm) {
6363     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6364     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6365     VIXL_ASSERT(allow_macro_instructions_);
6366     VIXL_ASSERT(OutsideITBlock());
6367     MacroEmissionCheckScope guard(this);
6368     ITScope it_scope(this, &cond);
6369     vcnt(cond, dt, rd, rm);
6370   }
Vcnt(DataType dt,QRegister rd,QRegister rm)6371   void Vcnt(DataType dt, QRegister rd, QRegister rm) { Vcnt(al, dt, rd, rm); }
6372 
Vcvt(Condition cond,DataType dt1,DataType dt2,DRegister rd,SRegister rm)6373   void Vcvt(
6374       Condition cond, DataType dt1, DataType dt2, DRegister rd, SRegister rm) {
6375     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6376     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6377     VIXL_ASSERT(allow_macro_instructions_);
6378     VIXL_ASSERT(OutsideITBlock());
6379     MacroEmissionCheckScope guard(this);
6380     ITScope it_scope(this, &cond);
6381     vcvt(cond, dt1, dt2, rd, rm);
6382   }
Vcvt(DataType dt1,DataType dt2,DRegister rd,SRegister rm)6383   void Vcvt(DataType dt1, DataType dt2, DRegister rd, SRegister rm) {
6384     Vcvt(al, dt1, dt2, rd, rm);
6385   }
6386 
Vcvt(Condition cond,DataType dt1,DataType dt2,SRegister rd,DRegister rm)6387   void Vcvt(
6388       Condition cond, DataType dt1, DataType dt2, SRegister rd, DRegister rm) {
6389     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6390     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6391     VIXL_ASSERT(allow_macro_instructions_);
6392     VIXL_ASSERT(OutsideITBlock());
6393     MacroEmissionCheckScope guard(this);
6394     ITScope it_scope(this, &cond);
6395     vcvt(cond, dt1, dt2, rd, rm);
6396   }
Vcvt(DataType dt1,DataType dt2,SRegister rd,DRegister rm)6397   void Vcvt(DataType dt1, DataType dt2, SRegister rd, DRegister rm) {
6398     Vcvt(al, dt1, dt2, rd, rm);
6399   }
6400 
Vcvt(Condition cond,DataType dt1,DataType dt2,DRegister rd,DRegister rm,int32_t fbits)6401   void Vcvt(Condition cond,
6402             DataType dt1,
6403             DataType dt2,
6404             DRegister rd,
6405             DRegister rm,
6406             int32_t fbits) {
6407     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6408     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6409     VIXL_ASSERT(allow_macro_instructions_);
6410     VIXL_ASSERT(OutsideITBlock());
6411     MacroEmissionCheckScope guard(this);
6412     ITScope it_scope(this, &cond);
6413     vcvt(cond, dt1, dt2, rd, rm, fbits);
6414   }
Vcvt(DataType dt1,DataType dt2,DRegister rd,DRegister rm,int32_t fbits)6415   void Vcvt(
6416       DataType dt1, DataType dt2, DRegister rd, DRegister rm, int32_t fbits) {
6417     Vcvt(al, dt1, dt2, rd, rm, fbits);
6418   }
6419 
Vcvt(Condition cond,DataType dt1,DataType dt2,QRegister rd,QRegister rm,int32_t fbits)6420   void Vcvt(Condition cond,
6421             DataType dt1,
6422             DataType dt2,
6423             QRegister rd,
6424             QRegister rm,
6425             int32_t fbits) {
6426     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6427     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6428     VIXL_ASSERT(allow_macro_instructions_);
6429     VIXL_ASSERT(OutsideITBlock());
6430     MacroEmissionCheckScope guard(this);
6431     ITScope it_scope(this, &cond);
6432     vcvt(cond, dt1, dt2, rd, rm, fbits);
6433   }
Vcvt(DataType dt1,DataType dt2,QRegister rd,QRegister rm,int32_t fbits)6434   void Vcvt(
6435       DataType dt1, DataType dt2, QRegister rd, QRegister rm, int32_t fbits) {
6436     Vcvt(al, dt1, dt2, rd, rm, fbits);
6437   }
6438 
Vcvt(Condition cond,DataType dt1,DataType dt2,SRegister rd,SRegister rm,int32_t fbits)6439   void Vcvt(Condition cond,
6440             DataType dt1,
6441             DataType dt2,
6442             SRegister rd,
6443             SRegister rm,
6444             int32_t fbits) {
6445     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6446     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6447     VIXL_ASSERT(allow_macro_instructions_);
6448     VIXL_ASSERT(OutsideITBlock());
6449     MacroEmissionCheckScope guard(this);
6450     ITScope it_scope(this, &cond);
6451     vcvt(cond, dt1, dt2, rd, rm, fbits);
6452   }
Vcvt(DataType dt1,DataType dt2,SRegister rd,SRegister rm,int32_t fbits)6453   void Vcvt(
6454       DataType dt1, DataType dt2, SRegister rd, SRegister rm, int32_t fbits) {
6455     Vcvt(al, dt1, dt2, rd, rm, fbits);
6456   }
6457 
Vcvt(Condition cond,DataType dt1,DataType dt2,DRegister rd,DRegister rm)6458   void Vcvt(
6459       Condition cond, DataType dt1, DataType dt2, DRegister rd, DRegister rm) {
6460     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6461     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6462     VIXL_ASSERT(allow_macro_instructions_);
6463     VIXL_ASSERT(OutsideITBlock());
6464     MacroEmissionCheckScope guard(this);
6465     ITScope it_scope(this, &cond);
6466     vcvt(cond, dt1, dt2, rd, rm);
6467   }
Vcvt(DataType dt1,DataType dt2,DRegister rd,DRegister rm)6468   void Vcvt(DataType dt1, DataType dt2, DRegister rd, DRegister rm) {
6469     Vcvt(al, dt1, dt2, rd, rm);
6470   }
6471 
Vcvt(Condition cond,DataType dt1,DataType dt2,QRegister rd,QRegister rm)6472   void Vcvt(
6473       Condition cond, DataType dt1, DataType dt2, QRegister rd, QRegister rm) {
6474     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6475     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6476     VIXL_ASSERT(allow_macro_instructions_);
6477     VIXL_ASSERT(OutsideITBlock());
6478     MacroEmissionCheckScope guard(this);
6479     ITScope it_scope(this, &cond);
6480     vcvt(cond, dt1, dt2, rd, rm);
6481   }
Vcvt(DataType dt1,DataType dt2,QRegister rd,QRegister rm)6482   void Vcvt(DataType dt1, DataType dt2, QRegister rd, QRegister rm) {
6483     Vcvt(al, dt1, dt2, rd, rm);
6484   }
6485 
Vcvt(Condition cond,DataType dt1,DataType dt2,DRegister rd,QRegister rm)6486   void Vcvt(
6487       Condition cond, DataType dt1, DataType dt2, DRegister rd, QRegister rm) {
6488     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6489     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6490     VIXL_ASSERT(allow_macro_instructions_);
6491     VIXL_ASSERT(OutsideITBlock());
6492     MacroEmissionCheckScope guard(this);
6493     ITScope it_scope(this, &cond);
6494     vcvt(cond, dt1, dt2, rd, rm);
6495   }
Vcvt(DataType dt1,DataType dt2,DRegister rd,QRegister rm)6496   void Vcvt(DataType dt1, DataType dt2, DRegister rd, QRegister rm) {
6497     Vcvt(al, dt1, dt2, rd, rm);
6498   }
6499 
Vcvt(Condition cond,DataType dt1,DataType dt2,QRegister rd,DRegister rm)6500   void Vcvt(
6501       Condition cond, DataType dt1, DataType dt2, QRegister rd, DRegister rm) {
6502     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6503     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6504     VIXL_ASSERT(allow_macro_instructions_);
6505     VIXL_ASSERT(OutsideITBlock());
6506     MacroEmissionCheckScope guard(this);
6507     ITScope it_scope(this, &cond);
6508     vcvt(cond, dt1, dt2, rd, rm);
6509   }
Vcvt(DataType dt1,DataType dt2,QRegister rd,DRegister rm)6510   void Vcvt(DataType dt1, DataType dt2, QRegister rd, DRegister rm) {
6511     Vcvt(al, dt1, dt2, rd, rm);
6512   }
6513 
Vcvt(Condition cond,DataType dt1,DataType dt2,SRegister rd,SRegister rm)6514   void Vcvt(
6515       Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm) {
6516     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6517     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6518     VIXL_ASSERT(allow_macro_instructions_);
6519     VIXL_ASSERT(OutsideITBlock());
6520     MacroEmissionCheckScope guard(this);
6521     ITScope it_scope(this, &cond);
6522     vcvt(cond, dt1, dt2, rd, rm);
6523   }
Vcvt(DataType dt1,DataType dt2,SRegister rd,SRegister rm)6524   void Vcvt(DataType dt1, DataType dt2, SRegister rd, SRegister rm) {
6525     Vcvt(al, dt1, dt2, rd, rm);
6526   }
6527 
Vcvta(DataType dt1,DataType dt2,DRegister rd,DRegister rm)6528   void Vcvta(DataType dt1, DataType dt2, DRegister rd, DRegister rm) {
6529     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6530     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6531     VIXL_ASSERT(allow_macro_instructions_);
6532     VIXL_ASSERT(OutsideITBlock());
6533     MacroEmissionCheckScope guard(this);
6534     vcvta(dt1, dt2, rd, rm);
6535   }
6536 
Vcvta(DataType dt1,DataType dt2,QRegister rd,QRegister rm)6537   void Vcvta(DataType dt1, DataType dt2, QRegister rd, QRegister rm) {
6538     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6539     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6540     VIXL_ASSERT(allow_macro_instructions_);
6541     VIXL_ASSERT(OutsideITBlock());
6542     MacroEmissionCheckScope guard(this);
6543     vcvta(dt1, dt2, rd, rm);
6544   }
6545 
Vcvta(DataType dt1,DataType dt2,SRegister rd,SRegister rm)6546   void Vcvta(DataType dt1, DataType dt2, SRegister rd, SRegister rm) {
6547     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6548     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6549     VIXL_ASSERT(allow_macro_instructions_);
6550     VIXL_ASSERT(OutsideITBlock());
6551     MacroEmissionCheckScope guard(this);
6552     vcvta(dt1, dt2, rd, rm);
6553   }
6554 
Vcvta(DataType dt1,DataType dt2,SRegister rd,DRegister rm)6555   void Vcvta(DataType dt1, DataType dt2, SRegister rd, DRegister rm) {
6556     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6557     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6558     VIXL_ASSERT(allow_macro_instructions_);
6559     VIXL_ASSERT(OutsideITBlock());
6560     MacroEmissionCheckScope guard(this);
6561     vcvta(dt1, dt2, rd, rm);
6562   }
6563 
Vcvtb(Condition cond,DataType dt1,DataType dt2,SRegister rd,SRegister rm)6564   void Vcvtb(
6565       Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm) {
6566     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6567     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6568     VIXL_ASSERT(allow_macro_instructions_);
6569     VIXL_ASSERT(OutsideITBlock());
6570     MacroEmissionCheckScope guard(this);
6571     ITScope it_scope(this, &cond);
6572     vcvtb(cond, dt1, dt2, rd, rm);
6573   }
Vcvtb(DataType dt1,DataType dt2,SRegister rd,SRegister rm)6574   void Vcvtb(DataType dt1, DataType dt2, SRegister rd, SRegister rm) {
6575     Vcvtb(al, dt1, dt2, rd, rm);
6576   }
6577 
Vcvtb(Condition cond,DataType dt1,DataType dt2,DRegister rd,SRegister rm)6578   void Vcvtb(
6579       Condition cond, DataType dt1, DataType dt2, DRegister rd, SRegister rm) {
6580     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6581     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6582     VIXL_ASSERT(allow_macro_instructions_);
6583     VIXL_ASSERT(OutsideITBlock());
6584     MacroEmissionCheckScope guard(this);
6585     ITScope it_scope(this, &cond);
6586     vcvtb(cond, dt1, dt2, rd, rm);
6587   }
Vcvtb(DataType dt1,DataType dt2,DRegister rd,SRegister rm)6588   void Vcvtb(DataType dt1, DataType dt2, DRegister rd, SRegister rm) {
6589     Vcvtb(al, dt1, dt2, rd, rm);
6590   }
6591 
Vcvtb(Condition cond,DataType dt1,DataType dt2,SRegister rd,DRegister rm)6592   void Vcvtb(
6593       Condition cond, DataType dt1, DataType dt2, SRegister rd, DRegister rm) {
6594     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6595     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6596     VIXL_ASSERT(allow_macro_instructions_);
6597     VIXL_ASSERT(OutsideITBlock());
6598     MacroEmissionCheckScope guard(this);
6599     ITScope it_scope(this, &cond);
6600     vcvtb(cond, dt1, dt2, rd, rm);
6601   }
Vcvtb(DataType dt1,DataType dt2,SRegister rd,DRegister rm)6602   void Vcvtb(DataType dt1, DataType dt2, SRegister rd, DRegister rm) {
6603     Vcvtb(al, dt1, dt2, rd, rm);
6604   }
6605 
Vcvtm(DataType dt1,DataType dt2,DRegister rd,DRegister rm)6606   void Vcvtm(DataType dt1, DataType dt2, DRegister rd, DRegister rm) {
6607     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6608     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6609     VIXL_ASSERT(allow_macro_instructions_);
6610     VIXL_ASSERT(OutsideITBlock());
6611     MacroEmissionCheckScope guard(this);
6612     vcvtm(dt1, dt2, rd, rm);
6613   }
6614 
Vcvtm(DataType dt1,DataType dt2,QRegister rd,QRegister rm)6615   void Vcvtm(DataType dt1, DataType dt2, QRegister rd, QRegister rm) {
6616     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6617     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6618     VIXL_ASSERT(allow_macro_instructions_);
6619     VIXL_ASSERT(OutsideITBlock());
6620     MacroEmissionCheckScope guard(this);
6621     vcvtm(dt1, dt2, rd, rm);
6622   }
6623 
Vcvtm(DataType dt1,DataType dt2,SRegister rd,SRegister rm)6624   void Vcvtm(DataType dt1, DataType dt2, SRegister rd, SRegister rm) {
6625     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6626     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6627     VIXL_ASSERT(allow_macro_instructions_);
6628     VIXL_ASSERT(OutsideITBlock());
6629     MacroEmissionCheckScope guard(this);
6630     vcvtm(dt1, dt2, rd, rm);
6631   }
6632 
Vcvtm(DataType dt1,DataType dt2,SRegister rd,DRegister rm)6633   void Vcvtm(DataType dt1, DataType dt2, SRegister rd, DRegister rm) {
6634     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6635     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6636     VIXL_ASSERT(allow_macro_instructions_);
6637     VIXL_ASSERT(OutsideITBlock());
6638     MacroEmissionCheckScope guard(this);
6639     vcvtm(dt1, dt2, rd, rm);
6640   }
6641 
Vcvtn(DataType dt1,DataType dt2,DRegister rd,DRegister rm)6642   void Vcvtn(DataType dt1, DataType dt2, DRegister rd, DRegister rm) {
6643     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6644     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6645     VIXL_ASSERT(allow_macro_instructions_);
6646     VIXL_ASSERT(OutsideITBlock());
6647     MacroEmissionCheckScope guard(this);
6648     vcvtn(dt1, dt2, rd, rm);
6649   }
6650 
Vcvtn(DataType dt1,DataType dt2,QRegister rd,QRegister rm)6651   void Vcvtn(DataType dt1, DataType dt2, QRegister rd, QRegister rm) {
6652     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6653     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6654     VIXL_ASSERT(allow_macro_instructions_);
6655     VIXL_ASSERT(OutsideITBlock());
6656     MacroEmissionCheckScope guard(this);
6657     vcvtn(dt1, dt2, rd, rm);
6658   }
6659 
Vcvtn(DataType dt1,DataType dt2,SRegister rd,SRegister rm)6660   void Vcvtn(DataType dt1, DataType dt2, SRegister rd, SRegister rm) {
6661     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6662     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6663     VIXL_ASSERT(allow_macro_instructions_);
6664     VIXL_ASSERT(OutsideITBlock());
6665     MacroEmissionCheckScope guard(this);
6666     vcvtn(dt1, dt2, rd, rm);
6667   }
6668 
Vcvtn(DataType dt1,DataType dt2,SRegister rd,DRegister rm)6669   void Vcvtn(DataType dt1, DataType dt2, SRegister rd, DRegister rm) {
6670     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6671     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6672     VIXL_ASSERT(allow_macro_instructions_);
6673     VIXL_ASSERT(OutsideITBlock());
6674     MacroEmissionCheckScope guard(this);
6675     vcvtn(dt1, dt2, rd, rm);
6676   }
6677 
Vcvtp(DataType dt1,DataType dt2,DRegister rd,DRegister rm)6678   void Vcvtp(DataType dt1, DataType dt2, DRegister rd, DRegister rm) {
6679     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6680     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6681     VIXL_ASSERT(allow_macro_instructions_);
6682     VIXL_ASSERT(OutsideITBlock());
6683     MacroEmissionCheckScope guard(this);
6684     vcvtp(dt1, dt2, rd, rm);
6685   }
6686 
Vcvtp(DataType dt1,DataType dt2,QRegister rd,QRegister rm)6687   void Vcvtp(DataType dt1, DataType dt2, QRegister rd, QRegister rm) {
6688     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6689     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6690     VIXL_ASSERT(allow_macro_instructions_);
6691     VIXL_ASSERT(OutsideITBlock());
6692     MacroEmissionCheckScope guard(this);
6693     vcvtp(dt1, dt2, rd, rm);
6694   }
6695 
Vcvtp(DataType dt1,DataType dt2,SRegister rd,SRegister rm)6696   void Vcvtp(DataType dt1, DataType dt2, SRegister rd, SRegister rm) {
6697     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6698     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6699     VIXL_ASSERT(allow_macro_instructions_);
6700     VIXL_ASSERT(OutsideITBlock());
6701     MacroEmissionCheckScope guard(this);
6702     vcvtp(dt1, dt2, rd, rm);
6703   }
6704 
Vcvtp(DataType dt1,DataType dt2,SRegister rd,DRegister rm)6705   void Vcvtp(DataType dt1, DataType dt2, SRegister rd, DRegister rm) {
6706     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6707     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6708     VIXL_ASSERT(allow_macro_instructions_);
6709     VIXL_ASSERT(OutsideITBlock());
6710     MacroEmissionCheckScope guard(this);
6711     vcvtp(dt1, dt2, rd, rm);
6712   }
6713 
Vcvtr(Condition cond,DataType dt1,DataType dt2,SRegister rd,SRegister rm)6714   void Vcvtr(
6715       Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm) {
6716     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6717     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6718     VIXL_ASSERT(allow_macro_instructions_);
6719     VIXL_ASSERT(OutsideITBlock());
6720     MacroEmissionCheckScope guard(this);
6721     ITScope it_scope(this, &cond);
6722     vcvtr(cond, dt1, dt2, rd, rm);
6723   }
Vcvtr(DataType dt1,DataType dt2,SRegister rd,SRegister rm)6724   void Vcvtr(DataType dt1, DataType dt2, SRegister rd, SRegister rm) {
6725     Vcvtr(al, dt1, dt2, rd, rm);
6726   }
6727 
Vcvtr(Condition cond,DataType dt1,DataType dt2,SRegister rd,DRegister rm)6728   void Vcvtr(
6729       Condition cond, DataType dt1, DataType dt2, SRegister rd, DRegister rm) {
6730     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6731     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6732     VIXL_ASSERT(allow_macro_instructions_);
6733     VIXL_ASSERT(OutsideITBlock());
6734     MacroEmissionCheckScope guard(this);
6735     ITScope it_scope(this, &cond);
6736     vcvtr(cond, dt1, dt2, rd, rm);
6737   }
Vcvtr(DataType dt1,DataType dt2,SRegister rd,DRegister rm)6738   void Vcvtr(DataType dt1, DataType dt2, SRegister rd, DRegister rm) {
6739     Vcvtr(al, dt1, dt2, rd, rm);
6740   }
6741 
Vcvtt(Condition cond,DataType dt1,DataType dt2,SRegister rd,SRegister rm)6742   void Vcvtt(
6743       Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm) {
6744     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6745     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6746     VIXL_ASSERT(allow_macro_instructions_);
6747     VIXL_ASSERT(OutsideITBlock());
6748     MacroEmissionCheckScope guard(this);
6749     ITScope it_scope(this, &cond);
6750     vcvtt(cond, dt1, dt2, rd, rm);
6751   }
Vcvtt(DataType dt1,DataType dt2,SRegister rd,SRegister rm)6752   void Vcvtt(DataType dt1, DataType dt2, SRegister rd, SRegister rm) {
6753     Vcvtt(al, dt1, dt2, rd, rm);
6754   }
6755 
Vcvtt(Condition cond,DataType dt1,DataType dt2,DRegister rd,SRegister rm)6756   void Vcvtt(
6757       Condition cond, DataType dt1, DataType dt2, DRegister rd, SRegister rm) {
6758     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6759     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6760     VIXL_ASSERT(allow_macro_instructions_);
6761     VIXL_ASSERT(OutsideITBlock());
6762     MacroEmissionCheckScope guard(this);
6763     ITScope it_scope(this, &cond);
6764     vcvtt(cond, dt1, dt2, rd, rm);
6765   }
Vcvtt(DataType dt1,DataType dt2,DRegister rd,SRegister rm)6766   void Vcvtt(DataType dt1, DataType dt2, DRegister rd, SRegister rm) {
6767     Vcvtt(al, dt1, dt2, rd, rm);
6768   }
6769 
Vcvtt(Condition cond,DataType dt1,DataType dt2,SRegister rd,DRegister rm)6770   void Vcvtt(
6771       Condition cond, DataType dt1, DataType dt2, SRegister rd, DRegister rm) {
6772     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6773     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6774     VIXL_ASSERT(allow_macro_instructions_);
6775     VIXL_ASSERT(OutsideITBlock());
6776     MacroEmissionCheckScope guard(this);
6777     ITScope it_scope(this, &cond);
6778     vcvtt(cond, dt1, dt2, rd, rm);
6779   }
Vcvtt(DataType dt1,DataType dt2,SRegister rd,DRegister rm)6780   void Vcvtt(DataType dt1, DataType dt2, SRegister rd, DRegister rm) {
6781     Vcvtt(al, dt1, dt2, rd, rm);
6782   }
6783 
Vdiv(Condition cond,DataType dt,SRegister rd,SRegister rn,SRegister rm)6784   void Vdiv(
6785       Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) {
6786     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6787     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
6788     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6789     VIXL_ASSERT(allow_macro_instructions_);
6790     VIXL_ASSERT(OutsideITBlock());
6791     MacroEmissionCheckScope guard(this);
6792     ITScope it_scope(this, &cond);
6793     vdiv(cond, dt, rd, rn, rm);
6794   }
Vdiv(DataType dt,SRegister rd,SRegister rn,SRegister rm)6795   void Vdiv(DataType dt, SRegister rd, SRegister rn, SRegister rm) {
6796     Vdiv(al, dt, rd, rn, rm);
6797   }
6798 
Vdiv(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)6799   void Vdiv(
6800       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
6801     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6802     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
6803     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6804     VIXL_ASSERT(allow_macro_instructions_);
6805     VIXL_ASSERT(OutsideITBlock());
6806     MacroEmissionCheckScope guard(this);
6807     ITScope it_scope(this, &cond);
6808     vdiv(cond, dt, rd, rn, rm);
6809   }
Vdiv(DataType dt,DRegister rd,DRegister rn,DRegister rm)6810   void Vdiv(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
6811     Vdiv(al, dt, rd, rn, rm);
6812   }
6813 
Vdup(Condition cond,DataType dt,QRegister rd,Register rt)6814   void Vdup(Condition cond, DataType dt, QRegister rd, Register rt) {
6815     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6816     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
6817     VIXL_ASSERT(allow_macro_instructions_);
6818     VIXL_ASSERT(OutsideITBlock());
6819     MacroEmissionCheckScope guard(this);
6820     ITScope it_scope(this, &cond);
6821     vdup(cond, dt, rd, rt);
6822   }
Vdup(DataType dt,QRegister rd,Register rt)6823   void Vdup(DataType dt, QRegister rd, Register rt) { Vdup(al, dt, rd, rt); }
6824 
Vdup(Condition cond,DataType dt,DRegister rd,Register rt)6825   void Vdup(Condition cond, DataType dt, DRegister rd, Register rt) {
6826     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6827     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
6828     VIXL_ASSERT(allow_macro_instructions_);
6829     VIXL_ASSERT(OutsideITBlock());
6830     MacroEmissionCheckScope guard(this);
6831     ITScope it_scope(this, &cond);
6832     vdup(cond, dt, rd, rt);
6833   }
Vdup(DataType dt,DRegister rd,Register rt)6834   void Vdup(DataType dt, DRegister rd, Register rt) { Vdup(al, dt, rd, rt); }
6835 
Vdup(Condition cond,DataType dt,DRegister rd,DRegisterLane rm)6836   void Vdup(Condition cond, DataType dt, DRegister rd, DRegisterLane rm) {
6837     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6838     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6839     VIXL_ASSERT(allow_macro_instructions_);
6840     VIXL_ASSERT(OutsideITBlock());
6841     MacroEmissionCheckScope guard(this);
6842     ITScope it_scope(this, &cond);
6843     vdup(cond, dt, rd, rm);
6844   }
Vdup(DataType dt,DRegister rd,DRegisterLane rm)6845   void Vdup(DataType dt, DRegister rd, DRegisterLane rm) {
6846     Vdup(al, dt, rd, rm);
6847   }
6848 
Vdup(Condition cond,DataType dt,QRegister rd,DRegisterLane rm)6849   void Vdup(Condition cond, DataType dt, QRegister rd, DRegisterLane rm) {
6850     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6851     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6852     VIXL_ASSERT(allow_macro_instructions_);
6853     VIXL_ASSERT(OutsideITBlock());
6854     MacroEmissionCheckScope guard(this);
6855     ITScope it_scope(this, &cond);
6856     vdup(cond, dt, rd, rm);
6857   }
Vdup(DataType dt,QRegister rd,DRegisterLane rm)6858   void Vdup(DataType dt, QRegister rd, DRegisterLane rm) {
6859     Vdup(al, dt, rd, rm);
6860   }
6861 
Veor(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)6862   void Veor(
6863       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
6864     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6865     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
6866     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6867     VIXL_ASSERT(allow_macro_instructions_);
6868     VIXL_ASSERT(OutsideITBlock());
6869     MacroEmissionCheckScope guard(this);
6870     ITScope it_scope(this, &cond);
6871     veor(cond, dt, rd, rn, rm);
6872   }
Veor(DataType dt,DRegister rd,DRegister rn,DRegister rm)6873   void Veor(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
6874     Veor(al, dt, rd, rn, rm);
6875   }
Veor(Condition cond,DRegister rd,DRegister rn,DRegister rm)6876   void Veor(Condition cond, DRegister rd, DRegister rn, DRegister rm) {
6877     Veor(cond, kDataTypeValueNone, rd, rn, rm);
6878   }
Veor(DRegister rd,DRegister rn,DRegister rm)6879   void Veor(DRegister rd, DRegister rn, DRegister rm) {
6880     Veor(al, kDataTypeValueNone, rd, rn, rm);
6881   }
6882 
Veor(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)6883   void Veor(
6884       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
6885     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6886     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
6887     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6888     VIXL_ASSERT(allow_macro_instructions_);
6889     VIXL_ASSERT(OutsideITBlock());
6890     MacroEmissionCheckScope guard(this);
6891     ITScope it_scope(this, &cond);
6892     veor(cond, dt, rd, rn, rm);
6893   }
Veor(DataType dt,QRegister rd,QRegister rn,QRegister rm)6894   void Veor(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
6895     Veor(al, dt, rd, rn, rm);
6896   }
Veor(Condition cond,QRegister rd,QRegister rn,QRegister rm)6897   void Veor(Condition cond, QRegister rd, QRegister rn, QRegister rm) {
6898     Veor(cond, kDataTypeValueNone, rd, rn, rm);
6899   }
Veor(QRegister rd,QRegister rn,QRegister rm)6900   void Veor(QRegister rd, QRegister rn, QRegister rm) {
6901     Veor(al, kDataTypeValueNone, rd, rn, rm);
6902   }
6903 
Vext(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm,const DOperand & operand)6904   void Vext(Condition cond,
6905             DataType dt,
6906             DRegister rd,
6907             DRegister rn,
6908             DRegister rm,
6909             const DOperand& operand) {
6910     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6911     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
6912     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6913     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
6914     VIXL_ASSERT(allow_macro_instructions_);
6915     VIXL_ASSERT(OutsideITBlock());
6916     MacroEmissionCheckScope guard(this);
6917     ITScope it_scope(this, &cond);
6918     vext(cond, dt, rd, rn, rm, operand);
6919   }
Vext(DataType dt,DRegister rd,DRegister rn,DRegister rm,const DOperand & operand)6920   void Vext(DataType dt,
6921             DRegister rd,
6922             DRegister rn,
6923             DRegister rm,
6924             const DOperand& operand) {
6925     Vext(al, dt, rd, rn, rm, operand);
6926   }
6927 
Vext(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm,const QOperand & operand)6928   void Vext(Condition cond,
6929             DataType dt,
6930             QRegister rd,
6931             QRegister rn,
6932             QRegister rm,
6933             const QOperand& operand) {
6934     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6935     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
6936     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6937     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
6938     VIXL_ASSERT(allow_macro_instructions_);
6939     VIXL_ASSERT(OutsideITBlock());
6940     MacroEmissionCheckScope guard(this);
6941     ITScope it_scope(this, &cond);
6942     vext(cond, dt, rd, rn, rm, operand);
6943   }
Vext(DataType dt,QRegister rd,QRegister rn,QRegister rm,const QOperand & operand)6944   void Vext(DataType dt,
6945             QRegister rd,
6946             QRegister rn,
6947             QRegister rm,
6948             const QOperand& operand) {
6949     Vext(al, dt, rd, rn, rm, operand);
6950   }
6951 
Vfma(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)6952   void Vfma(
6953       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
6954     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6955     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
6956     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6957     VIXL_ASSERT(allow_macro_instructions_);
6958     VIXL_ASSERT(OutsideITBlock());
6959     MacroEmissionCheckScope guard(this);
6960     ITScope it_scope(this, &cond);
6961     vfma(cond, dt, rd, rn, rm);
6962   }
Vfma(DataType dt,DRegister rd,DRegister rn,DRegister rm)6963   void Vfma(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
6964     Vfma(al, dt, rd, rn, rm);
6965   }
6966 
Vfma(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)6967   void Vfma(
6968       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
6969     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6970     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
6971     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6972     VIXL_ASSERT(allow_macro_instructions_);
6973     VIXL_ASSERT(OutsideITBlock());
6974     MacroEmissionCheckScope guard(this);
6975     ITScope it_scope(this, &cond);
6976     vfma(cond, dt, rd, rn, rm);
6977   }
Vfma(DataType dt,QRegister rd,QRegister rn,QRegister rm)6978   void Vfma(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
6979     Vfma(al, dt, rd, rn, rm);
6980   }
6981 
Vfma(Condition cond,DataType dt,SRegister rd,SRegister rn,SRegister rm)6982   void Vfma(
6983       Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) {
6984     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6985     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
6986     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6987     VIXL_ASSERT(allow_macro_instructions_);
6988     VIXL_ASSERT(OutsideITBlock());
6989     MacroEmissionCheckScope guard(this);
6990     ITScope it_scope(this, &cond);
6991     vfma(cond, dt, rd, rn, rm);
6992   }
Vfma(DataType dt,SRegister rd,SRegister rn,SRegister rm)6993   void Vfma(DataType dt, SRegister rd, SRegister rn, SRegister rm) {
6994     Vfma(al, dt, rd, rn, rm);
6995   }
6996 
Vfms(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)6997   void Vfms(
6998       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
6999     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7000     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7001     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7002     VIXL_ASSERT(allow_macro_instructions_);
7003     VIXL_ASSERT(OutsideITBlock());
7004     MacroEmissionCheckScope guard(this);
7005     ITScope it_scope(this, &cond);
7006     vfms(cond, dt, rd, rn, rm);
7007   }
Vfms(DataType dt,DRegister rd,DRegister rn,DRegister rm)7008   void Vfms(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
7009     Vfms(al, dt, rd, rn, rm);
7010   }
7011 
Vfms(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)7012   void Vfms(
7013       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
7014     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7015     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7016     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7017     VIXL_ASSERT(allow_macro_instructions_);
7018     VIXL_ASSERT(OutsideITBlock());
7019     MacroEmissionCheckScope guard(this);
7020     ITScope it_scope(this, &cond);
7021     vfms(cond, dt, rd, rn, rm);
7022   }
Vfms(DataType dt,QRegister rd,QRegister rn,QRegister rm)7023   void Vfms(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
7024     Vfms(al, dt, rd, rn, rm);
7025   }
7026 
Vfms(Condition cond,DataType dt,SRegister rd,SRegister rn,SRegister rm)7027   void Vfms(
7028       Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) {
7029     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7030     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7031     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7032     VIXL_ASSERT(allow_macro_instructions_);
7033     VIXL_ASSERT(OutsideITBlock());
7034     MacroEmissionCheckScope guard(this);
7035     ITScope it_scope(this, &cond);
7036     vfms(cond, dt, rd, rn, rm);
7037   }
Vfms(DataType dt,SRegister rd,SRegister rn,SRegister rm)7038   void Vfms(DataType dt, SRegister rd, SRegister rn, SRegister rm) {
7039     Vfms(al, dt, rd, rn, rm);
7040   }
7041 
Vfnma(Condition cond,DataType dt,SRegister rd,SRegister rn,SRegister rm)7042   void Vfnma(
7043       Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) {
7044     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7045     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7046     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7047     VIXL_ASSERT(allow_macro_instructions_);
7048     VIXL_ASSERT(OutsideITBlock());
7049     MacroEmissionCheckScope guard(this);
7050     ITScope it_scope(this, &cond);
7051     vfnma(cond, dt, rd, rn, rm);
7052   }
Vfnma(DataType dt,SRegister rd,SRegister rn,SRegister rm)7053   void Vfnma(DataType dt, SRegister rd, SRegister rn, SRegister rm) {
7054     Vfnma(al, dt, rd, rn, rm);
7055   }
7056 
Vfnma(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)7057   void Vfnma(
7058       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
7059     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7060     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7061     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7062     VIXL_ASSERT(allow_macro_instructions_);
7063     VIXL_ASSERT(OutsideITBlock());
7064     MacroEmissionCheckScope guard(this);
7065     ITScope it_scope(this, &cond);
7066     vfnma(cond, dt, rd, rn, rm);
7067   }
Vfnma(DataType dt,DRegister rd,DRegister rn,DRegister rm)7068   void Vfnma(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
7069     Vfnma(al, dt, rd, rn, rm);
7070   }
7071 
Vfnms(Condition cond,DataType dt,SRegister rd,SRegister rn,SRegister rm)7072   void Vfnms(
7073       Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) {
7074     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7075     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7076     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7077     VIXL_ASSERT(allow_macro_instructions_);
7078     VIXL_ASSERT(OutsideITBlock());
7079     MacroEmissionCheckScope guard(this);
7080     ITScope it_scope(this, &cond);
7081     vfnms(cond, dt, rd, rn, rm);
7082   }
Vfnms(DataType dt,SRegister rd,SRegister rn,SRegister rm)7083   void Vfnms(DataType dt, SRegister rd, SRegister rn, SRegister rm) {
7084     Vfnms(al, dt, rd, rn, rm);
7085   }
7086 
Vfnms(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)7087   void Vfnms(
7088       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
7089     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7090     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7091     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7092     VIXL_ASSERT(allow_macro_instructions_);
7093     VIXL_ASSERT(OutsideITBlock());
7094     MacroEmissionCheckScope guard(this);
7095     ITScope it_scope(this, &cond);
7096     vfnms(cond, dt, rd, rn, rm);
7097   }
Vfnms(DataType dt,DRegister rd,DRegister rn,DRegister rm)7098   void Vfnms(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
7099     Vfnms(al, dt, rd, rn, rm);
7100   }
7101 
Vhadd(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)7102   void Vhadd(
7103       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
7104     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7105     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7106     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7107     VIXL_ASSERT(allow_macro_instructions_);
7108     VIXL_ASSERT(OutsideITBlock());
7109     MacroEmissionCheckScope guard(this);
7110     ITScope it_scope(this, &cond);
7111     vhadd(cond, dt, rd, rn, rm);
7112   }
Vhadd(DataType dt,DRegister rd,DRegister rn,DRegister rm)7113   void Vhadd(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
7114     Vhadd(al, dt, rd, rn, rm);
7115   }
7116 
Vhadd(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)7117   void Vhadd(
7118       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
7119     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7120     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7121     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7122     VIXL_ASSERT(allow_macro_instructions_);
7123     VIXL_ASSERT(OutsideITBlock());
7124     MacroEmissionCheckScope guard(this);
7125     ITScope it_scope(this, &cond);
7126     vhadd(cond, dt, rd, rn, rm);
7127   }
Vhadd(DataType dt,QRegister rd,QRegister rn,QRegister rm)7128   void Vhadd(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
7129     Vhadd(al, dt, rd, rn, rm);
7130   }
7131 
Vhsub(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)7132   void Vhsub(
7133       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
7134     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7135     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7136     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7137     VIXL_ASSERT(allow_macro_instructions_);
7138     VIXL_ASSERT(OutsideITBlock());
7139     MacroEmissionCheckScope guard(this);
7140     ITScope it_scope(this, &cond);
7141     vhsub(cond, dt, rd, rn, rm);
7142   }
Vhsub(DataType dt,DRegister rd,DRegister rn,DRegister rm)7143   void Vhsub(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
7144     Vhsub(al, dt, rd, rn, rm);
7145   }
7146 
Vhsub(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)7147   void Vhsub(
7148       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
7149     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7150     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7151     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7152     VIXL_ASSERT(allow_macro_instructions_);
7153     VIXL_ASSERT(OutsideITBlock());
7154     MacroEmissionCheckScope guard(this);
7155     ITScope it_scope(this, &cond);
7156     vhsub(cond, dt, rd, rn, rm);
7157   }
Vhsub(DataType dt,QRegister rd,QRegister rn,QRegister rm)7158   void Vhsub(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
7159     Vhsub(al, dt, rd, rn, rm);
7160   }
7161 
Vld1(Condition cond,DataType dt,const NeonRegisterList & nreglist,const AlignedMemOperand & operand)7162   void Vld1(Condition cond,
7163             DataType dt,
7164             const NeonRegisterList& nreglist,
7165             const AlignedMemOperand& operand) {
7166     VIXL_ASSERT(!AliasesAvailableScratchRegister(nreglist));
7167     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
7168     VIXL_ASSERT(allow_macro_instructions_);
7169     VIXL_ASSERT(OutsideITBlock());
7170     MacroEmissionCheckScope guard(this);
7171     ITScope it_scope(this, &cond);
7172     vld1(cond, dt, nreglist, operand);
7173   }
Vld1(DataType dt,const NeonRegisterList & nreglist,const AlignedMemOperand & operand)7174   void Vld1(DataType dt,
7175             const NeonRegisterList& nreglist,
7176             const AlignedMemOperand& operand) {
7177     Vld1(al, dt, nreglist, operand);
7178   }
7179 
Vld2(Condition cond,DataType dt,const NeonRegisterList & nreglist,const AlignedMemOperand & operand)7180   void Vld2(Condition cond,
7181             DataType dt,
7182             const NeonRegisterList& nreglist,
7183             const AlignedMemOperand& operand) {
7184     VIXL_ASSERT(!AliasesAvailableScratchRegister(nreglist));
7185     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
7186     VIXL_ASSERT(allow_macro_instructions_);
7187     VIXL_ASSERT(OutsideITBlock());
7188     MacroEmissionCheckScope guard(this);
7189     ITScope it_scope(this, &cond);
7190     vld2(cond, dt, nreglist, operand);
7191   }
Vld2(DataType dt,const NeonRegisterList & nreglist,const AlignedMemOperand & operand)7192   void Vld2(DataType dt,
7193             const NeonRegisterList& nreglist,
7194             const AlignedMemOperand& operand) {
7195     Vld2(al, dt, nreglist, operand);
7196   }
7197 
Vld3(Condition cond,DataType dt,const NeonRegisterList & nreglist,const AlignedMemOperand & operand)7198   void Vld3(Condition cond,
7199             DataType dt,
7200             const NeonRegisterList& nreglist,
7201             const AlignedMemOperand& operand) {
7202     VIXL_ASSERT(!AliasesAvailableScratchRegister(nreglist));
7203     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
7204     VIXL_ASSERT(allow_macro_instructions_);
7205     VIXL_ASSERT(OutsideITBlock());
7206     MacroEmissionCheckScope guard(this);
7207     ITScope it_scope(this, &cond);
7208     vld3(cond, dt, nreglist, operand);
7209   }
Vld3(DataType dt,const NeonRegisterList & nreglist,const AlignedMemOperand & operand)7210   void Vld3(DataType dt,
7211             const NeonRegisterList& nreglist,
7212             const AlignedMemOperand& operand) {
7213     Vld3(al, dt, nreglist, operand);
7214   }
7215 
Vld3(Condition cond,DataType dt,const NeonRegisterList & nreglist,const MemOperand & operand)7216   void Vld3(Condition cond,
7217             DataType dt,
7218             const NeonRegisterList& nreglist,
7219             const MemOperand& operand) {
7220     VIXL_ASSERT(!AliasesAvailableScratchRegister(nreglist));
7221     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
7222     VIXL_ASSERT(allow_macro_instructions_);
7223     VIXL_ASSERT(OutsideITBlock());
7224     MacroEmissionCheckScope guard(this);
7225     ITScope it_scope(this, &cond);
7226     vld3(cond, dt, nreglist, operand);
7227   }
Vld3(DataType dt,const NeonRegisterList & nreglist,const MemOperand & operand)7228   void Vld3(DataType dt,
7229             const NeonRegisterList& nreglist,
7230             const MemOperand& operand) {
7231     Vld3(al, dt, nreglist, operand);
7232   }
7233 
Vld4(Condition cond,DataType dt,const NeonRegisterList & nreglist,const AlignedMemOperand & operand)7234   void Vld4(Condition cond,
7235             DataType dt,
7236             const NeonRegisterList& nreglist,
7237             const AlignedMemOperand& operand) {
7238     VIXL_ASSERT(!AliasesAvailableScratchRegister(nreglist));
7239     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
7240     VIXL_ASSERT(allow_macro_instructions_);
7241     VIXL_ASSERT(OutsideITBlock());
7242     MacroEmissionCheckScope guard(this);
7243     ITScope it_scope(this, &cond);
7244     vld4(cond, dt, nreglist, operand);
7245   }
Vld4(DataType dt,const NeonRegisterList & nreglist,const AlignedMemOperand & operand)7246   void Vld4(DataType dt,
7247             const NeonRegisterList& nreglist,
7248             const AlignedMemOperand& operand) {
7249     Vld4(al, dt, nreglist, operand);
7250   }
7251 
Vldm(Condition cond,DataType dt,Register rn,WriteBack write_back,DRegisterList dreglist)7252   void Vldm(Condition cond,
7253             DataType dt,
7254             Register rn,
7255             WriteBack write_back,
7256             DRegisterList dreglist) {
7257     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7258     VIXL_ASSERT(!AliasesAvailableScratchRegister(dreglist));
7259     VIXL_ASSERT(allow_macro_instructions_);
7260     VIXL_ASSERT(OutsideITBlock());
7261     MacroEmissionCheckScope guard(this);
7262     ITScope it_scope(this, &cond);
7263     vldm(cond, dt, rn, write_back, dreglist);
7264   }
Vldm(DataType dt,Register rn,WriteBack write_back,DRegisterList dreglist)7265   void Vldm(DataType dt,
7266             Register rn,
7267             WriteBack write_back,
7268             DRegisterList dreglist) {
7269     Vldm(al, dt, rn, write_back, dreglist);
7270   }
Vldm(Condition cond,Register rn,WriteBack write_back,DRegisterList dreglist)7271   void Vldm(Condition cond,
7272             Register rn,
7273             WriteBack write_back,
7274             DRegisterList dreglist) {
7275     Vldm(cond, kDataTypeValueNone, rn, write_back, dreglist);
7276   }
Vldm(Register rn,WriteBack write_back,DRegisterList dreglist)7277   void Vldm(Register rn, WriteBack write_back, DRegisterList dreglist) {
7278     Vldm(al, kDataTypeValueNone, rn, write_back, dreglist);
7279   }
7280 
Vldm(Condition cond,DataType dt,Register rn,WriteBack write_back,SRegisterList sreglist)7281   void Vldm(Condition cond,
7282             DataType dt,
7283             Register rn,
7284             WriteBack write_back,
7285             SRegisterList sreglist) {
7286     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7287     VIXL_ASSERT(!AliasesAvailableScratchRegister(sreglist));
7288     VIXL_ASSERT(allow_macro_instructions_);
7289     VIXL_ASSERT(OutsideITBlock());
7290     MacroEmissionCheckScope guard(this);
7291     ITScope it_scope(this, &cond);
7292     vldm(cond, dt, rn, write_back, sreglist);
7293   }
Vldm(DataType dt,Register rn,WriteBack write_back,SRegisterList sreglist)7294   void Vldm(DataType dt,
7295             Register rn,
7296             WriteBack write_back,
7297             SRegisterList sreglist) {
7298     Vldm(al, dt, rn, write_back, sreglist);
7299   }
Vldm(Condition cond,Register rn,WriteBack write_back,SRegisterList sreglist)7300   void Vldm(Condition cond,
7301             Register rn,
7302             WriteBack write_back,
7303             SRegisterList sreglist) {
7304     Vldm(cond, kDataTypeValueNone, rn, write_back, sreglist);
7305   }
Vldm(Register rn,WriteBack write_back,SRegisterList sreglist)7306   void Vldm(Register rn, WriteBack write_back, SRegisterList sreglist) {
7307     Vldm(al, kDataTypeValueNone, rn, write_back, sreglist);
7308   }
7309 
Vldmdb(Condition cond,DataType dt,Register rn,WriteBack write_back,DRegisterList dreglist)7310   void Vldmdb(Condition cond,
7311               DataType dt,
7312               Register rn,
7313               WriteBack write_back,
7314               DRegisterList dreglist) {
7315     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7316     VIXL_ASSERT(!AliasesAvailableScratchRegister(dreglist));
7317     VIXL_ASSERT(allow_macro_instructions_);
7318     VIXL_ASSERT(OutsideITBlock());
7319     MacroEmissionCheckScope guard(this);
7320     ITScope it_scope(this, &cond);
7321     vldmdb(cond, dt, rn, write_back, dreglist);
7322   }
Vldmdb(DataType dt,Register rn,WriteBack write_back,DRegisterList dreglist)7323   void Vldmdb(DataType dt,
7324               Register rn,
7325               WriteBack write_back,
7326               DRegisterList dreglist) {
7327     Vldmdb(al, dt, rn, write_back, dreglist);
7328   }
Vldmdb(Condition cond,Register rn,WriteBack write_back,DRegisterList dreglist)7329   void Vldmdb(Condition cond,
7330               Register rn,
7331               WriteBack write_back,
7332               DRegisterList dreglist) {
7333     Vldmdb(cond, kDataTypeValueNone, rn, write_back, dreglist);
7334   }
Vldmdb(Register rn,WriteBack write_back,DRegisterList dreglist)7335   void Vldmdb(Register rn, WriteBack write_back, DRegisterList dreglist) {
7336     Vldmdb(al, kDataTypeValueNone, rn, write_back, dreglist);
7337   }
7338 
Vldmdb(Condition cond,DataType dt,Register rn,WriteBack write_back,SRegisterList sreglist)7339   void Vldmdb(Condition cond,
7340               DataType dt,
7341               Register rn,
7342               WriteBack write_back,
7343               SRegisterList sreglist) {
7344     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7345     VIXL_ASSERT(!AliasesAvailableScratchRegister(sreglist));
7346     VIXL_ASSERT(allow_macro_instructions_);
7347     VIXL_ASSERT(OutsideITBlock());
7348     MacroEmissionCheckScope guard(this);
7349     ITScope it_scope(this, &cond);
7350     vldmdb(cond, dt, rn, write_back, sreglist);
7351   }
Vldmdb(DataType dt,Register rn,WriteBack write_back,SRegisterList sreglist)7352   void Vldmdb(DataType dt,
7353               Register rn,
7354               WriteBack write_back,
7355               SRegisterList sreglist) {
7356     Vldmdb(al, dt, rn, write_back, sreglist);
7357   }
Vldmdb(Condition cond,Register rn,WriteBack write_back,SRegisterList sreglist)7358   void Vldmdb(Condition cond,
7359               Register rn,
7360               WriteBack write_back,
7361               SRegisterList sreglist) {
7362     Vldmdb(cond, kDataTypeValueNone, rn, write_back, sreglist);
7363   }
Vldmdb(Register rn,WriteBack write_back,SRegisterList sreglist)7364   void Vldmdb(Register rn, WriteBack write_back, SRegisterList sreglist) {
7365     Vldmdb(al, kDataTypeValueNone, rn, write_back, sreglist);
7366   }
7367 
Vldmia(Condition cond,DataType dt,Register rn,WriteBack write_back,DRegisterList dreglist)7368   void Vldmia(Condition cond,
7369               DataType dt,
7370               Register rn,
7371               WriteBack write_back,
7372               DRegisterList dreglist) {
7373     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7374     VIXL_ASSERT(!AliasesAvailableScratchRegister(dreglist));
7375     VIXL_ASSERT(allow_macro_instructions_);
7376     VIXL_ASSERT(OutsideITBlock());
7377     MacroEmissionCheckScope guard(this);
7378     ITScope it_scope(this, &cond);
7379     vldmia(cond, dt, rn, write_back, dreglist);
7380   }
Vldmia(DataType dt,Register rn,WriteBack write_back,DRegisterList dreglist)7381   void Vldmia(DataType dt,
7382               Register rn,
7383               WriteBack write_back,
7384               DRegisterList dreglist) {
7385     Vldmia(al, dt, rn, write_back, dreglist);
7386   }
Vldmia(Condition cond,Register rn,WriteBack write_back,DRegisterList dreglist)7387   void Vldmia(Condition cond,
7388               Register rn,
7389               WriteBack write_back,
7390               DRegisterList dreglist) {
7391     Vldmia(cond, kDataTypeValueNone, rn, write_back, dreglist);
7392   }
Vldmia(Register rn,WriteBack write_back,DRegisterList dreglist)7393   void Vldmia(Register rn, WriteBack write_back, DRegisterList dreglist) {
7394     Vldmia(al, kDataTypeValueNone, rn, write_back, dreglist);
7395   }
7396 
Vldmia(Condition cond,DataType dt,Register rn,WriteBack write_back,SRegisterList sreglist)7397   void Vldmia(Condition cond,
7398               DataType dt,
7399               Register rn,
7400               WriteBack write_back,
7401               SRegisterList sreglist) {
7402     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7403     VIXL_ASSERT(!AliasesAvailableScratchRegister(sreglist));
7404     VIXL_ASSERT(allow_macro_instructions_);
7405     VIXL_ASSERT(OutsideITBlock());
7406     MacroEmissionCheckScope guard(this);
7407     ITScope it_scope(this, &cond);
7408     vldmia(cond, dt, rn, write_back, sreglist);
7409   }
Vldmia(DataType dt,Register rn,WriteBack write_back,SRegisterList sreglist)7410   void Vldmia(DataType dt,
7411               Register rn,
7412               WriteBack write_back,
7413               SRegisterList sreglist) {
7414     Vldmia(al, dt, rn, write_back, sreglist);
7415   }
Vldmia(Condition cond,Register rn,WriteBack write_back,SRegisterList sreglist)7416   void Vldmia(Condition cond,
7417               Register rn,
7418               WriteBack write_back,
7419               SRegisterList sreglist) {
7420     Vldmia(cond, kDataTypeValueNone, rn, write_back, sreglist);
7421   }
Vldmia(Register rn,WriteBack write_back,SRegisterList sreglist)7422   void Vldmia(Register rn, WriteBack write_back, SRegisterList sreglist) {
7423     Vldmia(al, kDataTypeValueNone, rn, write_back, sreglist);
7424   }
7425 
7426 
Vldr(Condition cond,DataType dt,DRegister rd,const MemOperand & operand)7427   void Vldr(Condition cond,
7428             DataType dt,
7429             DRegister rd,
7430             const MemOperand& operand) {
7431     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7432     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
7433     VIXL_ASSERT(allow_macro_instructions_);
7434     VIXL_ASSERT(OutsideITBlock());
7435     MacroEmissionCheckScope guard(this);
7436     ITScope it_scope(this, &cond);
7437     vldr(cond, dt, rd, operand);
7438   }
Vldr(DataType dt,DRegister rd,const MemOperand & operand)7439   void Vldr(DataType dt, DRegister rd, const MemOperand& operand) {
7440     Vldr(al, dt, rd, operand);
7441   }
Vldr(Condition cond,DRegister rd,const MemOperand & operand)7442   void Vldr(Condition cond, DRegister rd, const MemOperand& operand) {
7443     Vldr(cond, Untyped64, rd, operand);
7444   }
Vldr(DRegister rd,const MemOperand & operand)7445   void Vldr(DRegister rd, const MemOperand& operand) {
7446     Vldr(al, Untyped64, rd, operand);
7447   }
7448 
7449 
Vldr(Condition cond,DataType dt,SRegister rd,const MemOperand & operand)7450   void Vldr(Condition cond,
7451             DataType dt,
7452             SRegister rd,
7453             const MemOperand& operand) {
7454     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7455     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
7456     VIXL_ASSERT(allow_macro_instructions_);
7457     VIXL_ASSERT(OutsideITBlock());
7458     MacroEmissionCheckScope guard(this);
7459     ITScope it_scope(this, &cond);
7460     vldr(cond, dt, rd, operand);
7461   }
Vldr(DataType dt,SRegister rd,const MemOperand & operand)7462   void Vldr(DataType dt, SRegister rd, const MemOperand& operand) {
7463     Vldr(al, dt, rd, operand);
7464   }
Vldr(Condition cond,SRegister rd,const MemOperand & operand)7465   void Vldr(Condition cond, SRegister rd, const MemOperand& operand) {
7466     Vldr(cond, Untyped32, rd, operand);
7467   }
Vldr(SRegister rd,const MemOperand & operand)7468   void Vldr(SRegister rd, const MemOperand& operand) {
7469     Vldr(al, Untyped32, rd, operand);
7470   }
7471 
Vmax(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)7472   void Vmax(
7473       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
7474     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7475     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7476     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7477     VIXL_ASSERT(allow_macro_instructions_);
7478     VIXL_ASSERT(OutsideITBlock());
7479     MacroEmissionCheckScope guard(this);
7480     ITScope it_scope(this, &cond);
7481     vmax(cond, dt, rd, rn, rm);
7482   }
Vmax(DataType dt,DRegister rd,DRegister rn,DRegister rm)7483   void Vmax(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
7484     Vmax(al, dt, rd, rn, rm);
7485   }
7486 
Vmax(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)7487   void Vmax(
7488       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
7489     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7490     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7491     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7492     VIXL_ASSERT(allow_macro_instructions_);
7493     VIXL_ASSERT(OutsideITBlock());
7494     MacroEmissionCheckScope guard(this);
7495     ITScope it_scope(this, &cond);
7496     vmax(cond, dt, rd, rn, rm);
7497   }
Vmax(DataType dt,QRegister rd,QRegister rn,QRegister rm)7498   void Vmax(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
7499     Vmax(al, dt, rd, rn, rm);
7500   }
7501 
Vmaxnm(DataType dt,DRegister rd,DRegister rn,DRegister rm)7502   void Vmaxnm(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
7503     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7504     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7505     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7506     VIXL_ASSERT(allow_macro_instructions_);
7507     VIXL_ASSERT(OutsideITBlock());
7508     MacroEmissionCheckScope guard(this);
7509     vmaxnm(dt, rd, rn, rm);
7510   }
7511 
Vmaxnm(DataType dt,QRegister rd,QRegister rn,QRegister rm)7512   void Vmaxnm(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
7513     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7514     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7515     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7516     VIXL_ASSERT(allow_macro_instructions_);
7517     VIXL_ASSERT(OutsideITBlock());
7518     MacroEmissionCheckScope guard(this);
7519     vmaxnm(dt, rd, rn, rm);
7520   }
7521 
Vmaxnm(DataType dt,SRegister rd,SRegister rn,SRegister rm)7522   void Vmaxnm(DataType dt, SRegister rd, SRegister rn, SRegister rm) {
7523     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7524     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7525     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7526     VIXL_ASSERT(allow_macro_instructions_);
7527     VIXL_ASSERT(OutsideITBlock());
7528     MacroEmissionCheckScope guard(this);
7529     vmaxnm(dt, rd, rn, rm);
7530   }
7531 
Vmin(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)7532   void Vmin(
7533       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
7534     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7535     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7536     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7537     VIXL_ASSERT(allow_macro_instructions_);
7538     VIXL_ASSERT(OutsideITBlock());
7539     MacroEmissionCheckScope guard(this);
7540     ITScope it_scope(this, &cond);
7541     vmin(cond, dt, rd, rn, rm);
7542   }
Vmin(DataType dt,DRegister rd,DRegister rn,DRegister rm)7543   void Vmin(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
7544     Vmin(al, dt, rd, rn, rm);
7545   }
7546 
Vmin(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)7547   void Vmin(
7548       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
7549     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7550     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7551     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7552     VIXL_ASSERT(allow_macro_instructions_);
7553     VIXL_ASSERT(OutsideITBlock());
7554     MacroEmissionCheckScope guard(this);
7555     ITScope it_scope(this, &cond);
7556     vmin(cond, dt, rd, rn, rm);
7557   }
Vmin(DataType dt,QRegister rd,QRegister rn,QRegister rm)7558   void Vmin(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
7559     Vmin(al, dt, rd, rn, rm);
7560   }
7561 
Vminnm(DataType dt,DRegister rd,DRegister rn,DRegister rm)7562   void Vminnm(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
7563     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7564     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7565     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7566     VIXL_ASSERT(allow_macro_instructions_);
7567     VIXL_ASSERT(OutsideITBlock());
7568     MacroEmissionCheckScope guard(this);
7569     vminnm(dt, rd, rn, rm);
7570   }
7571 
Vminnm(DataType dt,QRegister rd,QRegister rn,QRegister rm)7572   void Vminnm(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
7573     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7574     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7575     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7576     VIXL_ASSERT(allow_macro_instructions_);
7577     VIXL_ASSERT(OutsideITBlock());
7578     MacroEmissionCheckScope guard(this);
7579     vminnm(dt, rd, rn, rm);
7580   }
7581 
Vminnm(DataType dt,SRegister rd,SRegister rn,SRegister rm)7582   void Vminnm(DataType dt, SRegister rd, SRegister rn, SRegister rm) {
7583     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7584     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7585     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7586     VIXL_ASSERT(allow_macro_instructions_);
7587     VIXL_ASSERT(OutsideITBlock());
7588     MacroEmissionCheckScope guard(this);
7589     vminnm(dt, rd, rn, rm);
7590   }
7591 
Vmla(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegisterLane rm)7592   void Vmla(Condition cond,
7593             DataType dt,
7594             DRegister rd,
7595             DRegister rn,
7596             DRegisterLane rm) {
7597     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7598     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7599     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7600     VIXL_ASSERT(allow_macro_instructions_);
7601     VIXL_ASSERT(OutsideITBlock());
7602     MacroEmissionCheckScope guard(this);
7603     ITScope it_scope(this, &cond);
7604     vmla(cond, dt, rd, rn, rm);
7605   }
Vmla(DataType dt,DRegister rd,DRegister rn,DRegisterLane rm)7606   void Vmla(DataType dt, DRegister rd, DRegister rn, DRegisterLane rm) {
7607     Vmla(al, dt, rd, rn, rm);
7608   }
7609 
Vmla(Condition cond,DataType dt,QRegister rd,QRegister rn,DRegisterLane rm)7610   void Vmla(Condition cond,
7611             DataType dt,
7612             QRegister rd,
7613             QRegister rn,
7614             DRegisterLane rm) {
7615     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7616     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7617     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7618     VIXL_ASSERT(allow_macro_instructions_);
7619     VIXL_ASSERT(OutsideITBlock());
7620     MacroEmissionCheckScope guard(this);
7621     ITScope it_scope(this, &cond);
7622     vmla(cond, dt, rd, rn, rm);
7623   }
Vmla(DataType dt,QRegister rd,QRegister rn,DRegisterLane rm)7624   void Vmla(DataType dt, QRegister rd, QRegister rn, DRegisterLane rm) {
7625     Vmla(al, dt, rd, rn, rm);
7626   }
7627 
Vmla(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)7628   void Vmla(
7629       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
7630     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7631     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7632     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7633     VIXL_ASSERT(allow_macro_instructions_);
7634     VIXL_ASSERT(OutsideITBlock());
7635     MacroEmissionCheckScope guard(this);
7636     ITScope it_scope(this, &cond);
7637     vmla(cond, dt, rd, rn, rm);
7638   }
Vmla(DataType dt,DRegister rd,DRegister rn,DRegister rm)7639   void Vmla(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
7640     Vmla(al, dt, rd, rn, rm);
7641   }
7642 
Vmla(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)7643   void Vmla(
7644       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
7645     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7646     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7647     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7648     VIXL_ASSERT(allow_macro_instructions_);
7649     VIXL_ASSERT(OutsideITBlock());
7650     MacroEmissionCheckScope guard(this);
7651     ITScope it_scope(this, &cond);
7652     vmla(cond, dt, rd, rn, rm);
7653   }
Vmla(DataType dt,QRegister rd,QRegister rn,QRegister rm)7654   void Vmla(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
7655     Vmla(al, dt, rd, rn, rm);
7656   }
7657 
Vmla(Condition cond,DataType dt,SRegister rd,SRegister rn,SRegister rm)7658   void Vmla(
7659       Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) {
7660     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7661     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7662     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7663     VIXL_ASSERT(allow_macro_instructions_);
7664     VIXL_ASSERT(OutsideITBlock());
7665     MacroEmissionCheckScope guard(this);
7666     ITScope it_scope(this, &cond);
7667     vmla(cond, dt, rd, rn, rm);
7668   }
Vmla(DataType dt,SRegister rd,SRegister rn,SRegister rm)7669   void Vmla(DataType dt, SRegister rd, SRegister rn, SRegister rm) {
7670     Vmla(al, dt, rd, rn, rm);
7671   }
7672 
Vmlal(Condition cond,DataType dt,QRegister rd,DRegister rn,DRegisterLane rm)7673   void Vmlal(Condition cond,
7674              DataType dt,
7675              QRegister rd,
7676              DRegister rn,
7677              DRegisterLane rm) {
7678     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7679     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7680     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7681     VIXL_ASSERT(allow_macro_instructions_);
7682     VIXL_ASSERT(OutsideITBlock());
7683     MacroEmissionCheckScope guard(this);
7684     ITScope it_scope(this, &cond);
7685     vmlal(cond, dt, rd, rn, rm);
7686   }
Vmlal(DataType dt,QRegister rd,DRegister rn,DRegisterLane rm)7687   void Vmlal(DataType dt, QRegister rd, DRegister rn, DRegisterLane rm) {
7688     Vmlal(al, dt, rd, rn, rm);
7689   }
7690 
Vmlal(Condition cond,DataType dt,QRegister rd,DRegister rn,DRegister rm)7691   void Vmlal(
7692       Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm) {
7693     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7694     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7695     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7696     VIXL_ASSERT(allow_macro_instructions_);
7697     VIXL_ASSERT(OutsideITBlock());
7698     MacroEmissionCheckScope guard(this);
7699     ITScope it_scope(this, &cond);
7700     vmlal(cond, dt, rd, rn, rm);
7701   }
Vmlal(DataType dt,QRegister rd,DRegister rn,DRegister rm)7702   void Vmlal(DataType dt, QRegister rd, DRegister rn, DRegister rm) {
7703     Vmlal(al, dt, rd, rn, rm);
7704   }
7705 
Vmls(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegisterLane rm)7706   void Vmls(Condition cond,
7707             DataType dt,
7708             DRegister rd,
7709             DRegister rn,
7710             DRegisterLane rm) {
7711     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7712     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7713     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7714     VIXL_ASSERT(allow_macro_instructions_);
7715     VIXL_ASSERT(OutsideITBlock());
7716     MacroEmissionCheckScope guard(this);
7717     ITScope it_scope(this, &cond);
7718     vmls(cond, dt, rd, rn, rm);
7719   }
Vmls(DataType dt,DRegister rd,DRegister rn,DRegisterLane rm)7720   void Vmls(DataType dt, DRegister rd, DRegister rn, DRegisterLane rm) {
7721     Vmls(al, dt, rd, rn, rm);
7722   }
7723 
Vmls(Condition cond,DataType dt,QRegister rd,QRegister rn,DRegisterLane rm)7724   void Vmls(Condition cond,
7725             DataType dt,
7726             QRegister rd,
7727             QRegister rn,
7728             DRegisterLane rm) {
7729     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7730     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7731     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7732     VIXL_ASSERT(allow_macro_instructions_);
7733     VIXL_ASSERT(OutsideITBlock());
7734     MacroEmissionCheckScope guard(this);
7735     ITScope it_scope(this, &cond);
7736     vmls(cond, dt, rd, rn, rm);
7737   }
Vmls(DataType dt,QRegister rd,QRegister rn,DRegisterLane rm)7738   void Vmls(DataType dt, QRegister rd, QRegister rn, DRegisterLane rm) {
7739     Vmls(al, dt, rd, rn, rm);
7740   }
7741 
Vmls(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)7742   void Vmls(
7743       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
7744     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7745     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7746     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7747     VIXL_ASSERT(allow_macro_instructions_);
7748     VIXL_ASSERT(OutsideITBlock());
7749     MacroEmissionCheckScope guard(this);
7750     ITScope it_scope(this, &cond);
7751     vmls(cond, dt, rd, rn, rm);
7752   }
Vmls(DataType dt,DRegister rd,DRegister rn,DRegister rm)7753   void Vmls(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
7754     Vmls(al, dt, rd, rn, rm);
7755   }
7756 
Vmls(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)7757   void Vmls(
7758       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
7759     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7760     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7761     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7762     VIXL_ASSERT(allow_macro_instructions_);
7763     VIXL_ASSERT(OutsideITBlock());
7764     MacroEmissionCheckScope guard(this);
7765     ITScope it_scope(this, &cond);
7766     vmls(cond, dt, rd, rn, rm);
7767   }
   ( ,  ,  ,  ) {Vmls(DataType dt,QRegister rd,QRegister rn,QRegister rm)7768 voidVmlsDataTypedtQRegisterrdQRegisterrnQRegisterrm
    (, , , , );
  }
7769 Vmlsaldtrdrnrm7770 7771 
   (Vmls(Condition cond,DataType dt,SRegister rd,SRegister rn,SRegister rm)7772 voidVmls
       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



7773 ConditioncondDataTypedtSRegisterrdSRegisterrnSRegisterrm7774 VIXL_ASSERTAliasesAvailableScratchRegisterrd7775 VIXL_ASSERTAliasesAvailableScratchRegisterrn7776 VIXL_ASSERTAliasesAvailableScratchRegisterrm7777 VIXL_ASSERTallow_macro_instructions_7778 VIXL_ASSERTOutsideITBlock7779 MacroEmissionCheckScopeguardthis7780 ITScopeit_scopethiscond7781 vmlsconddtrdrnrm7782    ( ,  ,  ,  ) {Vmls(DataType dt,SRegister rd,SRegister rn,SRegister rm)7783 voidVmlsDataTypedtSRegisterrdSRegisterrnSRegisterrm    (, , , , );
  }
7784 Vmlsaldtrdrnrm7785 7786    ( ,Vmlsl(Condition cond,DataType dt,QRegister rd,DRegister rn,DRegisterLane rm)7787 voidVmlslConditioncond              ,
              ,
              ,
              ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



7788 DataTypedt7789 QRegisterrd7790 DRegisterrn7791 DRegisterLanerm7792 VIXL_ASSERTAliasesAvailableScratchRegisterrd7793 VIXL_ASSERTAliasesAvailableScratchRegisterrn7794 VIXL_ASSERTAliasesAvailableScratchRegisterrm7795 VIXL_ASSERTallow_macro_instructions_7796 VIXL_ASSERTOutsideITBlock7797 MacroEmissionCheckScopeguardthis7798 ITScopeit_scopethiscond7799 vmlslconddtrdrnrm7800    ( ,  ,  ,  ) {Vmlsl(DataType dt,QRegister rd,DRegister rn,DRegisterLane rm)7801 voidVmlslDataTypedtQRegisterrdDRegisterrnDRegisterLanerm    (, , , , );
  }
7802 Vmlslaldtrdrnrm7803 7804    (Vmlsl(Condition cond,DataType dt,QRegister rd,DRegister rn,DRegister rm)7805 voidVmlsl       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



7806 ConditioncondDataTypedtQRegisterrdDRegisterrnDRegisterrm7807 VIXL_ASSERTAliasesAvailableScratchRegisterrd7808 VIXL_ASSERTAliasesAvailableScratchRegisterrn7809 VIXL_ASSERTAliasesAvailableScratchRegisterrm7810 VIXL_ASSERTallow_macro_instructions_7811 VIXL_ASSERTOutsideITBlock7812 MacroEmissionCheckScopeguardthis7813 ITScopeit_scopethiscond7814 vmlslconddtrdrnrm7815    ( ,  ,  ,  ) {Vmlsl(DataType dt,QRegister rd,DRegister rn,DRegister rm)7816 voidVmlslDataTypedtQRegisterrdDRegisterrnDRegisterrm    (, , , , );
  }
7817 Vmlslaldtrdrnrm7818 7819    ( ,  ,  ) {Vmov(Condition cond,Register rt,SRegister rn)7820 voidVmovConditioncondRegisterrtSRegisterrn    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , );
  }


7821 VIXL_ASSERTAliasesAvailableScratchRegisterrt7822 VIXL_ASSERTAliasesAvailableScratchRegisterrn7823 VIXL_ASSERTallow_macro_instructions_7824 VIXL_ASSERTOutsideITBlock7825 MacroEmissionCheckScopeguardthis7826 ITScopeit_scopethiscond7827 vmovcondrtrn7828    ( ,  ) { (, , ); }
Vmov(Register rt,SRegister rn)7829 voidVmovRegisterrtSRegisterrnVmovalrtrn7830    ( ,  ,  ) {Vmov(Condition cond,SRegister rn,Register rt)7831 voidVmovConditioncondSRegisterrnRegisterrt    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , );
  }


7832 VIXL_ASSERTAliasesAvailableScratchRegisterrn7833 VIXL_ASSERTAliasesAvailableScratchRegisterrt7834 VIXL_ASSERTallow_macro_instructions_7835 VIXL_ASSERTOutsideITBlock7836 MacroEmissionCheckScopeguardthis7837 ITScopeit_scopethiscond7838 vmovcondrnrt7839    ( ,  ) { (, , ); }
Vmov(SRegister rn,Register rt)7840 voidVmovSRegisterrnRegisterrtVmovalrnrt7841    ( ,  ,  ,  ) {Vmov(Condition cond,Register rt,Register rt2,DRegister rm)7842 voidVmovConditioncondRegisterrtRegisterrt2DRegisterrm    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }


7843 VIXL_ASSERTAliasesAvailableScratchRegisterrt7844 VIXL_ASSERTAliasesAvailableScratchRegisterrt27845 VIXL_ASSERTAliasesAvailableScratchRegisterrm7846 VIXL_ASSERTallow_macro_instructions_7847 VIXL_ASSERTOutsideITBlock7848 MacroEmissionCheckScopeguardthis7849 ITScopeit_scopethiscond7850 vmovcondrtrt2rm7851    ( ,  ,  ) { (, , , ); }
Vmov(Register rt,Register rt2,DRegister rm)7852 voidVmovRegisterrtRegisterrt2DRegisterrmVmovalrtrt2rm7853    ( ,  ,  ,  ) {Vmov(Condition cond,DRegister rm,Register rt,Register rt2)7854 voidVmovConditioncondDRegisterrmRegisterrtRegisterrt2    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }


7855 VIXL_ASSERTAliasesAvailableScratchRegisterrm7856 VIXL_ASSERTAliasesAvailableScratchRegisterrt7857 VIXL_ASSERTAliasesAvailableScratchRegisterrt27858 VIXL_ASSERTallow_macro_instructions_7859 VIXL_ASSERTOutsideITBlock7860 MacroEmissionCheckScopeguardthis7861 ITScopeit_scopethiscond7862 vmovcondrmrtrt27863    ( ,  ,  ) { (, , , ); }
Vmov(DRegister rm,Register rt,Register rt2)7864 voidVmovDRegisterrmRegisterrtRegisterrt2Vmovalrmrtrt27865    (Vmov(Condition cond,Register rt,Register rt2,SRegister rm,SRegister rm1)7866 voidVmov       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



7867 ConditioncondRegisterrtRegisterrt2SRegisterrmSRegisterrm17868 VIXL_ASSERTAliasesAvailableScratchRegisterrt7869 VIXL_ASSERTAliasesAvailableScratchRegisterrt27870 VIXL_ASSERTAliasesAvailableScratchRegisterrm7871 VIXL_ASSERTAliasesAvailableScratchRegisterrm17872 VIXL_ASSERTallow_macro_instructions_7873 VIXL_ASSERTOutsideITBlock7874 MacroEmissionCheckScopeguardthis7875 ITScopeit_scopethiscond7876 vmovcondrtrt2rmrm17877    ( ,  ,  ,  ) {Vmov(Register rt,Register rt2,SRegister rm,SRegister rm1)7878 voidVmovRegisterrtRegisterrt2SRegisterrmSRegisterrm1    (, , , , );
  }
7879 Vmovalrtrt2rmrm17880 7881    (Vmov(Condition cond,SRegister rm,SRegister rm1,Register rt,Register rt2)7882 voidVmov       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



7883 ConditioncondSRegisterrmSRegisterrm1RegisterrtRegisterrt27884 VIXL_ASSERTAliasesAvailableScratchRegisterrm7885 VIXL_ASSERTAliasesAvailableScratchRegisterrm17886 VIXL_ASSERTAliasesAvailableScratchRegisterrt7887 VIXL_ASSERTAliasesAvailableScratchRegisterrt27888 VIXL_ASSERTallow_macro_instructions_7889 VIXL_ASSERTOutsideITBlock7890 MacroEmissionCheckScopeguardthis7891 ITScopeit_scopethiscond7892 vmovcondrmrm1rtrt27893    ( ,  ,  ,  ) {Vmov(SRegister rm,SRegister rm1,Register rt,Register rt2)7894 voidVmovSRegisterrmSRegisterrm1RegisterrtRegisterrt2    (, , , , );
  }
7895 Vmovalrmrm1rtrt27896 7897    ( ,  ,  ,  ) {Vmov(Condition cond,DataType dt,DRegisterLane rd,Register rt)7898 voidVmovConditioncondDataTypedtDRegisterLanerdRegisterrt    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }

7899 VIXL_ASSERTAliasesAvailableScratchRegisterrd7900 VIXL_ASSERTAliasesAvailableScratchRegisterrt7901 VIXL_ASSERTallow_macro_instructions_7902 VIXL_ASSERTOutsideITBlock7903 MacroEmissionCheckScopeguardthis7904 ITScopeit_scopethiscond7905 vmovconddtrdrt7906    ( ,  ,  ) {Vmov(DataType dt,DRegisterLane rd,Register rt)7907 voidVmovDataTypedtDRegisterLanerdRegisterrt    (, , , );
  }

7908 Vmovaldtrdrt7909    ( ,  ,  ) {Vmov(Condition cond,DRegisterLane rd,Register rt)7910 voidVmovConditioncondDRegisterLanerdRegisterrt    (, , , );
  }



7911 VmovcondkDataTypeValueNonerdrt7912    ( ,  ) {Vmov(DRegisterLane rd,Register rt)7913 voidVmovDRegisterLanerdRegisterrt    (, , , );
  }
7914 VmovalkDataTypeValueNonerdrt7915 7916    ( ,Vmov(Condition cond,DataType dt,DRegister rd,const DOperand & operand)7917 voidVmovConditioncond             ,
             ,
             & ) {
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }



7918 DataTypedt7919 DRegisterrd7920 constDOperandoperand7921 VIXL_ASSERTAliasesAvailableScratchRegisterrd7922 VIXL_ASSERTAliasesAvailableScratchRegisteroperand7923 VIXL_ASSERTallow_macro_instructions_7924 VIXL_ASSERTOutsideITBlock7925 MacroEmissionCheckScopeguardthis7926 ITScopeit_scopethiscond7927 vmovconddtrdoperand7928    ( ,  ,  & ) {Vmov(DataType dt,DRegister rd,const DOperand & operand)7929 voidVmovDataTypedtDRegisterrdconstDOperandoperand    (, , , );
  }
7930 Vmovaldtrdoperand7931 7932    ( ,Vmov(Condition cond,DataType dt,QRegister rd,const QOperand & operand)7933 voidVmovConditioncond             ,
             ,
             & ) {
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }



7934 DataTypedt7935 QRegisterrd7936 constQOperandoperand7937 VIXL_ASSERTAliasesAvailableScratchRegisterrd7938 VIXL_ASSERTAliasesAvailableScratchRegisteroperand7939 VIXL_ASSERTallow_macro_instructions_7940 VIXL_ASSERTOutsideITBlock7941 MacroEmissionCheckScopeguardthis7942 ITScopeit_scopethiscond7943 vmovconddtrdoperand7944    ( ,  ,  & ) {Vmov(DataType dt,QRegister rd,const QOperand & operand)7945 voidVmovDataTypedtQRegisterrdconstQOperandoperand    (, , , );
  }
7946 Vmovaldtrdoperand7947 7948    ( ,Vmov(Condition cond,DataType dt,SRegister rd,const SOperand & operand)7949 voidVmovConditioncond             ,
             ,
             & ) {
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }



7950 DataTypedt7951 SRegisterrd7952 constSOperandoperand7953 VIXL_ASSERTAliasesAvailableScratchRegisterrd7954 VIXL_ASSERTAliasesAvailableScratchRegisteroperand7955 VIXL_ASSERTallow_macro_instructions_7956 VIXL_ASSERTOutsideITBlock7957 MacroEmissionCheckScopeguardthis7958 ITScopeit_scopethiscond7959 vmovconddtrdoperand7960    ( ,  ,  & ) {Vmov(DataType dt,SRegister rd,const SOperand & operand)7961 voidVmovDataTypedtSRegisterrdconstSOperandoperand    (, , , );
  }
7962 Vmovaldtrdoperand7963 7964    ( ,  ,  ,  ) {Vmov(Condition cond,DataType dt,Register rt,DRegisterLane rn)7965 voidVmovConditioncondDataTypedtRegisterrtDRegisterLanern    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }

7966 VIXL_ASSERTAliasesAvailableScratchRegisterrt7967 VIXL_ASSERTAliasesAvailableScratchRegisterrn7968 VIXL_ASSERTallow_macro_instructions_7969 VIXL_ASSERTOutsideITBlock7970 MacroEmissionCheckScopeguardthis7971 ITScopeit_scopethiscond7972 vmovconddtrtrn7973    ( ,  ,  ) {Vmov(DataType dt,Register rt,DRegisterLane rn)7974 voidVmovDataTypedtRegisterrtDRegisterLanern    (, , , );
  }

7975 Vmovaldtrtrn7976    ( ,  ,  ) {Vmov(Condition cond,Register rt,DRegisterLane rn)7977 voidVmovConditioncondRegisterrtDRegisterLanern    (, , , );
  }



7978 VmovcondkDataTypeValueNonertrn7979    ( ,  ) {Vmov(Register rt,DRegisterLane rn)7980 voidVmovRegisterrtDRegisterLanern    (, , , );
  }
7981 VmovalkDataTypeValueNonertrn7982 7983    ( ,  ,  ,  ) {Vmovl(Condition cond,DataType dt,QRegister rd,DRegister rm)7984 voidVmovlConditioncondDataTypedtQRegisterrdDRegisterrm    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }


7985 VIXL_ASSERTAliasesAvailableScratchRegisterrd7986 VIXL_ASSERTAliasesAvailableScratchRegisterrm7987 VIXL_ASSERTallow_macro_instructions_7988 VIXL_ASSERTOutsideITBlock7989 MacroEmissionCheckScopeguardthis7990 ITScopeit_scopethiscond7991 vmovlconddtrdrm7992    ( ,  ,  ) { (, , , ); }
Vmovl(DataType dt,QRegister rd,DRegister rm)7993 voidVmovlDataTypedtQRegisterrdDRegisterrmVmovlaldtrdrm7994    ( ,  ,  ,  ) {Vmovn(Condition cond,DataType dt,DRegister rd,QRegister rm)7995 voidVmovnConditioncondDataTypedtDRegisterrdQRegisterrm    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }


7996 VIXL_ASSERTAliasesAvailableScratchRegisterrd7997 VIXL_ASSERTAliasesAvailableScratchRegisterrm7998 VIXL_ASSERTallow_macro_instructions_7999 VIXL_ASSERTOutsideITBlock8000 MacroEmissionCheckScopeguardthis8001 ITScopeit_scopethiscond8002 vmovnconddtrdrm8003    ( ,  ,  ) { (, , , ); }
Vmovn(DataType dt,DRegister rd,QRegister rm)8004 voidVmovnDataTypedtDRegisterrdQRegisterrmVmovnaldtrdrm8005    ( ,Vmrs(Condition cond,RegisterOrAPSR_nzcv rt,SpecialFPRegister spec_reg)8006 voidVmrsConditioncond             ,
             ) {
    (!());
    ();
    (());
     ();
     (, &);
    (, , );
  }



8007 RegisterOrAPSR_nzcvrt8008 SpecialFPRegisterspec_reg8009 VIXL_ASSERTAliasesAvailableScratchRegisterrt8010 VIXL_ASSERTallow_macro_instructions_8011 VIXL_ASSERTOutsideITBlock8012 MacroEmissionCheckScopeguardthis8013 ITScopeit_scopethiscond8014 vmrscondrtspec_reg8015    ( ,  ) {Vmrs(RegisterOrAPSR_nzcv rt,SpecialFPRegister spec_reg)8016 voidVmrsRegisterOrAPSR_nzcvrtSpecialFPRegisterspec_reg    (, , );
  }
8017 Vmrsalrtspec_reg8018 8019    ( ,  ,  ) {Vmsr(Condition cond,SpecialFPRegister spec_reg,Register rt)8020 voidVmsrConditioncondSpecialFPRegisterspec_regRegisterrt    (!());
    ();
    (());
     ();
     (, &);
    (, , );
  }


8021 VIXL_ASSERTAliasesAvailableScratchRegisterrt8022 VIXL_ASSERTallow_macro_instructions_8023 VIXL_ASSERTOutsideITBlock8024 MacroEmissionCheckScopeguardthis8025 ITScopeit_scopethiscond8026 vmsrcondspec_regrt8027    ( ,  ) { (, , ); }
Vmsr(SpecialFPRegister spec_reg,Register rt)8028 voidVmsrSpecialFPRegisterspec_regRegisterrtVmsralspec_regrt8029    ( ,Vmul(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister dm,unsigned index)8030 voidVmulConditioncond             ,
             ,
             ,
             ,
             ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , , );
  }



8031 DataTypedt8032 DRegisterrd8033 DRegisterrn8034 DRegisterdm8035 unsignedindex8036 VIXL_ASSERTAliasesAvailableScratchRegisterrd8037 VIXL_ASSERTAliasesAvailableScratchRegisterrn8038 VIXL_ASSERTAliasesAvailableScratchRegisterdm8039 VIXL_ASSERTallow_macro_instructions_8040 VIXL_ASSERTOutsideITBlock8041 MacroEmissionCheckScopeguardthis8042 ITScopeit_scopethiscond8043 vmulconddtrdrndmindex8044    (Vmul(DataType dt,DRegister rd,DRegister rn,DRegister dm,unsigned index)8045 voidVmul       ,  ,  ,  ,  ) {
    (, , , , , );
  }
8046 DataTypedtDRegisterrdDRegisterrnDRegisterdmunsignedindex8047 Vmulaldtrdrndmindex8048 8049    ( ,Vmul(Condition cond,DataType dt,QRegister rd,QRegister rn,DRegister dm,unsigned index)8050 voidVmulConditioncond             ,
             ,
             ,
             ,
             ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , , );
  }



8051 DataTypedt8052 QRegisterrd8053 QRegisterrn8054 DRegisterdm8055 unsignedindex8056 VIXL_ASSERTAliasesAvailableScratchRegisterrd8057 VIXL_ASSERTAliasesAvailableScratchRegisterrn8058 VIXL_ASSERTAliasesAvailableScratchRegisterdm8059 VIXL_ASSERTallow_macro_instructions_8060 VIXL_ASSERTOutsideITBlock8061 MacroEmissionCheckScopeguardthis8062 ITScopeit_scopethiscond8063 vmulconddtrdrndmindex8064    (Vmul(DataType dt,QRegister rd,QRegister rn,DRegister dm,unsigned index)8065 voidVmul       ,  ,  ,  ,  ) {
    (, , , , , );
  }
8066 DataTypedtQRegisterrdQRegisterrnDRegisterdmunsignedindex8067 Vmulaldtrdrndmindex8068 8069    (Vmul(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)8070 voidVmul       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



8071 ConditioncondDataTypedtDRegisterrdDRegisterrnDRegisterrm8072 VIXL_ASSERTAliasesAvailableScratchRegisterrd8073 VIXL_ASSERTAliasesAvailableScratchRegisterrn8074 VIXL_ASSERTAliasesAvailableScratchRegisterrm8075 VIXL_ASSERTallow_macro_instructions_8076 VIXL_ASSERTOutsideITBlock8077 MacroEmissionCheckScopeguardthis8078 ITScopeit_scopethiscond8079 vmulconddtrdrnrm8080    ( ,  ,  ,  ) {Vmul(DataType dt,DRegister rd,DRegister rn,DRegister rm)8081 voidVmulDataTypedtDRegisterrdDRegisterrnDRegisterrm    (, , , , );
  }
8082 Vmulaldtrdrnrm8083 8084    (Vmul(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)8085 voidVmul       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



8086 ConditioncondDataTypedtQRegisterrdQRegisterrnQRegisterrm8087 VIXL_ASSERTAliasesAvailableScratchRegisterrd8088 VIXL_ASSERTAliasesAvailableScratchRegisterrn8089 VIXL_ASSERTAliasesAvailableScratchRegisterrm8090 VIXL_ASSERTallow_macro_instructions_8091 VIXL_ASSERTOutsideITBlock8092 MacroEmissionCheckScopeguardthis8093 ITScopeit_scopethiscond8094 vmulconddtrdrnrm8095    ( ,  ,  ,  ) {Vmul(DataType dt,QRegister rd,QRegister rn,QRegister rm)8096 voidVmulDataTypedtQRegisterrdQRegisterrnQRegisterrm    (, , , , );
  }
8097 Vmulaldtrdrnrm8098 8099    (Vmul(Condition cond,DataType dt,SRegister rd,SRegister rn,SRegister rm)8100 voidVmul       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



8101 ConditioncondDataTypedtSRegisterrdSRegisterrnSRegisterrm8102 VIXL_ASSERTAliasesAvailableScratchRegisterrd8103 VIXL_ASSERTAliasesAvailableScratchRegisterrn8104 VIXL_ASSERTAliasesAvailableScratchRegisterrm8105 VIXL_ASSERTallow_macro_instructions_8106 VIXL_ASSERTOutsideITBlock8107 MacroEmissionCheckScopeguardthis8108 ITScopeit_scopethiscond8109 vmulconddtrdrnrm8110    ( ,  ,  ,  ) {Vmul(DataType dt,SRegister rd,SRegister rn,SRegister rm)8111 voidVmulDataTypedtSRegisterrdSRegisterrnSRegisterrm    (, , , , );
  }
8112 Vmulaldtrdrnrm8113 8114    ( ,Vmull(Condition cond,DataType dt,QRegister rd,DRegister rn,DRegister dm,unsigned index)8115 voidVmullConditioncond              ,
              ,
              ,
              ,
              ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , , );
  }



8116 DataTypedt8117 QRegisterrd8118 DRegisterrn8119 DRegisterdm8120 unsignedindex8121 VIXL_ASSERTAliasesAvailableScratchRegisterrd8122 VIXL_ASSERTAliasesAvailableScratchRegisterrn8123 VIXL_ASSERTAliasesAvailableScratchRegisterdm8124 VIXL_ASSERTallow_macro_instructions_8125 VIXL_ASSERTOutsideITBlock8126 MacroEmissionCheckScopeguardthis8127 ITScopeit_scopethiscond8128 vmullconddtrdrndmindex8129    (Vmull(DataType dt,QRegister rd,DRegister rn,DRegister dm,unsigned index)8130 voidVmull       ,  ,  ,  ,  ) {
    (, , , , , );
  }
8131 DataTypedtQRegisterrdDRegisterrnDRegisterdmunsignedindex8132 Vmullaldtrdrndmindex8133 8134    (Vmull(Condition cond,DataType dt,QRegister rd,DRegister rn,DRegister rm)8135 voidVmull       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



8136 ConditioncondDataTypedtQRegisterrdDRegisterrnDRegisterrm8137 VIXL_ASSERTAliasesAvailableScratchRegisterrd8138 VIXL_ASSERTAliasesAvailableScratchRegisterrn8139 VIXL_ASSERTAliasesAvailableScratchRegisterrm8140 VIXL_ASSERTallow_macro_instructions_8141 VIXL_ASSERTOutsideITBlock8142 MacroEmissionCheckScopeguardthis8143 ITScopeit_scopethiscond8144 vmullconddtrdrnrm8145    ( ,  ,  ,  ) {Vmull(DataType dt,QRegister rd,DRegister rn,DRegister rm)8146 voidVmullDataTypedtQRegisterrdDRegisterrnDRegisterrm    (, , , , );
  }
8147 Vmullaldtrdrnrm8148 8149    ( ,Vmvn(Condition cond,DataType dt,DRegister rd,const DOperand & operand)8150 voidVmvnConditioncond             ,
             ,
             & ) {
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }



8151 DataTypedt8152 DRegisterrd8153 constDOperandoperand8154 VIXL_ASSERTAliasesAvailableScratchRegisterrd8155 VIXL_ASSERTAliasesAvailableScratchRegisteroperand8156 VIXL_ASSERTallow_macro_instructions_8157 VIXL_ASSERTOutsideITBlock8158 MacroEmissionCheckScopeguardthis8159 ITScopeit_scopethiscond8160 vmvnconddtrdoperand8161    ( ,  ,  & ) {Vmvn(DataType dt,DRegister rd,const DOperand & operand)8162 voidVmvnDataTypedtDRegisterrdconstDOperandoperand    (, , , );
  }
8163 Vmvnaldtrdoperand8164 8165    ( ,Vmvn(Condition cond,DataType dt,QRegister rd,const QOperand & operand)8166 voidVmvnConditioncond             ,
             ,
             & ) {
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }



8167 DataTypedt8168 QRegisterrd8169 constQOperandoperand8170 VIXL_ASSERTAliasesAvailableScratchRegisterrd8171 VIXL_ASSERTAliasesAvailableScratchRegisteroperand8172 VIXL_ASSERTallow_macro_instructions_8173 VIXL_ASSERTOutsideITBlock8174 MacroEmissionCheckScopeguardthis8175 ITScopeit_scopethiscond8176 vmvnconddtrdoperand8177    ( ,  ,  & ) {Vmvn(DataType dt,QRegister rd,const QOperand & operand)8178 voidVmvnDataTypedtQRegisterrdconstQOperandoperand    (, , , );
  }
8179 Vmvnaldtrdoperand8180 8181    ( ,  ,  ,  ) {Vneg(Condition cond,DataType dt,DRegister rd,DRegister rm)8182 voidVnegConditioncondDataTypedtDRegisterrdDRegisterrm    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }


8183 VIXL_ASSERTAliasesAvailableScratchRegisterrd8184 VIXL_ASSERTAliasesAvailableScratchRegisterrm8185 VIXL_ASSERTallow_macro_instructions_8186 VIXL_ASSERTOutsideITBlock8187 MacroEmissionCheckScopeguardthis8188 ITScopeit_scopethiscond8189 vnegconddtrdrm8190    ( ,  ,  ) { (, , , ); }
Vneg(DataType dt,DRegister rd,DRegister rm)8191 voidVnegDataTypedtDRegisterrdDRegisterrmVnegaldtrdrm8192    ( ,  ,  ,  ) {Vneg(Condition cond,DataType dt,QRegister rd,QRegister rm)8193 voidVnegConditioncondDataTypedtQRegisterrdQRegisterrm    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }


8194 VIXL_ASSERTAliasesAvailableScratchRegisterrd8195 VIXL_ASSERTAliasesAvailableScratchRegisterrm8196 VIXL_ASSERTallow_macro_instructions_8197 VIXL_ASSERTOutsideITBlock8198 MacroEmissionCheckScopeguardthis8199 ITScopeit_scopethiscond8200 vnegconddtrdrm8201    ( ,  ,  ) { (, , , ); }
Vneg(DataType dt,QRegister rd,QRegister rm)8202 voidVnegDataTypedtQRegisterrdQRegisterrmVnegaldtrdrm8203    ( ,  ,  ,  ) {Vneg(Condition cond,DataType dt,SRegister rd,SRegister rm)8204 voidVnegConditioncondDataTypedtSRegisterrdSRegisterrm    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }


8205 VIXL_ASSERTAliasesAvailableScratchRegisterrd8206 VIXL_ASSERTAliasesAvailableScratchRegisterrm8207 VIXL_ASSERTallow_macro_instructions_8208 VIXL_ASSERTOutsideITBlock8209 MacroEmissionCheckScopeguardthis8210 ITScopeit_scopethiscond8211 vnegconddtrdrm8212    ( ,  ,  ) { (, , , ); }
Vneg(DataType dt,SRegister rd,SRegister rm)8213 voidVnegDataTypedtSRegisterrdSRegisterrmVnegaldtrdrm8214    (Vnmla(Condition cond,DataType dt,SRegister rd,SRegister rn,SRegister rm)8215 voidVnmla       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



8216 ConditioncondDataTypedtSRegisterrdSRegisterrnSRegisterrm8217 VIXL_ASSERTAliasesAvailableScratchRegisterrd8218 VIXL_ASSERTAliasesAvailableScratchRegisterrn8219 VIXL_ASSERTAliasesAvailableScratchRegisterrm8220 VIXL_ASSERTallow_macro_instructions_8221 VIXL_ASSERTOutsideITBlock8222 MacroEmissionCheckScopeguardthis8223 ITScopeit_scopethiscond8224 vnmlaconddtrdrnrm8225    ( ,  ,  ,  ) {Vnmla(DataType dt,SRegister rd,SRegister rn,SRegister rm)8226 voidVnmlaDataTypedtSRegisterrdSRegisterrnSRegisterrm    (, , , , );
  }
8227 Vnmlaaldtrdrnrm8228 8229    (Vnmla(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)8230 voidVnmla       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



8231 ConditioncondDataTypedtDRegisterrdDRegisterrnDRegisterrm8232 VIXL_ASSERTAliasesAvailableScratchRegisterrd8233 VIXL_ASSERTAliasesAvailableScratchRegisterrn8234 VIXL_ASSERTAliasesAvailableScratchRegisterrm8235 VIXL_ASSERTallow_macro_instructions_8236 VIXL_ASSERTOutsideITBlock8237 MacroEmissionCheckScopeguardthis8238 ITScopeit_scopethiscond8239 vnmlaconddtrdrnrm8240    ( ,  ,  ,  ) {Vnmla(DataType dt,DRegister rd,DRegister rn,DRegister rm)8241 voidVnmlaDataTypedtDRegisterrdDRegisterrnDRegisterrm    (, , , , );
  }
8242 Vnmlaaldtrdrnrm8243 8244    (Vnmls(Condition cond,DataType dt,SRegister rd,SRegister rn,SRegister rm)8245 voidVnmls       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



8246 ConditioncondDataTypedtSRegisterrdSRegisterrnSRegisterrm8247 VIXL_ASSERTAliasesAvailableScratchRegisterrd8248 VIXL_ASSERTAliasesAvailableScratchRegisterrn8249 VIXL_ASSERTAliasesAvailableScratchRegisterrm8250 VIXL_ASSERTallow_macro_instructions_8251 VIXL_ASSERTOutsideITBlock8252 MacroEmissionCheckScopeguardthis8253 ITScopeit_scopethiscond8254 vnmlsconddtrdrnrm8255    ( ,  ,  ,  ) {Vnmls(DataType dt,SRegister rd,SRegister rn,SRegister rm)8256 voidVnmlsDataTypedtSRegisterrdSRegisterrnSRegisterrm    (, , , , );
  }
8257 Vnmlsaldtrdrnrm8258 8259    (Vnmls(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)8260 voidVnmls       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



8261 ConditioncondDataTypedtDRegisterrdDRegisterrnDRegisterrm8262 VIXL_ASSERTAliasesAvailableScratchRegisterrd8263 VIXL_ASSERTAliasesAvailableScratchRegisterrn8264 VIXL_ASSERTAliasesAvailableScratchRegisterrm8265 VIXL_ASSERTallow_macro_instructions_8266 VIXL_ASSERTOutsideITBlock8267 MacroEmissionCheckScopeguardthis8268 ITScopeit_scopethiscond8269 vnmlsconddtrdrnrm8270    ( ,  ,  ,  ) {Vnmls(DataType dt,DRegister rd,DRegister rn,DRegister rm)8271 voidVnmlsDataTypedtDRegisterrdDRegisterrnDRegisterrm    (, , , , );
  }
8272 Vnmlsaldtrdrnrm8273 8274    (Vnmul(Condition cond,DataType dt,SRegister rd,SRegister rn,SRegister rm)8275 voidVnmul       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



8276 ConditioncondDataTypedtSRegisterrdSRegisterrnSRegisterrm8277 VIXL_ASSERTAliasesAvailableScratchRegisterrd8278 VIXL_ASSERTAliasesAvailableScratchRegisterrn8279 VIXL_ASSERTAliasesAvailableScratchRegisterrm8280 VIXL_ASSERTallow_macro_instructions_8281 VIXL_ASSERTOutsideITBlock8282 MacroEmissionCheckScopeguardthis8283 ITScopeit_scopethiscond8284 vnmulconddtrdrnrm8285    ( ,  ,  ,  ) {Vnmul(DataType dt,SRegister rd,SRegister rn,SRegister rm)8286 voidVnmulDataTypedtSRegisterrdSRegisterrnSRegisterrm    (, , , , );
  }
8287 Vnmulaldtrdrnrm8288 8289    (Vnmul(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)8290 voidVnmul       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



8291 ConditioncondDataTypedtDRegisterrdDRegisterrnDRegisterrm8292 VIXL_ASSERTAliasesAvailableScratchRegisterrd8293 VIXL_ASSERTAliasesAvailableScratchRegisterrn8294 VIXL_ASSERTAliasesAvailableScratchRegisterrm8295 VIXL_ASSERTallow_macro_instructions_8296 VIXL_ASSERTOutsideITBlock8297 MacroEmissionCheckScopeguardthis8298 ITScopeit_scopethiscond8299 vnmulconddtrdrnrm8300    ( ,  ,  ,  ) {Vnmul(DataType dt,DRegister rd,DRegister rn,DRegister rm)8301 voidVnmulDataTypedtDRegisterrdDRegisterrnDRegisterrm    (, , , , );
  }
8302 Vnmulaldtrdrnrm8303 8304    ( ,Vorn(Condition cond,DataType dt,DRegister rd,DRegister rn,const DOperand & operand)8305 voidVornConditioncond             ,
             ,
             ,
             & ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



8306 DataTypedt8307 DRegisterrd8308 DRegisterrn8309 constDOperandoperand8310 VIXL_ASSERTAliasesAvailableScratchRegisterrd8311 VIXL_ASSERTAliasesAvailableScratchRegisterrn8312 VIXL_ASSERTAliasesAvailableScratchRegisteroperand8313 VIXL_ASSERTallow_macro_instructions_8314 VIXL_ASSERTOutsideITBlock8315 MacroEmissionCheckScopeguardthis8316 ITScopeit_scopethiscond8317 vornconddtrdrnoperand8318    ( ,  ,  ,  & ) {Vorn(DataType dt,DRegister rd,DRegister rn,const DOperand & operand)8319 voidVornDataTypedtDRegisterrdDRegisterrnconstDOperandoperand    (, , , , );
  }
8320 Vornaldtrdrnoperand8321 8322    ( ,Vorn(Condition cond,DataType dt,QRegister rd,QRegister rn,const QOperand & operand)8323 voidVornConditioncond             ,
             ,
             ,
             & ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



8324 DataTypedt8325 QRegisterrd8326 QRegisterrn8327 constQOperandoperand8328 VIXL_ASSERTAliasesAvailableScratchRegisterrd8329 VIXL_ASSERTAliasesAvailableScratchRegisterrn8330 VIXL_ASSERTAliasesAvailableScratchRegisteroperand8331 VIXL_ASSERTallow_macro_instructions_8332 VIXL_ASSERTOutsideITBlock8333 MacroEmissionCheckScopeguardthis8334 ITScopeit_scopethiscond8335 vornconddtrdrnoperand8336    ( ,  ,  ,  & ) {Vorn(DataType dt,QRegister rd,QRegister rn,const QOperand & operand)8337 voidVornDataTypedtQRegisterrdQRegisterrnconstQOperandoperand    (, , , , );
  }
8338 Vornaldtrdrnoperand8339 8340    ( ,Vorr(Condition cond,DataType dt,DRegister rd,DRegister rn,const DOperand & operand)8341 voidVorrConditioncond             ,
             ,
             ,
             & ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }

8342 DataTypedt8343 DRegisterrd8344 DRegisterrn8345 constDOperandoperand8346 VIXL_ASSERTAliasesAvailableScratchRegisterrd8347 VIXL_ASSERTAliasesAvailableScratchRegisterrn8348 VIXL_ASSERTAliasesAvailableScratchRegisteroperand8349 VIXL_ASSERTallow_macro_instructions_8350 VIXL_ASSERTOutsideITBlock8351 MacroEmissionCheckScopeguardthis8352 ITScopeit_scopethiscond8353 vorrconddtrdrnoperand8354    ( ,  ,  ,  & ) {Vorr(DataType dt,DRegister rd,DRegister rn,const DOperand & operand)8355 voidVorrDataTypedtDRegisterrdDRegisterrnconstDOperandoperand    (, , , , );
  }

8356 Vorraldtrdrnoperand8357    ( ,Vorr(Condition cond,DRegister rd,DRegister rn,const DOperand & operand)8358 voidVorrConditioncond             ,
             ,
             & ) {
    (, , , , );
  }



8359 DRegisterrd8360 DRegisterrn8361 constDOperandoperand8362 VorrcondkDataTypeValueNonerdrnoperand8363    ( ,  ,  & ) {Vorr(DRegister rd,DRegister rn,const DOperand & operand)8364 voidVorrDRegisterrdDRegisterrnconstDOperandoperand    (, , , , );
  }
8365 VorralkDataTypeValueNonerdrnoperand8366 8367    ( ,Vorr(Condition cond,DataType dt,QRegister rd,QRegister rn,const QOperand & operand)8368 voidVorrConditioncond             ,
             ,
             ,
             & ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }

8369 DataTypedt8370 QRegisterrd8371 QRegisterrn8372 constQOperandoperand8373 VIXL_ASSERTAliasesAvailableScratchRegisterrd8374 VIXL_ASSERTAliasesAvailableScratchRegisterrn8375 VIXL_ASSERTAliasesAvailableScratchRegisteroperand8376 VIXL_ASSERTallow_macro_instructions_8377 VIXL_ASSERTOutsideITBlock8378 MacroEmissionCheckScopeguardthis8379 ITScopeit_scopethiscond8380 vorrconddtrdrnoperand8381    ( ,  ,  ,  & ) {Vorr(DataType dt,QRegister rd,QRegister rn,const QOperand & operand)8382 voidVorrDataTypedtQRegisterrdQRegisterrnconstQOperandoperand    (, , , , );
  }

8383 Vorraldtrdrnoperand8384    ( ,Vorr(Condition cond,QRegister rd,QRegister rn,const QOperand & operand)8385 voidVorrConditioncond             ,
             ,
             & ) {
    (, , , , );
  }



8386 QRegisterrd8387 QRegisterrn8388 constQOperandoperand8389 VorrcondkDataTypeValueNonerdrnoperand8390    ( ,  ,  & ) {Vorr(QRegister rd,QRegister rn,const QOperand & operand)8391 voidVorrQRegisterrdQRegisterrnconstQOperandoperand    (, , , , );
  }
8392 VorralkDataTypeValueNonerdrnoperand8393 8394    ( ,  ,  ,  ) {Vpadal(Condition cond,DataType dt,DRegister rd,DRegister rm)8395 voidVpadalConditioncondDataTypedtDRegisterrdDRegisterrm    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }



8396 VIXL_ASSERTAliasesAvailableScratchRegisterrd8397 VIXL_ASSERTAliasesAvailableScratchRegisterrm8398 VIXL_ASSERTallow_macro_instructions_8399 VIXL_ASSERTOutsideITBlock8400 MacroEmissionCheckScopeguardthis8401 ITScopeit_scopethiscond8402 vpadalconddtrdrm8403    ( ,  ,  ) {Vpadal(DataType dt,DRegister rd,DRegister rm)8404 voidVpadalDataTypedtDRegisterrdDRegisterrm    (, , , );
  }
8405 Vpadalaldtrdrm8406 8407    ( ,  ,  ,  ) {Vpadal(Condition cond,DataType dt,QRegister rd,QRegister rm)8408 voidVpadalConditioncondDataTypedtQRegisterrdQRegisterrm    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }



8409 VIXL_ASSERTAliasesAvailableScratchRegisterrd8410 VIXL_ASSERTAliasesAvailableScratchRegisterrm8411 VIXL_ASSERTallow_macro_instructions_8412 VIXL_ASSERTOutsideITBlock8413 MacroEmissionCheckScopeguardthis8414 ITScopeit_scopethiscond8415 vpadalconddtrdrm8416    ( ,  ,  ) {Vpadal(DataType dt,QRegister rd,QRegister rm)8417 voidVpadalDataTypedtQRegisterrdQRegisterrm    (, , , );
  }
8418 Vpadalaldtrdrm8419 8420    (Vpadd(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)8421 voidVpadd       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



8422 ConditioncondDataTypedtDRegisterrdDRegisterrnDRegisterrm8423 VIXL_ASSERTAliasesAvailableScratchRegisterrd8424 VIXL_ASSERTAliasesAvailableScratchRegisterrn8425 VIXL_ASSERTAliasesAvailableScratchRegisterrm8426 VIXL_ASSERTallow_macro_instructions_8427 VIXL_ASSERTOutsideITBlock8428 MacroEmissionCheckScopeguardthis8429 ITScopeit_scopethiscond8430 vpaddconddtrdrnrm8431    ( ,  ,  ,  ) {Vpadd(DataType dt,DRegister rd,DRegister rn,DRegister rm)8432 voidVpaddDataTypedtDRegisterrdDRegisterrnDRegisterrm    (, , , , );
  }
8433 Vpaddaldtrdrnrm8434 8435    ( ,  ,  ,  ) {Vpaddl(Condition cond,DataType dt,DRegister rd,DRegister rm)8436 voidVpaddlConditioncondDataTypedtDRegisterrdDRegisterrm    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }



8437 VIXL_ASSERTAliasesAvailableScratchRegisterrd8438 VIXL_ASSERTAliasesAvailableScratchRegisterrm8439 VIXL_ASSERTallow_macro_instructions_8440 VIXL_ASSERTOutsideITBlock8441 MacroEmissionCheckScopeguardthis8442 ITScopeit_scopethiscond8443 vpaddlconddtrdrm8444    ( ,  ,  ) {Vpaddl(DataType dt,DRegister rd,DRegister rm)8445 voidVpaddlDataTypedtDRegisterrdDRegisterrm    (, , , );
  }
8446 Vpaddlaldtrdrm8447 8448    ( ,  ,  ,  ) {Vpaddl(Condition cond,DataType dt,QRegister rd,QRegister rm)8449 voidVpaddlConditioncondDataTypedtQRegisterrdQRegisterrm    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }



8450 VIXL_ASSERTAliasesAvailableScratchRegisterrd8451 VIXL_ASSERTAliasesAvailableScratchRegisterrm8452 VIXL_ASSERTallow_macro_instructions_8453 VIXL_ASSERTOutsideITBlock8454 MacroEmissionCheckScopeguardthis8455 ITScopeit_scopethiscond8456 vpaddlconddtrdrm8457    ( ,  ,  ) {Vpaddl(DataType dt,QRegister rd,QRegister rm)8458 voidVpaddlDataTypedtQRegisterrdQRegisterrm    (, , , );
  }
8459 Vpaddlaldtrdrm8460 8461    (Vpmax(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)8462 voidVpmax       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



8463 ConditioncondDataTypedtDRegisterrdDRegisterrnDRegisterrm8464 VIXL_ASSERTAliasesAvailableScratchRegisterrd8465 VIXL_ASSERTAliasesAvailableScratchRegisterrn8466 VIXL_ASSERTAliasesAvailableScratchRegisterrm8467 VIXL_ASSERTallow_macro_instructions_8468 VIXL_ASSERTOutsideITBlock8469 MacroEmissionCheckScopeguardthis8470 ITScopeit_scopethiscond8471 vpmaxconddtrdrnrm8472    ( ,  ,  ,  ) {Vpmax(DataType dt,DRegister rd,DRegister rn,DRegister rm)8473 voidVpmaxDataTypedtDRegisterrdDRegisterrnDRegisterrm    (, , , , );
  }
8474 Vpmaxaldtrdrnrm8475 8476    (Vpmin(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)8477 voidVpmin       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



8478 ConditioncondDataTypedtDRegisterrdDRegisterrnDRegisterrm8479 VIXL_ASSERTAliasesAvailableScratchRegisterrd8480 VIXL_ASSERTAliasesAvailableScratchRegisterrn8481 VIXL_ASSERTAliasesAvailableScratchRegisterrm8482 VIXL_ASSERTallow_macro_instructions_8483 VIXL_ASSERTOutsideITBlock8484 MacroEmissionCheckScopeguardthis8485 ITScopeit_scopethiscond8486 vpminconddtrdrnrm8487    ( ,  ,  ,  ) {Vpmin(DataType dt,DRegister rd,DRegister rn,DRegister rm)8488 voidVpminDataTypedtDRegisterrdDRegisterrnDRegisterrm    (, , , , );
  }
8489 Vpminaldtrdrnrm8490 8491    ( ,  ,  ) {Vpop(Condition cond,DataType dt,DRegisterList dreglist)8492 voidVpopConditioncondDataTypedtDRegisterListdreglist    (!());
    ();
    (());
     ();
     (, &);
    (, , );
  }
8493 VIXL_ASSERTAliasesAvailableScratchRegisterdreglist8494 VIXL_ASSERTallow_macro_instructions_8495 VIXL_ASSERTOutsideITBlock8496 MacroEmissionCheckScopeguardthis8497 ITScopeit_scopethiscond8498 vpopconddtdreglist8499    ( ,  ) { (, , ); }

Vpop(DataType dt,DRegisterList dreglist)8500 voidVpopDataTypedtDRegisterListdreglistVpopaldtdreglist   ( ,  ) {Vpop(Condition cond,DRegisterList dreglist)8501 voidVpopConditioncondDRegisterListdreglist    (, , );
  }


8502 VpopcondkDataTypeValueNonedreglist8503    ( ) { (, , ); }
Vpop(DRegisterList dreglist)8504 voidVpopDRegisterListdreglistVpopalkDataTypeValueNonedreglist8505    ( ,  ,  ) {Vpop(Condition cond,DataType dt,SRegisterList sreglist)8506 voidVpopConditioncondDataTypedtSRegisterListsreglist    (!());
    ();
    (());
     ();
     (, &);
    (, , );
  }
8507 VIXL_ASSERTAliasesAvailableScratchRegistersreglist8508 VIXL_ASSERTallow_macro_instructions_8509 VIXL_ASSERTOutsideITBlock8510 MacroEmissionCheckScopeguardthis8511 ITScopeit_scopethiscond8512 vpopconddtsreglist8513    ( ,  ) { (, , ); }

Vpop(DataType dt,SRegisterList sreglist)8514 voidVpopDataTypedtSRegisterListsreglistVpopaldtsreglist   ( ,  ) {Vpop(Condition cond,SRegisterList sreglist)8515 voidVpopConditioncondSRegisterListsreglist    (, , );
  }


8516 VpopcondkDataTypeValueNonesreglist8517    ( ) { (, , ); }
Vpop(SRegisterList sreglist)8518 voidVpopSRegisterListsreglistVpopalkDataTypeValueNonesreglist8519    ( ,  ,  ) {Vpush(Condition cond,DataType dt,DRegisterList dreglist)8520 voidVpushConditioncondDataTypedtDRegisterListdreglist    (!());
    ();
    (());
     ();
     (, &);
    (, , );
  }
8521 VIXL_ASSERTAliasesAvailableScratchRegisterdreglist8522 VIXL_ASSERTallow_macro_instructions_8523 VIXL_ASSERTOutsideITBlock8524 MacroEmissionCheckScopeguardthis8525 ITScopeit_scopethiscond8526 vpushconddtdreglist8527    ( ,  ) { (, , ); }

Vpush(DataType dt,DRegisterList dreglist)8528 voidVpushDataTypedtDRegisterListdreglistVpushaldtdreglist   ( ,  ) {Vpush(Condition cond,DRegisterList dreglist)8529 voidVpushConditioncondDRegisterListdreglist    (, , );
  }



8530 VpushcondkDataTypeValueNonedreglist8531    ( ) {Vpush(DRegisterList dreglist)8532 voidVpushDRegisterListdreglist    (, , );
  }
8533 VpushalkDataTypeValueNonedreglist8534 8535    ( ,  ,  ) {Vpush(Condition cond,DataType dt,SRegisterList sreglist)8536 voidVpushConditioncondDataTypedtSRegisterListsreglist    (!());
    ();
    (());
     ();
     (, &);
    (, , );
  }
8537 VIXL_ASSERTAliasesAvailableScratchRegistersreglist8538 VIXL_ASSERTallow_macro_instructions_8539 VIXL_ASSERTOutsideITBlock8540 MacroEmissionCheckScopeguardthis8541 ITScopeit_scopethiscond8542 vpushconddtsreglist8543    ( ,  ) { (, , ); }

Vpush(DataType dt,SRegisterList sreglist)8544 voidVpushDataTypedtSRegisterListsreglistVpushaldtsreglist   ( ,  ) {Vpush(Condition cond,SRegisterList sreglist)8545 voidVpushConditioncondSRegisterListsreglist    (, , );
  }



8546 VpushcondkDataTypeValueNonesreglist8547    ( ) {Vpush(SRegisterList sreglist)8548 voidVpushSRegisterListsreglist    (, , );
  }
8549 VpushalkDataTypeValueNonesreglist8550 8551    ( ,  ,  ,  ) {Vqabs(Condition cond,DataType dt,DRegister rd,DRegister rm)8552 voidVqabsConditioncondDataTypedtDRegisterrdDRegisterrm    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }


8553 VIXL_ASSERTAliasesAvailableScratchRegisterrd8554 VIXL_ASSERTAliasesAvailableScratchRegisterrm8555 VIXL_ASSERTallow_macro_instructions_8556 VIXL_ASSERTOutsideITBlock8557 MacroEmissionCheckScopeguardthis8558 ITScopeit_scopethiscond8559 vqabsconddtrdrm8560    ( ,  ,  ) { (, , , ); }
Vqabs(DataType dt,DRegister rd,DRegister rm)8561 voidVqabsDataTypedtDRegisterrdDRegisterrmVqabsaldtrdrm8562    ( ,  ,  ,  ) {Vqabs(Condition cond,DataType dt,QRegister rd,QRegister rm)8563 voidVqabsConditioncondDataTypedtQRegisterrdQRegisterrm    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }


8564 VIXL_ASSERTAliasesAvailableScratchRegisterrd8565 VIXL_ASSERTAliasesAvailableScratchRegisterrm8566 VIXL_ASSERTallow_macro_instructions_8567 VIXL_ASSERTOutsideITBlock8568 MacroEmissionCheckScopeguardthis8569 ITScopeit_scopethiscond8570 vqabsconddtrdrm8571    ( ,  ,  ) { (, , , ); }
Vqabs(DataType dt,QRegister rd,QRegister rm)8572 voidVqabsDataTypedtQRegisterrdQRegisterrmVqabsaldtrdrm8573    (Vqadd(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)8574 voidVqadd       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



8575 ConditioncondDataTypedtDRegisterrdDRegisterrnDRegisterrm8576 VIXL_ASSERTAliasesAvailableScratchRegisterrd8577 VIXL_ASSERTAliasesAvailableScratchRegisterrn8578 VIXL_ASSERTAliasesAvailableScratchRegisterrm8579 VIXL_ASSERTallow_macro_instructions_8580 VIXL_ASSERTOutsideITBlock8581 MacroEmissionCheckScopeguardthis8582 ITScopeit_scopethiscond8583 vqaddconddtrdrnrm8584    ( ,  ,  ,  ) {Vqadd(DataType dt,DRegister rd,DRegister rn,DRegister rm)8585 voidVqaddDataTypedtDRegisterrdDRegisterrnDRegisterrm    (, , , , );
  }
8586 Vqaddaldtrdrnrm8587 8588    (Vqadd(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)8589 voidVqadd       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



8590 ConditioncondDataTypedtQRegisterrdQRegisterrnQRegisterrm8591 VIXL_ASSERTAliasesAvailableScratchRegisterrd8592 VIXL_ASSERTAliasesAvailableScratchRegisterrn8593 VIXL_ASSERTAliasesAvailableScratchRegisterrm8594 VIXL_ASSERTallow_macro_instructions_8595 VIXL_ASSERTOutsideITBlock8596 MacroEmissionCheckScopeguardthis8597 ITScopeit_scopethiscond8598 vqaddconddtrdrnrm8599    ( ,  ,  ,  ) {Vqadd(DataType dt,QRegister rd,QRegister rn,QRegister rm)8600 voidVqaddDataTypedtQRegisterrdQRegisterrnQRegisterrm    (, , , , );
  }
8601 Vqaddaldtrdrnrm8602 8603    (Vqdmlal(Condition cond,DataType dt,QRegister rd,DRegister rn,DRegister rm)8604 voidVqdmlal       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



8605 ConditioncondDataTypedtQRegisterrdDRegisterrnDRegisterrm8606 VIXL_ASSERTAliasesAvailableScratchRegisterrd8607 VIXL_ASSERTAliasesAvailableScratchRegisterrn8608 VIXL_ASSERTAliasesAvailableScratchRegisterrm8609 VIXL_ASSERTallow_macro_instructions_8610 VIXL_ASSERTOutsideITBlock8611 MacroEmissionCheckScopeguardthis8612 ITScopeit_scopethiscond8613 vqdmlalconddtrdrnrm8614    ( ,  ,  ,  ) {Vqdmlal(DataType dt,QRegister rd,DRegister rn,DRegister rm)8615 voidVqdmlalDataTypedtQRegisterrdDRegisterrnDRegisterrm    (, , , , );
  }
8616 Vqdmlalaldtrdrnrm8617 8618    ( ,Vqdmlal(Condition cond,DataType dt,QRegister rd,DRegister rn,DRegister dm,unsigned index)8619 voidVqdmlalConditioncond                ,
                ,
                ,
                ,
                ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , , );
  }



8620 DataTypedt8621 QRegisterrd8622 DRegisterrn8623 DRegisterdm8624 unsignedindex8625 VIXL_ASSERTAliasesAvailableScratchRegisterrd8626 VIXL_ASSERTAliasesAvailableScratchRegisterrn8627 VIXL_ASSERTAliasesAvailableScratchRegisterdm8628 VIXL_ASSERTallow_macro_instructions_8629 VIXL_ASSERTOutsideITBlock8630 MacroEmissionCheckScopeguardthis8631 ITScopeit_scopethiscond8632 vqdmlalconddtrdrndmindex8633    (Vqdmlal(DataType dt,QRegister rd,DRegister rn,DRegister dm,unsigned index)8634 voidVqdmlal       ,  ,  ,  ,  ) {
    (, , , , , );
  }
8635 DataTypedtQRegisterrdDRegisterrnDRegisterdmunsignedindex8636 Vqdmlalaldtrdrndmindex8637 8638    (Vqdmlsl(Condition cond,DataType dt,QRegister rd,DRegister rn,DRegister rm)8639 voidVqdmlsl       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



8640 ConditioncondDataTypedtQRegisterrdDRegisterrnDRegisterrm8641 VIXL_ASSERTAliasesAvailableScratchRegisterrd8642 VIXL_ASSERTAliasesAvailableScratchRegisterrn8643 VIXL_ASSERTAliasesAvailableScratchRegisterrm8644 VIXL_ASSERTallow_macro_instructions_8645 VIXL_ASSERTOutsideITBlock8646 MacroEmissionCheckScopeguardthis8647 ITScopeit_scopethiscond8648 vqdmlslconddtrdrnrm8649    ( ,  ,  ,  ) {Vqdmlsl(DataType dt,QRegister rd,DRegister rn,DRegister rm)8650 voidVqdmlslDataTypedtQRegisterrdDRegisterrnDRegisterrm    (, , , , );
  }
8651 Vqdmlslaldtrdrnrm8652 8653    ( ,Vqdmlsl(Condition cond,DataType dt,QRegister rd,DRegister rn,DRegister dm,unsigned index)8654 voidVqdmlslConditioncond                ,
                ,
                ,
                ,
                ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , , );
  }



8655 DataTypedt8656 QRegisterrd8657 DRegisterrn8658 DRegisterdm8659 unsignedindex8660 VIXL_ASSERTAliasesAvailableScratchRegisterrd8661 VIXL_ASSERTAliasesAvailableScratchRegisterrn8662 VIXL_ASSERTAliasesAvailableScratchRegisterdm8663 VIXL_ASSERTallow_macro_instructions_8664 VIXL_ASSERTOutsideITBlock8665 MacroEmissionCheckScopeguardthis8666 ITScopeit_scopethiscond8667 vqdmlslconddtrdrndmindex8668    (Vqdmlsl(DataType dt,QRegister rd,DRegister rn,DRegister dm,unsigned index)8669 voidVqdmlsl       ,  ,  ,  ,  ) {
    (, , , , , );
  }
8670 DataTypedtQRegisterrdDRegisterrnDRegisterdmunsignedindex8671 Vqdmlslaldtrdrndmindex8672 8673    (Vqdmulh(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)8674 voidVqdmulh       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



8675 ConditioncondDataTypedtDRegisterrdDRegisterrnDRegisterrm8676 VIXL_ASSERTAliasesAvailableScratchRegisterrd8677 VIXL_ASSERTAliasesAvailableScratchRegisterrn8678 VIXL_ASSERTAliasesAvailableScratchRegisterrm8679 VIXL_ASSERTallow_macro_instructions_8680 VIXL_ASSERTOutsideITBlock8681 MacroEmissionCheckScopeguardthis8682 ITScopeit_scopethiscond8683 vqdmulhconddtrdrnrm8684    ( ,  ,  ,  ) {Vqdmulh(DataType dt,DRegister rd,DRegister rn,DRegister rm)8685 voidVqdmulhDataTypedtDRegisterrdDRegisterrnDRegisterrm    (, , , , );
  }
8686 Vqdmulhaldtrdrnrm8687 8688    (Vqdmulh(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)8689 voidVqdmulh       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



8690 ConditioncondDataTypedtQRegisterrdQRegisterrnQRegisterrm8691 VIXL_ASSERTAliasesAvailableScratchRegisterrd8692 VIXL_ASSERTAliasesAvailableScratchRegisterrn8693 VIXL_ASSERTAliasesAvailableScratchRegisterrm8694 VIXL_ASSERTallow_macro_instructions_8695 VIXL_ASSERTOutsideITBlock8696 MacroEmissionCheckScopeguardthis8697 ITScopeit_scopethiscond8698 vqdmulhconddtrdrnrm8699    ( ,  ,  ,  ) {Vqdmulh(DataType dt,QRegister rd,QRegister rn,QRegister rm)8700 voidVqdmulhDataTypedtQRegisterrdQRegisterrnQRegisterrm    (, , , , );
  }
8701 Vqdmulhaldtrdrnrm8702 8703    ( ,Vqdmulh(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegisterLane rm)8704 voidVqdmulhConditioncond                ,
                ,
                ,
                ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



8705 DataTypedt8706 DRegisterrd8707 DRegisterrn8708 DRegisterLanerm8709 VIXL_ASSERTAliasesAvailableScratchRegisterrd8710 VIXL_ASSERTAliasesAvailableScratchRegisterrn8711 VIXL_ASSERTAliasesAvailableScratchRegisterrm8712 VIXL_ASSERTallow_macro_instructions_8713 VIXL_ASSERTOutsideITBlock8714 MacroEmissionCheckScopeguardthis8715 ITScopeit_scopethiscond8716 vqdmulhconddtrdrnrm8717    ( ,  ,  ,  ) {Vqdmulh(DataType dt,DRegister rd,DRegister rn,DRegisterLane rm)8718 voidVqdmulhDataTypedtDRegisterrdDRegisterrnDRegisterLanerm    (, , , , );
  }
8719 Vqdmulhaldtrdrnrm8720 8721    ( ,Vqdmulh(Condition cond,DataType dt,QRegister rd,QRegister rn,DRegisterLane rm)8722 voidVqdmulhConditioncond                ,
                ,
                ,
                ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



8723 DataTypedt8724 QRegisterrd8725 QRegisterrn8726 DRegisterLanerm8727 VIXL_ASSERTAliasesAvailableScratchRegisterrd8728 VIXL_ASSERTAliasesAvailableScratchRegisterrn8729 VIXL_ASSERTAliasesAvailableScratchRegisterrm8730 VIXL_ASSERTallow_macro_instructions_8731 VIXL_ASSERTOutsideITBlock8732 MacroEmissionCheckScopeguardthis8733 ITScopeit_scopethiscond8734 vqdmulhconddtrdrnrm8735    ( ,  ,  ,  ) {Vqdmulh(DataType dt,QRegister rd,QRegister rn,DRegisterLane rm)8736 voidVqdmulhDataTypedtQRegisterrdQRegisterrnDRegisterLanerm    (, , , , );
  }
8737 Vqdmulhaldtrdrnrm8738 8739    (Vqdmull(Condition cond,DataType dt,QRegister rd,DRegister rn,DRegister rm)8740 voidVqdmull       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



8741 ConditioncondDataTypedtQRegisterrdDRegisterrnDRegisterrm8742 VIXL_ASSERTAliasesAvailableScratchRegisterrd8743 VIXL_ASSERTAliasesAvailableScratchRegisterrn8744 VIXL_ASSERTAliasesAvailableScratchRegisterrm8745 VIXL_ASSERTallow_macro_instructions_8746 VIXL_ASSERTOutsideITBlock8747 MacroEmissionCheckScopeguardthis8748 ITScopeit_scopethiscond8749 vqdmullconddtrdrnrm8750    ( ,  ,  ,  ) {Vqdmull(DataType dt,QRegister rd,DRegister rn,DRegister rm)8751 voidVqdmullDataTypedtQRegisterrdDRegisterrnDRegisterrm    (, , , , );
  }
8752 Vqdmullaldtrdrnrm8753 8754    ( ,Vqdmull(Condition cond,DataType dt,QRegister rd,DRegister rn,DRegisterLane rm)8755 voidVqdmullConditioncond                ,
                ,
                ,
                ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



8756 DataTypedt8757 QRegisterrd8758 DRegisterrn8759 DRegisterLanerm8760 VIXL_ASSERTAliasesAvailableScratchRegisterrd8761 VIXL_ASSERTAliasesAvailableScratchRegisterrn8762 VIXL_ASSERTAliasesAvailableScratchRegisterrm8763 VIXL_ASSERTallow_macro_instructions_8764 VIXL_ASSERTOutsideITBlock8765 MacroEmissionCheckScopeguardthis8766 ITScopeit_scopethiscond8767 vqdmullconddtrdrnrm8768    ( ,  ,  ,  ) {Vqdmull(DataType dt,QRegister rd,DRegister rn,DRegisterLane rm)8769 voidVqdmullDataTypedtQRegisterrdDRegisterrnDRegisterLanerm    (, , , , );
  }
8770 Vqdmullaldtrdrnrm8771 8772    ( ,  ,  ,  ) {Vqmovn(Condition cond,DataType dt,DRegister rd,QRegister rm)8773 voidVqmovnConditioncondDataTypedtDRegisterrdQRegisterrm    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }



8774 VIXL_ASSERTAliasesAvailableScratchRegisterrd8775 VIXL_ASSERTAliasesAvailableScratchRegisterrm8776 VIXL_ASSERTallow_macro_instructions_8777 VIXL_ASSERTOutsideITBlock8778 MacroEmissionCheckScopeguardthis8779 ITScopeit_scopethiscond8780 vqmovnconddtrdrm8781    ( ,  ,  ) {Vqmovn(DataType dt,DRegister rd,QRegister rm)8782 voidVqmovnDataTypedtDRegisterrdQRegisterrm    (, , , );
  }
8783 Vqmovnaldtrdrm8784 8785    ( ,  ,  ,  ) {Vqmovun(Condition cond,DataType dt,DRegister rd,QRegister rm)8786 voidVqmovunConditioncondDataTypedtDRegisterrdQRegisterrm    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }



8787 VIXL_ASSERTAliasesAvailableScratchRegisterrd8788 VIXL_ASSERTAliasesAvailableScratchRegisterrm8789 VIXL_ASSERTallow_macro_instructions_8790 VIXL_ASSERTOutsideITBlock8791 MacroEmissionCheckScopeguardthis8792 ITScopeit_scopethiscond8793 vqmovunconddtrdrm8794    ( ,  ,  ) {Vqmovun(DataType dt,DRegister rd,QRegister rm)8795 voidVqmovunDataTypedtDRegisterrdQRegisterrm    (, , , );
  }
8796 Vqmovunaldtrdrm8797 8798    ( ,  ,  ,  ) {Vqneg(Condition cond,DataType dt,DRegister rd,DRegister rm)8799 voidVqnegConditioncondDataTypedtDRegisterrdDRegisterrm    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }


8800 VIXL_ASSERTAliasesAvailableScratchRegisterrd8801 VIXL_ASSERTAliasesAvailableScratchRegisterrm8802 VIXL_ASSERTallow_macro_instructions_8803 VIXL_ASSERTOutsideITBlock8804 MacroEmissionCheckScopeguardthis8805 ITScopeit_scopethiscond8806 vqnegconddtrdrm8807    ( ,  ,  ) { (, , , ); }
Vqneg(DataType dt,DRegister rd,DRegister rm)8808 voidVqnegDataTypedtDRegisterrdDRegisterrmVqnegaldtrdrm8809    ( ,  ,  ,  ) {Vqneg(Condition cond,DataType dt,QRegister rd,QRegister rm)8810 voidVqnegConditioncondDataTypedtQRegisterrdQRegisterrm    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }


8811 VIXL_ASSERTAliasesAvailableScratchRegisterrd8812 VIXL_ASSERTAliasesAvailableScratchRegisterrm8813 VIXL_ASSERTallow_macro_instructions_8814 VIXL_ASSERTOutsideITBlock8815 MacroEmissionCheckScopeguardthis8816 ITScopeit_scopethiscond8817 vqnegconddtrdrm8818    ( ,  ,  ) { (, , , ); }
Vqneg(DataType dt,QRegister rd,QRegister rm)8819 voidVqnegDataTypedtQRegisterrdQRegisterrmVqnegaldtrdrm8820    (Vqrdmulh(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)8821 voidVqrdmulh       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



8822 ConditioncondDataTypedtDRegisterrdDRegisterrnDRegisterrm8823 VIXL_ASSERTAliasesAvailableScratchRegisterrd8824 VIXL_ASSERTAliasesAvailableScratchRegisterrn8825 VIXL_ASSERTAliasesAvailableScratchRegisterrm8826 VIXL_ASSERTallow_macro_instructions_8827 VIXL_ASSERTOutsideITBlock8828 MacroEmissionCheckScopeguardthis8829 ITScopeit_scopethiscond8830 vqrdmulhconddtrdrnrm8831    ( ,  ,  ,  ) {Vqrdmulh(DataType dt,DRegister rd,DRegister rn,DRegister rm)8832 voidVqrdmulhDataTypedtDRegisterrdDRegisterrnDRegisterrm    (, , , , );
  }
8833 Vqrdmulhaldtrdrnrm8834 8835    (Vqrdmulh(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)8836 voidVqrdmulh       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



8837 ConditioncondDataTypedtQRegisterrdQRegisterrnQRegisterrm8838 VIXL_ASSERTAliasesAvailableScratchRegisterrd8839 VIXL_ASSERTAliasesAvailableScratchRegisterrn8840 VIXL_ASSERTAliasesAvailableScratchRegisterrm8841 VIXL_ASSERTallow_macro_instructions_8842 VIXL_ASSERTOutsideITBlock8843 MacroEmissionCheckScopeguardthis8844 ITScopeit_scopethiscond8845 vqrdmulhconddtrdrnrm8846    ( ,  ,  ,  ) {Vqrdmulh(DataType dt,QRegister rd,QRegister rn,QRegister rm)8847 voidVqrdmulhDataTypedtQRegisterrdQRegisterrnQRegisterrm    (, , , , );
  }
8848 Vqrdmulhaldtrdrnrm8849 8850    ( ,Vqrdmulh(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegisterLane rm)8851 voidVqrdmulhConditioncond                 ,
                 ,
                 ,
                 ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



8852 DataTypedt8853 DRegisterrd8854 DRegisterrn8855 DRegisterLanerm8856 VIXL_ASSERTAliasesAvailableScratchRegisterrd8857 VIXL_ASSERTAliasesAvailableScratchRegisterrn8858 VIXL_ASSERTAliasesAvailableScratchRegisterrm8859 VIXL_ASSERTallow_macro_instructions_8860 VIXL_ASSERTOutsideITBlock8861 MacroEmissionCheckScopeguardthis8862 ITScopeit_scopethiscond8863 vqrdmulhconddtrdrnrm8864    ( ,  ,  ,  ) {Vqrdmulh(DataType dt,DRegister rd,DRegister rn,DRegisterLane rm)8865 voidVqrdmulhDataTypedtDRegisterrdDRegisterrnDRegisterLanerm    (, , , , );
  }
8866 Vqrdmulhaldtrdrnrm8867 8868    ( ,Vqrdmulh(Condition cond,DataType dt,QRegister rd,QRegister rn,DRegisterLane rm)8869 voidVqrdmulhConditioncond                 ,
                 ,
                 ,
                 ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



8870 DataTypedt8871 QRegisterrd8872 QRegisterrn8873 DRegisterLanerm8874 VIXL_ASSERTAliasesAvailableScratchRegisterrd8875 VIXL_ASSERTAliasesAvailableScratchRegisterrn8876 VIXL_ASSERTAliasesAvailableScratchRegisterrm8877 VIXL_ASSERTallow_macro_instructions_8878 VIXL_ASSERTOutsideITBlock8879 MacroEmissionCheckScopeguardthis8880 ITScopeit_scopethiscond8881 vqrdmulhconddtrdrnrm8882    ( ,  ,  ,  ) {Vqrdmulh(DataType dt,QRegister rd,QRegister rn,DRegisterLane rm)8883 voidVqrdmulhDataTypedtQRegisterrdQRegisterrnDRegisterLanerm    (, , , , );
  }
8884 Vqrdmulhaldtrdrnrm8885 8886    (Vqrshl(Condition cond,DataType dt,DRegister rd,DRegister rm,DRegister rn)8887 voidVqrshl       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



8888 ConditioncondDataTypedtDRegisterrdDRegisterrmDRegisterrn8889 VIXL_ASSERTAliasesAvailableScratchRegisterrd8890 VIXL_ASSERTAliasesAvailableScratchRegisterrm8891 VIXL_ASSERTAliasesAvailableScratchRegisterrn8892 VIXL_ASSERTallow_macro_instructions_8893 VIXL_ASSERTOutsideITBlock8894 MacroEmissionCheckScopeguardthis8895 ITScopeit_scopethiscond8896 vqrshlconddtrdrmrn8897    ( ,  ,  ,  ) {Vqrshl(DataType dt,DRegister rd,DRegister rm,DRegister rn)8898 voidVqrshlDataTypedtDRegisterrdDRegisterrmDRegisterrn    (, , , , );
  }
8899 Vqrshlaldtrdrmrn8900 8901    (Vqrshl(Condition cond,DataType dt,QRegister rd,QRegister rm,QRegister rn)8902 voidVqrshl       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



8903 ConditioncondDataTypedtQRegisterrdQRegisterrmQRegisterrn8904 VIXL_ASSERTAliasesAvailableScratchRegisterrd8905 VIXL_ASSERTAliasesAvailableScratchRegisterrm8906 VIXL_ASSERTAliasesAvailableScratchRegisterrn8907 VIXL_ASSERTallow_macro_instructions_8908 VIXL_ASSERTOutsideITBlock8909 MacroEmissionCheckScopeguardthis8910 ITScopeit_scopethiscond8911 vqrshlconddtrdrmrn8912    ( ,  ,  ,  ) {Vqrshl(DataType dt,QRegister rd,QRegister rm,QRegister rn)8913 voidVqrshlDataTypedtQRegisterrdQRegisterrmQRegisterrn    (, , , , );
  }
8914 Vqrshlaldtrdrmrn8915 8916    ( ,Vqrshrn(Condition cond,DataType dt,DRegister rd,QRegister rm,const QOperand & operand)8917 voidVqrshrnConditioncond                ,
                ,
                ,
                & ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



8918 DataTypedt8919 DRegisterrd8920 QRegisterrm8921 constQOperandoperand8922 VIXL_ASSERTAliasesAvailableScratchRegisterrd8923 VIXL_ASSERTAliasesAvailableScratchRegisterrm8924 VIXL_ASSERTAliasesAvailableScratchRegisteroperand8925 VIXL_ASSERTallow_macro_instructions_8926 VIXL_ASSERTOutsideITBlock8927 MacroEmissionCheckScopeguardthis8928 ITScopeit_scopethiscond8929 vqrshrnconddtrdrmoperand8930    ( ,Vqrshrn(DataType dt,DRegister rd,QRegister rm,const QOperand & operand)8931 voidVqrshrnDataTypedt                ,
                ,
                & ) {
    (, , , , );
  }
8932 DRegisterrd8933 QRegisterrm8934 constQOperandoperand8935 Vqrshrnaldtrdrmoperand8936 8937    ( ,Vqrshrun(Condition cond,DataType dt,DRegister rd,QRegister rm,const QOperand & operand)8938 voidVqrshrunConditioncond                 ,
                 ,
                 ,
                 & ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



8939 DataTypedt8940 DRegisterrd8941 QRegisterrm8942 constQOperandoperand8943 VIXL_ASSERTAliasesAvailableScratchRegisterrd8944 VIXL_ASSERTAliasesAvailableScratchRegisterrm8945 VIXL_ASSERTAliasesAvailableScratchRegisteroperand8946 VIXL_ASSERTallow_macro_instructions_8947 VIXL_ASSERTOutsideITBlock8948 MacroEmissionCheckScopeguardthis8949 ITScopeit_scopethiscond8950 vqrshrunconddtrdrmoperand8951    ( ,Vqrshrun(DataType dt,DRegister rd,QRegister rm,const QOperand & operand)8952 voidVqrshrunDataTypedt                 ,
                 ,
                 & ) {
    (, , , , );
  }
8953 DRegisterrd8954 QRegisterrm8955 constQOperandoperand8956 Vqrshrunaldtrdrmoperand8957 8958    ( ,Vqshl(Condition cond,DataType dt,DRegister rd,DRegister rm,const DOperand & operand)8959 voidVqshlConditioncond              ,
              ,
              ,
              & ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



8960 DataTypedt8961 DRegisterrd8962 DRegisterrm8963 constDOperandoperand8964 VIXL_ASSERTAliasesAvailableScratchRegisterrd8965 VIXL_ASSERTAliasesAvailableScratchRegisterrm8966 VIXL_ASSERTAliasesAvailableScratchRegisteroperand8967 VIXL_ASSERTallow_macro_instructions_8968 VIXL_ASSERTOutsideITBlock8969 MacroEmissionCheckScopeguardthis8970 ITScopeit_scopethiscond8971 vqshlconddtrdrmoperand8972    ( ,  ,  ,  & ) {Vqshl(DataType dt,DRegister rd,DRegister rm,const DOperand & operand)8973 voidVqshlDataTypedtDRegisterrdDRegisterrmconstDOperandoperand    (, , , , );
  }
8974 Vqshlaldtrdrmoperand8975 8976    ( ,Vqshl(Condition cond,DataType dt,QRegister rd,QRegister rm,const QOperand & operand)8977 voidVqshlConditioncond              ,
              ,
              ,
              & ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



8978 DataTypedt8979 QRegisterrd8980 QRegisterrm8981 constQOperandoperand8982 VIXL_ASSERTAliasesAvailableScratchRegisterrd8983 VIXL_ASSERTAliasesAvailableScratchRegisterrm8984 VIXL_ASSERTAliasesAvailableScratchRegisteroperand8985 VIXL_ASSERTallow_macro_instructions_8986 VIXL_ASSERTOutsideITBlock8987 MacroEmissionCheckScopeguardthis8988 ITScopeit_scopethiscond8989 vqshlconddtrdrmoperand8990    ( ,  ,  ,  & ) {Vqshl(DataType dt,QRegister rd,QRegister rm,const QOperand & operand)8991 voidVqshlDataTypedtQRegisterrdQRegisterrmconstQOperandoperand    (, , , , );
  }
8992 Vqshlaldtrdrmoperand8993 8994    ( ,Vqshlu(Condition cond,DataType dt,DRegister rd,DRegister rm,const DOperand & operand)8995 voidVqshluConditioncond               ,
               ,
               ,
               & ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



8996 DataTypedt8997 DRegisterrd8998 DRegisterrm8999 constDOperandoperand9000 VIXL_ASSERTAliasesAvailableScratchRegisterrd9001 VIXL_ASSERTAliasesAvailableScratchRegisterrm9002 VIXL_ASSERTAliasesAvailableScratchRegisteroperand9003 VIXL_ASSERTallow_macro_instructions_9004 VIXL_ASSERTOutsideITBlock9005 MacroEmissionCheckScopeguardthis9006 ITScopeit_scopethiscond9007 vqshluconddtrdrmoperand9008    ( ,Vqshlu(DataType dt,DRegister rd,DRegister rm,const DOperand & operand)9009 voidVqshluDataTypedt               ,
               ,
               & ) {
    (, , , , );
  }
9010 DRegisterrd9011 DRegisterrm9012 constDOperandoperand9013 Vqshlualdtrdrmoperand9014 9015    ( ,Vqshlu(Condition cond,DataType dt,QRegister rd,QRegister rm,const QOperand & operand)9016 voidVqshluConditioncond               ,
               ,
               ,
               & ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



9017 DataTypedt9018 QRegisterrd9019 QRegisterrm9020 constQOperandoperand9021 VIXL_ASSERTAliasesAvailableScratchRegisterrd9022 VIXL_ASSERTAliasesAvailableScratchRegisterrm9023 VIXL_ASSERTAliasesAvailableScratchRegisteroperand9024 VIXL_ASSERTallow_macro_instructions_9025 VIXL_ASSERTOutsideITBlock9026 MacroEmissionCheckScopeguardthis9027 ITScopeit_scopethiscond9028 vqshluconddtrdrmoperand9029    ( ,Vqshlu(DataType dt,QRegister rd,QRegister rm,const QOperand & operand)9030 voidVqshluDataTypedt               ,
               ,
               & ) {
    (, , , , );
  }
9031 QRegisterrd9032 QRegisterrm9033 constQOperandoperand9034 Vqshlualdtrdrmoperand9035 9036    ( ,Vqshrn(Condition cond,DataType dt,DRegister rd,QRegister rm,const QOperand & operand)9037 voidVqshrnConditioncond               ,
               ,
               ,
               & ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



9038 DataTypedt9039 DRegisterrd9040 QRegisterrm9041 constQOperandoperand9042 VIXL_ASSERTAliasesAvailableScratchRegisterrd9043 VIXL_ASSERTAliasesAvailableScratchRegisterrm9044 VIXL_ASSERTAliasesAvailableScratchRegisteroperand9045 VIXL_ASSERTallow_macro_instructions_9046 VIXL_ASSERTOutsideITBlock9047 MacroEmissionCheckScopeguardthis9048 ITScopeit_scopethiscond9049 vqshrnconddtrdrmoperand9050    ( ,Vqshrn(DataType dt,DRegister rd,QRegister rm,const QOperand & operand)9051 voidVqshrnDataTypedt               ,
               ,
               & ) {
    (, , , , );
  }
9052 DRegisterrd9053 QRegisterrm9054 constQOperandoperand9055 Vqshrnaldtrdrmoperand9056 9057    ( ,Vqshrun(Condition cond,DataType dt,DRegister rd,QRegister rm,const QOperand & operand)9058 voidVqshrunConditioncond                ,
                ,
                ,
                & ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



9059 DataTypedt9060 DRegisterrd9061 QRegisterrm9062 constQOperandoperand9063 VIXL_ASSERTAliasesAvailableScratchRegisterrd9064 VIXL_ASSERTAliasesAvailableScratchRegisterrm9065 VIXL_ASSERTAliasesAvailableScratchRegisteroperand9066 VIXL_ASSERTallow_macro_instructions_9067 VIXL_ASSERTOutsideITBlock9068 MacroEmissionCheckScopeguardthis9069 ITScopeit_scopethiscond9070 vqshrunconddtrdrmoperand9071    ( ,Vqshrun(DataType dt,DRegister rd,QRegister rm,const QOperand & operand)9072 voidVqshrunDataTypedt                ,
                ,
                & ) {
    (, , , , );
  }
9073 DRegisterrd9074 QRegisterrm9075 constQOperandoperand9076 Vqshrunaldtrdrmoperand9077 9078    (Vqsub(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)9079 voidVqsub       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



9080 ConditioncondDataTypedtDRegisterrdDRegisterrnDRegisterrm9081 VIXL_ASSERTAliasesAvailableScratchRegisterrd9082 VIXL_ASSERTAliasesAvailableScratchRegisterrn9083 VIXL_ASSERTAliasesAvailableScratchRegisterrm9084 VIXL_ASSERTallow_macro_instructions_9085 VIXL_ASSERTOutsideITBlock9086 MacroEmissionCheckScopeguardthis9087 ITScopeit_scopethiscond9088 vqsubconddtrdrnrm9089    ( ,  ,  ,  ) {Vqsub(DataType dt,DRegister rd,DRegister rn,DRegister rm)9090 voidVqsubDataTypedtDRegisterrdDRegisterrnDRegisterrm    (, , , , );
  }
9091 Vqsubaldtrdrnrm9092 9093    (Vqsub(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)9094 voidVqsub       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



9095 ConditioncondDataTypedtQRegisterrdQRegisterrnQRegisterrm9096 VIXL_ASSERTAliasesAvailableScratchRegisterrd9097 VIXL_ASSERTAliasesAvailableScratchRegisterrn9098 VIXL_ASSERTAliasesAvailableScratchRegisterrm9099 VIXL_ASSERTallow_macro_instructions_9100 VIXL_ASSERTOutsideITBlock9101 MacroEmissionCheckScopeguardthis9102 ITScopeit_scopethiscond9103 vqsubconddtrdrnrm9104    ( ,  ,  ,  ) {Vqsub(DataType dt,QRegister rd,QRegister rn,QRegister rm)9105 voidVqsubDataTypedtQRegisterrdQRegisterrnQRegisterrm    (, , , , );
  }
9106 Vqsubaldtrdrnrm9107 9108    (Vraddhn(Condition cond,DataType dt,DRegister rd,QRegister rn,QRegister rm)9109 voidVraddhn       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



9110 ConditioncondDataTypedtDRegisterrdQRegisterrnQRegisterrm9111 VIXL_ASSERTAliasesAvailableScratchRegisterrd9112 VIXL_ASSERTAliasesAvailableScratchRegisterrn9113 VIXL_ASSERTAliasesAvailableScratchRegisterrm9114 VIXL_ASSERTallow_macro_instructions_9115 VIXL_ASSERTOutsideITBlock9116 MacroEmissionCheckScopeguardthis9117 ITScopeit_scopethiscond9118 vraddhnconddtrdrnrm9119    ( ,  ,  ,  ) {Vraddhn(DataType dt,DRegister rd,QRegister rn,QRegister rm)9120 voidVraddhnDataTypedtDRegisterrdQRegisterrnQRegisterrm    (, , , , );
  }
9121 Vraddhnaldtrdrnrm9122 9123    ( ,  ,  ,  ) {Vrecpe(Condition cond,DataType dt,DRegister rd,DRegister rm)9124 voidVrecpeConditioncondDataTypedtDRegisterrdDRegisterrm    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }



9125 VIXL_ASSERTAliasesAvailableScratchRegisterrd9126 VIXL_ASSERTAliasesAvailableScratchRegisterrm9127 VIXL_ASSERTallow_macro_instructions_9128 VIXL_ASSERTOutsideITBlock9129 MacroEmissionCheckScopeguardthis9130 ITScopeit_scopethiscond9131 vrecpeconddtrdrm9132    ( ,  ,  ) {Vrecpe(DataType dt,DRegister rd,DRegister rm)9133 voidVrecpeDataTypedtDRegisterrdDRegisterrm    (, , , );
  }
9134 Vrecpealdtrdrm9135 9136    ( ,  ,  ,  ) {Vrecpe(Condition cond,DataType dt,QRegister rd,QRegister rm)9137 voidVrecpeConditioncondDataTypedtQRegisterrdQRegisterrm    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }



9138 VIXL_ASSERTAliasesAvailableScratchRegisterrd9139 VIXL_ASSERTAliasesAvailableScratchRegisterrm9140 VIXL_ASSERTallow_macro_instructions_9141 VIXL_ASSERTOutsideITBlock9142 MacroEmissionCheckScopeguardthis9143 ITScopeit_scopethiscond9144 vrecpeconddtrdrm9145    ( ,  ,  ) {Vrecpe(DataType dt,QRegister rd,QRegister rm)9146 voidVrecpeDataTypedtQRegisterrdQRegisterrm    (, , , );
  }
9147 Vrecpealdtrdrm9148 9149    (Vrecps(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)9150 voidVrecps       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



9151 ConditioncondDataTypedtDRegisterrdDRegisterrnDRegisterrm9152 VIXL_ASSERTAliasesAvailableScratchRegisterrd9153 VIXL_ASSERTAliasesAvailableScratchRegisterrn9154 VIXL_ASSERTAliasesAvailableScratchRegisterrm9155 VIXL_ASSERTallow_macro_instructions_9156 VIXL_ASSERTOutsideITBlock9157 MacroEmissionCheckScopeguardthis9158 ITScopeit_scopethiscond9159 vrecpsconddtrdrnrm9160    ( ,  ,  ,  ) {Vrecps(DataType dt,DRegister rd,DRegister rn,DRegister rm)9161 voidVrecpsDataTypedtDRegisterrdDRegisterrnDRegisterrm    (, , , , );
  }
9162 Vrecpsaldtrdrnrm9163 9164    (Vrecps(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)9165 voidVrecps       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



9166 ConditioncondDataTypedtQRegisterrdQRegisterrnQRegisterrm9167 VIXL_ASSERTAliasesAvailableScratchRegisterrd9168 VIXL_ASSERTAliasesAvailableScratchRegisterrn9169 VIXL_ASSERTAliasesAvailableScratchRegisterrm9170 VIXL_ASSERTallow_macro_instructions_9171 VIXL_ASSERTOutsideITBlock9172 MacroEmissionCheckScopeguardthis9173 ITScopeit_scopethiscond9174 vrecpsconddtrdrnrm9175    ( ,  ,  ,  ) {Vrecps(DataType dt,QRegister rd,QRegister rn,QRegister rm)9176 voidVrecpsDataTypedtQRegisterrdQRegisterrnQRegisterrm    (, , , , );
  }
9177 Vrecpsaldtrdrnrm9178 9179    ( ,  ,  ,  ) {Vrev16(Condition cond,DataType dt,DRegister rd,DRegister rm)9180 voidVrev16ConditioncondDataTypedtDRegisterrdDRegisterrm    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }



9181 VIXL_ASSERTAliasesAvailableScratchRegisterrd9182 VIXL_ASSERTAliasesAvailableScratchRegisterrm9183 VIXL_ASSERTallow_macro_instructions_9184 VIXL_ASSERTOutsideITBlock9185 MacroEmissionCheckScopeguardthis9186 ITScopeit_scopethiscond9187 vrev16conddtrdrm9188    ( ,  ,  ) {Vrev16(DataType dt,DRegister rd,DRegister rm)9189 voidVrev16DataTypedtDRegisterrdDRegisterrm    (, , , );
  }
9190 Vrev16aldtrdrm9191 9192    ( ,  ,  ,  ) {Vrev16(Condition cond,DataType dt,QRegister rd,QRegister rm)9193 voidVrev16ConditioncondDataTypedtQRegisterrdQRegisterrm    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }



9194 VIXL_ASSERTAliasesAvailableScratchRegisterrd9195 VIXL_ASSERTAliasesAvailableScratchRegisterrm9196 VIXL_ASSERTallow_macro_instructions_9197 VIXL_ASSERTOutsideITBlock9198 MacroEmissionCheckScopeguardthis9199 ITScopeit_scopethiscond9200 vrev16conddtrdrm9201    ( ,  ,  ) {Vrev16(DataType dt,QRegister rd,QRegister rm)9202 voidVrev16DataTypedtQRegisterrdQRegisterrm    (, , , );
  }
9203 Vrev16aldtrdrm9204 9205    ( ,  ,  ,  ) {Vrev32(Condition cond,DataType dt,DRegister rd,DRegister rm)9206 voidVrev32ConditioncondDataTypedtDRegisterrdDRegisterrm    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }



9207 VIXL_ASSERTAliasesAvailableScratchRegisterrd9208 VIXL_ASSERTAliasesAvailableScratchRegisterrm9209 VIXL_ASSERTallow_macro_instructions_9210 VIXL_ASSERTOutsideITBlock9211 MacroEmissionCheckScopeguardthis9212 ITScopeit_scopethiscond9213 vrev32conddtrdrm9214    ( ,  ,  ) {Vrev32(DataType dt,DRegister rd,DRegister rm)9215 voidVrev32DataTypedtDRegisterrdDRegisterrm    (, , , );
  }
9216 Vrev32aldtrdrm9217 9218    ( ,  ,  ,  ) {Vrev32(Condition cond,DataType dt,QRegister rd,QRegister rm)9219 voidVrev32ConditioncondDataTypedtQRegisterrdQRegisterrm    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }



9220 VIXL_ASSERTAliasesAvailableScratchRegisterrd9221 VIXL_ASSERTAliasesAvailableScratchRegisterrm9222 VIXL_ASSERTallow_macro_instructions_9223 VIXL_ASSERTOutsideITBlock9224 MacroEmissionCheckScopeguardthis9225 ITScopeit_scopethiscond9226 vrev32conddtrdrm9227    ( ,  ,  ) {Vrev32(DataType dt,QRegister rd,QRegister rm)9228 voidVrev32DataTypedtQRegisterrdQRegisterrm    (, , , );
  }
9229 Vrev32aldtrdrm9230 9231    ( ,  ,  ,  ) {Vrev64(Condition cond,DataType dt,DRegister rd,DRegister rm)9232 voidVrev64ConditioncondDataTypedtDRegisterrdDRegisterrm    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }



9233 VIXL_ASSERTAliasesAvailableScratchRegisterrd9234 VIXL_ASSERTAliasesAvailableScratchRegisterrm9235 VIXL_ASSERTallow_macro_instructions_9236 VIXL_ASSERTOutsideITBlock9237 MacroEmissionCheckScopeguardthis9238 ITScopeit_scopethiscond9239 vrev64conddtrdrm9240    ( ,  ,  ) {Vrev64(DataType dt,DRegister rd,DRegister rm)9241 voidVrev64DataTypedtDRegisterrdDRegisterrm    (, , , );
  }
9242 Vrev64aldtrdrm9243 9244    ( ,  ,  ,  ) {Vrev64(Condition cond,DataType dt,QRegister rd,QRegister rm)9245 voidVrev64ConditioncondDataTypedtQRegisterrdQRegisterrm    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }



9246 VIXL_ASSERTAliasesAvailableScratchRegisterrd9247 VIXL_ASSERTAliasesAvailableScratchRegisterrm9248 VIXL_ASSERTallow_macro_instructions_9249 VIXL_ASSERTOutsideITBlock9250 MacroEmissionCheckScopeguardthis9251 ITScopeit_scopethiscond9252 vrev64conddtrdrm9253    ( ,  ,  ) {Vrev64(DataType dt,QRegister rd,QRegister rm)9254 voidVrev64DataTypedtQRegisterrdQRegisterrm    (, , , );
  }
9255 Vrev64aldtrdrm9256 9257    (Vrhadd(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)9258 voidVrhadd       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



9259 ConditioncondDataTypedtDRegisterrdDRegisterrnDRegisterrm9260 VIXL_ASSERTAliasesAvailableScratchRegisterrd9261 VIXL_ASSERTAliasesAvailableScratchRegisterrn9262 VIXL_ASSERTAliasesAvailableScratchRegisterrm9263 VIXL_ASSERTallow_macro_instructions_9264 VIXL_ASSERTOutsideITBlock9265 MacroEmissionCheckScopeguardthis9266 ITScopeit_scopethiscond9267 vrhaddconddtrdrnrm9268    ( ,  ,  ,  ) {Vrhadd(DataType dt,DRegister rd,DRegister rn,DRegister rm)9269 voidVrhaddDataTypedtDRegisterrdDRegisterrnDRegisterrm    (, , , , );
  }
9270 Vrhaddaldtrdrnrm9271 9272    (Vrhadd(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)9273 voidVrhadd       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



























9274 ConditioncondDataTypedtQRegisterrdQRegisterrnQRegisterrm9275 VIXL_ASSERTAliasesAvailableScratchRegisterrd9276 VIXL_ASSERTAliasesAvailableScratchRegisterrn9277 VIXL_ASSERTAliasesAvailableScratchRegisterrm9278 VIXL_ASSERTallow_macro_instructions_9279 VIXL_ASSERTOutsideITBlock9280 MacroEmissionCheckScopeguardthis9281 ITScopeit_scopethiscond9282 vrhaddconddtrdrnrm9283    ( ,  ,  ,  ) {Vrhadd(DataType dt,QRegister rd,QRegister rn,QRegister rm)9284 voidVrhaddDataTypedtQRegisterrdQRegisterrnQRegisterrm    (, , , , );
  }
9285 Vrhaddaldtrdrnrm9286 9287    ( ,  ,  ,  ) {Vrinta(DataType dt1,DataType dt2,DRegister rd,DRegister rm)9288 voidVrintaDataTypedt1DataTypedt2DRegisterrdDRegisterrm    (!());
    (!());
    ();
    (());
     ();
    (, , , );
  }
9289 VIXL_ASSERTAliasesAvailableScratchRegisterrd9290 VIXL_ASSERTAliasesAvailableScratchRegisterrm9291 VIXL_ASSERTallow_macro_instructions_9292 VIXL_ASSERTOutsideITBlock9293 MacroEmissionCheckScopeguardthis9294 vrintadt1dt2rdrm9295 9296    ( ,  ,  ,  ) {Vrinta(DataType dt1,DataType dt2,QRegister rd,QRegister rm)9297 voidVrintaDataTypedt1DataTypedt2QRegisterrdQRegisterrm    (!());
    (!());
    ();
    (());
     ();
    (, , , );
  }
9298 VIXL_ASSERTAliasesAvailableScratchRegisterrd9299 VIXL_ASSERTAliasesAvailableScratchRegisterrm9300 VIXL_ASSERTallow_macro_instructions_9301 VIXL_ASSERTOutsideITBlock9302 MacroEmissionCheckScopeguardthis9303 vrintadt1dt2rdrm9304 9305    ( ,  ,  ,  ) {Vrinta(DataType dt1,DataType dt2,SRegister rd,SRegister rm)9306 voidVrintaDataTypedt1DataTypedt2SRegisterrdSRegisterrm    (!());
    (!());
    ();
    (());
     ();
    (, , , );
  }
9307 VIXL_ASSERTAliasesAvailableScratchRegisterrd9308 VIXL_ASSERTAliasesAvailableScratchRegisterrm9309 VIXL_ASSERTallow_macro_instructions_9310 VIXL_ASSERTOutsideITBlock9311 MacroEmissionCheckScopeguardthis9312 vrintadt1dt2rdrm9313 9314    ( ,  ,  ,  ) {Vrintm(DataType dt1,DataType dt2,DRegister rd,DRegister rm)9315 voidVrintmDataTypedt1DataTypedt2DRegisterrdDRegisterrm    (!());
    (!());
    ();
    (());
     ();
    (, , , );
  }
9316 VIXL_ASSERTAliasesAvailableScratchRegisterrd9317 VIXL_ASSERTAliasesAvailableScratchRegisterrm9318 VIXL_ASSERTallow_macro_instructions_9319 VIXL_ASSERTOutsideITBlock9320 MacroEmissionCheckScopeguardthis9321 vrintmdt1dt2rdrm9322 9323    ( ,  ,  ,  ) {Vrintm(DataType dt1,DataType dt2,QRegister rd,QRegister rm)9324 voidVrintmDataTypedt1DataTypedt2QRegisterrdQRegisterrm    (!());
    (!());
    ();
    (());
     ();
    (, , , );
  }
9325 VIXL_ASSERTAliasesAvailableScratchRegisterrd9326 VIXL_ASSERTAliasesAvailableScratchRegisterrm9327 VIXL_ASSERTallow_macro_instructions_9328 VIXL_ASSERTOutsideITBlock9329 MacroEmissionCheckScopeguardthis9330 vrintmdt1dt2rdrm9331 9332    ( ,  ,  ,  ) {Vrintm(DataType dt1,DataType dt2,SRegister rd,SRegister rm)9333 voidVrintmDataTypedt1DataTypedt2SRegisterrdSRegisterrm    (!());
    (!());
    ();
    (());
     ();
    (, , , );
  }
9334 VIXL_ASSERTAliasesAvailableScratchRegisterrd9335 VIXL_ASSERTAliasesAvailableScratchRegisterrm9336 VIXL_ASSERTallow_macro_instructions_9337 VIXL_ASSERTOutsideITBlock9338 MacroEmissionCheckScopeguardthis9339 vrintmdt1dt2rdrm9340 9341    ( ,  ,  ,  ) {Vrintn(DataType dt1,DataType dt2,DRegister rd,DRegister rm)9342 voidVrintnDataTypedt1DataTypedt2DRegisterrdDRegisterrm    (!());
    (!());
    ();
    (());
     ();
    (, , , );
  }
9343 VIXL_ASSERTAliasesAvailableScratchRegisterrd9344 VIXL_ASSERTAliasesAvailableScratchRegisterrm9345 VIXL_ASSERTallow_macro_instructions_9346 VIXL_ASSERTOutsideITBlock9347 MacroEmissionCheckScopeguardthis9348 vrintndt1dt2rdrm9349 9350    ( ,  ,  ,  ) {Vrintn(DataType dt1,DataType dt2,QRegister rd,QRegister rm)9351 voidVrintnDataTypedt1DataTypedt2QRegisterrdQRegisterrm    (!());
    (!());
    ();
    (());
     ();
    (, , , );
  }
9352 VIXL_ASSERTAliasesAvailableScratchRegisterrd9353 VIXL_ASSERTAliasesAvailableScratchRegisterrm9354 VIXL_ASSERTallow_macro_instructions_9355 VIXL_ASSERTOutsideITBlock9356 MacroEmissionCheckScopeguardthis9357 vrintndt1dt2rdrm9358 9359    ( ,  ,  ,  ) {Vrintn(DataType dt1,DataType dt2,SRegister rd,SRegister rm)9360 voidVrintnDataTypedt1DataTypedt2SRegisterrdSRegisterrm    (!());
    (!());
    ();
    (());
     ();
    (, , , );
  }
9361 VIXL_ASSERTAliasesAvailableScratchRegisterrd9362 VIXL_ASSERTAliasesAvailableScratchRegisterrm9363 VIXL_ASSERTallow_macro_instructions_9364 VIXL_ASSERTOutsideITBlock9365 MacroEmissionCheckScopeguardthis9366 vrintndt1dt2rdrm9367 9368    ( ,  ,  ,  ) {Vrintp(DataType dt1,DataType dt2,DRegister rd,DRegister rm)9369 voidVrintpDataTypedt1DataTypedt2DRegisterrdDRegisterrm    (!());
    (!());
    ();
    (());
     ();
    (, , , );
  }
9370 VIXL_ASSERTAliasesAvailableScratchRegisterrd9371 VIXL_ASSERTAliasesAvailableScratchRegisterrm9372 VIXL_ASSERTallow_macro_instructions_9373 VIXL_ASSERTOutsideITBlock9374 MacroEmissionCheckScopeguardthis9375 vrintpdt1dt2rdrm9376 9377    ( ,  ,  ,  ) {Vrintp(DataType dt1,DataType dt2,QRegister rd,QRegister rm)9378 voidVrintpDataTypedt1DataTypedt2QRegisterrdQRegisterrm    (!());
    (!());
    ();
    (());
     ();
    (, , , );
  }
9379 VIXL_ASSERTAliasesAvailableScratchRegisterrd9380 VIXL_ASSERTAliasesAvailableScratchRegisterrm9381 VIXL_ASSERTallow_macro_instructions_9382 VIXL_ASSERTOutsideITBlock9383 MacroEmissionCheckScopeguardthis9384 vrintpdt1dt2rdrm9385 9386    ( ,  ,  ,  ) {Vrintp(DataType dt1,DataType dt2,SRegister rd,SRegister rm)9387 voidVrintpDataTypedt1DataTypedt2SRegisterrdSRegisterrm    (!());
    (!());
    ();
    (());
     ();
    (, , , );
  }
9388 VIXL_ASSERTAliasesAvailableScratchRegisterrd9389 VIXL_ASSERTAliasesAvailableScratchRegisterrm9390 VIXL_ASSERTallow_macro_instructions_9391 VIXL_ASSERTOutsideITBlock9392 MacroEmissionCheckScopeguardthis9393 vrintpdt1dt2rdrm9394 9395    (Vrintr(Condition cond,DataType dt1,DataType dt2,SRegister rd,SRegister rm)9396 voidVrintr       ,  ,  ,  ,  ) {
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



9397 ConditioncondDataTypedt1DataTypedt2SRegisterrdSRegisterrm9398 VIXL_ASSERTAliasesAvailableScratchRegisterrd9399 VIXL_ASSERTAliasesAvailableScratchRegisterrm9400 VIXL_ASSERTallow_macro_instructions_9401 VIXL_ASSERTOutsideITBlock9402 MacroEmissionCheckScopeguardthis9403 ITScopeit_scopethiscond9404 vrintrconddt1dt2rdrm9405    ( ,  ,  ,  ) {Vrintr(DataType dt1,DataType dt2,SRegister rd,SRegister rm)9406 voidVrintrDataTypedt1DataTypedt2SRegisterrdSRegisterrm    (, , , , );
  }
9407 Vrintraldt1dt2rdrm9408 9409    (Vrintr(Condition cond,DataType dt1,DataType dt2,DRegister rd,DRegister rm)9410 voidVrintr       ,  ,  ,  ,  ) {
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



9411 ConditioncondDataTypedt1DataTypedt2DRegisterrdDRegisterrm9412 VIXL_ASSERTAliasesAvailableScratchRegisterrd9413 VIXL_ASSERTAliasesAvailableScratchRegisterrm9414 VIXL_ASSERTallow_macro_instructions_9415 VIXL_ASSERTOutsideITBlock9416 MacroEmissionCheckScopeguardthis9417 ITScopeit_scopethiscond9418 vrintrconddt1dt2rdrm9419    ( ,  ,  ,  ) {Vrintr(DataType dt1,DataType dt2,DRegister rd,DRegister rm)9420 voidVrintrDataTypedt1DataTypedt2DRegisterrdDRegisterrm    (, , , , );
  }
9421 Vrintraldt1dt2rdrm9422 9423    (Vrintx(Condition cond,DataType dt1,DataType dt2,DRegister rd,DRegister rm)9424 voidVrintx       ,  ,  ,  ,  ) {
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }





9425 ConditioncondDataTypedt1DataTypedt2DRegisterrdDRegisterrm9426 VIXL_ASSERTAliasesAvailableScratchRegisterrd9427 VIXL_ASSERTAliasesAvailableScratchRegisterrm9428 VIXL_ASSERTallow_macro_instructions_9429 VIXL_ASSERTOutsideITBlock9430 MacroEmissionCheckScopeguardthis9431 ITScopeit_scopethiscond9432 vrintxconddt1dt2rdrm9433    ( ,  ,  ,  ) {Vrintx(DataType dt1,DataType dt2,DRegister rd,DRegister rm)9434 voidVrintxDataTypedt1DataTypedt2DRegisterrdDRegisterrm    (, , , , );
  }
9435 Vrintxaldt1dt2rdrm9436 9437    ( ,  ,  ,  ) {Vrintx(DataType dt1,DataType dt2,QRegister rd,QRegister rm)9438 voidVrintxDataTypedt1DataTypedt2QRegisterrdQRegisterrm    (!());
    (!());
    ();
    (());
     ();
    (, , , );
  }
9439 VIXL_ASSERTAliasesAvailableScratchRegisterrd9440 VIXL_ASSERTAliasesAvailableScratchRegisterrm9441 VIXL_ASSERTallow_macro_instructions_9442 VIXL_ASSERTOutsideITBlock9443 MacroEmissionCheckScopeguardthis9444 vrintxdt1dt2rdrm9445 9446    (Vrintx(Condition cond,DataType dt1,DataType dt2,SRegister rd,SRegister rm)9447 voidVrintx       ,  ,  ,  ,  ) {
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



9448 ConditioncondDataTypedt1DataTypedt2SRegisterrdSRegisterrm9449 VIXL_ASSERTAliasesAvailableScratchRegisterrd9450 VIXL_ASSERTAliasesAvailableScratchRegisterrm9451 VIXL_ASSERTallow_macro_instructions_9452 VIXL_ASSERTOutsideITBlock9453 MacroEmissionCheckScopeguardthis9454 ITScopeit_scopethiscond9455 vrintxconddt1dt2rdrm9456    ( ,  ,  ,  ) {Vrintx(DataType dt1,DataType dt2,SRegister rd,SRegister rm)9457 voidVrintxDataTypedt1DataTypedt2SRegisterrdSRegisterrm    (, , , , );
  }
9458 Vrintxaldt1dt2rdrm9459 9460    (Vrintz(Condition cond,DataType dt1,DataType dt2,DRegister rd,DRegister rm)9461 voidVrintz       ,  ,  ,  ,  ) {
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }





9462 ConditioncondDataTypedt1DataTypedt2DRegisterrdDRegisterrm9463 VIXL_ASSERTAliasesAvailableScratchRegisterrd9464 VIXL_ASSERTAliasesAvailableScratchRegisterrm9465 VIXL_ASSERTallow_macro_instructions_9466 VIXL_ASSERTOutsideITBlock9467 MacroEmissionCheckScopeguardthis9468 ITScopeit_scopethiscond9469 vrintzconddt1dt2rdrm9470    ( ,  ,  ,  ) {Vrintz(DataType dt1,DataType dt2,DRegister rd,DRegister rm)9471 voidVrintzDataTypedt1DataTypedt2DRegisterrdDRegisterrm    (, , , , );
  }
9472 Vrintzaldt1dt2rdrm9473 9474    ( ,  ,  ,  ) {Vrintz(DataType dt1,DataType dt2,QRegister rd,QRegister rm)9475 voidVrintzDataTypedt1DataTypedt2QRegisterrdQRegisterrm    (!());
    (!());
    ();
    (());
     ();
    (, , , );
  }
9476 VIXL_ASSERTAliasesAvailableScratchRegisterrd9477 VIXL_ASSERTAliasesAvailableScratchRegisterrm9478 VIXL_ASSERTallow_macro_instructions_9479 VIXL_ASSERTOutsideITBlock9480 MacroEmissionCheckScopeguardthis9481 vrintzdt1dt2rdrm9482 9483    (Vrintz(Condition cond,DataType dt1,DataType dt2,SRegister rd,SRegister rm)9484 voidVrintz       ,  ,  ,  ,  ) {
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



9485 ConditioncondDataTypedt1DataTypedt2SRegisterrdSRegisterrm9486 VIXL_ASSERTAliasesAvailableScratchRegisterrd9487 VIXL_ASSERTAliasesAvailableScratchRegisterrm9488 VIXL_ASSERTallow_macro_instructions_9489 VIXL_ASSERTOutsideITBlock9490 MacroEmissionCheckScopeguardthis9491 ITScopeit_scopethiscond9492 vrintzconddt1dt2rdrm9493    ( ,  ,  ,  ) {Vrintz(DataType dt1,DataType dt2,SRegister rd,SRegister rm)9494 voidVrintzDataTypedt1DataTypedt2SRegisterrdSRegisterrm    (, , , , );
  }
9495 Vrintzaldt1dt2rdrm9496 9497    (Vrshl(Condition cond,DataType dt,DRegister rd,DRegister rm,DRegister rn)9498 voidVrshl       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



9499 ConditioncondDataTypedtDRegisterrdDRegisterrmDRegisterrn9500 VIXL_ASSERTAliasesAvailableScratchRegisterrd9501 VIXL_ASSERTAliasesAvailableScratchRegisterrm9502 VIXL_ASSERTAliasesAvailableScratchRegisterrn9503 VIXL_ASSERTallow_macro_instructions_9504 VIXL_ASSERTOutsideITBlock9505 MacroEmissionCheckScopeguardthis9506 ITScopeit_scopethiscond9507 vrshlconddtrdrmrn9508    ( ,  ,  ,  ) {Vrshl(DataType dt,DRegister rd,DRegister rm,DRegister rn)9509 voidVrshlDataTypedtDRegisterrdDRegisterrmDRegisterrn    (, , , , );
  }
9510 Vrshlaldtrdrmrn9511 9512    (Vrshl(Condition cond,DataType dt,QRegister rd,QRegister rm,QRegister rn)9513 voidVrshl       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



9514 ConditioncondDataTypedtQRegisterrdQRegisterrmQRegisterrn9515 VIXL_ASSERTAliasesAvailableScratchRegisterrd9516 VIXL_ASSERTAliasesAvailableScratchRegisterrm9517 VIXL_ASSERTAliasesAvailableScratchRegisterrn9518 VIXL_ASSERTallow_macro_instructions_9519 VIXL_ASSERTOutsideITBlock9520 MacroEmissionCheckScopeguardthis9521 ITScopeit_scopethiscond9522 vrshlconddtrdrmrn9523    ( ,  ,  ,  ) {Vrshl(DataType dt,QRegister rd,QRegister rm,QRegister rn)9524 voidVrshlDataTypedtQRegisterrdQRegisterrmQRegisterrn    (, , , , );
  }
9525 Vrshlaldtrdrmrn9526 9527    ( ,Vrshr(Condition cond,DataType dt,DRegister rd,DRegister rm,const DOperand & operand)9528 voidVrshrConditioncond              ,
              ,
              ,
              & ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



9529 DataTypedt9530 DRegisterrd9531 DRegisterrm9532 constDOperandoperand9533 VIXL_ASSERTAliasesAvailableScratchRegisterrd9534 VIXL_ASSERTAliasesAvailableScratchRegisterrm9535 VIXL_ASSERTAliasesAvailableScratchRegisteroperand9536 VIXL_ASSERTallow_macro_instructions_9537 VIXL_ASSERTOutsideITBlock9538 MacroEmissionCheckScopeguardthis9539 ITScopeit_scopethiscond9540 vrshrconddtrdrmoperand9541    ( ,  ,  ,  & ) {Vrshr(DataType dt,DRegister rd,DRegister rm,const DOperand & operand)9542 voidVrshrDataTypedtDRegisterrdDRegisterrmconstDOperandoperand    (, , , , );
  }
9543 Vrshraldtrdrmoperand9544 9545    ( ,Vrshr(Condition cond,DataType dt,QRegister rd,QRegister rm,const QOperand & operand)9546 voidVrshrConditioncond              ,
              ,
              ,
              & ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



9547 DataTypedt9548 QRegisterrd9549 QRegisterrm9550 constQOperandoperand9551 VIXL_ASSERTAliasesAvailableScratchRegisterrd9552 VIXL_ASSERTAliasesAvailableScratchRegisterrm9553 VIXL_ASSERTAliasesAvailableScratchRegisteroperand9554 VIXL_ASSERTallow_macro_instructions_9555 VIXL_ASSERTOutsideITBlock9556 MacroEmissionCheckScopeguardthis9557 ITScopeit_scopethiscond9558 vrshrconddtrdrmoperand9559    ( ,  ,  ,  & ) {Vrshr(DataType dt,QRegister rd,QRegister rm,const QOperand & operand)9560 voidVrshrDataTypedtQRegisterrdQRegisterrmconstQOperandoperand    (, , , , );
  }
9561 Vrshraldtrdrmoperand9562 9563    ( ,Vrshrn(Condition cond,DataType dt,DRegister rd,QRegister rm,const QOperand & operand)9564 voidVrshrnConditioncond               ,
               ,
               ,
               & ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



9565 DataTypedt9566 DRegisterrd9567 QRegisterrm9568 constQOperandoperand9569 VIXL_ASSERTAliasesAvailableScratchRegisterrd9570 VIXL_ASSERTAliasesAvailableScratchRegisterrm9571 VIXL_ASSERTAliasesAvailableScratchRegisteroperand9572 VIXL_ASSERTallow_macro_instructions_9573 VIXL_ASSERTOutsideITBlock9574 MacroEmissionCheckScopeguardthis9575 ITScopeit_scopethiscond9576 vrshrnconddtrdrmoperand9577    ( ,Vrshrn(DataType dt,DRegister rd,QRegister rm,const QOperand & operand)9578 voidVrshrnDataTypedt               ,
               ,
               & ) {
    (, , , , );
  }
9579 DRegisterrd9580 QRegisterrm9581 constQOperandoperand9582 Vrshrnaldtrdrmoperand9583 9584    ( ,  ,  ,  ) {Vrsqrte(Condition cond,DataType dt,DRegister rd,DRegister rm)9585 voidVrsqrteConditioncondDataTypedtDRegisterrdDRegisterrm    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }



9586 VIXL_ASSERTAliasesAvailableScratchRegisterrd9587 VIXL_ASSERTAliasesAvailableScratchRegisterrm9588 VIXL_ASSERTallow_macro_instructions_9589 VIXL_ASSERTOutsideITBlock9590 MacroEmissionCheckScopeguardthis9591 ITScopeit_scopethiscond9592 vrsqrteconddtrdrm9593    ( ,  ,  ) {Vrsqrte(DataType dt,DRegister rd,DRegister rm)9594 voidVrsqrteDataTypedtDRegisterrdDRegisterrm    (, , , );
  }
9595 Vrsqrtealdtrdrm9596 9597    ( ,  ,  ,  ) {Vrsqrte(Condition cond,DataType dt,QRegister rd,QRegister rm)9598 voidVrsqrteConditioncondDataTypedtQRegisterrdQRegisterrm    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }



9599 VIXL_ASSERTAliasesAvailableScratchRegisterrd9600 VIXL_ASSERTAliasesAvailableScratchRegisterrm9601 VIXL_ASSERTallow_macro_instructions_9602 VIXL_ASSERTOutsideITBlock9603 MacroEmissionCheckScopeguardthis9604 ITScopeit_scopethiscond9605 vrsqrteconddtrdrm9606    ( ,  ,  ) {Vrsqrte(DataType dt,QRegister rd,QRegister rm)9607 voidVrsqrteDataTypedtQRegisterrdQRegisterrm    (, , , );
  }
9608 Vrsqrtealdtrdrm9609 9610    (Vrsqrts(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)9611 voidVrsqrts       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



9612 ConditioncondDataTypedtDRegisterrdDRegisterrnDRegisterrm9613 VIXL_ASSERTAliasesAvailableScratchRegisterrd9614 VIXL_ASSERTAliasesAvailableScratchRegisterrn9615 VIXL_ASSERTAliasesAvailableScratchRegisterrm9616 VIXL_ASSERTallow_macro_instructions_9617 VIXL_ASSERTOutsideITBlock9618 MacroEmissionCheckScopeguardthis9619 ITScopeit_scopethiscond9620 vrsqrtsconddtrdrnrm9621    ( ,  ,  ,  ) {Vrsqrts(DataType dt,DRegister rd,DRegister rn,DRegister rm)9622 voidVrsqrtsDataTypedtDRegisterrdDRegisterrnDRegisterrm    (, , , , );
  }
9623 Vrsqrtsaldtrdrnrm9624 9625    (Vrsqrts(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)9626 voidVrsqrts       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



9627 ConditioncondDataTypedtQRegisterrdQRegisterrnQRegisterrm9628 VIXL_ASSERTAliasesAvailableScratchRegisterrd9629 VIXL_ASSERTAliasesAvailableScratchRegisterrn9630 VIXL_ASSERTAliasesAvailableScratchRegisterrm9631 VIXL_ASSERTallow_macro_instructions_9632 VIXL_ASSERTOutsideITBlock9633 MacroEmissionCheckScopeguardthis9634 ITScopeit_scopethiscond9635 vrsqrtsconddtrdrnrm9636    ( ,  ,  ,  ) {Vrsqrts(DataType dt,QRegister rd,QRegister rn,QRegister rm)9637 voidVrsqrtsDataTypedtQRegisterrdQRegisterrnQRegisterrm    (, , , , );
  }
9638 Vrsqrtsaldtrdrnrm9639 9640    ( ,Vrsra(Condition cond,DataType dt,DRegister rd,DRegister rm,const DOperand & operand)9641 voidVrsraConditioncond              ,
              ,
              ,
              & ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



9642 DataTypedt9643 DRegisterrd9644 DRegisterrm9645 constDOperandoperand9646 VIXL_ASSERTAliasesAvailableScratchRegisterrd9647 VIXL_ASSERTAliasesAvailableScratchRegisterrm9648 VIXL_ASSERTAliasesAvailableScratchRegisteroperand9649 VIXL_ASSERTallow_macro_instructions_9650 VIXL_ASSERTOutsideITBlock9651 MacroEmissionCheckScopeguardthis9652 ITScopeit_scopethiscond9653 vrsraconddtrdrmoperand9654    ( ,  ,  ,  & ) {Vrsra(DataType dt,DRegister rd,DRegister rm,const DOperand & operand)9655 voidVrsraDataTypedtDRegisterrdDRegisterrmconstDOperandoperand    (, , , , );
  }
9656 Vrsraaldtrdrmoperand9657 9658    ( ,Vrsra(Condition cond,DataType dt,QRegister rd,QRegister rm,const QOperand & operand)9659 voidVrsraConditioncond              ,
              ,
              ,
              & ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



9660 DataTypedt9661 QRegisterrd9662 QRegisterrm9663 constQOperandoperand9664 VIXL_ASSERTAliasesAvailableScratchRegisterrd9665 VIXL_ASSERTAliasesAvailableScratchRegisterrm9666 VIXL_ASSERTAliasesAvailableScratchRegisteroperand9667 VIXL_ASSERTallow_macro_instructions_9668 VIXL_ASSERTOutsideITBlock9669 MacroEmissionCheckScopeguardthis9670 ITScopeit_scopethiscond9671 vrsraconddtrdrmoperand9672    ( ,  ,  ,  & ) {Vrsra(DataType dt,QRegister rd,QRegister rm,const QOperand & operand)9673 voidVrsraDataTypedtQRegisterrdQRegisterrmconstQOperandoperand    (, , , , );
  }
9674 Vrsraaldtrdrmoperand9675 9676    (Vrsubhn(Condition cond,DataType dt,DRegister rd,QRegister rn,QRegister rm)9677 voidVrsubhn       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



















9678 ConditioncondDataTypedtDRegisterrdQRegisterrnQRegisterrm9679 VIXL_ASSERTAliasesAvailableScratchRegisterrd9680 VIXL_ASSERTAliasesAvailableScratchRegisterrn9681 VIXL_ASSERTAliasesAvailableScratchRegisterrm9682 VIXL_ASSERTallow_macro_instructions_9683 VIXL_ASSERTOutsideITBlock9684 MacroEmissionCheckScopeguardthis9685 ITScopeit_scopethiscond9686 vrsubhnconddtrdrnrm9687    ( ,  ,  ,  ) {Vrsubhn(DataType dt,DRegister rd,QRegister rn,QRegister rm)9688 voidVrsubhnDataTypedtDRegisterrdQRegisterrnQRegisterrm    (, , , , );
  }
9689 Vrsubhnaldtrdrnrm9690 9691    ( ,  ,  ,  ) {Vseleq(DataType dt,DRegister rd,DRegister rn,DRegister rm)9692 voidVseleqDataTypedtDRegisterrdDRegisterrnDRegisterrm    (!());
    (!());
    (!());
    ();
    (());
     ();
    (, , , );
  }
9693 VIXL_ASSERTAliasesAvailableScratchRegisterrd9694 VIXL_ASSERTAliasesAvailableScratchRegisterrn9695 VIXL_ASSERTAliasesAvailableScratchRegisterrm9696 VIXL_ASSERTallow_macro_instructions_9697 VIXL_ASSERTOutsideITBlock9698 MacroEmissionCheckScopeguardthis9699 vseleqdtrdrnrm9700 9701    ( ,  ,  ,  ) {Vseleq(DataType dt,SRegister rd,SRegister rn,SRegister rm)9702 voidVseleqDataTypedtSRegisterrdSRegisterrnSRegisterrm    (!());
    (!());
    (!());
    ();
    (());
     ();
    (, , , );
  }
9703 VIXL_ASSERTAliasesAvailableScratchRegisterrd9704 VIXL_ASSERTAliasesAvailableScratchRegisterrn9705 VIXL_ASSERTAliasesAvailableScratchRegisterrm9706 VIXL_ASSERTallow_macro_instructions_9707 VIXL_ASSERTOutsideITBlock9708 MacroEmissionCheckScopeguardthis9709 vseleqdtrdrnrm9710 9711    ( ,  ,  ,  ) {Vselge(DataType dt,DRegister rd,DRegister rn,DRegister rm)9712 voidVselgeDataTypedtDRegisterrdDRegisterrnDRegisterrm    (!());
    (!());
    (!());
    ();
    (());
     ();
    (, , , );
  }
9713 VIXL_ASSERTAliasesAvailableScratchRegisterrd9714 VIXL_ASSERTAliasesAvailableScratchRegisterrn9715 VIXL_ASSERTAliasesAvailableScratchRegisterrm9716 VIXL_ASSERTallow_macro_instructions_9717 VIXL_ASSERTOutsideITBlock9718 MacroEmissionCheckScopeguardthis9719 vselgedtrdrnrm9720 9721    ( ,  ,  ,  ) {Vselge(DataType dt,SRegister rd,SRegister rn,SRegister rm)9722 voidVselgeDataTypedtSRegisterrdSRegisterrnSRegisterrm    (!());
    (!());
    (!());
    ();
    (());
     ();
    (, , , );
  }
9723 VIXL_ASSERTAliasesAvailableScratchRegisterrd9724 VIXL_ASSERTAliasesAvailableScratchRegisterrn9725 VIXL_ASSERTAliasesAvailableScratchRegisterrm9726 VIXL_ASSERTallow_macro_instructions_9727 VIXL_ASSERTOutsideITBlock9728 MacroEmissionCheckScopeguardthis9729 vselgedtrdrnrm9730 9731    ( ,  ,  ,  ) {Vselgt(DataType dt,DRegister rd,DRegister rn,DRegister rm)9732 voidVselgtDataTypedtDRegisterrdDRegisterrnDRegisterrm    (!());
    (!());
    (!());
    ();
    (());
     ();
    (, , , );
  }
9733 VIXL_ASSERTAliasesAvailableScratchRegisterrd9734 VIXL_ASSERTAliasesAvailableScratchRegisterrn9735 VIXL_ASSERTAliasesAvailableScratchRegisterrm9736 VIXL_ASSERTallow_macro_instructions_9737 VIXL_ASSERTOutsideITBlock9738 MacroEmissionCheckScopeguardthis9739 vselgtdtrdrnrm9740 9741    ( ,  ,  ,  ) {Vselgt(DataType dt,SRegister rd,SRegister rn,SRegister rm)9742 voidVselgtDataTypedtSRegisterrdSRegisterrnSRegisterrm    (!());
    (!());
    (!());
    ();
    (());
     ();
    (, , , );
  }
9743 VIXL_ASSERTAliasesAvailableScratchRegisterrd9744 VIXL_ASSERTAliasesAvailableScratchRegisterrn9745 VIXL_ASSERTAliasesAvailableScratchRegisterrm9746 VIXL_ASSERTallow_macro_instructions_9747 VIXL_ASSERTOutsideITBlock9748 MacroEmissionCheckScopeguardthis9749 vselgtdtrdrnrm9750 9751    ( ,  ,  ,  ) {Vselvs(DataType dt,DRegister rd,DRegister rn,DRegister rm)9752 voidVselvsDataTypedtDRegisterrdDRegisterrnDRegisterrm    (!());
    (!());
    (!());
    ();
    (());
     ();
    (, , , );
  }
9753 VIXL_ASSERTAliasesAvailableScratchRegisterrd9754 VIXL_ASSERTAliasesAvailableScratchRegisterrn9755 VIXL_ASSERTAliasesAvailableScratchRegisterrm9756 VIXL_ASSERTallow_macro_instructions_9757 VIXL_ASSERTOutsideITBlock9758 MacroEmissionCheckScopeguardthis9759 vselvsdtrdrnrm9760 9761    ( ,  ,  ,  ) {Vselvs(DataType dt,SRegister rd,SRegister rn,SRegister rm)9762 voidVselvsDataTypedtSRegisterrdSRegisterrnSRegisterrm    (!());
    (!());
    (!());
    ();
    (());
     ();
    (, , , );
  }
9763 VIXL_ASSERTAliasesAvailableScratchRegisterrd9764 VIXL_ASSERTAliasesAvailableScratchRegisterrn9765 VIXL_ASSERTAliasesAvailableScratchRegisterrm9766 VIXL_ASSERTallow_macro_instructions_9767 VIXL_ASSERTOutsideITBlock9768 MacroEmissionCheckScopeguardthis9769 vselvsdtrdrnrm9770 9771    ( ,Vshl(Condition cond,DataType dt,DRegister rd,DRegister rm,const DOperand & operand)9772 voidVshlConditioncond             ,
             ,
             ,
             & ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



9773 DataTypedt9774 DRegisterrd9775 DRegisterrm9776 constDOperandoperand9777 VIXL_ASSERTAliasesAvailableScratchRegisterrd9778 VIXL_ASSERTAliasesAvailableScratchRegisterrm9779 VIXL_ASSERTAliasesAvailableScratchRegisteroperand9780 VIXL_ASSERTallow_macro_instructions_9781 VIXL_ASSERTOutsideITBlock9782 MacroEmissionCheckScopeguardthis9783 ITScopeit_scopethiscond9784 vshlconddtrdrmoperand9785    ( ,  ,  ,  & ) {Vshl(DataType dt,DRegister rd,DRegister rm,const DOperand & operand)9786 voidVshlDataTypedtDRegisterrdDRegisterrmconstDOperandoperand    (, , , , );
  }
9787 Vshlaldtrdrmoperand9788 9789    ( ,Vshl(Condition cond,DataType dt,QRegister rd,QRegister rm,const QOperand & operand)9790 voidVshlConditioncond             ,
             ,
             ,
             & ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



9791 DataTypedt9792 QRegisterrd9793 QRegisterrm9794 constQOperandoperand9795 VIXL_ASSERTAliasesAvailableScratchRegisterrd9796 VIXL_ASSERTAliasesAvailableScratchRegisterrm9797 VIXL_ASSERTAliasesAvailableScratchRegisteroperand9798 VIXL_ASSERTallow_macro_instructions_9799 VIXL_ASSERTOutsideITBlock9800 MacroEmissionCheckScopeguardthis9801 ITScopeit_scopethiscond9802 vshlconddtrdrmoperand9803    ( ,  ,  ,  & ) {Vshl(DataType dt,QRegister rd,QRegister rm,const QOperand & operand)9804 voidVshlDataTypedtQRegisterrdQRegisterrmconstQOperandoperand    (, , , , );
  }
9805 Vshlaldtrdrmoperand9806 9807    ( ,Vshll(Condition cond,DataType dt,QRegister rd,DRegister rm,const DOperand & operand)9808 voidVshllConditioncond              ,
              ,
              ,
              & ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



9809 DataTypedt9810 QRegisterrd9811 DRegisterrm9812 constDOperandoperand9813 VIXL_ASSERTAliasesAvailableScratchRegisterrd9814 VIXL_ASSERTAliasesAvailableScratchRegisterrm9815 VIXL_ASSERTAliasesAvailableScratchRegisteroperand9816 VIXL_ASSERTallow_macro_instructions_9817 VIXL_ASSERTOutsideITBlock9818 MacroEmissionCheckScopeguardthis9819 ITScopeit_scopethiscond9820 vshllconddtrdrmoperand9821    ( ,  ,  ,  & ) {Vshll(DataType dt,QRegister rd,DRegister rm,const DOperand & operand)9822 voidVshllDataTypedtQRegisterrdDRegisterrmconstDOperandoperand    (, , , , );
  }
9823 Vshllaldtrdrmoperand9824 9825    ( ,Vshr(Condition cond,DataType dt,DRegister rd,DRegister rm,const DOperand & operand)9826 voidVshrConditioncond             ,
             ,
             ,
             & ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



9827 DataTypedt9828 DRegisterrd9829 DRegisterrm9830 constDOperandoperand9831 VIXL_ASSERTAliasesAvailableScratchRegisterrd9832 VIXL_ASSERTAliasesAvailableScratchRegisterrm9833 VIXL_ASSERTAliasesAvailableScratchRegisteroperand9834 VIXL_ASSERTallow_macro_instructions_9835 VIXL_ASSERTOutsideITBlock9836 MacroEmissionCheckScopeguardthis9837 ITScopeit_scopethiscond9838 vshrconddtrdrmoperand9839    ( ,  ,  ,  & ) {Vshr(DataType dt,DRegister rd,DRegister rm,const DOperand & operand)9840 voidVshrDataTypedtDRegisterrdDRegisterrmconstDOperandoperand    (, , , , );
  }
9841 Vshraldtrdrmoperand9842 9843    ( ,Vshr(Condition cond,DataType dt,QRegister rd,QRegister rm,const QOperand & operand)9844 voidVshrConditioncond             ,
             ,
             ,
             & ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



9845 DataTypedt9846 QRegisterrd9847 QRegisterrm9848 constQOperandoperand9849 VIXL_ASSERTAliasesAvailableScratchRegisterrd9850 VIXL_ASSERTAliasesAvailableScratchRegisterrm9851 VIXL_ASSERTAliasesAvailableScratchRegisteroperand9852 VIXL_ASSERTallow_macro_instructions_9853 VIXL_ASSERTOutsideITBlock9854 MacroEmissionCheckScopeguardthis9855 ITScopeit_scopethiscond9856 vshrconddtrdrmoperand9857    ( ,  ,  ,  & ) {Vshr(DataType dt,QRegister rd,QRegister rm,const QOperand & operand)9858 voidVshrDataTypedtQRegisterrdQRegisterrmconstQOperandoperand    (, , , , );
  }
9859 Vshraldtrdrmoperand9860 9861    ( ,Vshrn(Condition cond,DataType dt,DRegister rd,QRegister rm,const QOperand & operand)9862 voidVshrnConditioncond              ,
              ,
              ,
              & ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



9863 DataTypedt9864 DRegisterrd9865 QRegisterrm9866 constQOperandoperand9867 VIXL_ASSERTAliasesAvailableScratchRegisterrd9868 VIXL_ASSERTAliasesAvailableScratchRegisterrm9869 VIXL_ASSERTAliasesAvailableScratchRegisteroperand9870 VIXL_ASSERTallow_macro_instructions_9871 VIXL_ASSERTOutsideITBlock9872 MacroEmissionCheckScopeguardthis9873 ITScopeit_scopethiscond9874 vshrnconddtrdrmoperand9875    ( ,  ,  ,  & ) {Vshrn(DataType dt,DRegister rd,QRegister rm,const QOperand & operand)9876 voidVshrnDataTypedtDRegisterrdQRegisterrmconstQOperandoperand    (, , , , );
  }
9877 Vshrnaldtrdrmoperand9878 9879    ( ,Vsli(Condition cond,DataType dt,DRegister rd,DRegister rm,const DOperand & operand)9880 voidVsliConditioncond             ,
             ,
             ,
             & ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



9881 DataTypedt9882 DRegisterrd9883 DRegisterrm9884 constDOperandoperand9885 VIXL_ASSERTAliasesAvailableScratchRegisterrd9886 VIXL_ASSERTAliasesAvailableScratchRegisterrm9887 VIXL_ASSERTAliasesAvailableScratchRegisteroperand9888 VIXL_ASSERTallow_macro_instructions_9889 VIXL_ASSERTOutsideITBlock9890 MacroEmissionCheckScopeguardthis9891 ITScopeit_scopethiscond9892 vsliconddtrdrmoperand9893    ( ,  ,  ,  & ) {Vsli(DataType dt,DRegister rd,DRegister rm,const DOperand & operand)9894 voidVsliDataTypedtDRegisterrdDRegisterrmconstDOperandoperand    (, , , , );
  }
9895 Vslialdtrdrmoperand9896 9897    ( ,Vsli(Condition cond,DataType dt,QRegister rd,QRegister rm,const QOperand & operand)9898 voidVsliConditioncond             ,
             ,
             ,
             & ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



9899 DataTypedt9900 QRegisterrd9901 QRegisterrm9902 constQOperandoperand9903 VIXL_ASSERTAliasesAvailableScratchRegisterrd9904 VIXL_ASSERTAliasesAvailableScratchRegisterrm9905 VIXL_ASSERTAliasesAvailableScratchRegisteroperand9906 VIXL_ASSERTallow_macro_instructions_9907 VIXL_ASSERTOutsideITBlock9908 MacroEmissionCheckScopeguardthis9909 ITScopeit_scopethiscond9910 vsliconddtrdrmoperand9911    ( ,  ,  ,  & ) {Vsli(DataType dt,QRegister rd,QRegister rm,const QOperand & operand)9912 voidVsliDataTypedtQRegisterrdQRegisterrmconstQOperandoperand    (, , , , );
  }
9913 Vslialdtrdrmoperand9914 9915    ( ,  ,  ,  ) {Vsqrt(Condition cond,DataType dt,SRegister rd,SRegister rm)9916 voidVsqrtConditioncondDataTypedtSRegisterrdSRegisterrm    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }


9917 VIXL_ASSERTAliasesAvailableScratchRegisterrd9918 VIXL_ASSERTAliasesAvailableScratchRegisterrm9919 VIXL_ASSERTallow_macro_instructions_9920 VIXL_ASSERTOutsideITBlock9921 MacroEmissionCheckScopeguardthis9922 ITScopeit_scopethiscond9923 vsqrtconddtrdrm9924    ( ,  ,  ) { (, , , ); }
Vsqrt(DataType dt,SRegister rd,SRegister rm)9925 voidVsqrtDataTypedtSRegisterrdSRegisterrmVsqrtaldtrdrm9926    ( ,  ,  ,  ) {Vsqrt(Condition cond,DataType dt,DRegister rd,DRegister rm)9927 voidVsqrtConditioncondDataTypedtDRegisterrdDRegisterrm    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }


9928 VIXL_ASSERTAliasesAvailableScratchRegisterrd9929 VIXL_ASSERTAliasesAvailableScratchRegisterrm9930 VIXL_ASSERTallow_macro_instructions_9931 VIXL_ASSERTOutsideITBlock9932 MacroEmissionCheckScopeguardthis9933 ITScopeit_scopethiscond9934 vsqrtconddtrdrm9935    ( ,  ,  ) { (, , , ); }
Vsqrt(DataType dt,DRegister rd,DRegister rm)9936 voidVsqrtDataTypedtDRegisterrdDRegisterrmVsqrtaldtrdrm9937    ( ,Vsra(Condition cond,DataType dt,DRegister rd,DRegister rm,const DOperand & operand)9938 voidVsraConditioncond             ,
             ,
             ,
             & ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



9939 DataTypedt9940 DRegisterrd9941 DRegisterrm9942 constDOperandoperand9943 VIXL_ASSERTAliasesAvailableScratchRegisterrd9944 VIXL_ASSERTAliasesAvailableScratchRegisterrm9945 VIXL_ASSERTAliasesAvailableScratchRegisteroperand9946 VIXL_ASSERTallow_macro_instructions_9947 VIXL_ASSERTOutsideITBlock9948 MacroEmissionCheckScopeguardthis9949 ITScopeit_scopethiscond9950 vsraconddtrdrmoperand9951    ( ,  ,  ,  & ) {Vsra(DataType dt,DRegister rd,DRegister rm,const DOperand & operand)9952 voidVsraDataTypedtDRegisterrdDRegisterrmconstDOperandoperand    (, , , , );
  }
9953 Vsraaldtrdrmoperand9954 9955    ( ,Vsra(Condition cond,DataType dt,QRegister rd,QRegister rm,const QOperand & operand)9956 voidVsraConditioncond             ,
             ,
             ,
             & ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



9957 DataTypedt9958 QRegisterrd9959 QRegisterrm9960 constQOperandoperand9961 VIXL_ASSERTAliasesAvailableScratchRegisterrd9962 VIXL_ASSERTAliasesAvailableScratchRegisterrm9963 VIXL_ASSERTAliasesAvailableScratchRegisteroperand9964 VIXL_ASSERTallow_macro_instructions_9965 VIXL_ASSERTOutsideITBlock9966 MacroEmissionCheckScopeguardthis9967 ITScopeit_scopethiscond9968 vsraconddtrdrmoperand9969    ( ,  ,  ,  & ) {Vsra(DataType dt,QRegister rd,QRegister rm,const QOperand & operand)9970 voidVsraDataTypedtQRegisterrdQRegisterrmconstQOperandoperand    (, , , , );
  }
9971 Vsraaldtrdrmoperand9972 9973    ( ,Vsri(Condition cond,DataType dt,DRegister rd,DRegister rm,const DOperand & operand)9974 voidVsriConditioncond             ,
             ,
             ,
             & ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



9975 DataTypedt9976 DRegisterrd9977 DRegisterrm9978 constDOperandoperand9979 VIXL_ASSERTAliasesAvailableScratchRegisterrd9980 VIXL_ASSERTAliasesAvailableScratchRegisterrm9981 VIXL_ASSERTAliasesAvailableScratchRegisteroperand9982 VIXL_ASSERTallow_macro_instructions_9983 VIXL_ASSERTOutsideITBlock9984 MacroEmissionCheckScopeguardthis9985 ITScopeit_scopethiscond9986 vsriconddtrdrmoperand9987    ( ,  ,  ,  & ) {Vsri(DataType dt,DRegister rd,DRegister rm,const DOperand & operand)9988 voidVsriDataTypedtDRegisterrdDRegisterrmconstDOperandoperand    (, , , , );
  }
9989 Vsrialdtrdrmoperand9990 9991    ( ,Vsri(Condition cond,DataType dt,QRegister rd,QRegister rm,const QOperand & operand)9992 voidVsriConditioncond             ,
             ,
             ,
             & ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



9993 DataTypedt9994 QRegisterrd9995 QRegisterrm9996 constQOperandoperand9997 VIXL_ASSERTAliasesAvailableScratchRegisterrd9998 VIXL_ASSERTAliasesAvailableScratchRegisterrm9999 VIXL_ASSERTAliasesAvailableScratchRegisteroperand10000 VIXL_ASSERTallow_macro_instructions_10001 VIXL_ASSERTOutsideITBlock10002 MacroEmissionCheckScopeguardthis10003 ITScopeit_scopethiscond10004 vsriconddtrdrmoperand10005    ( ,  ,  ,  & ) {Vsri(DataType dt,QRegister rd,QRegister rm,const QOperand & operand)10006 voidVsriDataTypedtQRegisterrdQRegisterrmconstQOperandoperand    (, , , , );
  }
10007 Vsrialdtrdrmoperand10008 10009    ( ,Vst1(Condition cond,DataType dt,const NeonRegisterList & nreglist,const AlignedMemOperand & operand)10010 voidVst1Conditioncond             ,
             & ,
             & ) {
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }



10011 DataTypedt10012 constNeonRegisterListnreglist10013 constAlignedMemOperandoperand10014 VIXL_ASSERTAliasesAvailableScratchRegisternreglist10015 VIXL_ASSERTAliasesAvailableScratchRegisteroperand10016 VIXL_ASSERTallow_macro_instructions_10017 VIXL_ASSERTOutsideITBlock10018 MacroEmissionCheckScopeguardthis10019 ITScopeit_scopethiscond10020 vst1conddtnreglistoperand10021    ( ,Vst1(DataType dt,const NeonRegisterList & nreglist,const AlignedMemOperand & operand)10022 voidVst1DataTypedt             & ,
             & ) {
    (, , , );
  }
10023 constNeonRegisterListnreglist10024 constAlignedMemOperandoperand10025 Vst1aldtnreglistoperand10026 10027    ( ,Vst2(Condition cond,DataType dt,const NeonRegisterList & nreglist,const AlignedMemOperand & operand)10028 voidVst2Conditioncond             ,
             & ,
             & ) {
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }



10029 DataTypedt10030 constNeonRegisterListnreglist10031 constAlignedMemOperandoperand10032 VIXL_ASSERTAliasesAvailableScratchRegisternreglist10033 VIXL_ASSERTAliasesAvailableScratchRegisteroperand10034 VIXL_ASSERTallow_macro_instructions_10035 VIXL_ASSERTOutsideITBlock10036 MacroEmissionCheckScopeguardthis10037 ITScopeit_scopethiscond10038 vst2conddtnreglistoperand10039    ( ,Vst2(DataType dt,const NeonRegisterList & nreglist,const AlignedMemOperand & operand)10040 voidVst2DataTypedt             & ,
             & ) {
    (, , , );
  }
10041 constNeonRegisterListnreglist10042 constAlignedMemOperandoperand10043 Vst2aldtnreglistoperand10044 10045    ( ,Vst3(Condition cond,DataType dt,const NeonRegisterList & nreglist,const AlignedMemOperand & operand)10046 voidVst3Conditioncond             ,
             & ,
             & ) {
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }



10047 DataTypedt10048 constNeonRegisterListnreglist10049 constAlignedMemOperandoperand10050 VIXL_ASSERTAliasesAvailableScratchRegisternreglist10051 VIXL_ASSERTAliasesAvailableScratchRegisteroperand10052 VIXL_ASSERTallow_macro_instructions_10053 VIXL_ASSERTOutsideITBlock10054 MacroEmissionCheckScopeguardthis10055 ITScopeit_scopethiscond10056 vst3conddtnreglistoperand10057    ( ,Vst3(DataType dt,const NeonRegisterList & nreglist,const AlignedMemOperand & operand)10058 voidVst3DataTypedt             & ,
             & ) {
    (, , , );
  }
10059 constNeonRegisterListnreglist10060 constAlignedMemOperandoperand10061 Vst3aldtnreglistoperand10062 10063    ( ,Vst3(Condition cond,DataType dt,const NeonRegisterList & nreglist,const MemOperand & operand)10064 voidVst3Conditioncond             ,
             & ,
             & ) {
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }



10065 DataTypedt10066 constNeonRegisterListnreglist10067 constMemOperandoperand10068 VIXL_ASSERTAliasesAvailableScratchRegisternreglist10069 VIXL_ASSERTAliasesAvailableScratchRegisteroperand10070 VIXL_ASSERTallow_macro_instructions_10071 VIXL_ASSERTOutsideITBlock10072 MacroEmissionCheckScopeguardthis10073 ITScopeit_scopethiscond10074 vst3conddtnreglistoperand10075    ( ,Vst3(DataType dt,const NeonRegisterList & nreglist,const MemOperand & operand)10076 voidVst3DataTypedt             & ,
             & ) {
    (, , , );
  }
10077 constNeonRegisterListnreglist10078 constMemOperandoperand10079 Vst3aldtnreglistoperand10080 10081    ( ,Vst4(Condition cond,DataType dt,const NeonRegisterList & nreglist,const AlignedMemOperand & operand)10082 voidVst4Conditioncond             ,
             & ,
             & ) {
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }



10083 DataTypedt10084 constNeonRegisterListnreglist10085 constAlignedMemOperandoperand10086 VIXL_ASSERTAliasesAvailableScratchRegisternreglist10087 VIXL_ASSERTAliasesAvailableScratchRegisteroperand10088 VIXL_ASSERTallow_macro_instructions_10089 VIXL_ASSERTOutsideITBlock10090 MacroEmissionCheckScopeguardthis10091 ITScopeit_scopethiscond10092 vst4conddtnreglistoperand10093    ( ,Vst4(DataType dt,const NeonRegisterList & nreglist,const AlignedMemOperand & operand)10094 voidVst4DataTypedt             & ,
             & ) {
    (, , , );
  }
10095 constNeonRegisterListnreglist10096 constAlignedMemOperandoperand10097 Vst4aldtnreglistoperand10098 10099    ( ,Vstm(Condition cond,DataType dt,Register rn,WriteBack write_back,DRegisterList dreglist)10100 voidVstmConditioncond             ,
             ,
             ,
             ) {
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }

10101 DataTypedt10102 Registerrn10103 WriteBackwrite_back10104 DRegisterListdreglist10105 VIXL_ASSERTAliasesAvailableScratchRegisterrn10106 VIXL_ASSERTAliasesAvailableScratchRegisterdreglist10107 VIXL_ASSERTallow_macro_instructions_10108 VIXL_ASSERTOutsideITBlock10109 MacroEmissionCheckScopeguardthis10110 ITScopeit_scopethiscond10111 vstmconddtrnwrite_backdreglist10112    ( ,Vstm(DataType dt,Register rn,WriteBack write_back,DRegisterList dreglist)10113 voidVstmDataTypedt             ,
             ,
             ) {
    (, , , , );
  }

10114 Registerrn10115 WriteBackwrite_back10116 DRegisterListdreglist10117 Vstmaldtrnwrite_backdreglist10118    ( ,Vstm(Condition cond,Register rn,WriteBack write_back,DRegisterList dreglist)10119 voidVstmConditioncond             ,
             ,
             ) {
    (, , , , );
  }



10120 Registerrn10121 WriteBackwrite_back10122 DRegisterListdreglist10123 VstmcondkDataTypeValueNonernwrite_backdreglist10124    ( ,  ,  ) {Vstm(Register rn,WriteBack write_back,DRegisterList dreglist)10125 voidVstmRegisterrnWriteBackwrite_backDRegisterListdreglist    (, , , , );
  }
10126 VstmalkDataTypeValueNonernwrite_backdreglist10127 10128    ( ,Vstm(Condition cond,DataType dt,Register rn,WriteBack write_back,SRegisterList sreglist)10129 voidVstmConditioncond             ,
             ,
             ,
             ) {
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }

10130 DataTypedt10131 Registerrn10132 WriteBackwrite_back10133 SRegisterListsreglist10134 VIXL_ASSERTAliasesAvailableScratchRegisterrn10135 VIXL_ASSERTAliasesAvailableScratchRegistersreglist10136 VIXL_ASSERTallow_macro_instructions_10137 VIXL_ASSERTOutsideITBlock10138 MacroEmissionCheckScopeguardthis10139 ITScopeit_scopethiscond10140 vstmconddtrnwrite_backsreglist10141    ( ,Vstm(DataType dt,Register rn,WriteBack write_back,SRegisterList sreglist)10142 voidVstmDataTypedt             ,
             ,
             ) {
    (, , , , );
  }

10143 Registerrn10144 WriteBackwrite_back10145 SRegisterListsreglist10146 Vstmaldtrnwrite_backsreglist10147    ( ,Vstm(Condition cond,Register rn,WriteBack write_back,SRegisterList sreglist)10148 voidVstmConditioncond             ,
             ,
             ) {
    (, , , , );
  }



10149 Registerrn10150 WriteBackwrite_back10151 SRegisterListsreglist10152 VstmcondkDataTypeValueNonernwrite_backsreglist10153    ( ,  ,  ) {Vstm(Register rn,WriteBack write_back,SRegisterList sreglist)10154 voidVstmRegisterrnWriteBackwrite_backSRegisterListsreglist    (, , , , );
  }
10155 VstmalkDataTypeValueNonernwrite_backsreglist10156 10157    ( ,Vstmdb(Condition cond,DataType dt,Register rn,WriteBack write_back,DRegisterList dreglist)10158 voidVstmdbConditioncond               ,
               ,
               ,
               ) {
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }

10159 DataTypedt10160 Registerrn10161 WriteBackwrite_back10162 DRegisterListdreglist10163 VIXL_ASSERTAliasesAvailableScratchRegisterrn10164 VIXL_ASSERTAliasesAvailableScratchRegisterdreglist10165 VIXL_ASSERTallow_macro_instructions_10166 VIXL_ASSERTOutsideITBlock10167 MacroEmissionCheckScopeguardthis10168 ITScopeit_scopethiscond10169 vstmdbconddtrnwrite_backdreglist10170    ( ,Vstmdb(DataType dt,Register rn,WriteBack write_back,DRegisterList dreglist)10171 voidVstmdbDataTypedt               ,
               ,
               ) {
    (, , , , );
  }

10172 Registerrn10173 WriteBackwrite_back10174 DRegisterListdreglist10175 Vstmdbaldtrnwrite_backdreglist10176    ( ,Vstmdb(Condition cond,Register rn,WriteBack write_back,DRegisterList dreglist)10177 voidVstmdbConditioncond               ,
               ,
               ) {
    (, , , , );
  }



10178 Registerrn10179 WriteBackwrite_back10180 DRegisterListdreglist10181 VstmdbcondkDataTypeValueNonernwrite_backdreglist10182    ( ,  ,  ) {Vstmdb(Register rn,WriteBack write_back,DRegisterList dreglist)10183 voidVstmdbRegisterrnWriteBackwrite_backDRegisterListdreglist    (, , , , );
  }
10184 VstmdbalkDataTypeValueNonernwrite_backdreglist10185 10186    ( ,Vstmdb(Condition cond,DataType dt,Register rn,WriteBack write_back,SRegisterList sreglist)10187 voidVstmdbConditioncond               ,
               ,
               ,
               ) {
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }

10188 DataTypedt10189 Registerrn10190 WriteBackwrite_back10191 SRegisterListsreglist10192 VIXL_ASSERTAliasesAvailableScratchRegisterrn10193 VIXL_ASSERTAliasesAvailableScratchRegistersreglist10194 VIXL_ASSERTallow_macro_instructions_10195 VIXL_ASSERTOutsideITBlock10196 MacroEmissionCheckScopeguardthis10197 ITScopeit_scopethiscond10198 vstmdbconddtrnwrite_backsreglist10199    ( ,Vstmdb(DataType dt,Register rn,WriteBack write_back,SRegisterList sreglist)10200 voidVstmdbDataTypedt               ,
               ,
               ) {
    (, , , , );
  }

10201 Registerrn10202 WriteBackwrite_back10203 SRegisterListsreglist10204 Vstmdbaldtrnwrite_backsreglist10205    ( ,Vstmdb(Condition cond,Register rn,WriteBack write_back,SRegisterList sreglist)10206 voidVstmdbConditioncond               ,
               ,
               ) {
    (, , , , );
  }



10207 Registerrn10208 WriteBackwrite_back10209 SRegisterListsreglist10210 VstmdbcondkDataTypeValueNonernwrite_backsreglist10211    ( ,  ,  ) {Vstmdb(Register rn,WriteBack write_back,SRegisterList sreglist)10212 voidVstmdbRegisterrnWriteBackwrite_backSRegisterListsreglist    (, , , , );
  }
10213 VstmdbalkDataTypeValueNonernwrite_backsreglist10214 10215    ( ,Vstmia(Condition cond,DataType dt,Register rn,WriteBack write_back,DRegisterList dreglist)10216 voidVstmiaConditioncond               ,
               ,
               ,
               ) {
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }

10217 DataTypedt10218 Registerrn10219 WriteBackwrite_back10220 DRegisterListdreglist10221 VIXL_ASSERTAliasesAvailableScratchRegisterrn10222 VIXL_ASSERTAliasesAvailableScratchRegisterdreglist10223 VIXL_ASSERTallow_macro_instructions_10224 VIXL_ASSERTOutsideITBlock10225 MacroEmissionCheckScopeguardthis10226 ITScopeit_scopethiscond10227 vstmiaconddtrnwrite_backdreglist10228    ( ,Vstmia(DataType dt,Register rn,WriteBack write_back,DRegisterList dreglist)10229 voidVstmiaDataTypedt               ,
               ,
               ) {
    (, , , , );
  }

10230 Registerrn10231 WriteBackwrite_back10232 DRegisterListdreglist10233 Vstmiaaldtrnwrite_backdreglist10234    ( ,Vstmia(Condition cond,Register rn,WriteBack write_back,DRegisterList dreglist)10235 voidVstmiaConditioncond               ,
               ,
               ) {
    (, , , , );
  }



10236 Registerrn10237 WriteBackwrite_back10238 DRegisterListdreglist10239 VstmiacondkDataTypeValueNonernwrite_backdreglist10240    ( ,  ,  ) {Vstmia(Register rn,WriteBack write_back,DRegisterList dreglist)10241 voidVstmiaRegisterrnWriteBackwrite_backDRegisterListdreglist    (, , , , );
  }
10242 VstmiaalkDataTypeValueNonernwrite_backdreglist10243 10244    ( ,Vstmia(Condition cond,DataType dt,Register rn,WriteBack write_back,SRegisterList sreglist)10245 voidVstmiaConditioncond               ,
               ,
               ,
               ) {
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }

10246 DataTypedt10247 Registerrn10248 WriteBackwrite_back10249 SRegisterListsreglist10250 VIXL_ASSERTAliasesAvailableScratchRegisterrn10251 VIXL_ASSERTAliasesAvailableScratchRegistersreglist10252 VIXL_ASSERTallow_macro_instructions_10253 VIXL_ASSERTOutsideITBlock10254 MacroEmissionCheckScopeguardthis10255 ITScopeit_scopethiscond10256 vstmiaconddtrnwrite_backsreglist10257    ( ,Vstmia(DataType dt,Register rn,WriteBack write_back,SRegisterList sreglist)10258 voidVstmiaDataTypedt               ,
               ,
               ) {
    (, , , , );
  }

10259 Registerrn10260 WriteBackwrite_back10261 SRegisterListsreglist10262 Vstmiaaldtrnwrite_backsreglist10263    ( ,Vstmia(Condition cond,Register rn,WriteBack write_back,SRegisterList sreglist)10264 voidVstmiaConditioncond               ,
               ,
               ) {
    (, , , , );
  }



10265 Registerrn10266 WriteBackwrite_back10267 SRegisterListsreglist10268 VstmiacondkDataTypeValueNonernwrite_backsreglist10269    ( ,  ,  ) {Vstmia(Register rn,WriteBack write_back,SRegisterList sreglist)10270 voidVstmiaRegisterrnWriteBackwrite_backSRegisterListsreglist    (, , , , );
  }
10271 VstmiaalkDataTypeValueNonernwrite_backsreglist10272 10273    ( ,Vstr(Condition cond,DataType dt,DRegister rd,const MemOperand & operand)10274 voidVstrConditioncond             ,
             ,
             & ) {
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }

10275 DataTypedt10276 DRegisterrd10277 constMemOperandoperand10278 VIXL_ASSERTAliasesAvailableScratchRegisterrd10279 VIXL_ASSERTAliasesAvailableScratchRegisteroperand10280 VIXL_ASSERTallow_macro_instructions_10281 VIXL_ASSERTOutsideITBlock10282 MacroEmissionCheckScopeguardthis10283 ITScopeit_scopethiscond10284 vstrconddtrdoperand10285    ( ,  ,  & ) {Vstr(DataType dt,DRegister rd,const MemOperand & operand)10286 voidVstrDataTypedtDRegisterrdconstMemOperandoperand    (, , , );
  }

10287 Vstraldtrdoperand10288    ( ,  ,  & ) {Vstr(Condition cond,DRegister rd,const MemOperand & operand)10289 voidVstrConditioncondDRegisterrdconstMemOperandoperand    (, , , );
  }



10290 VstrcondUntyped64rdoperand10291    ( ,  & ) {Vstr(DRegister rd,const MemOperand & operand)10292 voidVstrDRegisterrdconstMemOperandoperand    (, , , );
  }
10293 VstralUntyped64rdoperand10294 10295    ( ,Vstr(Condition cond,DataType dt,SRegister rd,const MemOperand & operand)10296 voidVstrConditioncond             ,
             ,
             & ) {
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }

10297 DataTypedt10298 SRegisterrd10299 constMemOperandoperand10300 VIXL_ASSERTAliasesAvailableScratchRegisterrd10301 VIXL_ASSERTAliasesAvailableScratchRegisteroperand10302 VIXL_ASSERTallow_macro_instructions_10303 VIXL_ASSERTOutsideITBlock10304 MacroEmissionCheckScopeguardthis10305 ITScopeit_scopethiscond10306 vstrconddtrdoperand10307    ( ,  ,  & ) {Vstr(DataType dt,SRegister rd,const MemOperand & operand)10308 voidVstrDataTypedtSRegisterrdconstMemOperandoperand    (, , , );
  }

10309 Vstraldtrdoperand10310    ( ,  ,  & ) {Vstr(Condition cond,SRegister rd,const MemOperand & operand)10311 voidVstrConditioncondSRegisterrdconstMemOperandoperand    (, , , );
  }



10312 VstrcondUntyped32rdoperand10313    ( ,  & ) {Vstr(SRegister rd,const MemOperand & operand)10314 voidVstrSRegisterrdconstMemOperandoperand    (, , , );
  }
10315 VstralUntyped32rdoperand10316 10317    (Vsub(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)10318 voidVsub       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



10319 ConditioncondDataTypedtDRegisterrdDRegisterrnDRegisterrm10320 VIXL_ASSERTAliasesAvailableScratchRegisterrd10321 VIXL_ASSERTAliasesAvailableScratchRegisterrn10322 VIXL_ASSERTAliasesAvailableScratchRegisterrm10323 VIXL_ASSERTallow_macro_instructions_10324 VIXL_ASSERTOutsideITBlock10325 MacroEmissionCheckScopeguardthis10326 ITScopeit_scopethiscond10327 vsubconddtrdrnrm10328    ( ,  ,  ,  ) {Vsub(DataType dt,DRegister rd,DRegister rn,DRegister rm)10329 voidVsubDataTypedtDRegisterrdDRegisterrnDRegisterrm    (, , , , );
  }
10330 Vsubaldtrdrnrm10331 10332    (Vsub(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)10333 voidVsub       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



10334 ConditioncondDataTypedtQRegisterrdQRegisterrnQRegisterrm10335 VIXL_ASSERTAliasesAvailableScratchRegisterrd10336 VIXL_ASSERTAliasesAvailableScratchRegisterrn10337 VIXL_ASSERTAliasesAvailableScratchRegisterrm10338 VIXL_ASSERTallow_macro_instructions_10339 VIXL_ASSERTOutsideITBlock10340 MacroEmissionCheckScopeguardthis10341 ITScopeit_scopethiscond10342 vsubconddtrdrnrm10343    ( ,  ,  ,  ) {Vsub(DataType dt,QRegister rd,QRegister rn,QRegister rm)10344 voidVsubDataTypedtQRegisterrdQRegisterrnQRegisterrm    (, , , , );
  }
10345 Vsubaldtrdrnrm10346 10347    (Vsub(Condition cond,DataType dt,SRegister rd,SRegister rn,SRegister rm)10348 voidVsub       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



10349 ConditioncondDataTypedtSRegisterrdSRegisterrnSRegisterrm10350 VIXL_ASSERTAliasesAvailableScratchRegisterrd10351 VIXL_ASSERTAliasesAvailableScratchRegisterrn10352 VIXL_ASSERTAliasesAvailableScratchRegisterrm10353 VIXL_ASSERTallow_macro_instructions_10354 VIXL_ASSERTOutsideITBlock10355 MacroEmissionCheckScopeguardthis10356 ITScopeit_scopethiscond10357 vsubconddtrdrnrm10358    ( ,  ,  ,  ) {Vsub(DataType dt,SRegister rd,SRegister rn,SRegister rm)10359 voidVsubDataTypedtSRegisterrdSRegisterrnSRegisterrm    (, , , , );
  }
10360 Vsubaldtrdrnrm10361 10362    (Vsubhn(Condition cond,DataType dt,DRegister rd,QRegister rn,QRegister rm)10363 voidVsubhn       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



10364 ConditioncondDataTypedtDRegisterrdQRegisterrnQRegisterrm10365 VIXL_ASSERTAliasesAvailableScratchRegisterrd10366 VIXL_ASSERTAliasesAvailableScratchRegisterrn10367 VIXL_ASSERTAliasesAvailableScratchRegisterrm10368 VIXL_ASSERTallow_macro_instructions_10369 VIXL_ASSERTOutsideITBlock10370 MacroEmissionCheckScopeguardthis10371 ITScopeit_scopethiscond10372 vsubhnconddtrdrnrm10373    ( ,  ,  ,  ) {Vsubhn(DataType dt,DRegister rd,QRegister rn,QRegister rm)10374 voidVsubhnDataTypedtDRegisterrdQRegisterrnQRegisterrm    (, , , , );
  }
10375 Vsubhnaldtrdrnrm10376 10377    (Vsubl(Condition cond,DataType dt,QRegister rd,DRegister rn,DRegister rm)10378 voidVsubl       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



10379 ConditioncondDataTypedtQRegisterrdDRegisterrnDRegisterrm10380 VIXL_ASSERTAliasesAvailableScratchRegisterrd10381 VIXL_ASSERTAliasesAvailableScratchRegisterrn10382 VIXL_ASSERTAliasesAvailableScratchRegisterrm10383 VIXL_ASSERTallow_macro_instructions_10384 VIXL_ASSERTOutsideITBlock10385 MacroEmissionCheckScopeguardthis10386 ITScopeit_scopethiscond10387 vsublconddtrdrnrm10388    ( ,  ,  ,  ) {Vsubl(DataType dt,QRegister rd,DRegister rn,DRegister rm)10389 voidVsublDataTypedtQRegisterrdDRegisterrnDRegisterrm    (, , , , );
  }
10390 Vsublaldtrdrnrm10391 10392    (Vsubw(Condition cond,DataType dt,QRegister rd,QRegister rn,DRegister rm)10393 voidVsubw       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



10394 ConditioncondDataTypedtQRegisterrdQRegisterrnDRegisterrm10395 VIXL_ASSERTAliasesAvailableScratchRegisterrd10396 VIXL_ASSERTAliasesAvailableScratchRegisterrn10397 VIXL_ASSERTAliasesAvailableScratchRegisterrm10398 VIXL_ASSERTallow_macro_instructions_10399 VIXL_ASSERTOutsideITBlock10400 MacroEmissionCheckScopeguardthis10401 ITScopeit_scopethiscond10402 vsubwconddtrdrnrm10403    ( ,  ,  ,  ) {Vsubw(DataType dt,QRegister rd,QRegister rn,DRegister rm)10404 voidVsubwDataTypedtQRegisterrdQRegisterrnDRegisterrm    (, , , , );
  }
10405 Vsubwaldtrdrnrm10406 10407    ( ,  ,  ,  ) {Vswp(Condition cond,DataType dt,DRegister rd,DRegister rm)10408 voidVswpConditioncondDataTypedtDRegisterrdDRegisterrm    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }
10409 VIXL_ASSERTAliasesAvailableScratchRegisterrd10410 VIXL_ASSERTAliasesAvailableScratchRegisterrm10411 VIXL_ASSERTallow_macro_instructions_10412 VIXL_ASSERTOutsideITBlock10413 MacroEmissionCheckScopeguardthis10414 ITScopeit_scopethiscond10415 vswpconddtrdrm10416    ( ,  ,  ) { (, , , ); }

Vswp(DataType dt,DRegister rd,DRegister rm)10417 voidVswpDataTypedtDRegisterrdDRegisterrmVswpaldtrdrm   ( ,  ,  ) {Vswp(Condition cond,DRegister rd,DRegister rm)10418 voidVswpConditioncondDRegisterrdDRegisterrm    (, , , );
  }



10419 VswpcondkDataTypeValueNonerdrm10420    ( ,  ) {Vswp(DRegister rd,DRegister rm)10421 voidVswpDRegisterrdDRegisterrm    (, , , );
  }
10422 VswpalkDataTypeValueNonerdrm10423 10424    ( ,  ,  ,  ) {Vswp(Condition cond,DataType dt,QRegister rd,QRegister rm)10425 voidVswpConditioncondDataTypedtQRegisterrdQRegisterrm    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }
10426 VIXL_ASSERTAliasesAvailableScratchRegisterrd10427 VIXL_ASSERTAliasesAvailableScratchRegisterrm10428 VIXL_ASSERTallow_macro_instructions_10429 VIXL_ASSERTOutsideITBlock10430 MacroEmissionCheckScopeguardthis10431 ITScopeit_scopethiscond10432 vswpconddtrdrm10433    ( ,  ,  ) { (, , , ); }

Vswp(DataType dt,QRegister rd,QRegister rm)10434 voidVswpDataTypedtQRegisterrdQRegisterrmVswpaldtrdrm   ( ,  ,  ) {Vswp(Condition cond,QRegister rd,QRegister rm)10435 voidVswpConditioncondQRegisterrdQRegisterrm    (, , , );
  }



10436 VswpcondkDataTypeValueNonerdrm10437    ( ,  ) {Vswp(QRegister rd,QRegister rm)10438 voidVswpQRegisterrdQRegisterrm    (, , , );
  }
10439 VswpalkDataTypeValueNonerdrm10440 10441    ( ,Vtbl(Condition cond,DataType dt,DRegister rd,const NeonRegisterList & nreglist,DRegister rm)10442 voidVtblConditioncond             ,
             ,
             & ,
             ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



10443 DataTypedt10444 DRegisterrd10445 constNeonRegisterListnreglist10446 DRegisterrm10447 VIXL_ASSERTAliasesAvailableScratchRegisterrd10448 VIXL_ASSERTAliasesAvailableScratchRegisternreglist10449 VIXL_ASSERTAliasesAvailableScratchRegisterrm10450 VIXL_ASSERTallow_macro_instructions_10451 VIXL_ASSERTOutsideITBlock10452 MacroEmissionCheckScopeguardthis10453 ITScopeit_scopethiscond10454 vtblconddtrdnreglistrm10455    ( ,Vtbl(DataType dt,DRegister rd,const NeonRegisterList & nreglist,DRegister rm)10456 voidVtblDataTypedt             ,
             & ,
             ) {
    (, , , , );
  }
10457 DRegisterrd10458 constNeonRegisterListnreglist10459 DRegisterrm10460 Vtblaldtrdnreglistrm10461 10462    ( ,Vtbx(Condition cond,DataType dt,DRegister rd,const NeonRegisterList & nreglist,DRegister rm)10463 voidVtbxConditioncond             ,
             ,
             & ,
             ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



10464 DataTypedt10465 DRegisterrd10466 constNeonRegisterListnreglist10467 DRegisterrm10468 VIXL_ASSERTAliasesAvailableScratchRegisterrd10469 VIXL_ASSERTAliasesAvailableScratchRegisternreglist10470 VIXL_ASSERTAliasesAvailableScratchRegisterrm10471 VIXL_ASSERTallow_macro_instructions_10472 VIXL_ASSERTOutsideITBlock10473 MacroEmissionCheckScopeguardthis10474 ITScopeit_scopethiscond10475 vtbxconddtrdnreglistrm10476    ( ,Vtbx(DataType dt,DRegister rd,const NeonRegisterList & nreglist,DRegister rm)10477 voidVtbxDataTypedt             ,
             & ,
             ) {
    (, , , , );
  }
10478 DRegisterrd10479 constNeonRegisterListnreglist10480 DRegisterrm10481 Vtbxaldtrdnreglistrm10482 10483    ( ,  ,  ,  ) {Vtrn(Condition cond,DataType dt,DRegister rd,DRegister rm)10484 voidVtrnConditioncondDataTypedtDRegisterrdDRegisterrm    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }


10485 VIXL_ASSERTAliasesAvailableScratchRegisterrd10486 VIXL_ASSERTAliasesAvailableScratchRegisterrm10487 VIXL_ASSERTallow_macro_instructions_10488 VIXL_ASSERTOutsideITBlock10489 MacroEmissionCheckScopeguardthis10490 ITScopeit_scopethiscond10491 vtrnconddtrdrm10492    ( ,  ,  ) { (, , , ); }
Vtrn(DataType dt,DRegister rd,DRegister rm)10493 voidVtrnDataTypedtDRegisterrdDRegisterrmVtrnaldtrdrm10494    ( ,  ,  ,  ) {Vtrn(Condition cond,DataType dt,QRegister rd,QRegister rm)10495 voidVtrnConditioncondDataTypedtQRegisterrdQRegisterrm    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }


10496 VIXL_ASSERTAliasesAvailableScratchRegisterrd10497 VIXL_ASSERTAliasesAvailableScratchRegisterrm10498 VIXL_ASSERTallow_macro_instructions_10499 VIXL_ASSERTOutsideITBlock10500 MacroEmissionCheckScopeguardthis10501 ITScopeit_scopethiscond10502 vtrnconddtrdrm10503    ( ,  ,  ) { (, , , ); }
Vtrn(DataType dt,QRegister rd,QRegister rm)10504 voidVtrnDataTypedtQRegisterrdQRegisterrmVtrnaldtrdrm10505    (Vtst(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)10506 voidVtst       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



10507 ConditioncondDataTypedtDRegisterrdDRegisterrnDRegisterrm10508 VIXL_ASSERTAliasesAvailableScratchRegisterrd10509 VIXL_ASSERTAliasesAvailableScratchRegisterrn10510 VIXL_ASSERTAliasesAvailableScratchRegisterrm10511 VIXL_ASSERTallow_macro_instructions_10512 VIXL_ASSERTOutsideITBlock10513 MacroEmissionCheckScopeguardthis10514 ITScopeit_scopethiscond10515 vtstconddtrdrnrm10516    ( ,  ,  ,  ) {Vtst(DataType dt,DRegister rd,DRegister rn,DRegister rm)10517 voidVtstDataTypedtDRegisterrdDRegisterrnDRegisterrm    (, , , , );
  }
10518 Vtstaldtrdrnrm10519 10520    (Vtst(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)10521 voidVtst       ,  ,  ,  ,  ) {
    (!());
    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , , );
  }



10522 ConditioncondDataTypedtQRegisterrdQRegisterrnQRegisterrm10523 VIXL_ASSERTAliasesAvailableScratchRegisterrd10524 VIXL_ASSERTAliasesAvailableScratchRegisterrn10525 VIXL_ASSERTAliasesAvailableScratchRegisterrm10526 VIXL_ASSERTallow_macro_instructions_10527 VIXL_ASSERTOutsideITBlock10528 MacroEmissionCheckScopeguardthis10529 ITScopeit_scopethiscond10530 vtstconddtrdrnrm10531    ( ,  ,  ,  ) {Vtst(DataType dt,QRegister rd,QRegister rn,QRegister rm)10532 voidVtstDataTypedtQRegisterrdQRegisterrnQRegisterrm    (, , , , );
  }
10533 Vtstaldtrdrnrm10534 10535    ( ,  ,  ,  ) {Vuzp(Condition cond,DataType dt,DRegister rd,DRegister rm)10536 voidVuzpConditioncondDataTypedtDRegisterrdDRegisterrm    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }


10537 VIXL_ASSERTAliasesAvailableScratchRegisterrd10538 VIXL_ASSERTAliasesAvailableScratchRegisterrm10539 VIXL_ASSERTallow_macro_instructions_10540 VIXL_ASSERTOutsideITBlock10541 MacroEmissionCheckScopeguardthis10542 ITScopeit_scopethiscond10543 vuzpconddtrdrm10544    ( ,  ,  ) { (, , , ); }
Vuzp(DataType dt,DRegister rd,DRegister rm)10545 voidVuzpDataTypedtDRegisterrdDRegisterrmVuzpaldtrdrm10546    ( ,  ,  ,  ) {Vuzp(Condition cond,DataType dt,QRegister rd,QRegister rm)10547 voidVuzpConditioncondDataTypedtQRegisterrdQRegisterrm    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }


10548 VIXL_ASSERTAliasesAvailableScratchRegisterrd10549 VIXL_ASSERTAliasesAvailableScratchRegisterrm10550 VIXL_ASSERTallow_macro_instructions_10551 VIXL_ASSERTOutsideITBlock10552 MacroEmissionCheckScopeguardthis10553 ITScopeit_scopethiscond10554 vuzpconddtrdrm10555    ( ,  ,  ) { (, , , ); }
Vuzp(DataType dt,QRegister rd,QRegister rm)10556 voidVuzpDataTypedtQRegisterrdQRegisterrmVuzpaldtrdrm10557    ( ,  ,  ,  ) {Vzip(Condition cond,DataType dt,DRegister rd,DRegister rm)10558 voidVzipConditioncondDataTypedtDRegisterrdDRegisterrm    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }


10559 VIXL_ASSERTAliasesAvailableScratchRegisterrd10560 VIXL_ASSERTAliasesAvailableScratchRegisterrm10561 VIXL_ASSERTallow_macro_instructions_10562 VIXL_ASSERTOutsideITBlock10563 MacroEmissionCheckScopeguardthis10564 ITScopeit_scopethiscond10565 vzipconddtrdrm10566    ( ,  ,  ) { (, , , ); }
Vzip(DataType dt,DRegister rd,DRegister rm)10567 voidVzipDataTypedtDRegisterrdDRegisterrmVzipaldtrdrm10568    ( ,  ,  ,  ) {Vzip(Condition cond,DataType dt,QRegister rd,QRegister rm)10569 voidVzipConditioncondDataTypedtQRegisterrdQRegisterrm    (!());
    (!());
    ();
    (());
     ();
     (, &);
    (, , , );
  }


10570 VIXL_ASSERTAliasesAvailableScratchRegisterrd10571 VIXL_ASSERTAliasesAvailableScratchRegisterrm10572 VIXL_ASSERTallow_macro_instructions_10573 VIXL_ASSERTOutsideITBlock10574 MacroEmissionCheckScopeguardthis10575 ITScopeit_scopethiscond10576 vzipconddtrdrm10577    ( ,  ,  ) { (, , , ); }
Vzip(DataType dt,QRegister rd,QRegister rm)10578 voidVzipDataTypedtQRegisterrdQRegisterrmVzipaldtrdrm10579    ( ) {Yield(Condition cond)10580 voidYieldConditioncond    ();
    (());
     ();
     (, &);
    ();
  }
10581 VIXL_ASSERTallow_macro_instructions_10582 VIXL_ASSERTOutsideITBlock10583 MacroEmissionCheckScopeguardthis10584 ITScopeit_scopethiscond10585 yieldcond10586    () { (); }

Yield()10587 voidYieldYieldal   ( ,  ,  ) {Vabs(Condition cond,VRegister rd,VRegister rm)10588 voidVabsConditioncondVRegisterrdVRegisterrm    (.() || .());
    (.() == .());
     (.()) {
      (, , .(), .());
    }  {
      (, , .(), .());
    }
  }
10589 VIXL_ASSERTrdIsSrdIsD10590 VIXL_ASSERTrdGetTypermGetType10591 ifrdIsS10592 VabscondF32rdSrmS10593 else10594 VabscondF64rdDrmD10595 10596    ( ,  ) { (, , ); }

Vabs(VRegister rd,VRegister rm)10597 voidVabsVRegisterrdVRegisterrmVabsalrdrm   ( ,  ,  ,  ) {Vadd(Condition cond,VRegister rd,VRegister rn,VRegister rm)10598 voidVaddConditioncondVRegisterrdVRegisterrnVRegisterrm    (.() || .());
    (.() == .());
    (.() == .());
     (.()) {
      (, , .(), .(), .());
    }  {
      (, , .(), .(), .());
    }
  }
10599 VIXL_ASSERTrdIsSrdIsD10600 VIXL_ASSERTrdGetTypernGetType10601 VIXL_ASSERTrdGetTypermGetType10602 ifrdIsS10603 VaddcondF32rdSrnSrmS10604 else10605 VaddcondF64rdDrnDrmD10606 10607    ( ,  ,  ) { (, , , ); }

Vadd(VRegister rd,VRegister rn,VRegister rm)10608 voidVaddVRegisterrdVRegisterrnVRegisterrmVaddalrdrnrm   ( ,  ,  ) {Vcmp(Condition cond,VRegister rd,VRegister rm)10609 voidVcmpConditioncondVRegisterrdVRegisterrm    (.() || .());
    (.() == .());
     (.()) {
      (, , .(), .());
    }  {
      (, , .(), .());
    }
  }
10610 VIXL_ASSERTrdIsSrdIsD10611 VIXL_ASSERTrdGetTypermGetType10612 ifrdIsS10613 VcmpcondF32rdSrmS10614 else10615 VcmpcondF64rdDrmD10616 10617    ( ,  ) { (, , ); }

Vcmp(VRegister rd,VRegister rm)10618 voidVcmpVRegisterrdVRegisterrmVcmpalrdrm   ( ,  ,  ) {Vcmpe(Condition cond,VRegister rd,VRegister rm)10619 voidVcmpeConditioncondVRegisterrdVRegisterrm    (.() || .());
    (.() == .());
     (.()) {
      (, , .(), .());
    }  {
      (, , .(), .());
    }
  }
10620 VIXL_ASSERTrdIsSrdIsD10621 VIXL_ASSERTrdGetTypermGetType10622 ifrdIsS10623 VcmpecondF32rdSrmS10624 else10625 VcmpecondF64rdDrmD10626 10627    ( ,  ) { (, , ); }

Vcmpe(VRegister rd,VRegister rm)10628 voidVcmpeVRegisterrdVRegisterrmVcmpealrdrm   ( ,  ,  ,  ) {Vdiv(Condition cond,VRegister rd,VRegister rn,VRegister rm)10629 voidVdivConditioncondVRegisterrdVRegisterrnVRegisterrm    (.() || .());
    (.() == .());
    (.() == .());
     (.()) {
      (, , .(), .(), .());
    }  {
      (, , .(), .(), .());
    }
  }
10630 VIXL_ASSERTrdIsSrdIsD10631 VIXL_ASSERTrdGetTypernGetType10632 VIXL_ASSERTrdGetTypermGetType10633 ifrdIsS10634 VdivcondF32rdSrnSrmS10635 else10636 VdivcondF64rdDrnDrmD10637 10638    ( ,  ,  ) { (, , , ); }

Vdiv(VRegister rd,VRegister rn,VRegister rm)10639 voidVdivVRegisterrdVRegisterrnVRegisterrmVdivalrdrnrm   ( ,  ,  ,  ) {Vfma(Condition cond,VRegister rd,VRegister rn,VRegister rm)10640 voidVfmaConditioncondVRegisterrdVRegisterrnVRegisterrm    (.() || .());
    (.() == .());
    (.() == .());
     (.()) {
      (, , .(), .(), .());
    }  {
      (, , .(), .(), .());
    }
  }
10641 VIXL_ASSERTrdIsSrdIsD10642 VIXL_ASSERTrdGetTypernGetType10643 VIXL_ASSERTrdGetTypermGetType10644 ifrdIsS10645 VfmacondF32rdSrnSrmS10646 else10647 VfmacondF64rdDrnDrmD10648 10649    ( ,  ,  ) { (, , , ); }

Vfma(VRegister rd,VRegister rn,VRegister rm)10650 voidVfmaVRegisterrdVRegisterrnVRegisterrmVfmaalrdrnrm   ( ,  ,  ,  ) {Vfms(Condition cond,VRegister rd,VRegister rn,VRegister rm)10651 voidVfmsConditioncondVRegisterrdVRegisterrnVRegisterrm    (.() || .());
    (.() == .());
    (.() == .());
     (.()) {
      (, , .(), .(), .());
    }  {
      (, , .(), .(), .());
    }
  }
10652 VIXL_ASSERTrdIsSrdIsD10653 VIXL_ASSERTrdGetTypernGetType10654 VIXL_ASSERTrdGetTypermGetType10655 ifrdIsS10656 VfmscondF32rdSrnSrmS10657 else10658 VfmscondF64rdDrnDrmD10659 10660    ( ,  ,  ) { (, , , ); }

Vfms(VRegister rd,VRegister rn,VRegister rm)10661 voidVfmsVRegisterrdVRegisterrnVRegisterrmVfmsalrdrnrm   ( ,  ,  ,  ) {Vfnma(Condition cond,VRegister rd,VRegister rn,VRegister rm)10662 voidVfnmaConditioncondVRegisterrdVRegisterrnVRegisterrm    (.() || .());
    (.() == .());
    (.() == .());
     (.()) {
      (, , .(), .(), .());
    }  {
      (, , .(), .(), .());
    }
  }

10663 VIXL_ASSERTrdIsSrdIsD10664 VIXL_ASSERTrdGetTypernGetType10665 VIXL_ASSERTrdGetTypermGetType10666 ifrdIsS10667 VfnmacondF32rdSrnSrmS10668 else10669 VfnmacondF64rdDrnDrmD10670 10671    ( ,  ,  ) {Vfnma(VRegister rd,VRegister rn,VRegister rm)10672 voidVfnmaVRegisterrdVRegisterrnVRegisterrm    (, , , );
  }

10673 Vfnmaalrdrnrm10674    ( ,  ,  ,  ) {Vfnms(Condition cond,VRegister rd,VRegister rn,VRegister rm)10675 voidVfnmsConditioncondVRegisterrdVRegisterrnVRegisterrm    (.() || .());
    (.() == .());
    (.() == .());
     (.()) {
      (, , .(), .(), .());
    }  {
      (, , .(), .(), .());
    }
  }

10676 VIXL_ASSERTrdIsSrdIsD10677 VIXL_ASSERTrdGetTypernGetType10678 VIXL_ASSERTrdGetTypermGetType10679 ifrdIsS10680 VfnmscondF32rdSrnSrmS10681 else10682 VfnmscondF64rdDrnDrmD10683 10684    ( ,  ,  ) {Vfnms(VRegister rd,VRegister rn,VRegister rm)10685 voidVfnmsVRegisterrdVRegisterrnVRegisterrm    (, , , );
  }

10686 Vfnmsalrdrnrm10687    ( ,  ,  ) {Vmaxnm(VRegister rd,VRegister rn,VRegister rm)10688 voidVmaxnmVRegisterrdVRegisterrnVRegisterrm    (.() || .());
    (.() == .());
    (.() == .());
     (.()) {
      (, .(), .(), .());
    }  {
      (, .(), .(), .());
    }
  }

10689 VIXL_ASSERTrdIsSrdIsD10690 VIXL_ASSERTrdGetTypernGetType10691 VIXL_ASSERTrdGetTypermGetType10692 ifrdIsS10693 VmaxnmF32rdSrnSrmS10694 else10695 VmaxnmF64rdDrnDrmD10696 10697    ( ,  ,  ) {Vminnm(VRegister rd,VRegister rn,VRegister rm)10698 voidVminnmVRegisterrdVRegisterrnVRegisterrm    (.() || .());
    (.() == .());
    (.() == .());
     (.()) {
      (, .(), .(), .());
    }  {
      (, .(), .(), .());
    }
  }

10699 VIXL_ASSERTrdIsSrdIsD10700 VIXL_ASSERTrdGetTypernGetType10701 VIXL_ASSERTrdGetTypermGetType10702 ifrdIsS10703 VminnmF32rdSrnSrmS10704 else10705 VminnmF64rdDrnDrmD10706 10707    ( ,  ,  ,  ) {Vmla(Condition cond,VRegister rd,VRegister rn,VRegister rm)10708 voidVmlaConditioncondVRegisterrdVRegisterrnVRegisterrm    (.() || .());
    (.() == .());
    (.() == .());
     (.()) {
      (, , .(), .(), .());
    }  {
      (, , .(), .(), .());
    }
  }
10709 VIXL_ASSERTrdIsSrdIsD10710 VIXL_ASSERTrdGetTypernGetType10711 VIXL_ASSERTrdGetTypermGetType10712 ifrdIsS10713 VmlacondF32rdSrnSrmS10714 else10715 VmlacondF64rdDrnDrmD10716 10717    ( ,  ,  ) { (, , , ); }

Vmla(VRegister rd,VRegister rn,VRegister rm)10718 voidVmlaVRegisterrdVRegisterrnVRegisterrmVmlaalrdrnrm   ( ,  ,  ,  ) {Vmls(Condition cond,VRegister rd,VRegister rn,VRegister rm)10719 voidVmlsConditioncondVRegisterrdVRegisterrnVRegisterrm    (.() || .());
    (.() == .());
    (.() == .());
     (.()) {
      (, , .(), .(), .());
    }  {
      (, , .(), .(), .());
    }
  }
10720 VIXL_ASSERTrdIsSrdIsD10721 VIXL_ASSERTrdGetTypernGetType10722 VIXL_ASSERTrdGetTypermGetType10723 ifrdIsS10724 VmlscondF32rdSrnSrmS10725 else10726 VmlscondF64rdDrnDrmD10727 10728    ( ,  ,  ) { (, , , ); }

Vmls(VRegister rd,VRegister rn,VRegister rm)10729 voidVmlsVRegisterrdVRegisterrnVRegisterrmVmlsalrdrnrm   ( ,  ,  ) {Vmov(Condition cond,VRegister rd,VRegister rm)10730 voidVmovConditioncondVRegisterrdVRegisterrm    (.() || .());
    (.() == .());
     (.()) {
      (, , .(), .());
    }  {
      (, , .(), .());
    }
  }
10731 VIXL_ASSERTrdIsSrdIsD10732 VIXL_ASSERTrdGetTypermGetType10733 ifrdIsS10734 VmovcondF32rdSrmS10735 else10736 VmovcondF64rdDrmD10737 10738    ( ,  ) { (, , ); }

Vmov(VRegister rd,VRegister rm)10739 voidVmovVRegisterrdVRegisterrmVmovalrdrm   ( ,  ,  ,  ) {Vmul(Condition cond,VRegister rd,VRegister rn,VRegister rm)10740 voidVmulConditioncondVRegisterrdVRegisterrnVRegisterrm    (.() || .());
    (.() == .());
    (.() == .());
     (.()) {
      (, , .(), .(), .());
    }  {
      (, , .(), .(), .());
    }
  }
10741 VIXL_ASSERTrdIsSrdIsD10742 VIXL_ASSERTrdGetTypernGetType10743 VIXL_ASSERTrdGetTypermGetType10744 ifrdIsS10745 VmulcondF32rdSrnSrmS10746 else10747 VmulcondF64rdDrnDrmD10748 10749    ( ,  ,  ) { (, , , ); }

Vmul(VRegister rd,VRegister rn,VRegister rm)10750 voidVmulVRegisterrdVRegisterrnVRegisterrmVmulalrdrnrm   ( ,  ,  ) {Vneg(Condition cond,VRegister rd,VRegister rm)10751 voidVnegConditioncondVRegisterrdVRegisterrm    (.() || .());
    (.() == .());
     (.()) {
      (, , .(), .());
    }  {
      (, , .(), .());
    }
  }
10752 VIXL_ASSERTrdIsSrdIsD10753 VIXL_ASSERTrdGetTypermGetType10754 ifrdIsS10755 VnegcondF32rdSrmS10756 else10757 VnegcondF64rdDrmD10758 10759    ( ,  ) { (, , ); }

Vneg(VRegister rd,VRegister rm)10760 voidVnegVRegisterrdVRegisterrmVnegalrdrm   ( ,  ,  ,  ) {Vnmla(Condition cond,VRegister rd,VRegister rn,VRegister rm)10761 voidVnmlaConditioncondVRegisterrdVRegisterrnVRegisterrm    (.() || .());
    (.() == .());
    (.() == .());
     (.()) {
      (, , .(), .(), .());
    }  {
      (, , .(), .(), .());
    }
  }

10762 VIXL_ASSERTrdIsSrdIsD10763 VIXL_ASSERTrdGetTypernGetType10764 VIXL_ASSERTrdGetTypermGetType10765 ifrdIsS10766 VnmlacondF32rdSrnSrmS10767 else10768 VnmlacondF64rdDrnDrmD10769 10770    ( ,  ,  ) {Vnmla(VRegister rd,VRegister rn,VRegister rm)10771 voidVnmlaVRegisterrdVRegisterrnVRegisterrm    (, , , );
  }

10772 Vnmlaalrdrnrm10773    ( ,  ,  ,  ) {Vnmls(Condition cond,VRegister rd,VRegister rn,VRegister rm)10774 voidVnmlsConditioncondVRegisterrdVRegisterrnVRegisterrm    (.() || .());
    (.() == .());
    (.() == .());
     (.()) {
      (, , .(), .(), .());
    }  {
      (, , .(), .(), .());
    }
  }

10775 VIXL_ASSERTrdIsSrdIsD10776 VIXL_ASSERTrdGetTypernGetType10777 VIXL_ASSERTrdGetTypermGetType10778 ifrdIsS10779 VnmlscondF32rdSrnSrmS10780 else10781 VnmlscondF64rdDrnDrmD10782 10783    ( ,  ,  ) {Vnmls(VRegister rd,VRegister rn,VRegister rm)10784 voidVnmlsVRegisterrdVRegisterrnVRegisterrm    (, , , );
  }

10785 Vnmlsalrdrnrm10786    ( ,  ,  ,  ) {Vnmul(Condition cond,VRegister rd,VRegister rn,VRegister rm)10787 voidVnmulConditioncondVRegisterrdVRegisterrnVRegisterrm    (.() || .());
    (.() == .());
    (.() == .());
     (.()) {
      (, , .(), .(), .());
    }  {
      (, , .(), .(), .());
    }
  }

10788 VIXL_ASSERTrdIsSrdIsD10789 VIXL_ASSERTrdGetTypernGetType10790 VIXL_ASSERTrdGetTypermGetType10791 ifrdIsS10792 VnmulcondF32rdSrnSrmS10793 else10794 VnmulcondF64rdDrnDrmD10795 10796    ( ,  ,  ) {Vnmul(VRegister rd,VRegister rn,VRegister rm)10797 voidVnmulVRegisterrdVRegisterrnVRegisterrm    (, , , );
  }

10798 Vnmulalrdrnrm10799    ( ,  ,  ) {Vseleq(VRegister rd,VRegister rn,VRegister rm)10800 voidVseleqVRegisterrdVRegisterrnVRegisterrm    (.() || .());
    (.() == .());
    (.() == .());
     (.()) {
      (, .(), .(), .());
    }  {
      (, .(), .(), .());
    }
  }

10801 VIXL_ASSERTrdIsSrdIsD10802 VIXL_ASSERTrdGetTypernGetType10803 VIXL_ASSERTrdGetTypermGetType10804 ifrdIsS10805 VseleqF32rdSrnSrmS10806 else10807 VseleqF64rdDrnDrmD10808 10809    ( ,  ,  ) {Vselge(VRegister rd,VRegister rn,VRegister rm)10810 voidVselgeVRegisterrdVRegisterrnVRegisterrm    (.() || .());
    (.() == .());
    (.() == .());
     (.()) {
      (, .(), .(), .());
    }  {
      (, .(), .(), .());
    }
  }

10811 VIXL_ASSERTrdIsSrdIsD10812 VIXL_ASSERTrdGetTypernGetType10813 VIXL_ASSERTrdGetTypermGetType10814 ifrdIsS10815 VselgeF32rdSrnSrmS10816 else10817 VselgeF64rdDrnDrmD10818 10819    ( ,  ,  ) {Vselgt(VRegister rd,VRegister rn,VRegister rm)10820 voidVselgtVRegisterrdVRegisterrnVRegisterrm    (.() || .());
    (.() == .());
    (.() == .());
     (.()) {
      (, .(), .(), .());
    }  {
      (, .(), .(), .());
    }
  }

10821 VIXL_ASSERTrdIsSrdIsD10822 VIXL_ASSERTrdGetTypernGetType10823 VIXL_ASSERTrdGetTypermGetType10824 ifrdIsS10825 VselgtF32rdSrnSrmS10826 else10827 VselgtF64rdDrnDrmD10828 10829    ( ,  ,  ) {Vselvs(VRegister rd,VRegister rn,VRegister rm)10830 voidVselvsVRegisterrdVRegisterrnVRegisterrm    (.() || .());
    (.() == .());
    (.() == .());
     (.()) {
      (, .(), .(), .());
    }  {
      (, .(), .(), .());
    }
  }

10831 VIXL_ASSERTrdIsSrdIsD10832 VIXL_ASSERTrdGetTypernGetType10833 VIXL_ASSERTrdGetTypermGetType10834 ifrdIsS10835 VselvsF32rdSrnSrmS10836 else10837 VselvsF64rdDrnDrmD10838 10839    ( ,  ,  ) {Vsqrt(Condition cond,VRegister rd,VRegister rm)10840 voidVsqrtConditioncondVRegisterrdVRegisterrm    (.() || .());
    (.() == .());
     (.()) {
      (, , .(), .());
    }  {
      (, , .(), .());
    }
  }
10841 VIXL_ASSERTrdIsSrdIsD10842 VIXL_ASSERTrdGetTypermGetType10843 ifrdIsS10844 VsqrtcondF32rdSrmS10845 else10846 VsqrtcondF64rdDrmD10847 10848    ( ,  ) { (, , ); }

Vsqrt(VRegister rd,VRegister rm)10849 voidVsqrtVRegisterrdVRegisterrmVsqrtalrdrm   ( ,  ,  ,  ) {Vsub(Condition cond,VRegister rd,VRegister rn,VRegister rm)10850 voidVsubConditioncondVRegisterrdVRegisterrnVRegisterrm    (.() || .());
    (.() == .());
    (.() == .());
     (.()) {
      (, , .(), .(), .());
    }  {
      (, , .(), .(), .());
    }
  }
  


10851 VIXL_ASSERTrdIsSrdIsD10852 VIXL_ASSERTrdGetTypernGetType10853 VIXL_ASSERTrdGetTypermGetType10854 ifrdIsS10855 VsubcondF32rdSrnSrmS10856 else10857 VsubcondF64rdDrnDrmD10858 10859    ( ,  ,  ) { (, , , ); }
Vsub(VRegister rd,VRegister rn,VRegister rm)10860 voidVsubVRegisterrdVRegisterrnVRegisterrmVsubalrdrnrm10861 // End of generated code.10862     ()  {AllowUnpredictable()10863 virtualboolAllowUnpredictableVIXL_OVERRIDE    ();
     ;
  }


 :
   ;
   ;
  * ;
   ;
  :: ;
   ;
   ;
   ;
   ;
};













  {
 :
  
  

  
  
  


  
   (* );

  

  
  
   ();

   ( & ) ;
   ( & ) ;

  
  
   ();
   ( );
   ();
   ();
   ();

  
  
   ( & );
   ( & );

  
  
   ( & );
   ( & ,
                &  = ,
                &  = ,
                &  = ) {
    ((, , , ));
  }
   ( & );
   ( & ,
                &  = ,
                &  = ,
                &  = ) {
    ((, , , ));
  }

  
  
  
   ( & );
   ( & ,
                &  = ,
                &  = ,
                &  = ) {
    ((, , , ));
  }
   ( & );
   ( & ,
                &  = ,
                &  = ,
                &  = ) {
    ((, , , ));
  }

  
   ( & );

  
   ();

 :
  
  
  
  * ;
  * ;

  
   ;      
   ;  


    =( &) {
    ();
  }
};


}  
}  

#  
10864 VIXL_ABORT_WITH_MSG"Unpredictable instruction.\n"10865 returnfalse10866     ()  {AllowStronglyDiscouraged()10867 virtualboolAllowStronglyDiscouragedVIXL_OVERRIDE    (
        );
     ;
  }
10868 VIXL_ABORT_WITH_MSG10869 "ARM strongly recommends to not use this instruction.\n"10870 returnfalse10871 10872 10873 private10874 RegisterListavailable_10875 VRegisterListavailable_vfp_10876 UseScratchRegisterScopecurrent_scratch_scope_10877 MacroAssemblerContextcontext_10878 LabelOffsetcheckpoint_10879 LiteralPoolManagerliteral_pool_manager_10880 VeneerPoolManagerveneer_pool_manager_10881 boolgenerate_simulator_code_10882 boolallow_macro_instructions_10883 10884 10885 // This scope utility allows scratch registers to be managed safely. The10886 // MacroAssembler's GetScratchRegisterList() is used as a pool of scratch10887 // registers. These registers can be allocated on demand, and will be returned10888 // at the end of the scope.10889 //10890 // When the scope ends, the MacroAssembler's lists will be restored to their10891 // original state, even if the lists were modified by some other means.10892 //10893 // Scopes must nest perfectly. That is, they must be destructed in reverse10894 // construction order. Otherwise, it is not clear how to handle cases where one10895 // scope acquires a register that was included in a now-closing scope. With10896 // perfect nesting, this cannot occur.10897 classUseScratchRegisterScope10898 public10899 // This constructor implicitly calls the `Open` function to initialise the10900 // scope, so it is ready to use immediately after it has been constructed.   (* )UseScratchRegisterScope(MacroAssembler * masm)10901 explicitUseScratchRegisterScopeMacroAssemblermasm      : (), (), (0), (0) {
    ();
  }
10902 masm_NULLparent_NULLold_available_old_available_vfp_10903 Openmasm10904 10905 // This constructor allows deferred and optional initialisation of the scope.10906 // The user is required to explicitly call the `Open` function before using10907 // the scope.  ()UseScratchRegisterScope()10908 UseScratchRegisterScope      : (), (), (0), (0) {}
10909 masm_NULLparent_NULLold_available_old_available_vfp_10910 10911 // This function performs the actual initialisation work.10912 voidOpenMacroAssemblermasm10913 10914 // The destructor always implicitly calls the `Close` function.  ~() { (); }
~UseScratchRegisterScope()10915 UseScratchRegisterScopeClose10916 10917 // This function performs the cleaning-up work. It must succeed even if the10918 // scope has not been opened. It is safe to call multiple times.10919 voidClose10920 10921 boolIsAvailableconstRegisterregconst10922 boolIsAvailableconstVRegisterregconst10923 10924 // Take a register from the temp list. It will be returned automatically when10925 // the scope ends.10926 RegisterAcquire10927 VRegisterAcquireVunsignedsize_in_bits10928 QRegisterAcquireQ10929 DRegisterAcquireD10930 SRegisterAcquireS10931 10932 // Explicitly release an acquired (or excluded) register, putting it back in10933 // the temp list.10934 voidReleaseconstRegisterreg10935 voidReleaseconstVRegisterreg10936 10937 // Make the specified registers available as scratch registers for the10938 // duration of this scope.10939 voidIncludeconstRegisterListlist10940 voidIncludeconstRegisterreg110941 constRegisterreg2NoReg10942 constRegisterreg3NoReg10943 constRegisterreg4NoReg10944 IncludeRegisterListreg1reg2reg3reg410945 10946 voidIncludeconstVRegisterListlist10947 voidIncludeconstVRegisterreg110948 constVRegisterreg2NoVReg10949 constVRegisterreg3NoVReg10950 constVRegisterreg4NoVReg10951 IncludeVRegisterListreg1reg2reg3reg410952 10953 10954 // Make sure that the specified registers are not available in this scope.10955 // This can be used to prevent helper functions from using sensitive10956 // registers, for example.10957 voidExcludeconstRegisterListlist10958 voidExcludeconstRegisterreg110959 constRegisterreg2NoReg10960 constRegisterreg3NoReg10961 constRegisterreg4NoReg10962 ExcludeRegisterListreg1reg2reg3reg410963 10964 voidExcludeconstVRegisterListlist10965 voidExcludeconstVRegisterreg110966 constVRegisterreg2NoVReg10967 constVRegisterreg3NoVReg10968 constVRegisterreg4NoVReg10969 ExcludeVRegisterListreg1reg2reg3reg410970 10971 10972 // A convenience helper to exclude any registers used by the operand.10973 voidExcludeconstOperandoperand10974 10975 // Prevent any scratch registers from being used in this scope.10976 voidExcludeAll10977 10978 private10979 // The MacroAssembler maintains a list of available scratch registers, and10980 // also keeps track of the most recently-opened scope so that on destruction10981 // we can check that scopes do not outlive their parents.10982 MacroAssemblermasm_10983 UseScratchRegisterScopeparent_10984 10985 // The state of the available lists at the start of this scope.10986 uint32_told_available_// kRRegister10987 uint64_told_available_vfp_// kVRegister10988    ( &) {UseScratchRegisterScope(const UseScratchRegisterScope &)10989 VIXL_DEBUG_NO_RETURNUseScratchRegisterScopeconstUseScratchRegisterScope    ();
  }
10990 VIXL_UNREACHABLE10991 10992 VIXL_DEBUG_NO_RETURNvoidoperatorconstUseScratchRegisterScope10993 VIXL_UNREACHABLE10994 10995 10996 10997 10998 // namespace aarch3210999 // namespace vixl11000 11001 endif// VIXL_AARCH32_MACRO_ASSEMBLER_AARCH32_H_11002