xref: /aosp_15_r20/external/vixl/src/aarch32/macro-assembler-aarch32.h (revision f5c631da2f1efdd72b5fd1e20510e4042af13d77)
1*f5c631daSSadaf Ebrahimi // Copyright 2017, VIXL authors
2*f5c631daSSadaf Ebrahimi // All rights reserved.
3*f5c631daSSadaf Ebrahimi //
4*f5c631daSSadaf Ebrahimi // Redistribution and use in source and binary forms, with or without
5*f5c631daSSadaf Ebrahimi // modification, are permitted provided that the following conditions are met:
6*f5c631daSSadaf Ebrahimi //
7*f5c631daSSadaf Ebrahimi //   * Redistributions of source code must retain the above copyright notice,
8*f5c631daSSadaf Ebrahimi //     this list of conditions and the following disclaimer.
9*f5c631daSSadaf Ebrahimi //   * Redistributions in binary form must reproduce the above copyright
10*f5c631daSSadaf Ebrahimi //     notice, this list of conditions and the following disclaimer in the
11*f5c631daSSadaf Ebrahimi //     documentation and/or other materials provided with the distribution.
12*f5c631daSSadaf Ebrahimi //   * Neither the name of ARM Limited nor the names of its contributors may
13*f5c631daSSadaf Ebrahimi //     be used to endorse or promote products derived from this software
14*f5c631daSSadaf Ebrahimi //     without specific prior written permission.
15*f5c631daSSadaf Ebrahimi //
16*f5c631daSSadaf Ebrahimi // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS CONTRIBUTORS "AS IS" AND
17*f5c631daSSadaf Ebrahimi // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18*f5c631daSSadaf Ebrahimi // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19*f5c631daSSadaf Ebrahimi // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
20*f5c631daSSadaf Ebrahimi // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21*f5c631daSSadaf Ebrahimi // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22*f5c631daSSadaf Ebrahimi // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23*f5c631daSSadaf Ebrahimi // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24*f5c631daSSadaf Ebrahimi // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25*f5c631daSSadaf Ebrahimi // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26*f5c631daSSadaf Ebrahimi // POSSIBILITY OF SUCH DAMAGE.
27*f5c631daSSadaf Ebrahimi 
28*f5c631daSSadaf Ebrahimi #ifndef VIXL_AARCH32_MACRO_ASSEMBLER_AARCH32_H_
29*f5c631daSSadaf Ebrahimi #define VIXL_AARCH32_MACRO_ASSEMBLER_AARCH32_H_
30*f5c631daSSadaf Ebrahimi 
31*f5c631daSSadaf Ebrahimi #include "code-generation-scopes-vixl.h"
32*f5c631daSSadaf Ebrahimi #include "macro-assembler-interface.h"
33*f5c631daSSadaf Ebrahimi #include "pool-manager-impl.h"
34*f5c631daSSadaf Ebrahimi #include "pool-manager.h"
35*f5c631daSSadaf Ebrahimi #include "utils-vixl.h"
36*f5c631daSSadaf Ebrahimi 
37*f5c631daSSadaf Ebrahimi #include "aarch32/assembler-aarch32.h"
38*f5c631daSSadaf Ebrahimi #include "aarch32/instructions-aarch32.h"
39*f5c631daSSadaf Ebrahimi #include "aarch32/operands-aarch32.h"
40*f5c631daSSadaf Ebrahimi 
41*f5c631daSSadaf Ebrahimi namespace vixl {
42*f5c631daSSadaf Ebrahimi 
43*f5c631daSSadaf Ebrahimi namespace aarch32 {
44*f5c631daSSadaf Ebrahimi 
45*f5c631daSSadaf Ebrahimi class UseScratchRegisterScope;
46*f5c631daSSadaf Ebrahimi 
47*f5c631daSSadaf Ebrahimi enum FlagsUpdate { LeaveFlags = 0, SetFlags = 1, DontCare = 2 };
48*f5c631daSSadaf Ebrahimi 
49*f5c631daSSadaf Ebrahimi // We use a subclass to access the protected `ExactAssemblyScope` constructor
50*f5c631daSSadaf Ebrahimi // giving us control over the pools, and make the constructor private to limit
51*f5c631daSSadaf Ebrahimi // usage to code paths emitting pools.
52*f5c631daSSadaf Ebrahimi class ExactAssemblyScopeWithoutPoolsCheck : public ExactAssemblyScope {
53*f5c631daSSadaf Ebrahimi  private:
54*f5c631daSSadaf Ebrahimi   ExactAssemblyScopeWithoutPoolsCheck(MacroAssembler* masm,
55*f5c631daSSadaf Ebrahimi                                       size_t size,
56*f5c631daSSadaf Ebrahimi                                       SizePolicy size_policy = kExactSize);
57*f5c631daSSadaf Ebrahimi 
58*f5c631daSSadaf Ebrahimi   friend class MacroAssembler;
59*f5c631daSSadaf Ebrahimi   friend class Label;
60*f5c631daSSadaf Ebrahimi };
61*f5c631daSSadaf Ebrahimi // Macro assembler for aarch32 instruction set.
62*f5c631daSSadaf Ebrahimi class MacroAssembler : public Assembler, public MacroAssemblerInterface {
63*f5c631daSSadaf Ebrahimi  public:
64*f5c631daSSadaf Ebrahimi   enum FinalizeOption {
65*f5c631daSSadaf Ebrahimi     kFallThrough,  // There may be more code to execute after calling Finalize.
66*f5c631daSSadaf Ebrahimi     kUnreachable   // Anything generated after calling Finalize is unreachable.
67*f5c631daSSadaf Ebrahimi   };
68*f5c631daSSadaf Ebrahimi 
AsAssemblerBase()69*f5c631daSSadaf Ebrahimi   virtual internal::AssemblerBase* AsAssemblerBase() VIXL_OVERRIDE {
70*f5c631daSSadaf Ebrahimi     return this;
71*f5c631daSSadaf Ebrahimi   }
72*f5c631daSSadaf Ebrahimi 
ArePoolsBlocked()73*f5c631daSSadaf Ebrahimi   virtual bool ArePoolsBlocked() const VIXL_OVERRIDE {
74*f5c631daSSadaf Ebrahimi     return pool_manager_.IsBlocked();
75*f5c631daSSadaf Ebrahimi   }
76*f5c631daSSadaf Ebrahimi 
EmitPoolHeader()77*f5c631daSSadaf Ebrahimi   virtual void EmitPoolHeader() VIXL_OVERRIDE {
78*f5c631daSSadaf Ebrahimi     // Check that we have the correct alignment.
79*f5c631daSSadaf Ebrahimi     if (IsUsingT32()) {
80*f5c631daSSadaf Ebrahimi       VIXL_ASSERT(GetBuffer()->Is16bitAligned());
81*f5c631daSSadaf Ebrahimi     } else {
82*f5c631daSSadaf Ebrahimi       VIXL_ASSERT(GetBuffer()->Is32bitAligned());
83*f5c631daSSadaf Ebrahimi     }
84*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(pool_end_ == NULL);
85*f5c631daSSadaf Ebrahimi     pool_end_ = new Label();
86*f5c631daSSadaf Ebrahimi     ExactAssemblyScopeWithoutPoolsCheck guard(this,
87*f5c631daSSadaf Ebrahimi                                               kMaxInstructionSizeInBytes,
88*f5c631daSSadaf Ebrahimi                                               ExactAssemblyScope::kMaximumSize);
89*f5c631daSSadaf Ebrahimi     b(pool_end_);
90*f5c631daSSadaf Ebrahimi   }
EmitPoolFooter()91*f5c631daSSadaf Ebrahimi   virtual void EmitPoolFooter() VIXL_OVERRIDE {
92*f5c631daSSadaf Ebrahimi     // Align buffer to 4 bytes.
93*f5c631daSSadaf Ebrahimi     GetBuffer()->Align();
94*f5c631daSSadaf Ebrahimi     if (pool_end_ != NULL) {
95*f5c631daSSadaf Ebrahimi       Bind(pool_end_);
96*f5c631daSSadaf Ebrahimi       delete pool_end_;
97*f5c631daSSadaf Ebrahimi       pool_end_ = NULL;
98*f5c631daSSadaf Ebrahimi     }
99*f5c631daSSadaf Ebrahimi   }
EmitPaddingBytes(int n)100*f5c631daSSadaf Ebrahimi   virtual void EmitPaddingBytes(int n) VIXL_OVERRIDE {
101*f5c631daSSadaf Ebrahimi     GetBuffer()->EmitZeroedBytes(n);
102*f5c631daSSadaf Ebrahimi   }
EmitNopBytes(int n)103*f5c631daSSadaf Ebrahimi   virtual void EmitNopBytes(int n) VIXL_OVERRIDE {
104*f5c631daSSadaf Ebrahimi     int nops = 0;
105*f5c631daSSadaf Ebrahimi     int nop_size = IsUsingT32() ? k16BitT32InstructionSizeInBytes
106*f5c631daSSadaf Ebrahimi                                 : kA32InstructionSizeInBytes;
107*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(n % nop_size == 0);
108*f5c631daSSadaf Ebrahimi     nops = n / nop_size;
109*f5c631daSSadaf Ebrahimi     ExactAssemblyScopeWithoutPoolsCheck guard(this,
110*f5c631daSSadaf Ebrahimi                                               n,
111*f5c631daSSadaf Ebrahimi                                               ExactAssemblyScope::kExactSize);
112*f5c631daSSadaf Ebrahimi     for (int i = 0; i < nops; ++i) {
113*f5c631daSSadaf Ebrahimi       nop();
114*f5c631daSSadaf Ebrahimi     }
115*f5c631daSSadaf Ebrahimi   }
116*f5c631daSSadaf Ebrahimi 
117*f5c631daSSadaf Ebrahimi 
118*f5c631daSSadaf Ebrahimi  private:
119*f5c631daSSadaf Ebrahimi   class MacroEmissionCheckScope : public EmissionCheckScope {
120*f5c631daSSadaf Ebrahimi    public:
121*f5c631daSSadaf Ebrahimi     explicit MacroEmissionCheckScope(MacroAssemblerInterface* masm,
122*f5c631daSSadaf Ebrahimi                                      PoolPolicy pool_policy = kBlockPools)
EmissionCheckScope(masm,kTypicalMacroInstructionMaxSize,kMaximumSize,pool_policy)123*f5c631daSSadaf Ebrahimi         : EmissionCheckScope(masm,
124*f5c631daSSadaf Ebrahimi                              kTypicalMacroInstructionMaxSize,
125*f5c631daSSadaf Ebrahimi                              kMaximumSize,
126*f5c631daSSadaf Ebrahimi                              pool_policy) {}
127*f5c631daSSadaf Ebrahimi 
128*f5c631daSSadaf Ebrahimi    private:
129*f5c631daSSadaf Ebrahimi     static const size_t kTypicalMacroInstructionMaxSize =
130*f5c631daSSadaf Ebrahimi         8 * kMaxInstructionSizeInBytes;
131*f5c631daSSadaf Ebrahimi   };
132*f5c631daSSadaf Ebrahimi 
133*f5c631daSSadaf Ebrahimi   class MacroAssemblerContext {
134*f5c631daSSadaf Ebrahimi    public:
MacroAssemblerContext()135*f5c631daSSadaf Ebrahimi     MacroAssemblerContext() : count_(0) {}
~MacroAssemblerContext()136*f5c631daSSadaf Ebrahimi     ~MacroAssemblerContext() {}
GetRecursiveCount()137*f5c631daSSadaf Ebrahimi     unsigned GetRecursiveCount() const { return count_; }
Up(const char * loc)138*f5c631daSSadaf Ebrahimi     void Up(const char* loc) {
139*f5c631daSSadaf Ebrahimi       location_stack_[count_] = loc;
140*f5c631daSSadaf Ebrahimi       count_++;
141*f5c631daSSadaf Ebrahimi       if (count_ >= kMaxRecursion) {
142*f5c631daSSadaf Ebrahimi         printf(
143*f5c631daSSadaf Ebrahimi             "Recursion limit reached; unable to resolve macro assembler "
144*f5c631daSSadaf Ebrahimi             "call.\n");
145*f5c631daSSadaf Ebrahimi         printf("Macro assembler context stack:\n");
146*f5c631daSSadaf Ebrahimi         for (unsigned i = 0; i < kMaxRecursion; i++) {
147*f5c631daSSadaf Ebrahimi           printf("%10s %s\n", (i == 0) ? "oldest -> " : "", location_stack_[i]);
148*f5c631daSSadaf Ebrahimi         }
149*f5c631daSSadaf Ebrahimi         VIXL_ABORT();
150*f5c631daSSadaf Ebrahimi       }
151*f5c631daSSadaf Ebrahimi     }
Down()152*f5c631daSSadaf Ebrahimi     void Down() {
153*f5c631daSSadaf Ebrahimi       VIXL_ASSERT((count_ > 0) && (count_ < kMaxRecursion));
154*f5c631daSSadaf Ebrahimi       count_--;
155*f5c631daSSadaf Ebrahimi     }
156*f5c631daSSadaf Ebrahimi 
157*f5c631daSSadaf Ebrahimi    private:
158*f5c631daSSadaf Ebrahimi     unsigned count_;
159*f5c631daSSadaf Ebrahimi     static const uint32_t kMaxRecursion = 6;
160*f5c631daSSadaf Ebrahimi     const char* location_stack_[kMaxRecursion];
161*f5c631daSSadaf Ebrahimi   };
162*f5c631daSSadaf Ebrahimi 
163*f5c631daSSadaf Ebrahimi   // This scope is used at each Delegate entry to avoid infinite recursion of
164*f5c631daSSadaf Ebrahimi   // Delegate calls. The limit is defined by
165*f5c631daSSadaf Ebrahimi   // MacroAssemblerContext::kMaxRecursion.
166*f5c631daSSadaf Ebrahimi   class ContextScope {
167*f5c631daSSadaf Ebrahimi    public:
ContextScope(MacroAssembler * const masm,const char * loc)168*f5c631daSSadaf Ebrahimi     explicit ContextScope(MacroAssembler* const masm, const char* loc)
169*f5c631daSSadaf Ebrahimi         : masm_(masm) {
170*f5c631daSSadaf Ebrahimi       VIXL_ASSERT(masm_->AllowMacroInstructions());
171*f5c631daSSadaf Ebrahimi       masm_->GetContext()->Up(loc);
172*f5c631daSSadaf Ebrahimi     }
~ContextScope()173*f5c631daSSadaf Ebrahimi     ~ContextScope() { masm_->GetContext()->Down(); }
174*f5c631daSSadaf Ebrahimi 
175*f5c631daSSadaf Ebrahimi    private:
176*f5c631daSSadaf Ebrahimi     MacroAssembler* const masm_;
177*f5c631daSSadaf Ebrahimi   };
178*f5c631daSSadaf Ebrahimi 
GetContext()179*f5c631daSSadaf Ebrahimi   MacroAssemblerContext* GetContext() { return &context_; }
180*f5c631daSSadaf Ebrahimi 
181*f5c631daSSadaf Ebrahimi   class ITScope {
182*f5c631daSSadaf Ebrahimi    public:
183*f5c631daSSadaf Ebrahimi     ITScope(MacroAssembler* masm,
184*f5c631daSSadaf Ebrahimi             Condition* cond,
185*f5c631daSSadaf Ebrahimi             const MacroEmissionCheckScope& scope,
186*f5c631daSSadaf Ebrahimi             bool can_use_it = false)
masm_(masm)187*f5c631daSSadaf Ebrahimi         : masm_(masm), cond_(*cond), can_use_it_(can_use_it) {
188*f5c631daSSadaf Ebrahimi       // The 'scope' argument is used to remind us to only use this scope inside
189*f5c631daSSadaf Ebrahimi       // a MacroEmissionCheckScope. This way, we do not need to check whether
190*f5c631daSSadaf Ebrahimi       // we need to emit the pools or grow the code buffer when emitting the
191*f5c631daSSadaf Ebrahimi       // IT or B instructions.
192*f5c631daSSadaf Ebrahimi       USE(scope);
193*f5c631daSSadaf Ebrahimi       if (!cond_.Is(al) && masm->IsUsingT32()) {
194*f5c631daSSadaf Ebrahimi         if (can_use_it_) {
195*f5c631daSSadaf Ebrahimi           // IT is not deprecated (that implies a 16 bit T32 instruction).
196*f5c631daSSadaf Ebrahimi           // We generate an IT instruction and a conditional instruction.
197*f5c631daSSadaf Ebrahimi           masm->it(cond_);
198*f5c631daSSadaf Ebrahimi         } else {
199*f5c631daSSadaf Ebrahimi           // The usage of IT is deprecated for the instruction.
200*f5c631daSSadaf Ebrahimi           // We generate a conditional branch and an unconditional instruction.
201*f5c631daSSadaf Ebrahimi           // Generate the branch.
202*f5c631daSSadaf Ebrahimi           masm_->b(cond_.Negate(), Narrow, &label_);
203*f5c631daSSadaf Ebrahimi           // Tell the macro-assembler to generate unconditional instructions.
204*f5c631daSSadaf Ebrahimi           *cond = al;
205*f5c631daSSadaf Ebrahimi         }
206*f5c631daSSadaf Ebrahimi       }
207*f5c631daSSadaf Ebrahimi #ifdef VIXL_DEBUG
208*f5c631daSSadaf Ebrahimi       initial_cursor_offset_ = masm->GetCursorOffset();
209*f5c631daSSadaf Ebrahimi #else
210*f5c631daSSadaf Ebrahimi       USE(initial_cursor_offset_);
211*f5c631daSSadaf Ebrahimi #endif
212*f5c631daSSadaf Ebrahimi     }
~ITScope()213*f5c631daSSadaf Ebrahimi     ~ITScope() {
214*f5c631daSSadaf Ebrahimi       if (label_.IsReferenced()) {
215*f5c631daSSadaf Ebrahimi         // We only use the label for conditional T32 instructions for which we
216*f5c631daSSadaf Ebrahimi         // cannot use IT.
217*f5c631daSSadaf Ebrahimi         VIXL_ASSERT(!cond_.Is(al));
218*f5c631daSSadaf Ebrahimi         VIXL_ASSERT(masm_->IsUsingT32());
219*f5c631daSSadaf Ebrahimi         VIXL_ASSERT(!can_use_it_);
220*f5c631daSSadaf Ebrahimi         VIXL_ASSERT(masm_->GetCursorOffset() - initial_cursor_offset_ <=
221*f5c631daSSadaf Ebrahimi                     kMaxT32MacroInstructionSizeInBytes);
222*f5c631daSSadaf Ebrahimi         masm_->BindHelper(&label_);
223*f5c631daSSadaf Ebrahimi       } else if (masm_->IsUsingT32() && !cond_.Is(al)) {
224*f5c631daSSadaf Ebrahimi         // If we've generated a conditional T32 instruction but haven't used the
225*f5c631daSSadaf Ebrahimi         // label, we must have used IT. Check that we did not generate a
226*f5c631daSSadaf Ebrahimi         // deprecated sequence.
227*f5c631daSSadaf Ebrahimi         VIXL_ASSERT(can_use_it_);
228*f5c631daSSadaf Ebrahimi         VIXL_ASSERT(masm_->GetCursorOffset() - initial_cursor_offset_ <=
229*f5c631daSSadaf Ebrahimi                     k16BitT32InstructionSizeInBytes);
230*f5c631daSSadaf Ebrahimi       }
231*f5c631daSSadaf Ebrahimi     }
232*f5c631daSSadaf Ebrahimi 
233*f5c631daSSadaf Ebrahimi    private:
234*f5c631daSSadaf Ebrahimi     MacroAssembler* masm_;
235*f5c631daSSadaf Ebrahimi     Condition cond_;
236*f5c631daSSadaf Ebrahimi     Label label_;
237*f5c631daSSadaf Ebrahimi     bool can_use_it_;
238*f5c631daSSadaf Ebrahimi     uint32_t initial_cursor_offset_;
239*f5c631daSSadaf Ebrahimi   };
240*f5c631daSSadaf Ebrahimi 
241*f5c631daSSadaf Ebrahimi  protected:
BlockPools()242*f5c631daSSadaf Ebrahimi   virtual void BlockPools() VIXL_OVERRIDE { pool_manager_.Block(); }
ReleasePools()243*f5c631daSSadaf Ebrahimi   virtual void ReleasePools() VIXL_OVERRIDE {
244*f5c631daSSadaf Ebrahimi     pool_manager_.Release(GetCursorOffset());
245*f5c631daSSadaf Ebrahimi   }
246*f5c631daSSadaf Ebrahimi   virtual void EnsureEmitPoolsFor(size_t size) VIXL_OVERRIDE;
247*f5c631daSSadaf Ebrahimi 
248*f5c631daSSadaf Ebrahimi   // Tell whether any of the macro instruction can be used. When false the
249*f5c631daSSadaf Ebrahimi   // MacroAssembler will assert if a method which can emit a variable number
250*f5c631daSSadaf Ebrahimi   // of instructions is called.
SetAllowMacroInstructions(bool value)251*f5c631daSSadaf Ebrahimi   virtual void SetAllowMacroInstructions(bool value) VIXL_OVERRIDE {
252*f5c631daSSadaf Ebrahimi     allow_macro_instructions_ = value;
253*f5c631daSSadaf Ebrahimi   }
254*f5c631daSSadaf Ebrahimi 
255*f5c631daSSadaf Ebrahimi   void HandleOutOfBoundsImmediate(Condition cond, Register tmp, uint32_t imm);
256*f5c631daSSadaf Ebrahimi 
257*f5c631daSSadaf Ebrahimi  public:
258*f5c631daSSadaf Ebrahimi   // TODO: If we change the MacroAssembler to disallow setting a different ISA,
259*f5c631daSSadaf Ebrahimi   // we can change the alignment of the pool in the pool manager constructor to
260*f5c631daSSadaf Ebrahimi   // be 2 bytes for T32.
261*f5c631daSSadaf Ebrahimi   explicit MacroAssembler(InstructionSet isa = kDefaultISA)
Assembler(isa)262*f5c631daSSadaf Ebrahimi       : Assembler(isa),
263*f5c631daSSadaf Ebrahimi         available_(r12),
264*f5c631daSSadaf Ebrahimi         current_scratch_scope_(NULL),
265*f5c631daSSadaf Ebrahimi         pool_manager_(4 /*header_size*/,
266*f5c631daSSadaf Ebrahimi                       4 /*alignment*/,
267*f5c631daSSadaf Ebrahimi                       4 /*buffer_alignment*/),
268*f5c631daSSadaf Ebrahimi         generate_simulator_code_(VIXL_AARCH32_GENERATE_SIMULATOR_CODE),
269*f5c631daSSadaf Ebrahimi         pool_end_(NULL) {
270*f5c631daSSadaf Ebrahimi #ifdef VIXL_DEBUG
271*f5c631daSSadaf Ebrahimi     SetAllowMacroInstructions(  // NOLINT(clang-analyzer-optin.cplusplus.VirtualCall)
272*f5c631daSSadaf Ebrahimi         true);
273*f5c631daSSadaf Ebrahimi #else
274*f5c631daSSadaf Ebrahimi     USE(allow_macro_instructions_);
275*f5c631daSSadaf Ebrahimi #endif
276*f5c631daSSadaf Ebrahimi   }
277*f5c631daSSadaf Ebrahimi   explicit MacroAssembler(size_t size, InstructionSet isa = kDefaultISA)
Assembler(size,isa)278*f5c631daSSadaf Ebrahimi       : Assembler(size, isa),
279*f5c631daSSadaf Ebrahimi         available_(r12),
280*f5c631daSSadaf Ebrahimi         current_scratch_scope_(NULL),
281*f5c631daSSadaf Ebrahimi         pool_manager_(4 /*header_size*/,
282*f5c631daSSadaf Ebrahimi                       4 /*alignment*/,
283*f5c631daSSadaf Ebrahimi                       4 /*buffer_alignment*/),
284*f5c631daSSadaf Ebrahimi         generate_simulator_code_(VIXL_AARCH32_GENERATE_SIMULATOR_CODE),
285*f5c631daSSadaf Ebrahimi         pool_end_(NULL) {
286*f5c631daSSadaf Ebrahimi #ifdef VIXL_DEBUG
287*f5c631daSSadaf Ebrahimi     SetAllowMacroInstructions(  // NOLINT(clang-analyzer-optin.cplusplus.VirtualCall)
288*f5c631daSSadaf Ebrahimi         true);
289*f5c631daSSadaf Ebrahimi #endif
290*f5c631daSSadaf Ebrahimi   }
291*f5c631daSSadaf Ebrahimi   MacroAssembler(byte* buffer, size_t size, InstructionSet isa = kDefaultISA)
Assembler(buffer,size,isa)292*f5c631daSSadaf Ebrahimi       : Assembler(buffer, size, isa),
293*f5c631daSSadaf Ebrahimi         available_(r12),
294*f5c631daSSadaf Ebrahimi         current_scratch_scope_(NULL),
295*f5c631daSSadaf Ebrahimi         pool_manager_(4 /*header_size*/,
296*f5c631daSSadaf Ebrahimi                       4 /*alignment*/,
297*f5c631daSSadaf Ebrahimi                       4 /*buffer_alignment*/),
298*f5c631daSSadaf Ebrahimi         generate_simulator_code_(VIXL_AARCH32_GENERATE_SIMULATOR_CODE),
299*f5c631daSSadaf Ebrahimi         pool_end_(NULL) {
300*f5c631daSSadaf Ebrahimi #ifdef VIXL_DEBUG
301*f5c631daSSadaf Ebrahimi     SetAllowMacroInstructions(  // NOLINT(clang-analyzer-optin.cplusplus.VirtualCall)
302*f5c631daSSadaf Ebrahimi         true);
303*f5c631daSSadaf Ebrahimi #endif
304*f5c631daSSadaf Ebrahimi   }
305*f5c631daSSadaf Ebrahimi 
GenerateSimulatorCode()306*f5c631daSSadaf Ebrahimi   bool GenerateSimulatorCode() const { return generate_simulator_code_; }
307*f5c631daSSadaf Ebrahimi 
AllowMacroInstructions()308*f5c631daSSadaf Ebrahimi   virtual bool AllowMacroInstructions() const VIXL_OVERRIDE {
309*f5c631daSSadaf Ebrahimi     return allow_macro_instructions_;
310*f5c631daSSadaf Ebrahimi   }
311*f5c631daSSadaf Ebrahimi 
312*f5c631daSSadaf Ebrahimi   void FinalizeCode(FinalizeOption option = kUnreachable) {
313*f5c631daSSadaf Ebrahimi     EmitLiteralPool(option == kUnreachable
314*f5c631daSSadaf Ebrahimi                         ? PoolManager<int32_t>::kNoBranchRequired
315*f5c631daSSadaf Ebrahimi                         : PoolManager<int32_t>::kBranchRequired);
316*f5c631daSSadaf Ebrahimi     Assembler::FinalizeCode();
317*f5c631daSSadaf Ebrahimi   }
318*f5c631daSSadaf Ebrahimi 
GetScratchRegisterList()319*f5c631daSSadaf Ebrahimi   RegisterList* GetScratchRegisterList() { return &available_; }
GetScratchVRegisterList()320*f5c631daSSadaf Ebrahimi   VRegisterList* GetScratchVRegisterList() { return &available_vfp_; }
321*f5c631daSSadaf Ebrahimi 
322*f5c631daSSadaf Ebrahimi   // Get or set the current (most-deeply-nested) UseScratchRegisterScope.
SetCurrentScratchRegisterScope(UseScratchRegisterScope * scope)323*f5c631daSSadaf Ebrahimi   void SetCurrentScratchRegisterScope(UseScratchRegisterScope* scope) {
324*f5c631daSSadaf Ebrahimi     current_scratch_scope_ = scope;
325*f5c631daSSadaf Ebrahimi   }
GetCurrentScratchRegisterScope()326*f5c631daSSadaf Ebrahimi   UseScratchRegisterScope* GetCurrentScratchRegisterScope() {
327*f5c631daSSadaf Ebrahimi     return current_scratch_scope_;
328*f5c631daSSadaf Ebrahimi   }
329*f5c631daSSadaf Ebrahimi 
330*f5c631daSSadaf Ebrahimi   // Given an address calculation (Register + immediate), generate code to
331*f5c631daSSadaf Ebrahimi   // partially compute the address. The returned MemOperand will perform any
332*f5c631daSSadaf Ebrahimi   // remaining computation in a subsequent load or store instruction.
333*f5c631daSSadaf Ebrahimi   //
334*f5c631daSSadaf Ebrahimi   // The offset provided should be the offset that would be used in a load or
335*f5c631daSSadaf Ebrahimi   // store instruction (if it had sufficient range). This only matters where
336*f5c631daSSadaf Ebrahimi   // base.Is(pc), since load and store instructions align the pc before
337*f5c631daSSadaf Ebrahimi   // dereferencing it.
338*f5c631daSSadaf Ebrahimi   //
339*f5c631daSSadaf Ebrahimi   // TODO: Improve the handling of negative offsets. They are not implemented
340*f5c631daSSadaf Ebrahimi   // precisely for now because they only have a marginal benefit for the
341*f5c631daSSadaf Ebrahimi   // existing uses (in delegates).
342*f5c631daSSadaf Ebrahimi   MemOperand MemOperandComputationHelper(Condition cond,
343*f5c631daSSadaf Ebrahimi                                          Register scratch,
344*f5c631daSSadaf Ebrahimi                                          Register base,
345*f5c631daSSadaf Ebrahimi                                          uint32_t offset,
346*f5c631daSSadaf Ebrahimi                                          uint32_t extra_offset_mask = 0);
347*f5c631daSSadaf Ebrahimi 
348*f5c631daSSadaf Ebrahimi   MemOperand MemOperandComputationHelper(Register scratch,
349*f5c631daSSadaf Ebrahimi                                          Register base,
350*f5c631daSSadaf Ebrahimi                                          uint32_t offset,
351*f5c631daSSadaf Ebrahimi                                          uint32_t extra_offset_mask = 0) {
352*f5c631daSSadaf Ebrahimi     return MemOperandComputationHelper(al,
353*f5c631daSSadaf Ebrahimi                                        scratch,
354*f5c631daSSadaf Ebrahimi                                        base,
355*f5c631daSSadaf Ebrahimi                                        offset,
356*f5c631daSSadaf Ebrahimi                                        extra_offset_mask);
357*f5c631daSSadaf Ebrahimi   }
358*f5c631daSSadaf Ebrahimi   MemOperand MemOperandComputationHelper(Condition cond,
359*f5c631daSSadaf Ebrahimi                                          Register scratch,
360*f5c631daSSadaf Ebrahimi                                          Location* location,
361*f5c631daSSadaf Ebrahimi                                          uint32_t extra_offset_mask = 0) {
362*f5c631daSSadaf Ebrahimi     // Check for buffer space _before_ calculating the offset, in case we
363*f5c631daSSadaf Ebrahimi     // generate a pool that affects the offset calculation.
364*f5c631daSSadaf Ebrahimi     CodeBufferCheckScope scope(this, 4 * kMaxInstructionSizeInBytes);
365*f5c631daSSadaf Ebrahimi     Label::Offset offset =
366*f5c631daSSadaf Ebrahimi         location->GetLocation() -
367*f5c631daSSadaf Ebrahimi         AlignDown(GetCursorOffset() + GetArchitectureStatePCOffset(), 4);
368*f5c631daSSadaf Ebrahimi     return MemOperandComputationHelper(cond,
369*f5c631daSSadaf Ebrahimi                                        scratch,
370*f5c631daSSadaf Ebrahimi                                        pc,
371*f5c631daSSadaf Ebrahimi                                        offset,
372*f5c631daSSadaf Ebrahimi                                        extra_offset_mask);
373*f5c631daSSadaf Ebrahimi   }
374*f5c631daSSadaf Ebrahimi   MemOperand MemOperandComputationHelper(Register scratch,
375*f5c631daSSadaf Ebrahimi                                          Location* location,
376*f5c631daSSadaf Ebrahimi                                          uint32_t extra_offset_mask = 0) {
377*f5c631daSSadaf Ebrahimi     return MemOperandComputationHelper(al,
378*f5c631daSSadaf Ebrahimi                                        scratch,
379*f5c631daSSadaf Ebrahimi                                        location,
380*f5c631daSSadaf Ebrahimi                                        extra_offset_mask);
381*f5c631daSSadaf Ebrahimi   }
382*f5c631daSSadaf Ebrahimi 
383*f5c631daSSadaf Ebrahimi   // Determine the appropriate mask to pass into MemOperandComputationHelper.
384*f5c631daSSadaf Ebrahimi   uint32_t GetOffsetMask(InstructionType type, AddrMode addrmode);
385*f5c631daSSadaf Ebrahimi 
386*f5c631daSSadaf Ebrahimi   // State and type helpers.
IsModifiedImmediate(uint32_t imm)387*f5c631daSSadaf Ebrahimi   bool IsModifiedImmediate(uint32_t imm) {
388*f5c631daSSadaf Ebrahimi     return IsUsingT32() ? ImmediateT32::IsImmediateT32(imm)
389*f5c631daSSadaf Ebrahimi                         : ImmediateA32::IsImmediateA32(imm);
390*f5c631daSSadaf Ebrahimi   }
391*f5c631daSSadaf Ebrahimi 
Bind(Label * label)392*f5c631daSSadaf Ebrahimi   void Bind(Label* label) {
393*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
394*f5c631daSSadaf Ebrahimi     BindHelper(label);
395*f5c631daSSadaf Ebrahimi   }
396*f5c631daSSadaf Ebrahimi 
BindHelper(Label * label)397*f5c631daSSadaf Ebrahimi   virtual void BindHelper(Label* label) VIXL_OVERRIDE {
398*f5c631daSSadaf Ebrahimi     // Assert that we have the correct buffer alignment.
399*f5c631daSSadaf Ebrahimi     if (IsUsingT32()) {
400*f5c631daSSadaf Ebrahimi       VIXL_ASSERT(GetBuffer()->Is16bitAligned());
401*f5c631daSSadaf Ebrahimi     } else {
402*f5c631daSSadaf Ebrahimi       VIXL_ASSERT(GetBuffer()->Is32bitAligned());
403*f5c631daSSadaf Ebrahimi     }
404*f5c631daSSadaf Ebrahimi     // If we need to add padding, check if we have to emit the pool.
405*f5c631daSSadaf Ebrahimi     const int32_t cursor = GetCursorOffset();
406*f5c631daSSadaf Ebrahimi     if (label->Needs16BitPadding(cursor)) {
407*f5c631daSSadaf Ebrahimi       const int kPaddingBytes = 2;
408*f5c631daSSadaf Ebrahimi       if (pool_manager_.MustEmit(cursor, kPaddingBytes)) {
409*f5c631daSSadaf Ebrahimi         int32_t new_cursor = pool_manager_.Emit(this, cursor, kPaddingBytes);
410*f5c631daSSadaf Ebrahimi         USE(new_cursor);
411*f5c631daSSadaf Ebrahimi         VIXL_ASSERT(new_cursor == GetCursorOffset());
412*f5c631daSSadaf Ebrahimi       }
413*f5c631daSSadaf Ebrahimi     }
414*f5c631daSSadaf Ebrahimi     pool_manager_.Bind(this, label, GetCursorOffset());
415*f5c631daSSadaf Ebrahimi   }
416*f5c631daSSadaf Ebrahimi 
RegisterLiteralReference(RawLiteral * literal)417*f5c631daSSadaf Ebrahimi   void RegisterLiteralReference(RawLiteral* literal) {
418*f5c631daSSadaf Ebrahimi     if (literal->IsManuallyPlaced()) return;
419*f5c631daSSadaf Ebrahimi     RegisterForwardReference(literal);
420*f5c631daSSadaf Ebrahimi   }
421*f5c631daSSadaf Ebrahimi 
RegisterForwardReference(Location * location)422*f5c631daSSadaf Ebrahimi   void RegisterForwardReference(Location* location) {
423*f5c631daSSadaf Ebrahimi     if (location->IsBound()) return;
424*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(location->HasForwardReferences());
425*f5c631daSSadaf Ebrahimi     const Location::ForwardRef& reference = location->GetLastForwardReference();
426*f5c631daSSadaf Ebrahimi     pool_manager_.AddObjectReference(&reference, location);
427*f5c631daSSadaf Ebrahimi   }
428*f5c631daSSadaf Ebrahimi 
429*f5c631daSSadaf Ebrahimi   void CheckEmitPoolForInstruction(const ReferenceInfo* info,
430*f5c631daSSadaf Ebrahimi                                    Location* location,
431*f5c631daSSadaf Ebrahimi                                    Condition* cond = NULL) {
432*f5c631daSSadaf Ebrahimi     int size = info->size;
433*f5c631daSSadaf Ebrahimi     int32_t cursor = GetCursorOffset();
434*f5c631daSSadaf Ebrahimi     // If we need to emit a branch over the instruction, take this into account.
435*f5c631daSSadaf Ebrahimi     if ((cond != NULL) && NeedBranch(cond)) {
436*f5c631daSSadaf Ebrahimi       size += kBranchSize;
437*f5c631daSSadaf Ebrahimi       cursor += kBranchSize;
438*f5c631daSSadaf Ebrahimi     }
439*f5c631daSSadaf Ebrahimi     int32_t from = cursor;
440*f5c631daSSadaf Ebrahimi     from += IsUsingT32() ? kT32PcDelta : kA32PcDelta;
441*f5c631daSSadaf Ebrahimi     if (info->pc_needs_aligning) from = AlignDown(from, 4);
442*f5c631daSSadaf Ebrahimi     int32_t min = from + info->min_offset;
443*f5c631daSSadaf Ebrahimi     int32_t max = from + info->max_offset;
444*f5c631daSSadaf Ebrahimi     ForwardReference<int32_t> temp_ref(cursor,
445*f5c631daSSadaf Ebrahimi                                        info->size,
446*f5c631daSSadaf Ebrahimi                                        min,
447*f5c631daSSadaf Ebrahimi                                        max,
448*f5c631daSSadaf Ebrahimi                                        info->alignment);
449*f5c631daSSadaf Ebrahimi     if (pool_manager_.MustEmit(GetCursorOffset(), size, &temp_ref, location)) {
450*f5c631daSSadaf Ebrahimi       int32_t new_cursor = pool_manager_.Emit(this,
451*f5c631daSSadaf Ebrahimi                                               GetCursorOffset(),
452*f5c631daSSadaf Ebrahimi                                               info->size,
453*f5c631daSSadaf Ebrahimi                                               &temp_ref,
454*f5c631daSSadaf Ebrahimi                                               location);
455*f5c631daSSadaf Ebrahimi       USE(new_cursor);
456*f5c631daSSadaf Ebrahimi       VIXL_ASSERT(new_cursor == GetCursorOffset());
457*f5c631daSSadaf Ebrahimi     }
458*f5c631daSSadaf Ebrahimi   }
459*f5c631daSSadaf Ebrahimi 
Place(RawLiteral * literal)460*f5c631daSSadaf Ebrahimi   void Place(RawLiteral* literal) {
461*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
462*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(literal->IsManuallyPlaced());
463*f5c631daSSadaf Ebrahimi     // Check if we need to emit the pools. Take the alignment of the literal
464*f5c631daSSadaf Ebrahimi     // into account, as well as potential 16-bit padding needed to reach the
465*f5c631daSSadaf Ebrahimi     // minimum accessible location.
466*f5c631daSSadaf Ebrahimi     int alignment = literal->GetMaxAlignment();
467*f5c631daSSadaf Ebrahimi     int32_t cursor = GetCursorOffset();
468*f5c631daSSadaf Ebrahimi     int total_size = AlignUp(cursor, alignment) - cursor + literal->GetSize();
469*f5c631daSSadaf Ebrahimi     if (literal->Needs16BitPadding(cursor)) total_size += 2;
470*f5c631daSSadaf Ebrahimi     if (pool_manager_.MustEmit(cursor, total_size)) {
471*f5c631daSSadaf Ebrahimi       int32_t new_cursor = pool_manager_.Emit(this, cursor, total_size);
472*f5c631daSSadaf Ebrahimi       USE(new_cursor);
473*f5c631daSSadaf Ebrahimi       VIXL_ASSERT(new_cursor == GetCursorOffset());
474*f5c631daSSadaf Ebrahimi     }
475*f5c631daSSadaf Ebrahimi     pool_manager_.Bind(this, literal, GetCursorOffset());
476*f5c631daSSadaf Ebrahimi     literal->EmitPoolObject(this);
477*f5c631daSSadaf Ebrahimi     // Align the buffer, to be ready to generate instructions right after
478*f5c631daSSadaf Ebrahimi     // this.
479*f5c631daSSadaf Ebrahimi     GetBuffer()->Align();
480*f5c631daSSadaf Ebrahimi   }
481*f5c631daSSadaf Ebrahimi 
482*f5c631daSSadaf Ebrahimi   void EmitLiteralPool(PoolManager<int32_t>::EmitOption option =
483*f5c631daSSadaf Ebrahimi                            PoolManager<int32_t>::kBranchRequired) {
484*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!ArePoolsBlocked());
485*f5c631daSSadaf Ebrahimi     int32_t new_pc =
486*f5c631daSSadaf Ebrahimi         pool_manager_.Emit(this, GetCursorOffset(), 0, NULL, NULL, option);
487*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(new_pc == GetCursorOffset());
488*f5c631daSSadaf Ebrahimi     USE(new_pc);
489*f5c631daSSadaf Ebrahimi   }
490*f5c631daSSadaf Ebrahimi 
EnsureEmitFor(uint32_t size)491*f5c631daSSadaf Ebrahimi   void EnsureEmitFor(uint32_t size) {
492*f5c631daSSadaf Ebrahimi     EnsureEmitPoolsFor(size);
493*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(GetBuffer()->HasSpaceFor(size) || GetBuffer()->IsManaged());
494*f5c631daSSadaf Ebrahimi     GetBuffer()->EnsureSpaceFor(size);
495*f5c631daSSadaf Ebrahimi   }
496*f5c631daSSadaf Ebrahimi 
AliasesAvailableScratchRegister(Register reg)497*f5c631daSSadaf Ebrahimi   bool AliasesAvailableScratchRegister(Register reg) {
498*f5c631daSSadaf Ebrahimi     return GetScratchRegisterList()->Includes(reg);
499*f5c631daSSadaf Ebrahimi   }
500*f5c631daSSadaf Ebrahimi 
AliasesAvailableScratchRegister(RegisterOrAPSR_nzcv reg)501*f5c631daSSadaf Ebrahimi   bool AliasesAvailableScratchRegister(RegisterOrAPSR_nzcv reg) {
502*f5c631daSSadaf Ebrahimi     if (reg.IsAPSR_nzcv()) return false;
503*f5c631daSSadaf Ebrahimi     return GetScratchRegisterList()->Includes(reg.AsRegister());
504*f5c631daSSadaf Ebrahimi   }
505*f5c631daSSadaf Ebrahimi 
AliasesAvailableScratchRegister(VRegister reg)506*f5c631daSSadaf Ebrahimi   bool AliasesAvailableScratchRegister(VRegister reg) {
507*f5c631daSSadaf Ebrahimi     return GetScratchVRegisterList()->IncludesAliasOf(reg);
508*f5c631daSSadaf Ebrahimi   }
509*f5c631daSSadaf Ebrahimi 
AliasesAvailableScratchRegister(const Operand & operand)510*f5c631daSSadaf Ebrahimi   bool AliasesAvailableScratchRegister(const Operand& operand) {
511*f5c631daSSadaf Ebrahimi     if (operand.IsImmediate()) return false;
512*f5c631daSSadaf Ebrahimi     return AliasesAvailableScratchRegister(operand.GetBaseRegister()) ||
513*f5c631daSSadaf Ebrahimi            (operand.IsRegisterShiftedRegister() &&
514*f5c631daSSadaf Ebrahimi             AliasesAvailableScratchRegister(operand.GetShiftRegister()));
515*f5c631daSSadaf Ebrahimi   }
516*f5c631daSSadaf Ebrahimi 
AliasesAvailableScratchRegister(const NeonOperand & operand)517*f5c631daSSadaf Ebrahimi   bool AliasesAvailableScratchRegister(const NeonOperand& operand) {
518*f5c631daSSadaf Ebrahimi     if (operand.IsImmediate()) return false;
519*f5c631daSSadaf Ebrahimi     return AliasesAvailableScratchRegister(operand.GetRegister());
520*f5c631daSSadaf Ebrahimi   }
521*f5c631daSSadaf Ebrahimi 
AliasesAvailableScratchRegister(SRegisterList list)522*f5c631daSSadaf Ebrahimi   bool AliasesAvailableScratchRegister(SRegisterList list) {
523*f5c631daSSadaf Ebrahimi     for (int n = 0; n < list.GetLength(); n++) {
524*f5c631daSSadaf Ebrahimi       if (AliasesAvailableScratchRegister(list.GetSRegister(n))) return true;
525*f5c631daSSadaf Ebrahimi     }
526*f5c631daSSadaf Ebrahimi     return false;
527*f5c631daSSadaf Ebrahimi   }
528*f5c631daSSadaf Ebrahimi 
AliasesAvailableScratchRegister(DRegisterList list)529*f5c631daSSadaf Ebrahimi   bool AliasesAvailableScratchRegister(DRegisterList list) {
530*f5c631daSSadaf Ebrahimi     for (int n = 0; n < list.GetLength(); n++) {
531*f5c631daSSadaf Ebrahimi       if (AliasesAvailableScratchRegister(list.GetDRegister(n))) return true;
532*f5c631daSSadaf Ebrahimi     }
533*f5c631daSSadaf Ebrahimi     return false;
534*f5c631daSSadaf Ebrahimi   }
535*f5c631daSSadaf Ebrahimi 
AliasesAvailableScratchRegister(NeonRegisterList list)536*f5c631daSSadaf Ebrahimi   bool AliasesAvailableScratchRegister(NeonRegisterList list) {
537*f5c631daSSadaf Ebrahimi     for (int n = 0; n < list.GetLength(); n++) {
538*f5c631daSSadaf Ebrahimi       if (AliasesAvailableScratchRegister(list.GetDRegister(n))) return true;
539*f5c631daSSadaf Ebrahimi     }
540*f5c631daSSadaf Ebrahimi     return false;
541*f5c631daSSadaf Ebrahimi   }
542*f5c631daSSadaf Ebrahimi 
AliasesAvailableScratchRegister(RegisterList list)543*f5c631daSSadaf Ebrahimi   bool AliasesAvailableScratchRegister(RegisterList list) {
544*f5c631daSSadaf Ebrahimi     return GetScratchRegisterList()->Overlaps(list);
545*f5c631daSSadaf Ebrahimi   }
546*f5c631daSSadaf Ebrahimi 
AliasesAvailableScratchRegister(const MemOperand & operand)547*f5c631daSSadaf Ebrahimi   bool AliasesAvailableScratchRegister(const MemOperand& operand) {
548*f5c631daSSadaf Ebrahimi     return AliasesAvailableScratchRegister(operand.GetBaseRegister()) ||
549*f5c631daSSadaf Ebrahimi            (operand.IsShiftedRegister() &&
550*f5c631daSSadaf Ebrahimi             AliasesAvailableScratchRegister(operand.GetOffsetRegister()));
551*f5c631daSSadaf Ebrahimi   }
552*f5c631daSSadaf Ebrahimi 
553*f5c631daSSadaf Ebrahimi   // Adr with a literal already constructed. Add the literal to the pool if it
554*f5c631daSSadaf Ebrahimi   // is not already done.
Adr(Condition cond,Register rd,RawLiteral * literal)555*f5c631daSSadaf Ebrahimi   void Adr(Condition cond, Register rd, RawLiteral* literal) {
556*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
557*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
558*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
559*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope::PoolPolicy pool_policy =
560*f5c631daSSadaf Ebrahimi         MacroEmissionCheckScope::kBlockPools;
561*f5c631daSSadaf Ebrahimi     if (!literal->IsBound()) {
562*f5c631daSSadaf Ebrahimi       const ReferenceInfo* info;
563*f5c631daSSadaf Ebrahimi       bool can_encode = adr_info(cond, Best, rd, literal, &info);
564*f5c631daSSadaf Ebrahimi       VIXL_CHECK(can_encode);
565*f5c631daSSadaf Ebrahimi       CheckEmitPoolForInstruction(info, literal, &cond);
566*f5c631daSSadaf Ebrahimi       // We have already checked for pool emission.
567*f5c631daSSadaf Ebrahimi       pool_policy = MacroEmissionCheckScope::kIgnorePools;
568*f5c631daSSadaf Ebrahimi     }
569*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this, pool_policy);
570*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
571*f5c631daSSadaf Ebrahimi     adr(cond, Best, rd, literal);
572*f5c631daSSadaf Ebrahimi     RegisterLiteralReference(literal);
573*f5c631daSSadaf Ebrahimi   }
Adr(Register rd,RawLiteral * literal)574*f5c631daSSadaf Ebrahimi   void Adr(Register rd, RawLiteral* literal) { Adr(al, rd, literal); }
575*f5c631daSSadaf Ebrahimi 
576*f5c631daSSadaf Ebrahimi   // Loads with literals already constructed. Add the literal to the pool
577*f5c631daSSadaf Ebrahimi   // if it is not already done.
Ldr(Condition cond,Register rt,RawLiteral * literal)578*f5c631daSSadaf Ebrahimi   void Ldr(Condition cond, Register rt, RawLiteral* literal) {
579*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
580*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
581*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
582*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope::PoolPolicy pool_policy =
583*f5c631daSSadaf Ebrahimi         MacroEmissionCheckScope::kBlockPools;
584*f5c631daSSadaf Ebrahimi     if (!literal->IsBound()) {
585*f5c631daSSadaf Ebrahimi       const ReferenceInfo* info;
586*f5c631daSSadaf Ebrahimi       bool can_encode = ldr_info(cond, Best, rt, literal, &info);
587*f5c631daSSadaf Ebrahimi       VIXL_CHECK(can_encode);
588*f5c631daSSadaf Ebrahimi       CheckEmitPoolForInstruction(info, literal, &cond);
589*f5c631daSSadaf Ebrahimi       // We have already checked for pool emission.
590*f5c631daSSadaf Ebrahimi       pool_policy = MacroEmissionCheckScope::kIgnorePools;
591*f5c631daSSadaf Ebrahimi     }
592*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this, pool_policy);
593*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
594*f5c631daSSadaf Ebrahimi     ldr(cond, rt, literal);
595*f5c631daSSadaf Ebrahimi     RegisterLiteralReference(literal);
596*f5c631daSSadaf Ebrahimi   }
Ldr(Register rt,RawLiteral * literal)597*f5c631daSSadaf Ebrahimi   void Ldr(Register rt, RawLiteral* literal) { Ldr(al, rt, literal); }
598*f5c631daSSadaf Ebrahimi 
Ldrb(Condition cond,Register rt,RawLiteral * literal)599*f5c631daSSadaf Ebrahimi   void Ldrb(Condition cond, Register rt, RawLiteral* literal) {
600*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
601*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
602*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
603*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope::PoolPolicy pool_policy =
604*f5c631daSSadaf Ebrahimi         MacroEmissionCheckScope::kBlockPools;
605*f5c631daSSadaf Ebrahimi     if (!literal->IsBound()) {
606*f5c631daSSadaf Ebrahimi       const ReferenceInfo* info;
607*f5c631daSSadaf Ebrahimi       bool can_encode = ldrb_info(cond, rt, literal, &info);
608*f5c631daSSadaf Ebrahimi       VIXL_CHECK(can_encode);
609*f5c631daSSadaf Ebrahimi       CheckEmitPoolForInstruction(info, literal, &cond);
610*f5c631daSSadaf Ebrahimi       // We have already checked for pool emission.
611*f5c631daSSadaf Ebrahimi       pool_policy = MacroEmissionCheckScope::kIgnorePools;
612*f5c631daSSadaf Ebrahimi     }
613*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this, pool_policy);
614*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
615*f5c631daSSadaf Ebrahimi     ldrb(cond, rt, literal);
616*f5c631daSSadaf Ebrahimi     RegisterLiteralReference(literal);
617*f5c631daSSadaf Ebrahimi   }
Ldrb(Register rt,RawLiteral * literal)618*f5c631daSSadaf Ebrahimi   void Ldrb(Register rt, RawLiteral* literal) { Ldrb(al, rt, literal); }
619*f5c631daSSadaf Ebrahimi 
Ldrd(Condition cond,Register rt,Register rt2,RawLiteral * literal)620*f5c631daSSadaf Ebrahimi   void Ldrd(Condition cond, Register rt, Register rt2, RawLiteral* literal) {
621*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
622*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt2));
623*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
624*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
625*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope::PoolPolicy pool_policy =
626*f5c631daSSadaf Ebrahimi         MacroEmissionCheckScope::kBlockPools;
627*f5c631daSSadaf Ebrahimi     if (!literal->IsBound()) {
628*f5c631daSSadaf Ebrahimi       const ReferenceInfo* info;
629*f5c631daSSadaf Ebrahimi       bool can_encode = ldrd_info(cond, rt, rt2, literal, &info);
630*f5c631daSSadaf Ebrahimi       VIXL_CHECK(can_encode);
631*f5c631daSSadaf Ebrahimi       CheckEmitPoolForInstruction(info, literal, &cond);
632*f5c631daSSadaf Ebrahimi       // We have already checked for pool emission.
633*f5c631daSSadaf Ebrahimi       pool_policy = MacroEmissionCheckScope::kIgnorePools;
634*f5c631daSSadaf Ebrahimi     }
635*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this, pool_policy);
636*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
637*f5c631daSSadaf Ebrahimi     ldrd(cond, rt, rt2, literal);
638*f5c631daSSadaf Ebrahimi     RegisterLiteralReference(literal);
639*f5c631daSSadaf Ebrahimi   }
Ldrd(Register rt,Register rt2,RawLiteral * literal)640*f5c631daSSadaf Ebrahimi   void Ldrd(Register rt, Register rt2, RawLiteral* literal) {
641*f5c631daSSadaf Ebrahimi     Ldrd(al, rt, rt2, literal);
642*f5c631daSSadaf Ebrahimi   }
643*f5c631daSSadaf Ebrahimi 
Ldrh(Condition cond,Register rt,RawLiteral * literal)644*f5c631daSSadaf Ebrahimi   void Ldrh(Condition cond, Register rt, RawLiteral* literal) {
645*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
646*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
647*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
648*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope::PoolPolicy pool_policy =
649*f5c631daSSadaf Ebrahimi         MacroEmissionCheckScope::kBlockPools;
650*f5c631daSSadaf Ebrahimi     if (!literal->IsBound()) {
651*f5c631daSSadaf Ebrahimi       const ReferenceInfo* info;
652*f5c631daSSadaf Ebrahimi       bool can_encode = ldrh_info(cond, rt, literal, &info);
653*f5c631daSSadaf Ebrahimi       VIXL_CHECK(can_encode);
654*f5c631daSSadaf Ebrahimi       CheckEmitPoolForInstruction(info, literal, &cond);
655*f5c631daSSadaf Ebrahimi       // We have already checked for pool emission.
656*f5c631daSSadaf Ebrahimi       pool_policy = MacroEmissionCheckScope::kIgnorePools;
657*f5c631daSSadaf Ebrahimi     }
658*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this, pool_policy);
659*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
660*f5c631daSSadaf Ebrahimi     ldrh(cond, rt, literal);
661*f5c631daSSadaf Ebrahimi     RegisterLiteralReference(literal);
662*f5c631daSSadaf Ebrahimi   }
Ldrh(Register rt,RawLiteral * literal)663*f5c631daSSadaf Ebrahimi   void Ldrh(Register rt, RawLiteral* literal) { Ldrh(al, rt, literal); }
664*f5c631daSSadaf Ebrahimi 
Ldrsb(Condition cond,Register rt,RawLiteral * literal)665*f5c631daSSadaf Ebrahimi   void Ldrsb(Condition cond, Register rt, RawLiteral* literal) {
666*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
667*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
668*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
669*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope::PoolPolicy pool_policy =
670*f5c631daSSadaf Ebrahimi         MacroEmissionCheckScope::kBlockPools;
671*f5c631daSSadaf Ebrahimi     if (!literal->IsBound()) {
672*f5c631daSSadaf Ebrahimi       const ReferenceInfo* info;
673*f5c631daSSadaf Ebrahimi       bool can_encode = ldrsb_info(cond, rt, literal, &info);
674*f5c631daSSadaf Ebrahimi       VIXL_CHECK(can_encode);
675*f5c631daSSadaf Ebrahimi       CheckEmitPoolForInstruction(info, literal, &cond);
676*f5c631daSSadaf Ebrahimi       // We have already checked for pool emission.
677*f5c631daSSadaf Ebrahimi       pool_policy = MacroEmissionCheckScope::kIgnorePools;
678*f5c631daSSadaf Ebrahimi     }
679*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this, pool_policy);
680*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
681*f5c631daSSadaf Ebrahimi     ldrsb(cond, rt, literal);
682*f5c631daSSadaf Ebrahimi     RegisterLiteralReference(literal);
683*f5c631daSSadaf Ebrahimi   }
Ldrsb(Register rt,RawLiteral * literal)684*f5c631daSSadaf Ebrahimi   void Ldrsb(Register rt, RawLiteral* literal) { Ldrsb(al, rt, literal); }
685*f5c631daSSadaf Ebrahimi 
Ldrsh(Condition cond,Register rt,RawLiteral * literal)686*f5c631daSSadaf Ebrahimi   void Ldrsh(Condition cond, Register rt, RawLiteral* literal) {
687*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
688*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
689*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
690*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope::PoolPolicy pool_policy =
691*f5c631daSSadaf Ebrahimi         MacroEmissionCheckScope::kBlockPools;
692*f5c631daSSadaf Ebrahimi     if (!literal->IsBound()) {
693*f5c631daSSadaf Ebrahimi       const ReferenceInfo* info;
694*f5c631daSSadaf Ebrahimi       bool can_encode = ldrsh_info(cond, rt, literal, &info);
695*f5c631daSSadaf Ebrahimi       VIXL_CHECK(can_encode);
696*f5c631daSSadaf Ebrahimi       CheckEmitPoolForInstruction(info, literal, &cond);
697*f5c631daSSadaf Ebrahimi       // We have already checked for pool emission.
698*f5c631daSSadaf Ebrahimi       pool_policy = MacroEmissionCheckScope::kIgnorePools;
699*f5c631daSSadaf Ebrahimi     }
700*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this, pool_policy);
701*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
702*f5c631daSSadaf Ebrahimi     ldrsh(cond, rt, literal);
703*f5c631daSSadaf Ebrahimi     RegisterLiteralReference(literal);
704*f5c631daSSadaf Ebrahimi   }
Ldrsh(Register rt,RawLiteral * literal)705*f5c631daSSadaf Ebrahimi   void Ldrsh(Register rt, RawLiteral* literal) { Ldrsh(al, rt, literal); }
706*f5c631daSSadaf Ebrahimi 
Vldr(Condition cond,DataType dt,DRegister rd,RawLiteral * literal)707*f5c631daSSadaf Ebrahimi   void Vldr(Condition cond, DataType dt, DRegister rd, RawLiteral* literal) {
708*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
709*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
710*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
711*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope::PoolPolicy pool_policy =
712*f5c631daSSadaf Ebrahimi         MacroEmissionCheckScope::kBlockPools;
713*f5c631daSSadaf Ebrahimi     if (!literal->IsBound()) {
714*f5c631daSSadaf Ebrahimi       const ReferenceInfo* info;
715*f5c631daSSadaf Ebrahimi       bool can_encode = vldr_info(cond, dt, rd, literal, &info);
716*f5c631daSSadaf Ebrahimi       VIXL_CHECK(can_encode);
717*f5c631daSSadaf Ebrahimi       CheckEmitPoolForInstruction(info, literal, &cond);
718*f5c631daSSadaf Ebrahimi       // We have already checked for pool emission.
719*f5c631daSSadaf Ebrahimi       pool_policy = MacroEmissionCheckScope::kIgnorePools;
720*f5c631daSSadaf Ebrahimi     }
721*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this, pool_policy);
722*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
723*f5c631daSSadaf Ebrahimi     vldr(cond, dt, rd, literal);
724*f5c631daSSadaf Ebrahimi     RegisterLiteralReference(literal);
725*f5c631daSSadaf Ebrahimi   }
Vldr(DataType dt,DRegister rd,RawLiteral * literal)726*f5c631daSSadaf Ebrahimi   void Vldr(DataType dt, DRegister rd, RawLiteral* literal) {
727*f5c631daSSadaf Ebrahimi     Vldr(al, dt, rd, literal);
728*f5c631daSSadaf Ebrahimi   }
Vldr(Condition cond,DRegister rd,RawLiteral * literal)729*f5c631daSSadaf Ebrahimi   void Vldr(Condition cond, DRegister rd, RawLiteral* literal) {
730*f5c631daSSadaf Ebrahimi     Vldr(cond, Untyped64, rd, literal);
731*f5c631daSSadaf Ebrahimi   }
Vldr(DRegister rd,RawLiteral * literal)732*f5c631daSSadaf Ebrahimi   void Vldr(DRegister rd, RawLiteral* literal) {
733*f5c631daSSadaf Ebrahimi     Vldr(al, Untyped64, rd, literal);
734*f5c631daSSadaf Ebrahimi   }
735*f5c631daSSadaf Ebrahimi 
Vldr(Condition cond,DataType dt,SRegister rd,RawLiteral * literal)736*f5c631daSSadaf Ebrahimi   void Vldr(Condition cond, DataType dt, SRegister rd, RawLiteral* literal) {
737*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
738*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
739*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
740*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope::PoolPolicy pool_policy =
741*f5c631daSSadaf Ebrahimi         MacroEmissionCheckScope::kBlockPools;
742*f5c631daSSadaf Ebrahimi     if (!literal->IsBound()) {
743*f5c631daSSadaf Ebrahimi       const ReferenceInfo* info;
744*f5c631daSSadaf Ebrahimi       bool can_encode = vldr_info(cond, dt, rd, literal, &info);
745*f5c631daSSadaf Ebrahimi       VIXL_CHECK(can_encode);
746*f5c631daSSadaf Ebrahimi       CheckEmitPoolForInstruction(info, literal, &cond);
747*f5c631daSSadaf Ebrahimi       // We have already checked for pool emission.
748*f5c631daSSadaf Ebrahimi       pool_policy = MacroEmissionCheckScope::kIgnorePools;
749*f5c631daSSadaf Ebrahimi     }
750*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this, pool_policy);
751*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
752*f5c631daSSadaf Ebrahimi     vldr(cond, dt, rd, literal);
753*f5c631daSSadaf Ebrahimi     RegisterLiteralReference(literal);
754*f5c631daSSadaf Ebrahimi   }
Vldr(DataType dt,SRegister rd,RawLiteral * literal)755*f5c631daSSadaf Ebrahimi   void Vldr(DataType dt, SRegister rd, RawLiteral* literal) {
756*f5c631daSSadaf Ebrahimi     Vldr(al, dt, rd, literal);
757*f5c631daSSadaf Ebrahimi   }
Vldr(Condition cond,SRegister rd,RawLiteral * literal)758*f5c631daSSadaf Ebrahimi   void Vldr(Condition cond, SRegister rd, RawLiteral* literal) {
759*f5c631daSSadaf Ebrahimi     Vldr(cond, Untyped32, rd, literal);
760*f5c631daSSadaf Ebrahimi   }
Vldr(SRegister rd,RawLiteral * literal)761*f5c631daSSadaf Ebrahimi   void Vldr(SRegister rd, RawLiteral* literal) {
762*f5c631daSSadaf Ebrahimi     Vldr(al, Untyped32, rd, literal);
763*f5c631daSSadaf Ebrahimi   }
764*f5c631daSSadaf Ebrahimi 
765*f5c631daSSadaf Ebrahimi   // Generic Ldr(register, data)
Ldr(Condition cond,Register rt,uint32_t v)766*f5c631daSSadaf Ebrahimi   void Ldr(Condition cond, Register rt, uint32_t v) {
767*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
768*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
769*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
770*f5c631daSSadaf Ebrahimi     RawLiteral* literal =
771*f5c631daSSadaf Ebrahimi         new Literal<uint32_t>(v, RawLiteral::kDeletedOnPlacementByPool);
772*f5c631daSSadaf Ebrahimi     Ldr(cond, rt, literal);
773*f5c631daSSadaf Ebrahimi   }
774*f5c631daSSadaf Ebrahimi   template <typename T>
Ldr(Register rt,T v)775*f5c631daSSadaf Ebrahimi   void Ldr(Register rt, T v) {
776*f5c631daSSadaf Ebrahimi     Ldr(al, rt, v);
777*f5c631daSSadaf Ebrahimi   }
778*f5c631daSSadaf Ebrahimi 
779*f5c631daSSadaf Ebrahimi   // Generic Ldrd(rt, rt2, data)
Ldrd(Condition cond,Register rt,Register rt2,uint64_t v)780*f5c631daSSadaf Ebrahimi   void Ldrd(Condition cond, Register rt, Register rt2, uint64_t v) {
781*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
782*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt2));
783*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
784*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
785*f5c631daSSadaf Ebrahimi     RawLiteral* literal =
786*f5c631daSSadaf Ebrahimi         new Literal<uint64_t>(v, RawLiteral::kDeletedOnPlacementByPool);
787*f5c631daSSadaf Ebrahimi     Ldrd(cond, rt, rt2, literal);
788*f5c631daSSadaf Ebrahimi   }
789*f5c631daSSadaf Ebrahimi   template <typename T>
Ldrd(Register rt,Register rt2,T v)790*f5c631daSSadaf Ebrahimi   void Ldrd(Register rt, Register rt2, T v) {
791*f5c631daSSadaf Ebrahimi     Ldrd(al, rt, rt2, v);
792*f5c631daSSadaf Ebrahimi   }
793*f5c631daSSadaf Ebrahimi 
Vldr(Condition cond,SRegister rd,float v)794*f5c631daSSadaf Ebrahimi   void Vldr(Condition cond, SRegister rd, float v) {
795*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
796*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
797*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
798*f5c631daSSadaf Ebrahimi     RawLiteral* literal =
799*f5c631daSSadaf Ebrahimi         new Literal<float>(v, RawLiteral::kDeletedOnPlacementByPool);
800*f5c631daSSadaf Ebrahimi     Vldr(cond, rd, literal);
801*f5c631daSSadaf Ebrahimi   }
Vldr(SRegister rd,float v)802*f5c631daSSadaf Ebrahimi   void Vldr(SRegister rd, float v) { Vldr(al, rd, v); }
803*f5c631daSSadaf Ebrahimi 
Vldr(Condition cond,DRegister rd,double v)804*f5c631daSSadaf Ebrahimi   void Vldr(Condition cond, DRegister rd, double v) {
805*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
806*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
807*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
808*f5c631daSSadaf Ebrahimi     RawLiteral* literal =
809*f5c631daSSadaf Ebrahimi         new Literal<double>(v, RawLiteral::kDeletedOnPlacementByPool);
810*f5c631daSSadaf Ebrahimi     Vldr(cond, rd, literal);
811*f5c631daSSadaf Ebrahimi   }
Vldr(DRegister rd,double v)812*f5c631daSSadaf Ebrahimi   void Vldr(DRegister rd, double v) { Vldr(al, rd, v); }
813*f5c631daSSadaf Ebrahimi 
Vmov(Condition cond,DRegister rt,double v)814*f5c631daSSadaf Ebrahimi   void Vmov(Condition cond, DRegister rt, double v) { Vmov(cond, F64, rt, v); }
Vmov(DRegister rt,double v)815*f5c631daSSadaf Ebrahimi   void Vmov(DRegister rt, double v) { Vmov(al, F64, rt, v); }
Vmov(Condition cond,SRegister rt,float v)816*f5c631daSSadaf Ebrahimi   void Vmov(Condition cond, SRegister rt, float v) { Vmov(cond, F32, rt, v); }
Vmov(SRegister rt,float v)817*f5c631daSSadaf Ebrahimi   void Vmov(SRegister rt, float v) { Vmov(al, F32, rt, v); }
818*f5c631daSSadaf Ebrahimi 
819*f5c631daSSadaf Ebrahimi   // Claim memory on the stack.
820*f5c631daSSadaf Ebrahimi   // Note that the Claim, Drop, and Peek helpers below ensure that offsets used
821*f5c631daSSadaf Ebrahimi   // are multiples of 32 bits to help maintain 32-bit SP alignment.
822*f5c631daSSadaf Ebrahimi   // We could `Align{Up,Down}(size, 4)`, but that's potentially problematic:
823*f5c631daSSadaf Ebrahimi   //     Claim(3)
824*f5c631daSSadaf Ebrahimi   //     Claim(1)
825*f5c631daSSadaf Ebrahimi   //     Drop(4)
826*f5c631daSSadaf Ebrahimi   // would seem correct, when in fact:
827*f5c631daSSadaf Ebrahimi   //    Claim(3) -> sp = sp - 4
828*f5c631daSSadaf Ebrahimi   //    Claim(1) -> sp = sp - 4
829*f5c631daSSadaf Ebrahimi   //    Drop(4)  -> sp = sp + 4
830*f5c631daSSadaf Ebrahimi   //
Claim(int32_t size)831*f5c631daSSadaf Ebrahimi   void Claim(int32_t size) {
832*f5c631daSSadaf Ebrahimi     if (size == 0) return;
833*f5c631daSSadaf Ebrahimi     // The stack must be kept 32bit aligned.
834*f5c631daSSadaf Ebrahimi     VIXL_ASSERT((size > 0) && ((size % 4) == 0));
835*f5c631daSSadaf Ebrahimi     Sub(sp, sp, size);
836*f5c631daSSadaf Ebrahimi   }
837*f5c631daSSadaf Ebrahimi   // Release memory on the stack
Drop(int32_t size)838*f5c631daSSadaf Ebrahimi   void Drop(int32_t size) {
839*f5c631daSSadaf Ebrahimi     if (size == 0) return;
840*f5c631daSSadaf Ebrahimi     // The stack must be kept 32bit aligned.
841*f5c631daSSadaf Ebrahimi     VIXL_ASSERT((size > 0) && ((size % 4) == 0));
842*f5c631daSSadaf Ebrahimi     Add(sp, sp, size);
843*f5c631daSSadaf Ebrahimi   }
Peek(Register dst,int32_t offset)844*f5c631daSSadaf Ebrahimi   void Peek(Register dst, int32_t offset) {
845*f5c631daSSadaf Ebrahimi     VIXL_ASSERT((offset >= 0) && ((offset % 4) == 0));
846*f5c631daSSadaf Ebrahimi     Ldr(dst, MemOperand(sp, offset));
847*f5c631daSSadaf Ebrahimi   }
Poke(Register src,int32_t offset)848*f5c631daSSadaf Ebrahimi   void Poke(Register src, int32_t offset) {
849*f5c631daSSadaf Ebrahimi     VIXL_ASSERT((offset >= 0) && ((offset % 4) == 0));
850*f5c631daSSadaf Ebrahimi     Str(src, MemOperand(sp, offset));
851*f5c631daSSadaf Ebrahimi   }
852*f5c631daSSadaf Ebrahimi   void Printf(const char* format,
853*f5c631daSSadaf Ebrahimi               CPURegister reg1 = NoReg,
854*f5c631daSSadaf Ebrahimi               CPURegister reg2 = NoReg,
855*f5c631daSSadaf Ebrahimi               CPURegister reg3 = NoReg,
856*f5c631daSSadaf Ebrahimi               CPURegister reg4 = NoReg);
857*f5c631daSSadaf Ebrahimi   // Functions used by Printf for generation.
858*f5c631daSSadaf Ebrahimi   void PushRegister(CPURegister reg);
859*f5c631daSSadaf Ebrahimi   void PreparePrintfArgument(CPURegister reg,
860*f5c631daSSadaf Ebrahimi                              int* core_count,
861*f5c631daSSadaf Ebrahimi                              int* vfp_count,
862*f5c631daSSadaf Ebrahimi                              uint32_t* printf_type);
863*f5c631daSSadaf Ebrahimi   // Handlers for cases not handled by the assembler.
864*f5c631daSSadaf Ebrahimi   // ADD, MOVT, MOVW, SUB, SXTB16, TEQ, UXTB16
865*f5c631daSSadaf Ebrahimi   virtual void Delegate(InstructionType type,
866*f5c631daSSadaf Ebrahimi                         InstructionCondROp instruction,
867*f5c631daSSadaf Ebrahimi                         Condition cond,
868*f5c631daSSadaf Ebrahimi                         Register rn,
869*f5c631daSSadaf Ebrahimi                         const Operand& operand) VIXL_OVERRIDE;
870*f5c631daSSadaf Ebrahimi   // CMN, CMP, MOV, MOVS, MVN, MVNS, SXTB, SXTH, TST, UXTB, UXTH
871*f5c631daSSadaf Ebrahimi   virtual void Delegate(InstructionType type,
872*f5c631daSSadaf Ebrahimi                         InstructionCondSizeROp instruction,
873*f5c631daSSadaf Ebrahimi                         Condition cond,
874*f5c631daSSadaf Ebrahimi                         EncodingSize size,
875*f5c631daSSadaf Ebrahimi                         Register rn,
876*f5c631daSSadaf Ebrahimi                         const Operand& operand) VIXL_OVERRIDE;
877*f5c631daSSadaf Ebrahimi   // ADDW, ORN, ORNS, PKHBT, PKHTB, RSC, RSCS, SUBW, SXTAB, SXTAB16, SXTAH,
878*f5c631daSSadaf Ebrahimi   // UXTAB, UXTAB16, UXTAH
879*f5c631daSSadaf Ebrahimi   virtual void Delegate(InstructionType type,
880*f5c631daSSadaf Ebrahimi                         InstructionCondRROp instruction,
881*f5c631daSSadaf Ebrahimi                         Condition cond,
882*f5c631daSSadaf Ebrahimi                         Register rd,
883*f5c631daSSadaf Ebrahimi                         Register rn,
884*f5c631daSSadaf Ebrahimi                         const Operand& operand) VIXL_OVERRIDE;
885*f5c631daSSadaf Ebrahimi   // ADC, ADCS, ADD, ADDS, AND, ANDS, ASR, ASRS, BIC, BICS, EOR, EORS, LSL,
886*f5c631daSSadaf Ebrahimi   // LSLS, LSR, LSRS, ORR, ORRS, ROR, RORS, RSB, RSBS, SBC, SBCS, SUB, SUBS
887*f5c631daSSadaf Ebrahimi   virtual void Delegate(InstructionType type,
888*f5c631daSSadaf Ebrahimi                         InstructionCondSizeRL instruction,
889*f5c631daSSadaf Ebrahimi                         Condition cond,
890*f5c631daSSadaf Ebrahimi                         EncodingSize size,
891*f5c631daSSadaf Ebrahimi                         Register rd,
892*f5c631daSSadaf Ebrahimi                         Location* location) VIXL_OVERRIDE;
893*f5c631daSSadaf Ebrahimi   bool GenerateSplitInstruction(InstructionCondSizeRROp instruction,
894*f5c631daSSadaf Ebrahimi                                 Condition cond,
895*f5c631daSSadaf Ebrahimi                                 Register rd,
896*f5c631daSSadaf Ebrahimi                                 Register rn,
897*f5c631daSSadaf Ebrahimi                                 uint32_t imm,
898*f5c631daSSadaf Ebrahimi                                 uint32_t mask);
899*f5c631daSSadaf Ebrahimi   virtual void Delegate(InstructionType type,
900*f5c631daSSadaf Ebrahimi                         InstructionCondSizeRROp instruction,
901*f5c631daSSadaf Ebrahimi                         Condition cond,
902*f5c631daSSadaf Ebrahimi                         EncodingSize size,
903*f5c631daSSadaf Ebrahimi                         Register rd,
904*f5c631daSSadaf Ebrahimi                         Register rn,
905*f5c631daSSadaf Ebrahimi                         const Operand& operand) VIXL_OVERRIDE;
906*f5c631daSSadaf Ebrahimi   // CBNZ, CBZ
907*f5c631daSSadaf Ebrahimi   virtual void Delegate(InstructionType type,
908*f5c631daSSadaf Ebrahimi                         InstructionRL instruction,
909*f5c631daSSadaf Ebrahimi                         Register rn,
910*f5c631daSSadaf Ebrahimi                         Location* location) VIXL_OVERRIDE;
911*f5c631daSSadaf Ebrahimi   // VMOV
912*f5c631daSSadaf Ebrahimi   virtual void Delegate(InstructionType type,
913*f5c631daSSadaf Ebrahimi                         InstructionCondDtSSop instruction,
914*f5c631daSSadaf Ebrahimi                         Condition cond,
915*f5c631daSSadaf Ebrahimi                         DataType dt,
916*f5c631daSSadaf Ebrahimi                         SRegister rd,
917*f5c631daSSadaf Ebrahimi                         const SOperand& operand) VIXL_OVERRIDE;
918*f5c631daSSadaf Ebrahimi   // VMOV, VMVN
919*f5c631daSSadaf Ebrahimi   virtual void Delegate(InstructionType type,
920*f5c631daSSadaf Ebrahimi                         InstructionCondDtDDop instruction,
921*f5c631daSSadaf Ebrahimi                         Condition cond,
922*f5c631daSSadaf Ebrahimi                         DataType dt,
923*f5c631daSSadaf Ebrahimi                         DRegister rd,
924*f5c631daSSadaf Ebrahimi                         const DOperand& operand) VIXL_OVERRIDE;
925*f5c631daSSadaf Ebrahimi   // VMOV, VMVN
926*f5c631daSSadaf Ebrahimi   virtual void Delegate(InstructionType type,
927*f5c631daSSadaf Ebrahimi                         InstructionCondDtQQop instruction,
928*f5c631daSSadaf Ebrahimi                         Condition cond,
929*f5c631daSSadaf Ebrahimi                         DataType dt,
930*f5c631daSSadaf Ebrahimi                         QRegister rd,
931*f5c631daSSadaf Ebrahimi                         const QOperand& operand) VIXL_OVERRIDE;
932*f5c631daSSadaf Ebrahimi   // LDR, LDRB, LDRH, LDRSB, LDRSH, STR, STRB, STRH
933*f5c631daSSadaf Ebrahimi   virtual void Delegate(InstructionType type,
934*f5c631daSSadaf Ebrahimi                         InstructionCondSizeRMop instruction,
935*f5c631daSSadaf Ebrahimi                         Condition cond,
936*f5c631daSSadaf Ebrahimi                         EncodingSize size,
937*f5c631daSSadaf Ebrahimi                         Register rd,
938*f5c631daSSadaf Ebrahimi                         const MemOperand& operand) VIXL_OVERRIDE;
939*f5c631daSSadaf Ebrahimi   // LDAEXD, LDRD, LDREXD, STLEX, STLEXB, STLEXH, STRD, STREX, STREXB, STREXH
940*f5c631daSSadaf Ebrahimi   virtual void Delegate(InstructionType type,
941*f5c631daSSadaf Ebrahimi                         InstructionCondRL instruction,
942*f5c631daSSadaf Ebrahimi                         Condition cond,
943*f5c631daSSadaf Ebrahimi                         Register rt,
944*f5c631daSSadaf Ebrahimi                         Location* location) VIXL_OVERRIDE;
945*f5c631daSSadaf Ebrahimi   virtual void Delegate(InstructionType type,
946*f5c631daSSadaf Ebrahimi                         InstructionCondRRL instruction,
947*f5c631daSSadaf Ebrahimi                         Condition cond,
948*f5c631daSSadaf Ebrahimi                         Register rt,
949*f5c631daSSadaf Ebrahimi                         Register rt2,
950*f5c631daSSadaf Ebrahimi                         Location* location) VIXL_OVERRIDE;
951*f5c631daSSadaf Ebrahimi   virtual void Delegate(InstructionType type,
952*f5c631daSSadaf Ebrahimi                         InstructionCondRRMop instruction,
953*f5c631daSSadaf Ebrahimi                         Condition cond,
954*f5c631daSSadaf Ebrahimi                         Register rt,
955*f5c631daSSadaf Ebrahimi                         Register rt2,
956*f5c631daSSadaf Ebrahimi                         const MemOperand& operand) VIXL_OVERRIDE;
957*f5c631daSSadaf Ebrahimi   // VLDR, VSTR
958*f5c631daSSadaf Ebrahimi   virtual void Delegate(InstructionType type,
959*f5c631daSSadaf Ebrahimi                         InstructionCondDtSMop instruction,
960*f5c631daSSadaf Ebrahimi                         Condition cond,
961*f5c631daSSadaf Ebrahimi                         DataType dt,
962*f5c631daSSadaf Ebrahimi                         SRegister rd,
963*f5c631daSSadaf Ebrahimi                         const MemOperand& operand) VIXL_OVERRIDE;
964*f5c631daSSadaf Ebrahimi   // VLDR, VSTR
965*f5c631daSSadaf Ebrahimi   virtual void Delegate(InstructionType type,
966*f5c631daSSadaf Ebrahimi                         InstructionCondDtDMop instruction,
967*f5c631daSSadaf Ebrahimi                         Condition cond,
968*f5c631daSSadaf Ebrahimi                         DataType dt,
969*f5c631daSSadaf Ebrahimi                         DRegister rd,
970*f5c631daSSadaf Ebrahimi                         const MemOperand& operand) VIXL_OVERRIDE;
971*f5c631daSSadaf Ebrahimi   // MSR
972*f5c631daSSadaf Ebrahimi   virtual void Delegate(InstructionType type,
973*f5c631daSSadaf Ebrahimi                         InstructionCondMsrOp instruction,
974*f5c631daSSadaf Ebrahimi                         Condition cond,
975*f5c631daSSadaf Ebrahimi                         MaskedSpecialRegister spec_reg,
976*f5c631daSSadaf Ebrahimi                         const Operand& operand) VIXL_OVERRIDE;
977*f5c631daSSadaf Ebrahimi   virtual void Delegate(InstructionType type,
978*f5c631daSSadaf Ebrahimi                         InstructionCondDtDL instruction,
979*f5c631daSSadaf Ebrahimi                         Condition cond,
980*f5c631daSSadaf Ebrahimi                         DataType dt,
981*f5c631daSSadaf Ebrahimi                         DRegister rd,
982*f5c631daSSadaf Ebrahimi                         Location* location) VIXL_OVERRIDE;
983*f5c631daSSadaf Ebrahimi   virtual void Delegate(InstructionType type,
984*f5c631daSSadaf Ebrahimi                         InstructionCondDtSL instruction,
985*f5c631daSSadaf Ebrahimi                         Condition cond,
986*f5c631daSSadaf Ebrahimi                         DataType dt,
987*f5c631daSSadaf Ebrahimi                         SRegister rd,
988*f5c631daSSadaf Ebrahimi                         Location* location) VIXL_OVERRIDE;
989*f5c631daSSadaf Ebrahimi 
990*f5c631daSSadaf Ebrahimi   // Start of generated code.
991*f5c631daSSadaf Ebrahimi 
Adc(Condition cond,Register rd,Register rn,const Operand & operand)992*f5c631daSSadaf Ebrahimi   void Adc(Condition cond, Register rd, Register rn, const Operand& operand) {
993*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
994*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
995*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
996*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
997*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
998*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
999*f5c631daSSadaf Ebrahimi     bool can_use_it =
1000*f5c631daSSadaf Ebrahimi         // ADC<c>{<q>} {<Rdn>,} <Rdn>, <Rm> ; T1
1001*f5c631daSSadaf Ebrahimi         operand.IsPlainRegister() && rn.IsLow() && rd.Is(rn) &&
1002*f5c631daSSadaf Ebrahimi         operand.GetBaseRegister().IsLow();
1003*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard, can_use_it);
1004*f5c631daSSadaf Ebrahimi     adc(cond, rd, rn, operand);
1005*f5c631daSSadaf Ebrahimi   }
Adc(Register rd,Register rn,const Operand & operand)1006*f5c631daSSadaf Ebrahimi   void Adc(Register rd, Register rn, const Operand& operand) {
1007*f5c631daSSadaf Ebrahimi     Adc(al, rd, rn, operand);
1008*f5c631daSSadaf Ebrahimi   }
Adc(FlagsUpdate flags,Condition cond,Register rd,Register rn,const Operand & operand)1009*f5c631daSSadaf Ebrahimi   void Adc(FlagsUpdate flags,
1010*f5c631daSSadaf Ebrahimi            Condition cond,
1011*f5c631daSSadaf Ebrahimi            Register rd,
1012*f5c631daSSadaf Ebrahimi            Register rn,
1013*f5c631daSSadaf Ebrahimi            const Operand& operand) {
1014*f5c631daSSadaf Ebrahimi     switch (flags) {
1015*f5c631daSSadaf Ebrahimi       case LeaveFlags:
1016*f5c631daSSadaf Ebrahimi         Adc(cond, rd, rn, operand);
1017*f5c631daSSadaf Ebrahimi         break;
1018*f5c631daSSadaf Ebrahimi       case SetFlags:
1019*f5c631daSSadaf Ebrahimi         Adcs(cond, rd, rn, operand);
1020*f5c631daSSadaf Ebrahimi         break;
1021*f5c631daSSadaf Ebrahimi       case DontCare:
1022*f5c631daSSadaf Ebrahimi         bool setflags_is_smaller = IsUsingT32() && cond.Is(al) && rd.IsLow() &&
1023*f5c631daSSadaf Ebrahimi                                    rn.Is(rd) && operand.IsPlainRegister() &&
1024*f5c631daSSadaf Ebrahimi                                    operand.GetBaseRegister().IsLow();
1025*f5c631daSSadaf Ebrahimi         if (setflags_is_smaller) {
1026*f5c631daSSadaf Ebrahimi           Adcs(cond, rd, rn, operand);
1027*f5c631daSSadaf Ebrahimi         } else {
1028*f5c631daSSadaf Ebrahimi           Adc(cond, rd, rn, operand);
1029*f5c631daSSadaf Ebrahimi         }
1030*f5c631daSSadaf Ebrahimi         break;
1031*f5c631daSSadaf Ebrahimi     }
1032*f5c631daSSadaf Ebrahimi   }
Adc(FlagsUpdate flags,Register rd,Register rn,const Operand & operand)1033*f5c631daSSadaf Ebrahimi   void Adc(FlagsUpdate flags,
1034*f5c631daSSadaf Ebrahimi            Register rd,
1035*f5c631daSSadaf Ebrahimi            Register rn,
1036*f5c631daSSadaf Ebrahimi            const Operand& operand) {
1037*f5c631daSSadaf Ebrahimi     Adc(flags, al, rd, rn, operand);
1038*f5c631daSSadaf Ebrahimi   }
1039*f5c631daSSadaf Ebrahimi 
Adcs(Condition cond,Register rd,Register rn,const Operand & operand)1040*f5c631daSSadaf Ebrahimi   void Adcs(Condition cond, Register rd, Register rn, const Operand& operand) {
1041*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
1042*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1043*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
1044*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1045*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1046*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1047*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
1048*f5c631daSSadaf Ebrahimi     adcs(cond, rd, rn, operand);
1049*f5c631daSSadaf Ebrahimi   }
Adcs(Register rd,Register rn,const Operand & operand)1050*f5c631daSSadaf Ebrahimi   void Adcs(Register rd, Register rn, const Operand& operand) {
1051*f5c631daSSadaf Ebrahimi     Adcs(al, rd, rn, operand);
1052*f5c631daSSadaf Ebrahimi   }
1053*f5c631daSSadaf Ebrahimi 
Add(Condition cond,Register rd,Register rn,const Operand & operand)1054*f5c631daSSadaf Ebrahimi   void Add(Condition cond, Register rd, Register rn, const Operand& operand) {
1055*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
1056*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1057*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
1058*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1059*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1060*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1061*f5c631daSSadaf Ebrahimi     if (cond.Is(al) && rd.Is(rn) && operand.IsImmediate()) {
1062*f5c631daSSadaf Ebrahimi       uint32_t immediate = operand.GetImmediate();
1063*f5c631daSSadaf Ebrahimi       if (immediate == 0) {
1064*f5c631daSSadaf Ebrahimi         return;
1065*f5c631daSSadaf Ebrahimi       }
1066*f5c631daSSadaf Ebrahimi     }
1067*f5c631daSSadaf Ebrahimi     bool can_use_it =
1068*f5c631daSSadaf Ebrahimi         // ADD<c>{<q>} <Rd>, <Rn>, #<imm3> ; T1
1069*f5c631daSSadaf Ebrahimi         (operand.IsImmediate() && (operand.GetImmediate() <= 7) && rn.IsLow() &&
1070*f5c631daSSadaf Ebrahimi          rd.IsLow()) ||
1071*f5c631daSSadaf Ebrahimi         // ADD<c>{<q>} {<Rdn>,} <Rdn>, #<imm8> ; T2
1072*f5c631daSSadaf Ebrahimi         (operand.IsImmediate() && (operand.GetImmediate() <= 255) &&
1073*f5c631daSSadaf Ebrahimi          rd.IsLow() && rn.Is(rd)) ||
1074*f5c631daSSadaf Ebrahimi         // ADD{<c>}{<q>} <Rd>, SP, #<imm8> ; T1
1075*f5c631daSSadaf Ebrahimi         (operand.IsImmediate() && (operand.GetImmediate() <= 1020) &&
1076*f5c631daSSadaf Ebrahimi          ((operand.GetImmediate() & 0x3) == 0) && rd.IsLow() && rn.IsSP()) ||
1077*f5c631daSSadaf Ebrahimi         // ADD<c>{<q>} <Rd>, <Rn>, <Rm>
1078*f5c631daSSadaf Ebrahimi         (operand.IsPlainRegister() && rd.IsLow() && rn.IsLow() &&
1079*f5c631daSSadaf Ebrahimi          operand.GetBaseRegister().IsLow()) ||
1080*f5c631daSSadaf Ebrahimi         // ADD<c>{<q>} <Rdn>, <Rm> ; T2
1081*f5c631daSSadaf Ebrahimi         (operand.IsPlainRegister() && !rd.IsPC() && rn.Is(rd) &&
1082*f5c631daSSadaf Ebrahimi          !operand.GetBaseRegister().IsSP() &&
1083*f5c631daSSadaf Ebrahimi          !operand.GetBaseRegister().IsPC()) ||
1084*f5c631daSSadaf Ebrahimi         // ADD{<c>}{<q>} {<Rdm>,} SP, <Rdm> ; T1
1085*f5c631daSSadaf Ebrahimi         (operand.IsPlainRegister() && !rd.IsPC() && rn.IsSP() &&
1086*f5c631daSSadaf Ebrahimi          operand.GetBaseRegister().Is(rd));
1087*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard, can_use_it);
1088*f5c631daSSadaf Ebrahimi     add(cond, rd, rn, operand);
1089*f5c631daSSadaf Ebrahimi   }
Add(Register rd,Register rn,const Operand & operand)1090*f5c631daSSadaf Ebrahimi   void Add(Register rd, Register rn, const Operand& operand) {
1091*f5c631daSSadaf Ebrahimi     Add(al, rd, rn, operand);
1092*f5c631daSSadaf Ebrahimi   }
Add(FlagsUpdate flags,Condition cond,Register rd,Register rn,const Operand & operand)1093*f5c631daSSadaf Ebrahimi   void Add(FlagsUpdate flags,
1094*f5c631daSSadaf Ebrahimi            Condition cond,
1095*f5c631daSSadaf Ebrahimi            Register rd,
1096*f5c631daSSadaf Ebrahimi            Register rn,
1097*f5c631daSSadaf Ebrahimi            const Operand& operand) {
1098*f5c631daSSadaf Ebrahimi     switch (flags) {
1099*f5c631daSSadaf Ebrahimi       case LeaveFlags:
1100*f5c631daSSadaf Ebrahimi         Add(cond, rd, rn, operand);
1101*f5c631daSSadaf Ebrahimi         break;
1102*f5c631daSSadaf Ebrahimi       case SetFlags:
1103*f5c631daSSadaf Ebrahimi         Adds(cond, rd, rn, operand);
1104*f5c631daSSadaf Ebrahimi         break;
1105*f5c631daSSadaf Ebrahimi       case DontCare:
1106*f5c631daSSadaf Ebrahimi         bool setflags_is_smaller =
1107*f5c631daSSadaf Ebrahimi             IsUsingT32() && cond.Is(al) &&
1108*f5c631daSSadaf Ebrahimi             ((operand.IsPlainRegister() && rd.IsLow() && rn.IsLow() &&
1109*f5c631daSSadaf Ebrahimi               !rd.Is(rn) && operand.GetBaseRegister().IsLow()) ||
1110*f5c631daSSadaf Ebrahimi              (operand.IsImmediate() &&
1111*f5c631daSSadaf Ebrahimi               ((rd.IsLow() && rn.IsLow() && (operand.GetImmediate() < 8)) ||
1112*f5c631daSSadaf Ebrahimi                (rd.IsLow() && rn.Is(rd) && (operand.GetImmediate() < 256)))));
1113*f5c631daSSadaf Ebrahimi         if (setflags_is_smaller) {
1114*f5c631daSSadaf Ebrahimi           Adds(cond, rd, rn, operand);
1115*f5c631daSSadaf Ebrahimi         } else {
1116*f5c631daSSadaf Ebrahimi           bool changed_op_is_smaller =
1117*f5c631daSSadaf Ebrahimi               operand.IsImmediate() && (operand.GetSignedImmediate() < 0) &&
1118*f5c631daSSadaf Ebrahimi               ((rd.IsLow() && rn.IsLow() &&
1119*f5c631daSSadaf Ebrahimi                 (operand.GetSignedImmediate() >= -7)) ||
1120*f5c631daSSadaf Ebrahimi                (rd.IsLow() && rn.Is(rd) &&
1121*f5c631daSSadaf Ebrahimi                 (operand.GetSignedImmediate() >= -255)));
1122*f5c631daSSadaf Ebrahimi           if (changed_op_is_smaller) {
1123*f5c631daSSadaf Ebrahimi             Subs(cond, rd, rn, -operand.GetSignedImmediate());
1124*f5c631daSSadaf Ebrahimi           } else {
1125*f5c631daSSadaf Ebrahimi             Add(cond, rd, rn, operand);
1126*f5c631daSSadaf Ebrahimi           }
1127*f5c631daSSadaf Ebrahimi         }
1128*f5c631daSSadaf Ebrahimi         break;
1129*f5c631daSSadaf Ebrahimi     }
1130*f5c631daSSadaf Ebrahimi   }
Add(FlagsUpdate flags,Register rd,Register rn,const Operand & operand)1131*f5c631daSSadaf Ebrahimi   void Add(FlagsUpdate flags,
1132*f5c631daSSadaf Ebrahimi            Register rd,
1133*f5c631daSSadaf Ebrahimi            Register rn,
1134*f5c631daSSadaf Ebrahimi            const Operand& operand) {
1135*f5c631daSSadaf Ebrahimi     Add(flags, al, rd, rn, operand);
1136*f5c631daSSadaf Ebrahimi   }
1137*f5c631daSSadaf Ebrahimi 
Adds(Condition cond,Register rd,Register rn,const Operand & operand)1138*f5c631daSSadaf Ebrahimi   void Adds(Condition cond, Register rd, Register rn, const Operand& operand) {
1139*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
1140*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1141*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
1142*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1143*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1144*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1145*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
1146*f5c631daSSadaf Ebrahimi     adds(cond, rd, rn, operand);
1147*f5c631daSSadaf Ebrahimi   }
Adds(Register rd,Register rn,const Operand & operand)1148*f5c631daSSadaf Ebrahimi   void Adds(Register rd, Register rn, const Operand& operand) {
1149*f5c631daSSadaf Ebrahimi     Adds(al, rd, rn, operand);
1150*f5c631daSSadaf Ebrahimi   }
1151*f5c631daSSadaf Ebrahimi 
And(Condition cond,Register rd,Register rn,const Operand & operand)1152*f5c631daSSadaf Ebrahimi   void And(Condition cond, Register rd, Register rn, const Operand& operand) {
1153*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
1154*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1155*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
1156*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1157*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1158*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1159*f5c631daSSadaf Ebrahimi     if (rd.Is(rn) && operand.IsPlainRegister() &&
1160*f5c631daSSadaf Ebrahimi         rd.Is(operand.GetBaseRegister())) {
1161*f5c631daSSadaf Ebrahimi       return;
1162*f5c631daSSadaf Ebrahimi     }
1163*f5c631daSSadaf Ebrahimi     if (cond.Is(al) && operand.IsImmediate()) {
1164*f5c631daSSadaf Ebrahimi       uint32_t immediate = operand.GetImmediate();
1165*f5c631daSSadaf Ebrahimi       if (immediate == 0) {
1166*f5c631daSSadaf Ebrahimi         mov(rd, 0);
1167*f5c631daSSadaf Ebrahimi         return;
1168*f5c631daSSadaf Ebrahimi       }
1169*f5c631daSSadaf Ebrahimi       if ((immediate == 0xffffffff) && rd.Is(rn)) {
1170*f5c631daSSadaf Ebrahimi         return;
1171*f5c631daSSadaf Ebrahimi       }
1172*f5c631daSSadaf Ebrahimi     }
1173*f5c631daSSadaf Ebrahimi     bool can_use_it =
1174*f5c631daSSadaf Ebrahimi         // AND<c>{<q>} {<Rdn>,} <Rdn>, <Rm> ; T1
1175*f5c631daSSadaf Ebrahimi         operand.IsPlainRegister() && rd.Is(rn) && rn.IsLow() &&
1176*f5c631daSSadaf Ebrahimi         operand.GetBaseRegister().IsLow();
1177*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard, can_use_it);
1178*f5c631daSSadaf Ebrahimi     and_(cond, rd, rn, operand);
1179*f5c631daSSadaf Ebrahimi   }
And(Register rd,Register rn,const Operand & operand)1180*f5c631daSSadaf Ebrahimi   void And(Register rd, Register rn, const Operand& operand) {
1181*f5c631daSSadaf Ebrahimi     And(al, rd, rn, operand);
1182*f5c631daSSadaf Ebrahimi   }
And(FlagsUpdate flags,Condition cond,Register rd,Register rn,const Operand & operand)1183*f5c631daSSadaf Ebrahimi   void And(FlagsUpdate flags,
1184*f5c631daSSadaf Ebrahimi            Condition cond,
1185*f5c631daSSadaf Ebrahimi            Register rd,
1186*f5c631daSSadaf Ebrahimi            Register rn,
1187*f5c631daSSadaf Ebrahimi            const Operand& operand) {
1188*f5c631daSSadaf Ebrahimi     switch (flags) {
1189*f5c631daSSadaf Ebrahimi       case LeaveFlags:
1190*f5c631daSSadaf Ebrahimi         And(cond, rd, rn, operand);
1191*f5c631daSSadaf Ebrahimi         break;
1192*f5c631daSSadaf Ebrahimi       case SetFlags:
1193*f5c631daSSadaf Ebrahimi         Ands(cond, rd, rn, operand);
1194*f5c631daSSadaf Ebrahimi         break;
1195*f5c631daSSadaf Ebrahimi       case DontCare:
1196*f5c631daSSadaf Ebrahimi         if (operand.IsPlainRegister() && rd.Is(rn) &&
1197*f5c631daSSadaf Ebrahimi             rd.Is(operand.GetBaseRegister())) {
1198*f5c631daSSadaf Ebrahimi           return;
1199*f5c631daSSadaf Ebrahimi         }
1200*f5c631daSSadaf Ebrahimi         bool setflags_is_smaller = IsUsingT32() && cond.Is(al) && rd.IsLow() &&
1201*f5c631daSSadaf Ebrahimi                                    rn.Is(rd) && operand.IsPlainRegister() &&
1202*f5c631daSSadaf Ebrahimi                                    operand.GetBaseRegister().IsLow();
1203*f5c631daSSadaf Ebrahimi         if (setflags_is_smaller) {
1204*f5c631daSSadaf Ebrahimi           Ands(cond, rd, rn, operand);
1205*f5c631daSSadaf Ebrahimi         } else {
1206*f5c631daSSadaf Ebrahimi           And(cond, rd, rn, operand);
1207*f5c631daSSadaf Ebrahimi         }
1208*f5c631daSSadaf Ebrahimi         break;
1209*f5c631daSSadaf Ebrahimi     }
1210*f5c631daSSadaf Ebrahimi   }
And(FlagsUpdate flags,Register rd,Register rn,const Operand & operand)1211*f5c631daSSadaf Ebrahimi   void And(FlagsUpdate flags,
1212*f5c631daSSadaf Ebrahimi            Register rd,
1213*f5c631daSSadaf Ebrahimi            Register rn,
1214*f5c631daSSadaf Ebrahimi            const Operand& operand) {
1215*f5c631daSSadaf Ebrahimi     And(flags, al, rd, rn, operand);
1216*f5c631daSSadaf Ebrahimi   }
1217*f5c631daSSadaf Ebrahimi 
Ands(Condition cond,Register rd,Register rn,const Operand & operand)1218*f5c631daSSadaf Ebrahimi   void Ands(Condition cond, Register rd, Register rn, const Operand& operand) {
1219*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
1220*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1221*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
1222*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1223*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1224*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1225*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
1226*f5c631daSSadaf Ebrahimi     ands(cond, rd, rn, operand);
1227*f5c631daSSadaf Ebrahimi   }
Ands(Register rd,Register rn,const Operand & operand)1228*f5c631daSSadaf Ebrahimi   void Ands(Register rd, Register rn, const Operand& operand) {
1229*f5c631daSSadaf Ebrahimi     Ands(al, rd, rn, operand);
1230*f5c631daSSadaf Ebrahimi   }
1231*f5c631daSSadaf Ebrahimi 
Asr(Condition cond,Register rd,Register rm,const Operand & operand)1232*f5c631daSSadaf Ebrahimi   void Asr(Condition cond, Register rd, Register rm, const Operand& operand) {
1233*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
1234*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
1235*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
1236*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1237*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1238*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1239*f5c631daSSadaf Ebrahimi     bool can_use_it =
1240*f5c631daSSadaf Ebrahimi         // ASR<c>{<q>} {<Rd>,} <Rm>, #<imm> ; T2
1241*f5c631daSSadaf Ebrahimi         (operand.IsImmediate() && (operand.GetImmediate() >= 1) &&
1242*f5c631daSSadaf Ebrahimi          (operand.GetImmediate() <= 32) && rd.IsLow() && rm.IsLow()) ||
1243*f5c631daSSadaf Ebrahimi         // ASR<c>{<q>} {<Rdm>,} <Rdm>, <Rs> ; T1
1244*f5c631daSSadaf Ebrahimi         (operand.IsPlainRegister() && rd.Is(rm) && rd.IsLow() &&
1245*f5c631daSSadaf Ebrahimi          operand.GetBaseRegister().IsLow());
1246*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard, can_use_it);
1247*f5c631daSSadaf Ebrahimi     asr(cond, rd, rm, operand);
1248*f5c631daSSadaf Ebrahimi   }
Asr(Register rd,Register rm,const Operand & operand)1249*f5c631daSSadaf Ebrahimi   void Asr(Register rd, Register rm, const Operand& operand) {
1250*f5c631daSSadaf Ebrahimi     Asr(al, rd, rm, operand);
1251*f5c631daSSadaf Ebrahimi   }
Asr(FlagsUpdate flags,Condition cond,Register rd,Register rm,const Operand & operand)1252*f5c631daSSadaf Ebrahimi   void Asr(FlagsUpdate flags,
1253*f5c631daSSadaf Ebrahimi            Condition cond,
1254*f5c631daSSadaf Ebrahimi            Register rd,
1255*f5c631daSSadaf Ebrahimi            Register rm,
1256*f5c631daSSadaf Ebrahimi            const Operand& operand) {
1257*f5c631daSSadaf Ebrahimi     switch (flags) {
1258*f5c631daSSadaf Ebrahimi       case LeaveFlags:
1259*f5c631daSSadaf Ebrahimi         Asr(cond, rd, rm, operand);
1260*f5c631daSSadaf Ebrahimi         break;
1261*f5c631daSSadaf Ebrahimi       case SetFlags:
1262*f5c631daSSadaf Ebrahimi         Asrs(cond, rd, rm, operand);
1263*f5c631daSSadaf Ebrahimi         break;
1264*f5c631daSSadaf Ebrahimi       case DontCare:
1265*f5c631daSSadaf Ebrahimi         bool setflags_is_smaller =
1266*f5c631daSSadaf Ebrahimi             IsUsingT32() && cond.Is(al) && rd.IsLow() && rm.IsLow() &&
1267*f5c631daSSadaf Ebrahimi             ((operand.IsImmediate() && (operand.GetImmediate() >= 1) &&
1268*f5c631daSSadaf Ebrahimi               (operand.GetImmediate() <= 32)) ||
1269*f5c631daSSadaf Ebrahimi              (operand.IsPlainRegister() && rd.Is(rm)));
1270*f5c631daSSadaf Ebrahimi         if (setflags_is_smaller) {
1271*f5c631daSSadaf Ebrahimi           Asrs(cond, rd, rm, operand);
1272*f5c631daSSadaf Ebrahimi         } else {
1273*f5c631daSSadaf Ebrahimi           Asr(cond, rd, rm, operand);
1274*f5c631daSSadaf Ebrahimi         }
1275*f5c631daSSadaf Ebrahimi         break;
1276*f5c631daSSadaf Ebrahimi     }
1277*f5c631daSSadaf Ebrahimi   }
Asr(FlagsUpdate flags,Register rd,Register rm,const Operand & operand)1278*f5c631daSSadaf Ebrahimi   void Asr(FlagsUpdate flags,
1279*f5c631daSSadaf Ebrahimi            Register rd,
1280*f5c631daSSadaf Ebrahimi            Register rm,
1281*f5c631daSSadaf Ebrahimi            const Operand& operand) {
1282*f5c631daSSadaf Ebrahimi     Asr(flags, al, rd, rm, operand);
1283*f5c631daSSadaf Ebrahimi   }
1284*f5c631daSSadaf Ebrahimi 
Asrs(Condition cond,Register rd,Register rm,const Operand & operand)1285*f5c631daSSadaf Ebrahimi   void Asrs(Condition cond, Register rd, Register rm, const Operand& operand) {
1286*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
1287*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
1288*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
1289*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1290*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1291*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1292*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
1293*f5c631daSSadaf Ebrahimi     asrs(cond, rd, rm, operand);
1294*f5c631daSSadaf Ebrahimi   }
Asrs(Register rd,Register rm,const Operand & operand)1295*f5c631daSSadaf Ebrahimi   void Asrs(Register rd, Register rm, const Operand& operand) {
1296*f5c631daSSadaf Ebrahimi     Asrs(al, rd, rm, operand);
1297*f5c631daSSadaf Ebrahimi   }
1298*f5c631daSSadaf Ebrahimi 
1299*f5c631daSSadaf Ebrahimi   void B(Condition cond, Label* label, BranchHint hint = kBranchWithoutHint) {
1300*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1301*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1302*f5c631daSSadaf Ebrahimi     EncodingSize size = Best;
1303*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope::PoolPolicy pool_policy =
1304*f5c631daSSadaf Ebrahimi         MacroEmissionCheckScope::kBlockPools;
1305*f5c631daSSadaf Ebrahimi     if (!label->IsBound()) {
1306*f5c631daSSadaf Ebrahimi       if (hint == kNear) size = Narrow;
1307*f5c631daSSadaf Ebrahimi       const ReferenceInfo* info;
1308*f5c631daSSadaf Ebrahimi       bool can_encode = b_info(cond, size, label, &info);
1309*f5c631daSSadaf Ebrahimi       VIXL_CHECK(can_encode);
1310*f5c631daSSadaf Ebrahimi       CheckEmitPoolForInstruction(info, label, &cond);
1311*f5c631daSSadaf Ebrahimi       // We have already checked for pool emission.
1312*f5c631daSSadaf Ebrahimi       pool_policy = MacroEmissionCheckScope::kIgnorePools;
1313*f5c631daSSadaf Ebrahimi     }
1314*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this, pool_policy);
1315*f5c631daSSadaf Ebrahimi     b(cond, size, label);
1316*f5c631daSSadaf Ebrahimi     RegisterForwardReference(label);
1317*f5c631daSSadaf Ebrahimi   }
1318*f5c631daSSadaf Ebrahimi   void B(Label* label, BranchHint hint = kBranchWithoutHint) {
1319*f5c631daSSadaf Ebrahimi     B(al, label, hint);
1320*f5c631daSSadaf Ebrahimi   }
BPreferNear(Condition cond,Label * label)1321*f5c631daSSadaf Ebrahimi   void BPreferNear(Condition cond, Label* label) { B(cond, label, kNear); }
BPreferNear(Label * label)1322*f5c631daSSadaf Ebrahimi   void BPreferNear(Label* label) { B(al, label, kNear); }
1323*f5c631daSSadaf Ebrahimi 
Bfc(Condition cond,Register rd,uint32_t lsb,uint32_t width)1324*f5c631daSSadaf Ebrahimi   void Bfc(Condition cond, Register rd, uint32_t lsb, uint32_t width) {
1325*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
1326*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1327*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1328*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1329*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
1330*f5c631daSSadaf Ebrahimi     bfc(cond, rd, lsb, width);
1331*f5c631daSSadaf Ebrahimi   }
Bfc(Register rd,uint32_t lsb,uint32_t width)1332*f5c631daSSadaf Ebrahimi   void Bfc(Register rd, uint32_t lsb, uint32_t width) {
1333*f5c631daSSadaf Ebrahimi     Bfc(al, rd, lsb, width);
1334*f5c631daSSadaf Ebrahimi   }
1335*f5c631daSSadaf Ebrahimi 
Bfi(Condition cond,Register rd,Register rn,uint32_t lsb,uint32_t width)1336*f5c631daSSadaf Ebrahimi   void Bfi(
1337*f5c631daSSadaf Ebrahimi       Condition cond, Register rd, Register rn, uint32_t lsb, uint32_t width) {
1338*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
1339*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1340*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1341*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1342*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1343*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
1344*f5c631daSSadaf Ebrahimi     bfi(cond, rd, rn, lsb, width);
1345*f5c631daSSadaf Ebrahimi   }
Bfi(Register rd,Register rn,uint32_t lsb,uint32_t width)1346*f5c631daSSadaf Ebrahimi   void Bfi(Register rd, Register rn, uint32_t lsb, uint32_t width) {
1347*f5c631daSSadaf Ebrahimi     Bfi(al, rd, rn, lsb, width);
1348*f5c631daSSadaf Ebrahimi   }
1349*f5c631daSSadaf Ebrahimi 
Bic(Condition cond,Register rd,Register rn,const Operand & operand)1350*f5c631daSSadaf Ebrahimi   void Bic(Condition cond, Register rd, Register rn, const Operand& operand) {
1351*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
1352*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1353*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
1354*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1355*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1356*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1357*f5c631daSSadaf Ebrahimi     if (cond.Is(al) && operand.IsImmediate()) {
1358*f5c631daSSadaf Ebrahimi       uint32_t immediate = operand.GetImmediate();
1359*f5c631daSSadaf Ebrahimi       if ((immediate == 0) && rd.Is(rn)) {
1360*f5c631daSSadaf Ebrahimi         return;
1361*f5c631daSSadaf Ebrahimi       }
1362*f5c631daSSadaf Ebrahimi       if (immediate == 0xffffffff) {
1363*f5c631daSSadaf Ebrahimi         mov(rd, 0);
1364*f5c631daSSadaf Ebrahimi         return;
1365*f5c631daSSadaf Ebrahimi       }
1366*f5c631daSSadaf Ebrahimi     }
1367*f5c631daSSadaf Ebrahimi     bool can_use_it =
1368*f5c631daSSadaf Ebrahimi         // BIC<c>{<q>} {<Rdn>,} <Rdn>, <Rm> ; T1
1369*f5c631daSSadaf Ebrahimi         operand.IsPlainRegister() && rd.Is(rn) && rn.IsLow() &&
1370*f5c631daSSadaf Ebrahimi         operand.GetBaseRegister().IsLow();
1371*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard, can_use_it);
1372*f5c631daSSadaf Ebrahimi     bic(cond, rd, rn, operand);
1373*f5c631daSSadaf Ebrahimi   }
Bic(Register rd,Register rn,const Operand & operand)1374*f5c631daSSadaf Ebrahimi   void Bic(Register rd, Register rn, const Operand& operand) {
1375*f5c631daSSadaf Ebrahimi     Bic(al, rd, rn, operand);
1376*f5c631daSSadaf Ebrahimi   }
Bic(FlagsUpdate flags,Condition cond,Register rd,Register rn,const Operand & operand)1377*f5c631daSSadaf Ebrahimi   void Bic(FlagsUpdate flags,
1378*f5c631daSSadaf Ebrahimi            Condition cond,
1379*f5c631daSSadaf Ebrahimi            Register rd,
1380*f5c631daSSadaf Ebrahimi            Register rn,
1381*f5c631daSSadaf Ebrahimi            const Operand& operand) {
1382*f5c631daSSadaf Ebrahimi     switch (flags) {
1383*f5c631daSSadaf Ebrahimi       case LeaveFlags:
1384*f5c631daSSadaf Ebrahimi         Bic(cond, rd, rn, operand);
1385*f5c631daSSadaf Ebrahimi         break;
1386*f5c631daSSadaf Ebrahimi       case SetFlags:
1387*f5c631daSSadaf Ebrahimi         Bics(cond, rd, rn, operand);
1388*f5c631daSSadaf Ebrahimi         break;
1389*f5c631daSSadaf Ebrahimi       case DontCare:
1390*f5c631daSSadaf Ebrahimi         bool setflags_is_smaller = IsUsingT32() && cond.Is(al) && rd.IsLow() &&
1391*f5c631daSSadaf Ebrahimi                                    rn.Is(rd) && operand.IsPlainRegister() &&
1392*f5c631daSSadaf Ebrahimi                                    operand.GetBaseRegister().IsLow();
1393*f5c631daSSadaf Ebrahimi         if (setflags_is_smaller) {
1394*f5c631daSSadaf Ebrahimi           Bics(cond, rd, rn, operand);
1395*f5c631daSSadaf Ebrahimi         } else {
1396*f5c631daSSadaf Ebrahimi           Bic(cond, rd, rn, operand);
1397*f5c631daSSadaf Ebrahimi         }
1398*f5c631daSSadaf Ebrahimi         break;
1399*f5c631daSSadaf Ebrahimi     }
1400*f5c631daSSadaf Ebrahimi   }
Bic(FlagsUpdate flags,Register rd,Register rn,const Operand & operand)1401*f5c631daSSadaf Ebrahimi   void Bic(FlagsUpdate flags,
1402*f5c631daSSadaf Ebrahimi            Register rd,
1403*f5c631daSSadaf Ebrahimi            Register rn,
1404*f5c631daSSadaf Ebrahimi            const Operand& operand) {
1405*f5c631daSSadaf Ebrahimi     Bic(flags, al, rd, rn, operand);
1406*f5c631daSSadaf Ebrahimi   }
1407*f5c631daSSadaf Ebrahimi 
Bics(Condition cond,Register rd,Register rn,const Operand & operand)1408*f5c631daSSadaf Ebrahimi   void Bics(Condition cond, Register rd, Register rn, const Operand& operand) {
1409*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
1410*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1411*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
1412*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1413*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1414*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1415*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
1416*f5c631daSSadaf Ebrahimi     bics(cond, rd, rn, operand);
1417*f5c631daSSadaf Ebrahimi   }
Bics(Register rd,Register rn,const Operand & operand)1418*f5c631daSSadaf Ebrahimi   void Bics(Register rd, Register rn, const Operand& operand) {
1419*f5c631daSSadaf Ebrahimi     Bics(al, rd, rn, operand);
1420*f5c631daSSadaf Ebrahimi   }
1421*f5c631daSSadaf Ebrahimi 
Bkpt(Condition cond,uint32_t imm)1422*f5c631daSSadaf Ebrahimi   void Bkpt(Condition cond, uint32_t imm) {
1423*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1424*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1425*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1426*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
1427*f5c631daSSadaf Ebrahimi     bkpt(cond, imm);
1428*f5c631daSSadaf Ebrahimi   }
Bkpt(uint32_t imm)1429*f5c631daSSadaf Ebrahimi   void Bkpt(uint32_t imm) { Bkpt(al, imm); }
1430*f5c631daSSadaf Ebrahimi 
Bl(Condition cond,Label * label)1431*f5c631daSSadaf Ebrahimi   void Bl(Condition cond, Label* label) {
1432*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1433*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1434*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope::PoolPolicy pool_policy =
1435*f5c631daSSadaf Ebrahimi         MacroEmissionCheckScope::kBlockPools;
1436*f5c631daSSadaf Ebrahimi     if (!label->IsBound()) {
1437*f5c631daSSadaf Ebrahimi       const ReferenceInfo* info;
1438*f5c631daSSadaf Ebrahimi       bool can_encode = bl_info(cond, label, &info);
1439*f5c631daSSadaf Ebrahimi       VIXL_CHECK(can_encode);
1440*f5c631daSSadaf Ebrahimi       CheckEmitPoolForInstruction(info, label, &cond);
1441*f5c631daSSadaf Ebrahimi       // We have already checked for pool emission.
1442*f5c631daSSadaf Ebrahimi       pool_policy = MacroEmissionCheckScope::kIgnorePools;
1443*f5c631daSSadaf Ebrahimi     }
1444*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this, pool_policy);
1445*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
1446*f5c631daSSadaf Ebrahimi     bl(cond, label);
1447*f5c631daSSadaf Ebrahimi     RegisterForwardReference(label);
1448*f5c631daSSadaf Ebrahimi   }
Bl(Label * label)1449*f5c631daSSadaf Ebrahimi   void Bl(Label* label) { Bl(al, label); }
1450*f5c631daSSadaf Ebrahimi 
Blx(Condition cond,Label * label)1451*f5c631daSSadaf Ebrahimi   void Blx(Condition cond, Label* label) {
1452*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1453*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1454*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope::PoolPolicy pool_policy =
1455*f5c631daSSadaf Ebrahimi         MacroEmissionCheckScope::kBlockPools;
1456*f5c631daSSadaf Ebrahimi     if (!label->IsBound()) {
1457*f5c631daSSadaf Ebrahimi       const ReferenceInfo* info;
1458*f5c631daSSadaf Ebrahimi       bool can_encode = blx_info(cond, label, &info);
1459*f5c631daSSadaf Ebrahimi       VIXL_CHECK(can_encode);
1460*f5c631daSSadaf Ebrahimi       CheckEmitPoolForInstruction(info, label, &cond);
1461*f5c631daSSadaf Ebrahimi       // We have already checked for pool emission.
1462*f5c631daSSadaf Ebrahimi       pool_policy = MacroEmissionCheckScope::kIgnorePools;
1463*f5c631daSSadaf Ebrahimi     }
1464*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this, pool_policy);
1465*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
1466*f5c631daSSadaf Ebrahimi     blx(cond, label);
1467*f5c631daSSadaf Ebrahimi     RegisterForwardReference(label);
1468*f5c631daSSadaf Ebrahimi   }
Blx(Label * label)1469*f5c631daSSadaf Ebrahimi   void Blx(Label* label) { Blx(al, label); }
1470*f5c631daSSadaf Ebrahimi 
Blx(Condition cond,Register rm)1471*f5c631daSSadaf Ebrahimi   void Blx(Condition cond, Register rm) {
1472*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
1473*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1474*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1475*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1476*f5c631daSSadaf Ebrahimi     bool can_use_it =
1477*f5c631daSSadaf Ebrahimi         // BLX{<c>}{<q>} <Rm> ; T1
1478*f5c631daSSadaf Ebrahimi         !rm.IsPC();
1479*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard, can_use_it);
1480*f5c631daSSadaf Ebrahimi     blx(cond, rm);
1481*f5c631daSSadaf Ebrahimi   }
Blx(Register rm)1482*f5c631daSSadaf Ebrahimi   void Blx(Register rm) { Blx(al, rm); }
1483*f5c631daSSadaf Ebrahimi 
Bx(Condition cond,Register rm)1484*f5c631daSSadaf Ebrahimi   void Bx(Condition cond, Register rm) {
1485*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
1486*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1487*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1488*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1489*f5c631daSSadaf Ebrahimi     bool can_use_it =
1490*f5c631daSSadaf Ebrahimi         // BX{<c>}{<q>} <Rm> ; T1
1491*f5c631daSSadaf Ebrahimi         !rm.IsPC();
1492*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard, can_use_it);
1493*f5c631daSSadaf Ebrahimi     bx(cond, rm);
1494*f5c631daSSadaf Ebrahimi   }
Bx(Register rm)1495*f5c631daSSadaf Ebrahimi   void Bx(Register rm) { Bx(al, rm); }
1496*f5c631daSSadaf Ebrahimi 
Bxj(Condition cond,Register rm)1497*f5c631daSSadaf Ebrahimi   void Bxj(Condition cond, Register rm) {
1498*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
1499*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1500*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1501*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1502*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
1503*f5c631daSSadaf Ebrahimi     bxj(cond, rm);
1504*f5c631daSSadaf Ebrahimi   }
Bxj(Register rm)1505*f5c631daSSadaf Ebrahimi   void Bxj(Register rm) { Bxj(al, rm); }
1506*f5c631daSSadaf Ebrahimi 
Cbnz(Register rn,Label * label)1507*f5c631daSSadaf Ebrahimi   void Cbnz(Register rn, Label* label) {
1508*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1509*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1510*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1511*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope::PoolPolicy pool_policy =
1512*f5c631daSSadaf Ebrahimi         MacroEmissionCheckScope::kBlockPools;
1513*f5c631daSSadaf Ebrahimi     if (!label->IsBound()) {
1514*f5c631daSSadaf Ebrahimi       const ReferenceInfo* info;
1515*f5c631daSSadaf Ebrahimi       bool can_encode = cbnz_info(rn, label, &info);
1516*f5c631daSSadaf Ebrahimi       VIXL_CHECK(can_encode);
1517*f5c631daSSadaf Ebrahimi       CheckEmitPoolForInstruction(info, label);
1518*f5c631daSSadaf Ebrahimi       // We have already checked for pool emission.
1519*f5c631daSSadaf Ebrahimi       pool_policy = MacroEmissionCheckScope::kIgnorePools;
1520*f5c631daSSadaf Ebrahimi     }
1521*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this, pool_policy);
1522*f5c631daSSadaf Ebrahimi     cbnz(rn, label);
1523*f5c631daSSadaf Ebrahimi     RegisterForwardReference(label);
1524*f5c631daSSadaf Ebrahimi   }
1525*f5c631daSSadaf Ebrahimi 
Cbz(Register rn,Label * label)1526*f5c631daSSadaf Ebrahimi   void Cbz(Register rn, Label* label) {
1527*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1528*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1529*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1530*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope::PoolPolicy pool_policy =
1531*f5c631daSSadaf Ebrahimi         MacroEmissionCheckScope::kBlockPools;
1532*f5c631daSSadaf Ebrahimi     if (!label->IsBound()) {
1533*f5c631daSSadaf Ebrahimi       const ReferenceInfo* info;
1534*f5c631daSSadaf Ebrahimi       bool can_encode = cbz_info(rn, label, &info);
1535*f5c631daSSadaf Ebrahimi       VIXL_CHECK(can_encode);
1536*f5c631daSSadaf Ebrahimi       CheckEmitPoolForInstruction(info, label);
1537*f5c631daSSadaf Ebrahimi       // We have already checked for pool emission.
1538*f5c631daSSadaf Ebrahimi       pool_policy = MacroEmissionCheckScope::kIgnorePools;
1539*f5c631daSSadaf Ebrahimi     }
1540*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this, pool_policy);
1541*f5c631daSSadaf Ebrahimi     cbz(rn, label);
1542*f5c631daSSadaf Ebrahimi     RegisterForwardReference(label);
1543*f5c631daSSadaf Ebrahimi   }
1544*f5c631daSSadaf Ebrahimi 
Clrex(Condition cond)1545*f5c631daSSadaf Ebrahimi   void Clrex(Condition cond) {
1546*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1547*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1548*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1549*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
1550*f5c631daSSadaf Ebrahimi     clrex(cond);
1551*f5c631daSSadaf Ebrahimi   }
Clrex()1552*f5c631daSSadaf Ebrahimi   void Clrex() { Clrex(al); }
1553*f5c631daSSadaf Ebrahimi 
Clz(Condition cond,Register rd,Register rm)1554*f5c631daSSadaf Ebrahimi   void Clz(Condition cond, Register rd, Register rm) {
1555*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
1556*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
1557*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1558*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1559*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1560*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
1561*f5c631daSSadaf Ebrahimi     clz(cond, rd, rm);
1562*f5c631daSSadaf Ebrahimi   }
Clz(Register rd,Register rm)1563*f5c631daSSadaf Ebrahimi   void Clz(Register rd, Register rm) { Clz(al, rd, rm); }
1564*f5c631daSSadaf Ebrahimi 
Cmn(Condition cond,Register rn,const Operand & operand)1565*f5c631daSSadaf Ebrahimi   void Cmn(Condition cond, Register rn, const Operand& operand) {
1566*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1567*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
1568*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1569*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1570*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1571*f5c631daSSadaf Ebrahimi     bool can_use_it =
1572*f5c631daSSadaf Ebrahimi         // CMN{<c>}{<q>} <Rn>, <Rm> ; T1
1573*f5c631daSSadaf Ebrahimi         operand.IsPlainRegister() && rn.IsLow() &&
1574*f5c631daSSadaf Ebrahimi         operand.GetBaseRegister().IsLow();
1575*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard, can_use_it);
1576*f5c631daSSadaf Ebrahimi     cmn(cond, rn, operand);
1577*f5c631daSSadaf Ebrahimi   }
Cmn(Register rn,const Operand & operand)1578*f5c631daSSadaf Ebrahimi   void Cmn(Register rn, const Operand& operand) { Cmn(al, rn, operand); }
1579*f5c631daSSadaf Ebrahimi 
Cmp(Condition cond,Register rn,const Operand & operand)1580*f5c631daSSadaf Ebrahimi   void Cmp(Condition cond, Register rn, const Operand& operand) {
1581*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1582*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
1583*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1584*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1585*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1586*f5c631daSSadaf Ebrahimi     bool can_use_it =
1587*f5c631daSSadaf Ebrahimi         // CMP{<c>}{<q>} <Rn>, #<imm8> ; T1
1588*f5c631daSSadaf Ebrahimi         (operand.IsImmediate() && (operand.GetImmediate() <= 255) &&
1589*f5c631daSSadaf Ebrahimi          rn.IsLow()) ||
1590*f5c631daSSadaf Ebrahimi         // CMP{<c>}{<q>} <Rn>, <Rm> ; T1 T2
1591*f5c631daSSadaf Ebrahimi         (operand.IsPlainRegister() && !rn.IsPC() &&
1592*f5c631daSSadaf Ebrahimi          !operand.GetBaseRegister().IsPC());
1593*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard, can_use_it);
1594*f5c631daSSadaf Ebrahimi     cmp(cond, rn, operand);
1595*f5c631daSSadaf Ebrahimi   }
Cmp(Register rn,const Operand & operand)1596*f5c631daSSadaf Ebrahimi   void Cmp(Register rn, const Operand& operand) { Cmp(al, rn, operand); }
1597*f5c631daSSadaf Ebrahimi 
Crc32b(Condition cond,Register rd,Register rn,Register rm)1598*f5c631daSSadaf Ebrahimi   void Crc32b(Condition cond, Register rd, Register rn, Register rm) {
1599*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
1600*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1601*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
1602*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1603*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1604*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1605*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
1606*f5c631daSSadaf Ebrahimi     crc32b(cond, rd, rn, rm);
1607*f5c631daSSadaf Ebrahimi   }
Crc32b(Register rd,Register rn,Register rm)1608*f5c631daSSadaf Ebrahimi   void Crc32b(Register rd, Register rn, Register rm) { Crc32b(al, rd, rn, rm); }
1609*f5c631daSSadaf Ebrahimi 
Crc32cb(Condition cond,Register rd,Register rn,Register rm)1610*f5c631daSSadaf Ebrahimi   void Crc32cb(Condition cond, Register rd, Register rn, Register rm) {
1611*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
1612*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1613*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
1614*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1615*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1616*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1617*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
1618*f5c631daSSadaf Ebrahimi     crc32cb(cond, rd, rn, rm);
1619*f5c631daSSadaf Ebrahimi   }
Crc32cb(Register rd,Register rn,Register rm)1620*f5c631daSSadaf Ebrahimi   void Crc32cb(Register rd, Register rn, Register rm) {
1621*f5c631daSSadaf Ebrahimi     Crc32cb(al, rd, rn, rm);
1622*f5c631daSSadaf Ebrahimi   }
1623*f5c631daSSadaf Ebrahimi 
Crc32ch(Condition cond,Register rd,Register rn,Register rm)1624*f5c631daSSadaf Ebrahimi   void Crc32ch(Condition cond, Register rd, Register rn, Register rm) {
1625*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
1626*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1627*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
1628*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1629*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1630*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1631*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
1632*f5c631daSSadaf Ebrahimi     crc32ch(cond, rd, rn, rm);
1633*f5c631daSSadaf Ebrahimi   }
Crc32ch(Register rd,Register rn,Register rm)1634*f5c631daSSadaf Ebrahimi   void Crc32ch(Register rd, Register rn, Register rm) {
1635*f5c631daSSadaf Ebrahimi     Crc32ch(al, rd, rn, rm);
1636*f5c631daSSadaf Ebrahimi   }
1637*f5c631daSSadaf Ebrahimi 
Crc32cw(Condition cond,Register rd,Register rn,Register rm)1638*f5c631daSSadaf Ebrahimi   void Crc32cw(Condition cond, Register rd, Register rn, Register rm) {
1639*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
1640*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1641*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
1642*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1643*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1644*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1645*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
1646*f5c631daSSadaf Ebrahimi     crc32cw(cond, rd, rn, rm);
1647*f5c631daSSadaf Ebrahimi   }
Crc32cw(Register rd,Register rn,Register rm)1648*f5c631daSSadaf Ebrahimi   void Crc32cw(Register rd, Register rn, Register rm) {
1649*f5c631daSSadaf Ebrahimi     Crc32cw(al, rd, rn, rm);
1650*f5c631daSSadaf Ebrahimi   }
1651*f5c631daSSadaf Ebrahimi 
Crc32h(Condition cond,Register rd,Register rn,Register rm)1652*f5c631daSSadaf Ebrahimi   void Crc32h(Condition cond, Register rd, Register rn, Register rm) {
1653*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
1654*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1655*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
1656*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1657*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1658*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1659*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
1660*f5c631daSSadaf Ebrahimi     crc32h(cond, rd, rn, rm);
1661*f5c631daSSadaf Ebrahimi   }
Crc32h(Register rd,Register rn,Register rm)1662*f5c631daSSadaf Ebrahimi   void Crc32h(Register rd, Register rn, Register rm) { Crc32h(al, rd, rn, rm); }
1663*f5c631daSSadaf Ebrahimi 
Crc32w(Condition cond,Register rd,Register rn,Register rm)1664*f5c631daSSadaf Ebrahimi   void Crc32w(Condition cond, Register rd, Register rn, Register rm) {
1665*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
1666*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1667*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
1668*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1669*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1670*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1671*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
1672*f5c631daSSadaf Ebrahimi     crc32w(cond, rd, rn, rm);
1673*f5c631daSSadaf Ebrahimi   }
Crc32w(Register rd,Register rn,Register rm)1674*f5c631daSSadaf Ebrahimi   void Crc32w(Register rd, Register rn, Register rm) { Crc32w(al, rd, rn, rm); }
1675*f5c631daSSadaf Ebrahimi 
Dmb(Condition cond,MemoryBarrier option)1676*f5c631daSSadaf Ebrahimi   void Dmb(Condition cond, MemoryBarrier option) {
1677*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1678*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1679*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1680*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
1681*f5c631daSSadaf Ebrahimi     dmb(cond, option);
1682*f5c631daSSadaf Ebrahimi   }
Dmb(MemoryBarrier option)1683*f5c631daSSadaf Ebrahimi   void Dmb(MemoryBarrier option) { Dmb(al, option); }
1684*f5c631daSSadaf Ebrahimi 
Dsb(Condition cond,MemoryBarrier option)1685*f5c631daSSadaf Ebrahimi   void Dsb(Condition cond, MemoryBarrier option) {
1686*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1687*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1688*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1689*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
1690*f5c631daSSadaf Ebrahimi     dsb(cond, option);
1691*f5c631daSSadaf Ebrahimi   }
Dsb(MemoryBarrier option)1692*f5c631daSSadaf Ebrahimi   void Dsb(MemoryBarrier option) { Dsb(al, option); }
1693*f5c631daSSadaf Ebrahimi 
Eor(Condition cond,Register rd,Register rn,const Operand & operand)1694*f5c631daSSadaf Ebrahimi   void Eor(Condition cond, Register rd, Register rn, const Operand& operand) {
1695*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
1696*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1697*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
1698*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1699*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1700*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1701*f5c631daSSadaf Ebrahimi     if (cond.Is(al) && rd.Is(rn) && operand.IsImmediate()) {
1702*f5c631daSSadaf Ebrahimi       uint32_t immediate = operand.GetImmediate();
1703*f5c631daSSadaf Ebrahimi       if (immediate == 0) {
1704*f5c631daSSadaf Ebrahimi         return;
1705*f5c631daSSadaf Ebrahimi       }
1706*f5c631daSSadaf Ebrahimi       if (immediate == 0xffffffff) {
1707*f5c631daSSadaf Ebrahimi         mvn(rd, rn);
1708*f5c631daSSadaf Ebrahimi         return;
1709*f5c631daSSadaf Ebrahimi       }
1710*f5c631daSSadaf Ebrahimi     }
1711*f5c631daSSadaf Ebrahimi     bool can_use_it =
1712*f5c631daSSadaf Ebrahimi         // EOR<c>{<q>} {<Rdn>,} <Rdn>, <Rm> ; T1
1713*f5c631daSSadaf Ebrahimi         operand.IsPlainRegister() && rd.Is(rn) && rn.IsLow() &&
1714*f5c631daSSadaf Ebrahimi         operand.GetBaseRegister().IsLow();
1715*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard, can_use_it);
1716*f5c631daSSadaf Ebrahimi     eor(cond, rd, rn, operand);
1717*f5c631daSSadaf Ebrahimi   }
Eor(Register rd,Register rn,const Operand & operand)1718*f5c631daSSadaf Ebrahimi   void Eor(Register rd, Register rn, const Operand& operand) {
1719*f5c631daSSadaf Ebrahimi     Eor(al, rd, rn, operand);
1720*f5c631daSSadaf Ebrahimi   }
Eor(FlagsUpdate flags,Condition cond,Register rd,Register rn,const Operand & operand)1721*f5c631daSSadaf Ebrahimi   void Eor(FlagsUpdate flags,
1722*f5c631daSSadaf Ebrahimi            Condition cond,
1723*f5c631daSSadaf Ebrahimi            Register rd,
1724*f5c631daSSadaf Ebrahimi            Register rn,
1725*f5c631daSSadaf Ebrahimi            const Operand& operand) {
1726*f5c631daSSadaf Ebrahimi     switch (flags) {
1727*f5c631daSSadaf Ebrahimi       case LeaveFlags:
1728*f5c631daSSadaf Ebrahimi         Eor(cond, rd, rn, operand);
1729*f5c631daSSadaf Ebrahimi         break;
1730*f5c631daSSadaf Ebrahimi       case SetFlags:
1731*f5c631daSSadaf Ebrahimi         Eors(cond, rd, rn, operand);
1732*f5c631daSSadaf Ebrahimi         break;
1733*f5c631daSSadaf Ebrahimi       case DontCare:
1734*f5c631daSSadaf Ebrahimi         bool setflags_is_smaller = IsUsingT32() && cond.Is(al) && rd.IsLow() &&
1735*f5c631daSSadaf Ebrahimi                                    rn.Is(rd) && operand.IsPlainRegister() &&
1736*f5c631daSSadaf Ebrahimi                                    operand.GetBaseRegister().IsLow();
1737*f5c631daSSadaf Ebrahimi         if (setflags_is_smaller) {
1738*f5c631daSSadaf Ebrahimi           Eors(cond, rd, rn, operand);
1739*f5c631daSSadaf Ebrahimi         } else {
1740*f5c631daSSadaf Ebrahimi           Eor(cond, rd, rn, operand);
1741*f5c631daSSadaf Ebrahimi         }
1742*f5c631daSSadaf Ebrahimi         break;
1743*f5c631daSSadaf Ebrahimi     }
1744*f5c631daSSadaf Ebrahimi   }
Eor(FlagsUpdate flags,Register rd,Register rn,const Operand & operand)1745*f5c631daSSadaf Ebrahimi   void Eor(FlagsUpdate flags,
1746*f5c631daSSadaf Ebrahimi            Register rd,
1747*f5c631daSSadaf Ebrahimi            Register rn,
1748*f5c631daSSadaf Ebrahimi            const Operand& operand) {
1749*f5c631daSSadaf Ebrahimi     Eor(flags, al, rd, rn, operand);
1750*f5c631daSSadaf Ebrahimi   }
1751*f5c631daSSadaf Ebrahimi 
Eors(Condition cond,Register rd,Register rn,const Operand & operand)1752*f5c631daSSadaf Ebrahimi   void Eors(Condition cond, Register rd, Register rn, const Operand& operand) {
1753*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
1754*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1755*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
1756*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1757*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1758*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1759*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
1760*f5c631daSSadaf Ebrahimi     eors(cond, rd, rn, operand);
1761*f5c631daSSadaf Ebrahimi   }
Eors(Register rd,Register rn,const Operand & operand)1762*f5c631daSSadaf Ebrahimi   void Eors(Register rd, Register rn, const Operand& operand) {
1763*f5c631daSSadaf Ebrahimi     Eors(al, rd, rn, operand);
1764*f5c631daSSadaf Ebrahimi   }
1765*f5c631daSSadaf Ebrahimi 
Fldmdbx(Condition cond,Register rn,WriteBack write_back,DRegisterList dreglist)1766*f5c631daSSadaf Ebrahimi   void Fldmdbx(Condition cond,
1767*f5c631daSSadaf Ebrahimi                Register rn,
1768*f5c631daSSadaf Ebrahimi                WriteBack write_back,
1769*f5c631daSSadaf Ebrahimi                DRegisterList dreglist) {
1770*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1771*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(dreglist));
1772*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1773*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1774*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1775*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
1776*f5c631daSSadaf Ebrahimi     fldmdbx(cond, rn, write_back, dreglist);
1777*f5c631daSSadaf Ebrahimi   }
Fldmdbx(Register rn,WriteBack write_back,DRegisterList dreglist)1778*f5c631daSSadaf Ebrahimi   void Fldmdbx(Register rn, WriteBack write_back, DRegisterList dreglist) {
1779*f5c631daSSadaf Ebrahimi     Fldmdbx(al, rn, write_back, dreglist);
1780*f5c631daSSadaf Ebrahimi   }
1781*f5c631daSSadaf Ebrahimi 
Fldmiax(Condition cond,Register rn,WriteBack write_back,DRegisterList dreglist)1782*f5c631daSSadaf Ebrahimi   void Fldmiax(Condition cond,
1783*f5c631daSSadaf Ebrahimi                Register rn,
1784*f5c631daSSadaf Ebrahimi                WriteBack write_back,
1785*f5c631daSSadaf Ebrahimi                DRegisterList dreglist) {
1786*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1787*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(dreglist));
1788*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1789*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1790*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1791*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
1792*f5c631daSSadaf Ebrahimi     fldmiax(cond, rn, write_back, dreglist);
1793*f5c631daSSadaf Ebrahimi   }
Fldmiax(Register rn,WriteBack write_back,DRegisterList dreglist)1794*f5c631daSSadaf Ebrahimi   void Fldmiax(Register rn, WriteBack write_back, DRegisterList dreglist) {
1795*f5c631daSSadaf Ebrahimi     Fldmiax(al, rn, write_back, dreglist);
1796*f5c631daSSadaf Ebrahimi   }
1797*f5c631daSSadaf Ebrahimi 
Fstmdbx(Condition cond,Register rn,WriteBack write_back,DRegisterList dreglist)1798*f5c631daSSadaf Ebrahimi   void Fstmdbx(Condition cond,
1799*f5c631daSSadaf Ebrahimi                Register rn,
1800*f5c631daSSadaf Ebrahimi                WriteBack write_back,
1801*f5c631daSSadaf Ebrahimi                DRegisterList dreglist) {
1802*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1803*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(dreglist));
1804*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1805*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1806*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1807*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
1808*f5c631daSSadaf Ebrahimi     fstmdbx(cond, rn, write_back, dreglist);
1809*f5c631daSSadaf Ebrahimi   }
Fstmdbx(Register rn,WriteBack write_back,DRegisterList dreglist)1810*f5c631daSSadaf Ebrahimi   void Fstmdbx(Register rn, WriteBack write_back, DRegisterList dreglist) {
1811*f5c631daSSadaf Ebrahimi     Fstmdbx(al, rn, write_back, dreglist);
1812*f5c631daSSadaf Ebrahimi   }
1813*f5c631daSSadaf Ebrahimi 
Fstmiax(Condition cond,Register rn,WriteBack write_back,DRegisterList dreglist)1814*f5c631daSSadaf Ebrahimi   void Fstmiax(Condition cond,
1815*f5c631daSSadaf Ebrahimi                Register rn,
1816*f5c631daSSadaf Ebrahimi                WriteBack write_back,
1817*f5c631daSSadaf Ebrahimi                DRegisterList dreglist) {
1818*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1819*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(dreglist));
1820*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1821*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1822*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1823*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
1824*f5c631daSSadaf Ebrahimi     fstmiax(cond, rn, write_back, dreglist);
1825*f5c631daSSadaf Ebrahimi   }
Fstmiax(Register rn,WriteBack write_back,DRegisterList dreglist)1826*f5c631daSSadaf Ebrahimi   void Fstmiax(Register rn, WriteBack write_back, DRegisterList dreglist) {
1827*f5c631daSSadaf Ebrahimi     Fstmiax(al, rn, write_back, dreglist);
1828*f5c631daSSadaf Ebrahimi   }
1829*f5c631daSSadaf Ebrahimi 
Hlt(Condition cond,uint32_t imm)1830*f5c631daSSadaf Ebrahimi   void Hlt(Condition cond, uint32_t imm) {
1831*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1832*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1833*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1834*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
1835*f5c631daSSadaf Ebrahimi     hlt(cond, imm);
1836*f5c631daSSadaf Ebrahimi   }
Hlt(uint32_t imm)1837*f5c631daSSadaf Ebrahimi   void Hlt(uint32_t imm) { Hlt(al, imm); }
1838*f5c631daSSadaf Ebrahimi 
Hvc(Condition cond,uint32_t imm)1839*f5c631daSSadaf Ebrahimi   void Hvc(Condition cond, uint32_t imm) {
1840*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1841*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1842*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1843*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
1844*f5c631daSSadaf Ebrahimi     hvc(cond, imm);
1845*f5c631daSSadaf Ebrahimi   }
Hvc(uint32_t imm)1846*f5c631daSSadaf Ebrahimi   void Hvc(uint32_t imm) { Hvc(al, imm); }
1847*f5c631daSSadaf Ebrahimi 
Isb(Condition cond,MemoryBarrier option)1848*f5c631daSSadaf Ebrahimi   void Isb(Condition cond, MemoryBarrier option) {
1849*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1850*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1851*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1852*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
1853*f5c631daSSadaf Ebrahimi     isb(cond, option);
1854*f5c631daSSadaf Ebrahimi   }
Isb(MemoryBarrier option)1855*f5c631daSSadaf Ebrahimi   void Isb(MemoryBarrier option) { Isb(al, option); }
1856*f5c631daSSadaf Ebrahimi 
Lda(Condition cond,Register rt,const MemOperand & operand)1857*f5c631daSSadaf Ebrahimi   void Lda(Condition cond, Register rt, const MemOperand& operand) {
1858*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
1859*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
1860*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1861*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1862*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1863*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
1864*f5c631daSSadaf Ebrahimi     lda(cond, rt, operand);
1865*f5c631daSSadaf Ebrahimi   }
Lda(Register rt,const MemOperand & operand)1866*f5c631daSSadaf Ebrahimi   void Lda(Register rt, const MemOperand& operand) { Lda(al, rt, operand); }
1867*f5c631daSSadaf Ebrahimi 
Ldab(Condition cond,Register rt,const MemOperand & operand)1868*f5c631daSSadaf Ebrahimi   void Ldab(Condition cond, Register rt, const MemOperand& operand) {
1869*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
1870*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
1871*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1872*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1873*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1874*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
1875*f5c631daSSadaf Ebrahimi     ldab(cond, rt, operand);
1876*f5c631daSSadaf Ebrahimi   }
Ldab(Register rt,const MemOperand & operand)1877*f5c631daSSadaf Ebrahimi   void Ldab(Register rt, const MemOperand& operand) { Ldab(al, rt, operand); }
1878*f5c631daSSadaf Ebrahimi 
Ldaex(Condition cond,Register rt,const MemOperand & operand)1879*f5c631daSSadaf Ebrahimi   void Ldaex(Condition cond, Register rt, const MemOperand& operand) {
1880*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
1881*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
1882*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1883*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1884*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1885*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
1886*f5c631daSSadaf Ebrahimi     ldaex(cond, rt, operand);
1887*f5c631daSSadaf Ebrahimi   }
Ldaex(Register rt,const MemOperand & operand)1888*f5c631daSSadaf Ebrahimi   void Ldaex(Register rt, const MemOperand& operand) { Ldaex(al, rt, operand); }
1889*f5c631daSSadaf Ebrahimi 
Ldaexb(Condition cond,Register rt,const MemOperand & operand)1890*f5c631daSSadaf Ebrahimi   void Ldaexb(Condition cond, Register rt, const MemOperand& operand) {
1891*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
1892*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
1893*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1894*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1895*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1896*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
1897*f5c631daSSadaf Ebrahimi     ldaexb(cond, rt, operand);
1898*f5c631daSSadaf Ebrahimi   }
Ldaexb(Register rt,const MemOperand & operand)1899*f5c631daSSadaf Ebrahimi   void Ldaexb(Register rt, const MemOperand& operand) {
1900*f5c631daSSadaf Ebrahimi     Ldaexb(al, rt, operand);
1901*f5c631daSSadaf Ebrahimi   }
1902*f5c631daSSadaf Ebrahimi 
Ldaexd(Condition cond,Register rt,Register rt2,const MemOperand & operand)1903*f5c631daSSadaf Ebrahimi   void Ldaexd(Condition cond,
1904*f5c631daSSadaf Ebrahimi               Register rt,
1905*f5c631daSSadaf Ebrahimi               Register rt2,
1906*f5c631daSSadaf Ebrahimi               const MemOperand& operand) {
1907*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
1908*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt2));
1909*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
1910*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1911*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1912*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1913*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
1914*f5c631daSSadaf Ebrahimi     ldaexd(cond, rt, rt2, operand);
1915*f5c631daSSadaf Ebrahimi   }
Ldaexd(Register rt,Register rt2,const MemOperand & operand)1916*f5c631daSSadaf Ebrahimi   void Ldaexd(Register rt, Register rt2, const MemOperand& operand) {
1917*f5c631daSSadaf Ebrahimi     Ldaexd(al, rt, rt2, operand);
1918*f5c631daSSadaf Ebrahimi   }
1919*f5c631daSSadaf Ebrahimi 
Ldaexh(Condition cond,Register rt,const MemOperand & operand)1920*f5c631daSSadaf Ebrahimi   void Ldaexh(Condition cond, Register rt, const MemOperand& operand) {
1921*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
1922*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
1923*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1924*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1925*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1926*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
1927*f5c631daSSadaf Ebrahimi     ldaexh(cond, rt, operand);
1928*f5c631daSSadaf Ebrahimi   }
Ldaexh(Register rt,const MemOperand & operand)1929*f5c631daSSadaf Ebrahimi   void Ldaexh(Register rt, const MemOperand& operand) {
1930*f5c631daSSadaf Ebrahimi     Ldaexh(al, rt, operand);
1931*f5c631daSSadaf Ebrahimi   }
1932*f5c631daSSadaf Ebrahimi 
Ldah(Condition cond,Register rt,const MemOperand & operand)1933*f5c631daSSadaf Ebrahimi   void Ldah(Condition cond, Register rt, const MemOperand& operand) {
1934*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
1935*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
1936*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1937*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1938*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1939*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
1940*f5c631daSSadaf Ebrahimi     ldah(cond, rt, operand);
1941*f5c631daSSadaf Ebrahimi   }
Ldah(Register rt,const MemOperand & operand)1942*f5c631daSSadaf Ebrahimi   void Ldah(Register rt, const MemOperand& operand) { Ldah(al, rt, operand); }
1943*f5c631daSSadaf Ebrahimi 
Ldm(Condition cond,Register rn,WriteBack write_back,RegisterList registers)1944*f5c631daSSadaf Ebrahimi   void Ldm(Condition cond,
1945*f5c631daSSadaf Ebrahimi            Register rn,
1946*f5c631daSSadaf Ebrahimi            WriteBack write_back,
1947*f5c631daSSadaf Ebrahimi            RegisterList registers) {
1948*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1949*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
1950*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1951*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1952*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1953*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
1954*f5c631daSSadaf Ebrahimi     ldm(cond, rn, write_back, registers);
1955*f5c631daSSadaf Ebrahimi   }
Ldm(Register rn,WriteBack write_back,RegisterList registers)1956*f5c631daSSadaf Ebrahimi   void Ldm(Register rn, WriteBack write_back, RegisterList registers) {
1957*f5c631daSSadaf Ebrahimi     Ldm(al, rn, write_back, registers);
1958*f5c631daSSadaf Ebrahimi   }
1959*f5c631daSSadaf Ebrahimi 
Ldmda(Condition cond,Register rn,WriteBack write_back,RegisterList registers)1960*f5c631daSSadaf Ebrahimi   void Ldmda(Condition cond,
1961*f5c631daSSadaf Ebrahimi              Register rn,
1962*f5c631daSSadaf Ebrahimi              WriteBack write_back,
1963*f5c631daSSadaf Ebrahimi              RegisterList registers) {
1964*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1965*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
1966*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1967*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1968*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1969*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
1970*f5c631daSSadaf Ebrahimi     ldmda(cond, rn, write_back, registers);
1971*f5c631daSSadaf Ebrahimi   }
Ldmda(Register rn,WriteBack write_back,RegisterList registers)1972*f5c631daSSadaf Ebrahimi   void Ldmda(Register rn, WriteBack write_back, RegisterList registers) {
1973*f5c631daSSadaf Ebrahimi     Ldmda(al, rn, write_back, registers);
1974*f5c631daSSadaf Ebrahimi   }
1975*f5c631daSSadaf Ebrahimi 
Ldmdb(Condition cond,Register rn,WriteBack write_back,RegisterList registers)1976*f5c631daSSadaf Ebrahimi   void Ldmdb(Condition cond,
1977*f5c631daSSadaf Ebrahimi              Register rn,
1978*f5c631daSSadaf Ebrahimi              WriteBack write_back,
1979*f5c631daSSadaf Ebrahimi              RegisterList registers) {
1980*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1981*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
1982*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1983*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
1984*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
1985*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
1986*f5c631daSSadaf Ebrahimi     ldmdb(cond, rn, write_back, registers);
1987*f5c631daSSadaf Ebrahimi   }
Ldmdb(Register rn,WriteBack write_back,RegisterList registers)1988*f5c631daSSadaf Ebrahimi   void Ldmdb(Register rn, WriteBack write_back, RegisterList registers) {
1989*f5c631daSSadaf Ebrahimi     Ldmdb(al, rn, write_back, registers);
1990*f5c631daSSadaf Ebrahimi   }
1991*f5c631daSSadaf Ebrahimi 
Ldmea(Condition cond,Register rn,WriteBack write_back,RegisterList registers)1992*f5c631daSSadaf Ebrahimi   void Ldmea(Condition cond,
1993*f5c631daSSadaf Ebrahimi              Register rn,
1994*f5c631daSSadaf Ebrahimi              WriteBack write_back,
1995*f5c631daSSadaf Ebrahimi              RegisterList registers) {
1996*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
1997*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
1998*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
1999*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2000*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2001*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
2002*f5c631daSSadaf Ebrahimi     ldmea(cond, rn, write_back, registers);
2003*f5c631daSSadaf Ebrahimi   }
Ldmea(Register rn,WriteBack write_back,RegisterList registers)2004*f5c631daSSadaf Ebrahimi   void Ldmea(Register rn, WriteBack write_back, RegisterList registers) {
2005*f5c631daSSadaf Ebrahimi     Ldmea(al, rn, write_back, registers);
2006*f5c631daSSadaf Ebrahimi   }
2007*f5c631daSSadaf Ebrahimi 
Ldmed(Condition cond,Register rn,WriteBack write_back,RegisterList registers)2008*f5c631daSSadaf Ebrahimi   void Ldmed(Condition cond,
2009*f5c631daSSadaf Ebrahimi              Register rn,
2010*f5c631daSSadaf Ebrahimi              WriteBack write_back,
2011*f5c631daSSadaf Ebrahimi              RegisterList registers) {
2012*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
2013*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
2014*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2015*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2016*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2017*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
2018*f5c631daSSadaf Ebrahimi     ldmed(cond, rn, write_back, registers);
2019*f5c631daSSadaf Ebrahimi   }
Ldmed(Register rn,WriteBack write_back,RegisterList registers)2020*f5c631daSSadaf Ebrahimi   void Ldmed(Register rn, WriteBack write_back, RegisterList registers) {
2021*f5c631daSSadaf Ebrahimi     Ldmed(al, rn, write_back, registers);
2022*f5c631daSSadaf Ebrahimi   }
2023*f5c631daSSadaf Ebrahimi 
Ldmfa(Condition cond,Register rn,WriteBack write_back,RegisterList registers)2024*f5c631daSSadaf Ebrahimi   void Ldmfa(Condition cond,
2025*f5c631daSSadaf Ebrahimi              Register rn,
2026*f5c631daSSadaf Ebrahimi              WriteBack write_back,
2027*f5c631daSSadaf Ebrahimi              RegisterList registers) {
2028*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
2029*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
2030*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2031*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2032*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2033*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
2034*f5c631daSSadaf Ebrahimi     ldmfa(cond, rn, write_back, registers);
2035*f5c631daSSadaf Ebrahimi   }
Ldmfa(Register rn,WriteBack write_back,RegisterList registers)2036*f5c631daSSadaf Ebrahimi   void Ldmfa(Register rn, WriteBack write_back, RegisterList registers) {
2037*f5c631daSSadaf Ebrahimi     Ldmfa(al, rn, write_back, registers);
2038*f5c631daSSadaf Ebrahimi   }
2039*f5c631daSSadaf Ebrahimi 
Ldmfd(Condition cond,Register rn,WriteBack write_back,RegisterList registers)2040*f5c631daSSadaf Ebrahimi   void Ldmfd(Condition cond,
2041*f5c631daSSadaf Ebrahimi              Register rn,
2042*f5c631daSSadaf Ebrahimi              WriteBack write_back,
2043*f5c631daSSadaf Ebrahimi              RegisterList registers) {
2044*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
2045*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
2046*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2047*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2048*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2049*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
2050*f5c631daSSadaf Ebrahimi     ldmfd(cond, rn, write_back, registers);
2051*f5c631daSSadaf Ebrahimi   }
Ldmfd(Register rn,WriteBack write_back,RegisterList registers)2052*f5c631daSSadaf Ebrahimi   void Ldmfd(Register rn, WriteBack write_back, RegisterList registers) {
2053*f5c631daSSadaf Ebrahimi     Ldmfd(al, rn, write_back, registers);
2054*f5c631daSSadaf Ebrahimi   }
2055*f5c631daSSadaf Ebrahimi 
Ldmib(Condition cond,Register rn,WriteBack write_back,RegisterList registers)2056*f5c631daSSadaf Ebrahimi   void Ldmib(Condition cond,
2057*f5c631daSSadaf Ebrahimi              Register rn,
2058*f5c631daSSadaf Ebrahimi              WriteBack write_back,
2059*f5c631daSSadaf Ebrahimi              RegisterList registers) {
2060*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
2061*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
2062*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2063*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2064*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2065*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
2066*f5c631daSSadaf Ebrahimi     ldmib(cond, rn, write_back, registers);
2067*f5c631daSSadaf Ebrahimi   }
Ldmib(Register rn,WriteBack write_back,RegisterList registers)2068*f5c631daSSadaf Ebrahimi   void Ldmib(Register rn, WriteBack write_back, RegisterList registers) {
2069*f5c631daSSadaf Ebrahimi     Ldmib(al, rn, write_back, registers);
2070*f5c631daSSadaf Ebrahimi   }
2071*f5c631daSSadaf Ebrahimi 
Ldr(Condition cond,Register rt,const MemOperand & operand)2072*f5c631daSSadaf Ebrahimi   void Ldr(Condition cond, Register rt, const MemOperand& operand) {
2073*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
2074*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2075*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2076*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2077*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2078*f5c631daSSadaf Ebrahimi     bool can_use_it =
2079*f5c631daSSadaf Ebrahimi         // LDR{<c>}{<q>} <Rt>, [<Rn> {, #{+}<imm>}] ; T1
2080*f5c631daSSadaf Ebrahimi         (operand.IsImmediate() && rt.IsLow() &&
2081*f5c631daSSadaf Ebrahimi          operand.GetBaseRegister().IsLow() &&
2082*f5c631daSSadaf Ebrahimi          operand.IsOffsetImmediateWithinRange(0, 124, 4) &&
2083*f5c631daSSadaf Ebrahimi          (operand.GetAddrMode() == Offset)) ||
2084*f5c631daSSadaf Ebrahimi         // LDR{<c>}{<q>} <Rt>, [SP{, #{+}<imm>}] ; T2
2085*f5c631daSSadaf Ebrahimi         (operand.IsImmediate() && rt.IsLow() &&
2086*f5c631daSSadaf Ebrahimi          operand.GetBaseRegister().IsSP() &&
2087*f5c631daSSadaf Ebrahimi          operand.IsOffsetImmediateWithinRange(0, 1020, 4) &&
2088*f5c631daSSadaf Ebrahimi          (operand.GetAddrMode() == Offset)) ||
2089*f5c631daSSadaf Ebrahimi         // LDR{<c>}{<q>} <Rt>, [<Rn>, {+}<Rm>] ; T1
2090*f5c631daSSadaf Ebrahimi         (operand.IsPlainRegister() && rt.IsLow() &&
2091*f5c631daSSadaf Ebrahimi          operand.GetBaseRegister().IsLow() &&
2092*f5c631daSSadaf Ebrahimi          operand.GetOffsetRegister().IsLow() && operand.GetSign().IsPlus() &&
2093*f5c631daSSadaf Ebrahimi          (operand.GetAddrMode() == Offset));
2094*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard, can_use_it);
2095*f5c631daSSadaf Ebrahimi     ldr(cond, rt, operand);
2096*f5c631daSSadaf Ebrahimi   }
Ldr(Register rt,const MemOperand & operand)2097*f5c631daSSadaf Ebrahimi   void Ldr(Register rt, const MemOperand& operand) { Ldr(al, rt, operand); }
2098*f5c631daSSadaf Ebrahimi 
2099*f5c631daSSadaf Ebrahimi 
Ldrb(Condition cond,Register rt,const MemOperand & operand)2100*f5c631daSSadaf Ebrahimi   void Ldrb(Condition cond, Register rt, const MemOperand& operand) {
2101*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
2102*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2103*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2104*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2105*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2106*f5c631daSSadaf Ebrahimi     bool can_use_it =
2107*f5c631daSSadaf Ebrahimi         // LDRB{<c>}{<q>} <Rt>, [<Rn> {, #{+}<imm>}] ; T1
2108*f5c631daSSadaf Ebrahimi         (operand.IsImmediate() && rt.IsLow() &&
2109*f5c631daSSadaf Ebrahimi          operand.GetBaseRegister().IsLow() &&
2110*f5c631daSSadaf Ebrahimi          operand.IsOffsetImmediateWithinRange(0, 31) &&
2111*f5c631daSSadaf Ebrahimi          (operand.GetAddrMode() == Offset)) ||
2112*f5c631daSSadaf Ebrahimi         // LDRB{<c>}{<q>} <Rt>, [<Rn>, {+}<Rm>] ; T1
2113*f5c631daSSadaf Ebrahimi         (operand.IsPlainRegister() && rt.IsLow() &&
2114*f5c631daSSadaf Ebrahimi          operand.GetBaseRegister().IsLow() &&
2115*f5c631daSSadaf Ebrahimi          operand.GetOffsetRegister().IsLow() && operand.GetSign().IsPlus() &&
2116*f5c631daSSadaf Ebrahimi          (operand.GetAddrMode() == Offset));
2117*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard, can_use_it);
2118*f5c631daSSadaf Ebrahimi     ldrb(cond, rt, operand);
2119*f5c631daSSadaf Ebrahimi   }
Ldrb(Register rt,const MemOperand & operand)2120*f5c631daSSadaf Ebrahimi   void Ldrb(Register rt, const MemOperand& operand) { Ldrb(al, rt, operand); }
2121*f5c631daSSadaf Ebrahimi 
2122*f5c631daSSadaf Ebrahimi 
Ldrd(Condition cond,Register rt,Register rt2,const MemOperand & operand)2123*f5c631daSSadaf Ebrahimi   void Ldrd(Condition cond,
2124*f5c631daSSadaf Ebrahimi             Register rt,
2125*f5c631daSSadaf Ebrahimi             Register rt2,
2126*f5c631daSSadaf Ebrahimi             const MemOperand& operand) {
2127*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
2128*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt2));
2129*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2130*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2131*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2132*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2133*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
2134*f5c631daSSadaf Ebrahimi     ldrd(cond, rt, rt2, operand);
2135*f5c631daSSadaf Ebrahimi   }
Ldrd(Register rt,Register rt2,const MemOperand & operand)2136*f5c631daSSadaf Ebrahimi   void Ldrd(Register rt, Register rt2, const MemOperand& operand) {
2137*f5c631daSSadaf Ebrahimi     Ldrd(al, rt, rt2, operand);
2138*f5c631daSSadaf Ebrahimi   }
2139*f5c631daSSadaf Ebrahimi 
2140*f5c631daSSadaf Ebrahimi 
Ldrex(Condition cond,Register rt,const MemOperand & operand)2141*f5c631daSSadaf Ebrahimi   void Ldrex(Condition cond, Register rt, const MemOperand& operand) {
2142*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
2143*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2144*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2145*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2146*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2147*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
2148*f5c631daSSadaf Ebrahimi     ldrex(cond, rt, operand);
2149*f5c631daSSadaf Ebrahimi   }
Ldrex(Register rt,const MemOperand & operand)2150*f5c631daSSadaf Ebrahimi   void Ldrex(Register rt, const MemOperand& operand) { Ldrex(al, rt, operand); }
2151*f5c631daSSadaf Ebrahimi 
Ldrexb(Condition cond,Register rt,const MemOperand & operand)2152*f5c631daSSadaf Ebrahimi   void Ldrexb(Condition cond, Register rt, const MemOperand& operand) {
2153*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
2154*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2155*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2156*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2157*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2158*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
2159*f5c631daSSadaf Ebrahimi     ldrexb(cond, rt, operand);
2160*f5c631daSSadaf Ebrahimi   }
Ldrexb(Register rt,const MemOperand & operand)2161*f5c631daSSadaf Ebrahimi   void Ldrexb(Register rt, const MemOperand& operand) {
2162*f5c631daSSadaf Ebrahimi     Ldrexb(al, rt, operand);
2163*f5c631daSSadaf Ebrahimi   }
2164*f5c631daSSadaf Ebrahimi 
Ldrexd(Condition cond,Register rt,Register rt2,const MemOperand & operand)2165*f5c631daSSadaf Ebrahimi   void Ldrexd(Condition cond,
2166*f5c631daSSadaf Ebrahimi               Register rt,
2167*f5c631daSSadaf Ebrahimi               Register rt2,
2168*f5c631daSSadaf Ebrahimi               const MemOperand& operand) {
2169*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
2170*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt2));
2171*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2172*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2173*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2174*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2175*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
2176*f5c631daSSadaf Ebrahimi     ldrexd(cond, rt, rt2, operand);
2177*f5c631daSSadaf Ebrahimi   }
Ldrexd(Register rt,Register rt2,const MemOperand & operand)2178*f5c631daSSadaf Ebrahimi   void Ldrexd(Register rt, Register rt2, const MemOperand& operand) {
2179*f5c631daSSadaf Ebrahimi     Ldrexd(al, rt, rt2, operand);
2180*f5c631daSSadaf Ebrahimi   }
2181*f5c631daSSadaf Ebrahimi 
Ldrexh(Condition cond,Register rt,const MemOperand & operand)2182*f5c631daSSadaf Ebrahimi   void Ldrexh(Condition cond, Register rt, const MemOperand& operand) {
2183*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
2184*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2185*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2186*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2187*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2188*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
2189*f5c631daSSadaf Ebrahimi     ldrexh(cond, rt, operand);
2190*f5c631daSSadaf Ebrahimi   }
Ldrexh(Register rt,const MemOperand & operand)2191*f5c631daSSadaf Ebrahimi   void Ldrexh(Register rt, const MemOperand& operand) {
2192*f5c631daSSadaf Ebrahimi     Ldrexh(al, rt, operand);
2193*f5c631daSSadaf Ebrahimi   }
2194*f5c631daSSadaf Ebrahimi 
Ldrh(Condition cond,Register rt,const MemOperand & operand)2195*f5c631daSSadaf Ebrahimi   void Ldrh(Condition cond, Register rt, const MemOperand& operand) {
2196*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
2197*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2198*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2199*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2200*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2201*f5c631daSSadaf Ebrahimi     bool can_use_it =
2202*f5c631daSSadaf Ebrahimi         // LDRH{<c>}{<q>} <Rt>, [<Rn> {, #{+}<imm>}] ; T1
2203*f5c631daSSadaf Ebrahimi         (operand.IsImmediate() && rt.IsLow() &&
2204*f5c631daSSadaf Ebrahimi          operand.GetBaseRegister().IsLow() &&
2205*f5c631daSSadaf Ebrahimi          operand.IsOffsetImmediateWithinRange(0, 62, 2) &&
2206*f5c631daSSadaf Ebrahimi          (operand.GetAddrMode() == Offset)) ||
2207*f5c631daSSadaf Ebrahimi         // LDRH{<c>}{<q>} <Rt>, [<Rn>, {+}<Rm>] ; T1
2208*f5c631daSSadaf Ebrahimi         (operand.IsPlainRegister() && rt.IsLow() &&
2209*f5c631daSSadaf Ebrahimi          operand.GetBaseRegister().IsLow() &&
2210*f5c631daSSadaf Ebrahimi          operand.GetOffsetRegister().IsLow() && operand.GetSign().IsPlus() &&
2211*f5c631daSSadaf Ebrahimi          (operand.GetAddrMode() == Offset));
2212*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard, can_use_it);
2213*f5c631daSSadaf Ebrahimi     ldrh(cond, rt, operand);
2214*f5c631daSSadaf Ebrahimi   }
Ldrh(Register rt,const MemOperand & operand)2215*f5c631daSSadaf Ebrahimi   void Ldrh(Register rt, const MemOperand& operand) { Ldrh(al, rt, operand); }
2216*f5c631daSSadaf Ebrahimi 
2217*f5c631daSSadaf Ebrahimi 
Ldrsb(Condition cond,Register rt,const MemOperand & operand)2218*f5c631daSSadaf Ebrahimi   void Ldrsb(Condition cond, Register rt, const MemOperand& operand) {
2219*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
2220*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2221*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2222*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2223*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2224*f5c631daSSadaf Ebrahimi     bool can_use_it =
2225*f5c631daSSadaf Ebrahimi         // LDRSB{<c>}{<q>} <Rt>, [<Rn>, {+}<Rm>] ; T1
2226*f5c631daSSadaf Ebrahimi         operand.IsPlainRegister() && rt.IsLow() &&
2227*f5c631daSSadaf Ebrahimi         operand.GetBaseRegister().IsLow() &&
2228*f5c631daSSadaf Ebrahimi         operand.GetOffsetRegister().IsLow() && operand.GetSign().IsPlus() &&
2229*f5c631daSSadaf Ebrahimi         (operand.GetAddrMode() == Offset);
2230*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard, can_use_it);
2231*f5c631daSSadaf Ebrahimi     ldrsb(cond, rt, operand);
2232*f5c631daSSadaf Ebrahimi   }
Ldrsb(Register rt,const MemOperand & operand)2233*f5c631daSSadaf Ebrahimi   void Ldrsb(Register rt, const MemOperand& operand) { Ldrsb(al, rt, operand); }
2234*f5c631daSSadaf Ebrahimi 
2235*f5c631daSSadaf Ebrahimi 
Ldrsh(Condition cond,Register rt,const MemOperand & operand)2236*f5c631daSSadaf Ebrahimi   void Ldrsh(Condition cond, Register rt, const MemOperand& operand) {
2237*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
2238*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2239*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2240*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2241*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2242*f5c631daSSadaf Ebrahimi     bool can_use_it =
2243*f5c631daSSadaf Ebrahimi         // LDRSH{<c>}{<q>} <Rt>, [<Rn>, {+}<Rm>] ; T1
2244*f5c631daSSadaf Ebrahimi         operand.IsPlainRegister() && rt.IsLow() &&
2245*f5c631daSSadaf Ebrahimi         operand.GetBaseRegister().IsLow() &&
2246*f5c631daSSadaf Ebrahimi         operand.GetOffsetRegister().IsLow() && operand.GetSign().IsPlus() &&
2247*f5c631daSSadaf Ebrahimi         (operand.GetAddrMode() == Offset);
2248*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard, can_use_it);
2249*f5c631daSSadaf Ebrahimi     ldrsh(cond, rt, operand);
2250*f5c631daSSadaf Ebrahimi   }
Ldrsh(Register rt,const MemOperand & operand)2251*f5c631daSSadaf Ebrahimi   void Ldrsh(Register rt, const MemOperand& operand) { Ldrsh(al, rt, operand); }
2252*f5c631daSSadaf Ebrahimi 
2253*f5c631daSSadaf Ebrahimi 
Lsl(Condition cond,Register rd,Register rm,const Operand & operand)2254*f5c631daSSadaf Ebrahimi   void Lsl(Condition cond, Register rd, Register rm, const Operand& operand) {
2255*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2256*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
2257*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2258*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2259*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2260*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2261*f5c631daSSadaf Ebrahimi     bool can_use_it =
2262*f5c631daSSadaf Ebrahimi         // LSL<c>{<q>} {<Rd>,} <Rm>, #<imm> ; T2
2263*f5c631daSSadaf Ebrahimi         (operand.IsImmediate() && (operand.GetImmediate() >= 1) &&
2264*f5c631daSSadaf Ebrahimi          (operand.GetImmediate() <= 31) && rd.IsLow() && rm.IsLow()) ||
2265*f5c631daSSadaf Ebrahimi         // LSL<c>{<q>} {<Rdm>,} <Rdm>, <Rs> ; T1
2266*f5c631daSSadaf Ebrahimi         (operand.IsPlainRegister() && rd.Is(rm) && rd.IsLow() &&
2267*f5c631daSSadaf Ebrahimi          operand.GetBaseRegister().IsLow());
2268*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard, can_use_it);
2269*f5c631daSSadaf Ebrahimi     lsl(cond, rd, rm, operand);
2270*f5c631daSSadaf Ebrahimi   }
Lsl(Register rd,Register rm,const Operand & operand)2271*f5c631daSSadaf Ebrahimi   void Lsl(Register rd, Register rm, const Operand& operand) {
2272*f5c631daSSadaf Ebrahimi     Lsl(al, rd, rm, operand);
2273*f5c631daSSadaf Ebrahimi   }
Lsl(FlagsUpdate flags,Condition cond,Register rd,Register rm,const Operand & operand)2274*f5c631daSSadaf Ebrahimi   void Lsl(FlagsUpdate flags,
2275*f5c631daSSadaf Ebrahimi            Condition cond,
2276*f5c631daSSadaf Ebrahimi            Register rd,
2277*f5c631daSSadaf Ebrahimi            Register rm,
2278*f5c631daSSadaf Ebrahimi            const Operand& operand) {
2279*f5c631daSSadaf Ebrahimi     switch (flags) {
2280*f5c631daSSadaf Ebrahimi       case LeaveFlags:
2281*f5c631daSSadaf Ebrahimi         Lsl(cond, rd, rm, operand);
2282*f5c631daSSadaf Ebrahimi         break;
2283*f5c631daSSadaf Ebrahimi       case SetFlags:
2284*f5c631daSSadaf Ebrahimi         Lsls(cond, rd, rm, operand);
2285*f5c631daSSadaf Ebrahimi         break;
2286*f5c631daSSadaf Ebrahimi       case DontCare:
2287*f5c631daSSadaf Ebrahimi         bool setflags_is_smaller =
2288*f5c631daSSadaf Ebrahimi             IsUsingT32() && cond.Is(al) && rd.IsLow() && rm.IsLow() &&
2289*f5c631daSSadaf Ebrahimi             ((operand.IsImmediate() && (operand.GetImmediate() >= 1) &&
2290*f5c631daSSadaf Ebrahimi               (operand.GetImmediate() < 32)) ||
2291*f5c631daSSadaf Ebrahimi              (operand.IsPlainRegister() && rd.Is(rm)));
2292*f5c631daSSadaf Ebrahimi         if (setflags_is_smaller) {
2293*f5c631daSSadaf Ebrahimi           Lsls(cond, rd, rm, operand);
2294*f5c631daSSadaf Ebrahimi         } else {
2295*f5c631daSSadaf Ebrahimi           Lsl(cond, rd, rm, operand);
2296*f5c631daSSadaf Ebrahimi         }
2297*f5c631daSSadaf Ebrahimi         break;
2298*f5c631daSSadaf Ebrahimi     }
2299*f5c631daSSadaf Ebrahimi   }
Lsl(FlagsUpdate flags,Register rd,Register rm,const Operand & operand)2300*f5c631daSSadaf Ebrahimi   void Lsl(FlagsUpdate flags,
2301*f5c631daSSadaf Ebrahimi            Register rd,
2302*f5c631daSSadaf Ebrahimi            Register rm,
2303*f5c631daSSadaf Ebrahimi            const Operand& operand) {
2304*f5c631daSSadaf Ebrahimi     Lsl(flags, al, rd, rm, operand);
2305*f5c631daSSadaf Ebrahimi   }
2306*f5c631daSSadaf Ebrahimi 
Lsls(Condition cond,Register rd,Register rm,const Operand & operand)2307*f5c631daSSadaf Ebrahimi   void Lsls(Condition cond, Register rd, Register rm, const Operand& operand) {
2308*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2309*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
2310*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2311*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2312*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2313*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2314*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
2315*f5c631daSSadaf Ebrahimi     lsls(cond, rd, rm, operand);
2316*f5c631daSSadaf Ebrahimi   }
Lsls(Register rd,Register rm,const Operand & operand)2317*f5c631daSSadaf Ebrahimi   void Lsls(Register rd, Register rm, const Operand& operand) {
2318*f5c631daSSadaf Ebrahimi     Lsls(al, rd, rm, operand);
2319*f5c631daSSadaf Ebrahimi   }
2320*f5c631daSSadaf Ebrahimi 
Lsr(Condition cond,Register rd,Register rm,const Operand & operand)2321*f5c631daSSadaf Ebrahimi   void Lsr(Condition cond, Register rd, Register rm, const Operand& operand) {
2322*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2323*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
2324*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2325*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2326*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2327*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2328*f5c631daSSadaf Ebrahimi     bool can_use_it =
2329*f5c631daSSadaf Ebrahimi         // LSR<c>{<q>} {<Rd>,} <Rm>, #<imm> ; T2
2330*f5c631daSSadaf Ebrahimi         (operand.IsImmediate() && (operand.GetImmediate() >= 1) &&
2331*f5c631daSSadaf Ebrahimi          (operand.GetImmediate() <= 32) && rd.IsLow() && rm.IsLow()) ||
2332*f5c631daSSadaf Ebrahimi         // LSR<c>{<q>} {<Rdm>,} <Rdm>, <Rs> ; T1
2333*f5c631daSSadaf Ebrahimi         (operand.IsPlainRegister() && rd.Is(rm) && rd.IsLow() &&
2334*f5c631daSSadaf Ebrahimi          operand.GetBaseRegister().IsLow());
2335*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard, can_use_it);
2336*f5c631daSSadaf Ebrahimi     lsr(cond, rd, rm, operand);
2337*f5c631daSSadaf Ebrahimi   }
Lsr(Register rd,Register rm,const Operand & operand)2338*f5c631daSSadaf Ebrahimi   void Lsr(Register rd, Register rm, const Operand& operand) {
2339*f5c631daSSadaf Ebrahimi     Lsr(al, rd, rm, operand);
2340*f5c631daSSadaf Ebrahimi   }
Lsr(FlagsUpdate flags,Condition cond,Register rd,Register rm,const Operand & operand)2341*f5c631daSSadaf Ebrahimi   void Lsr(FlagsUpdate flags,
2342*f5c631daSSadaf Ebrahimi            Condition cond,
2343*f5c631daSSadaf Ebrahimi            Register rd,
2344*f5c631daSSadaf Ebrahimi            Register rm,
2345*f5c631daSSadaf Ebrahimi            const Operand& operand) {
2346*f5c631daSSadaf Ebrahimi     switch (flags) {
2347*f5c631daSSadaf Ebrahimi       case LeaveFlags:
2348*f5c631daSSadaf Ebrahimi         Lsr(cond, rd, rm, operand);
2349*f5c631daSSadaf Ebrahimi         break;
2350*f5c631daSSadaf Ebrahimi       case SetFlags:
2351*f5c631daSSadaf Ebrahimi         Lsrs(cond, rd, rm, operand);
2352*f5c631daSSadaf Ebrahimi         break;
2353*f5c631daSSadaf Ebrahimi       case DontCare:
2354*f5c631daSSadaf Ebrahimi         bool setflags_is_smaller =
2355*f5c631daSSadaf Ebrahimi             IsUsingT32() && cond.Is(al) && rd.IsLow() && rm.IsLow() &&
2356*f5c631daSSadaf Ebrahimi             ((operand.IsImmediate() && (operand.GetImmediate() >= 1) &&
2357*f5c631daSSadaf Ebrahimi               (operand.GetImmediate() <= 32)) ||
2358*f5c631daSSadaf Ebrahimi              (operand.IsPlainRegister() && rd.Is(rm)));
2359*f5c631daSSadaf Ebrahimi         if (setflags_is_smaller) {
2360*f5c631daSSadaf Ebrahimi           Lsrs(cond, rd, rm, operand);
2361*f5c631daSSadaf Ebrahimi         } else {
2362*f5c631daSSadaf Ebrahimi           Lsr(cond, rd, rm, operand);
2363*f5c631daSSadaf Ebrahimi         }
2364*f5c631daSSadaf Ebrahimi         break;
2365*f5c631daSSadaf Ebrahimi     }
2366*f5c631daSSadaf Ebrahimi   }
Lsr(FlagsUpdate flags,Register rd,Register rm,const Operand & operand)2367*f5c631daSSadaf Ebrahimi   void Lsr(FlagsUpdate flags,
2368*f5c631daSSadaf Ebrahimi            Register rd,
2369*f5c631daSSadaf Ebrahimi            Register rm,
2370*f5c631daSSadaf Ebrahimi            const Operand& operand) {
2371*f5c631daSSadaf Ebrahimi     Lsr(flags, al, rd, rm, operand);
2372*f5c631daSSadaf Ebrahimi   }
2373*f5c631daSSadaf Ebrahimi 
Lsrs(Condition cond,Register rd,Register rm,const Operand & operand)2374*f5c631daSSadaf Ebrahimi   void Lsrs(Condition cond, Register rd, Register rm, const Operand& operand) {
2375*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2376*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
2377*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2378*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2379*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2380*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2381*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
2382*f5c631daSSadaf Ebrahimi     lsrs(cond, rd, rm, operand);
2383*f5c631daSSadaf Ebrahimi   }
Lsrs(Register rd,Register rm,const Operand & operand)2384*f5c631daSSadaf Ebrahimi   void Lsrs(Register rd, Register rm, const Operand& operand) {
2385*f5c631daSSadaf Ebrahimi     Lsrs(al, rd, rm, operand);
2386*f5c631daSSadaf Ebrahimi   }
2387*f5c631daSSadaf Ebrahimi 
Mla(Condition cond,Register rd,Register rn,Register rm,Register ra)2388*f5c631daSSadaf Ebrahimi   void Mla(Condition cond, Register rd, Register rn, Register rm, Register ra) {
2389*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2390*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
2391*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
2392*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
2393*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2394*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2395*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2396*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
2397*f5c631daSSadaf Ebrahimi     mla(cond, rd, rn, rm, ra);
2398*f5c631daSSadaf Ebrahimi   }
Mla(Register rd,Register rn,Register rm,Register ra)2399*f5c631daSSadaf Ebrahimi   void Mla(Register rd, Register rn, Register rm, Register ra) {
2400*f5c631daSSadaf Ebrahimi     Mla(al, rd, rn, rm, ra);
2401*f5c631daSSadaf Ebrahimi   }
Mla(FlagsUpdate flags,Condition cond,Register rd,Register rn,Register rm,Register ra)2402*f5c631daSSadaf Ebrahimi   void Mla(FlagsUpdate flags,
2403*f5c631daSSadaf Ebrahimi            Condition cond,
2404*f5c631daSSadaf Ebrahimi            Register rd,
2405*f5c631daSSadaf Ebrahimi            Register rn,
2406*f5c631daSSadaf Ebrahimi            Register rm,
2407*f5c631daSSadaf Ebrahimi            Register ra) {
2408*f5c631daSSadaf Ebrahimi     switch (flags) {
2409*f5c631daSSadaf Ebrahimi       case LeaveFlags:
2410*f5c631daSSadaf Ebrahimi         Mla(cond, rd, rn, rm, ra);
2411*f5c631daSSadaf Ebrahimi         break;
2412*f5c631daSSadaf Ebrahimi       case SetFlags:
2413*f5c631daSSadaf Ebrahimi         Mlas(cond, rd, rn, rm, ra);
2414*f5c631daSSadaf Ebrahimi         break;
2415*f5c631daSSadaf Ebrahimi       case DontCare:
2416*f5c631daSSadaf Ebrahimi         Mla(cond, rd, rn, rm, ra);
2417*f5c631daSSadaf Ebrahimi         break;
2418*f5c631daSSadaf Ebrahimi     }
2419*f5c631daSSadaf Ebrahimi   }
Mla(FlagsUpdate flags,Register rd,Register rn,Register rm,Register ra)2420*f5c631daSSadaf Ebrahimi   void Mla(
2421*f5c631daSSadaf Ebrahimi       FlagsUpdate flags, Register rd, Register rn, Register rm, Register ra) {
2422*f5c631daSSadaf Ebrahimi     Mla(flags, al, rd, rn, rm, ra);
2423*f5c631daSSadaf Ebrahimi   }
2424*f5c631daSSadaf Ebrahimi 
Mlas(Condition cond,Register rd,Register rn,Register rm,Register ra)2425*f5c631daSSadaf Ebrahimi   void Mlas(
2426*f5c631daSSadaf Ebrahimi       Condition cond, Register rd, Register rn, Register rm, Register ra) {
2427*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2428*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
2429*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
2430*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
2431*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2432*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2433*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2434*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
2435*f5c631daSSadaf Ebrahimi     mlas(cond, rd, rn, rm, ra);
2436*f5c631daSSadaf Ebrahimi   }
Mlas(Register rd,Register rn,Register rm,Register ra)2437*f5c631daSSadaf Ebrahimi   void Mlas(Register rd, Register rn, Register rm, Register ra) {
2438*f5c631daSSadaf Ebrahimi     Mlas(al, rd, rn, rm, ra);
2439*f5c631daSSadaf Ebrahimi   }
2440*f5c631daSSadaf Ebrahimi 
Mls(Condition cond,Register rd,Register rn,Register rm,Register ra)2441*f5c631daSSadaf Ebrahimi   void Mls(Condition cond, Register rd, Register rn, Register rm, Register ra) {
2442*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2443*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
2444*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
2445*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
2446*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2447*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2448*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2449*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
2450*f5c631daSSadaf Ebrahimi     mls(cond, rd, rn, rm, ra);
2451*f5c631daSSadaf Ebrahimi   }
Mls(Register rd,Register rn,Register rm,Register ra)2452*f5c631daSSadaf Ebrahimi   void Mls(Register rd, Register rn, Register rm, Register ra) {
2453*f5c631daSSadaf Ebrahimi     Mls(al, rd, rn, rm, ra);
2454*f5c631daSSadaf Ebrahimi   }
2455*f5c631daSSadaf Ebrahimi 
Mov(Condition cond,Register rd,const Operand & operand)2456*f5c631daSSadaf Ebrahimi   void Mov(Condition cond, Register rd, const Operand& operand) {
2457*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2458*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2459*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2460*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2461*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2462*f5c631daSSadaf Ebrahimi     if (operand.IsPlainRegister() && rd.Is(operand.GetBaseRegister())) {
2463*f5c631daSSadaf Ebrahimi       return;
2464*f5c631daSSadaf Ebrahimi     }
2465*f5c631daSSadaf Ebrahimi     bool can_use_it =
2466*f5c631daSSadaf Ebrahimi         // MOV<c>{<q>} <Rd>, #<imm8> ; T1
2467*f5c631daSSadaf Ebrahimi         (operand.IsImmediate() && rd.IsLow() &&
2468*f5c631daSSadaf Ebrahimi          (operand.GetImmediate() <= 255)) ||
2469*f5c631daSSadaf Ebrahimi         // MOV{<c>}{<q>} <Rd>, <Rm> ; T1
2470*f5c631daSSadaf Ebrahimi         (operand.IsPlainRegister() && !rd.IsPC() &&
2471*f5c631daSSadaf Ebrahimi          !operand.GetBaseRegister().IsPC()) ||
2472*f5c631daSSadaf Ebrahimi         // MOV<c>{<q>} <Rd>, <Rm> {, <shift> #<amount>} ; T2
2473*f5c631daSSadaf Ebrahimi         (operand.IsImmediateShiftedRegister() && rd.IsLow() &&
2474*f5c631daSSadaf Ebrahimi          operand.GetBaseRegister().IsLow() &&
2475*f5c631daSSadaf Ebrahimi          (operand.GetShift().Is(LSL) || operand.GetShift().Is(LSR) ||
2476*f5c631daSSadaf Ebrahimi           operand.GetShift().Is(ASR))) ||
2477*f5c631daSSadaf Ebrahimi         // MOV<c>{<q>} <Rdm>, <Rdm>, LSL <Rs> ; T1
2478*f5c631daSSadaf Ebrahimi         // MOV<c>{<q>} <Rdm>, <Rdm>, LSR <Rs> ; T1
2479*f5c631daSSadaf Ebrahimi         // MOV<c>{<q>} <Rdm>, <Rdm>, ASR <Rs> ; T1
2480*f5c631daSSadaf Ebrahimi         // MOV<c>{<q>} <Rdm>, <Rdm>, ROR <Rs> ; T1
2481*f5c631daSSadaf Ebrahimi         (operand.IsRegisterShiftedRegister() &&
2482*f5c631daSSadaf Ebrahimi          rd.Is(operand.GetBaseRegister()) && rd.IsLow() &&
2483*f5c631daSSadaf Ebrahimi          (operand.GetShift().Is(LSL) || operand.GetShift().Is(LSR) ||
2484*f5c631daSSadaf Ebrahimi           operand.GetShift().Is(ASR) || operand.GetShift().Is(ROR)) &&
2485*f5c631daSSadaf Ebrahimi          operand.GetShiftRegister().IsLow());
2486*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard, can_use_it);
2487*f5c631daSSadaf Ebrahimi     mov(cond, rd, operand);
2488*f5c631daSSadaf Ebrahimi   }
Mov(Register rd,const Operand & operand)2489*f5c631daSSadaf Ebrahimi   void Mov(Register rd, const Operand& operand) { Mov(al, rd, operand); }
Mov(FlagsUpdate flags,Condition cond,Register rd,const Operand & operand)2490*f5c631daSSadaf Ebrahimi   void Mov(FlagsUpdate flags,
2491*f5c631daSSadaf Ebrahimi            Condition cond,
2492*f5c631daSSadaf Ebrahimi            Register rd,
2493*f5c631daSSadaf Ebrahimi            const Operand& operand) {
2494*f5c631daSSadaf Ebrahimi     switch (flags) {
2495*f5c631daSSadaf Ebrahimi       case LeaveFlags:
2496*f5c631daSSadaf Ebrahimi         Mov(cond, rd, operand);
2497*f5c631daSSadaf Ebrahimi         break;
2498*f5c631daSSadaf Ebrahimi       case SetFlags:
2499*f5c631daSSadaf Ebrahimi         Movs(cond, rd, operand);
2500*f5c631daSSadaf Ebrahimi         break;
2501*f5c631daSSadaf Ebrahimi       case DontCare:
2502*f5c631daSSadaf Ebrahimi         if (operand.IsPlainRegister() && rd.Is(operand.GetBaseRegister())) {
2503*f5c631daSSadaf Ebrahimi           return;
2504*f5c631daSSadaf Ebrahimi         }
2505*f5c631daSSadaf Ebrahimi         bool setflags_is_smaller =
2506*f5c631daSSadaf Ebrahimi             IsUsingT32() && cond.Is(al) &&
2507*f5c631daSSadaf Ebrahimi             ((operand.IsImmediateShiftedRegister() && rd.IsLow() &&
2508*f5c631daSSadaf Ebrahimi               operand.GetBaseRegister().IsLow() &&
2509*f5c631daSSadaf Ebrahimi               (operand.GetShiftAmount() >= 1) &&
2510*f5c631daSSadaf Ebrahimi               (((operand.GetShiftAmount() <= 32) &&
2511*f5c631daSSadaf Ebrahimi                 ((operand.GetShift().IsLSR() || operand.GetShift().IsASR()))) ||
2512*f5c631daSSadaf Ebrahimi                ((operand.GetShiftAmount() < 32) &&
2513*f5c631daSSadaf Ebrahimi                 operand.GetShift().IsLSL()))) ||
2514*f5c631daSSadaf Ebrahimi              (operand.IsRegisterShiftedRegister() && rd.IsLow() &&
2515*f5c631daSSadaf Ebrahimi               operand.GetBaseRegister().Is(rd) &&
2516*f5c631daSSadaf Ebrahimi               operand.GetShiftRegister().IsLow() &&
2517*f5c631daSSadaf Ebrahimi               (operand.GetShift().IsLSL() || operand.GetShift().IsLSR() ||
2518*f5c631daSSadaf Ebrahimi                operand.GetShift().IsASR() || operand.GetShift().IsROR())) ||
2519*f5c631daSSadaf Ebrahimi              (operand.IsImmediate() && rd.IsLow() &&
2520*f5c631daSSadaf Ebrahimi               (operand.GetImmediate() < 256)));
2521*f5c631daSSadaf Ebrahimi         if (setflags_is_smaller) {
2522*f5c631daSSadaf Ebrahimi           Movs(cond, rd, operand);
2523*f5c631daSSadaf Ebrahimi         } else {
2524*f5c631daSSadaf Ebrahimi           Mov(cond, rd, operand);
2525*f5c631daSSadaf Ebrahimi         }
2526*f5c631daSSadaf Ebrahimi         break;
2527*f5c631daSSadaf Ebrahimi     }
2528*f5c631daSSadaf Ebrahimi   }
Mov(FlagsUpdate flags,Register rd,const Operand & operand)2529*f5c631daSSadaf Ebrahimi   void Mov(FlagsUpdate flags, Register rd, const Operand& operand) {
2530*f5c631daSSadaf Ebrahimi     Mov(flags, al, rd, operand);
2531*f5c631daSSadaf Ebrahimi   }
2532*f5c631daSSadaf Ebrahimi 
Movs(Condition cond,Register rd,const Operand & operand)2533*f5c631daSSadaf Ebrahimi   void Movs(Condition cond, Register rd, const Operand& operand) {
2534*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2535*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2536*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2537*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2538*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2539*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
2540*f5c631daSSadaf Ebrahimi     movs(cond, rd, operand);
2541*f5c631daSSadaf Ebrahimi   }
Movs(Register rd,const Operand & operand)2542*f5c631daSSadaf Ebrahimi   void Movs(Register rd, const Operand& operand) { Movs(al, rd, operand); }
2543*f5c631daSSadaf Ebrahimi 
Movt(Condition cond,Register rd,const Operand & operand)2544*f5c631daSSadaf Ebrahimi   void Movt(Condition cond, Register rd, const Operand& operand) {
2545*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2546*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2547*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2548*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2549*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2550*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
2551*f5c631daSSadaf Ebrahimi     movt(cond, rd, operand);
2552*f5c631daSSadaf Ebrahimi   }
Movt(Register rd,const Operand & operand)2553*f5c631daSSadaf Ebrahimi   void Movt(Register rd, const Operand& operand) { Movt(al, rd, operand); }
2554*f5c631daSSadaf Ebrahimi 
Mrs(Condition cond,Register rd,SpecialRegister spec_reg)2555*f5c631daSSadaf Ebrahimi   void Mrs(Condition cond, Register rd, SpecialRegister spec_reg) {
2556*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2557*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2558*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2559*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2560*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
2561*f5c631daSSadaf Ebrahimi     mrs(cond, rd, spec_reg);
2562*f5c631daSSadaf Ebrahimi   }
Mrs(Register rd,SpecialRegister spec_reg)2563*f5c631daSSadaf Ebrahimi   void Mrs(Register rd, SpecialRegister spec_reg) { Mrs(al, rd, spec_reg); }
2564*f5c631daSSadaf Ebrahimi 
Msr(Condition cond,MaskedSpecialRegister spec_reg,const Operand & operand)2565*f5c631daSSadaf Ebrahimi   void Msr(Condition cond,
2566*f5c631daSSadaf Ebrahimi            MaskedSpecialRegister spec_reg,
2567*f5c631daSSadaf Ebrahimi            const Operand& operand) {
2568*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2569*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2570*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2571*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2572*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
2573*f5c631daSSadaf Ebrahimi     msr(cond, spec_reg, operand);
2574*f5c631daSSadaf Ebrahimi   }
Msr(MaskedSpecialRegister spec_reg,const Operand & operand)2575*f5c631daSSadaf Ebrahimi   void Msr(MaskedSpecialRegister spec_reg, const Operand& operand) {
2576*f5c631daSSadaf Ebrahimi     Msr(al, spec_reg, operand);
2577*f5c631daSSadaf Ebrahimi   }
2578*f5c631daSSadaf Ebrahimi 
Mul(Condition cond,Register rd,Register rn,Register rm)2579*f5c631daSSadaf Ebrahimi   void Mul(Condition cond, Register rd, Register rn, Register rm) {
2580*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2581*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
2582*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
2583*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2584*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2585*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2586*f5c631daSSadaf Ebrahimi     bool can_use_it =
2587*f5c631daSSadaf Ebrahimi         // MUL<c>{<q>} <Rdm>, <Rn>{, <Rdm>} ; T1
2588*f5c631daSSadaf Ebrahimi         rd.Is(rm) && rn.IsLow() && rm.IsLow();
2589*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard, can_use_it);
2590*f5c631daSSadaf Ebrahimi     mul(cond, rd, rn, rm);
2591*f5c631daSSadaf Ebrahimi   }
Mul(Register rd,Register rn,Register rm)2592*f5c631daSSadaf Ebrahimi   void Mul(Register rd, Register rn, Register rm) { Mul(al, rd, rn, rm); }
Mul(FlagsUpdate flags,Condition cond,Register rd,Register rn,Register rm)2593*f5c631daSSadaf Ebrahimi   void Mul(FlagsUpdate flags,
2594*f5c631daSSadaf Ebrahimi            Condition cond,
2595*f5c631daSSadaf Ebrahimi            Register rd,
2596*f5c631daSSadaf Ebrahimi            Register rn,
2597*f5c631daSSadaf Ebrahimi            Register rm) {
2598*f5c631daSSadaf Ebrahimi     switch (flags) {
2599*f5c631daSSadaf Ebrahimi       case LeaveFlags:
2600*f5c631daSSadaf Ebrahimi         Mul(cond, rd, rn, rm);
2601*f5c631daSSadaf Ebrahimi         break;
2602*f5c631daSSadaf Ebrahimi       case SetFlags:
2603*f5c631daSSadaf Ebrahimi         Muls(cond, rd, rn, rm);
2604*f5c631daSSadaf Ebrahimi         break;
2605*f5c631daSSadaf Ebrahimi       case DontCare:
2606*f5c631daSSadaf Ebrahimi         bool setflags_is_smaller = IsUsingT32() && cond.Is(al) && rd.IsLow() &&
2607*f5c631daSSadaf Ebrahimi                                    rn.IsLow() && rm.Is(rd);
2608*f5c631daSSadaf Ebrahimi         if (setflags_is_smaller) {
2609*f5c631daSSadaf Ebrahimi           Muls(cond, rd, rn, rm);
2610*f5c631daSSadaf Ebrahimi         } else {
2611*f5c631daSSadaf Ebrahimi           Mul(cond, rd, rn, rm);
2612*f5c631daSSadaf Ebrahimi         }
2613*f5c631daSSadaf Ebrahimi         break;
2614*f5c631daSSadaf Ebrahimi     }
2615*f5c631daSSadaf Ebrahimi   }
Mul(FlagsUpdate flags,Register rd,Register rn,Register rm)2616*f5c631daSSadaf Ebrahimi   void Mul(FlagsUpdate flags, Register rd, Register rn, Register rm) {
2617*f5c631daSSadaf Ebrahimi     Mul(flags, al, rd, rn, rm);
2618*f5c631daSSadaf Ebrahimi   }
2619*f5c631daSSadaf Ebrahimi 
Muls(Condition cond,Register rd,Register rn,Register rm)2620*f5c631daSSadaf Ebrahimi   void Muls(Condition cond, Register rd, Register rn, Register rm) {
2621*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2622*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
2623*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
2624*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2625*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2626*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2627*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
2628*f5c631daSSadaf Ebrahimi     muls(cond, rd, rn, rm);
2629*f5c631daSSadaf Ebrahimi   }
Muls(Register rd,Register rn,Register rm)2630*f5c631daSSadaf Ebrahimi   void Muls(Register rd, Register rn, Register rm) { Muls(al, rd, rn, rm); }
2631*f5c631daSSadaf Ebrahimi 
Mvn(Condition cond,Register rd,const Operand & operand)2632*f5c631daSSadaf Ebrahimi   void Mvn(Condition cond, Register rd, const Operand& operand) {
2633*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2634*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2635*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2636*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2637*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2638*f5c631daSSadaf Ebrahimi     bool can_use_it =
2639*f5c631daSSadaf Ebrahimi         // MVN<c>{<q>} <Rd>, <Rm> ; T1
2640*f5c631daSSadaf Ebrahimi         operand.IsPlainRegister() && rd.IsLow() &&
2641*f5c631daSSadaf Ebrahimi         operand.GetBaseRegister().IsLow();
2642*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard, can_use_it);
2643*f5c631daSSadaf Ebrahimi     mvn(cond, rd, operand);
2644*f5c631daSSadaf Ebrahimi   }
Mvn(Register rd,const Operand & operand)2645*f5c631daSSadaf Ebrahimi   void Mvn(Register rd, const Operand& operand) { Mvn(al, rd, operand); }
Mvn(FlagsUpdate flags,Condition cond,Register rd,const Operand & operand)2646*f5c631daSSadaf Ebrahimi   void Mvn(FlagsUpdate flags,
2647*f5c631daSSadaf Ebrahimi            Condition cond,
2648*f5c631daSSadaf Ebrahimi            Register rd,
2649*f5c631daSSadaf Ebrahimi            const Operand& operand) {
2650*f5c631daSSadaf Ebrahimi     switch (flags) {
2651*f5c631daSSadaf Ebrahimi       case LeaveFlags:
2652*f5c631daSSadaf Ebrahimi         Mvn(cond, rd, operand);
2653*f5c631daSSadaf Ebrahimi         break;
2654*f5c631daSSadaf Ebrahimi       case SetFlags:
2655*f5c631daSSadaf Ebrahimi         Mvns(cond, rd, operand);
2656*f5c631daSSadaf Ebrahimi         break;
2657*f5c631daSSadaf Ebrahimi       case DontCare:
2658*f5c631daSSadaf Ebrahimi         bool setflags_is_smaller = IsUsingT32() && cond.Is(al) && rd.IsLow() &&
2659*f5c631daSSadaf Ebrahimi                                    operand.IsPlainRegister() &&
2660*f5c631daSSadaf Ebrahimi                                    operand.GetBaseRegister().IsLow();
2661*f5c631daSSadaf Ebrahimi         if (setflags_is_smaller) {
2662*f5c631daSSadaf Ebrahimi           Mvns(cond, rd, operand);
2663*f5c631daSSadaf Ebrahimi         } else {
2664*f5c631daSSadaf Ebrahimi           Mvn(cond, rd, operand);
2665*f5c631daSSadaf Ebrahimi         }
2666*f5c631daSSadaf Ebrahimi         break;
2667*f5c631daSSadaf Ebrahimi     }
2668*f5c631daSSadaf Ebrahimi   }
Mvn(FlagsUpdate flags,Register rd,const Operand & operand)2669*f5c631daSSadaf Ebrahimi   void Mvn(FlagsUpdate flags, Register rd, const Operand& operand) {
2670*f5c631daSSadaf Ebrahimi     Mvn(flags, al, rd, operand);
2671*f5c631daSSadaf Ebrahimi   }
2672*f5c631daSSadaf Ebrahimi 
Mvns(Condition cond,Register rd,const Operand & operand)2673*f5c631daSSadaf Ebrahimi   void Mvns(Condition cond, Register rd, const Operand& operand) {
2674*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2675*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2676*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2677*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2678*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2679*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
2680*f5c631daSSadaf Ebrahimi     mvns(cond, rd, operand);
2681*f5c631daSSadaf Ebrahimi   }
Mvns(Register rd,const Operand & operand)2682*f5c631daSSadaf Ebrahimi   void Mvns(Register rd, const Operand& operand) { Mvns(al, rd, operand); }
2683*f5c631daSSadaf Ebrahimi 
Nop(Condition cond)2684*f5c631daSSadaf Ebrahimi   void Nop(Condition cond) {
2685*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2686*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2687*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2688*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
2689*f5c631daSSadaf Ebrahimi     nop(cond);
2690*f5c631daSSadaf Ebrahimi   }
Nop()2691*f5c631daSSadaf Ebrahimi   void Nop() { Nop(al); }
2692*f5c631daSSadaf Ebrahimi 
Orn(Condition cond,Register rd,Register rn,const Operand & operand)2693*f5c631daSSadaf Ebrahimi   void Orn(Condition cond, Register rd, Register rn, const Operand& operand) {
2694*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2695*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
2696*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2697*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2698*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2699*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2700*f5c631daSSadaf Ebrahimi     if (cond.Is(al) && operand.IsImmediate()) {
2701*f5c631daSSadaf Ebrahimi       uint32_t immediate = operand.GetImmediate();
2702*f5c631daSSadaf Ebrahimi       if (immediate == 0) {
2703*f5c631daSSadaf Ebrahimi         mvn(rd, 0);
2704*f5c631daSSadaf Ebrahimi         return;
2705*f5c631daSSadaf Ebrahimi       }
2706*f5c631daSSadaf Ebrahimi       if ((immediate == 0xffffffff) && rd.Is(rn)) {
2707*f5c631daSSadaf Ebrahimi         return;
2708*f5c631daSSadaf Ebrahimi       }
2709*f5c631daSSadaf Ebrahimi     }
2710*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
2711*f5c631daSSadaf Ebrahimi     orn(cond, rd, rn, operand);
2712*f5c631daSSadaf Ebrahimi   }
Orn(Register rd,Register rn,const Operand & operand)2713*f5c631daSSadaf Ebrahimi   void Orn(Register rd, Register rn, const Operand& operand) {
2714*f5c631daSSadaf Ebrahimi     Orn(al, rd, rn, operand);
2715*f5c631daSSadaf Ebrahimi   }
Orn(FlagsUpdate flags,Condition cond,Register rd,Register rn,const Operand & operand)2716*f5c631daSSadaf Ebrahimi   void Orn(FlagsUpdate flags,
2717*f5c631daSSadaf Ebrahimi            Condition cond,
2718*f5c631daSSadaf Ebrahimi            Register rd,
2719*f5c631daSSadaf Ebrahimi            Register rn,
2720*f5c631daSSadaf Ebrahimi            const Operand& operand) {
2721*f5c631daSSadaf Ebrahimi     switch (flags) {
2722*f5c631daSSadaf Ebrahimi       case LeaveFlags:
2723*f5c631daSSadaf Ebrahimi         Orn(cond, rd, rn, operand);
2724*f5c631daSSadaf Ebrahimi         break;
2725*f5c631daSSadaf Ebrahimi       case SetFlags:
2726*f5c631daSSadaf Ebrahimi         Orns(cond, rd, rn, operand);
2727*f5c631daSSadaf Ebrahimi         break;
2728*f5c631daSSadaf Ebrahimi       case DontCare:
2729*f5c631daSSadaf Ebrahimi         Orn(cond, rd, rn, operand);
2730*f5c631daSSadaf Ebrahimi         break;
2731*f5c631daSSadaf Ebrahimi     }
2732*f5c631daSSadaf Ebrahimi   }
Orn(FlagsUpdate flags,Register rd,Register rn,const Operand & operand)2733*f5c631daSSadaf Ebrahimi   void Orn(FlagsUpdate flags,
2734*f5c631daSSadaf Ebrahimi            Register rd,
2735*f5c631daSSadaf Ebrahimi            Register rn,
2736*f5c631daSSadaf Ebrahimi            const Operand& operand) {
2737*f5c631daSSadaf Ebrahimi     Orn(flags, al, rd, rn, operand);
2738*f5c631daSSadaf Ebrahimi   }
2739*f5c631daSSadaf Ebrahimi 
Orns(Condition cond,Register rd,Register rn,const Operand & operand)2740*f5c631daSSadaf Ebrahimi   void Orns(Condition cond, Register rd, Register rn, const Operand& operand) {
2741*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2742*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
2743*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2744*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2745*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2746*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2747*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
2748*f5c631daSSadaf Ebrahimi     orns(cond, rd, rn, operand);
2749*f5c631daSSadaf Ebrahimi   }
Orns(Register rd,Register rn,const Operand & operand)2750*f5c631daSSadaf Ebrahimi   void Orns(Register rd, Register rn, const Operand& operand) {
2751*f5c631daSSadaf Ebrahimi     Orns(al, rd, rn, operand);
2752*f5c631daSSadaf Ebrahimi   }
2753*f5c631daSSadaf Ebrahimi 
Orr(Condition cond,Register rd,Register rn,const Operand & operand)2754*f5c631daSSadaf Ebrahimi   void Orr(Condition cond, Register rd, Register rn, const Operand& operand) {
2755*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2756*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
2757*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2758*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2759*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2760*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2761*f5c631daSSadaf Ebrahimi     if (rd.Is(rn) && operand.IsPlainRegister() &&
2762*f5c631daSSadaf Ebrahimi         rd.Is(operand.GetBaseRegister())) {
2763*f5c631daSSadaf Ebrahimi       return;
2764*f5c631daSSadaf Ebrahimi     }
2765*f5c631daSSadaf Ebrahimi     if (cond.Is(al) && operand.IsImmediate()) {
2766*f5c631daSSadaf Ebrahimi       uint32_t immediate = operand.GetImmediate();
2767*f5c631daSSadaf Ebrahimi       if ((immediate == 0) && rd.Is(rn)) {
2768*f5c631daSSadaf Ebrahimi         return;
2769*f5c631daSSadaf Ebrahimi       }
2770*f5c631daSSadaf Ebrahimi       if (immediate == 0xffffffff) {
2771*f5c631daSSadaf Ebrahimi         mvn(rd, 0);
2772*f5c631daSSadaf Ebrahimi         return;
2773*f5c631daSSadaf Ebrahimi       }
2774*f5c631daSSadaf Ebrahimi     }
2775*f5c631daSSadaf Ebrahimi     bool can_use_it =
2776*f5c631daSSadaf Ebrahimi         // ORR<c>{<q>} {<Rdn>,} <Rdn>, <Rm> ; T1
2777*f5c631daSSadaf Ebrahimi         operand.IsPlainRegister() && rd.Is(rn) && rn.IsLow() &&
2778*f5c631daSSadaf Ebrahimi         operand.GetBaseRegister().IsLow();
2779*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard, can_use_it);
2780*f5c631daSSadaf Ebrahimi     orr(cond, rd, rn, operand);
2781*f5c631daSSadaf Ebrahimi   }
Orr(Register rd,Register rn,const Operand & operand)2782*f5c631daSSadaf Ebrahimi   void Orr(Register rd, Register rn, const Operand& operand) {
2783*f5c631daSSadaf Ebrahimi     Orr(al, rd, rn, operand);
2784*f5c631daSSadaf Ebrahimi   }
Orr(FlagsUpdate flags,Condition cond,Register rd,Register rn,const Operand & operand)2785*f5c631daSSadaf Ebrahimi   void Orr(FlagsUpdate flags,
2786*f5c631daSSadaf Ebrahimi            Condition cond,
2787*f5c631daSSadaf Ebrahimi            Register rd,
2788*f5c631daSSadaf Ebrahimi            Register rn,
2789*f5c631daSSadaf Ebrahimi            const Operand& operand) {
2790*f5c631daSSadaf Ebrahimi     switch (flags) {
2791*f5c631daSSadaf Ebrahimi       case LeaveFlags:
2792*f5c631daSSadaf Ebrahimi         Orr(cond, rd, rn, operand);
2793*f5c631daSSadaf Ebrahimi         break;
2794*f5c631daSSadaf Ebrahimi       case SetFlags:
2795*f5c631daSSadaf Ebrahimi         Orrs(cond, rd, rn, operand);
2796*f5c631daSSadaf Ebrahimi         break;
2797*f5c631daSSadaf Ebrahimi       case DontCare:
2798*f5c631daSSadaf Ebrahimi         if (operand.IsPlainRegister() && rd.Is(rn) &&
2799*f5c631daSSadaf Ebrahimi             rd.Is(operand.GetBaseRegister())) {
2800*f5c631daSSadaf Ebrahimi           return;
2801*f5c631daSSadaf Ebrahimi         }
2802*f5c631daSSadaf Ebrahimi         bool setflags_is_smaller = IsUsingT32() && cond.Is(al) && rd.IsLow() &&
2803*f5c631daSSadaf Ebrahimi                                    rn.Is(rd) && operand.IsPlainRegister() &&
2804*f5c631daSSadaf Ebrahimi                                    operand.GetBaseRegister().IsLow();
2805*f5c631daSSadaf Ebrahimi         if (setflags_is_smaller) {
2806*f5c631daSSadaf Ebrahimi           Orrs(cond, rd, rn, operand);
2807*f5c631daSSadaf Ebrahimi         } else {
2808*f5c631daSSadaf Ebrahimi           Orr(cond, rd, rn, operand);
2809*f5c631daSSadaf Ebrahimi         }
2810*f5c631daSSadaf Ebrahimi         break;
2811*f5c631daSSadaf Ebrahimi     }
2812*f5c631daSSadaf Ebrahimi   }
Orr(FlagsUpdate flags,Register rd,Register rn,const Operand & operand)2813*f5c631daSSadaf Ebrahimi   void Orr(FlagsUpdate flags,
2814*f5c631daSSadaf Ebrahimi            Register rd,
2815*f5c631daSSadaf Ebrahimi            Register rn,
2816*f5c631daSSadaf Ebrahimi            const Operand& operand) {
2817*f5c631daSSadaf Ebrahimi     Orr(flags, al, rd, rn, operand);
2818*f5c631daSSadaf Ebrahimi   }
2819*f5c631daSSadaf Ebrahimi 
Orrs(Condition cond,Register rd,Register rn,const Operand & operand)2820*f5c631daSSadaf Ebrahimi   void Orrs(Condition cond, Register rd, Register rn, const Operand& operand) {
2821*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2822*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
2823*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2824*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2825*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2826*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2827*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
2828*f5c631daSSadaf Ebrahimi     orrs(cond, rd, rn, operand);
2829*f5c631daSSadaf Ebrahimi   }
Orrs(Register rd,Register rn,const Operand & operand)2830*f5c631daSSadaf Ebrahimi   void Orrs(Register rd, Register rn, const Operand& operand) {
2831*f5c631daSSadaf Ebrahimi     Orrs(al, rd, rn, operand);
2832*f5c631daSSadaf Ebrahimi   }
2833*f5c631daSSadaf Ebrahimi 
Pkhbt(Condition cond,Register rd,Register rn,const Operand & operand)2834*f5c631daSSadaf Ebrahimi   void Pkhbt(Condition cond, Register rd, Register rn, const Operand& operand) {
2835*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2836*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
2837*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2838*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2839*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2840*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2841*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
2842*f5c631daSSadaf Ebrahimi     pkhbt(cond, rd, rn, operand);
2843*f5c631daSSadaf Ebrahimi   }
Pkhbt(Register rd,Register rn,const Operand & operand)2844*f5c631daSSadaf Ebrahimi   void Pkhbt(Register rd, Register rn, const Operand& operand) {
2845*f5c631daSSadaf Ebrahimi     Pkhbt(al, rd, rn, operand);
2846*f5c631daSSadaf Ebrahimi   }
2847*f5c631daSSadaf Ebrahimi 
Pkhtb(Condition cond,Register rd,Register rn,const Operand & operand)2848*f5c631daSSadaf Ebrahimi   void Pkhtb(Condition cond, Register rd, Register rn, const Operand& operand) {
2849*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2850*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
2851*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2852*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2853*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2854*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2855*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
2856*f5c631daSSadaf Ebrahimi     pkhtb(cond, rd, rn, operand);
2857*f5c631daSSadaf Ebrahimi   }
Pkhtb(Register rd,Register rn,const Operand & operand)2858*f5c631daSSadaf Ebrahimi   void Pkhtb(Register rd, Register rn, const Operand& operand) {
2859*f5c631daSSadaf Ebrahimi     Pkhtb(al, rd, rn, operand);
2860*f5c631daSSadaf Ebrahimi   }
2861*f5c631daSSadaf Ebrahimi 
2862*f5c631daSSadaf Ebrahimi 
Pld(Condition cond,const MemOperand & operand)2863*f5c631daSSadaf Ebrahimi   void Pld(Condition cond, const MemOperand& operand) {
2864*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2865*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2866*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2867*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2868*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
2869*f5c631daSSadaf Ebrahimi     pld(cond, operand);
2870*f5c631daSSadaf Ebrahimi   }
Pld(const MemOperand & operand)2871*f5c631daSSadaf Ebrahimi   void Pld(const MemOperand& operand) { Pld(al, operand); }
2872*f5c631daSSadaf Ebrahimi 
Pldw(Condition cond,const MemOperand & operand)2873*f5c631daSSadaf Ebrahimi   void Pldw(Condition cond, const MemOperand& operand) {
2874*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2875*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2876*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2877*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2878*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
2879*f5c631daSSadaf Ebrahimi     pldw(cond, operand);
2880*f5c631daSSadaf Ebrahimi   }
Pldw(const MemOperand & operand)2881*f5c631daSSadaf Ebrahimi   void Pldw(const MemOperand& operand) { Pldw(al, operand); }
2882*f5c631daSSadaf Ebrahimi 
Pli(Condition cond,const MemOperand & operand)2883*f5c631daSSadaf Ebrahimi   void Pli(Condition cond, const MemOperand& operand) {
2884*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
2885*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2886*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2887*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2888*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
2889*f5c631daSSadaf Ebrahimi     pli(cond, operand);
2890*f5c631daSSadaf Ebrahimi   }
Pli(const MemOperand & operand)2891*f5c631daSSadaf Ebrahimi   void Pli(const MemOperand& operand) { Pli(al, operand); }
2892*f5c631daSSadaf Ebrahimi 
2893*f5c631daSSadaf Ebrahimi 
Pop(Condition cond,RegisterList registers)2894*f5c631daSSadaf Ebrahimi   void Pop(Condition cond, RegisterList registers) {
2895*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
2896*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2897*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2898*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2899*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
2900*f5c631daSSadaf Ebrahimi     if (registers.IsSingleRegister() &&
2901*f5c631daSSadaf Ebrahimi         (!IsUsingT32() || !registers.IsR0toR7orPC())) {
2902*f5c631daSSadaf Ebrahimi       pop(cond, registers.GetFirstAvailableRegister());
2903*f5c631daSSadaf Ebrahimi     } else if (!registers.IsEmpty()) {
2904*f5c631daSSadaf Ebrahimi       pop(cond, registers);
2905*f5c631daSSadaf Ebrahimi     }
2906*f5c631daSSadaf Ebrahimi   }
Pop(RegisterList registers)2907*f5c631daSSadaf Ebrahimi   void Pop(RegisterList registers) { Pop(al, registers); }
2908*f5c631daSSadaf Ebrahimi 
Pop(Condition cond,Register rt)2909*f5c631daSSadaf Ebrahimi   void Pop(Condition cond, Register rt) {
2910*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
2911*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2912*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2913*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2914*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
2915*f5c631daSSadaf Ebrahimi     pop(cond, rt);
2916*f5c631daSSadaf Ebrahimi   }
Pop(Register rt)2917*f5c631daSSadaf Ebrahimi   void Pop(Register rt) { Pop(al, rt); }
2918*f5c631daSSadaf Ebrahimi 
Push(Condition cond,RegisterList registers)2919*f5c631daSSadaf Ebrahimi   void Push(Condition cond, RegisterList registers) {
2920*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
2921*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2922*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2923*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2924*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
2925*f5c631daSSadaf Ebrahimi     if (registers.IsSingleRegister() && !registers.Includes(sp) &&
2926*f5c631daSSadaf Ebrahimi         (!IsUsingT32() || !registers.IsR0toR7orLR())) {
2927*f5c631daSSadaf Ebrahimi       push(cond, registers.GetFirstAvailableRegister());
2928*f5c631daSSadaf Ebrahimi     } else if (!registers.IsEmpty()) {
2929*f5c631daSSadaf Ebrahimi       push(cond, registers);
2930*f5c631daSSadaf Ebrahimi     }
2931*f5c631daSSadaf Ebrahimi   }
Push(RegisterList registers)2932*f5c631daSSadaf Ebrahimi   void Push(RegisterList registers) { Push(al, registers); }
2933*f5c631daSSadaf Ebrahimi 
Push(Condition cond,Register rt)2934*f5c631daSSadaf Ebrahimi   void Push(Condition cond, Register rt) {
2935*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
2936*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2937*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2938*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2939*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
2940*f5c631daSSadaf Ebrahimi     if (IsUsingA32() && rt.IsSP()) {
2941*f5c631daSSadaf Ebrahimi       // Only the A32 multiple-register form can push sp.
2942*f5c631daSSadaf Ebrahimi       push(cond, RegisterList(rt));
2943*f5c631daSSadaf Ebrahimi     } else {
2944*f5c631daSSadaf Ebrahimi       push(cond, rt);
2945*f5c631daSSadaf Ebrahimi     }
2946*f5c631daSSadaf Ebrahimi   }
Push(Register rt)2947*f5c631daSSadaf Ebrahimi   void Push(Register rt) { Push(al, rt); }
2948*f5c631daSSadaf Ebrahimi 
Qadd(Condition cond,Register rd,Register rm,Register rn)2949*f5c631daSSadaf Ebrahimi   void Qadd(Condition cond, Register rd, Register rm, Register rn) {
2950*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2951*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
2952*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
2953*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2954*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2955*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2956*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
2957*f5c631daSSadaf Ebrahimi     qadd(cond, rd, rm, rn);
2958*f5c631daSSadaf Ebrahimi   }
Qadd(Register rd,Register rm,Register rn)2959*f5c631daSSadaf Ebrahimi   void Qadd(Register rd, Register rm, Register rn) { Qadd(al, rd, rm, rn); }
2960*f5c631daSSadaf Ebrahimi 
Qadd16(Condition cond,Register rd,Register rn,Register rm)2961*f5c631daSSadaf Ebrahimi   void Qadd16(Condition cond, Register rd, Register rn, Register rm) {
2962*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2963*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
2964*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
2965*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2966*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2967*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2968*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
2969*f5c631daSSadaf Ebrahimi     qadd16(cond, rd, rn, rm);
2970*f5c631daSSadaf Ebrahimi   }
Qadd16(Register rd,Register rn,Register rm)2971*f5c631daSSadaf Ebrahimi   void Qadd16(Register rd, Register rn, Register rm) { Qadd16(al, rd, rn, rm); }
2972*f5c631daSSadaf Ebrahimi 
Qadd8(Condition cond,Register rd,Register rn,Register rm)2973*f5c631daSSadaf Ebrahimi   void Qadd8(Condition cond, Register rd, Register rn, Register rm) {
2974*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2975*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
2976*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
2977*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2978*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2979*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2980*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
2981*f5c631daSSadaf Ebrahimi     qadd8(cond, rd, rn, rm);
2982*f5c631daSSadaf Ebrahimi   }
Qadd8(Register rd,Register rn,Register rm)2983*f5c631daSSadaf Ebrahimi   void Qadd8(Register rd, Register rn, Register rm) { Qadd8(al, rd, rn, rm); }
2984*f5c631daSSadaf Ebrahimi 
Qasx(Condition cond,Register rd,Register rn,Register rm)2985*f5c631daSSadaf Ebrahimi   void Qasx(Condition cond, Register rd, Register rn, Register rm) {
2986*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2987*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
2988*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
2989*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
2990*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
2991*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
2992*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
2993*f5c631daSSadaf Ebrahimi     qasx(cond, rd, rn, rm);
2994*f5c631daSSadaf Ebrahimi   }
Qasx(Register rd,Register rn,Register rm)2995*f5c631daSSadaf Ebrahimi   void Qasx(Register rd, Register rn, Register rm) { Qasx(al, rd, rn, rm); }
2996*f5c631daSSadaf Ebrahimi 
Qdadd(Condition cond,Register rd,Register rm,Register rn)2997*f5c631daSSadaf Ebrahimi   void Qdadd(Condition cond, Register rd, Register rm, Register rn) {
2998*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
2999*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3000*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3001*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3002*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3003*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3004*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3005*f5c631daSSadaf Ebrahimi     qdadd(cond, rd, rm, rn);
3006*f5c631daSSadaf Ebrahimi   }
Qdadd(Register rd,Register rm,Register rn)3007*f5c631daSSadaf Ebrahimi   void Qdadd(Register rd, Register rm, Register rn) { Qdadd(al, rd, rm, rn); }
3008*f5c631daSSadaf Ebrahimi 
Qdsub(Condition cond,Register rd,Register rm,Register rn)3009*f5c631daSSadaf Ebrahimi   void Qdsub(Condition cond, Register rd, Register rm, Register rn) {
3010*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3011*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3012*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3013*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3014*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3015*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3016*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3017*f5c631daSSadaf Ebrahimi     qdsub(cond, rd, rm, rn);
3018*f5c631daSSadaf Ebrahimi   }
Qdsub(Register rd,Register rm,Register rn)3019*f5c631daSSadaf Ebrahimi   void Qdsub(Register rd, Register rm, Register rn) { Qdsub(al, rd, rm, rn); }
3020*f5c631daSSadaf Ebrahimi 
Qsax(Condition cond,Register rd,Register rn,Register rm)3021*f5c631daSSadaf Ebrahimi   void Qsax(Condition cond, Register rd, Register rn, Register rm) {
3022*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3023*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3024*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3025*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3026*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3027*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3028*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3029*f5c631daSSadaf Ebrahimi     qsax(cond, rd, rn, rm);
3030*f5c631daSSadaf Ebrahimi   }
Qsax(Register rd,Register rn,Register rm)3031*f5c631daSSadaf Ebrahimi   void Qsax(Register rd, Register rn, Register rm) { Qsax(al, rd, rn, rm); }
3032*f5c631daSSadaf Ebrahimi 
Qsub(Condition cond,Register rd,Register rm,Register rn)3033*f5c631daSSadaf Ebrahimi   void Qsub(Condition cond, Register rd, Register rm, Register rn) {
3034*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3035*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3036*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3037*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3038*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3039*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3040*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3041*f5c631daSSadaf Ebrahimi     qsub(cond, rd, rm, rn);
3042*f5c631daSSadaf Ebrahimi   }
Qsub(Register rd,Register rm,Register rn)3043*f5c631daSSadaf Ebrahimi   void Qsub(Register rd, Register rm, Register rn) { Qsub(al, rd, rm, rn); }
3044*f5c631daSSadaf Ebrahimi 
Qsub16(Condition cond,Register rd,Register rn,Register rm)3045*f5c631daSSadaf Ebrahimi   void Qsub16(Condition cond, Register rd, Register rn, Register rm) {
3046*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3047*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3048*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3049*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3050*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3051*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3052*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3053*f5c631daSSadaf Ebrahimi     qsub16(cond, rd, rn, rm);
3054*f5c631daSSadaf Ebrahimi   }
Qsub16(Register rd,Register rn,Register rm)3055*f5c631daSSadaf Ebrahimi   void Qsub16(Register rd, Register rn, Register rm) { Qsub16(al, rd, rn, rm); }
3056*f5c631daSSadaf Ebrahimi 
Qsub8(Condition cond,Register rd,Register rn,Register rm)3057*f5c631daSSadaf Ebrahimi   void Qsub8(Condition cond, Register rd, Register rn, Register rm) {
3058*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3059*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3060*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3061*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3062*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3063*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3064*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3065*f5c631daSSadaf Ebrahimi     qsub8(cond, rd, rn, rm);
3066*f5c631daSSadaf Ebrahimi   }
Qsub8(Register rd,Register rn,Register rm)3067*f5c631daSSadaf Ebrahimi   void Qsub8(Register rd, Register rn, Register rm) { Qsub8(al, rd, rn, rm); }
3068*f5c631daSSadaf Ebrahimi 
Rbit(Condition cond,Register rd,Register rm)3069*f5c631daSSadaf Ebrahimi   void Rbit(Condition cond, Register rd, Register rm) {
3070*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3071*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3072*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3073*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3074*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3075*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3076*f5c631daSSadaf Ebrahimi     rbit(cond, rd, rm);
3077*f5c631daSSadaf Ebrahimi   }
Rbit(Register rd,Register rm)3078*f5c631daSSadaf Ebrahimi   void Rbit(Register rd, Register rm) { Rbit(al, rd, rm); }
3079*f5c631daSSadaf Ebrahimi 
Rev(Condition cond,Register rd,Register rm)3080*f5c631daSSadaf Ebrahimi   void Rev(Condition cond, Register rd, Register rm) {
3081*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3082*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3083*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3084*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3085*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3086*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3087*f5c631daSSadaf Ebrahimi     rev(cond, rd, rm);
3088*f5c631daSSadaf Ebrahimi   }
Rev(Register rd,Register rm)3089*f5c631daSSadaf Ebrahimi   void Rev(Register rd, Register rm) { Rev(al, rd, rm); }
3090*f5c631daSSadaf Ebrahimi 
Rev16(Condition cond,Register rd,Register rm)3091*f5c631daSSadaf Ebrahimi   void Rev16(Condition cond, Register rd, Register rm) {
3092*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3093*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3094*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3095*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3096*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3097*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3098*f5c631daSSadaf Ebrahimi     rev16(cond, rd, rm);
3099*f5c631daSSadaf Ebrahimi   }
Rev16(Register rd,Register rm)3100*f5c631daSSadaf Ebrahimi   void Rev16(Register rd, Register rm) { Rev16(al, rd, rm); }
3101*f5c631daSSadaf Ebrahimi 
Revsh(Condition cond,Register rd,Register rm)3102*f5c631daSSadaf Ebrahimi   void Revsh(Condition cond, Register rd, Register rm) {
3103*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3104*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3105*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3106*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3107*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3108*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3109*f5c631daSSadaf Ebrahimi     revsh(cond, rd, rm);
3110*f5c631daSSadaf Ebrahimi   }
Revsh(Register rd,Register rm)3111*f5c631daSSadaf Ebrahimi   void Revsh(Register rd, Register rm) { Revsh(al, rd, rm); }
3112*f5c631daSSadaf Ebrahimi 
Ror(Condition cond,Register rd,Register rm,const Operand & operand)3113*f5c631daSSadaf Ebrahimi   void Ror(Condition cond, Register rd, Register rm, const Operand& operand) {
3114*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3115*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3116*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
3117*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3118*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3119*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3120*f5c631daSSadaf Ebrahimi     bool can_use_it =
3121*f5c631daSSadaf Ebrahimi         // ROR<c>{<q>} {<Rdm>,} <Rdm>, <Rs> ; T1
3122*f5c631daSSadaf Ebrahimi         operand.IsPlainRegister() && rd.Is(rm) && rd.IsLow() &&
3123*f5c631daSSadaf Ebrahimi         operand.GetBaseRegister().IsLow();
3124*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard, can_use_it);
3125*f5c631daSSadaf Ebrahimi     ror(cond, rd, rm, operand);
3126*f5c631daSSadaf Ebrahimi   }
Ror(Register rd,Register rm,const Operand & operand)3127*f5c631daSSadaf Ebrahimi   void Ror(Register rd, Register rm, const Operand& operand) {
3128*f5c631daSSadaf Ebrahimi     Ror(al, rd, rm, operand);
3129*f5c631daSSadaf Ebrahimi   }
Ror(FlagsUpdate flags,Condition cond,Register rd,Register rm,const Operand & operand)3130*f5c631daSSadaf Ebrahimi   void Ror(FlagsUpdate flags,
3131*f5c631daSSadaf Ebrahimi            Condition cond,
3132*f5c631daSSadaf Ebrahimi            Register rd,
3133*f5c631daSSadaf Ebrahimi            Register rm,
3134*f5c631daSSadaf Ebrahimi            const Operand& operand) {
3135*f5c631daSSadaf Ebrahimi     switch (flags) {
3136*f5c631daSSadaf Ebrahimi       case LeaveFlags:
3137*f5c631daSSadaf Ebrahimi         Ror(cond, rd, rm, operand);
3138*f5c631daSSadaf Ebrahimi         break;
3139*f5c631daSSadaf Ebrahimi       case SetFlags:
3140*f5c631daSSadaf Ebrahimi         Rors(cond, rd, rm, operand);
3141*f5c631daSSadaf Ebrahimi         break;
3142*f5c631daSSadaf Ebrahimi       case DontCare:
3143*f5c631daSSadaf Ebrahimi         bool setflags_is_smaller = IsUsingT32() && cond.Is(al) && rd.IsLow() &&
3144*f5c631daSSadaf Ebrahimi                                    rm.IsLow() && operand.IsPlainRegister() &&
3145*f5c631daSSadaf Ebrahimi                                    rd.Is(rm);
3146*f5c631daSSadaf Ebrahimi         if (setflags_is_smaller) {
3147*f5c631daSSadaf Ebrahimi           Rors(cond, rd, rm, operand);
3148*f5c631daSSadaf Ebrahimi         } else {
3149*f5c631daSSadaf Ebrahimi           Ror(cond, rd, rm, operand);
3150*f5c631daSSadaf Ebrahimi         }
3151*f5c631daSSadaf Ebrahimi         break;
3152*f5c631daSSadaf Ebrahimi     }
3153*f5c631daSSadaf Ebrahimi   }
Ror(FlagsUpdate flags,Register rd,Register rm,const Operand & operand)3154*f5c631daSSadaf Ebrahimi   void Ror(FlagsUpdate flags,
3155*f5c631daSSadaf Ebrahimi            Register rd,
3156*f5c631daSSadaf Ebrahimi            Register rm,
3157*f5c631daSSadaf Ebrahimi            const Operand& operand) {
3158*f5c631daSSadaf Ebrahimi     Ror(flags, al, rd, rm, operand);
3159*f5c631daSSadaf Ebrahimi   }
3160*f5c631daSSadaf Ebrahimi 
Rors(Condition cond,Register rd,Register rm,const Operand & operand)3161*f5c631daSSadaf Ebrahimi   void Rors(Condition cond, Register rd, Register rm, const Operand& operand) {
3162*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3163*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3164*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
3165*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3166*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3167*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3168*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3169*f5c631daSSadaf Ebrahimi     rors(cond, rd, rm, operand);
3170*f5c631daSSadaf Ebrahimi   }
Rors(Register rd,Register rm,const Operand & operand)3171*f5c631daSSadaf Ebrahimi   void Rors(Register rd, Register rm, const Operand& operand) {
3172*f5c631daSSadaf Ebrahimi     Rors(al, rd, rm, operand);
3173*f5c631daSSadaf Ebrahimi   }
3174*f5c631daSSadaf Ebrahimi 
Rrx(Condition cond,Register rd,Register rm)3175*f5c631daSSadaf Ebrahimi   void Rrx(Condition cond, Register rd, Register rm) {
3176*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3177*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3178*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3179*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3180*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3181*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3182*f5c631daSSadaf Ebrahimi     rrx(cond, rd, rm);
3183*f5c631daSSadaf Ebrahimi   }
Rrx(Register rd,Register rm)3184*f5c631daSSadaf Ebrahimi   void Rrx(Register rd, Register rm) { Rrx(al, rd, rm); }
Rrx(FlagsUpdate flags,Condition cond,Register rd,Register rm)3185*f5c631daSSadaf Ebrahimi   void Rrx(FlagsUpdate flags, Condition cond, Register rd, Register rm) {
3186*f5c631daSSadaf Ebrahimi     switch (flags) {
3187*f5c631daSSadaf Ebrahimi       case LeaveFlags:
3188*f5c631daSSadaf Ebrahimi         Rrx(cond, rd, rm);
3189*f5c631daSSadaf Ebrahimi         break;
3190*f5c631daSSadaf Ebrahimi       case SetFlags:
3191*f5c631daSSadaf Ebrahimi         Rrxs(cond, rd, rm);
3192*f5c631daSSadaf Ebrahimi         break;
3193*f5c631daSSadaf Ebrahimi       case DontCare:
3194*f5c631daSSadaf Ebrahimi         Rrx(cond, rd, rm);
3195*f5c631daSSadaf Ebrahimi         break;
3196*f5c631daSSadaf Ebrahimi     }
3197*f5c631daSSadaf Ebrahimi   }
Rrx(FlagsUpdate flags,Register rd,Register rm)3198*f5c631daSSadaf Ebrahimi   void Rrx(FlagsUpdate flags, Register rd, Register rm) {
3199*f5c631daSSadaf Ebrahimi     Rrx(flags, al, rd, rm);
3200*f5c631daSSadaf Ebrahimi   }
3201*f5c631daSSadaf Ebrahimi 
Rrxs(Condition cond,Register rd,Register rm)3202*f5c631daSSadaf Ebrahimi   void Rrxs(Condition cond, Register rd, Register rm) {
3203*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3204*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3205*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3206*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3207*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3208*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3209*f5c631daSSadaf Ebrahimi     rrxs(cond, rd, rm);
3210*f5c631daSSadaf Ebrahimi   }
Rrxs(Register rd,Register rm)3211*f5c631daSSadaf Ebrahimi   void Rrxs(Register rd, Register rm) { Rrxs(al, rd, rm); }
3212*f5c631daSSadaf Ebrahimi 
Rsb(Condition cond,Register rd,Register rn,const Operand & operand)3213*f5c631daSSadaf Ebrahimi   void Rsb(Condition cond, Register rd, Register rn, const Operand& operand) {
3214*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3215*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3216*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
3217*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3218*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3219*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3220*f5c631daSSadaf Ebrahimi     bool can_use_it =
3221*f5c631daSSadaf Ebrahimi         // RSB<c>{<q>} {<Rd>, }<Rn>, #0 ; T1
3222*f5c631daSSadaf Ebrahimi         operand.IsImmediate() && rd.IsLow() && rn.IsLow() &&
3223*f5c631daSSadaf Ebrahimi         (operand.GetImmediate() == 0);
3224*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard, can_use_it);
3225*f5c631daSSadaf Ebrahimi     rsb(cond, rd, rn, operand);
3226*f5c631daSSadaf Ebrahimi   }
Rsb(Register rd,Register rn,const Operand & operand)3227*f5c631daSSadaf Ebrahimi   void Rsb(Register rd, Register rn, const Operand& operand) {
3228*f5c631daSSadaf Ebrahimi     Rsb(al, rd, rn, operand);
3229*f5c631daSSadaf Ebrahimi   }
Rsb(FlagsUpdate flags,Condition cond,Register rd,Register rn,const Operand & operand)3230*f5c631daSSadaf Ebrahimi   void Rsb(FlagsUpdate flags,
3231*f5c631daSSadaf Ebrahimi            Condition cond,
3232*f5c631daSSadaf Ebrahimi            Register rd,
3233*f5c631daSSadaf Ebrahimi            Register rn,
3234*f5c631daSSadaf Ebrahimi            const Operand& operand) {
3235*f5c631daSSadaf Ebrahimi     switch (flags) {
3236*f5c631daSSadaf Ebrahimi       case LeaveFlags:
3237*f5c631daSSadaf Ebrahimi         Rsb(cond, rd, rn, operand);
3238*f5c631daSSadaf Ebrahimi         break;
3239*f5c631daSSadaf Ebrahimi       case SetFlags:
3240*f5c631daSSadaf Ebrahimi         Rsbs(cond, rd, rn, operand);
3241*f5c631daSSadaf Ebrahimi         break;
3242*f5c631daSSadaf Ebrahimi       case DontCare:
3243*f5c631daSSadaf Ebrahimi         bool setflags_is_smaller = IsUsingT32() && cond.Is(al) && rd.IsLow() &&
3244*f5c631daSSadaf Ebrahimi                                    rn.IsLow() && operand.IsImmediate() &&
3245*f5c631daSSadaf Ebrahimi                                    (operand.GetImmediate() == 0);
3246*f5c631daSSadaf Ebrahimi         if (setflags_is_smaller) {
3247*f5c631daSSadaf Ebrahimi           Rsbs(cond, rd, rn, operand);
3248*f5c631daSSadaf Ebrahimi         } else {
3249*f5c631daSSadaf Ebrahimi           Rsb(cond, rd, rn, operand);
3250*f5c631daSSadaf Ebrahimi         }
3251*f5c631daSSadaf Ebrahimi         break;
3252*f5c631daSSadaf Ebrahimi     }
3253*f5c631daSSadaf Ebrahimi   }
Rsb(FlagsUpdate flags,Register rd,Register rn,const Operand & operand)3254*f5c631daSSadaf Ebrahimi   void Rsb(FlagsUpdate flags,
3255*f5c631daSSadaf Ebrahimi            Register rd,
3256*f5c631daSSadaf Ebrahimi            Register rn,
3257*f5c631daSSadaf Ebrahimi            const Operand& operand) {
3258*f5c631daSSadaf Ebrahimi     Rsb(flags, al, rd, rn, operand);
3259*f5c631daSSadaf Ebrahimi   }
3260*f5c631daSSadaf Ebrahimi 
Rsbs(Condition cond,Register rd,Register rn,const Operand & operand)3261*f5c631daSSadaf Ebrahimi   void Rsbs(Condition cond, Register rd, Register rn, const Operand& operand) {
3262*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3263*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3264*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
3265*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3266*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3267*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3268*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3269*f5c631daSSadaf Ebrahimi     rsbs(cond, rd, rn, operand);
3270*f5c631daSSadaf Ebrahimi   }
Rsbs(Register rd,Register rn,const Operand & operand)3271*f5c631daSSadaf Ebrahimi   void Rsbs(Register rd, Register rn, const Operand& operand) {
3272*f5c631daSSadaf Ebrahimi     Rsbs(al, rd, rn, operand);
3273*f5c631daSSadaf Ebrahimi   }
3274*f5c631daSSadaf Ebrahimi 
Rsc(Condition cond,Register rd,Register rn,const Operand & operand)3275*f5c631daSSadaf Ebrahimi   void Rsc(Condition cond, Register rd, Register rn, const Operand& operand) {
3276*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3277*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3278*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
3279*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3280*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3281*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3282*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3283*f5c631daSSadaf Ebrahimi     rsc(cond, rd, rn, operand);
3284*f5c631daSSadaf Ebrahimi   }
Rsc(Register rd,Register rn,const Operand & operand)3285*f5c631daSSadaf Ebrahimi   void Rsc(Register rd, Register rn, const Operand& operand) {
3286*f5c631daSSadaf Ebrahimi     Rsc(al, rd, rn, operand);
3287*f5c631daSSadaf Ebrahimi   }
Rsc(FlagsUpdate flags,Condition cond,Register rd,Register rn,const Operand & operand)3288*f5c631daSSadaf Ebrahimi   void Rsc(FlagsUpdate flags,
3289*f5c631daSSadaf Ebrahimi            Condition cond,
3290*f5c631daSSadaf Ebrahimi            Register rd,
3291*f5c631daSSadaf Ebrahimi            Register rn,
3292*f5c631daSSadaf Ebrahimi            const Operand& operand) {
3293*f5c631daSSadaf Ebrahimi     switch (flags) {
3294*f5c631daSSadaf Ebrahimi       case LeaveFlags:
3295*f5c631daSSadaf Ebrahimi         Rsc(cond, rd, rn, operand);
3296*f5c631daSSadaf Ebrahimi         break;
3297*f5c631daSSadaf Ebrahimi       case SetFlags:
3298*f5c631daSSadaf Ebrahimi         Rscs(cond, rd, rn, operand);
3299*f5c631daSSadaf Ebrahimi         break;
3300*f5c631daSSadaf Ebrahimi       case DontCare:
3301*f5c631daSSadaf Ebrahimi         Rsc(cond, rd, rn, operand);
3302*f5c631daSSadaf Ebrahimi         break;
3303*f5c631daSSadaf Ebrahimi     }
3304*f5c631daSSadaf Ebrahimi   }
Rsc(FlagsUpdate flags,Register rd,Register rn,const Operand & operand)3305*f5c631daSSadaf Ebrahimi   void Rsc(FlagsUpdate flags,
3306*f5c631daSSadaf Ebrahimi            Register rd,
3307*f5c631daSSadaf Ebrahimi            Register rn,
3308*f5c631daSSadaf Ebrahimi            const Operand& operand) {
3309*f5c631daSSadaf Ebrahimi     Rsc(flags, al, rd, rn, operand);
3310*f5c631daSSadaf Ebrahimi   }
3311*f5c631daSSadaf Ebrahimi 
Rscs(Condition cond,Register rd,Register rn,const Operand & operand)3312*f5c631daSSadaf Ebrahimi   void Rscs(Condition cond, Register rd, Register rn, const Operand& operand) {
3313*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3314*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3315*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
3316*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3317*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3318*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3319*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3320*f5c631daSSadaf Ebrahimi     rscs(cond, rd, rn, operand);
3321*f5c631daSSadaf Ebrahimi   }
Rscs(Register rd,Register rn,const Operand & operand)3322*f5c631daSSadaf Ebrahimi   void Rscs(Register rd, Register rn, const Operand& operand) {
3323*f5c631daSSadaf Ebrahimi     Rscs(al, rd, rn, operand);
3324*f5c631daSSadaf Ebrahimi   }
3325*f5c631daSSadaf Ebrahimi 
Sadd16(Condition cond,Register rd,Register rn,Register rm)3326*f5c631daSSadaf Ebrahimi   void Sadd16(Condition cond, Register rd, Register rn, Register rm) {
3327*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3328*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3329*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3330*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3331*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3332*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3333*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3334*f5c631daSSadaf Ebrahimi     sadd16(cond, rd, rn, rm);
3335*f5c631daSSadaf Ebrahimi   }
Sadd16(Register rd,Register rn,Register rm)3336*f5c631daSSadaf Ebrahimi   void Sadd16(Register rd, Register rn, Register rm) { Sadd16(al, rd, rn, rm); }
3337*f5c631daSSadaf Ebrahimi 
Sadd8(Condition cond,Register rd,Register rn,Register rm)3338*f5c631daSSadaf Ebrahimi   void Sadd8(Condition cond, Register rd, Register rn, Register rm) {
3339*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3340*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3341*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3342*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3343*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3344*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3345*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3346*f5c631daSSadaf Ebrahimi     sadd8(cond, rd, rn, rm);
3347*f5c631daSSadaf Ebrahimi   }
Sadd8(Register rd,Register rn,Register rm)3348*f5c631daSSadaf Ebrahimi   void Sadd8(Register rd, Register rn, Register rm) { Sadd8(al, rd, rn, rm); }
3349*f5c631daSSadaf Ebrahimi 
Sasx(Condition cond,Register rd,Register rn,Register rm)3350*f5c631daSSadaf Ebrahimi   void Sasx(Condition cond, Register rd, Register rn, Register rm) {
3351*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3352*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3353*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3354*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3355*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3356*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3357*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3358*f5c631daSSadaf Ebrahimi     sasx(cond, rd, rn, rm);
3359*f5c631daSSadaf Ebrahimi   }
Sasx(Register rd,Register rn,Register rm)3360*f5c631daSSadaf Ebrahimi   void Sasx(Register rd, Register rn, Register rm) { Sasx(al, rd, rn, rm); }
3361*f5c631daSSadaf Ebrahimi 
Sbc(Condition cond,Register rd,Register rn,const Operand & operand)3362*f5c631daSSadaf Ebrahimi   void Sbc(Condition cond, Register rd, Register rn, const Operand& operand) {
3363*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3364*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3365*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
3366*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3367*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3368*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3369*f5c631daSSadaf Ebrahimi     bool can_use_it =
3370*f5c631daSSadaf Ebrahimi         // SBC<c>{<q>} {<Rdn>,} <Rdn>, <Rm> ; T1
3371*f5c631daSSadaf Ebrahimi         operand.IsPlainRegister() && rn.IsLow() && rd.Is(rn) &&
3372*f5c631daSSadaf Ebrahimi         operand.GetBaseRegister().IsLow();
3373*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard, can_use_it);
3374*f5c631daSSadaf Ebrahimi     sbc(cond, rd, rn, operand);
3375*f5c631daSSadaf Ebrahimi   }
Sbc(Register rd,Register rn,const Operand & operand)3376*f5c631daSSadaf Ebrahimi   void Sbc(Register rd, Register rn, const Operand& operand) {
3377*f5c631daSSadaf Ebrahimi     Sbc(al, rd, rn, operand);
3378*f5c631daSSadaf Ebrahimi   }
Sbc(FlagsUpdate flags,Condition cond,Register rd,Register rn,const Operand & operand)3379*f5c631daSSadaf Ebrahimi   void Sbc(FlagsUpdate flags,
3380*f5c631daSSadaf Ebrahimi            Condition cond,
3381*f5c631daSSadaf Ebrahimi            Register rd,
3382*f5c631daSSadaf Ebrahimi            Register rn,
3383*f5c631daSSadaf Ebrahimi            const Operand& operand) {
3384*f5c631daSSadaf Ebrahimi     switch (flags) {
3385*f5c631daSSadaf Ebrahimi       case LeaveFlags:
3386*f5c631daSSadaf Ebrahimi         Sbc(cond, rd, rn, operand);
3387*f5c631daSSadaf Ebrahimi         break;
3388*f5c631daSSadaf Ebrahimi       case SetFlags:
3389*f5c631daSSadaf Ebrahimi         Sbcs(cond, rd, rn, operand);
3390*f5c631daSSadaf Ebrahimi         break;
3391*f5c631daSSadaf Ebrahimi       case DontCare:
3392*f5c631daSSadaf Ebrahimi         bool setflags_is_smaller = IsUsingT32() && cond.Is(al) && rd.IsLow() &&
3393*f5c631daSSadaf Ebrahimi                                    rn.Is(rd) && operand.IsPlainRegister() &&
3394*f5c631daSSadaf Ebrahimi                                    operand.GetBaseRegister().IsLow();
3395*f5c631daSSadaf Ebrahimi         if (setflags_is_smaller) {
3396*f5c631daSSadaf Ebrahimi           Sbcs(cond, rd, rn, operand);
3397*f5c631daSSadaf Ebrahimi         } else {
3398*f5c631daSSadaf Ebrahimi           Sbc(cond, rd, rn, operand);
3399*f5c631daSSadaf Ebrahimi         }
3400*f5c631daSSadaf Ebrahimi         break;
3401*f5c631daSSadaf Ebrahimi     }
3402*f5c631daSSadaf Ebrahimi   }
Sbc(FlagsUpdate flags,Register rd,Register rn,const Operand & operand)3403*f5c631daSSadaf Ebrahimi   void Sbc(FlagsUpdate flags,
3404*f5c631daSSadaf Ebrahimi            Register rd,
3405*f5c631daSSadaf Ebrahimi            Register rn,
3406*f5c631daSSadaf Ebrahimi            const Operand& operand) {
3407*f5c631daSSadaf Ebrahimi     Sbc(flags, al, rd, rn, operand);
3408*f5c631daSSadaf Ebrahimi   }
3409*f5c631daSSadaf Ebrahimi 
Sbcs(Condition cond,Register rd,Register rn,const Operand & operand)3410*f5c631daSSadaf Ebrahimi   void Sbcs(Condition cond, Register rd, Register rn, const Operand& operand) {
3411*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3412*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3413*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
3414*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3415*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3416*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3417*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3418*f5c631daSSadaf Ebrahimi     sbcs(cond, rd, rn, operand);
3419*f5c631daSSadaf Ebrahimi   }
Sbcs(Register rd,Register rn,const Operand & operand)3420*f5c631daSSadaf Ebrahimi   void Sbcs(Register rd, Register rn, const Operand& operand) {
3421*f5c631daSSadaf Ebrahimi     Sbcs(al, rd, rn, operand);
3422*f5c631daSSadaf Ebrahimi   }
3423*f5c631daSSadaf Ebrahimi 
Sbfx(Condition cond,Register rd,Register rn,uint32_t lsb,uint32_t width)3424*f5c631daSSadaf Ebrahimi   void Sbfx(
3425*f5c631daSSadaf Ebrahimi       Condition cond, Register rd, Register rn, uint32_t lsb, uint32_t width) {
3426*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3427*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3428*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3429*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3430*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3431*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3432*f5c631daSSadaf Ebrahimi     sbfx(cond, rd, rn, lsb, width);
3433*f5c631daSSadaf Ebrahimi   }
Sbfx(Register rd,Register rn,uint32_t lsb,uint32_t width)3434*f5c631daSSadaf Ebrahimi   void Sbfx(Register rd, Register rn, uint32_t lsb, uint32_t width) {
3435*f5c631daSSadaf Ebrahimi     Sbfx(al, rd, rn, lsb, width);
3436*f5c631daSSadaf Ebrahimi   }
3437*f5c631daSSadaf Ebrahimi 
Sdiv(Condition cond,Register rd,Register rn,Register rm)3438*f5c631daSSadaf Ebrahimi   void Sdiv(Condition cond, Register rd, Register rn, Register rm) {
3439*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3440*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3441*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3442*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3443*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3444*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3445*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3446*f5c631daSSadaf Ebrahimi     sdiv(cond, rd, rn, rm);
3447*f5c631daSSadaf Ebrahimi   }
Sdiv(Register rd,Register rn,Register rm)3448*f5c631daSSadaf Ebrahimi   void Sdiv(Register rd, Register rn, Register rm) { Sdiv(al, rd, rn, rm); }
3449*f5c631daSSadaf Ebrahimi 
Sel(Condition cond,Register rd,Register rn,Register rm)3450*f5c631daSSadaf Ebrahimi   void Sel(Condition cond, Register rd, Register rn, Register rm) {
3451*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3452*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3453*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3454*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3455*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3456*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3457*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3458*f5c631daSSadaf Ebrahimi     sel(cond, rd, rn, rm);
3459*f5c631daSSadaf Ebrahimi   }
Sel(Register rd,Register rn,Register rm)3460*f5c631daSSadaf Ebrahimi   void Sel(Register rd, Register rn, Register rm) { Sel(al, rd, rn, rm); }
3461*f5c631daSSadaf Ebrahimi 
Shadd16(Condition cond,Register rd,Register rn,Register rm)3462*f5c631daSSadaf Ebrahimi   void Shadd16(Condition cond, Register rd, Register rn, Register rm) {
3463*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3464*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3465*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3466*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3467*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3468*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3469*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3470*f5c631daSSadaf Ebrahimi     shadd16(cond, rd, rn, rm);
3471*f5c631daSSadaf Ebrahimi   }
Shadd16(Register rd,Register rn,Register rm)3472*f5c631daSSadaf Ebrahimi   void Shadd16(Register rd, Register rn, Register rm) {
3473*f5c631daSSadaf Ebrahimi     Shadd16(al, rd, rn, rm);
3474*f5c631daSSadaf Ebrahimi   }
3475*f5c631daSSadaf Ebrahimi 
Shadd8(Condition cond,Register rd,Register rn,Register rm)3476*f5c631daSSadaf Ebrahimi   void Shadd8(Condition cond, Register rd, Register rn, Register rm) {
3477*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3478*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3479*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3480*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3481*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3482*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3483*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3484*f5c631daSSadaf Ebrahimi     shadd8(cond, rd, rn, rm);
3485*f5c631daSSadaf Ebrahimi   }
Shadd8(Register rd,Register rn,Register rm)3486*f5c631daSSadaf Ebrahimi   void Shadd8(Register rd, Register rn, Register rm) { Shadd8(al, rd, rn, rm); }
3487*f5c631daSSadaf Ebrahimi 
Shasx(Condition cond,Register rd,Register rn,Register rm)3488*f5c631daSSadaf Ebrahimi   void Shasx(Condition cond, Register rd, Register rn, Register rm) {
3489*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3490*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3491*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3492*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3493*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3494*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3495*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3496*f5c631daSSadaf Ebrahimi     shasx(cond, rd, rn, rm);
3497*f5c631daSSadaf Ebrahimi   }
Shasx(Register rd,Register rn,Register rm)3498*f5c631daSSadaf Ebrahimi   void Shasx(Register rd, Register rn, Register rm) { Shasx(al, rd, rn, rm); }
3499*f5c631daSSadaf Ebrahimi 
Shsax(Condition cond,Register rd,Register rn,Register rm)3500*f5c631daSSadaf Ebrahimi   void Shsax(Condition cond, Register rd, Register rn, Register rm) {
3501*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3502*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3503*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3504*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3505*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3506*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3507*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3508*f5c631daSSadaf Ebrahimi     shsax(cond, rd, rn, rm);
3509*f5c631daSSadaf Ebrahimi   }
Shsax(Register rd,Register rn,Register rm)3510*f5c631daSSadaf Ebrahimi   void Shsax(Register rd, Register rn, Register rm) { Shsax(al, rd, rn, rm); }
3511*f5c631daSSadaf Ebrahimi 
Shsub16(Condition cond,Register rd,Register rn,Register rm)3512*f5c631daSSadaf Ebrahimi   void Shsub16(Condition cond, Register rd, Register rn, Register rm) {
3513*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3514*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3515*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3516*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3517*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3518*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3519*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3520*f5c631daSSadaf Ebrahimi     shsub16(cond, rd, rn, rm);
3521*f5c631daSSadaf Ebrahimi   }
Shsub16(Register rd,Register rn,Register rm)3522*f5c631daSSadaf Ebrahimi   void Shsub16(Register rd, Register rn, Register rm) {
3523*f5c631daSSadaf Ebrahimi     Shsub16(al, rd, rn, rm);
3524*f5c631daSSadaf Ebrahimi   }
3525*f5c631daSSadaf Ebrahimi 
Shsub8(Condition cond,Register rd,Register rn,Register rm)3526*f5c631daSSadaf Ebrahimi   void Shsub8(Condition cond, Register rd, Register rn, Register rm) {
3527*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3528*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3529*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3530*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3531*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3532*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3533*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3534*f5c631daSSadaf Ebrahimi     shsub8(cond, rd, rn, rm);
3535*f5c631daSSadaf Ebrahimi   }
Shsub8(Register rd,Register rn,Register rm)3536*f5c631daSSadaf Ebrahimi   void Shsub8(Register rd, Register rn, Register rm) { Shsub8(al, rd, rn, rm); }
3537*f5c631daSSadaf Ebrahimi 
Smlabb(Condition cond,Register rd,Register rn,Register rm,Register ra)3538*f5c631daSSadaf Ebrahimi   void Smlabb(
3539*f5c631daSSadaf Ebrahimi       Condition cond, Register rd, Register rn, Register rm, Register ra) {
3540*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3541*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3542*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3543*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
3544*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3545*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3546*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3547*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3548*f5c631daSSadaf Ebrahimi     smlabb(cond, rd, rn, rm, ra);
3549*f5c631daSSadaf Ebrahimi   }
Smlabb(Register rd,Register rn,Register rm,Register ra)3550*f5c631daSSadaf Ebrahimi   void Smlabb(Register rd, Register rn, Register rm, Register ra) {
3551*f5c631daSSadaf Ebrahimi     Smlabb(al, rd, rn, rm, ra);
3552*f5c631daSSadaf Ebrahimi   }
3553*f5c631daSSadaf Ebrahimi 
Smlabt(Condition cond,Register rd,Register rn,Register rm,Register ra)3554*f5c631daSSadaf Ebrahimi   void Smlabt(
3555*f5c631daSSadaf Ebrahimi       Condition cond, Register rd, Register rn, Register rm, Register ra) {
3556*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3557*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3558*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3559*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
3560*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3561*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3562*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3563*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3564*f5c631daSSadaf Ebrahimi     smlabt(cond, rd, rn, rm, ra);
3565*f5c631daSSadaf Ebrahimi   }
Smlabt(Register rd,Register rn,Register rm,Register ra)3566*f5c631daSSadaf Ebrahimi   void Smlabt(Register rd, Register rn, Register rm, Register ra) {
3567*f5c631daSSadaf Ebrahimi     Smlabt(al, rd, rn, rm, ra);
3568*f5c631daSSadaf Ebrahimi   }
3569*f5c631daSSadaf Ebrahimi 
Smlad(Condition cond,Register rd,Register rn,Register rm,Register ra)3570*f5c631daSSadaf Ebrahimi   void Smlad(
3571*f5c631daSSadaf Ebrahimi       Condition cond, Register rd, Register rn, Register rm, Register ra) {
3572*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3573*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3574*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3575*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
3576*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3577*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3578*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3579*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3580*f5c631daSSadaf Ebrahimi     smlad(cond, rd, rn, rm, ra);
3581*f5c631daSSadaf Ebrahimi   }
Smlad(Register rd,Register rn,Register rm,Register ra)3582*f5c631daSSadaf Ebrahimi   void Smlad(Register rd, Register rn, Register rm, Register ra) {
3583*f5c631daSSadaf Ebrahimi     Smlad(al, rd, rn, rm, ra);
3584*f5c631daSSadaf Ebrahimi   }
3585*f5c631daSSadaf Ebrahimi 
Smladx(Condition cond,Register rd,Register rn,Register rm,Register ra)3586*f5c631daSSadaf Ebrahimi   void Smladx(
3587*f5c631daSSadaf Ebrahimi       Condition cond, Register rd, Register rn, Register rm, Register ra) {
3588*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3589*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3590*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3591*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
3592*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3593*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3594*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3595*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3596*f5c631daSSadaf Ebrahimi     smladx(cond, rd, rn, rm, ra);
3597*f5c631daSSadaf Ebrahimi   }
Smladx(Register rd,Register rn,Register rm,Register ra)3598*f5c631daSSadaf Ebrahimi   void Smladx(Register rd, Register rn, Register rm, Register ra) {
3599*f5c631daSSadaf Ebrahimi     Smladx(al, rd, rn, rm, ra);
3600*f5c631daSSadaf Ebrahimi   }
3601*f5c631daSSadaf Ebrahimi 
Smlal(Condition cond,Register rdlo,Register rdhi,Register rn,Register rm)3602*f5c631daSSadaf Ebrahimi   void Smlal(
3603*f5c631daSSadaf Ebrahimi       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
3604*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo));
3605*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi));
3606*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3607*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3608*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3609*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3610*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3611*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3612*f5c631daSSadaf Ebrahimi     smlal(cond, rdlo, rdhi, rn, rm);
3613*f5c631daSSadaf Ebrahimi   }
Smlal(Register rdlo,Register rdhi,Register rn,Register rm)3614*f5c631daSSadaf Ebrahimi   void Smlal(Register rdlo, Register rdhi, Register rn, Register rm) {
3615*f5c631daSSadaf Ebrahimi     Smlal(al, rdlo, rdhi, rn, rm);
3616*f5c631daSSadaf Ebrahimi   }
3617*f5c631daSSadaf Ebrahimi 
Smlalbb(Condition cond,Register rdlo,Register rdhi,Register rn,Register rm)3618*f5c631daSSadaf Ebrahimi   void Smlalbb(
3619*f5c631daSSadaf Ebrahimi       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
3620*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo));
3621*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi));
3622*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3623*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3624*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3625*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3626*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3627*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3628*f5c631daSSadaf Ebrahimi     smlalbb(cond, rdlo, rdhi, rn, rm);
3629*f5c631daSSadaf Ebrahimi   }
Smlalbb(Register rdlo,Register rdhi,Register rn,Register rm)3630*f5c631daSSadaf Ebrahimi   void Smlalbb(Register rdlo, Register rdhi, Register rn, Register rm) {
3631*f5c631daSSadaf Ebrahimi     Smlalbb(al, rdlo, rdhi, rn, rm);
3632*f5c631daSSadaf Ebrahimi   }
3633*f5c631daSSadaf Ebrahimi 
Smlalbt(Condition cond,Register rdlo,Register rdhi,Register rn,Register rm)3634*f5c631daSSadaf Ebrahimi   void Smlalbt(
3635*f5c631daSSadaf Ebrahimi       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
3636*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo));
3637*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi));
3638*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3639*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3640*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3641*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3642*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3643*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3644*f5c631daSSadaf Ebrahimi     smlalbt(cond, rdlo, rdhi, rn, rm);
3645*f5c631daSSadaf Ebrahimi   }
Smlalbt(Register rdlo,Register rdhi,Register rn,Register rm)3646*f5c631daSSadaf Ebrahimi   void Smlalbt(Register rdlo, Register rdhi, Register rn, Register rm) {
3647*f5c631daSSadaf Ebrahimi     Smlalbt(al, rdlo, rdhi, rn, rm);
3648*f5c631daSSadaf Ebrahimi   }
3649*f5c631daSSadaf Ebrahimi 
Smlald(Condition cond,Register rdlo,Register rdhi,Register rn,Register rm)3650*f5c631daSSadaf Ebrahimi   void Smlald(
3651*f5c631daSSadaf Ebrahimi       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
3652*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo));
3653*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi));
3654*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3655*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3656*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3657*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3658*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3659*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3660*f5c631daSSadaf Ebrahimi     smlald(cond, rdlo, rdhi, rn, rm);
3661*f5c631daSSadaf Ebrahimi   }
Smlald(Register rdlo,Register rdhi,Register rn,Register rm)3662*f5c631daSSadaf Ebrahimi   void Smlald(Register rdlo, Register rdhi, Register rn, Register rm) {
3663*f5c631daSSadaf Ebrahimi     Smlald(al, rdlo, rdhi, rn, rm);
3664*f5c631daSSadaf Ebrahimi   }
3665*f5c631daSSadaf Ebrahimi 
Smlaldx(Condition cond,Register rdlo,Register rdhi,Register rn,Register rm)3666*f5c631daSSadaf Ebrahimi   void Smlaldx(
3667*f5c631daSSadaf Ebrahimi       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
3668*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo));
3669*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi));
3670*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3671*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3672*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3673*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3674*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3675*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3676*f5c631daSSadaf Ebrahimi     smlaldx(cond, rdlo, rdhi, rn, rm);
3677*f5c631daSSadaf Ebrahimi   }
Smlaldx(Register rdlo,Register rdhi,Register rn,Register rm)3678*f5c631daSSadaf Ebrahimi   void Smlaldx(Register rdlo, Register rdhi, Register rn, Register rm) {
3679*f5c631daSSadaf Ebrahimi     Smlaldx(al, rdlo, rdhi, rn, rm);
3680*f5c631daSSadaf Ebrahimi   }
3681*f5c631daSSadaf Ebrahimi 
Smlals(Condition cond,Register rdlo,Register rdhi,Register rn,Register rm)3682*f5c631daSSadaf Ebrahimi   void Smlals(
3683*f5c631daSSadaf Ebrahimi       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
3684*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo));
3685*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi));
3686*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3687*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3688*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3689*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3690*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3691*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3692*f5c631daSSadaf Ebrahimi     smlals(cond, rdlo, rdhi, rn, rm);
3693*f5c631daSSadaf Ebrahimi   }
Smlals(Register rdlo,Register rdhi,Register rn,Register rm)3694*f5c631daSSadaf Ebrahimi   void Smlals(Register rdlo, Register rdhi, Register rn, Register rm) {
3695*f5c631daSSadaf Ebrahimi     Smlals(al, rdlo, rdhi, rn, rm);
3696*f5c631daSSadaf Ebrahimi   }
3697*f5c631daSSadaf Ebrahimi 
Smlaltb(Condition cond,Register rdlo,Register rdhi,Register rn,Register rm)3698*f5c631daSSadaf Ebrahimi   void Smlaltb(
3699*f5c631daSSadaf Ebrahimi       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
3700*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo));
3701*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi));
3702*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3703*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3704*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3705*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3706*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3707*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3708*f5c631daSSadaf Ebrahimi     smlaltb(cond, rdlo, rdhi, rn, rm);
3709*f5c631daSSadaf Ebrahimi   }
Smlaltb(Register rdlo,Register rdhi,Register rn,Register rm)3710*f5c631daSSadaf Ebrahimi   void Smlaltb(Register rdlo, Register rdhi, Register rn, Register rm) {
3711*f5c631daSSadaf Ebrahimi     Smlaltb(al, rdlo, rdhi, rn, rm);
3712*f5c631daSSadaf Ebrahimi   }
3713*f5c631daSSadaf Ebrahimi 
Smlaltt(Condition cond,Register rdlo,Register rdhi,Register rn,Register rm)3714*f5c631daSSadaf Ebrahimi   void Smlaltt(
3715*f5c631daSSadaf Ebrahimi       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
3716*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo));
3717*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi));
3718*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3719*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3720*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3721*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3722*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3723*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3724*f5c631daSSadaf Ebrahimi     smlaltt(cond, rdlo, rdhi, rn, rm);
3725*f5c631daSSadaf Ebrahimi   }
Smlaltt(Register rdlo,Register rdhi,Register rn,Register rm)3726*f5c631daSSadaf Ebrahimi   void Smlaltt(Register rdlo, Register rdhi, Register rn, Register rm) {
3727*f5c631daSSadaf Ebrahimi     Smlaltt(al, rdlo, rdhi, rn, rm);
3728*f5c631daSSadaf Ebrahimi   }
3729*f5c631daSSadaf Ebrahimi 
Smlatb(Condition cond,Register rd,Register rn,Register rm,Register ra)3730*f5c631daSSadaf Ebrahimi   void Smlatb(
3731*f5c631daSSadaf Ebrahimi       Condition cond, Register rd, Register rn, Register rm, Register ra) {
3732*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3733*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3734*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3735*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
3736*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3737*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3738*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3739*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3740*f5c631daSSadaf Ebrahimi     smlatb(cond, rd, rn, rm, ra);
3741*f5c631daSSadaf Ebrahimi   }
Smlatb(Register rd,Register rn,Register rm,Register ra)3742*f5c631daSSadaf Ebrahimi   void Smlatb(Register rd, Register rn, Register rm, Register ra) {
3743*f5c631daSSadaf Ebrahimi     Smlatb(al, rd, rn, rm, ra);
3744*f5c631daSSadaf Ebrahimi   }
3745*f5c631daSSadaf Ebrahimi 
Smlatt(Condition cond,Register rd,Register rn,Register rm,Register ra)3746*f5c631daSSadaf Ebrahimi   void Smlatt(
3747*f5c631daSSadaf Ebrahimi       Condition cond, Register rd, Register rn, Register rm, Register ra) {
3748*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3749*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3750*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3751*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
3752*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3753*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3754*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3755*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3756*f5c631daSSadaf Ebrahimi     smlatt(cond, rd, rn, rm, ra);
3757*f5c631daSSadaf Ebrahimi   }
Smlatt(Register rd,Register rn,Register rm,Register ra)3758*f5c631daSSadaf Ebrahimi   void Smlatt(Register rd, Register rn, Register rm, Register ra) {
3759*f5c631daSSadaf Ebrahimi     Smlatt(al, rd, rn, rm, ra);
3760*f5c631daSSadaf Ebrahimi   }
3761*f5c631daSSadaf Ebrahimi 
Smlawb(Condition cond,Register rd,Register rn,Register rm,Register ra)3762*f5c631daSSadaf Ebrahimi   void Smlawb(
3763*f5c631daSSadaf Ebrahimi       Condition cond, Register rd, Register rn, Register rm, Register ra) {
3764*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3765*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3766*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3767*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
3768*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3769*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3770*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3771*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3772*f5c631daSSadaf Ebrahimi     smlawb(cond, rd, rn, rm, ra);
3773*f5c631daSSadaf Ebrahimi   }
Smlawb(Register rd,Register rn,Register rm,Register ra)3774*f5c631daSSadaf Ebrahimi   void Smlawb(Register rd, Register rn, Register rm, Register ra) {
3775*f5c631daSSadaf Ebrahimi     Smlawb(al, rd, rn, rm, ra);
3776*f5c631daSSadaf Ebrahimi   }
3777*f5c631daSSadaf Ebrahimi 
Smlawt(Condition cond,Register rd,Register rn,Register rm,Register ra)3778*f5c631daSSadaf Ebrahimi   void Smlawt(
3779*f5c631daSSadaf Ebrahimi       Condition cond, Register rd, Register rn, Register rm, Register ra) {
3780*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3781*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3782*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3783*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
3784*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3785*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3786*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3787*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3788*f5c631daSSadaf Ebrahimi     smlawt(cond, rd, rn, rm, ra);
3789*f5c631daSSadaf Ebrahimi   }
Smlawt(Register rd,Register rn,Register rm,Register ra)3790*f5c631daSSadaf Ebrahimi   void Smlawt(Register rd, Register rn, Register rm, Register ra) {
3791*f5c631daSSadaf Ebrahimi     Smlawt(al, rd, rn, rm, ra);
3792*f5c631daSSadaf Ebrahimi   }
3793*f5c631daSSadaf Ebrahimi 
Smlsd(Condition cond,Register rd,Register rn,Register rm,Register ra)3794*f5c631daSSadaf Ebrahimi   void Smlsd(
3795*f5c631daSSadaf Ebrahimi       Condition cond, Register rd, Register rn, Register rm, Register ra) {
3796*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3797*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3798*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3799*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
3800*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3801*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3802*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3803*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3804*f5c631daSSadaf Ebrahimi     smlsd(cond, rd, rn, rm, ra);
3805*f5c631daSSadaf Ebrahimi   }
Smlsd(Register rd,Register rn,Register rm,Register ra)3806*f5c631daSSadaf Ebrahimi   void Smlsd(Register rd, Register rn, Register rm, Register ra) {
3807*f5c631daSSadaf Ebrahimi     Smlsd(al, rd, rn, rm, ra);
3808*f5c631daSSadaf Ebrahimi   }
3809*f5c631daSSadaf Ebrahimi 
Smlsdx(Condition cond,Register rd,Register rn,Register rm,Register ra)3810*f5c631daSSadaf Ebrahimi   void Smlsdx(
3811*f5c631daSSadaf Ebrahimi       Condition cond, Register rd, Register rn, Register rm, Register ra) {
3812*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3813*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3814*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3815*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
3816*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3817*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3818*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3819*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3820*f5c631daSSadaf Ebrahimi     smlsdx(cond, rd, rn, rm, ra);
3821*f5c631daSSadaf Ebrahimi   }
Smlsdx(Register rd,Register rn,Register rm,Register ra)3822*f5c631daSSadaf Ebrahimi   void Smlsdx(Register rd, Register rn, Register rm, Register ra) {
3823*f5c631daSSadaf Ebrahimi     Smlsdx(al, rd, rn, rm, ra);
3824*f5c631daSSadaf Ebrahimi   }
3825*f5c631daSSadaf Ebrahimi 
Smlsld(Condition cond,Register rdlo,Register rdhi,Register rn,Register rm)3826*f5c631daSSadaf Ebrahimi   void Smlsld(
3827*f5c631daSSadaf Ebrahimi       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
3828*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo));
3829*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi));
3830*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3831*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3832*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3833*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3834*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3835*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3836*f5c631daSSadaf Ebrahimi     smlsld(cond, rdlo, rdhi, rn, rm);
3837*f5c631daSSadaf Ebrahimi   }
Smlsld(Register rdlo,Register rdhi,Register rn,Register rm)3838*f5c631daSSadaf Ebrahimi   void Smlsld(Register rdlo, Register rdhi, Register rn, Register rm) {
3839*f5c631daSSadaf Ebrahimi     Smlsld(al, rdlo, rdhi, rn, rm);
3840*f5c631daSSadaf Ebrahimi   }
3841*f5c631daSSadaf Ebrahimi 
Smlsldx(Condition cond,Register rdlo,Register rdhi,Register rn,Register rm)3842*f5c631daSSadaf Ebrahimi   void Smlsldx(
3843*f5c631daSSadaf Ebrahimi       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
3844*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo));
3845*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi));
3846*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3847*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3848*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3849*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3850*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3851*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3852*f5c631daSSadaf Ebrahimi     smlsldx(cond, rdlo, rdhi, rn, rm);
3853*f5c631daSSadaf Ebrahimi   }
Smlsldx(Register rdlo,Register rdhi,Register rn,Register rm)3854*f5c631daSSadaf Ebrahimi   void Smlsldx(Register rdlo, Register rdhi, Register rn, Register rm) {
3855*f5c631daSSadaf Ebrahimi     Smlsldx(al, rdlo, rdhi, rn, rm);
3856*f5c631daSSadaf Ebrahimi   }
3857*f5c631daSSadaf Ebrahimi 
Smmla(Condition cond,Register rd,Register rn,Register rm,Register ra)3858*f5c631daSSadaf Ebrahimi   void Smmla(
3859*f5c631daSSadaf Ebrahimi       Condition cond, Register rd, Register rn, Register rm, Register ra) {
3860*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3861*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3862*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3863*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
3864*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3865*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3866*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3867*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3868*f5c631daSSadaf Ebrahimi     smmla(cond, rd, rn, rm, ra);
3869*f5c631daSSadaf Ebrahimi   }
Smmla(Register rd,Register rn,Register rm,Register ra)3870*f5c631daSSadaf Ebrahimi   void Smmla(Register rd, Register rn, Register rm, Register ra) {
3871*f5c631daSSadaf Ebrahimi     Smmla(al, rd, rn, rm, ra);
3872*f5c631daSSadaf Ebrahimi   }
3873*f5c631daSSadaf Ebrahimi 
Smmlar(Condition cond,Register rd,Register rn,Register rm,Register ra)3874*f5c631daSSadaf Ebrahimi   void Smmlar(
3875*f5c631daSSadaf Ebrahimi       Condition cond, Register rd, Register rn, Register rm, Register ra) {
3876*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3877*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3878*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3879*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
3880*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3881*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3882*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3883*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3884*f5c631daSSadaf Ebrahimi     smmlar(cond, rd, rn, rm, ra);
3885*f5c631daSSadaf Ebrahimi   }
Smmlar(Register rd,Register rn,Register rm,Register ra)3886*f5c631daSSadaf Ebrahimi   void Smmlar(Register rd, Register rn, Register rm, Register ra) {
3887*f5c631daSSadaf Ebrahimi     Smmlar(al, rd, rn, rm, ra);
3888*f5c631daSSadaf Ebrahimi   }
3889*f5c631daSSadaf Ebrahimi 
Smmls(Condition cond,Register rd,Register rn,Register rm,Register ra)3890*f5c631daSSadaf Ebrahimi   void Smmls(
3891*f5c631daSSadaf Ebrahimi       Condition cond, Register rd, Register rn, Register rm, Register ra) {
3892*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3893*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3894*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3895*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
3896*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3897*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3898*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3899*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3900*f5c631daSSadaf Ebrahimi     smmls(cond, rd, rn, rm, ra);
3901*f5c631daSSadaf Ebrahimi   }
Smmls(Register rd,Register rn,Register rm,Register ra)3902*f5c631daSSadaf Ebrahimi   void Smmls(Register rd, Register rn, Register rm, Register ra) {
3903*f5c631daSSadaf Ebrahimi     Smmls(al, rd, rn, rm, ra);
3904*f5c631daSSadaf Ebrahimi   }
3905*f5c631daSSadaf Ebrahimi 
Smmlsr(Condition cond,Register rd,Register rn,Register rm,Register ra)3906*f5c631daSSadaf Ebrahimi   void Smmlsr(
3907*f5c631daSSadaf Ebrahimi       Condition cond, Register rd, Register rn, Register rm, Register ra) {
3908*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3909*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3910*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3911*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
3912*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3913*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3914*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3915*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3916*f5c631daSSadaf Ebrahimi     smmlsr(cond, rd, rn, rm, ra);
3917*f5c631daSSadaf Ebrahimi   }
Smmlsr(Register rd,Register rn,Register rm,Register ra)3918*f5c631daSSadaf Ebrahimi   void Smmlsr(Register rd, Register rn, Register rm, Register ra) {
3919*f5c631daSSadaf Ebrahimi     Smmlsr(al, rd, rn, rm, ra);
3920*f5c631daSSadaf Ebrahimi   }
3921*f5c631daSSadaf Ebrahimi 
Smmul(Condition cond,Register rd,Register rn,Register rm)3922*f5c631daSSadaf Ebrahimi   void Smmul(Condition cond, Register rd, Register rn, Register rm) {
3923*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3924*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3925*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3926*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3927*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3928*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3929*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3930*f5c631daSSadaf Ebrahimi     smmul(cond, rd, rn, rm);
3931*f5c631daSSadaf Ebrahimi   }
Smmul(Register rd,Register rn,Register rm)3932*f5c631daSSadaf Ebrahimi   void Smmul(Register rd, Register rn, Register rm) { Smmul(al, rd, rn, rm); }
3933*f5c631daSSadaf Ebrahimi 
Smmulr(Condition cond,Register rd,Register rn,Register rm)3934*f5c631daSSadaf Ebrahimi   void Smmulr(Condition cond, Register rd, Register rn, Register rm) {
3935*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3936*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3937*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3938*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3939*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3940*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3941*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3942*f5c631daSSadaf Ebrahimi     smmulr(cond, rd, rn, rm);
3943*f5c631daSSadaf Ebrahimi   }
Smmulr(Register rd,Register rn,Register rm)3944*f5c631daSSadaf Ebrahimi   void Smmulr(Register rd, Register rn, Register rm) { Smmulr(al, rd, rn, rm); }
3945*f5c631daSSadaf Ebrahimi 
Smuad(Condition cond,Register rd,Register rn,Register rm)3946*f5c631daSSadaf Ebrahimi   void Smuad(Condition cond, Register rd, Register rn, Register rm) {
3947*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3948*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3949*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3950*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3951*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3952*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3953*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3954*f5c631daSSadaf Ebrahimi     smuad(cond, rd, rn, rm);
3955*f5c631daSSadaf Ebrahimi   }
Smuad(Register rd,Register rn,Register rm)3956*f5c631daSSadaf Ebrahimi   void Smuad(Register rd, Register rn, Register rm) { Smuad(al, rd, rn, rm); }
3957*f5c631daSSadaf Ebrahimi 
Smuadx(Condition cond,Register rd,Register rn,Register rm)3958*f5c631daSSadaf Ebrahimi   void Smuadx(Condition cond, Register rd, Register rn, Register rm) {
3959*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3960*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3961*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3962*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3963*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3964*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3965*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3966*f5c631daSSadaf Ebrahimi     smuadx(cond, rd, rn, rm);
3967*f5c631daSSadaf Ebrahimi   }
Smuadx(Register rd,Register rn,Register rm)3968*f5c631daSSadaf Ebrahimi   void Smuadx(Register rd, Register rn, Register rm) { Smuadx(al, rd, rn, rm); }
3969*f5c631daSSadaf Ebrahimi 
Smulbb(Condition cond,Register rd,Register rn,Register rm)3970*f5c631daSSadaf Ebrahimi   void Smulbb(Condition cond, Register rd, Register rn, Register rm) {
3971*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3972*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3973*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3974*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3975*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3976*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3977*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3978*f5c631daSSadaf Ebrahimi     smulbb(cond, rd, rn, rm);
3979*f5c631daSSadaf Ebrahimi   }
Smulbb(Register rd,Register rn,Register rm)3980*f5c631daSSadaf Ebrahimi   void Smulbb(Register rd, Register rn, Register rm) { Smulbb(al, rd, rn, rm); }
3981*f5c631daSSadaf Ebrahimi 
Smulbt(Condition cond,Register rd,Register rn,Register rm)3982*f5c631daSSadaf Ebrahimi   void Smulbt(Condition cond, Register rd, Register rn, Register rm) {
3983*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
3984*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3985*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
3986*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
3987*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
3988*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
3989*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
3990*f5c631daSSadaf Ebrahimi     smulbt(cond, rd, rn, rm);
3991*f5c631daSSadaf Ebrahimi   }
Smulbt(Register rd,Register rn,Register rm)3992*f5c631daSSadaf Ebrahimi   void Smulbt(Register rd, Register rn, Register rm) { Smulbt(al, rd, rn, rm); }
3993*f5c631daSSadaf Ebrahimi 
Smull(Condition cond,Register rdlo,Register rdhi,Register rn,Register rm)3994*f5c631daSSadaf Ebrahimi   void Smull(
3995*f5c631daSSadaf Ebrahimi       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
3996*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo));
3997*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi));
3998*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
3999*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4000*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4001*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4002*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4003*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4004*f5c631daSSadaf Ebrahimi     smull(cond, rdlo, rdhi, rn, rm);
4005*f5c631daSSadaf Ebrahimi   }
Smull(Register rdlo,Register rdhi,Register rn,Register rm)4006*f5c631daSSadaf Ebrahimi   void Smull(Register rdlo, Register rdhi, Register rn, Register rm) {
4007*f5c631daSSadaf Ebrahimi     Smull(al, rdlo, rdhi, rn, rm);
4008*f5c631daSSadaf Ebrahimi   }
Smull(FlagsUpdate flags,Condition cond,Register rdlo,Register rdhi,Register rn,Register rm)4009*f5c631daSSadaf Ebrahimi   void Smull(FlagsUpdate flags,
4010*f5c631daSSadaf Ebrahimi              Condition cond,
4011*f5c631daSSadaf Ebrahimi              Register rdlo,
4012*f5c631daSSadaf Ebrahimi              Register rdhi,
4013*f5c631daSSadaf Ebrahimi              Register rn,
4014*f5c631daSSadaf Ebrahimi              Register rm) {
4015*f5c631daSSadaf Ebrahimi     switch (flags) {
4016*f5c631daSSadaf Ebrahimi       case LeaveFlags:
4017*f5c631daSSadaf Ebrahimi         Smull(cond, rdlo, rdhi, rn, rm);
4018*f5c631daSSadaf Ebrahimi         break;
4019*f5c631daSSadaf Ebrahimi       case SetFlags:
4020*f5c631daSSadaf Ebrahimi         Smulls(cond, rdlo, rdhi, rn, rm);
4021*f5c631daSSadaf Ebrahimi         break;
4022*f5c631daSSadaf Ebrahimi       case DontCare:
4023*f5c631daSSadaf Ebrahimi         Smull(cond, rdlo, rdhi, rn, rm);
4024*f5c631daSSadaf Ebrahimi         break;
4025*f5c631daSSadaf Ebrahimi     }
4026*f5c631daSSadaf Ebrahimi   }
Smull(FlagsUpdate flags,Register rdlo,Register rdhi,Register rn,Register rm)4027*f5c631daSSadaf Ebrahimi   void Smull(FlagsUpdate flags,
4028*f5c631daSSadaf Ebrahimi              Register rdlo,
4029*f5c631daSSadaf Ebrahimi              Register rdhi,
4030*f5c631daSSadaf Ebrahimi              Register rn,
4031*f5c631daSSadaf Ebrahimi              Register rm) {
4032*f5c631daSSadaf Ebrahimi     Smull(flags, al, rdlo, rdhi, rn, rm);
4033*f5c631daSSadaf Ebrahimi   }
4034*f5c631daSSadaf Ebrahimi 
Smulls(Condition cond,Register rdlo,Register rdhi,Register rn,Register rm)4035*f5c631daSSadaf Ebrahimi   void Smulls(
4036*f5c631daSSadaf Ebrahimi       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
4037*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo));
4038*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi));
4039*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4040*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4041*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4042*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4043*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4044*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4045*f5c631daSSadaf Ebrahimi     smulls(cond, rdlo, rdhi, rn, rm);
4046*f5c631daSSadaf Ebrahimi   }
Smulls(Register rdlo,Register rdhi,Register rn,Register rm)4047*f5c631daSSadaf Ebrahimi   void Smulls(Register rdlo, Register rdhi, Register rn, Register rm) {
4048*f5c631daSSadaf Ebrahimi     Smulls(al, rdlo, rdhi, rn, rm);
4049*f5c631daSSadaf Ebrahimi   }
4050*f5c631daSSadaf Ebrahimi 
Smultb(Condition cond,Register rd,Register rn,Register rm)4051*f5c631daSSadaf Ebrahimi   void Smultb(Condition cond, Register rd, Register rn, Register rm) {
4052*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4053*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4054*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4055*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4056*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4057*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4058*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4059*f5c631daSSadaf Ebrahimi     smultb(cond, rd, rn, rm);
4060*f5c631daSSadaf Ebrahimi   }
Smultb(Register rd,Register rn,Register rm)4061*f5c631daSSadaf Ebrahimi   void Smultb(Register rd, Register rn, Register rm) { Smultb(al, rd, rn, rm); }
4062*f5c631daSSadaf Ebrahimi 
Smultt(Condition cond,Register rd,Register rn,Register rm)4063*f5c631daSSadaf Ebrahimi   void Smultt(Condition cond, Register rd, Register rn, Register rm) {
4064*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4065*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4066*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4067*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4068*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4069*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4070*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4071*f5c631daSSadaf Ebrahimi     smultt(cond, rd, rn, rm);
4072*f5c631daSSadaf Ebrahimi   }
Smultt(Register rd,Register rn,Register rm)4073*f5c631daSSadaf Ebrahimi   void Smultt(Register rd, Register rn, Register rm) { Smultt(al, rd, rn, rm); }
4074*f5c631daSSadaf Ebrahimi 
Smulwb(Condition cond,Register rd,Register rn,Register rm)4075*f5c631daSSadaf Ebrahimi   void Smulwb(Condition cond, Register rd, Register rn, Register rm) {
4076*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4077*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4078*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4079*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4080*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4081*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4082*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4083*f5c631daSSadaf Ebrahimi     smulwb(cond, rd, rn, rm);
4084*f5c631daSSadaf Ebrahimi   }
Smulwb(Register rd,Register rn,Register rm)4085*f5c631daSSadaf Ebrahimi   void Smulwb(Register rd, Register rn, Register rm) { Smulwb(al, rd, rn, rm); }
4086*f5c631daSSadaf Ebrahimi 
Smulwt(Condition cond,Register rd,Register rn,Register rm)4087*f5c631daSSadaf Ebrahimi   void Smulwt(Condition cond, Register rd, Register rn, Register rm) {
4088*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4089*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4090*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4091*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4092*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4093*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4094*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4095*f5c631daSSadaf Ebrahimi     smulwt(cond, rd, rn, rm);
4096*f5c631daSSadaf Ebrahimi   }
Smulwt(Register rd,Register rn,Register rm)4097*f5c631daSSadaf Ebrahimi   void Smulwt(Register rd, Register rn, Register rm) { Smulwt(al, rd, rn, rm); }
4098*f5c631daSSadaf Ebrahimi 
Smusd(Condition cond,Register rd,Register rn,Register rm)4099*f5c631daSSadaf Ebrahimi   void Smusd(Condition cond, Register rd, Register rn, Register rm) {
4100*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4101*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4102*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4103*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4104*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4105*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4106*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4107*f5c631daSSadaf Ebrahimi     smusd(cond, rd, rn, rm);
4108*f5c631daSSadaf Ebrahimi   }
Smusd(Register rd,Register rn,Register rm)4109*f5c631daSSadaf Ebrahimi   void Smusd(Register rd, Register rn, Register rm) { Smusd(al, rd, rn, rm); }
4110*f5c631daSSadaf Ebrahimi 
Smusdx(Condition cond,Register rd,Register rn,Register rm)4111*f5c631daSSadaf Ebrahimi   void Smusdx(Condition cond, Register rd, Register rn, Register rm) {
4112*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4113*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4114*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4115*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4116*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4117*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4118*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4119*f5c631daSSadaf Ebrahimi     smusdx(cond, rd, rn, rm);
4120*f5c631daSSadaf Ebrahimi   }
Smusdx(Register rd,Register rn,Register rm)4121*f5c631daSSadaf Ebrahimi   void Smusdx(Register rd, Register rn, Register rm) { Smusdx(al, rd, rn, rm); }
4122*f5c631daSSadaf Ebrahimi 
Ssat(Condition cond,Register rd,uint32_t imm,const Operand & operand)4123*f5c631daSSadaf Ebrahimi   void Ssat(Condition cond, Register rd, uint32_t imm, const Operand& operand) {
4124*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4125*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4126*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4127*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4128*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4129*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4130*f5c631daSSadaf Ebrahimi     ssat(cond, rd, imm, operand);
4131*f5c631daSSadaf Ebrahimi   }
Ssat(Register rd,uint32_t imm,const Operand & operand)4132*f5c631daSSadaf Ebrahimi   void Ssat(Register rd, uint32_t imm, const Operand& operand) {
4133*f5c631daSSadaf Ebrahimi     Ssat(al, rd, imm, operand);
4134*f5c631daSSadaf Ebrahimi   }
4135*f5c631daSSadaf Ebrahimi 
Ssat16(Condition cond,Register rd,uint32_t imm,Register rn)4136*f5c631daSSadaf Ebrahimi   void Ssat16(Condition cond, Register rd, uint32_t imm, Register rn) {
4137*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4138*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4139*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4140*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4141*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4142*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4143*f5c631daSSadaf Ebrahimi     ssat16(cond, rd, imm, rn);
4144*f5c631daSSadaf Ebrahimi   }
Ssat16(Register rd,uint32_t imm,Register rn)4145*f5c631daSSadaf Ebrahimi   void Ssat16(Register rd, uint32_t imm, Register rn) {
4146*f5c631daSSadaf Ebrahimi     Ssat16(al, rd, imm, rn);
4147*f5c631daSSadaf Ebrahimi   }
4148*f5c631daSSadaf Ebrahimi 
Ssax(Condition cond,Register rd,Register rn,Register rm)4149*f5c631daSSadaf Ebrahimi   void Ssax(Condition cond, Register rd, Register rn, Register rm) {
4150*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4151*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4152*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4153*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4154*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4155*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4156*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4157*f5c631daSSadaf Ebrahimi     ssax(cond, rd, rn, rm);
4158*f5c631daSSadaf Ebrahimi   }
Ssax(Register rd,Register rn,Register rm)4159*f5c631daSSadaf Ebrahimi   void Ssax(Register rd, Register rn, Register rm) { Ssax(al, rd, rn, rm); }
4160*f5c631daSSadaf Ebrahimi 
Ssub16(Condition cond,Register rd,Register rn,Register rm)4161*f5c631daSSadaf Ebrahimi   void Ssub16(Condition cond, Register rd, Register rn, Register rm) {
4162*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4163*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4164*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4165*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4166*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4167*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4168*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4169*f5c631daSSadaf Ebrahimi     ssub16(cond, rd, rn, rm);
4170*f5c631daSSadaf Ebrahimi   }
Ssub16(Register rd,Register rn,Register rm)4171*f5c631daSSadaf Ebrahimi   void Ssub16(Register rd, Register rn, Register rm) { Ssub16(al, rd, rn, rm); }
4172*f5c631daSSadaf Ebrahimi 
Ssub8(Condition cond,Register rd,Register rn,Register rm)4173*f5c631daSSadaf Ebrahimi   void Ssub8(Condition cond, Register rd, Register rn, Register rm) {
4174*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4175*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4176*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4177*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4178*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4179*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4180*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4181*f5c631daSSadaf Ebrahimi     ssub8(cond, rd, rn, rm);
4182*f5c631daSSadaf Ebrahimi   }
Ssub8(Register rd,Register rn,Register rm)4183*f5c631daSSadaf Ebrahimi   void Ssub8(Register rd, Register rn, Register rm) { Ssub8(al, rd, rn, rm); }
4184*f5c631daSSadaf Ebrahimi 
Stl(Condition cond,Register rt,const MemOperand & operand)4185*f5c631daSSadaf Ebrahimi   void Stl(Condition cond, Register rt, const MemOperand& operand) {
4186*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
4187*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4188*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4189*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4190*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4191*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4192*f5c631daSSadaf Ebrahimi     stl(cond, rt, operand);
4193*f5c631daSSadaf Ebrahimi   }
Stl(Register rt,const MemOperand & operand)4194*f5c631daSSadaf Ebrahimi   void Stl(Register rt, const MemOperand& operand) { Stl(al, rt, operand); }
4195*f5c631daSSadaf Ebrahimi 
Stlb(Condition cond,Register rt,const MemOperand & operand)4196*f5c631daSSadaf Ebrahimi   void Stlb(Condition cond, Register rt, const MemOperand& operand) {
4197*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
4198*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4199*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4200*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4201*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4202*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4203*f5c631daSSadaf Ebrahimi     stlb(cond, rt, operand);
4204*f5c631daSSadaf Ebrahimi   }
Stlb(Register rt,const MemOperand & operand)4205*f5c631daSSadaf Ebrahimi   void Stlb(Register rt, const MemOperand& operand) { Stlb(al, rt, operand); }
4206*f5c631daSSadaf Ebrahimi 
Stlex(Condition cond,Register rd,Register rt,const MemOperand & operand)4207*f5c631daSSadaf Ebrahimi   void Stlex(Condition cond,
4208*f5c631daSSadaf Ebrahimi              Register rd,
4209*f5c631daSSadaf Ebrahimi              Register rt,
4210*f5c631daSSadaf Ebrahimi              const MemOperand& operand) {
4211*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4212*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
4213*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4214*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4215*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4216*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4217*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4218*f5c631daSSadaf Ebrahimi     stlex(cond, rd, rt, operand);
4219*f5c631daSSadaf Ebrahimi   }
Stlex(Register rd,Register rt,const MemOperand & operand)4220*f5c631daSSadaf Ebrahimi   void Stlex(Register rd, Register rt, const MemOperand& operand) {
4221*f5c631daSSadaf Ebrahimi     Stlex(al, rd, rt, operand);
4222*f5c631daSSadaf Ebrahimi   }
4223*f5c631daSSadaf Ebrahimi 
Stlexb(Condition cond,Register rd,Register rt,const MemOperand & operand)4224*f5c631daSSadaf Ebrahimi   void Stlexb(Condition cond,
4225*f5c631daSSadaf Ebrahimi               Register rd,
4226*f5c631daSSadaf Ebrahimi               Register rt,
4227*f5c631daSSadaf Ebrahimi               const MemOperand& operand) {
4228*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4229*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
4230*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4231*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4232*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4233*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4234*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4235*f5c631daSSadaf Ebrahimi     stlexb(cond, rd, rt, operand);
4236*f5c631daSSadaf Ebrahimi   }
Stlexb(Register rd,Register rt,const MemOperand & operand)4237*f5c631daSSadaf Ebrahimi   void Stlexb(Register rd, Register rt, const MemOperand& operand) {
4238*f5c631daSSadaf Ebrahimi     Stlexb(al, rd, rt, operand);
4239*f5c631daSSadaf Ebrahimi   }
4240*f5c631daSSadaf Ebrahimi 
Stlexd(Condition cond,Register rd,Register rt,Register rt2,const MemOperand & operand)4241*f5c631daSSadaf Ebrahimi   void Stlexd(Condition cond,
4242*f5c631daSSadaf Ebrahimi               Register rd,
4243*f5c631daSSadaf Ebrahimi               Register rt,
4244*f5c631daSSadaf Ebrahimi               Register rt2,
4245*f5c631daSSadaf Ebrahimi               const MemOperand& operand) {
4246*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4247*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
4248*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt2));
4249*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4250*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4251*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4252*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4253*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4254*f5c631daSSadaf Ebrahimi     stlexd(cond, rd, rt, rt2, operand);
4255*f5c631daSSadaf Ebrahimi   }
Stlexd(Register rd,Register rt,Register rt2,const MemOperand & operand)4256*f5c631daSSadaf Ebrahimi   void Stlexd(Register rd,
4257*f5c631daSSadaf Ebrahimi               Register rt,
4258*f5c631daSSadaf Ebrahimi               Register rt2,
4259*f5c631daSSadaf Ebrahimi               const MemOperand& operand) {
4260*f5c631daSSadaf Ebrahimi     Stlexd(al, rd, rt, rt2, operand);
4261*f5c631daSSadaf Ebrahimi   }
4262*f5c631daSSadaf Ebrahimi 
Stlexh(Condition cond,Register rd,Register rt,const MemOperand & operand)4263*f5c631daSSadaf Ebrahimi   void Stlexh(Condition cond,
4264*f5c631daSSadaf Ebrahimi               Register rd,
4265*f5c631daSSadaf Ebrahimi               Register rt,
4266*f5c631daSSadaf Ebrahimi               const MemOperand& operand) {
4267*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4268*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
4269*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4270*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4271*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4272*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4273*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4274*f5c631daSSadaf Ebrahimi     stlexh(cond, rd, rt, operand);
4275*f5c631daSSadaf Ebrahimi   }
Stlexh(Register rd,Register rt,const MemOperand & operand)4276*f5c631daSSadaf Ebrahimi   void Stlexh(Register rd, Register rt, const MemOperand& operand) {
4277*f5c631daSSadaf Ebrahimi     Stlexh(al, rd, rt, operand);
4278*f5c631daSSadaf Ebrahimi   }
4279*f5c631daSSadaf Ebrahimi 
Stlh(Condition cond,Register rt,const MemOperand & operand)4280*f5c631daSSadaf Ebrahimi   void Stlh(Condition cond, Register rt, const MemOperand& operand) {
4281*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
4282*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4283*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4284*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4285*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4286*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4287*f5c631daSSadaf Ebrahimi     stlh(cond, rt, operand);
4288*f5c631daSSadaf Ebrahimi   }
Stlh(Register rt,const MemOperand & operand)4289*f5c631daSSadaf Ebrahimi   void Stlh(Register rt, const MemOperand& operand) { Stlh(al, rt, operand); }
4290*f5c631daSSadaf Ebrahimi 
Stm(Condition cond,Register rn,WriteBack write_back,RegisterList registers)4291*f5c631daSSadaf Ebrahimi   void Stm(Condition cond,
4292*f5c631daSSadaf Ebrahimi            Register rn,
4293*f5c631daSSadaf Ebrahimi            WriteBack write_back,
4294*f5c631daSSadaf Ebrahimi            RegisterList registers) {
4295*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4296*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
4297*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4298*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4299*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4300*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4301*f5c631daSSadaf Ebrahimi     stm(cond, rn, write_back, registers);
4302*f5c631daSSadaf Ebrahimi   }
Stm(Register rn,WriteBack write_back,RegisterList registers)4303*f5c631daSSadaf Ebrahimi   void Stm(Register rn, WriteBack write_back, RegisterList registers) {
4304*f5c631daSSadaf Ebrahimi     Stm(al, rn, write_back, registers);
4305*f5c631daSSadaf Ebrahimi   }
4306*f5c631daSSadaf Ebrahimi 
Stmda(Condition cond,Register rn,WriteBack write_back,RegisterList registers)4307*f5c631daSSadaf Ebrahimi   void Stmda(Condition cond,
4308*f5c631daSSadaf Ebrahimi              Register rn,
4309*f5c631daSSadaf Ebrahimi              WriteBack write_back,
4310*f5c631daSSadaf Ebrahimi              RegisterList registers) {
4311*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4312*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
4313*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4314*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4315*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4316*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4317*f5c631daSSadaf Ebrahimi     stmda(cond, rn, write_back, registers);
4318*f5c631daSSadaf Ebrahimi   }
Stmda(Register rn,WriteBack write_back,RegisterList registers)4319*f5c631daSSadaf Ebrahimi   void Stmda(Register rn, WriteBack write_back, RegisterList registers) {
4320*f5c631daSSadaf Ebrahimi     Stmda(al, rn, write_back, registers);
4321*f5c631daSSadaf Ebrahimi   }
4322*f5c631daSSadaf Ebrahimi 
Stmdb(Condition cond,Register rn,WriteBack write_back,RegisterList registers)4323*f5c631daSSadaf Ebrahimi   void Stmdb(Condition cond,
4324*f5c631daSSadaf Ebrahimi              Register rn,
4325*f5c631daSSadaf Ebrahimi              WriteBack write_back,
4326*f5c631daSSadaf Ebrahimi              RegisterList registers) {
4327*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4328*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
4329*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4330*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4331*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4332*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4333*f5c631daSSadaf Ebrahimi     stmdb(cond, rn, write_back, registers);
4334*f5c631daSSadaf Ebrahimi   }
Stmdb(Register rn,WriteBack write_back,RegisterList registers)4335*f5c631daSSadaf Ebrahimi   void Stmdb(Register rn, WriteBack write_back, RegisterList registers) {
4336*f5c631daSSadaf Ebrahimi     Stmdb(al, rn, write_back, registers);
4337*f5c631daSSadaf Ebrahimi   }
4338*f5c631daSSadaf Ebrahimi 
Stmea(Condition cond,Register rn,WriteBack write_back,RegisterList registers)4339*f5c631daSSadaf Ebrahimi   void Stmea(Condition cond,
4340*f5c631daSSadaf Ebrahimi              Register rn,
4341*f5c631daSSadaf Ebrahimi              WriteBack write_back,
4342*f5c631daSSadaf Ebrahimi              RegisterList registers) {
4343*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4344*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
4345*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4346*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4347*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4348*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4349*f5c631daSSadaf Ebrahimi     stmea(cond, rn, write_back, registers);
4350*f5c631daSSadaf Ebrahimi   }
Stmea(Register rn,WriteBack write_back,RegisterList registers)4351*f5c631daSSadaf Ebrahimi   void Stmea(Register rn, WriteBack write_back, RegisterList registers) {
4352*f5c631daSSadaf Ebrahimi     Stmea(al, rn, write_back, registers);
4353*f5c631daSSadaf Ebrahimi   }
4354*f5c631daSSadaf Ebrahimi 
Stmed(Condition cond,Register rn,WriteBack write_back,RegisterList registers)4355*f5c631daSSadaf Ebrahimi   void Stmed(Condition cond,
4356*f5c631daSSadaf Ebrahimi              Register rn,
4357*f5c631daSSadaf Ebrahimi              WriteBack write_back,
4358*f5c631daSSadaf Ebrahimi              RegisterList registers) {
4359*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4360*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
4361*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4362*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4363*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4364*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4365*f5c631daSSadaf Ebrahimi     stmed(cond, rn, write_back, registers);
4366*f5c631daSSadaf Ebrahimi   }
Stmed(Register rn,WriteBack write_back,RegisterList registers)4367*f5c631daSSadaf Ebrahimi   void Stmed(Register rn, WriteBack write_back, RegisterList registers) {
4368*f5c631daSSadaf Ebrahimi     Stmed(al, rn, write_back, registers);
4369*f5c631daSSadaf Ebrahimi   }
4370*f5c631daSSadaf Ebrahimi 
Stmfa(Condition cond,Register rn,WriteBack write_back,RegisterList registers)4371*f5c631daSSadaf Ebrahimi   void Stmfa(Condition cond,
4372*f5c631daSSadaf Ebrahimi              Register rn,
4373*f5c631daSSadaf Ebrahimi              WriteBack write_back,
4374*f5c631daSSadaf Ebrahimi              RegisterList registers) {
4375*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4376*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
4377*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4378*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4379*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4380*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4381*f5c631daSSadaf Ebrahimi     stmfa(cond, rn, write_back, registers);
4382*f5c631daSSadaf Ebrahimi   }
Stmfa(Register rn,WriteBack write_back,RegisterList registers)4383*f5c631daSSadaf Ebrahimi   void Stmfa(Register rn, WriteBack write_back, RegisterList registers) {
4384*f5c631daSSadaf Ebrahimi     Stmfa(al, rn, write_back, registers);
4385*f5c631daSSadaf Ebrahimi   }
4386*f5c631daSSadaf Ebrahimi 
Stmfd(Condition cond,Register rn,WriteBack write_back,RegisterList registers)4387*f5c631daSSadaf Ebrahimi   void Stmfd(Condition cond,
4388*f5c631daSSadaf Ebrahimi              Register rn,
4389*f5c631daSSadaf Ebrahimi              WriteBack write_back,
4390*f5c631daSSadaf Ebrahimi              RegisterList registers) {
4391*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4392*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
4393*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4394*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4395*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4396*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4397*f5c631daSSadaf Ebrahimi     stmfd(cond, rn, write_back, registers);
4398*f5c631daSSadaf Ebrahimi   }
Stmfd(Register rn,WriteBack write_back,RegisterList registers)4399*f5c631daSSadaf Ebrahimi   void Stmfd(Register rn, WriteBack write_back, RegisterList registers) {
4400*f5c631daSSadaf Ebrahimi     Stmfd(al, rn, write_back, registers);
4401*f5c631daSSadaf Ebrahimi   }
4402*f5c631daSSadaf Ebrahimi 
Stmib(Condition cond,Register rn,WriteBack write_back,RegisterList registers)4403*f5c631daSSadaf Ebrahimi   void Stmib(Condition cond,
4404*f5c631daSSadaf Ebrahimi              Register rn,
4405*f5c631daSSadaf Ebrahimi              WriteBack write_back,
4406*f5c631daSSadaf Ebrahimi              RegisterList registers) {
4407*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4408*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(registers));
4409*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4410*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4411*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4412*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4413*f5c631daSSadaf Ebrahimi     stmib(cond, rn, write_back, registers);
4414*f5c631daSSadaf Ebrahimi   }
Stmib(Register rn,WriteBack write_back,RegisterList registers)4415*f5c631daSSadaf Ebrahimi   void Stmib(Register rn, WriteBack write_back, RegisterList registers) {
4416*f5c631daSSadaf Ebrahimi     Stmib(al, rn, write_back, registers);
4417*f5c631daSSadaf Ebrahimi   }
4418*f5c631daSSadaf Ebrahimi 
Str(Condition cond,Register rt,const MemOperand & operand)4419*f5c631daSSadaf Ebrahimi   void Str(Condition cond, Register rt, const MemOperand& operand) {
4420*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
4421*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4422*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4423*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4424*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4425*f5c631daSSadaf Ebrahimi     bool can_use_it =
4426*f5c631daSSadaf Ebrahimi         // STR{<c>}{<q>} <Rt>, [<Rn> {, #{+}<imm>}] ; T1
4427*f5c631daSSadaf Ebrahimi         (operand.IsImmediate() && rt.IsLow() &&
4428*f5c631daSSadaf Ebrahimi          operand.GetBaseRegister().IsLow() &&
4429*f5c631daSSadaf Ebrahimi          operand.IsOffsetImmediateWithinRange(0, 124, 4) &&
4430*f5c631daSSadaf Ebrahimi          (operand.GetAddrMode() == Offset)) ||
4431*f5c631daSSadaf Ebrahimi         // STR{<c>}{<q>} <Rt>, [SP{, #{+}<imm>}] ; T2
4432*f5c631daSSadaf Ebrahimi         (operand.IsImmediate() && rt.IsLow() &&
4433*f5c631daSSadaf Ebrahimi          operand.GetBaseRegister().IsSP() &&
4434*f5c631daSSadaf Ebrahimi          operand.IsOffsetImmediateWithinRange(0, 1020, 4) &&
4435*f5c631daSSadaf Ebrahimi          (operand.GetAddrMode() == Offset)) ||
4436*f5c631daSSadaf Ebrahimi         // STR{<c>}{<q>} <Rt>, [<Rn>, {+}<Rm>] ; T1
4437*f5c631daSSadaf Ebrahimi         (operand.IsPlainRegister() && rt.IsLow() &&
4438*f5c631daSSadaf Ebrahimi          operand.GetBaseRegister().IsLow() &&
4439*f5c631daSSadaf Ebrahimi          operand.GetOffsetRegister().IsLow() && operand.GetSign().IsPlus() &&
4440*f5c631daSSadaf Ebrahimi          (operand.GetAddrMode() == Offset));
4441*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard, can_use_it);
4442*f5c631daSSadaf Ebrahimi     str(cond, rt, operand);
4443*f5c631daSSadaf Ebrahimi   }
Str(Register rt,const MemOperand & operand)4444*f5c631daSSadaf Ebrahimi   void Str(Register rt, const MemOperand& operand) { Str(al, rt, operand); }
4445*f5c631daSSadaf Ebrahimi 
Strb(Condition cond,Register rt,const MemOperand & operand)4446*f5c631daSSadaf Ebrahimi   void Strb(Condition cond, Register rt, const MemOperand& operand) {
4447*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
4448*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4449*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4450*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4451*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4452*f5c631daSSadaf Ebrahimi     bool can_use_it =
4453*f5c631daSSadaf Ebrahimi         // STRB{<c>}{<q>} <Rt>, [<Rn> {, #{+}<imm>}] ; T1
4454*f5c631daSSadaf Ebrahimi         (operand.IsImmediate() && rt.IsLow() &&
4455*f5c631daSSadaf Ebrahimi          operand.GetBaseRegister().IsLow() &&
4456*f5c631daSSadaf Ebrahimi          operand.IsOffsetImmediateWithinRange(0, 31) &&
4457*f5c631daSSadaf Ebrahimi          (operand.GetAddrMode() == Offset)) ||
4458*f5c631daSSadaf Ebrahimi         // STRB{<c>}{<q>} <Rt>, [<Rn>, {+}<Rm>] ; T1
4459*f5c631daSSadaf Ebrahimi         (operand.IsPlainRegister() && rt.IsLow() &&
4460*f5c631daSSadaf Ebrahimi          operand.GetBaseRegister().IsLow() &&
4461*f5c631daSSadaf Ebrahimi          operand.GetOffsetRegister().IsLow() && operand.GetSign().IsPlus() &&
4462*f5c631daSSadaf Ebrahimi          (operand.GetAddrMode() == Offset));
4463*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard, can_use_it);
4464*f5c631daSSadaf Ebrahimi     strb(cond, rt, operand);
4465*f5c631daSSadaf Ebrahimi   }
Strb(Register rt,const MemOperand & operand)4466*f5c631daSSadaf Ebrahimi   void Strb(Register rt, const MemOperand& operand) { Strb(al, rt, operand); }
4467*f5c631daSSadaf Ebrahimi 
Strd(Condition cond,Register rt,Register rt2,const MemOperand & operand)4468*f5c631daSSadaf Ebrahimi   void Strd(Condition cond,
4469*f5c631daSSadaf Ebrahimi             Register rt,
4470*f5c631daSSadaf Ebrahimi             Register rt2,
4471*f5c631daSSadaf Ebrahimi             const MemOperand& operand) {
4472*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
4473*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt2));
4474*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4475*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4476*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4477*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4478*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4479*f5c631daSSadaf Ebrahimi     strd(cond, rt, rt2, operand);
4480*f5c631daSSadaf Ebrahimi   }
Strd(Register rt,Register rt2,const MemOperand & operand)4481*f5c631daSSadaf Ebrahimi   void Strd(Register rt, Register rt2, const MemOperand& operand) {
4482*f5c631daSSadaf Ebrahimi     Strd(al, rt, rt2, operand);
4483*f5c631daSSadaf Ebrahimi   }
4484*f5c631daSSadaf Ebrahimi 
Strex(Condition cond,Register rd,Register rt,const MemOperand & operand)4485*f5c631daSSadaf Ebrahimi   void Strex(Condition cond,
4486*f5c631daSSadaf Ebrahimi              Register rd,
4487*f5c631daSSadaf Ebrahimi              Register rt,
4488*f5c631daSSadaf Ebrahimi              const MemOperand& operand) {
4489*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4490*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
4491*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4492*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4493*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4494*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4495*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4496*f5c631daSSadaf Ebrahimi     strex(cond, rd, rt, operand);
4497*f5c631daSSadaf Ebrahimi   }
Strex(Register rd,Register rt,const MemOperand & operand)4498*f5c631daSSadaf Ebrahimi   void Strex(Register rd, Register rt, const MemOperand& operand) {
4499*f5c631daSSadaf Ebrahimi     Strex(al, rd, rt, operand);
4500*f5c631daSSadaf Ebrahimi   }
4501*f5c631daSSadaf Ebrahimi 
Strexb(Condition cond,Register rd,Register rt,const MemOperand & operand)4502*f5c631daSSadaf Ebrahimi   void Strexb(Condition cond,
4503*f5c631daSSadaf Ebrahimi               Register rd,
4504*f5c631daSSadaf Ebrahimi               Register rt,
4505*f5c631daSSadaf Ebrahimi               const MemOperand& operand) {
4506*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4507*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
4508*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4509*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4510*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4511*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4512*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4513*f5c631daSSadaf Ebrahimi     strexb(cond, rd, rt, operand);
4514*f5c631daSSadaf Ebrahimi   }
Strexb(Register rd,Register rt,const MemOperand & operand)4515*f5c631daSSadaf Ebrahimi   void Strexb(Register rd, Register rt, const MemOperand& operand) {
4516*f5c631daSSadaf Ebrahimi     Strexb(al, rd, rt, operand);
4517*f5c631daSSadaf Ebrahimi   }
4518*f5c631daSSadaf Ebrahimi 
Strexd(Condition cond,Register rd,Register rt,Register rt2,const MemOperand & operand)4519*f5c631daSSadaf Ebrahimi   void Strexd(Condition cond,
4520*f5c631daSSadaf Ebrahimi               Register rd,
4521*f5c631daSSadaf Ebrahimi               Register rt,
4522*f5c631daSSadaf Ebrahimi               Register rt2,
4523*f5c631daSSadaf Ebrahimi               const MemOperand& operand) {
4524*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4525*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
4526*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt2));
4527*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4528*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4529*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4530*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4531*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4532*f5c631daSSadaf Ebrahimi     strexd(cond, rd, rt, rt2, operand);
4533*f5c631daSSadaf Ebrahimi   }
Strexd(Register rd,Register rt,Register rt2,const MemOperand & operand)4534*f5c631daSSadaf Ebrahimi   void Strexd(Register rd,
4535*f5c631daSSadaf Ebrahimi               Register rt,
4536*f5c631daSSadaf Ebrahimi               Register rt2,
4537*f5c631daSSadaf Ebrahimi               const MemOperand& operand) {
4538*f5c631daSSadaf Ebrahimi     Strexd(al, rd, rt, rt2, operand);
4539*f5c631daSSadaf Ebrahimi   }
4540*f5c631daSSadaf Ebrahimi 
Strexh(Condition cond,Register rd,Register rt,const MemOperand & operand)4541*f5c631daSSadaf Ebrahimi   void Strexh(Condition cond,
4542*f5c631daSSadaf Ebrahimi               Register rd,
4543*f5c631daSSadaf Ebrahimi               Register rt,
4544*f5c631daSSadaf Ebrahimi               const MemOperand& operand) {
4545*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4546*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
4547*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4548*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4549*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4550*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4551*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4552*f5c631daSSadaf Ebrahimi     strexh(cond, rd, rt, operand);
4553*f5c631daSSadaf Ebrahimi   }
Strexh(Register rd,Register rt,const MemOperand & operand)4554*f5c631daSSadaf Ebrahimi   void Strexh(Register rd, Register rt, const MemOperand& operand) {
4555*f5c631daSSadaf Ebrahimi     Strexh(al, rd, rt, operand);
4556*f5c631daSSadaf Ebrahimi   }
4557*f5c631daSSadaf Ebrahimi 
Strh(Condition cond,Register rt,const MemOperand & operand)4558*f5c631daSSadaf Ebrahimi   void Strh(Condition cond, Register rt, const MemOperand& operand) {
4559*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
4560*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4561*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4562*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4563*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4564*f5c631daSSadaf Ebrahimi     bool can_use_it =
4565*f5c631daSSadaf Ebrahimi         // STRH{<c>}{<q>} <Rt>, [<Rn> {, #{+}<imm>}] ; T1
4566*f5c631daSSadaf Ebrahimi         (operand.IsImmediate() && rt.IsLow() &&
4567*f5c631daSSadaf Ebrahimi          operand.GetBaseRegister().IsLow() &&
4568*f5c631daSSadaf Ebrahimi          operand.IsOffsetImmediateWithinRange(0, 62, 2) &&
4569*f5c631daSSadaf Ebrahimi          (operand.GetAddrMode() == Offset)) ||
4570*f5c631daSSadaf Ebrahimi         // STRH{<c>}{<q>} <Rt>, [<Rn>, {+}<Rm>] ; T1
4571*f5c631daSSadaf Ebrahimi         (operand.IsPlainRegister() && rt.IsLow() &&
4572*f5c631daSSadaf Ebrahimi          operand.GetBaseRegister().IsLow() &&
4573*f5c631daSSadaf Ebrahimi          operand.GetOffsetRegister().IsLow() && operand.GetSign().IsPlus() &&
4574*f5c631daSSadaf Ebrahimi          (operand.GetAddrMode() == Offset));
4575*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard, can_use_it);
4576*f5c631daSSadaf Ebrahimi     strh(cond, rt, operand);
4577*f5c631daSSadaf Ebrahimi   }
Strh(Register rt,const MemOperand & operand)4578*f5c631daSSadaf Ebrahimi   void Strh(Register rt, const MemOperand& operand) { Strh(al, rt, operand); }
4579*f5c631daSSadaf Ebrahimi 
Sub(Condition cond,Register rd,Register rn,const Operand & operand)4580*f5c631daSSadaf Ebrahimi   void Sub(Condition cond, Register rd, Register rn, const Operand& operand) {
4581*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4582*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4583*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4584*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4585*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4586*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4587*f5c631daSSadaf Ebrahimi     if (cond.Is(al) && rd.Is(rn) && operand.IsImmediate()) {
4588*f5c631daSSadaf Ebrahimi       uint32_t immediate = operand.GetImmediate();
4589*f5c631daSSadaf Ebrahimi       if (immediate == 0) {
4590*f5c631daSSadaf Ebrahimi         return;
4591*f5c631daSSadaf Ebrahimi       }
4592*f5c631daSSadaf Ebrahimi     }
4593*f5c631daSSadaf Ebrahimi     bool can_use_it =
4594*f5c631daSSadaf Ebrahimi         // SUB<c>{<q>} <Rd>, <Rn>, #<imm3> ; T1
4595*f5c631daSSadaf Ebrahimi         (operand.IsImmediate() && (operand.GetImmediate() <= 7) && rn.IsLow() &&
4596*f5c631daSSadaf Ebrahimi          rd.IsLow()) ||
4597*f5c631daSSadaf Ebrahimi         // SUB<c>{<q>} {<Rdn>,} <Rdn>, #<imm8> ; T2
4598*f5c631daSSadaf Ebrahimi         (operand.IsImmediate() && (operand.GetImmediate() <= 255) &&
4599*f5c631daSSadaf Ebrahimi          rd.IsLow() && rn.Is(rd)) ||
4600*f5c631daSSadaf Ebrahimi         // SUB<c>{<q>} <Rd>, <Rn>, <Rm>
4601*f5c631daSSadaf Ebrahimi         (operand.IsPlainRegister() && rd.IsLow() && rn.IsLow() &&
4602*f5c631daSSadaf Ebrahimi          operand.GetBaseRegister().IsLow());
4603*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard, can_use_it);
4604*f5c631daSSadaf Ebrahimi     sub(cond, rd, rn, operand);
4605*f5c631daSSadaf Ebrahimi   }
Sub(Register rd,Register rn,const Operand & operand)4606*f5c631daSSadaf Ebrahimi   void Sub(Register rd, Register rn, const Operand& operand) {
4607*f5c631daSSadaf Ebrahimi     Sub(al, rd, rn, operand);
4608*f5c631daSSadaf Ebrahimi   }
Sub(FlagsUpdate flags,Condition cond,Register rd,Register rn,const Operand & operand)4609*f5c631daSSadaf Ebrahimi   void Sub(FlagsUpdate flags,
4610*f5c631daSSadaf Ebrahimi            Condition cond,
4611*f5c631daSSadaf Ebrahimi            Register rd,
4612*f5c631daSSadaf Ebrahimi            Register rn,
4613*f5c631daSSadaf Ebrahimi            const Operand& operand) {
4614*f5c631daSSadaf Ebrahimi     switch (flags) {
4615*f5c631daSSadaf Ebrahimi       case LeaveFlags:
4616*f5c631daSSadaf Ebrahimi         Sub(cond, rd, rn, operand);
4617*f5c631daSSadaf Ebrahimi         break;
4618*f5c631daSSadaf Ebrahimi       case SetFlags:
4619*f5c631daSSadaf Ebrahimi         Subs(cond, rd, rn, operand);
4620*f5c631daSSadaf Ebrahimi         break;
4621*f5c631daSSadaf Ebrahimi       case DontCare:
4622*f5c631daSSadaf Ebrahimi         bool setflags_is_smaller =
4623*f5c631daSSadaf Ebrahimi             IsUsingT32() && cond.Is(al) &&
4624*f5c631daSSadaf Ebrahimi             ((operand.IsPlainRegister() && rd.IsLow() && rn.IsLow() &&
4625*f5c631daSSadaf Ebrahimi               operand.GetBaseRegister().IsLow()) ||
4626*f5c631daSSadaf Ebrahimi              (operand.IsImmediate() &&
4627*f5c631daSSadaf Ebrahimi               ((rd.IsLow() && rn.IsLow() && (operand.GetImmediate() < 8)) ||
4628*f5c631daSSadaf Ebrahimi                (rd.IsLow() && rn.Is(rd) && (operand.GetImmediate() < 256)))));
4629*f5c631daSSadaf Ebrahimi         if (setflags_is_smaller) {
4630*f5c631daSSadaf Ebrahimi           Subs(cond, rd, rn, operand);
4631*f5c631daSSadaf Ebrahimi         } else {
4632*f5c631daSSadaf Ebrahimi           bool changed_op_is_smaller =
4633*f5c631daSSadaf Ebrahimi               operand.IsImmediate() && (operand.GetSignedImmediate() < 0) &&
4634*f5c631daSSadaf Ebrahimi               ((rd.IsLow() && rn.IsLow() &&
4635*f5c631daSSadaf Ebrahimi                 (operand.GetSignedImmediate() >= -7)) ||
4636*f5c631daSSadaf Ebrahimi                (rd.IsLow() && rn.Is(rd) &&
4637*f5c631daSSadaf Ebrahimi                 (operand.GetSignedImmediate() >= -255)));
4638*f5c631daSSadaf Ebrahimi           if (changed_op_is_smaller) {
4639*f5c631daSSadaf Ebrahimi             Adds(cond, rd, rn, -operand.GetSignedImmediate());
4640*f5c631daSSadaf Ebrahimi           } else {
4641*f5c631daSSadaf Ebrahimi             Sub(cond, rd, rn, operand);
4642*f5c631daSSadaf Ebrahimi           }
4643*f5c631daSSadaf Ebrahimi         }
4644*f5c631daSSadaf Ebrahimi         break;
4645*f5c631daSSadaf Ebrahimi     }
4646*f5c631daSSadaf Ebrahimi   }
Sub(FlagsUpdate flags,Register rd,Register rn,const Operand & operand)4647*f5c631daSSadaf Ebrahimi   void Sub(FlagsUpdate flags,
4648*f5c631daSSadaf Ebrahimi            Register rd,
4649*f5c631daSSadaf Ebrahimi            Register rn,
4650*f5c631daSSadaf Ebrahimi            const Operand& operand) {
4651*f5c631daSSadaf Ebrahimi     Sub(flags, al, rd, rn, operand);
4652*f5c631daSSadaf Ebrahimi   }
4653*f5c631daSSadaf Ebrahimi 
Subs(Condition cond,Register rd,Register rn,const Operand & operand)4654*f5c631daSSadaf Ebrahimi   void Subs(Condition cond, Register rd, Register rn, const Operand& operand) {
4655*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4656*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4657*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4658*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4659*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4660*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4661*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4662*f5c631daSSadaf Ebrahimi     subs(cond, rd, rn, operand);
4663*f5c631daSSadaf Ebrahimi   }
Subs(Register rd,Register rn,const Operand & operand)4664*f5c631daSSadaf Ebrahimi   void Subs(Register rd, Register rn, const Operand& operand) {
4665*f5c631daSSadaf Ebrahimi     Subs(al, rd, rn, operand);
4666*f5c631daSSadaf Ebrahimi   }
4667*f5c631daSSadaf Ebrahimi 
Svc(Condition cond,uint32_t imm)4668*f5c631daSSadaf Ebrahimi   void Svc(Condition cond, uint32_t imm) {
4669*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4670*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4671*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4672*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4673*f5c631daSSadaf Ebrahimi     svc(cond, imm);
4674*f5c631daSSadaf Ebrahimi   }
Svc(uint32_t imm)4675*f5c631daSSadaf Ebrahimi   void Svc(uint32_t imm) { Svc(al, imm); }
4676*f5c631daSSadaf Ebrahimi 
Sxtab(Condition cond,Register rd,Register rn,const Operand & operand)4677*f5c631daSSadaf Ebrahimi   void Sxtab(Condition cond, Register rd, Register rn, const Operand& operand) {
4678*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4679*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4680*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4681*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4682*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4683*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4684*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4685*f5c631daSSadaf Ebrahimi     sxtab(cond, rd, rn, operand);
4686*f5c631daSSadaf Ebrahimi   }
Sxtab(Register rd,Register rn,const Operand & operand)4687*f5c631daSSadaf Ebrahimi   void Sxtab(Register rd, Register rn, const Operand& operand) {
4688*f5c631daSSadaf Ebrahimi     Sxtab(al, rd, rn, operand);
4689*f5c631daSSadaf Ebrahimi   }
4690*f5c631daSSadaf Ebrahimi 
Sxtab16(Condition cond,Register rd,Register rn,const Operand & operand)4691*f5c631daSSadaf Ebrahimi   void Sxtab16(Condition cond,
4692*f5c631daSSadaf Ebrahimi                Register rd,
4693*f5c631daSSadaf Ebrahimi                Register rn,
4694*f5c631daSSadaf Ebrahimi                const Operand& operand) {
4695*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4696*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4697*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4698*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4699*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4700*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4701*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4702*f5c631daSSadaf Ebrahimi     sxtab16(cond, rd, rn, operand);
4703*f5c631daSSadaf Ebrahimi   }
Sxtab16(Register rd,Register rn,const Operand & operand)4704*f5c631daSSadaf Ebrahimi   void Sxtab16(Register rd, Register rn, const Operand& operand) {
4705*f5c631daSSadaf Ebrahimi     Sxtab16(al, rd, rn, operand);
4706*f5c631daSSadaf Ebrahimi   }
4707*f5c631daSSadaf Ebrahimi 
Sxtah(Condition cond,Register rd,Register rn,const Operand & operand)4708*f5c631daSSadaf Ebrahimi   void Sxtah(Condition cond, Register rd, Register rn, const Operand& operand) {
4709*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4710*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4711*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4712*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4713*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4714*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4715*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4716*f5c631daSSadaf Ebrahimi     sxtah(cond, rd, rn, operand);
4717*f5c631daSSadaf Ebrahimi   }
Sxtah(Register rd,Register rn,const Operand & operand)4718*f5c631daSSadaf Ebrahimi   void Sxtah(Register rd, Register rn, const Operand& operand) {
4719*f5c631daSSadaf Ebrahimi     Sxtah(al, rd, rn, operand);
4720*f5c631daSSadaf Ebrahimi   }
4721*f5c631daSSadaf Ebrahimi 
Sxtb(Condition cond,Register rd,const Operand & operand)4722*f5c631daSSadaf Ebrahimi   void Sxtb(Condition cond, Register rd, const Operand& operand) {
4723*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4724*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4725*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4726*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4727*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4728*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4729*f5c631daSSadaf Ebrahimi     sxtb(cond, rd, operand);
4730*f5c631daSSadaf Ebrahimi   }
Sxtb(Register rd,const Operand & operand)4731*f5c631daSSadaf Ebrahimi   void Sxtb(Register rd, const Operand& operand) { Sxtb(al, rd, operand); }
4732*f5c631daSSadaf Ebrahimi 
Sxtb16(Condition cond,Register rd,const Operand & operand)4733*f5c631daSSadaf Ebrahimi   void Sxtb16(Condition cond, Register rd, const Operand& operand) {
4734*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4735*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4736*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4737*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4738*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4739*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4740*f5c631daSSadaf Ebrahimi     sxtb16(cond, rd, operand);
4741*f5c631daSSadaf Ebrahimi   }
Sxtb16(Register rd,const Operand & operand)4742*f5c631daSSadaf Ebrahimi   void Sxtb16(Register rd, const Operand& operand) { Sxtb16(al, rd, operand); }
4743*f5c631daSSadaf Ebrahimi 
Sxth(Condition cond,Register rd,const Operand & operand)4744*f5c631daSSadaf Ebrahimi   void Sxth(Condition cond, Register rd, const Operand& operand) {
4745*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4746*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4747*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4748*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4749*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4750*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4751*f5c631daSSadaf Ebrahimi     sxth(cond, rd, operand);
4752*f5c631daSSadaf Ebrahimi   }
Sxth(Register rd,const Operand & operand)4753*f5c631daSSadaf Ebrahimi   void Sxth(Register rd, const Operand& operand) { Sxth(al, rd, operand); }
4754*f5c631daSSadaf Ebrahimi 
Teq(Condition cond,Register rn,const Operand & operand)4755*f5c631daSSadaf Ebrahimi   void Teq(Condition cond, Register rn, const Operand& operand) {
4756*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4757*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4758*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4759*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4760*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4761*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4762*f5c631daSSadaf Ebrahimi     teq(cond, rn, operand);
4763*f5c631daSSadaf Ebrahimi   }
Teq(Register rn,const Operand & operand)4764*f5c631daSSadaf Ebrahimi   void Teq(Register rn, const Operand& operand) { Teq(al, rn, operand); }
4765*f5c631daSSadaf Ebrahimi 
Tst(Condition cond,Register rn,const Operand & operand)4766*f5c631daSSadaf Ebrahimi   void Tst(Condition cond, Register rn, const Operand& operand) {
4767*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4768*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
4769*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4770*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4771*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4772*f5c631daSSadaf Ebrahimi     bool can_use_it =
4773*f5c631daSSadaf Ebrahimi         // TST{<c>}{<q>} <Rn>, <Rm> ; T1
4774*f5c631daSSadaf Ebrahimi         operand.IsPlainRegister() && rn.IsLow() &&
4775*f5c631daSSadaf Ebrahimi         operand.GetBaseRegister().IsLow();
4776*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard, can_use_it);
4777*f5c631daSSadaf Ebrahimi     tst(cond, rn, operand);
4778*f5c631daSSadaf Ebrahimi   }
Tst(Register rn,const Operand & operand)4779*f5c631daSSadaf Ebrahimi   void Tst(Register rn, const Operand& operand) { Tst(al, rn, operand); }
4780*f5c631daSSadaf Ebrahimi 
Uadd16(Condition cond,Register rd,Register rn,Register rm)4781*f5c631daSSadaf Ebrahimi   void Uadd16(Condition cond, Register rd, Register rn, Register rm) {
4782*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4783*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4784*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4785*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4786*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4787*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4788*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4789*f5c631daSSadaf Ebrahimi     uadd16(cond, rd, rn, rm);
4790*f5c631daSSadaf Ebrahimi   }
Uadd16(Register rd,Register rn,Register rm)4791*f5c631daSSadaf Ebrahimi   void Uadd16(Register rd, Register rn, Register rm) { Uadd16(al, rd, rn, rm); }
4792*f5c631daSSadaf Ebrahimi 
Uadd8(Condition cond,Register rd,Register rn,Register rm)4793*f5c631daSSadaf Ebrahimi   void Uadd8(Condition cond, Register rd, Register rn, Register rm) {
4794*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4795*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4796*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4797*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4798*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4799*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4800*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4801*f5c631daSSadaf Ebrahimi     uadd8(cond, rd, rn, rm);
4802*f5c631daSSadaf Ebrahimi   }
Uadd8(Register rd,Register rn,Register rm)4803*f5c631daSSadaf Ebrahimi   void Uadd8(Register rd, Register rn, Register rm) { Uadd8(al, rd, rn, rm); }
4804*f5c631daSSadaf Ebrahimi 
Uasx(Condition cond,Register rd,Register rn,Register rm)4805*f5c631daSSadaf Ebrahimi   void Uasx(Condition cond, Register rd, Register rn, Register rm) {
4806*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4807*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4808*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4809*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4810*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4811*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4812*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4813*f5c631daSSadaf Ebrahimi     uasx(cond, rd, rn, rm);
4814*f5c631daSSadaf Ebrahimi   }
Uasx(Register rd,Register rn,Register rm)4815*f5c631daSSadaf Ebrahimi   void Uasx(Register rd, Register rn, Register rm) { Uasx(al, rd, rn, rm); }
4816*f5c631daSSadaf Ebrahimi 
Ubfx(Condition cond,Register rd,Register rn,uint32_t lsb,uint32_t width)4817*f5c631daSSadaf Ebrahimi   void Ubfx(
4818*f5c631daSSadaf Ebrahimi       Condition cond, Register rd, Register rn, uint32_t lsb, uint32_t width) {
4819*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4820*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4821*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4822*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4823*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4824*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4825*f5c631daSSadaf Ebrahimi     ubfx(cond, rd, rn, lsb, width);
4826*f5c631daSSadaf Ebrahimi   }
Ubfx(Register rd,Register rn,uint32_t lsb,uint32_t width)4827*f5c631daSSadaf Ebrahimi   void Ubfx(Register rd, Register rn, uint32_t lsb, uint32_t width) {
4828*f5c631daSSadaf Ebrahimi     Ubfx(al, rd, rn, lsb, width);
4829*f5c631daSSadaf Ebrahimi   }
4830*f5c631daSSadaf Ebrahimi 
Udf(Condition cond,uint32_t imm)4831*f5c631daSSadaf Ebrahimi   void Udf(Condition cond, uint32_t imm) {
4832*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4833*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4834*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4835*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4836*f5c631daSSadaf Ebrahimi     udf(cond, imm);
4837*f5c631daSSadaf Ebrahimi   }
Udf(uint32_t imm)4838*f5c631daSSadaf Ebrahimi   void Udf(uint32_t imm) { Udf(al, imm); }
4839*f5c631daSSadaf Ebrahimi 
Udiv(Condition cond,Register rd,Register rn,Register rm)4840*f5c631daSSadaf Ebrahimi   void Udiv(Condition cond, Register rd, Register rn, Register rm) {
4841*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4842*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4843*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4844*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4845*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4846*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4847*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4848*f5c631daSSadaf Ebrahimi     udiv(cond, rd, rn, rm);
4849*f5c631daSSadaf Ebrahimi   }
Udiv(Register rd,Register rn,Register rm)4850*f5c631daSSadaf Ebrahimi   void Udiv(Register rd, Register rn, Register rm) { Udiv(al, rd, rn, rm); }
4851*f5c631daSSadaf Ebrahimi 
Uhadd16(Condition cond,Register rd,Register rn,Register rm)4852*f5c631daSSadaf Ebrahimi   void Uhadd16(Condition cond, Register rd, Register rn, Register rm) {
4853*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4854*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4855*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4856*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4857*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4858*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4859*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4860*f5c631daSSadaf Ebrahimi     uhadd16(cond, rd, rn, rm);
4861*f5c631daSSadaf Ebrahimi   }
Uhadd16(Register rd,Register rn,Register rm)4862*f5c631daSSadaf Ebrahimi   void Uhadd16(Register rd, Register rn, Register rm) {
4863*f5c631daSSadaf Ebrahimi     Uhadd16(al, rd, rn, rm);
4864*f5c631daSSadaf Ebrahimi   }
4865*f5c631daSSadaf Ebrahimi 
Uhadd8(Condition cond,Register rd,Register rn,Register rm)4866*f5c631daSSadaf Ebrahimi   void Uhadd8(Condition cond, Register rd, Register rn, Register rm) {
4867*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4868*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4869*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4870*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4871*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4872*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4873*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4874*f5c631daSSadaf Ebrahimi     uhadd8(cond, rd, rn, rm);
4875*f5c631daSSadaf Ebrahimi   }
Uhadd8(Register rd,Register rn,Register rm)4876*f5c631daSSadaf Ebrahimi   void Uhadd8(Register rd, Register rn, Register rm) { Uhadd8(al, rd, rn, rm); }
4877*f5c631daSSadaf Ebrahimi 
Uhasx(Condition cond,Register rd,Register rn,Register rm)4878*f5c631daSSadaf Ebrahimi   void Uhasx(Condition cond, Register rd, Register rn, Register rm) {
4879*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4880*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4881*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4882*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4883*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4884*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4885*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4886*f5c631daSSadaf Ebrahimi     uhasx(cond, rd, rn, rm);
4887*f5c631daSSadaf Ebrahimi   }
Uhasx(Register rd,Register rn,Register rm)4888*f5c631daSSadaf Ebrahimi   void Uhasx(Register rd, Register rn, Register rm) { Uhasx(al, rd, rn, rm); }
4889*f5c631daSSadaf Ebrahimi 
Uhsax(Condition cond,Register rd,Register rn,Register rm)4890*f5c631daSSadaf Ebrahimi   void Uhsax(Condition cond, Register rd, Register rn, Register rm) {
4891*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4892*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4893*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4894*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4895*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4896*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4897*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4898*f5c631daSSadaf Ebrahimi     uhsax(cond, rd, rn, rm);
4899*f5c631daSSadaf Ebrahimi   }
Uhsax(Register rd,Register rn,Register rm)4900*f5c631daSSadaf Ebrahimi   void Uhsax(Register rd, Register rn, Register rm) { Uhsax(al, rd, rn, rm); }
4901*f5c631daSSadaf Ebrahimi 
Uhsub16(Condition cond,Register rd,Register rn,Register rm)4902*f5c631daSSadaf Ebrahimi   void Uhsub16(Condition cond, Register rd, Register rn, Register rm) {
4903*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4904*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4905*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4906*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4907*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4908*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4909*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4910*f5c631daSSadaf Ebrahimi     uhsub16(cond, rd, rn, rm);
4911*f5c631daSSadaf Ebrahimi   }
Uhsub16(Register rd,Register rn,Register rm)4912*f5c631daSSadaf Ebrahimi   void Uhsub16(Register rd, Register rn, Register rm) {
4913*f5c631daSSadaf Ebrahimi     Uhsub16(al, rd, rn, rm);
4914*f5c631daSSadaf Ebrahimi   }
4915*f5c631daSSadaf Ebrahimi 
Uhsub8(Condition cond,Register rd,Register rn,Register rm)4916*f5c631daSSadaf Ebrahimi   void Uhsub8(Condition cond, Register rd, Register rn, Register rm) {
4917*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
4918*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4919*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4920*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4921*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4922*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4923*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4924*f5c631daSSadaf Ebrahimi     uhsub8(cond, rd, rn, rm);
4925*f5c631daSSadaf Ebrahimi   }
Uhsub8(Register rd,Register rn,Register rm)4926*f5c631daSSadaf Ebrahimi   void Uhsub8(Register rd, Register rn, Register rm) { Uhsub8(al, rd, rn, rm); }
4927*f5c631daSSadaf Ebrahimi 
Umaal(Condition cond,Register rdlo,Register rdhi,Register rn,Register rm)4928*f5c631daSSadaf Ebrahimi   void Umaal(
4929*f5c631daSSadaf Ebrahimi       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
4930*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo));
4931*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi));
4932*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4933*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4934*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4935*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4936*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4937*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4938*f5c631daSSadaf Ebrahimi     umaal(cond, rdlo, rdhi, rn, rm);
4939*f5c631daSSadaf Ebrahimi   }
Umaal(Register rdlo,Register rdhi,Register rn,Register rm)4940*f5c631daSSadaf Ebrahimi   void Umaal(Register rdlo, Register rdhi, Register rn, Register rm) {
4941*f5c631daSSadaf Ebrahimi     Umaal(al, rdlo, rdhi, rn, rm);
4942*f5c631daSSadaf Ebrahimi   }
4943*f5c631daSSadaf Ebrahimi 
Umlal(Condition cond,Register rdlo,Register rdhi,Register rn,Register rm)4944*f5c631daSSadaf Ebrahimi   void Umlal(
4945*f5c631daSSadaf Ebrahimi       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
4946*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo));
4947*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi));
4948*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4949*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4950*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4951*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4952*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4953*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4954*f5c631daSSadaf Ebrahimi     umlal(cond, rdlo, rdhi, rn, rm);
4955*f5c631daSSadaf Ebrahimi   }
Umlal(Register rdlo,Register rdhi,Register rn,Register rm)4956*f5c631daSSadaf Ebrahimi   void Umlal(Register rdlo, Register rdhi, Register rn, Register rm) {
4957*f5c631daSSadaf Ebrahimi     Umlal(al, rdlo, rdhi, rn, rm);
4958*f5c631daSSadaf Ebrahimi   }
Umlal(FlagsUpdate flags,Condition cond,Register rdlo,Register rdhi,Register rn,Register rm)4959*f5c631daSSadaf Ebrahimi   void Umlal(FlagsUpdate flags,
4960*f5c631daSSadaf Ebrahimi              Condition cond,
4961*f5c631daSSadaf Ebrahimi              Register rdlo,
4962*f5c631daSSadaf Ebrahimi              Register rdhi,
4963*f5c631daSSadaf Ebrahimi              Register rn,
4964*f5c631daSSadaf Ebrahimi              Register rm) {
4965*f5c631daSSadaf Ebrahimi     switch (flags) {
4966*f5c631daSSadaf Ebrahimi       case LeaveFlags:
4967*f5c631daSSadaf Ebrahimi         Umlal(cond, rdlo, rdhi, rn, rm);
4968*f5c631daSSadaf Ebrahimi         break;
4969*f5c631daSSadaf Ebrahimi       case SetFlags:
4970*f5c631daSSadaf Ebrahimi         Umlals(cond, rdlo, rdhi, rn, rm);
4971*f5c631daSSadaf Ebrahimi         break;
4972*f5c631daSSadaf Ebrahimi       case DontCare:
4973*f5c631daSSadaf Ebrahimi         Umlal(cond, rdlo, rdhi, rn, rm);
4974*f5c631daSSadaf Ebrahimi         break;
4975*f5c631daSSadaf Ebrahimi     }
4976*f5c631daSSadaf Ebrahimi   }
Umlal(FlagsUpdate flags,Register rdlo,Register rdhi,Register rn,Register rm)4977*f5c631daSSadaf Ebrahimi   void Umlal(FlagsUpdate flags,
4978*f5c631daSSadaf Ebrahimi              Register rdlo,
4979*f5c631daSSadaf Ebrahimi              Register rdhi,
4980*f5c631daSSadaf Ebrahimi              Register rn,
4981*f5c631daSSadaf Ebrahimi              Register rm) {
4982*f5c631daSSadaf Ebrahimi     Umlal(flags, al, rdlo, rdhi, rn, rm);
4983*f5c631daSSadaf Ebrahimi   }
4984*f5c631daSSadaf Ebrahimi 
Umlals(Condition cond,Register rdlo,Register rdhi,Register rn,Register rm)4985*f5c631daSSadaf Ebrahimi   void Umlals(
4986*f5c631daSSadaf Ebrahimi       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
4987*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo));
4988*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi));
4989*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
4990*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
4991*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
4992*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
4993*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
4994*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
4995*f5c631daSSadaf Ebrahimi     umlals(cond, rdlo, rdhi, rn, rm);
4996*f5c631daSSadaf Ebrahimi   }
Umlals(Register rdlo,Register rdhi,Register rn,Register rm)4997*f5c631daSSadaf Ebrahimi   void Umlals(Register rdlo, Register rdhi, Register rn, Register rm) {
4998*f5c631daSSadaf Ebrahimi     Umlals(al, rdlo, rdhi, rn, rm);
4999*f5c631daSSadaf Ebrahimi   }
5000*f5c631daSSadaf Ebrahimi 
Umull(Condition cond,Register rdlo,Register rdhi,Register rn,Register rm)5001*f5c631daSSadaf Ebrahimi   void Umull(
5002*f5c631daSSadaf Ebrahimi       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
5003*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo));
5004*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi));
5005*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5006*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5007*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5008*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5009*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5010*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5011*f5c631daSSadaf Ebrahimi     umull(cond, rdlo, rdhi, rn, rm);
5012*f5c631daSSadaf Ebrahimi   }
Umull(Register rdlo,Register rdhi,Register rn,Register rm)5013*f5c631daSSadaf Ebrahimi   void Umull(Register rdlo, Register rdhi, Register rn, Register rm) {
5014*f5c631daSSadaf Ebrahimi     Umull(al, rdlo, rdhi, rn, rm);
5015*f5c631daSSadaf Ebrahimi   }
Umull(FlagsUpdate flags,Condition cond,Register rdlo,Register rdhi,Register rn,Register rm)5016*f5c631daSSadaf Ebrahimi   void Umull(FlagsUpdate flags,
5017*f5c631daSSadaf Ebrahimi              Condition cond,
5018*f5c631daSSadaf Ebrahimi              Register rdlo,
5019*f5c631daSSadaf Ebrahimi              Register rdhi,
5020*f5c631daSSadaf Ebrahimi              Register rn,
5021*f5c631daSSadaf Ebrahimi              Register rm) {
5022*f5c631daSSadaf Ebrahimi     switch (flags) {
5023*f5c631daSSadaf Ebrahimi       case LeaveFlags:
5024*f5c631daSSadaf Ebrahimi         Umull(cond, rdlo, rdhi, rn, rm);
5025*f5c631daSSadaf Ebrahimi         break;
5026*f5c631daSSadaf Ebrahimi       case SetFlags:
5027*f5c631daSSadaf Ebrahimi         Umulls(cond, rdlo, rdhi, rn, rm);
5028*f5c631daSSadaf Ebrahimi         break;
5029*f5c631daSSadaf Ebrahimi       case DontCare:
5030*f5c631daSSadaf Ebrahimi         Umull(cond, rdlo, rdhi, rn, rm);
5031*f5c631daSSadaf Ebrahimi         break;
5032*f5c631daSSadaf Ebrahimi     }
5033*f5c631daSSadaf Ebrahimi   }
Umull(FlagsUpdate flags,Register rdlo,Register rdhi,Register rn,Register rm)5034*f5c631daSSadaf Ebrahimi   void Umull(FlagsUpdate flags,
5035*f5c631daSSadaf Ebrahimi              Register rdlo,
5036*f5c631daSSadaf Ebrahimi              Register rdhi,
5037*f5c631daSSadaf Ebrahimi              Register rn,
5038*f5c631daSSadaf Ebrahimi              Register rm) {
5039*f5c631daSSadaf Ebrahimi     Umull(flags, al, rdlo, rdhi, rn, rm);
5040*f5c631daSSadaf Ebrahimi   }
5041*f5c631daSSadaf Ebrahimi 
Umulls(Condition cond,Register rdlo,Register rdhi,Register rn,Register rm)5042*f5c631daSSadaf Ebrahimi   void Umulls(
5043*f5c631daSSadaf Ebrahimi       Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) {
5044*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo));
5045*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi));
5046*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5047*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5048*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5049*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5050*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5051*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5052*f5c631daSSadaf Ebrahimi     umulls(cond, rdlo, rdhi, rn, rm);
5053*f5c631daSSadaf Ebrahimi   }
Umulls(Register rdlo,Register rdhi,Register rn,Register rm)5054*f5c631daSSadaf Ebrahimi   void Umulls(Register rdlo, Register rdhi, Register rn, Register rm) {
5055*f5c631daSSadaf Ebrahimi     Umulls(al, rdlo, rdhi, rn, rm);
5056*f5c631daSSadaf Ebrahimi   }
5057*f5c631daSSadaf Ebrahimi 
Uqadd16(Condition cond,Register rd,Register rn,Register rm)5058*f5c631daSSadaf Ebrahimi   void Uqadd16(Condition cond, Register rd, Register rn, Register rm) {
5059*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5060*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5061*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5062*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5063*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5064*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5065*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5066*f5c631daSSadaf Ebrahimi     uqadd16(cond, rd, rn, rm);
5067*f5c631daSSadaf Ebrahimi   }
Uqadd16(Register rd,Register rn,Register rm)5068*f5c631daSSadaf Ebrahimi   void Uqadd16(Register rd, Register rn, Register rm) {
5069*f5c631daSSadaf Ebrahimi     Uqadd16(al, rd, rn, rm);
5070*f5c631daSSadaf Ebrahimi   }
5071*f5c631daSSadaf Ebrahimi 
Uqadd8(Condition cond,Register rd,Register rn,Register rm)5072*f5c631daSSadaf Ebrahimi   void Uqadd8(Condition cond, Register rd, Register rn, Register rm) {
5073*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5074*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5075*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5076*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5077*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5078*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5079*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5080*f5c631daSSadaf Ebrahimi     uqadd8(cond, rd, rn, rm);
5081*f5c631daSSadaf Ebrahimi   }
Uqadd8(Register rd,Register rn,Register rm)5082*f5c631daSSadaf Ebrahimi   void Uqadd8(Register rd, Register rn, Register rm) { Uqadd8(al, rd, rn, rm); }
5083*f5c631daSSadaf Ebrahimi 
Uqasx(Condition cond,Register rd,Register rn,Register rm)5084*f5c631daSSadaf Ebrahimi   void Uqasx(Condition cond, Register rd, Register rn, Register rm) {
5085*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5086*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5087*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5088*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5089*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5090*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5091*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5092*f5c631daSSadaf Ebrahimi     uqasx(cond, rd, rn, rm);
5093*f5c631daSSadaf Ebrahimi   }
Uqasx(Register rd,Register rn,Register rm)5094*f5c631daSSadaf Ebrahimi   void Uqasx(Register rd, Register rn, Register rm) { Uqasx(al, rd, rn, rm); }
5095*f5c631daSSadaf Ebrahimi 
Uqsax(Condition cond,Register rd,Register rn,Register rm)5096*f5c631daSSadaf Ebrahimi   void Uqsax(Condition cond, Register rd, Register rn, Register rm) {
5097*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5098*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5099*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5100*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5101*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5102*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5103*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5104*f5c631daSSadaf Ebrahimi     uqsax(cond, rd, rn, rm);
5105*f5c631daSSadaf Ebrahimi   }
Uqsax(Register rd,Register rn,Register rm)5106*f5c631daSSadaf Ebrahimi   void Uqsax(Register rd, Register rn, Register rm) { Uqsax(al, rd, rn, rm); }
5107*f5c631daSSadaf Ebrahimi 
Uqsub16(Condition cond,Register rd,Register rn,Register rm)5108*f5c631daSSadaf Ebrahimi   void Uqsub16(Condition cond, Register rd, Register rn, Register rm) {
5109*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5110*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5111*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5112*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5113*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5114*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5115*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5116*f5c631daSSadaf Ebrahimi     uqsub16(cond, rd, rn, rm);
5117*f5c631daSSadaf Ebrahimi   }
Uqsub16(Register rd,Register rn,Register rm)5118*f5c631daSSadaf Ebrahimi   void Uqsub16(Register rd, Register rn, Register rm) {
5119*f5c631daSSadaf Ebrahimi     Uqsub16(al, rd, rn, rm);
5120*f5c631daSSadaf Ebrahimi   }
5121*f5c631daSSadaf Ebrahimi 
Uqsub8(Condition cond,Register rd,Register rn,Register rm)5122*f5c631daSSadaf Ebrahimi   void Uqsub8(Condition cond, Register rd, Register rn, Register rm) {
5123*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5124*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5125*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5126*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5127*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5128*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5129*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5130*f5c631daSSadaf Ebrahimi     uqsub8(cond, rd, rn, rm);
5131*f5c631daSSadaf Ebrahimi   }
Uqsub8(Register rd,Register rn,Register rm)5132*f5c631daSSadaf Ebrahimi   void Uqsub8(Register rd, Register rn, Register rm) { Uqsub8(al, rd, rn, rm); }
5133*f5c631daSSadaf Ebrahimi 
Usad8(Condition cond,Register rd,Register rn,Register rm)5134*f5c631daSSadaf Ebrahimi   void Usad8(Condition cond, Register rd, Register rn, Register rm) {
5135*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5136*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5137*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5138*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5139*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5140*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5141*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5142*f5c631daSSadaf Ebrahimi     usad8(cond, rd, rn, rm);
5143*f5c631daSSadaf Ebrahimi   }
Usad8(Register rd,Register rn,Register rm)5144*f5c631daSSadaf Ebrahimi   void Usad8(Register rd, Register rn, Register rm) { Usad8(al, rd, rn, rm); }
5145*f5c631daSSadaf Ebrahimi 
Usada8(Condition cond,Register rd,Register rn,Register rm,Register ra)5146*f5c631daSSadaf Ebrahimi   void Usada8(
5147*f5c631daSSadaf Ebrahimi       Condition cond, Register rd, Register rn, Register rm, Register ra) {
5148*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5149*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5150*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5151*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(ra));
5152*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5153*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5154*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5155*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5156*f5c631daSSadaf Ebrahimi     usada8(cond, rd, rn, rm, ra);
5157*f5c631daSSadaf Ebrahimi   }
Usada8(Register rd,Register rn,Register rm,Register ra)5158*f5c631daSSadaf Ebrahimi   void Usada8(Register rd, Register rn, Register rm, Register ra) {
5159*f5c631daSSadaf Ebrahimi     Usada8(al, rd, rn, rm, ra);
5160*f5c631daSSadaf Ebrahimi   }
5161*f5c631daSSadaf Ebrahimi 
Usat(Condition cond,Register rd,uint32_t imm,const Operand & operand)5162*f5c631daSSadaf Ebrahimi   void Usat(Condition cond, Register rd, uint32_t imm, const Operand& operand) {
5163*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5164*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
5165*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5166*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5167*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5168*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5169*f5c631daSSadaf Ebrahimi     usat(cond, rd, imm, operand);
5170*f5c631daSSadaf Ebrahimi   }
Usat(Register rd,uint32_t imm,const Operand & operand)5171*f5c631daSSadaf Ebrahimi   void Usat(Register rd, uint32_t imm, const Operand& operand) {
5172*f5c631daSSadaf Ebrahimi     Usat(al, rd, imm, operand);
5173*f5c631daSSadaf Ebrahimi   }
5174*f5c631daSSadaf Ebrahimi 
Usat16(Condition cond,Register rd,uint32_t imm,Register rn)5175*f5c631daSSadaf Ebrahimi   void Usat16(Condition cond, Register rd, uint32_t imm, Register rn) {
5176*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5177*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5178*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5179*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5180*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5181*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5182*f5c631daSSadaf Ebrahimi     usat16(cond, rd, imm, rn);
5183*f5c631daSSadaf Ebrahimi   }
Usat16(Register rd,uint32_t imm,Register rn)5184*f5c631daSSadaf Ebrahimi   void Usat16(Register rd, uint32_t imm, Register rn) {
5185*f5c631daSSadaf Ebrahimi     Usat16(al, rd, imm, rn);
5186*f5c631daSSadaf Ebrahimi   }
5187*f5c631daSSadaf Ebrahimi 
Usax(Condition cond,Register rd,Register rn,Register rm)5188*f5c631daSSadaf Ebrahimi   void Usax(Condition cond, Register rd, Register rn, Register rm) {
5189*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5190*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5191*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5192*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5193*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5194*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5195*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5196*f5c631daSSadaf Ebrahimi     usax(cond, rd, rn, rm);
5197*f5c631daSSadaf Ebrahimi   }
Usax(Register rd,Register rn,Register rm)5198*f5c631daSSadaf Ebrahimi   void Usax(Register rd, Register rn, Register rm) { Usax(al, rd, rn, rm); }
5199*f5c631daSSadaf Ebrahimi 
Usub16(Condition cond,Register rd,Register rn,Register rm)5200*f5c631daSSadaf Ebrahimi   void Usub16(Condition cond, Register rd, Register rn, Register rm) {
5201*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5202*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5203*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5204*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5205*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5206*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5207*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5208*f5c631daSSadaf Ebrahimi     usub16(cond, rd, rn, rm);
5209*f5c631daSSadaf Ebrahimi   }
Usub16(Register rd,Register rn,Register rm)5210*f5c631daSSadaf Ebrahimi   void Usub16(Register rd, Register rn, Register rm) { Usub16(al, rd, rn, rm); }
5211*f5c631daSSadaf Ebrahimi 
Usub8(Condition cond,Register rd,Register rn,Register rm)5212*f5c631daSSadaf Ebrahimi   void Usub8(Condition cond, Register rd, Register rn, Register rm) {
5213*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5214*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5215*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5216*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5217*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5218*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5219*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5220*f5c631daSSadaf Ebrahimi     usub8(cond, rd, rn, rm);
5221*f5c631daSSadaf Ebrahimi   }
Usub8(Register rd,Register rn,Register rm)5222*f5c631daSSadaf Ebrahimi   void Usub8(Register rd, Register rn, Register rm) { Usub8(al, rd, rn, rm); }
5223*f5c631daSSadaf Ebrahimi 
Uxtab(Condition cond,Register rd,Register rn,const Operand & operand)5224*f5c631daSSadaf Ebrahimi   void Uxtab(Condition cond, Register rd, Register rn, const Operand& operand) {
5225*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5226*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5227*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
5228*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5229*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5230*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5231*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5232*f5c631daSSadaf Ebrahimi     uxtab(cond, rd, rn, operand);
5233*f5c631daSSadaf Ebrahimi   }
Uxtab(Register rd,Register rn,const Operand & operand)5234*f5c631daSSadaf Ebrahimi   void Uxtab(Register rd, Register rn, const Operand& operand) {
5235*f5c631daSSadaf Ebrahimi     Uxtab(al, rd, rn, operand);
5236*f5c631daSSadaf Ebrahimi   }
5237*f5c631daSSadaf Ebrahimi 
Uxtab16(Condition cond,Register rd,Register rn,const Operand & operand)5238*f5c631daSSadaf Ebrahimi   void Uxtab16(Condition cond,
5239*f5c631daSSadaf Ebrahimi                Register rd,
5240*f5c631daSSadaf Ebrahimi                Register rn,
5241*f5c631daSSadaf Ebrahimi                const Operand& operand) {
5242*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5243*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5244*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
5245*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5246*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5247*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5248*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5249*f5c631daSSadaf Ebrahimi     uxtab16(cond, rd, rn, operand);
5250*f5c631daSSadaf Ebrahimi   }
Uxtab16(Register rd,Register rn,const Operand & operand)5251*f5c631daSSadaf Ebrahimi   void Uxtab16(Register rd, Register rn, const Operand& operand) {
5252*f5c631daSSadaf Ebrahimi     Uxtab16(al, rd, rn, operand);
5253*f5c631daSSadaf Ebrahimi   }
5254*f5c631daSSadaf Ebrahimi 
Uxtah(Condition cond,Register rd,Register rn,const Operand & operand)5255*f5c631daSSadaf Ebrahimi   void Uxtah(Condition cond, Register rd, Register rn, const Operand& operand) {
5256*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5257*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5258*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
5259*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5260*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5261*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5262*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5263*f5c631daSSadaf Ebrahimi     uxtah(cond, rd, rn, operand);
5264*f5c631daSSadaf Ebrahimi   }
Uxtah(Register rd,Register rn,const Operand & operand)5265*f5c631daSSadaf Ebrahimi   void Uxtah(Register rd, Register rn, const Operand& operand) {
5266*f5c631daSSadaf Ebrahimi     Uxtah(al, rd, rn, operand);
5267*f5c631daSSadaf Ebrahimi   }
5268*f5c631daSSadaf Ebrahimi 
Uxtb(Condition cond,Register rd,const Operand & operand)5269*f5c631daSSadaf Ebrahimi   void Uxtb(Condition cond, Register rd, const Operand& operand) {
5270*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5271*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
5272*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5273*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5274*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5275*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5276*f5c631daSSadaf Ebrahimi     uxtb(cond, rd, operand);
5277*f5c631daSSadaf Ebrahimi   }
Uxtb(Register rd,const Operand & operand)5278*f5c631daSSadaf Ebrahimi   void Uxtb(Register rd, const Operand& operand) { Uxtb(al, rd, operand); }
5279*f5c631daSSadaf Ebrahimi 
Uxtb16(Condition cond,Register rd,const Operand & operand)5280*f5c631daSSadaf Ebrahimi   void Uxtb16(Condition cond, Register rd, const Operand& operand) {
5281*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5282*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
5283*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5284*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5285*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5286*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5287*f5c631daSSadaf Ebrahimi     uxtb16(cond, rd, operand);
5288*f5c631daSSadaf Ebrahimi   }
Uxtb16(Register rd,const Operand & operand)5289*f5c631daSSadaf Ebrahimi   void Uxtb16(Register rd, const Operand& operand) { Uxtb16(al, rd, operand); }
5290*f5c631daSSadaf Ebrahimi 
Uxth(Condition cond,Register rd,const Operand & operand)5291*f5c631daSSadaf Ebrahimi   void Uxth(Condition cond, Register rd, const Operand& operand) {
5292*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5293*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
5294*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5295*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5296*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5297*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5298*f5c631daSSadaf Ebrahimi     uxth(cond, rd, operand);
5299*f5c631daSSadaf Ebrahimi   }
Uxth(Register rd,const Operand & operand)5300*f5c631daSSadaf Ebrahimi   void Uxth(Register rd, const Operand& operand) { Uxth(al, rd, operand); }
5301*f5c631daSSadaf Ebrahimi 
Vaba(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)5302*f5c631daSSadaf Ebrahimi   void Vaba(
5303*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5304*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5305*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5306*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5307*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5308*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5309*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5310*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5311*f5c631daSSadaf Ebrahimi     vaba(cond, dt, rd, rn, rm);
5312*f5c631daSSadaf Ebrahimi   }
Vaba(DataType dt,DRegister rd,DRegister rn,DRegister rm)5313*f5c631daSSadaf Ebrahimi   void Vaba(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5314*f5c631daSSadaf Ebrahimi     Vaba(al, dt, rd, rn, rm);
5315*f5c631daSSadaf Ebrahimi   }
5316*f5c631daSSadaf Ebrahimi 
Vaba(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)5317*f5c631daSSadaf Ebrahimi   void Vaba(
5318*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5319*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5320*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5321*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5322*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5323*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5324*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5325*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5326*f5c631daSSadaf Ebrahimi     vaba(cond, dt, rd, rn, rm);
5327*f5c631daSSadaf Ebrahimi   }
Vaba(DataType dt,QRegister rd,QRegister rn,QRegister rm)5328*f5c631daSSadaf Ebrahimi   void Vaba(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5329*f5c631daSSadaf Ebrahimi     Vaba(al, dt, rd, rn, rm);
5330*f5c631daSSadaf Ebrahimi   }
5331*f5c631daSSadaf Ebrahimi 
Vabal(Condition cond,DataType dt,QRegister rd,DRegister rn,DRegister rm)5332*f5c631daSSadaf Ebrahimi   void Vabal(
5333*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm) {
5334*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5335*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5336*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5337*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5338*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5339*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5340*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5341*f5c631daSSadaf Ebrahimi     vabal(cond, dt, rd, rn, rm);
5342*f5c631daSSadaf Ebrahimi   }
Vabal(DataType dt,QRegister rd,DRegister rn,DRegister rm)5343*f5c631daSSadaf Ebrahimi   void Vabal(DataType dt, QRegister rd, DRegister rn, DRegister rm) {
5344*f5c631daSSadaf Ebrahimi     Vabal(al, dt, rd, rn, rm);
5345*f5c631daSSadaf Ebrahimi   }
5346*f5c631daSSadaf Ebrahimi 
Vabd(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)5347*f5c631daSSadaf Ebrahimi   void Vabd(
5348*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5349*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5350*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5351*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5352*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5353*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5354*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5355*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5356*f5c631daSSadaf Ebrahimi     vabd(cond, dt, rd, rn, rm);
5357*f5c631daSSadaf Ebrahimi   }
Vabd(DataType dt,DRegister rd,DRegister rn,DRegister rm)5358*f5c631daSSadaf Ebrahimi   void Vabd(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5359*f5c631daSSadaf Ebrahimi     Vabd(al, dt, rd, rn, rm);
5360*f5c631daSSadaf Ebrahimi   }
5361*f5c631daSSadaf Ebrahimi 
Vabd(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)5362*f5c631daSSadaf Ebrahimi   void Vabd(
5363*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5364*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5365*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5366*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5367*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5368*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5369*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5370*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5371*f5c631daSSadaf Ebrahimi     vabd(cond, dt, rd, rn, rm);
5372*f5c631daSSadaf Ebrahimi   }
Vabd(DataType dt,QRegister rd,QRegister rn,QRegister rm)5373*f5c631daSSadaf Ebrahimi   void Vabd(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5374*f5c631daSSadaf Ebrahimi     Vabd(al, dt, rd, rn, rm);
5375*f5c631daSSadaf Ebrahimi   }
5376*f5c631daSSadaf Ebrahimi 
Vabdl(Condition cond,DataType dt,QRegister rd,DRegister rn,DRegister rm)5377*f5c631daSSadaf Ebrahimi   void Vabdl(
5378*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm) {
5379*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5380*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5381*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5382*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5383*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5384*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5385*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5386*f5c631daSSadaf Ebrahimi     vabdl(cond, dt, rd, rn, rm);
5387*f5c631daSSadaf Ebrahimi   }
Vabdl(DataType dt,QRegister rd,DRegister rn,DRegister rm)5388*f5c631daSSadaf Ebrahimi   void Vabdl(DataType dt, QRegister rd, DRegister rn, DRegister rm) {
5389*f5c631daSSadaf Ebrahimi     Vabdl(al, dt, rd, rn, rm);
5390*f5c631daSSadaf Ebrahimi   }
5391*f5c631daSSadaf Ebrahimi 
Vabs(Condition cond,DataType dt,DRegister rd,DRegister rm)5392*f5c631daSSadaf Ebrahimi   void Vabs(Condition cond, DataType dt, DRegister rd, DRegister rm) {
5393*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5394*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5395*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5396*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5397*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5398*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5399*f5c631daSSadaf Ebrahimi     vabs(cond, dt, rd, rm);
5400*f5c631daSSadaf Ebrahimi   }
Vabs(DataType dt,DRegister rd,DRegister rm)5401*f5c631daSSadaf Ebrahimi   void Vabs(DataType dt, DRegister rd, DRegister rm) { Vabs(al, dt, rd, rm); }
5402*f5c631daSSadaf Ebrahimi 
Vabs(Condition cond,DataType dt,QRegister rd,QRegister rm)5403*f5c631daSSadaf Ebrahimi   void Vabs(Condition cond, DataType dt, QRegister rd, QRegister rm) {
5404*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5405*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5406*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5407*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5408*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5409*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5410*f5c631daSSadaf Ebrahimi     vabs(cond, dt, rd, rm);
5411*f5c631daSSadaf Ebrahimi   }
Vabs(DataType dt,QRegister rd,QRegister rm)5412*f5c631daSSadaf Ebrahimi   void Vabs(DataType dt, QRegister rd, QRegister rm) { Vabs(al, dt, rd, rm); }
5413*f5c631daSSadaf Ebrahimi 
Vabs(Condition cond,DataType dt,SRegister rd,SRegister rm)5414*f5c631daSSadaf Ebrahimi   void Vabs(Condition cond, DataType dt, SRegister rd, SRegister rm) {
5415*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5416*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5417*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5418*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5419*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5420*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5421*f5c631daSSadaf Ebrahimi     vabs(cond, dt, rd, rm);
5422*f5c631daSSadaf Ebrahimi   }
Vabs(DataType dt,SRegister rd,SRegister rm)5423*f5c631daSSadaf Ebrahimi   void Vabs(DataType dt, SRegister rd, SRegister rm) { Vabs(al, dt, rd, rm); }
5424*f5c631daSSadaf Ebrahimi 
Vacge(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)5425*f5c631daSSadaf Ebrahimi   void Vacge(
5426*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5427*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5428*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5429*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5430*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5431*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5432*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5433*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5434*f5c631daSSadaf Ebrahimi     vacge(cond, dt, rd, rn, rm);
5435*f5c631daSSadaf Ebrahimi   }
Vacge(DataType dt,DRegister rd,DRegister rn,DRegister rm)5436*f5c631daSSadaf Ebrahimi   void Vacge(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5437*f5c631daSSadaf Ebrahimi     Vacge(al, dt, rd, rn, rm);
5438*f5c631daSSadaf Ebrahimi   }
5439*f5c631daSSadaf Ebrahimi 
Vacge(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)5440*f5c631daSSadaf Ebrahimi   void Vacge(
5441*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5442*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5443*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5444*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5445*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5446*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5447*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5448*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5449*f5c631daSSadaf Ebrahimi     vacge(cond, dt, rd, rn, rm);
5450*f5c631daSSadaf Ebrahimi   }
Vacge(DataType dt,QRegister rd,QRegister rn,QRegister rm)5451*f5c631daSSadaf Ebrahimi   void Vacge(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5452*f5c631daSSadaf Ebrahimi     Vacge(al, dt, rd, rn, rm);
5453*f5c631daSSadaf Ebrahimi   }
5454*f5c631daSSadaf Ebrahimi 
Vacgt(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)5455*f5c631daSSadaf Ebrahimi   void Vacgt(
5456*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5457*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5458*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5459*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5460*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5461*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5462*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5463*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5464*f5c631daSSadaf Ebrahimi     vacgt(cond, dt, rd, rn, rm);
5465*f5c631daSSadaf Ebrahimi   }
Vacgt(DataType dt,DRegister rd,DRegister rn,DRegister rm)5466*f5c631daSSadaf Ebrahimi   void Vacgt(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5467*f5c631daSSadaf Ebrahimi     Vacgt(al, dt, rd, rn, rm);
5468*f5c631daSSadaf Ebrahimi   }
5469*f5c631daSSadaf Ebrahimi 
Vacgt(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)5470*f5c631daSSadaf Ebrahimi   void Vacgt(
5471*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5472*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5473*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5474*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5475*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5476*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5477*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5478*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5479*f5c631daSSadaf Ebrahimi     vacgt(cond, dt, rd, rn, rm);
5480*f5c631daSSadaf Ebrahimi   }
Vacgt(DataType dt,QRegister rd,QRegister rn,QRegister rm)5481*f5c631daSSadaf Ebrahimi   void Vacgt(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5482*f5c631daSSadaf Ebrahimi     Vacgt(al, dt, rd, rn, rm);
5483*f5c631daSSadaf Ebrahimi   }
5484*f5c631daSSadaf Ebrahimi 
Vacle(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)5485*f5c631daSSadaf Ebrahimi   void Vacle(
5486*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5487*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5488*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5489*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5490*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5491*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5492*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5493*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5494*f5c631daSSadaf Ebrahimi     vacle(cond, dt, rd, rn, rm);
5495*f5c631daSSadaf Ebrahimi   }
Vacle(DataType dt,DRegister rd,DRegister rn,DRegister rm)5496*f5c631daSSadaf Ebrahimi   void Vacle(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5497*f5c631daSSadaf Ebrahimi     Vacle(al, dt, rd, rn, rm);
5498*f5c631daSSadaf Ebrahimi   }
5499*f5c631daSSadaf Ebrahimi 
Vacle(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)5500*f5c631daSSadaf Ebrahimi   void Vacle(
5501*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5502*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5503*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5504*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5505*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5506*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5507*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5508*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5509*f5c631daSSadaf Ebrahimi     vacle(cond, dt, rd, rn, rm);
5510*f5c631daSSadaf Ebrahimi   }
Vacle(DataType dt,QRegister rd,QRegister rn,QRegister rm)5511*f5c631daSSadaf Ebrahimi   void Vacle(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5512*f5c631daSSadaf Ebrahimi     Vacle(al, dt, rd, rn, rm);
5513*f5c631daSSadaf Ebrahimi   }
5514*f5c631daSSadaf Ebrahimi 
Vaclt(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)5515*f5c631daSSadaf Ebrahimi   void Vaclt(
5516*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5517*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5518*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5519*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5520*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5521*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5522*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5523*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5524*f5c631daSSadaf Ebrahimi     vaclt(cond, dt, rd, rn, rm);
5525*f5c631daSSadaf Ebrahimi   }
Vaclt(DataType dt,DRegister rd,DRegister rn,DRegister rm)5526*f5c631daSSadaf Ebrahimi   void Vaclt(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5527*f5c631daSSadaf Ebrahimi     Vaclt(al, dt, rd, rn, rm);
5528*f5c631daSSadaf Ebrahimi   }
5529*f5c631daSSadaf Ebrahimi 
Vaclt(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)5530*f5c631daSSadaf Ebrahimi   void Vaclt(
5531*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5532*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5533*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5534*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5535*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5536*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5537*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5538*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5539*f5c631daSSadaf Ebrahimi     vaclt(cond, dt, rd, rn, rm);
5540*f5c631daSSadaf Ebrahimi   }
Vaclt(DataType dt,QRegister rd,QRegister rn,QRegister rm)5541*f5c631daSSadaf Ebrahimi   void Vaclt(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5542*f5c631daSSadaf Ebrahimi     Vaclt(al, dt, rd, rn, rm);
5543*f5c631daSSadaf Ebrahimi   }
5544*f5c631daSSadaf Ebrahimi 
Vadd(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)5545*f5c631daSSadaf Ebrahimi   void Vadd(
5546*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5547*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5548*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5549*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5550*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5551*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5552*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5553*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5554*f5c631daSSadaf Ebrahimi     vadd(cond, dt, rd, rn, rm);
5555*f5c631daSSadaf Ebrahimi   }
Vadd(DataType dt,DRegister rd,DRegister rn,DRegister rm)5556*f5c631daSSadaf Ebrahimi   void Vadd(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5557*f5c631daSSadaf Ebrahimi     Vadd(al, dt, rd, rn, rm);
5558*f5c631daSSadaf Ebrahimi   }
5559*f5c631daSSadaf Ebrahimi 
Vadd(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)5560*f5c631daSSadaf Ebrahimi   void Vadd(
5561*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5562*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5563*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5564*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5565*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5566*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5567*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5568*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5569*f5c631daSSadaf Ebrahimi     vadd(cond, dt, rd, rn, rm);
5570*f5c631daSSadaf Ebrahimi   }
Vadd(DataType dt,QRegister rd,QRegister rn,QRegister rm)5571*f5c631daSSadaf Ebrahimi   void Vadd(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5572*f5c631daSSadaf Ebrahimi     Vadd(al, dt, rd, rn, rm);
5573*f5c631daSSadaf Ebrahimi   }
5574*f5c631daSSadaf Ebrahimi 
Vadd(Condition cond,DataType dt,SRegister rd,SRegister rn,SRegister rm)5575*f5c631daSSadaf Ebrahimi   void Vadd(
5576*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) {
5577*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5578*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5579*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5580*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5581*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5582*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5583*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5584*f5c631daSSadaf Ebrahimi     vadd(cond, dt, rd, rn, rm);
5585*f5c631daSSadaf Ebrahimi   }
Vadd(DataType dt,SRegister rd,SRegister rn,SRegister rm)5586*f5c631daSSadaf Ebrahimi   void Vadd(DataType dt, SRegister rd, SRegister rn, SRegister rm) {
5587*f5c631daSSadaf Ebrahimi     Vadd(al, dt, rd, rn, rm);
5588*f5c631daSSadaf Ebrahimi   }
5589*f5c631daSSadaf Ebrahimi 
Vaddhn(Condition cond,DataType dt,DRegister rd,QRegister rn,QRegister rm)5590*f5c631daSSadaf Ebrahimi   void Vaddhn(
5591*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, QRegister rn, QRegister rm) {
5592*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5593*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5594*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5595*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5596*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5597*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5598*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5599*f5c631daSSadaf Ebrahimi     vaddhn(cond, dt, rd, rn, rm);
5600*f5c631daSSadaf Ebrahimi   }
Vaddhn(DataType dt,DRegister rd,QRegister rn,QRegister rm)5601*f5c631daSSadaf Ebrahimi   void Vaddhn(DataType dt, DRegister rd, QRegister rn, QRegister rm) {
5602*f5c631daSSadaf Ebrahimi     Vaddhn(al, dt, rd, rn, rm);
5603*f5c631daSSadaf Ebrahimi   }
5604*f5c631daSSadaf Ebrahimi 
Vaddl(Condition cond,DataType dt,QRegister rd,DRegister rn,DRegister rm)5605*f5c631daSSadaf Ebrahimi   void Vaddl(
5606*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm) {
5607*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5608*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5609*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5610*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5611*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5612*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5613*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5614*f5c631daSSadaf Ebrahimi     vaddl(cond, dt, rd, rn, rm);
5615*f5c631daSSadaf Ebrahimi   }
Vaddl(DataType dt,QRegister rd,DRegister rn,DRegister rm)5616*f5c631daSSadaf Ebrahimi   void Vaddl(DataType dt, QRegister rd, DRegister rn, DRegister rm) {
5617*f5c631daSSadaf Ebrahimi     Vaddl(al, dt, rd, rn, rm);
5618*f5c631daSSadaf Ebrahimi   }
5619*f5c631daSSadaf Ebrahimi 
Vaddw(Condition cond,DataType dt,QRegister rd,QRegister rn,DRegister rm)5620*f5c631daSSadaf Ebrahimi   void Vaddw(
5621*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, QRegister rn, DRegister rm) {
5622*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5623*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5624*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5625*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5626*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5627*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5628*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5629*f5c631daSSadaf Ebrahimi     vaddw(cond, dt, rd, rn, rm);
5630*f5c631daSSadaf Ebrahimi   }
Vaddw(DataType dt,QRegister rd,QRegister rn,DRegister rm)5631*f5c631daSSadaf Ebrahimi   void Vaddw(DataType dt, QRegister rd, QRegister rn, DRegister rm) {
5632*f5c631daSSadaf Ebrahimi     Vaddw(al, dt, rd, rn, rm);
5633*f5c631daSSadaf Ebrahimi   }
5634*f5c631daSSadaf Ebrahimi 
Vand(Condition cond,DataType dt,DRegister rd,DRegister rn,const DOperand & operand)5635*f5c631daSSadaf Ebrahimi   void Vand(Condition cond,
5636*f5c631daSSadaf Ebrahimi             DataType dt,
5637*f5c631daSSadaf Ebrahimi             DRegister rd,
5638*f5c631daSSadaf Ebrahimi             DRegister rn,
5639*f5c631daSSadaf Ebrahimi             const DOperand& operand) {
5640*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5641*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5642*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
5643*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5644*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5645*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5646*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5647*f5c631daSSadaf Ebrahimi     vand(cond, dt, rd, rn, operand);
5648*f5c631daSSadaf Ebrahimi   }
Vand(DataType dt,DRegister rd,DRegister rn,const DOperand & operand)5649*f5c631daSSadaf Ebrahimi   void Vand(DataType dt, DRegister rd, DRegister rn, const DOperand& operand) {
5650*f5c631daSSadaf Ebrahimi     Vand(al, dt, rd, rn, operand);
5651*f5c631daSSadaf Ebrahimi   }
5652*f5c631daSSadaf Ebrahimi 
Vand(Condition cond,DataType dt,QRegister rd,QRegister rn,const QOperand & operand)5653*f5c631daSSadaf Ebrahimi   void Vand(Condition cond,
5654*f5c631daSSadaf Ebrahimi             DataType dt,
5655*f5c631daSSadaf Ebrahimi             QRegister rd,
5656*f5c631daSSadaf Ebrahimi             QRegister rn,
5657*f5c631daSSadaf Ebrahimi             const QOperand& operand) {
5658*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5659*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5660*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
5661*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5662*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5663*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5664*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5665*f5c631daSSadaf Ebrahimi     vand(cond, dt, rd, rn, operand);
5666*f5c631daSSadaf Ebrahimi   }
Vand(DataType dt,QRegister rd,QRegister rn,const QOperand & operand)5667*f5c631daSSadaf Ebrahimi   void Vand(DataType dt, QRegister rd, QRegister rn, const QOperand& operand) {
5668*f5c631daSSadaf Ebrahimi     Vand(al, dt, rd, rn, operand);
5669*f5c631daSSadaf Ebrahimi   }
5670*f5c631daSSadaf Ebrahimi 
Vbic(Condition cond,DataType dt,DRegister rd,DRegister rn,const DOperand & operand)5671*f5c631daSSadaf Ebrahimi   void Vbic(Condition cond,
5672*f5c631daSSadaf Ebrahimi             DataType dt,
5673*f5c631daSSadaf Ebrahimi             DRegister rd,
5674*f5c631daSSadaf Ebrahimi             DRegister rn,
5675*f5c631daSSadaf Ebrahimi             const DOperand& operand) {
5676*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5677*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5678*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
5679*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5680*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5681*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5682*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5683*f5c631daSSadaf Ebrahimi     vbic(cond, dt, rd, rn, operand);
5684*f5c631daSSadaf Ebrahimi   }
Vbic(DataType dt,DRegister rd,DRegister rn,const DOperand & operand)5685*f5c631daSSadaf Ebrahimi   void Vbic(DataType dt, DRegister rd, DRegister rn, const DOperand& operand) {
5686*f5c631daSSadaf Ebrahimi     Vbic(al, dt, rd, rn, operand);
5687*f5c631daSSadaf Ebrahimi   }
5688*f5c631daSSadaf Ebrahimi 
Vbic(Condition cond,DataType dt,QRegister rd,QRegister rn,const QOperand & operand)5689*f5c631daSSadaf Ebrahimi   void Vbic(Condition cond,
5690*f5c631daSSadaf Ebrahimi             DataType dt,
5691*f5c631daSSadaf Ebrahimi             QRegister rd,
5692*f5c631daSSadaf Ebrahimi             QRegister rn,
5693*f5c631daSSadaf Ebrahimi             const QOperand& operand) {
5694*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5695*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5696*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
5697*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5698*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5699*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5700*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5701*f5c631daSSadaf Ebrahimi     vbic(cond, dt, rd, rn, operand);
5702*f5c631daSSadaf Ebrahimi   }
Vbic(DataType dt,QRegister rd,QRegister rn,const QOperand & operand)5703*f5c631daSSadaf Ebrahimi   void Vbic(DataType dt, QRegister rd, QRegister rn, const QOperand& operand) {
5704*f5c631daSSadaf Ebrahimi     Vbic(al, dt, rd, rn, operand);
5705*f5c631daSSadaf Ebrahimi   }
5706*f5c631daSSadaf Ebrahimi 
Vbif(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)5707*f5c631daSSadaf Ebrahimi   void Vbif(
5708*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5709*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5710*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5711*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5712*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5713*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5714*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5715*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5716*f5c631daSSadaf Ebrahimi     vbif(cond, dt, rd, rn, rm);
5717*f5c631daSSadaf Ebrahimi   }
Vbif(DataType dt,DRegister rd,DRegister rn,DRegister rm)5718*f5c631daSSadaf Ebrahimi   void Vbif(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5719*f5c631daSSadaf Ebrahimi     Vbif(al, dt, rd, rn, rm);
5720*f5c631daSSadaf Ebrahimi   }
Vbif(Condition cond,DRegister rd,DRegister rn,DRegister rm)5721*f5c631daSSadaf Ebrahimi   void Vbif(Condition cond, DRegister rd, DRegister rn, DRegister rm) {
5722*f5c631daSSadaf Ebrahimi     Vbif(cond, kDataTypeValueNone, rd, rn, rm);
5723*f5c631daSSadaf Ebrahimi   }
Vbif(DRegister rd,DRegister rn,DRegister rm)5724*f5c631daSSadaf Ebrahimi   void Vbif(DRegister rd, DRegister rn, DRegister rm) {
5725*f5c631daSSadaf Ebrahimi     Vbif(al, kDataTypeValueNone, rd, rn, rm);
5726*f5c631daSSadaf Ebrahimi   }
5727*f5c631daSSadaf Ebrahimi 
Vbif(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)5728*f5c631daSSadaf Ebrahimi   void Vbif(
5729*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5730*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5731*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5732*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5733*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5734*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5735*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5736*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5737*f5c631daSSadaf Ebrahimi     vbif(cond, dt, rd, rn, rm);
5738*f5c631daSSadaf Ebrahimi   }
Vbif(DataType dt,QRegister rd,QRegister rn,QRegister rm)5739*f5c631daSSadaf Ebrahimi   void Vbif(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5740*f5c631daSSadaf Ebrahimi     Vbif(al, dt, rd, rn, rm);
5741*f5c631daSSadaf Ebrahimi   }
Vbif(Condition cond,QRegister rd,QRegister rn,QRegister rm)5742*f5c631daSSadaf Ebrahimi   void Vbif(Condition cond, QRegister rd, QRegister rn, QRegister rm) {
5743*f5c631daSSadaf Ebrahimi     Vbif(cond, kDataTypeValueNone, rd, rn, rm);
5744*f5c631daSSadaf Ebrahimi   }
Vbif(QRegister rd,QRegister rn,QRegister rm)5745*f5c631daSSadaf Ebrahimi   void Vbif(QRegister rd, QRegister rn, QRegister rm) {
5746*f5c631daSSadaf Ebrahimi     Vbif(al, kDataTypeValueNone, rd, rn, rm);
5747*f5c631daSSadaf Ebrahimi   }
5748*f5c631daSSadaf Ebrahimi 
Vbit(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)5749*f5c631daSSadaf Ebrahimi   void Vbit(
5750*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5751*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5752*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5753*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5754*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5755*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5756*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5757*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5758*f5c631daSSadaf Ebrahimi     vbit(cond, dt, rd, rn, rm);
5759*f5c631daSSadaf Ebrahimi   }
Vbit(DataType dt,DRegister rd,DRegister rn,DRegister rm)5760*f5c631daSSadaf Ebrahimi   void Vbit(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5761*f5c631daSSadaf Ebrahimi     Vbit(al, dt, rd, rn, rm);
5762*f5c631daSSadaf Ebrahimi   }
Vbit(Condition cond,DRegister rd,DRegister rn,DRegister rm)5763*f5c631daSSadaf Ebrahimi   void Vbit(Condition cond, DRegister rd, DRegister rn, DRegister rm) {
5764*f5c631daSSadaf Ebrahimi     Vbit(cond, kDataTypeValueNone, rd, rn, rm);
5765*f5c631daSSadaf Ebrahimi   }
Vbit(DRegister rd,DRegister rn,DRegister rm)5766*f5c631daSSadaf Ebrahimi   void Vbit(DRegister rd, DRegister rn, DRegister rm) {
5767*f5c631daSSadaf Ebrahimi     Vbit(al, kDataTypeValueNone, rd, rn, rm);
5768*f5c631daSSadaf Ebrahimi   }
5769*f5c631daSSadaf Ebrahimi 
Vbit(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)5770*f5c631daSSadaf Ebrahimi   void Vbit(
5771*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5772*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5773*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5774*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5775*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5776*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5777*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5778*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5779*f5c631daSSadaf Ebrahimi     vbit(cond, dt, rd, rn, rm);
5780*f5c631daSSadaf Ebrahimi   }
Vbit(DataType dt,QRegister rd,QRegister rn,QRegister rm)5781*f5c631daSSadaf Ebrahimi   void Vbit(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5782*f5c631daSSadaf Ebrahimi     Vbit(al, dt, rd, rn, rm);
5783*f5c631daSSadaf Ebrahimi   }
Vbit(Condition cond,QRegister rd,QRegister rn,QRegister rm)5784*f5c631daSSadaf Ebrahimi   void Vbit(Condition cond, QRegister rd, QRegister rn, QRegister rm) {
5785*f5c631daSSadaf Ebrahimi     Vbit(cond, kDataTypeValueNone, rd, rn, rm);
5786*f5c631daSSadaf Ebrahimi   }
Vbit(QRegister rd,QRegister rn,QRegister rm)5787*f5c631daSSadaf Ebrahimi   void Vbit(QRegister rd, QRegister rn, QRegister rm) {
5788*f5c631daSSadaf Ebrahimi     Vbit(al, kDataTypeValueNone, rd, rn, rm);
5789*f5c631daSSadaf Ebrahimi   }
5790*f5c631daSSadaf Ebrahimi 
Vbsl(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)5791*f5c631daSSadaf Ebrahimi   void Vbsl(
5792*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5793*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5794*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5795*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5796*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5797*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5798*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5799*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5800*f5c631daSSadaf Ebrahimi     vbsl(cond, dt, rd, rn, rm);
5801*f5c631daSSadaf Ebrahimi   }
Vbsl(DataType dt,DRegister rd,DRegister rn,DRegister rm)5802*f5c631daSSadaf Ebrahimi   void Vbsl(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5803*f5c631daSSadaf Ebrahimi     Vbsl(al, dt, rd, rn, rm);
5804*f5c631daSSadaf Ebrahimi   }
Vbsl(Condition cond,DRegister rd,DRegister rn,DRegister rm)5805*f5c631daSSadaf Ebrahimi   void Vbsl(Condition cond, DRegister rd, DRegister rn, DRegister rm) {
5806*f5c631daSSadaf Ebrahimi     Vbsl(cond, kDataTypeValueNone, rd, rn, rm);
5807*f5c631daSSadaf Ebrahimi   }
Vbsl(DRegister rd,DRegister rn,DRegister rm)5808*f5c631daSSadaf Ebrahimi   void Vbsl(DRegister rd, DRegister rn, DRegister rm) {
5809*f5c631daSSadaf Ebrahimi     Vbsl(al, kDataTypeValueNone, rd, rn, rm);
5810*f5c631daSSadaf Ebrahimi   }
5811*f5c631daSSadaf Ebrahimi 
Vbsl(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)5812*f5c631daSSadaf Ebrahimi   void Vbsl(
5813*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5814*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5815*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5816*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5817*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5818*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5819*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5820*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5821*f5c631daSSadaf Ebrahimi     vbsl(cond, dt, rd, rn, rm);
5822*f5c631daSSadaf Ebrahimi   }
Vbsl(DataType dt,QRegister rd,QRegister rn,QRegister rm)5823*f5c631daSSadaf Ebrahimi   void Vbsl(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5824*f5c631daSSadaf Ebrahimi     Vbsl(al, dt, rd, rn, rm);
5825*f5c631daSSadaf Ebrahimi   }
Vbsl(Condition cond,QRegister rd,QRegister rn,QRegister rm)5826*f5c631daSSadaf Ebrahimi   void Vbsl(Condition cond, QRegister rd, QRegister rn, QRegister rm) {
5827*f5c631daSSadaf Ebrahimi     Vbsl(cond, kDataTypeValueNone, rd, rn, rm);
5828*f5c631daSSadaf Ebrahimi   }
Vbsl(QRegister rd,QRegister rn,QRegister rm)5829*f5c631daSSadaf Ebrahimi   void Vbsl(QRegister rd, QRegister rn, QRegister rm) {
5830*f5c631daSSadaf Ebrahimi     Vbsl(al, kDataTypeValueNone, rd, rn, rm);
5831*f5c631daSSadaf Ebrahimi   }
5832*f5c631daSSadaf Ebrahimi 
Vceq(Condition cond,DataType dt,DRegister rd,DRegister rm,const DOperand & operand)5833*f5c631daSSadaf Ebrahimi   void Vceq(Condition cond,
5834*f5c631daSSadaf Ebrahimi             DataType dt,
5835*f5c631daSSadaf Ebrahimi             DRegister rd,
5836*f5c631daSSadaf Ebrahimi             DRegister rm,
5837*f5c631daSSadaf Ebrahimi             const DOperand& operand) {
5838*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5839*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5840*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
5841*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5842*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5843*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5844*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5845*f5c631daSSadaf Ebrahimi     vceq(cond, dt, rd, rm, operand);
5846*f5c631daSSadaf Ebrahimi   }
Vceq(DataType dt,DRegister rd,DRegister rm,const DOperand & operand)5847*f5c631daSSadaf Ebrahimi   void Vceq(DataType dt, DRegister rd, DRegister rm, const DOperand& operand) {
5848*f5c631daSSadaf Ebrahimi     Vceq(al, dt, rd, rm, operand);
5849*f5c631daSSadaf Ebrahimi   }
5850*f5c631daSSadaf Ebrahimi 
Vceq(Condition cond,DataType dt,QRegister rd,QRegister rm,const QOperand & operand)5851*f5c631daSSadaf Ebrahimi   void Vceq(Condition cond,
5852*f5c631daSSadaf Ebrahimi             DataType dt,
5853*f5c631daSSadaf Ebrahimi             QRegister rd,
5854*f5c631daSSadaf Ebrahimi             QRegister rm,
5855*f5c631daSSadaf Ebrahimi             const QOperand& operand) {
5856*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5857*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5858*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
5859*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5860*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5861*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5862*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5863*f5c631daSSadaf Ebrahimi     vceq(cond, dt, rd, rm, operand);
5864*f5c631daSSadaf Ebrahimi   }
Vceq(DataType dt,QRegister rd,QRegister rm,const QOperand & operand)5865*f5c631daSSadaf Ebrahimi   void Vceq(DataType dt, QRegister rd, QRegister rm, const QOperand& operand) {
5866*f5c631daSSadaf Ebrahimi     Vceq(al, dt, rd, rm, operand);
5867*f5c631daSSadaf Ebrahimi   }
5868*f5c631daSSadaf Ebrahimi 
Vceq(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)5869*f5c631daSSadaf Ebrahimi   void Vceq(
5870*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5871*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5872*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5873*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5874*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5875*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5876*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5877*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5878*f5c631daSSadaf Ebrahimi     vceq(cond, dt, rd, rn, rm);
5879*f5c631daSSadaf Ebrahimi   }
Vceq(DataType dt,DRegister rd,DRegister rn,DRegister rm)5880*f5c631daSSadaf Ebrahimi   void Vceq(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5881*f5c631daSSadaf Ebrahimi     Vceq(al, dt, rd, rn, rm);
5882*f5c631daSSadaf Ebrahimi   }
5883*f5c631daSSadaf Ebrahimi 
Vceq(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)5884*f5c631daSSadaf Ebrahimi   void Vceq(
5885*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5886*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5887*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5888*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5889*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5890*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5891*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5892*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5893*f5c631daSSadaf Ebrahimi     vceq(cond, dt, rd, rn, rm);
5894*f5c631daSSadaf Ebrahimi   }
Vceq(DataType dt,QRegister rd,QRegister rn,QRegister rm)5895*f5c631daSSadaf Ebrahimi   void Vceq(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5896*f5c631daSSadaf Ebrahimi     Vceq(al, dt, rd, rn, rm);
5897*f5c631daSSadaf Ebrahimi   }
5898*f5c631daSSadaf Ebrahimi 
Vcge(Condition cond,DataType dt,DRegister rd,DRegister rm,const DOperand & operand)5899*f5c631daSSadaf Ebrahimi   void Vcge(Condition cond,
5900*f5c631daSSadaf Ebrahimi             DataType dt,
5901*f5c631daSSadaf Ebrahimi             DRegister rd,
5902*f5c631daSSadaf Ebrahimi             DRegister rm,
5903*f5c631daSSadaf Ebrahimi             const DOperand& operand) {
5904*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5905*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5906*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
5907*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5908*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5909*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5910*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5911*f5c631daSSadaf Ebrahimi     vcge(cond, dt, rd, rm, operand);
5912*f5c631daSSadaf Ebrahimi   }
Vcge(DataType dt,DRegister rd,DRegister rm,const DOperand & operand)5913*f5c631daSSadaf Ebrahimi   void Vcge(DataType dt, DRegister rd, DRegister rm, const DOperand& operand) {
5914*f5c631daSSadaf Ebrahimi     Vcge(al, dt, rd, rm, operand);
5915*f5c631daSSadaf Ebrahimi   }
5916*f5c631daSSadaf Ebrahimi 
Vcge(Condition cond,DataType dt,QRegister rd,QRegister rm,const QOperand & operand)5917*f5c631daSSadaf Ebrahimi   void Vcge(Condition cond,
5918*f5c631daSSadaf Ebrahimi             DataType dt,
5919*f5c631daSSadaf Ebrahimi             QRegister rd,
5920*f5c631daSSadaf Ebrahimi             QRegister rm,
5921*f5c631daSSadaf Ebrahimi             const QOperand& operand) {
5922*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5923*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5924*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
5925*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5926*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5927*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5928*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5929*f5c631daSSadaf Ebrahimi     vcge(cond, dt, rd, rm, operand);
5930*f5c631daSSadaf Ebrahimi   }
Vcge(DataType dt,QRegister rd,QRegister rm,const QOperand & operand)5931*f5c631daSSadaf Ebrahimi   void Vcge(DataType dt, QRegister rd, QRegister rm, const QOperand& operand) {
5932*f5c631daSSadaf Ebrahimi     Vcge(al, dt, rd, rm, operand);
5933*f5c631daSSadaf Ebrahimi   }
5934*f5c631daSSadaf Ebrahimi 
Vcge(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)5935*f5c631daSSadaf Ebrahimi   void Vcge(
5936*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5937*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5938*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5939*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5940*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5941*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5942*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5943*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5944*f5c631daSSadaf Ebrahimi     vcge(cond, dt, rd, rn, rm);
5945*f5c631daSSadaf Ebrahimi   }
Vcge(DataType dt,DRegister rd,DRegister rn,DRegister rm)5946*f5c631daSSadaf Ebrahimi   void Vcge(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
5947*f5c631daSSadaf Ebrahimi     Vcge(al, dt, rd, rn, rm);
5948*f5c631daSSadaf Ebrahimi   }
5949*f5c631daSSadaf Ebrahimi 
Vcge(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)5950*f5c631daSSadaf Ebrahimi   void Vcge(
5951*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5952*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5953*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
5954*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5955*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5956*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5957*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5958*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5959*f5c631daSSadaf Ebrahimi     vcge(cond, dt, rd, rn, rm);
5960*f5c631daSSadaf Ebrahimi   }
Vcge(DataType dt,QRegister rd,QRegister rn,QRegister rm)5961*f5c631daSSadaf Ebrahimi   void Vcge(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
5962*f5c631daSSadaf Ebrahimi     Vcge(al, dt, rd, rn, rm);
5963*f5c631daSSadaf Ebrahimi   }
5964*f5c631daSSadaf Ebrahimi 
Vcgt(Condition cond,DataType dt,DRegister rd,DRegister rm,const DOperand & operand)5965*f5c631daSSadaf Ebrahimi   void Vcgt(Condition cond,
5966*f5c631daSSadaf Ebrahimi             DataType dt,
5967*f5c631daSSadaf Ebrahimi             DRegister rd,
5968*f5c631daSSadaf Ebrahimi             DRegister rm,
5969*f5c631daSSadaf Ebrahimi             const DOperand& operand) {
5970*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5971*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5972*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
5973*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5974*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5975*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5976*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5977*f5c631daSSadaf Ebrahimi     vcgt(cond, dt, rd, rm, operand);
5978*f5c631daSSadaf Ebrahimi   }
Vcgt(DataType dt,DRegister rd,DRegister rm,const DOperand & operand)5979*f5c631daSSadaf Ebrahimi   void Vcgt(DataType dt, DRegister rd, DRegister rm, const DOperand& operand) {
5980*f5c631daSSadaf Ebrahimi     Vcgt(al, dt, rd, rm, operand);
5981*f5c631daSSadaf Ebrahimi   }
5982*f5c631daSSadaf Ebrahimi 
Vcgt(Condition cond,DataType dt,QRegister rd,QRegister rm,const QOperand & operand)5983*f5c631daSSadaf Ebrahimi   void Vcgt(Condition cond,
5984*f5c631daSSadaf Ebrahimi             DataType dt,
5985*f5c631daSSadaf Ebrahimi             QRegister rd,
5986*f5c631daSSadaf Ebrahimi             QRegister rm,
5987*f5c631daSSadaf Ebrahimi             const QOperand& operand) {
5988*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
5989*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
5990*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
5991*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
5992*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
5993*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
5994*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
5995*f5c631daSSadaf Ebrahimi     vcgt(cond, dt, rd, rm, operand);
5996*f5c631daSSadaf Ebrahimi   }
Vcgt(DataType dt,QRegister rd,QRegister rm,const QOperand & operand)5997*f5c631daSSadaf Ebrahimi   void Vcgt(DataType dt, QRegister rd, QRegister rm, const QOperand& operand) {
5998*f5c631daSSadaf Ebrahimi     Vcgt(al, dt, rd, rm, operand);
5999*f5c631daSSadaf Ebrahimi   }
6000*f5c631daSSadaf Ebrahimi 
Vcgt(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)6001*f5c631daSSadaf Ebrahimi   void Vcgt(
6002*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
6003*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6004*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
6005*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6006*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6007*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6008*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6009*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6010*f5c631daSSadaf Ebrahimi     vcgt(cond, dt, rd, rn, rm);
6011*f5c631daSSadaf Ebrahimi   }
Vcgt(DataType dt,DRegister rd,DRegister rn,DRegister rm)6012*f5c631daSSadaf Ebrahimi   void Vcgt(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
6013*f5c631daSSadaf Ebrahimi     Vcgt(al, dt, rd, rn, rm);
6014*f5c631daSSadaf Ebrahimi   }
6015*f5c631daSSadaf Ebrahimi 
Vcgt(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)6016*f5c631daSSadaf Ebrahimi   void Vcgt(
6017*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
6018*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6019*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
6020*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6021*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6022*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6023*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6024*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6025*f5c631daSSadaf Ebrahimi     vcgt(cond, dt, rd, rn, rm);
6026*f5c631daSSadaf Ebrahimi   }
Vcgt(DataType dt,QRegister rd,QRegister rn,QRegister rm)6027*f5c631daSSadaf Ebrahimi   void Vcgt(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
6028*f5c631daSSadaf Ebrahimi     Vcgt(al, dt, rd, rn, rm);
6029*f5c631daSSadaf Ebrahimi   }
6030*f5c631daSSadaf Ebrahimi 
Vcle(Condition cond,DataType dt,DRegister rd,DRegister rm,const DOperand & operand)6031*f5c631daSSadaf Ebrahimi   void Vcle(Condition cond,
6032*f5c631daSSadaf Ebrahimi             DataType dt,
6033*f5c631daSSadaf Ebrahimi             DRegister rd,
6034*f5c631daSSadaf Ebrahimi             DRegister rm,
6035*f5c631daSSadaf Ebrahimi             const DOperand& operand) {
6036*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6037*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6038*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
6039*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6040*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6041*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6042*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6043*f5c631daSSadaf Ebrahimi     vcle(cond, dt, rd, rm, operand);
6044*f5c631daSSadaf Ebrahimi   }
Vcle(DataType dt,DRegister rd,DRegister rm,const DOperand & operand)6045*f5c631daSSadaf Ebrahimi   void Vcle(DataType dt, DRegister rd, DRegister rm, const DOperand& operand) {
6046*f5c631daSSadaf Ebrahimi     Vcle(al, dt, rd, rm, operand);
6047*f5c631daSSadaf Ebrahimi   }
6048*f5c631daSSadaf Ebrahimi 
Vcle(Condition cond,DataType dt,QRegister rd,QRegister rm,const QOperand & operand)6049*f5c631daSSadaf Ebrahimi   void Vcle(Condition cond,
6050*f5c631daSSadaf Ebrahimi             DataType dt,
6051*f5c631daSSadaf Ebrahimi             QRegister rd,
6052*f5c631daSSadaf Ebrahimi             QRegister rm,
6053*f5c631daSSadaf Ebrahimi             const QOperand& operand) {
6054*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6055*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6056*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
6057*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6058*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6059*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6060*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6061*f5c631daSSadaf Ebrahimi     vcle(cond, dt, rd, rm, operand);
6062*f5c631daSSadaf Ebrahimi   }
Vcle(DataType dt,QRegister rd,QRegister rm,const QOperand & operand)6063*f5c631daSSadaf Ebrahimi   void Vcle(DataType dt, QRegister rd, QRegister rm, const QOperand& operand) {
6064*f5c631daSSadaf Ebrahimi     Vcle(al, dt, rd, rm, operand);
6065*f5c631daSSadaf Ebrahimi   }
6066*f5c631daSSadaf Ebrahimi 
Vcle(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)6067*f5c631daSSadaf Ebrahimi   void Vcle(
6068*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
6069*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6070*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
6071*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6072*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6073*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6074*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6075*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6076*f5c631daSSadaf Ebrahimi     vcle(cond, dt, rd, rn, rm);
6077*f5c631daSSadaf Ebrahimi   }
Vcle(DataType dt,DRegister rd,DRegister rn,DRegister rm)6078*f5c631daSSadaf Ebrahimi   void Vcle(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
6079*f5c631daSSadaf Ebrahimi     Vcle(al, dt, rd, rn, rm);
6080*f5c631daSSadaf Ebrahimi   }
6081*f5c631daSSadaf Ebrahimi 
Vcle(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)6082*f5c631daSSadaf Ebrahimi   void Vcle(
6083*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
6084*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6085*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
6086*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6087*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6088*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6089*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6090*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6091*f5c631daSSadaf Ebrahimi     vcle(cond, dt, rd, rn, rm);
6092*f5c631daSSadaf Ebrahimi   }
Vcle(DataType dt,QRegister rd,QRegister rn,QRegister rm)6093*f5c631daSSadaf Ebrahimi   void Vcle(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
6094*f5c631daSSadaf Ebrahimi     Vcle(al, dt, rd, rn, rm);
6095*f5c631daSSadaf Ebrahimi   }
6096*f5c631daSSadaf Ebrahimi 
Vcls(Condition cond,DataType dt,DRegister rd,DRegister rm)6097*f5c631daSSadaf Ebrahimi   void Vcls(Condition cond, DataType dt, DRegister rd, DRegister rm) {
6098*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6099*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6100*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6101*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6102*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6103*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6104*f5c631daSSadaf Ebrahimi     vcls(cond, dt, rd, rm);
6105*f5c631daSSadaf Ebrahimi   }
Vcls(DataType dt,DRegister rd,DRegister rm)6106*f5c631daSSadaf Ebrahimi   void Vcls(DataType dt, DRegister rd, DRegister rm) { Vcls(al, dt, rd, rm); }
6107*f5c631daSSadaf Ebrahimi 
Vcls(Condition cond,DataType dt,QRegister rd,QRegister rm)6108*f5c631daSSadaf Ebrahimi   void Vcls(Condition cond, DataType dt, QRegister rd, QRegister rm) {
6109*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6110*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6111*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6112*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6113*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6114*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6115*f5c631daSSadaf Ebrahimi     vcls(cond, dt, rd, rm);
6116*f5c631daSSadaf Ebrahimi   }
Vcls(DataType dt,QRegister rd,QRegister rm)6117*f5c631daSSadaf Ebrahimi   void Vcls(DataType dt, QRegister rd, QRegister rm) { Vcls(al, dt, rd, rm); }
6118*f5c631daSSadaf Ebrahimi 
Vclt(Condition cond,DataType dt,DRegister rd,DRegister rm,const DOperand & operand)6119*f5c631daSSadaf Ebrahimi   void Vclt(Condition cond,
6120*f5c631daSSadaf Ebrahimi             DataType dt,
6121*f5c631daSSadaf Ebrahimi             DRegister rd,
6122*f5c631daSSadaf Ebrahimi             DRegister rm,
6123*f5c631daSSadaf Ebrahimi             const DOperand& operand) {
6124*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6125*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6126*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
6127*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6128*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6129*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6130*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6131*f5c631daSSadaf Ebrahimi     vclt(cond, dt, rd, rm, operand);
6132*f5c631daSSadaf Ebrahimi   }
Vclt(DataType dt,DRegister rd,DRegister rm,const DOperand & operand)6133*f5c631daSSadaf Ebrahimi   void Vclt(DataType dt, DRegister rd, DRegister rm, const DOperand& operand) {
6134*f5c631daSSadaf Ebrahimi     Vclt(al, dt, rd, rm, operand);
6135*f5c631daSSadaf Ebrahimi   }
6136*f5c631daSSadaf Ebrahimi 
Vclt(Condition cond,DataType dt,QRegister rd,QRegister rm,const QOperand & operand)6137*f5c631daSSadaf Ebrahimi   void Vclt(Condition cond,
6138*f5c631daSSadaf Ebrahimi             DataType dt,
6139*f5c631daSSadaf Ebrahimi             QRegister rd,
6140*f5c631daSSadaf Ebrahimi             QRegister rm,
6141*f5c631daSSadaf Ebrahimi             const QOperand& operand) {
6142*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6143*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6144*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
6145*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6146*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6147*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6148*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6149*f5c631daSSadaf Ebrahimi     vclt(cond, dt, rd, rm, operand);
6150*f5c631daSSadaf Ebrahimi   }
Vclt(DataType dt,QRegister rd,QRegister rm,const QOperand & operand)6151*f5c631daSSadaf Ebrahimi   void Vclt(DataType dt, QRegister rd, QRegister rm, const QOperand& operand) {
6152*f5c631daSSadaf Ebrahimi     Vclt(al, dt, rd, rm, operand);
6153*f5c631daSSadaf Ebrahimi   }
6154*f5c631daSSadaf Ebrahimi 
Vclt(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)6155*f5c631daSSadaf Ebrahimi   void Vclt(
6156*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
6157*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6158*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
6159*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6160*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6161*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6162*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6163*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6164*f5c631daSSadaf Ebrahimi     vclt(cond, dt, rd, rn, rm);
6165*f5c631daSSadaf Ebrahimi   }
Vclt(DataType dt,DRegister rd,DRegister rn,DRegister rm)6166*f5c631daSSadaf Ebrahimi   void Vclt(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
6167*f5c631daSSadaf Ebrahimi     Vclt(al, dt, rd, rn, rm);
6168*f5c631daSSadaf Ebrahimi   }
6169*f5c631daSSadaf Ebrahimi 
Vclt(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)6170*f5c631daSSadaf Ebrahimi   void Vclt(
6171*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
6172*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6173*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
6174*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6175*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6176*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6177*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6178*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6179*f5c631daSSadaf Ebrahimi     vclt(cond, dt, rd, rn, rm);
6180*f5c631daSSadaf Ebrahimi   }
Vclt(DataType dt,QRegister rd,QRegister rn,QRegister rm)6181*f5c631daSSadaf Ebrahimi   void Vclt(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
6182*f5c631daSSadaf Ebrahimi     Vclt(al, dt, rd, rn, rm);
6183*f5c631daSSadaf Ebrahimi   }
6184*f5c631daSSadaf Ebrahimi 
Vclz(Condition cond,DataType dt,DRegister rd,DRegister rm)6185*f5c631daSSadaf Ebrahimi   void Vclz(Condition cond, DataType dt, DRegister rd, DRegister rm) {
6186*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6187*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6188*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6189*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6190*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6191*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6192*f5c631daSSadaf Ebrahimi     vclz(cond, dt, rd, rm);
6193*f5c631daSSadaf Ebrahimi   }
Vclz(DataType dt,DRegister rd,DRegister rm)6194*f5c631daSSadaf Ebrahimi   void Vclz(DataType dt, DRegister rd, DRegister rm) { Vclz(al, dt, rd, rm); }
6195*f5c631daSSadaf Ebrahimi 
Vclz(Condition cond,DataType dt,QRegister rd,QRegister rm)6196*f5c631daSSadaf Ebrahimi   void Vclz(Condition cond, DataType dt, QRegister rd, QRegister rm) {
6197*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6198*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6199*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6200*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6201*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6202*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6203*f5c631daSSadaf Ebrahimi     vclz(cond, dt, rd, rm);
6204*f5c631daSSadaf Ebrahimi   }
Vclz(DataType dt,QRegister rd,QRegister rm)6205*f5c631daSSadaf Ebrahimi   void Vclz(DataType dt, QRegister rd, QRegister rm) { Vclz(al, dt, rd, rm); }
6206*f5c631daSSadaf Ebrahimi 
Vcmp(Condition cond,DataType dt,SRegister rd,const SOperand & operand)6207*f5c631daSSadaf Ebrahimi   void Vcmp(Condition cond,
6208*f5c631daSSadaf Ebrahimi             DataType dt,
6209*f5c631daSSadaf Ebrahimi             SRegister rd,
6210*f5c631daSSadaf Ebrahimi             const SOperand& operand) {
6211*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6212*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
6213*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6214*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6215*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6216*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6217*f5c631daSSadaf Ebrahimi     vcmp(cond, dt, rd, operand);
6218*f5c631daSSadaf Ebrahimi   }
Vcmp(DataType dt,SRegister rd,const SOperand & operand)6219*f5c631daSSadaf Ebrahimi   void Vcmp(DataType dt, SRegister rd, const SOperand& operand) {
6220*f5c631daSSadaf Ebrahimi     Vcmp(al, dt, rd, operand);
6221*f5c631daSSadaf Ebrahimi   }
6222*f5c631daSSadaf Ebrahimi 
Vcmp(Condition cond,DataType dt,DRegister rd,const DOperand & operand)6223*f5c631daSSadaf Ebrahimi   void Vcmp(Condition cond,
6224*f5c631daSSadaf Ebrahimi             DataType dt,
6225*f5c631daSSadaf Ebrahimi             DRegister rd,
6226*f5c631daSSadaf Ebrahimi             const DOperand& operand) {
6227*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6228*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
6229*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6230*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6231*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6232*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6233*f5c631daSSadaf Ebrahimi     vcmp(cond, dt, rd, operand);
6234*f5c631daSSadaf Ebrahimi   }
Vcmp(DataType dt,DRegister rd,const DOperand & operand)6235*f5c631daSSadaf Ebrahimi   void Vcmp(DataType dt, DRegister rd, const DOperand& operand) {
6236*f5c631daSSadaf Ebrahimi     Vcmp(al, dt, rd, operand);
6237*f5c631daSSadaf Ebrahimi   }
6238*f5c631daSSadaf Ebrahimi 
Vcmpe(Condition cond,DataType dt,SRegister rd,const SOperand & operand)6239*f5c631daSSadaf Ebrahimi   void Vcmpe(Condition cond,
6240*f5c631daSSadaf Ebrahimi              DataType dt,
6241*f5c631daSSadaf Ebrahimi              SRegister rd,
6242*f5c631daSSadaf Ebrahimi              const SOperand& operand) {
6243*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6244*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
6245*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6246*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6247*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6248*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6249*f5c631daSSadaf Ebrahimi     vcmpe(cond, dt, rd, operand);
6250*f5c631daSSadaf Ebrahimi   }
Vcmpe(DataType dt,SRegister rd,const SOperand & operand)6251*f5c631daSSadaf Ebrahimi   void Vcmpe(DataType dt, SRegister rd, const SOperand& operand) {
6252*f5c631daSSadaf Ebrahimi     Vcmpe(al, dt, rd, operand);
6253*f5c631daSSadaf Ebrahimi   }
6254*f5c631daSSadaf Ebrahimi 
Vcmpe(Condition cond,DataType dt,DRegister rd,const DOperand & operand)6255*f5c631daSSadaf Ebrahimi   void Vcmpe(Condition cond,
6256*f5c631daSSadaf Ebrahimi              DataType dt,
6257*f5c631daSSadaf Ebrahimi              DRegister rd,
6258*f5c631daSSadaf Ebrahimi              const DOperand& operand) {
6259*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6260*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
6261*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6262*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6263*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6264*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6265*f5c631daSSadaf Ebrahimi     vcmpe(cond, dt, rd, operand);
6266*f5c631daSSadaf Ebrahimi   }
Vcmpe(DataType dt,DRegister rd,const DOperand & operand)6267*f5c631daSSadaf Ebrahimi   void Vcmpe(DataType dt, DRegister rd, const DOperand& operand) {
6268*f5c631daSSadaf Ebrahimi     Vcmpe(al, dt, rd, operand);
6269*f5c631daSSadaf Ebrahimi   }
6270*f5c631daSSadaf Ebrahimi 
Vcnt(Condition cond,DataType dt,DRegister rd,DRegister rm)6271*f5c631daSSadaf Ebrahimi   void Vcnt(Condition cond, DataType dt, DRegister rd, DRegister rm) {
6272*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6273*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6274*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6275*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6276*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6277*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6278*f5c631daSSadaf Ebrahimi     vcnt(cond, dt, rd, rm);
6279*f5c631daSSadaf Ebrahimi   }
Vcnt(DataType dt,DRegister rd,DRegister rm)6280*f5c631daSSadaf Ebrahimi   void Vcnt(DataType dt, DRegister rd, DRegister rm) { Vcnt(al, dt, rd, rm); }
6281*f5c631daSSadaf Ebrahimi 
Vcnt(Condition cond,DataType dt,QRegister rd,QRegister rm)6282*f5c631daSSadaf Ebrahimi   void Vcnt(Condition cond, DataType dt, QRegister rd, QRegister rm) {
6283*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6284*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6285*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6286*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6287*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6288*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6289*f5c631daSSadaf Ebrahimi     vcnt(cond, dt, rd, rm);
6290*f5c631daSSadaf Ebrahimi   }
Vcnt(DataType dt,QRegister rd,QRegister rm)6291*f5c631daSSadaf Ebrahimi   void Vcnt(DataType dt, QRegister rd, QRegister rm) { Vcnt(al, dt, rd, rm); }
6292*f5c631daSSadaf Ebrahimi 
Vcvt(Condition cond,DataType dt1,DataType dt2,DRegister rd,SRegister rm)6293*f5c631daSSadaf Ebrahimi   void Vcvt(
6294*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt1, DataType dt2, DRegister rd, SRegister rm) {
6295*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6296*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6297*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6298*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6299*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6300*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6301*f5c631daSSadaf Ebrahimi     vcvt(cond, dt1, dt2, rd, rm);
6302*f5c631daSSadaf Ebrahimi   }
Vcvt(DataType dt1,DataType dt2,DRegister rd,SRegister rm)6303*f5c631daSSadaf Ebrahimi   void Vcvt(DataType dt1, DataType dt2, DRegister rd, SRegister rm) {
6304*f5c631daSSadaf Ebrahimi     Vcvt(al, dt1, dt2, rd, rm);
6305*f5c631daSSadaf Ebrahimi   }
6306*f5c631daSSadaf Ebrahimi 
Vcvt(Condition cond,DataType dt1,DataType dt2,SRegister rd,DRegister rm)6307*f5c631daSSadaf Ebrahimi   void Vcvt(
6308*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt1, DataType dt2, SRegister rd, DRegister rm) {
6309*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6310*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6311*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6312*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6313*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6314*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6315*f5c631daSSadaf Ebrahimi     vcvt(cond, dt1, dt2, rd, rm);
6316*f5c631daSSadaf Ebrahimi   }
Vcvt(DataType dt1,DataType dt2,SRegister rd,DRegister rm)6317*f5c631daSSadaf Ebrahimi   void Vcvt(DataType dt1, DataType dt2, SRegister rd, DRegister rm) {
6318*f5c631daSSadaf Ebrahimi     Vcvt(al, dt1, dt2, rd, rm);
6319*f5c631daSSadaf Ebrahimi   }
6320*f5c631daSSadaf Ebrahimi 
Vcvt(Condition cond,DataType dt1,DataType dt2,DRegister rd,DRegister rm,int32_t fbits)6321*f5c631daSSadaf Ebrahimi   void Vcvt(Condition cond,
6322*f5c631daSSadaf Ebrahimi             DataType dt1,
6323*f5c631daSSadaf Ebrahimi             DataType dt2,
6324*f5c631daSSadaf Ebrahimi             DRegister rd,
6325*f5c631daSSadaf Ebrahimi             DRegister rm,
6326*f5c631daSSadaf Ebrahimi             int32_t fbits) {
6327*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6328*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6329*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6330*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6331*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6332*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6333*f5c631daSSadaf Ebrahimi     vcvt(cond, dt1, dt2, rd, rm, fbits);
6334*f5c631daSSadaf Ebrahimi   }
Vcvt(DataType dt1,DataType dt2,DRegister rd,DRegister rm,int32_t fbits)6335*f5c631daSSadaf Ebrahimi   void Vcvt(
6336*f5c631daSSadaf Ebrahimi       DataType dt1, DataType dt2, DRegister rd, DRegister rm, int32_t fbits) {
6337*f5c631daSSadaf Ebrahimi     Vcvt(al, dt1, dt2, rd, rm, fbits);
6338*f5c631daSSadaf Ebrahimi   }
6339*f5c631daSSadaf Ebrahimi 
Vcvt(Condition cond,DataType dt1,DataType dt2,QRegister rd,QRegister rm,int32_t fbits)6340*f5c631daSSadaf Ebrahimi   void Vcvt(Condition cond,
6341*f5c631daSSadaf Ebrahimi             DataType dt1,
6342*f5c631daSSadaf Ebrahimi             DataType dt2,
6343*f5c631daSSadaf Ebrahimi             QRegister rd,
6344*f5c631daSSadaf Ebrahimi             QRegister rm,
6345*f5c631daSSadaf Ebrahimi             int32_t fbits) {
6346*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6347*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6348*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6349*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6350*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6351*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6352*f5c631daSSadaf Ebrahimi     vcvt(cond, dt1, dt2, rd, rm, fbits);
6353*f5c631daSSadaf Ebrahimi   }
Vcvt(DataType dt1,DataType dt2,QRegister rd,QRegister rm,int32_t fbits)6354*f5c631daSSadaf Ebrahimi   void Vcvt(
6355*f5c631daSSadaf Ebrahimi       DataType dt1, DataType dt2, QRegister rd, QRegister rm, int32_t fbits) {
6356*f5c631daSSadaf Ebrahimi     Vcvt(al, dt1, dt2, rd, rm, fbits);
6357*f5c631daSSadaf Ebrahimi   }
6358*f5c631daSSadaf Ebrahimi 
Vcvt(Condition cond,DataType dt1,DataType dt2,SRegister rd,SRegister rm,int32_t fbits)6359*f5c631daSSadaf Ebrahimi   void Vcvt(Condition cond,
6360*f5c631daSSadaf Ebrahimi             DataType dt1,
6361*f5c631daSSadaf Ebrahimi             DataType dt2,
6362*f5c631daSSadaf Ebrahimi             SRegister rd,
6363*f5c631daSSadaf Ebrahimi             SRegister rm,
6364*f5c631daSSadaf Ebrahimi             int32_t fbits) {
6365*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6366*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6367*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6368*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6369*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6370*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6371*f5c631daSSadaf Ebrahimi     vcvt(cond, dt1, dt2, rd, rm, fbits);
6372*f5c631daSSadaf Ebrahimi   }
Vcvt(DataType dt1,DataType dt2,SRegister rd,SRegister rm,int32_t fbits)6373*f5c631daSSadaf Ebrahimi   void Vcvt(
6374*f5c631daSSadaf Ebrahimi       DataType dt1, DataType dt2, SRegister rd, SRegister rm, int32_t fbits) {
6375*f5c631daSSadaf Ebrahimi     Vcvt(al, dt1, dt2, rd, rm, fbits);
6376*f5c631daSSadaf Ebrahimi   }
6377*f5c631daSSadaf Ebrahimi 
Vcvt(Condition cond,DataType dt1,DataType dt2,DRegister rd,DRegister rm)6378*f5c631daSSadaf Ebrahimi   void Vcvt(
6379*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt1, DataType dt2, DRegister rd, DRegister rm) {
6380*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6381*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6382*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6383*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6384*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6385*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6386*f5c631daSSadaf Ebrahimi     vcvt(cond, dt1, dt2, rd, rm);
6387*f5c631daSSadaf Ebrahimi   }
Vcvt(DataType dt1,DataType dt2,DRegister rd,DRegister rm)6388*f5c631daSSadaf Ebrahimi   void Vcvt(DataType dt1, DataType dt2, DRegister rd, DRegister rm) {
6389*f5c631daSSadaf Ebrahimi     Vcvt(al, dt1, dt2, rd, rm);
6390*f5c631daSSadaf Ebrahimi   }
6391*f5c631daSSadaf Ebrahimi 
Vcvt(Condition cond,DataType dt1,DataType dt2,QRegister rd,QRegister rm)6392*f5c631daSSadaf Ebrahimi   void Vcvt(
6393*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt1, DataType dt2, QRegister rd, QRegister rm) {
6394*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6395*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6396*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6397*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6398*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6399*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6400*f5c631daSSadaf Ebrahimi     vcvt(cond, dt1, dt2, rd, rm);
6401*f5c631daSSadaf Ebrahimi   }
Vcvt(DataType dt1,DataType dt2,QRegister rd,QRegister rm)6402*f5c631daSSadaf Ebrahimi   void Vcvt(DataType dt1, DataType dt2, QRegister rd, QRegister rm) {
6403*f5c631daSSadaf Ebrahimi     Vcvt(al, dt1, dt2, rd, rm);
6404*f5c631daSSadaf Ebrahimi   }
6405*f5c631daSSadaf Ebrahimi 
Vcvt(Condition cond,DataType dt1,DataType dt2,DRegister rd,QRegister rm)6406*f5c631daSSadaf Ebrahimi   void Vcvt(
6407*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt1, DataType dt2, DRegister rd, QRegister rm) {
6408*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6409*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6410*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6411*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6412*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6413*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6414*f5c631daSSadaf Ebrahimi     vcvt(cond, dt1, dt2, rd, rm);
6415*f5c631daSSadaf Ebrahimi   }
Vcvt(DataType dt1,DataType dt2,DRegister rd,QRegister rm)6416*f5c631daSSadaf Ebrahimi   void Vcvt(DataType dt1, DataType dt2, DRegister rd, QRegister rm) {
6417*f5c631daSSadaf Ebrahimi     Vcvt(al, dt1, dt2, rd, rm);
6418*f5c631daSSadaf Ebrahimi   }
6419*f5c631daSSadaf Ebrahimi 
Vcvt(Condition cond,DataType dt1,DataType dt2,QRegister rd,DRegister rm)6420*f5c631daSSadaf Ebrahimi   void Vcvt(
6421*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt1, DataType dt2, QRegister rd, DRegister rm) {
6422*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6423*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6424*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6425*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6426*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6427*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6428*f5c631daSSadaf Ebrahimi     vcvt(cond, dt1, dt2, rd, rm);
6429*f5c631daSSadaf Ebrahimi   }
Vcvt(DataType dt1,DataType dt2,QRegister rd,DRegister rm)6430*f5c631daSSadaf Ebrahimi   void Vcvt(DataType dt1, DataType dt2, QRegister rd, DRegister rm) {
6431*f5c631daSSadaf Ebrahimi     Vcvt(al, dt1, dt2, rd, rm);
6432*f5c631daSSadaf Ebrahimi   }
6433*f5c631daSSadaf Ebrahimi 
Vcvt(Condition cond,DataType dt1,DataType dt2,SRegister rd,SRegister rm)6434*f5c631daSSadaf Ebrahimi   void Vcvt(
6435*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm) {
6436*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6437*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6438*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6439*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6440*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6441*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6442*f5c631daSSadaf Ebrahimi     vcvt(cond, dt1, dt2, rd, rm);
6443*f5c631daSSadaf Ebrahimi   }
Vcvt(DataType dt1,DataType dt2,SRegister rd,SRegister rm)6444*f5c631daSSadaf Ebrahimi   void Vcvt(DataType dt1, DataType dt2, SRegister rd, SRegister rm) {
6445*f5c631daSSadaf Ebrahimi     Vcvt(al, dt1, dt2, rd, rm);
6446*f5c631daSSadaf Ebrahimi   }
6447*f5c631daSSadaf Ebrahimi 
Vcvta(DataType dt1,DataType dt2,DRegister rd,DRegister rm)6448*f5c631daSSadaf Ebrahimi   void Vcvta(DataType dt1, DataType dt2, DRegister rd, DRegister rm) {
6449*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6450*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6451*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6452*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6453*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6454*f5c631daSSadaf Ebrahimi     vcvta(dt1, dt2, rd, rm);
6455*f5c631daSSadaf Ebrahimi   }
6456*f5c631daSSadaf Ebrahimi 
Vcvta(DataType dt1,DataType dt2,QRegister rd,QRegister rm)6457*f5c631daSSadaf Ebrahimi   void Vcvta(DataType dt1, DataType dt2, QRegister rd, QRegister rm) {
6458*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6459*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6460*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6461*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6462*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6463*f5c631daSSadaf Ebrahimi     vcvta(dt1, dt2, rd, rm);
6464*f5c631daSSadaf Ebrahimi   }
6465*f5c631daSSadaf Ebrahimi 
Vcvta(DataType dt1,DataType dt2,SRegister rd,SRegister rm)6466*f5c631daSSadaf Ebrahimi   void Vcvta(DataType dt1, DataType dt2, SRegister rd, SRegister rm) {
6467*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6468*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6469*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6470*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6471*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6472*f5c631daSSadaf Ebrahimi     vcvta(dt1, dt2, rd, rm);
6473*f5c631daSSadaf Ebrahimi   }
6474*f5c631daSSadaf Ebrahimi 
Vcvta(DataType dt1,DataType dt2,SRegister rd,DRegister rm)6475*f5c631daSSadaf Ebrahimi   void Vcvta(DataType dt1, DataType dt2, SRegister rd, DRegister rm) {
6476*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6477*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6478*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6479*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6480*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6481*f5c631daSSadaf Ebrahimi     vcvta(dt1, dt2, rd, rm);
6482*f5c631daSSadaf Ebrahimi   }
6483*f5c631daSSadaf Ebrahimi 
Vcvtb(Condition cond,DataType dt1,DataType dt2,SRegister rd,SRegister rm)6484*f5c631daSSadaf Ebrahimi   void Vcvtb(
6485*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm) {
6486*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6487*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6488*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6489*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6490*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6491*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6492*f5c631daSSadaf Ebrahimi     vcvtb(cond, dt1, dt2, rd, rm);
6493*f5c631daSSadaf Ebrahimi   }
Vcvtb(DataType dt1,DataType dt2,SRegister rd,SRegister rm)6494*f5c631daSSadaf Ebrahimi   void Vcvtb(DataType dt1, DataType dt2, SRegister rd, SRegister rm) {
6495*f5c631daSSadaf Ebrahimi     Vcvtb(al, dt1, dt2, rd, rm);
6496*f5c631daSSadaf Ebrahimi   }
6497*f5c631daSSadaf Ebrahimi 
Vcvtb(Condition cond,DataType dt1,DataType dt2,DRegister rd,SRegister rm)6498*f5c631daSSadaf Ebrahimi   void Vcvtb(
6499*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt1, DataType dt2, DRegister rd, SRegister rm) {
6500*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6501*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6502*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6503*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6504*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6505*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6506*f5c631daSSadaf Ebrahimi     vcvtb(cond, dt1, dt2, rd, rm);
6507*f5c631daSSadaf Ebrahimi   }
Vcvtb(DataType dt1,DataType dt2,DRegister rd,SRegister rm)6508*f5c631daSSadaf Ebrahimi   void Vcvtb(DataType dt1, DataType dt2, DRegister rd, SRegister rm) {
6509*f5c631daSSadaf Ebrahimi     Vcvtb(al, dt1, dt2, rd, rm);
6510*f5c631daSSadaf Ebrahimi   }
6511*f5c631daSSadaf Ebrahimi 
Vcvtb(Condition cond,DataType dt1,DataType dt2,SRegister rd,DRegister rm)6512*f5c631daSSadaf Ebrahimi   void Vcvtb(
6513*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt1, DataType dt2, SRegister rd, DRegister rm) {
6514*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6515*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6516*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6517*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6518*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6519*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6520*f5c631daSSadaf Ebrahimi     vcvtb(cond, dt1, dt2, rd, rm);
6521*f5c631daSSadaf Ebrahimi   }
Vcvtb(DataType dt1,DataType dt2,SRegister rd,DRegister rm)6522*f5c631daSSadaf Ebrahimi   void Vcvtb(DataType dt1, DataType dt2, SRegister rd, DRegister rm) {
6523*f5c631daSSadaf Ebrahimi     Vcvtb(al, dt1, dt2, rd, rm);
6524*f5c631daSSadaf Ebrahimi   }
6525*f5c631daSSadaf Ebrahimi 
Vcvtm(DataType dt1,DataType dt2,DRegister rd,DRegister rm)6526*f5c631daSSadaf Ebrahimi   void Vcvtm(DataType dt1, DataType dt2, DRegister rd, DRegister rm) {
6527*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6528*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6529*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6530*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6531*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6532*f5c631daSSadaf Ebrahimi     vcvtm(dt1, dt2, rd, rm);
6533*f5c631daSSadaf Ebrahimi   }
6534*f5c631daSSadaf Ebrahimi 
Vcvtm(DataType dt1,DataType dt2,QRegister rd,QRegister rm)6535*f5c631daSSadaf Ebrahimi   void Vcvtm(DataType dt1, DataType dt2, QRegister rd, QRegister rm) {
6536*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6537*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6538*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6539*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6540*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6541*f5c631daSSadaf Ebrahimi     vcvtm(dt1, dt2, rd, rm);
6542*f5c631daSSadaf Ebrahimi   }
6543*f5c631daSSadaf Ebrahimi 
Vcvtm(DataType dt1,DataType dt2,SRegister rd,SRegister rm)6544*f5c631daSSadaf Ebrahimi   void Vcvtm(DataType dt1, DataType dt2, SRegister rd, SRegister rm) {
6545*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6546*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6547*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6548*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6549*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6550*f5c631daSSadaf Ebrahimi     vcvtm(dt1, dt2, rd, rm);
6551*f5c631daSSadaf Ebrahimi   }
6552*f5c631daSSadaf Ebrahimi 
Vcvtm(DataType dt1,DataType dt2,SRegister rd,DRegister rm)6553*f5c631daSSadaf Ebrahimi   void Vcvtm(DataType dt1, DataType dt2, SRegister rd, DRegister rm) {
6554*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6555*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6556*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6557*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6558*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6559*f5c631daSSadaf Ebrahimi     vcvtm(dt1, dt2, rd, rm);
6560*f5c631daSSadaf Ebrahimi   }
6561*f5c631daSSadaf Ebrahimi 
Vcvtn(DataType dt1,DataType dt2,DRegister rd,DRegister rm)6562*f5c631daSSadaf Ebrahimi   void Vcvtn(DataType dt1, DataType dt2, DRegister rd, DRegister rm) {
6563*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6564*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6565*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6566*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6567*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6568*f5c631daSSadaf Ebrahimi     vcvtn(dt1, dt2, rd, rm);
6569*f5c631daSSadaf Ebrahimi   }
6570*f5c631daSSadaf Ebrahimi 
Vcvtn(DataType dt1,DataType dt2,QRegister rd,QRegister rm)6571*f5c631daSSadaf Ebrahimi   void Vcvtn(DataType dt1, DataType dt2, QRegister rd, QRegister rm) {
6572*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6573*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6574*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6575*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6576*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6577*f5c631daSSadaf Ebrahimi     vcvtn(dt1, dt2, rd, rm);
6578*f5c631daSSadaf Ebrahimi   }
6579*f5c631daSSadaf Ebrahimi 
Vcvtn(DataType dt1,DataType dt2,SRegister rd,SRegister rm)6580*f5c631daSSadaf Ebrahimi   void Vcvtn(DataType dt1, DataType dt2, SRegister rd, SRegister rm) {
6581*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6582*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6583*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6584*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6585*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6586*f5c631daSSadaf Ebrahimi     vcvtn(dt1, dt2, rd, rm);
6587*f5c631daSSadaf Ebrahimi   }
6588*f5c631daSSadaf Ebrahimi 
Vcvtn(DataType dt1,DataType dt2,SRegister rd,DRegister rm)6589*f5c631daSSadaf Ebrahimi   void Vcvtn(DataType dt1, DataType dt2, SRegister rd, DRegister rm) {
6590*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6591*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6592*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6593*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6594*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6595*f5c631daSSadaf Ebrahimi     vcvtn(dt1, dt2, rd, rm);
6596*f5c631daSSadaf Ebrahimi   }
6597*f5c631daSSadaf Ebrahimi 
Vcvtp(DataType dt1,DataType dt2,DRegister rd,DRegister rm)6598*f5c631daSSadaf Ebrahimi   void Vcvtp(DataType dt1, DataType dt2, DRegister rd, DRegister rm) {
6599*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6600*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6601*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6602*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6603*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6604*f5c631daSSadaf Ebrahimi     vcvtp(dt1, dt2, rd, rm);
6605*f5c631daSSadaf Ebrahimi   }
6606*f5c631daSSadaf Ebrahimi 
Vcvtp(DataType dt1,DataType dt2,QRegister rd,QRegister rm)6607*f5c631daSSadaf Ebrahimi   void Vcvtp(DataType dt1, DataType dt2, QRegister rd, QRegister rm) {
6608*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6609*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6610*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6611*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6612*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6613*f5c631daSSadaf Ebrahimi     vcvtp(dt1, dt2, rd, rm);
6614*f5c631daSSadaf Ebrahimi   }
6615*f5c631daSSadaf Ebrahimi 
Vcvtp(DataType dt1,DataType dt2,SRegister rd,SRegister rm)6616*f5c631daSSadaf Ebrahimi   void Vcvtp(DataType dt1, DataType dt2, SRegister rd, SRegister rm) {
6617*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6618*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6619*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6620*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6621*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6622*f5c631daSSadaf Ebrahimi     vcvtp(dt1, dt2, rd, rm);
6623*f5c631daSSadaf Ebrahimi   }
6624*f5c631daSSadaf Ebrahimi 
Vcvtp(DataType dt1,DataType dt2,SRegister rd,DRegister rm)6625*f5c631daSSadaf Ebrahimi   void Vcvtp(DataType dt1, DataType dt2, SRegister rd, DRegister rm) {
6626*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6627*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6628*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6629*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6630*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6631*f5c631daSSadaf Ebrahimi     vcvtp(dt1, dt2, rd, rm);
6632*f5c631daSSadaf Ebrahimi   }
6633*f5c631daSSadaf Ebrahimi 
Vcvtr(Condition cond,DataType dt1,DataType dt2,SRegister rd,SRegister rm)6634*f5c631daSSadaf Ebrahimi   void Vcvtr(
6635*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm) {
6636*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6637*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6638*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6639*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6640*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6641*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6642*f5c631daSSadaf Ebrahimi     vcvtr(cond, dt1, dt2, rd, rm);
6643*f5c631daSSadaf Ebrahimi   }
Vcvtr(DataType dt1,DataType dt2,SRegister rd,SRegister rm)6644*f5c631daSSadaf Ebrahimi   void Vcvtr(DataType dt1, DataType dt2, SRegister rd, SRegister rm) {
6645*f5c631daSSadaf Ebrahimi     Vcvtr(al, dt1, dt2, rd, rm);
6646*f5c631daSSadaf Ebrahimi   }
6647*f5c631daSSadaf Ebrahimi 
Vcvtr(Condition cond,DataType dt1,DataType dt2,SRegister rd,DRegister rm)6648*f5c631daSSadaf Ebrahimi   void Vcvtr(
6649*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt1, DataType dt2, SRegister rd, DRegister rm) {
6650*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6651*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6652*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6653*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6654*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6655*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6656*f5c631daSSadaf Ebrahimi     vcvtr(cond, dt1, dt2, rd, rm);
6657*f5c631daSSadaf Ebrahimi   }
Vcvtr(DataType dt1,DataType dt2,SRegister rd,DRegister rm)6658*f5c631daSSadaf Ebrahimi   void Vcvtr(DataType dt1, DataType dt2, SRegister rd, DRegister rm) {
6659*f5c631daSSadaf Ebrahimi     Vcvtr(al, dt1, dt2, rd, rm);
6660*f5c631daSSadaf Ebrahimi   }
6661*f5c631daSSadaf Ebrahimi 
Vcvtt(Condition cond,DataType dt1,DataType dt2,SRegister rd,SRegister rm)6662*f5c631daSSadaf Ebrahimi   void Vcvtt(
6663*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm) {
6664*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6665*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6666*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6667*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6668*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6669*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6670*f5c631daSSadaf Ebrahimi     vcvtt(cond, dt1, dt2, rd, rm);
6671*f5c631daSSadaf Ebrahimi   }
Vcvtt(DataType dt1,DataType dt2,SRegister rd,SRegister rm)6672*f5c631daSSadaf Ebrahimi   void Vcvtt(DataType dt1, DataType dt2, SRegister rd, SRegister rm) {
6673*f5c631daSSadaf Ebrahimi     Vcvtt(al, dt1, dt2, rd, rm);
6674*f5c631daSSadaf Ebrahimi   }
6675*f5c631daSSadaf Ebrahimi 
Vcvtt(Condition cond,DataType dt1,DataType dt2,DRegister rd,SRegister rm)6676*f5c631daSSadaf Ebrahimi   void Vcvtt(
6677*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt1, DataType dt2, DRegister rd, SRegister rm) {
6678*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6679*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6680*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6681*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6682*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6683*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6684*f5c631daSSadaf Ebrahimi     vcvtt(cond, dt1, dt2, rd, rm);
6685*f5c631daSSadaf Ebrahimi   }
Vcvtt(DataType dt1,DataType dt2,DRegister rd,SRegister rm)6686*f5c631daSSadaf Ebrahimi   void Vcvtt(DataType dt1, DataType dt2, DRegister rd, SRegister rm) {
6687*f5c631daSSadaf Ebrahimi     Vcvtt(al, dt1, dt2, rd, rm);
6688*f5c631daSSadaf Ebrahimi   }
6689*f5c631daSSadaf Ebrahimi 
Vcvtt(Condition cond,DataType dt1,DataType dt2,SRegister rd,DRegister rm)6690*f5c631daSSadaf Ebrahimi   void Vcvtt(
6691*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt1, DataType dt2, SRegister rd, DRegister rm) {
6692*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6693*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6694*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6695*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6696*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6697*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6698*f5c631daSSadaf Ebrahimi     vcvtt(cond, dt1, dt2, rd, rm);
6699*f5c631daSSadaf Ebrahimi   }
Vcvtt(DataType dt1,DataType dt2,SRegister rd,DRegister rm)6700*f5c631daSSadaf Ebrahimi   void Vcvtt(DataType dt1, DataType dt2, SRegister rd, DRegister rm) {
6701*f5c631daSSadaf Ebrahimi     Vcvtt(al, dt1, dt2, rd, rm);
6702*f5c631daSSadaf Ebrahimi   }
6703*f5c631daSSadaf Ebrahimi 
Vdiv(Condition cond,DataType dt,SRegister rd,SRegister rn,SRegister rm)6704*f5c631daSSadaf Ebrahimi   void Vdiv(
6705*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) {
6706*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6707*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
6708*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6709*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6710*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6711*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6712*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6713*f5c631daSSadaf Ebrahimi     vdiv(cond, dt, rd, rn, rm);
6714*f5c631daSSadaf Ebrahimi   }
Vdiv(DataType dt,SRegister rd,SRegister rn,SRegister rm)6715*f5c631daSSadaf Ebrahimi   void Vdiv(DataType dt, SRegister rd, SRegister rn, SRegister rm) {
6716*f5c631daSSadaf Ebrahimi     Vdiv(al, dt, rd, rn, rm);
6717*f5c631daSSadaf Ebrahimi   }
6718*f5c631daSSadaf Ebrahimi 
Vdiv(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)6719*f5c631daSSadaf Ebrahimi   void Vdiv(
6720*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
6721*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6722*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
6723*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6724*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6725*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6726*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6727*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6728*f5c631daSSadaf Ebrahimi     vdiv(cond, dt, rd, rn, rm);
6729*f5c631daSSadaf Ebrahimi   }
Vdiv(DataType dt,DRegister rd,DRegister rn,DRegister rm)6730*f5c631daSSadaf Ebrahimi   void Vdiv(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
6731*f5c631daSSadaf Ebrahimi     Vdiv(al, dt, rd, rn, rm);
6732*f5c631daSSadaf Ebrahimi   }
6733*f5c631daSSadaf Ebrahimi 
Vdup(Condition cond,DataType dt,QRegister rd,Register rt)6734*f5c631daSSadaf Ebrahimi   void Vdup(Condition cond, DataType dt, QRegister rd, Register rt) {
6735*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6736*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
6737*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6738*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6739*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6740*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6741*f5c631daSSadaf Ebrahimi     vdup(cond, dt, rd, rt);
6742*f5c631daSSadaf Ebrahimi   }
Vdup(DataType dt,QRegister rd,Register rt)6743*f5c631daSSadaf Ebrahimi   void Vdup(DataType dt, QRegister rd, Register rt) { Vdup(al, dt, rd, rt); }
6744*f5c631daSSadaf Ebrahimi 
Vdup(Condition cond,DataType dt,DRegister rd,Register rt)6745*f5c631daSSadaf Ebrahimi   void Vdup(Condition cond, DataType dt, DRegister rd, Register rt) {
6746*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6747*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
6748*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6749*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6750*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6751*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6752*f5c631daSSadaf Ebrahimi     vdup(cond, dt, rd, rt);
6753*f5c631daSSadaf Ebrahimi   }
Vdup(DataType dt,DRegister rd,Register rt)6754*f5c631daSSadaf Ebrahimi   void Vdup(DataType dt, DRegister rd, Register rt) { Vdup(al, dt, rd, rt); }
6755*f5c631daSSadaf Ebrahimi 
Vdup(Condition cond,DataType dt,DRegister rd,DRegisterLane rm)6756*f5c631daSSadaf Ebrahimi   void Vdup(Condition cond, DataType dt, DRegister rd, DRegisterLane rm) {
6757*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6758*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6759*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6760*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6761*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6762*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6763*f5c631daSSadaf Ebrahimi     vdup(cond, dt, rd, rm);
6764*f5c631daSSadaf Ebrahimi   }
Vdup(DataType dt,DRegister rd,DRegisterLane rm)6765*f5c631daSSadaf Ebrahimi   void Vdup(DataType dt, DRegister rd, DRegisterLane rm) {
6766*f5c631daSSadaf Ebrahimi     Vdup(al, dt, rd, rm);
6767*f5c631daSSadaf Ebrahimi   }
6768*f5c631daSSadaf Ebrahimi 
Vdup(Condition cond,DataType dt,QRegister rd,DRegisterLane rm)6769*f5c631daSSadaf Ebrahimi   void Vdup(Condition cond, DataType dt, QRegister rd, DRegisterLane rm) {
6770*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6771*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6772*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6773*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6774*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6775*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6776*f5c631daSSadaf Ebrahimi     vdup(cond, dt, rd, rm);
6777*f5c631daSSadaf Ebrahimi   }
Vdup(DataType dt,QRegister rd,DRegisterLane rm)6778*f5c631daSSadaf Ebrahimi   void Vdup(DataType dt, QRegister rd, DRegisterLane rm) {
6779*f5c631daSSadaf Ebrahimi     Vdup(al, dt, rd, rm);
6780*f5c631daSSadaf Ebrahimi   }
6781*f5c631daSSadaf Ebrahimi 
Veor(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)6782*f5c631daSSadaf Ebrahimi   void Veor(
6783*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
6784*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6785*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
6786*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6787*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6788*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6789*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6790*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6791*f5c631daSSadaf Ebrahimi     veor(cond, dt, rd, rn, rm);
6792*f5c631daSSadaf Ebrahimi   }
Veor(DataType dt,DRegister rd,DRegister rn,DRegister rm)6793*f5c631daSSadaf Ebrahimi   void Veor(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
6794*f5c631daSSadaf Ebrahimi     Veor(al, dt, rd, rn, rm);
6795*f5c631daSSadaf Ebrahimi   }
Veor(Condition cond,DRegister rd,DRegister rn,DRegister rm)6796*f5c631daSSadaf Ebrahimi   void Veor(Condition cond, DRegister rd, DRegister rn, DRegister rm) {
6797*f5c631daSSadaf Ebrahimi     Veor(cond, kDataTypeValueNone, rd, rn, rm);
6798*f5c631daSSadaf Ebrahimi   }
Veor(DRegister rd,DRegister rn,DRegister rm)6799*f5c631daSSadaf Ebrahimi   void Veor(DRegister rd, DRegister rn, DRegister rm) {
6800*f5c631daSSadaf Ebrahimi     Veor(al, kDataTypeValueNone, rd, rn, rm);
6801*f5c631daSSadaf Ebrahimi   }
6802*f5c631daSSadaf Ebrahimi 
Veor(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)6803*f5c631daSSadaf Ebrahimi   void Veor(
6804*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
6805*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6806*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
6807*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6808*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6809*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6810*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6811*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6812*f5c631daSSadaf Ebrahimi     veor(cond, dt, rd, rn, rm);
6813*f5c631daSSadaf Ebrahimi   }
Veor(DataType dt,QRegister rd,QRegister rn,QRegister rm)6814*f5c631daSSadaf Ebrahimi   void Veor(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
6815*f5c631daSSadaf Ebrahimi     Veor(al, dt, rd, rn, rm);
6816*f5c631daSSadaf Ebrahimi   }
Veor(Condition cond,QRegister rd,QRegister rn,QRegister rm)6817*f5c631daSSadaf Ebrahimi   void Veor(Condition cond, QRegister rd, QRegister rn, QRegister rm) {
6818*f5c631daSSadaf Ebrahimi     Veor(cond, kDataTypeValueNone, rd, rn, rm);
6819*f5c631daSSadaf Ebrahimi   }
Veor(QRegister rd,QRegister rn,QRegister rm)6820*f5c631daSSadaf Ebrahimi   void Veor(QRegister rd, QRegister rn, QRegister rm) {
6821*f5c631daSSadaf Ebrahimi     Veor(al, kDataTypeValueNone, rd, rn, rm);
6822*f5c631daSSadaf Ebrahimi   }
6823*f5c631daSSadaf Ebrahimi 
Vext(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm,const DOperand & operand)6824*f5c631daSSadaf Ebrahimi   void Vext(Condition cond,
6825*f5c631daSSadaf Ebrahimi             DataType dt,
6826*f5c631daSSadaf Ebrahimi             DRegister rd,
6827*f5c631daSSadaf Ebrahimi             DRegister rn,
6828*f5c631daSSadaf Ebrahimi             DRegister rm,
6829*f5c631daSSadaf Ebrahimi             const DOperand& operand) {
6830*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6831*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
6832*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6833*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
6834*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6835*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6836*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6837*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6838*f5c631daSSadaf Ebrahimi     vext(cond, dt, rd, rn, rm, operand);
6839*f5c631daSSadaf Ebrahimi   }
Vext(DataType dt,DRegister rd,DRegister rn,DRegister rm,const DOperand & operand)6840*f5c631daSSadaf Ebrahimi   void Vext(DataType dt,
6841*f5c631daSSadaf Ebrahimi             DRegister rd,
6842*f5c631daSSadaf Ebrahimi             DRegister rn,
6843*f5c631daSSadaf Ebrahimi             DRegister rm,
6844*f5c631daSSadaf Ebrahimi             const DOperand& operand) {
6845*f5c631daSSadaf Ebrahimi     Vext(al, dt, rd, rn, rm, operand);
6846*f5c631daSSadaf Ebrahimi   }
6847*f5c631daSSadaf Ebrahimi 
Vext(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm,const QOperand & operand)6848*f5c631daSSadaf Ebrahimi   void Vext(Condition cond,
6849*f5c631daSSadaf Ebrahimi             DataType dt,
6850*f5c631daSSadaf Ebrahimi             QRegister rd,
6851*f5c631daSSadaf Ebrahimi             QRegister rn,
6852*f5c631daSSadaf Ebrahimi             QRegister rm,
6853*f5c631daSSadaf Ebrahimi             const QOperand& operand) {
6854*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6855*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
6856*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6857*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
6858*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6859*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6860*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6861*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6862*f5c631daSSadaf Ebrahimi     vext(cond, dt, rd, rn, rm, operand);
6863*f5c631daSSadaf Ebrahimi   }
Vext(DataType dt,QRegister rd,QRegister rn,QRegister rm,const QOperand & operand)6864*f5c631daSSadaf Ebrahimi   void Vext(DataType dt,
6865*f5c631daSSadaf Ebrahimi             QRegister rd,
6866*f5c631daSSadaf Ebrahimi             QRegister rn,
6867*f5c631daSSadaf Ebrahimi             QRegister rm,
6868*f5c631daSSadaf Ebrahimi             const QOperand& operand) {
6869*f5c631daSSadaf Ebrahimi     Vext(al, dt, rd, rn, rm, operand);
6870*f5c631daSSadaf Ebrahimi   }
6871*f5c631daSSadaf Ebrahimi 
Vfma(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)6872*f5c631daSSadaf Ebrahimi   void Vfma(
6873*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
6874*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6875*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
6876*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6877*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6878*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6879*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6880*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6881*f5c631daSSadaf Ebrahimi     vfma(cond, dt, rd, rn, rm);
6882*f5c631daSSadaf Ebrahimi   }
Vfma(DataType dt,DRegister rd,DRegister rn,DRegister rm)6883*f5c631daSSadaf Ebrahimi   void Vfma(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
6884*f5c631daSSadaf Ebrahimi     Vfma(al, dt, rd, rn, rm);
6885*f5c631daSSadaf Ebrahimi   }
6886*f5c631daSSadaf Ebrahimi 
Vfma(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)6887*f5c631daSSadaf Ebrahimi   void Vfma(
6888*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
6889*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6890*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
6891*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6892*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6893*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6894*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6895*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6896*f5c631daSSadaf Ebrahimi     vfma(cond, dt, rd, rn, rm);
6897*f5c631daSSadaf Ebrahimi   }
Vfma(DataType dt,QRegister rd,QRegister rn,QRegister rm)6898*f5c631daSSadaf Ebrahimi   void Vfma(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
6899*f5c631daSSadaf Ebrahimi     Vfma(al, dt, rd, rn, rm);
6900*f5c631daSSadaf Ebrahimi   }
6901*f5c631daSSadaf Ebrahimi 
Vfma(Condition cond,DataType dt,SRegister rd,SRegister rn,SRegister rm)6902*f5c631daSSadaf Ebrahimi   void Vfma(
6903*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) {
6904*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6905*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
6906*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6907*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6908*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6909*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6910*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6911*f5c631daSSadaf Ebrahimi     vfma(cond, dt, rd, rn, rm);
6912*f5c631daSSadaf Ebrahimi   }
Vfma(DataType dt,SRegister rd,SRegister rn,SRegister rm)6913*f5c631daSSadaf Ebrahimi   void Vfma(DataType dt, SRegister rd, SRegister rn, SRegister rm) {
6914*f5c631daSSadaf Ebrahimi     Vfma(al, dt, rd, rn, rm);
6915*f5c631daSSadaf Ebrahimi   }
6916*f5c631daSSadaf Ebrahimi 
Vfms(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)6917*f5c631daSSadaf Ebrahimi   void Vfms(
6918*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
6919*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6920*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
6921*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6922*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6923*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6924*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6925*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6926*f5c631daSSadaf Ebrahimi     vfms(cond, dt, rd, rn, rm);
6927*f5c631daSSadaf Ebrahimi   }
Vfms(DataType dt,DRegister rd,DRegister rn,DRegister rm)6928*f5c631daSSadaf Ebrahimi   void Vfms(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
6929*f5c631daSSadaf Ebrahimi     Vfms(al, dt, rd, rn, rm);
6930*f5c631daSSadaf Ebrahimi   }
6931*f5c631daSSadaf Ebrahimi 
Vfms(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)6932*f5c631daSSadaf Ebrahimi   void Vfms(
6933*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
6934*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6935*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
6936*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6937*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6938*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6939*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6940*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6941*f5c631daSSadaf Ebrahimi     vfms(cond, dt, rd, rn, rm);
6942*f5c631daSSadaf Ebrahimi   }
Vfms(DataType dt,QRegister rd,QRegister rn,QRegister rm)6943*f5c631daSSadaf Ebrahimi   void Vfms(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
6944*f5c631daSSadaf Ebrahimi     Vfms(al, dt, rd, rn, rm);
6945*f5c631daSSadaf Ebrahimi   }
6946*f5c631daSSadaf Ebrahimi 
Vfms(Condition cond,DataType dt,SRegister rd,SRegister rn,SRegister rm)6947*f5c631daSSadaf Ebrahimi   void Vfms(
6948*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) {
6949*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6950*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
6951*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6952*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6953*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6954*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6955*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6956*f5c631daSSadaf Ebrahimi     vfms(cond, dt, rd, rn, rm);
6957*f5c631daSSadaf Ebrahimi   }
Vfms(DataType dt,SRegister rd,SRegister rn,SRegister rm)6958*f5c631daSSadaf Ebrahimi   void Vfms(DataType dt, SRegister rd, SRegister rn, SRegister rm) {
6959*f5c631daSSadaf Ebrahimi     Vfms(al, dt, rd, rn, rm);
6960*f5c631daSSadaf Ebrahimi   }
6961*f5c631daSSadaf Ebrahimi 
Vfnma(Condition cond,DataType dt,SRegister rd,SRegister rn,SRegister rm)6962*f5c631daSSadaf Ebrahimi   void Vfnma(
6963*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) {
6964*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6965*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
6966*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6967*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6968*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6969*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6970*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6971*f5c631daSSadaf Ebrahimi     vfnma(cond, dt, rd, rn, rm);
6972*f5c631daSSadaf Ebrahimi   }
Vfnma(DataType dt,SRegister rd,SRegister rn,SRegister rm)6973*f5c631daSSadaf Ebrahimi   void Vfnma(DataType dt, SRegister rd, SRegister rn, SRegister rm) {
6974*f5c631daSSadaf Ebrahimi     Vfnma(al, dt, rd, rn, rm);
6975*f5c631daSSadaf Ebrahimi   }
6976*f5c631daSSadaf Ebrahimi 
Vfnma(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)6977*f5c631daSSadaf Ebrahimi   void Vfnma(
6978*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
6979*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6980*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
6981*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6982*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6983*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6984*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
6985*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
6986*f5c631daSSadaf Ebrahimi     vfnma(cond, dt, rd, rn, rm);
6987*f5c631daSSadaf Ebrahimi   }
Vfnma(DataType dt,DRegister rd,DRegister rn,DRegister rm)6988*f5c631daSSadaf Ebrahimi   void Vfnma(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
6989*f5c631daSSadaf Ebrahimi     Vfnma(al, dt, rd, rn, rm);
6990*f5c631daSSadaf Ebrahimi   }
6991*f5c631daSSadaf Ebrahimi 
Vfnms(Condition cond,DataType dt,SRegister rd,SRegister rn,SRegister rm)6992*f5c631daSSadaf Ebrahimi   void Vfnms(
6993*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) {
6994*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
6995*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
6996*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
6997*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
6998*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
6999*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7000*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7001*f5c631daSSadaf Ebrahimi     vfnms(cond, dt, rd, rn, rm);
7002*f5c631daSSadaf Ebrahimi   }
Vfnms(DataType dt,SRegister rd,SRegister rn,SRegister rm)7003*f5c631daSSadaf Ebrahimi   void Vfnms(DataType dt, SRegister rd, SRegister rn, SRegister rm) {
7004*f5c631daSSadaf Ebrahimi     Vfnms(al, dt, rd, rn, rm);
7005*f5c631daSSadaf Ebrahimi   }
7006*f5c631daSSadaf Ebrahimi 
Vfnms(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)7007*f5c631daSSadaf Ebrahimi   void Vfnms(
7008*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
7009*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7010*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7011*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7012*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7013*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7014*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7015*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7016*f5c631daSSadaf Ebrahimi     vfnms(cond, dt, rd, rn, rm);
7017*f5c631daSSadaf Ebrahimi   }
Vfnms(DataType dt,DRegister rd,DRegister rn,DRegister rm)7018*f5c631daSSadaf Ebrahimi   void Vfnms(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
7019*f5c631daSSadaf Ebrahimi     Vfnms(al, dt, rd, rn, rm);
7020*f5c631daSSadaf Ebrahimi   }
7021*f5c631daSSadaf Ebrahimi 
Vhadd(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)7022*f5c631daSSadaf Ebrahimi   void Vhadd(
7023*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
7024*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7025*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7026*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7027*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7028*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7029*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7030*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7031*f5c631daSSadaf Ebrahimi     vhadd(cond, dt, rd, rn, rm);
7032*f5c631daSSadaf Ebrahimi   }
Vhadd(DataType dt,DRegister rd,DRegister rn,DRegister rm)7033*f5c631daSSadaf Ebrahimi   void Vhadd(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
7034*f5c631daSSadaf Ebrahimi     Vhadd(al, dt, rd, rn, rm);
7035*f5c631daSSadaf Ebrahimi   }
7036*f5c631daSSadaf Ebrahimi 
Vhadd(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)7037*f5c631daSSadaf Ebrahimi   void Vhadd(
7038*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
7039*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7040*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7041*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7042*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7043*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7044*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7045*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7046*f5c631daSSadaf Ebrahimi     vhadd(cond, dt, rd, rn, rm);
7047*f5c631daSSadaf Ebrahimi   }
Vhadd(DataType dt,QRegister rd,QRegister rn,QRegister rm)7048*f5c631daSSadaf Ebrahimi   void Vhadd(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
7049*f5c631daSSadaf Ebrahimi     Vhadd(al, dt, rd, rn, rm);
7050*f5c631daSSadaf Ebrahimi   }
7051*f5c631daSSadaf Ebrahimi 
Vhsub(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)7052*f5c631daSSadaf Ebrahimi   void Vhsub(
7053*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
7054*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7055*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7056*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7057*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7058*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7059*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7060*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7061*f5c631daSSadaf Ebrahimi     vhsub(cond, dt, rd, rn, rm);
7062*f5c631daSSadaf Ebrahimi   }
Vhsub(DataType dt,DRegister rd,DRegister rn,DRegister rm)7063*f5c631daSSadaf Ebrahimi   void Vhsub(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
7064*f5c631daSSadaf Ebrahimi     Vhsub(al, dt, rd, rn, rm);
7065*f5c631daSSadaf Ebrahimi   }
7066*f5c631daSSadaf Ebrahimi 
Vhsub(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)7067*f5c631daSSadaf Ebrahimi   void Vhsub(
7068*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
7069*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7070*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7071*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7072*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7073*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7074*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7075*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7076*f5c631daSSadaf Ebrahimi     vhsub(cond, dt, rd, rn, rm);
7077*f5c631daSSadaf Ebrahimi   }
Vhsub(DataType dt,QRegister rd,QRegister rn,QRegister rm)7078*f5c631daSSadaf Ebrahimi   void Vhsub(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
7079*f5c631daSSadaf Ebrahimi     Vhsub(al, dt, rd, rn, rm);
7080*f5c631daSSadaf Ebrahimi   }
7081*f5c631daSSadaf Ebrahimi 
Vld1(Condition cond,DataType dt,const NeonRegisterList & nreglist,const AlignedMemOperand & operand)7082*f5c631daSSadaf Ebrahimi   void Vld1(Condition cond,
7083*f5c631daSSadaf Ebrahimi             DataType dt,
7084*f5c631daSSadaf Ebrahimi             const NeonRegisterList& nreglist,
7085*f5c631daSSadaf Ebrahimi             const AlignedMemOperand& operand) {
7086*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(nreglist));
7087*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
7088*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7089*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7090*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7091*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7092*f5c631daSSadaf Ebrahimi     vld1(cond, dt, nreglist, operand);
7093*f5c631daSSadaf Ebrahimi   }
Vld1(DataType dt,const NeonRegisterList & nreglist,const AlignedMemOperand & operand)7094*f5c631daSSadaf Ebrahimi   void Vld1(DataType dt,
7095*f5c631daSSadaf Ebrahimi             const NeonRegisterList& nreglist,
7096*f5c631daSSadaf Ebrahimi             const AlignedMemOperand& operand) {
7097*f5c631daSSadaf Ebrahimi     Vld1(al, dt, nreglist, operand);
7098*f5c631daSSadaf Ebrahimi   }
7099*f5c631daSSadaf Ebrahimi 
Vld2(Condition cond,DataType dt,const NeonRegisterList & nreglist,const AlignedMemOperand & operand)7100*f5c631daSSadaf Ebrahimi   void Vld2(Condition cond,
7101*f5c631daSSadaf Ebrahimi             DataType dt,
7102*f5c631daSSadaf Ebrahimi             const NeonRegisterList& nreglist,
7103*f5c631daSSadaf Ebrahimi             const AlignedMemOperand& operand) {
7104*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(nreglist));
7105*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
7106*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7107*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7108*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7109*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7110*f5c631daSSadaf Ebrahimi     vld2(cond, dt, nreglist, operand);
7111*f5c631daSSadaf Ebrahimi   }
Vld2(DataType dt,const NeonRegisterList & nreglist,const AlignedMemOperand & operand)7112*f5c631daSSadaf Ebrahimi   void Vld2(DataType dt,
7113*f5c631daSSadaf Ebrahimi             const NeonRegisterList& nreglist,
7114*f5c631daSSadaf Ebrahimi             const AlignedMemOperand& operand) {
7115*f5c631daSSadaf Ebrahimi     Vld2(al, dt, nreglist, operand);
7116*f5c631daSSadaf Ebrahimi   }
7117*f5c631daSSadaf Ebrahimi 
Vld3(Condition cond,DataType dt,const NeonRegisterList & nreglist,const AlignedMemOperand & operand)7118*f5c631daSSadaf Ebrahimi   void Vld3(Condition cond,
7119*f5c631daSSadaf Ebrahimi             DataType dt,
7120*f5c631daSSadaf Ebrahimi             const NeonRegisterList& nreglist,
7121*f5c631daSSadaf Ebrahimi             const AlignedMemOperand& operand) {
7122*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(nreglist));
7123*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
7124*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7125*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7126*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7127*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7128*f5c631daSSadaf Ebrahimi     vld3(cond, dt, nreglist, operand);
7129*f5c631daSSadaf Ebrahimi   }
Vld3(DataType dt,const NeonRegisterList & nreglist,const AlignedMemOperand & operand)7130*f5c631daSSadaf Ebrahimi   void Vld3(DataType dt,
7131*f5c631daSSadaf Ebrahimi             const NeonRegisterList& nreglist,
7132*f5c631daSSadaf Ebrahimi             const AlignedMemOperand& operand) {
7133*f5c631daSSadaf Ebrahimi     Vld3(al, dt, nreglist, operand);
7134*f5c631daSSadaf Ebrahimi   }
7135*f5c631daSSadaf Ebrahimi 
Vld3(Condition cond,DataType dt,const NeonRegisterList & nreglist,const MemOperand & operand)7136*f5c631daSSadaf Ebrahimi   void Vld3(Condition cond,
7137*f5c631daSSadaf Ebrahimi             DataType dt,
7138*f5c631daSSadaf Ebrahimi             const NeonRegisterList& nreglist,
7139*f5c631daSSadaf Ebrahimi             const MemOperand& operand) {
7140*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(nreglist));
7141*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
7142*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7143*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7144*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7145*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7146*f5c631daSSadaf Ebrahimi     vld3(cond, dt, nreglist, operand);
7147*f5c631daSSadaf Ebrahimi   }
Vld3(DataType dt,const NeonRegisterList & nreglist,const MemOperand & operand)7148*f5c631daSSadaf Ebrahimi   void Vld3(DataType dt,
7149*f5c631daSSadaf Ebrahimi             const NeonRegisterList& nreglist,
7150*f5c631daSSadaf Ebrahimi             const MemOperand& operand) {
7151*f5c631daSSadaf Ebrahimi     Vld3(al, dt, nreglist, operand);
7152*f5c631daSSadaf Ebrahimi   }
7153*f5c631daSSadaf Ebrahimi 
Vld4(Condition cond,DataType dt,const NeonRegisterList & nreglist,const AlignedMemOperand & operand)7154*f5c631daSSadaf Ebrahimi   void Vld4(Condition cond,
7155*f5c631daSSadaf Ebrahimi             DataType dt,
7156*f5c631daSSadaf Ebrahimi             const NeonRegisterList& nreglist,
7157*f5c631daSSadaf Ebrahimi             const AlignedMemOperand& operand) {
7158*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(nreglist));
7159*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
7160*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7161*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7162*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7163*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7164*f5c631daSSadaf Ebrahimi     vld4(cond, dt, nreglist, operand);
7165*f5c631daSSadaf Ebrahimi   }
Vld4(DataType dt,const NeonRegisterList & nreglist,const AlignedMemOperand & operand)7166*f5c631daSSadaf Ebrahimi   void Vld4(DataType dt,
7167*f5c631daSSadaf Ebrahimi             const NeonRegisterList& nreglist,
7168*f5c631daSSadaf Ebrahimi             const AlignedMemOperand& operand) {
7169*f5c631daSSadaf Ebrahimi     Vld4(al, dt, nreglist, operand);
7170*f5c631daSSadaf Ebrahimi   }
7171*f5c631daSSadaf Ebrahimi 
Vldm(Condition cond,DataType dt,Register rn,WriteBack write_back,DRegisterList dreglist)7172*f5c631daSSadaf Ebrahimi   void Vldm(Condition cond,
7173*f5c631daSSadaf Ebrahimi             DataType dt,
7174*f5c631daSSadaf Ebrahimi             Register rn,
7175*f5c631daSSadaf Ebrahimi             WriteBack write_back,
7176*f5c631daSSadaf Ebrahimi             DRegisterList dreglist) {
7177*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7178*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(dreglist));
7179*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7180*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7181*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7182*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7183*f5c631daSSadaf Ebrahimi     vldm(cond, dt, rn, write_back, dreglist);
7184*f5c631daSSadaf Ebrahimi   }
Vldm(DataType dt,Register rn,WriteBack write_back,DRegisterList dreglist)7185*f5c631daSSadaf Ebrahimi   void Vldm(DataType dt,
7186*f5c631daSSadaf Ebrahimi             Register rn,
7187*f5c631daSSadaf Ebrahimi             WriteBack write_back,
7188*f5c631daSSadaf Ebrahimi             DRegisterList dreglist) {
7189*f5c631daSSadaf Ebrahimi     Vldm(al, dt, rn, write_back, dreglist);
7190*f5c631daSSadaf Ebrahimi   }
Vldm(Condition cond,Register rn,WriteBack write_back,DRegisterList dreglist)7191*f5c631daSSadaf Ebrahimi   void Vldm(Condition cond,
7192*f5c631daSSadaf Ebrahimi             Register rn,
7193*f5c631daSSadaf Ebrahimi             WriteBack write_back,
7194*f5c631daSSadaf Ebrahimi             DRegisterList dreglist) {
7195*f5c631daSSadaf Ebrahimi     Vldm(cond, kDataTypeValueNone, rn, write_back, dreglist);
7196*f5c631daSSadaf Ebrahimi   }
Vldm(Register rn,WriteBack write_back,DRegisterList dreglist)7197*f5c631daSSadaf Ebrahimi   void Vldm(Register rn, WriteBack write_back, DRegisterList dreglist) {
7198*f5c631daSSadaf Ebrahimi     Vldm(al, kDataTypeValueNone, rn, write_back, dreglist);
7199*f5c631daSSadaf Ebrahimi   }
7200*f5c631daSSadaf Ebrahimi 
Vldm(Condition cond,DataType dt,Register rn,WriteBack write_back,SRegisterList sreglist)7201*f5c631daSSadaf Ebrahimi   void Vldm(Condition cond,
7202*f5c631daSSadaf Ebrahimi             DataType dt,
7203*f5c631daSSadaf Ebrahimi             Register rn,
7204*f5c631daSSadaf Ebrahimi             WriteBack write_back,
7205*f5c631daSSadaf Ebrahimi             SRegisterList sreglist) {
7206*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7207*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(sreglist));
7208*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7209*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7210*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7211*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7212*f5c631daSSadaf Ebrahimi     vldm(cond, dt, rn, write_back, sreglist);
7213*f5c631daSSadaf Ebrahimi   }
Vldm(DataType dt,Register rn,WriteBack write_back,SRegisterList sreglist)7214*f5c631daSSadaf Ebrahimi   void Vldm(DataType dt,
7215*f5c631daSSadaf Ebrahimi             Register rn,
7216*f5c631daSSadaf Ebrahimi             WriteBack write_back,
7217*f5c631daSSadaf Ebrahimi             SRegisterList sreglist) {
7218*f5c631daSSadaf Ebrahimi     Vldm(al, dt, rn, write_back, sreglist);
7219*f5c631daSSadaf Ebrahimi   }
Vldm(Condition cond,Register rn,WriteBack write_back,SRegisterList sreglist)7220*f5c631daSSadaf Ebrahimi   void Vldm(Condition cond,
7221*f5c631daSSadaf Ebrahimi             Register rn,
7222*f5c631daSSadaf Ebrahimi             WriteBack write_back,
7223*f5c631daSSadaf Ebrahimi             SRegisterList sreglist) {
7224*f5c631daSSadaf Ebrahimi     Vldm(cond, kDataTypeValueNone, rn, write_back, sreglist);
7225*f5c631daSSadaf Ebrahimi   }
Vldm(Register rn,WriteBack write_back,SRegisterList sreglist)7226*f5c631daSSadaf Ebrahimi   void Vldm(Register rn, WriteBack write_back, SRegisterList sreglist) {
7227*f5c631daSSadaf Ebrahimi     Vldm(al, kDataTypeValueNone, rn, write_back, sreglist);
7228*f5c631daSSadaf Ebrahimi   }
7229*f5c631daSSadaf Ebrahimi 
Vldmdb(Condition cond,DataType dt,Register rn,WriteBack write_back,DRegisterList dreglist)7230*f5c631daSSadaf Ebrahimi   void Vldmdb(Condition cond,
7231*f5c631daSSadaf Ebrahimi               DataType dt,
7232*f5c631daSSadaf Ebrahimi               Register rn,
7233*f5c631daSSadaf Ebrahimi               WriteBack write_back,
7234*f5c631daSSadaf Ebrahimi               DRegisterList dreglist) {
7235*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7236*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(dreglist));
7237*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7238*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7239*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7240*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7241*f5c631daSSadaf Ebrahimi     vldmdb(cond, dt, rn, write_back, dreglist);
7242*f5c631daSSadaf Ebrahimi   }
Vldmdb(DataType dt,Register rn,WriteBack write_back,DRegisterList dreglist)7243*f5c631daSSadaf Ebrahimi   void Vldmdb(DataType dt,
7244*f5c631daSSadaf Ebrahimi               Register rn,
7245*f5c631daSSadaf Ebrahimi               WriteBack write_back,
7246*f5c631daSSadaf Ebrahimi               DRegisterList dreglist) {
7247*f5c631daSSadaf Ebrahimi     Vldmdb(al, dt, rn, write_back, dreglist);
7248*f5c631daSSadaf Ebrahimi   }
Vldmdb(Condition cond,Register rn,WriteBack write_back,DRegisterList dreglist)7249*f5c631daSSadaf Ebrahimi   void Vldmdb(Condition cond,
7250*f5c631daSSadaf Ebrahimi               Register rn,
7251*f5c631daSSadaf Ebrahimi               WriteBack write_back,
7252*f5c631daSSadaf Ebrahimi               DRegisterList dreglist) {
7253*f5c631daSSadaf Ebrahimi     Vldmdb(cond, kDataTypeValueNone, rn, write_back, dreglist);
7254*f5c631daSSadaf Ebrahimi   }
Vldmdb(Register rn,WriteBack write_back,DRegisterList dreglist)7255*f5c631daSSadaf Ebrahimi   void Vldmdb(Register rn, WriteBack write_back, DRegisterList dreglist) {
7256*f5c631daSSadaf Ebrahimi     Vldmdb(al, kDataTypeValueNone, rn, write_back, dreglist);
7257*f5c631daSSadaf Ebrahimi   }
7258*f5c631daSSadaf Ebrahimi 
Vldmdb(Condition cond,DataType dt,Register rn,WriteBack write_back,SRegisterList sreglist)7259*f5c631daSSadaf Ebrahimi   void Vldmdb(Condition cond,
7260*f5c631daSSadaf Ebrahimi               DataType dt,
7261*f5c631daSSadaf Ebrahimi               Register rn,
7262*f5c631daSSadaf Ebrahimi               WriteBack write_back,
7263*f5c631daSSadaf Ebrahimi               SRegisterList sreglist) {
7264*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7265*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(sreglist));
7266*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7267*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7268*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7269*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7270*f5c631daSSadaf Ebrahimi     vldmdb(cond, dt, rn, write_back, sreglist);
7271*f5c631daSSadaf Ebrahimi   }
Vldmdb(DataType dt,Register rn,WriteBack write_back,SRegisterList sreglist)7272*f5c631daSSadaf Ebrahimi   void Vldmdb(DataType dt,
7273*f5c631daSSadaf Ebrahimi               Register rn,
7274*f5c631daSSadaf Ebrahimi               WriteBack write_back,
7275*f5c631daSSadaf Ebrahimi               SRegisterList sreglist) {
7276*f5c631daSSadaf Ebrahimi     Vldmdb(al, dt, rn, write_back, sreglist);
7277*f5c631daSSadaf Ebrahimi   }
Vldmdb(Condition cond,Register rn,WriteBack write_back,SRegisterList sreglist)7278*f5c631daSSadaf Ebrahimi   void Vldmdb(Condition cond,
7279*f5c631daSSadaf Ebrahimi               Register rn,
7280*f5c631daSSadaf Ebrahimi               WriteBack write_back,
7281*f5c631daSSadaf Ebrahimi               SRegisterList sreglist) {
7282*f5c631daSSadaf Ebrahimi     Vldmdb(cond, kDataTypeValueNone, rn, write_back, sreglist);
7283*f5c631daSSadaf Ebrahimi   }
Vldmdb(Register rn,WriteBack write_back,SRegisterList sreglist)7284*f5c631daSSadaf Ebrahimi   void Vldmdb(Register rn, WriteBack write_back, SRegisterList sreglist) {
7285*f5c631daSSadaf Ebrahimi     Vldmdb(al, kDataTypeValueNone, rn, write_back, sreglist);
7286*f5c631daSSadaf Ebrahimi   }
7287*f5c631daSSadaf Ebrahimi 
Vldmia(Condition cond,DataType dt,Register rn,WriteBack write_back,DRegisterList dreglist)7288*f5c631daSSadaf Ebrahimi   void Vldmia(Condition cond,
7289*f5c631daSSadaf Ebrahimi               DataType dt,
7290*f5c631daSSadaf Ebrahimi               Register rn,
7291*f5c631daSSadaf Ebrahimi               WriteBack write_back,
7292*f5c631daSSadaf Ebrahimi               DRegisterList dreglist) {
7293*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7294*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(dreglist));
7295*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7296*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7297*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7298*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7299*f5c631daSSadaf Ebrahimi     vldmia(cond, dt, rn, write_back, dreglist);
7300*f5c631daSSadaf Ebrahimi   }
Vldmia(DataType dt,Register rn,WriteBack write_back,DRegisterList dreglist)7301*f5c631daSSadaf Ebrahimi   void Vldmia(DataType dt,
7302*f5c631daSSadaf Ebrahimi               Register rn,
7303*f5c631daSSadaf Ebrahimi               WriteBack write_back,
7304*f5c631daSSadaf Ebrahimi               DRegisterList dreglist) {
7305*f5c631daSSadaf Ebrahimi     Vldmia(al, dt, rn, write_back, dreglist);
7306*f5c631daSSadaf Ebrahimi   }
Vldmia(Condition cond,Register rn,WriteBack write_back,DRegisterList dreglist)7307*f5c631daSSadaf Ebrahimi   void Vldmia(Condition cond,
7308*f5c631daSSadaf Ebrahimi               Register rn,
7309*f5c631daSSadaf Ebrahimi               WriteBack write_back,
7310*f5c631daSSadaf Ebrahimi               DRegisterList dreglist) {
7311*f5c631daSSadaf Ebrahimi     Vldmia(cond, kDataTypeValueNone, rn, write_back, dreglist);
7312*f5c631daSSadaf Ebrahimi   }
Vldmia(Register rn,WriteBack write_back,DRegisterList dreglist)7313*f5c631daSSadaf Ebrahimi   void Vldmia(Register rn, WriteBack write_back, DRegisterList dreglist) {
7314*f5c631daSSadaf Ebrahimi     Vldmia(al, kDataTypeValueNone, rn, write_back, dreglist);
7315*f5c631daSSadaf Ebrahimi   }
7316*f5c631daSSadaf Ebrahimi 
Vldmia(Condition cond,DataType dt,Register rn,WriteBack write_back,SRegisterList sreglist)7317*f5c631daSSadaf Ebrahimi   void Vldmia(Condition cond,
7318*f5c631daSSadaf Ebrahimi               DataType dt,
7319*f5c631daSSadaf Ebrahimi               Register rn,
7320*f5c631daSSadaf Ebrahimi               WriteBack write_back,
7321*f5c631daSSadaf Ebrahimi               SRegisterList sreglist) {
7322*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7323*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(sreglist));
7324*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7325*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7326*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7327*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7328*f5c631daSSadaf Ebrahimi     vldmia(cond, dt, rn, write_back, sreglist);
7329*f5c631daSSadaf Ebrahimi   }
Vldmia(DataType dt,Register rn,WriteBack write_back,SRegisterList sreglist)7330*f5c631daSSadaf Ebrahimi   void Vldmia(DataType dt,
7331*f5c631daSSadaf Ebrahimi               Register rn,
7332*f5c631daSSadaf Ebrahimi               WriteBack write_back,
7333*f5c631daSSadaf Ebrahimi               SRegisterList sreglist) {
7334*f5c631daSSadaf Ebrahimi     Vldmia(al, dt, rn, write_back, sreglist);
7335*f5c631daSSadaf Ebrahimi   }
Vldmia(Condition cond,Register rn,WriteBack write_back,SRegisterList sreglist)7336*f5c631daSSadaf Ebrahimi   void Vldmia(Condition cond,
7337*f5c631daSSadaf Ebrahimi               Register rn,
7338*f5c631daSSadaf Ebrahimi               WriteBack write_back,
7339*f5c631daSSadaf Ebrahimi               SRegisterList sreglist) {
7340*f5c631daSSadaf Ebrahimi     Vldmia(cond, kDataTypeValueNone, rn, write_back, sreglist);
7341*f5c631daSSadaf Ebrahimi   }
Vldmia(Register rn,WriteBack write_back,SRegisterList sreglist)7342*f5c631daSSadaf Ebrahimi   void Vldmia(Register rn, WriteBack write_back, SRegisterList sreglist) {
7343*f5c631daSSadaf Ebrahimi     Vldmia(al, kDataTypeValueNone, rn, write_back, sreglist);
7344*f5c631daSSadaf Ebrahimi   }
7345*f5c631daSSadaf Ebrahimi 
7346*f5c631daSSadaf Ebrahimi 
Vldr(Condition cond,DataType dt,DRegister rd,const MemOperand & operand)7347*f5c631daSSadaf Ebrahimi   void Vldr(Condition cond,
7348*f5c631daSSadaf Ebrahimi             DataType dt,
7349*f5c631daSSadaf Ebrahimi             DRegister rd,
7350*f5c631daSSadaf Ebrahimi             const MemOperand& operand) {
7351*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7352*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
7353*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7354*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7355*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7356*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7357*f5c631daSSadaf Ebrahimi     vldr(cond, dt, rd, operand);
7358*f5c631daSSadaf Ebrahimi   }
Vldr(DataType dt,DRegister rd,const MemOperand & operand)7359*f5c631daSSadaf Ebrahimi   void Vldr(DataType dt, DRegister rd, const MemOperand& operand) {
7360*f5c631daSSadaf Ebrahimi     Vldr(al, dt, rd, operand);
7361*f5c631daSSadaf Ebrahimi   }
Vldr(Condition cond,DRegister rd,const MemOperand & operand)7362*f5c631daSSadaf Ebrahimi   void Vldr(Condition cond, DRegister rd, const MemOperand& operand) {
7363*f5c631daSSadaf Ebrahimi     Vldr(cond, Untyped64, rd, operand);
7364*f5c631daSSadaf Ebrahimi   }
Vldr(DRegister rd,const MemOperand & operand)7365*f5c631daSSadaf Ebrahimi   void Vldr(DRegister rd, const MemOperand& operand) {
7366*f5c631daSSadaf Ebrahimi     Vldr(al, Untyped64, rd, operand);
7367*f5c631daSSadaf Ebrahimi   }
7368*f5c631daSSadaf Ebrahimi 
7369*f5c631daSSadaf Ebrahimi 
Vldr(Condition cond,DataType dt,SRegister rd,const MemOperand & operand)7370*f5c631daSSadaf Ebrahimi   void Vldr(Condition cond,
7371*f5c631daSSadaf Ebrahimi             DataType dt,
7372*f5c631daSSadaf Ebrahimi             SRegister rd,
7373*f5c631daSSadaf Ebrahimi             const MemOperand& operand) {
7374*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7375*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
7376*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7377*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7378*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7379*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7380*f5c631daSSadaf Ebrahimi     vldr(cond, dt, rd, operand);
7381*f5c631daSSadaf Ebrahimi   }
Vldr(DataType dt,SRegister rd,const MemOperand & operand)7382*f5c631daSSadaf Ebrahimi   void Vldr(DataType dt, SRegister rd, const MemOperand& operand) {
7383*f5c631daSSadaf Ebrahimi     Vldr(al, dt, rd, operand);
7384*f5c631daSSadaf Ebrahimi   }
Vldr(Condition cond,SRegister rd,const MemOperand & operand)7385*f5c631daSSadaf Ebrahimi   void Vldr(Condition cond, SRegister rd, const MemOperand& operand) {
7386*f5c631daSSadaf Ebrahimi     Vldr(cond, Untyped32, rd, operand);
7387*f5c631daSSadaf Ebrahimi   }
Vldr(SRegister rd,const MemOperand & operand)7388*f5c631daSSadaf Ebrahimi   void Vldr(SRegister rd, const MemOperand& operand) {
7389*f5c631daSSadaf Ebrahimi     Vldr(al, Untyped32, rd, operand);
7390*f5c631daSSadaf Ebrahimi   }
7391*f5c631daSSadaf Ebrahimi 
Vmax(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)7392*f5c631daSSadaf Ebrahimi   void Vmax(
7393*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
7394*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7395*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7396*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7397*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7398*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7399*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7400*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7401*f5c631daSSadaf Ebrahimi     vmax(cond, dt, rd, rn, rm);
7402*f5c631daSSadaf Ebrahimi   }
Vmax(DataType dt,DRegister rd,DRegister rn,DRegister rm)7403*f5c631daSSadaf Ebrahimi   void Vmax(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
7404*f5c631daSSadaf Ebrahimi     Vmax(al, dt, rd, rn, rm);
7405*f5c631daSSadaf Ebrahimi   }
7406*f5c631daSSadaf Ebrahimi 
Vmax(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)7407*f5c631daSSadaf Ebrahimi   void Vmax(
7408*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
7409*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7410*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7411*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7412*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7413*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7414*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7415*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7416*f5c631daSSadaf Ebrahimi     vmax(cond, dt, rd, rn, rm);
7417*f5c631daSSadaf Ebrahimi   }
Vmax(DataType dt,QRegister rd,QRegister rn,QRegister rm)7418*f5c631daSSadaf Ebrahimi   void Vmax(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
7419*f5c631daSSadaf Ebrahimi     Vmax(al, dt, rd, rn, rm);
7420*f5c631daSSadaf Ebrahimi   }
7421*f5c631daSSadaf Ebrahimi 
Vmaxnm(DataType dt,DRegister rd,DRegister rn,DRegister rm)7422*f5c631daSSadaf Ebrahimi   void Vmaxnm(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
7423*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7424*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7425*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7426*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7427*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7428*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7429*f5c631daSSadaf Ebrahimi     vmaxnm(dt, rd, rn, rm);
7430*f5c631daSSadaf Ebrahimi   }
7431*f5c631daSSadaf Ebrahimi 
Vmaxnm(DataType dt,QRegister rd,QRegister rn,QRegister rm)7432*f5c631daSSadaf Ebrahimi   void Vmaxnm(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
7433*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7434*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7435*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7436*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7437*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7438*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7439*f5c631daSSadaf Ebrahimi     vmaxnm(dt, rd, rn, rm);
7440*f5c631daSSadaf Ebrahimi   }
7441*f5c631daSSadaf Ebrahimi 
Vmaxnm(DataType dt,SRegister rd,SRegister rn,SRegister rm)7442*f5c631daSSadaf Ebrahimi   void Vmaxnm(DataType dt, SRegister rd, SRegister rn, SRegister rm) {
7443*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7444*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7445*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7446*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7447*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7448*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7449*f5c631daSSadaf Ebrahimi     vmaxnm(dt, rd, rn, rm);
7450*f5c631daSSadaf Ebrahimi   }
7451*f5c631daSSadaf Ebrahimi 
Vmin(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)7452*f5c631daSSadaf Ebrahimi   void Vmin(
7453*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
7454*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7455*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7456*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7457*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7458*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7459*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7460*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7461*f5c631daSSadaf Ebrahimi     vmin(cond, dt, rd, rn, rm);
7462*f5c631daSSadaf Ebrahimi   }
Vmin(DataType dt,DRegister rd,DRegister rn,DRegister rm)7463*f5c631daSSadaf Ebrahimi   void Vmin(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
7464*f5c631daSSadaf Ebrahimi     Vmin(al, dt, rd, rn, rm);
7465*f5c631daSSadaf Ebrahimi   }
7466*f5c631daSSadaf Ebrahimi 
Vmin(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)7467*f5c631daSSadaf Ebrahimi   void Vmin(
7468*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
7469*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7470*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7471*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7472*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7473*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7474*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7475*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7476*f5c631daSSadaf Ebrahimi     vmin(cond, dt, rd, rn, rm);
7477*f5c631daSSadaf Ebrahimi   }
Vmin(DataType dt,QRegister rd,QRegister rn,QRegister rm)7478*f5c631daSSadaf Ebrahimi   void Vmin(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
7479*f5c631daSSadaf Ebrahimi     Vmin(al, dt, rd, rn, rm);
7480*f5c631daSSadaf Ebrahimi   }
7481*f5c631daSSadaf Ebrahimi 
Vminnm(DataType dt,DRegister rd,DRegister rn,DRegister rm)7482*f5c631daSSadaf Ebrahimi   void Vminnm(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
7483*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7484*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7485*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7486*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7487*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7488*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7489*f5c631daSSadaf Ebrahimi     vminnm(dt, rd, rn, rm);
7490*f5c631daSSadaf Ebrahimi   }
7491*f5c631daSSadaf Ebrahimi 
Vminnm(DataType dt,QRegister rd,QRegister rn,QRegister rm)7492*f5c631daSSadaf Ebrahimi   void Vminnm(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
7493*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7494*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7495*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7496*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7497*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7498*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7499*f5c631daSSadaf Ebrahimi     vminnm(dt, rd, rn, rm);
7500*f5c631daSSadaf Ebrahimi   }
7501*f5c631daSSadaf Ebrahimi 
Vminnm(DataType dt,SRegister rd,SRegister rn,SRegister rm)7502*f5c631daSSadaf Ebrahimi   void Vminnm(DataType dt, SRegister rd, SRegister rn, SRegister rm) {
7503*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7504*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7505*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7506*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7507*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7508*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7509*f5c631daSSadaf Ebrahimi     vminnm(dt, rd, rn, rm);
7510*f5c631daSSadaf Ebrahimi   }
7511*f5c631daSSadaf Ebrahimi 
Vmla(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegisterLane rm)7512*f5c631daSSadaf Ebrahimi   void Vmla(Condition cond,
7513*f5c631daSSadaf Ebrahimi             DataType dt,
7514*f5c631daSSadaf Ebrahimi             DRegister rd,
7515*f5c631daSSadaf Ebrahimi             DRegister rn,
7516*f5c631daSSadaf Ebrahimi             DRegisterLane rm) {
7517*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7518*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7519*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7520*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7521*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7522*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7523*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7524*f5c631daSSadaf Ebrahimi     vmla(cond, dt, rd, rn, rm);
7525*f5c631daSSadaf Ebrahimi   }
Vmla(DataType dt,DRegister rd,DRegister rn,DRegisterLane rm)7526*f5c631daSSadaf Ebrahimi   void Vmla(DataType dt, DRegister rd, DRegister rn, DRegisterLane rm) {
7527*f5c631daSSadaf Ebrahimi     Vmla(al, dt, rd, rn, rm);
7528*f5c631daSSadaf Ebrahimi   }
7529*f5c631daSSadaf Ebrahimi 
Vmla(Condition cond,DataType dt,QRegister rd,QRegister rn,DRegisterLane rm)7530*f5c631daSSadaf Ebrahimi   void Vmla(Condition cond,
7531*f5c631daSSadaf Ebrahimi             DataType dt,
7532*f5c631daSSadaf Ebrahimi             QRegister rd,
7533*f5c631daSSadaf Ebrahimi             QRegister rn,
7534*f5c631daSSadaf Ebrahimi             DRegisterLane rm) {
7535*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7536*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7537*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7538*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7539*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7540*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7541*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7542*f5c631daSSadaf Ebrahimi     vmla(cond, dt, rd, rn, rm);
7543*f5c631daSSadaf Ebrahimi   }
Vmla(DataType dt,QRegister rd,QRegister rn,DRegisterLane rm)7544*f5c631daSSadaf Ebrahimi   void Vmla(DataType dt, QRegister rd, QRegister rn, DRegisterLane rm) {
7545*f5c631daSSadaf Ebrahimi     Vmla(al, dt, rd, rn, rm);
7546*f5c631daSSadaf Ebrahimi   }
7547*f5c631daSSadaf Ebrahimi 
Vmla(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)7548*f5c631daSSadaf Ebrahimi   void Vmla(
7549*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
7550*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7551*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7552*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7553*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7554*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7555*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7556*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7557*f5c631daSSadaf Ebrahimi     vmla(cond, dt, rd, rn, rm);
7558*f5c631daSSadaf Ebrahimi   }
Vmla(DataType dt,DRegister rd,DRegister rn,DRegister rm)7559*f5c631daSSadaf Ebrahimi   void Vmla(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
7560*f5c631daSSadaf Ebrahimi     Vmla(al, dt, rd, rn, rm);
7561*f5c631daSSadaf Ebrahimi   }
7562*f5c631daSSadaf Ebrahimi 
Vmla(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)7563*f5c631daSSadaf Ebrahimi   void Vmla(
7564*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
7565*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7566*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7567*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7568*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7569*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7570*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7571*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7572*f5c631daSSadaf Ebrahimi     vmla(cond, dt, rd, rn, rm);
7573*f5c631daSSadaf Ebrahimi   }
Vmla(DataType dt,QRegister rd,QRegister rn,QRegister rm)7574*f5c631daSSadaf Ebrahimi   void Vmla(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
7575*f5c631daSSadaf Ebrahimi     Vmla(al, dt, rd, rn, rm);
7576*f5c631daSSadaf Ebrahimi   }
7577*f5c631daSSadaf Ebrahimi 
Vmla(Condition cond,DataType dt,SRegister rd,SRegister rn,SRegister rm)7578*f5c631daSSadaf Ebrahimi   void Vmla(
7579*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) {
7580*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7581*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7582*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7583*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7584*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7585*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7586*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7587*f5c631daSSadaf Ebrahimi     vmla(cond, dt, rd, rn, rm);
7588*f5c631daSSadaf Ebrahimi   }
Vmla(DataType dt,SRegister rd,SRegister rn,SRegister rm)7589*f5c631daSSadaf Ebrahimi   void Vmla(DataType dt, SRegister rd, SRegister rn, SRegister rm) {
7590*f5c631daSSadaf Ebrahimi     Vmla(al, dt, rd, rn, rm);
7591*f5c631daSSadaf Ebrahimi   }
7592*f5c631daSSadaf Ebrahimi 
Vmlal(Condition cond,DataType dt,QRegister rd,DRegister rn,DRegisterLane rm)7593*f5c631daSSadaf Ebrahimi   void Vmlal(Condition cond,
7594*f5c631daSSadaf Ebrahimi              DataType dt,
7595*f5c631daSSadaf Ebrahimi              QRegister rd,
7596*f5c631daSSadaf Ebrahimi              DRegister rn,
7597*f5c631daSSadaf Ebrahimi              DRegisterLane rm) {
7598*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7599*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7600*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7601*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7602*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7603*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7604*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7605*f5c631daSSadaf Ebrahimi     vmlal(cond, dt, rd, rn, rm);
7606*f5c631daSSadaf Ebrahimi   }
Vmlal(DataType dt,QRegister rd,DRegister rn,DRegisterLane rm)7607*f5c631daSSadaf Ebrahimi   void Vmlal(DataType dt, QRegister rd, DRegister rn, DRegisterLane rm) {
7608*f5c631daSSadaf Ebrahimi     Vmlal(al, dt, rd, rn, rm);
7609*f5c631daSSadaf Ebrahimi   }
7610*f5c631daSSadaf Ebrahimi 
Vmlal(Condition cond,DataType dt,QRegister rd,DRegister rn,DRegister rm)7611*f5c631daSSadaf Ebrahimi   void Vmlal(
7612*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm) {
7613*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7614*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7615*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7616*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7617*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7618*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7619*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7620*f5c631daSSadaf Ebrahimi     vmlal(cond, dt, rd, rn, rm);
7621*f5c631daSSadaf Ebrahimi   }
Vmlal(DataType dt,QRegister rd,DRegister rn,DRegister rm)7622*f5c631daSSadaf Ebrahimi   void Vmlal(DataType dt, QRegister rd, DRegister rn, DRegister rm) {
7623*f5c631daSSadaf Ebrahimi     Vmlal(al, dt, rd, rn, rm);
7624*f5c631daSSadaf Ebrahimi   }
7625*f5c631daSSadaf Ebrahimi 
Vmls(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegisterLane rm)7626*f5c631daSSadaf Ebrahimi   void Vmls(Condition cond,
7627*f5c631daSSadaf Ebrahimi             DataType dt,
7628*f5c631daSSadaf Ebrahimi             DRegister rd,
7629*f5c631daSSadaf Ebrahimi             DRegister rn,
7630*f5c631daSSadaf Ebrahimi             DRegisterLane rm) {
7631*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7632*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7633*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7634*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7635*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7636*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7637*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7638*f5c631daSSadaf Ebrahimi     vmls(cond, dt, rd, rn, rm);
7639*f5c631daSSadaf Ebrahimi   }
Vmls(DataType dt,DRegister rd,DRegister rn,DRegisterLane rm)7640*f5c631daSSadaf Ebrahimi   void Vmls(DataType dt, DRegister rd, DRegister rn, DRegisterLane rm) {
7641*f5c631daSSadaf Ebrahimi     Vmls(al, dt, rd, rn, rm);
7642*f5c631daSSadaf Ebrahimi   }
7643*f5c631daSSadaf Ebrahimi 
Vmls(Condition cond,DataType dt,QRegister rd,QRegister rn,DRegisterLane rm)7644*f5c631daSSadaf Ebrahimi   void Vmls(Condition cond,
7645*f5c631daSSadaf Ebrahimi             DataType dt,
7646*f5c631daSSadaf Ebrahimi             QRegister rd,
7647*f5c631daSSadaf Ebrahimi             QRegister rn,
7648*f5c631daSSadaf Ebrahimi             DRegisterLane rm) {
7649*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7650*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7651*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7652*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7653*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7654*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7655*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7656*f5c631daSSadaf Ebrahimi     vmls(cond, dt, rd, rn, rm);
7657*f5c631daSSadaf Ebrahimi   }
Vmls(DataType dt,QRegister rd,QRegister rn,DRegisterLane rm)7658*f5c631daSSadaf Ebrahimi   void Vmls(DataType dt, QRegister rd, QRegister rn, DRegisterLane rm) {
7659*f5c631daSSadaf Ebrahimi     Vmls(al, dt, rd, rn, rm);
7660*f5c631daSSadaf Ebrahimi   }
7661*f5c631daSSadaf Ebrahimi 
Vmls(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)7662*f5c631daSSadaf Ebrahimi   void Vmls(
7663*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
7664*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7665*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7666*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7667*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7668*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7669*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7670*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7671*f5c631daSSadaf Ebrahimi     vmls(cond, dt, rd, rn, rm);
7672*f5c631daSSadaf Ebrahimi   }
Vmls(DataType dt,DRegister rd,DRegister rn,DRegister rm)7673*f5c631daSSadaf Ebrahimi   void Vmls(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
7674*f5c631daSSadaf Ebrahimi     Vmls(al, dt, rd, rn, rm);
7675*f5c631daSSadaf Ebrahimi   }
7676*f5c631daSSadaf Ebrahimi 
Vmls(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)7677*f5c631daSSadaf Ebrahimi   void Vmls(
7678*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
7679*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7680*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7681*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7682*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7683*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7684*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7685*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7686*f5c631daSSadaf Ebrahimi     vmls(cond, dt, rd, rn, rm);
7687*f5c631daSSadaf Ebrahimi   }
Vmls(DataType dt,QRegister rd,QRegister rn,QRegister rm)7688*f5c631daSSadaf Ebrahimi   void Vmls(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
7689*f5c631daSSadaf Ebrahimi     Vmls(al, dt, rd, rn, rm);
7690*f5c631daSSadaf Ebrahimi   }
7691*f5c631daSSadaf Ebrahimi 
Vmls(Condition cond,DataType dt,SRegister rd,SRegister rn,SRegister rm)7692*f5c631daSSadaf Ebrahimi   void Vmls(
7693*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) {
7694*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7695*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7696*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7697*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7698*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7699*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7700*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7701*f5c631daSSadaf Ebrahimi     vmls(cond, dt, rd, rn, rm);
7702*f5c631daSSadaf Ebrahimi   }
Vmls(DataType dt,SRegister rd,SRegister rn,SRegister rm)7703*f5c631daSSadaf Ebrahimi   void Vmls(DataType dt, SRegister rd, SRegister rn, SRegister rm) {
7704*f5c631daSSadaf Ebrahimi     Vmls(al, dt, rd, rn, rm);
7705*f5c631daSSadaf Ebrahimi   }
7706*f5c631daSSadaf Ebrahimi 
Vmlsl(Condition cond,DataType dt,QRegister rd,DRegister rn,DRegisterLane rm)7707*f5c631daSSadaf Ebrahimi   void Vmlsl(Condition cond,
7708*f5c631daSSadaf Ebrahimi              DataType dt,
7709*f5c631daSSadaf Ebrahimi              QRegister rd,
7710*f5c631daSSadaf Ebrahimi              DRegister rn,
7711*f5c631daSSadaf Ebrahimi              DRegisterLane rm) {
7712*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7713*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7714*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7715*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7716*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7717*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7718*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7719*f5c631daSSadaf Ebrahimi     vmlsl(cond, dt, rd, rn, rm);
7720*f5c631daSSadaf Ebrahimi   }
Vmlsl(DataType dt,QRegister rd,DRegister rn,DRegisterLane rm)7721*f5c631daSSadaf Ebrahimi   void Vmlsl(DataType dt, QRegister rd, DRegister rn, DRegisterLane rm) {
7722*f5c631daSSadaf Ebrahimi     Vmlsl(al, dt, rd, rn, rm);
7723*f5c631daSSadaf Ebrahimi   }
7724*f5c631daSSadaf Ebrahimi 
Vmlsl(Condition cond,DataType dt,QRegister rd,DRegister rn,DRegister rm)7725*f5c631daSSadaf Ebrahimi   void Vmlsl(
7726*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm) {
7727*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7728*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7729*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7730*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7731*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7732*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7733*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7734*f5c631daSSadaf Ebrahimi     vmlsl(cond, dt, rd, rn, rm);
7735*f5c631daSSadaf Ebrahimi   }
Vmlsl(DataType dt,QRegister rd,DRegister rn,DRegister rm)7736*f5c631daSSadaf Ebrahimi   void Vmlsl(DataType dt, QRegister rd, DRegister rn, DRegister rm) {
7737*f5c631daSSadaf Ebrahimi     Vmlsl(al, dt, rd, rn, rm);
7738*f5c631daSSadaf Ebrahimi   }
7739*f5c631daSSadaf Ebrahimi 
Vmov(Condition cond,Register rt,SRegister rn)7740*f5c631daSSadaf Ebrahimi   void Vmov(Condition cond, Register rt, SRegister rn) {
7741*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
7742*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7743*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7744*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7745*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7746*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7747*f5c631daSSadaf Ebrahimi     vmov(cond, rt, rn);
7748*f5c631daSSadaf Ebrahimi   }
Vmov(Register rt,SRegister rn)7749*f5c631daSSadaf Ebrahimi   void Vmov(Register rt, SRegister rn) { Vmov(al, rt, rn); }
7750*f5c631daSSadaf Ebrahimi 
Vmov(Condition cond,SRegister rn,Register rt)7751*f5c631daSSadaf Ebrahimi   void Vmov(Condition cond, SRegister rn, Register rt) {
7752*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7753*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
7754*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7755*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7756*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7757*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7758*f5c631daSSadaf Ebrahimi     vmov(cond, rn, rt);
7759*f5c631daSSadaf Ebrahimi   }
Vmov(SRegister rn,Register rt)7760*f5c631daSSadaf Ebrahimi   void Vmov(SRegister rn, Register rt) { Vmov(al, rn, rt); }
7761*f5c631daSSadaf Ebrahimi 
Vmov(Condition cond,Register rt,Register rt2,DRegister rm)7762*f5c631daSSadaf Ebrahimi   void Vmov(Condition cond, Register rt, Register rt2, DRegister rm) {
7763*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
7764*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt2));
7765*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7766*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7767*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7768*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7769*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7770*f5c631daSSadaf Ebrahimi     vmov(cond, rt, rt2, rm);
7771*f5c631daSSadaf Ebrahimi   }
Vmov(Register rt,Register rt2,DRegister rm)7772*f5c631daSSadaf Ebrahimi   void Vmov(Register rt, Register rt2, DRegister rm) { Vmov(al, rt, rt2, rm); }
7773*f5c631daSSadaf Ebrahimi 
Vmov(Condition cond,DRegister rm,Register rt,Register rt2)7774*f5c631daSSadaf Ebrahimi   void Vmov(Condition cond, DRegister rm, Register rt, Register rt2) {
7775*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7776*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
7777*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt2));
7778*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7779*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7780*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7781*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7782*f5c631daSSadaf Ebrahimi     vmov(cond, rm, rt, rt2);
7783*f5c631daSSadaf Ebrahimi   }
Vmov(DRegister rm,Register rt,Register rt2)7784*f5c631daSSadaf Ebrahimi   void Vmov(DRegister rm, Register rt, Register rt2) { Vmov(al, rm, rt, rt2); }
7785*f5c631daSSadaf Ebrahimi 
Vmov(Condition cond,Register rt,Register rt2,SRegister rm,SRegister rm1)7786*f5c631daSSadaf Ebrahimi   void Vmov(
7787*f5c631daSSadaf Ebrahimi       Condition cond, Register rt, Register rt2, SRegister rm, SRegister rm1) {
7788*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
7789*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt2));
7790*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7791*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm1));
7792*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7793*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7794*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7795*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7796*f5c631daSSadaf Ebrahimi     vmov(cond, rt, rt2, rm, rm1);
7797*f5c631daSSadaf Ebrahimi   }
Vmov(Register rt,Register rt2,SRegister rm,SRegister rm1)7798*f5c631daSSadaf Ebrahimi   void Vmov(Register rt, Register rt2, SRegister rm, SRegister rm1) {
7799*f5c631daSSadaf Ebrahimi     Vmov(al, rt, rt2, rm, rm1);
7800*f5c631daSSadaf Ebrahimi   }
7801*f5c631daSSadaf Ebrahimi 
Vmov(Condition cond,SRegister rm,SRegister rm1,Register rt,Register rt2)7802*f5c631daSSadaf Ebrahimi   void Vmov(
7803*f5c631daSSadaf Ebrahimi       Condition cond, SRegister rm, SRegister rm1, Register rt, Register rt2) {
7804*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7805*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm1));
7806*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
7807*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt2));
7808*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7809*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7810*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7811*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7812*f5c631daSSadaf Ebrahimi     vmov(cond, rm, rm1, rt, rt2);
7813*f5c631daSSadaf Ebrahimi   }
Vmov(SRegister rm,SRegister rm1,Register rt,Register rt2)7814*f5c631daSSadaf Ebrahimi   void Vmov(SRegister rm, SRegister rm1, Register rt, Register rt2) {
7815*f5c631daSSadaf Ebrahimi     Vmov(al, rm, rm1, rt, rt2);
7816*f5c631daSSadaf Ebrahimi   }
7817*f5c631daSSadaf Ebrahimi 
Vmov(Condition cond,DataType dt,DRegisterLane rd,Register rt)7818*f5c631daSSadaf Ebrahimi   void Vmov(Condition cond, DataType dt, DRegisterLane rd, Register rt) {
7819*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7820*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
7821*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7822*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7823*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7824*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7825*f5c631daSSadaf Ebrahimi     vmov(cond, dt, rd, rt);
7826*f5c631daSSadaf Ebrahimi   }
Vmov(DataType dt,DRegisterLane rd,Register rt)7827*f5c631daSSadaf Ebrahimi   void Vmov(DataType dt, DRegisterLane rd, Register rt) {
7828*f5c631daSSadaf Ebrahimi     Vmov(al, dt, rd, rt);
7829*f5c631daSSadaf Ebrahimi   }
Vmov(Condition cond,DRegisterLane rd,Register rt)7830*f5c631daSSadaf Ebrahimi   void Vmov(Condition cond, DRegisterLane rd, Register rt) {
7831*f5c631daSSadaf Ebrahimi     Vmov(cond, kDataTypeValueNone, rd, rt);
7832*f5c631daSSadaf Ebrahimi   }
Vmov(DRegisterLane rd,Register rt)7833*f5c631daSSadaf Ebrahimi   void Vmov(DRegisterLane rd, Register rt) {
7834*f5c631daSSadaf Ebrahimi     Vmov(al, kDataTypeValueNone, rd, rt);
7835*f5c631daSSadaf Ebrahimi   }
7836*f5c631daSSadaf Ebrahimi 
Vmov(Condition cond,DataType dt,DRegister rd,const DOperand & operand)7837*f5c631daSSadaf Ebrahimi   void Vmov(Condition cond,
7838*f5c631daSSadaf Ebrahimi             DataType dt,
7839*f5c631daSSadaf Ebrahimi             DRegister rd,
7840*f5c631daSSadaf Ebrahimi             const DOperand& operand) {
7841*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7842*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
7843*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7844*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7845*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7846*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7847*f5c631daSSadaf Ebrahimi     vmov(cond, dt, rd, operand);
7848*f5c631daSSadaf Ebrahimi   }
Vmov(DataType dt,DRegister rd,const DOperand & operand)7849*f5c631daSSadaf Ebrahimi   void Vmov(DataType dt, DRegister rd, const DOperand& operand) {
7850*f5c631daSSadaf Ebrahimi     Vmov(al, dt, rd, operand);
7851*f5c631daSSadaf Ebrahimi   }
7852*f5c631daSSadaf Ebrahimi 
Vmov(Condition cond,DataType dt,QRegister rd,const QOperand & operand)7853*f5c631daSSadaf Ebrahimi   void Vmov(Condition cond,
7854*f5c631daSSadaf Ebrahimi             DataType dt,
7855*f5c631daSSadaf Ebrahimi             QRegister rd,
7856*f5c631daSSadaf Ebrahimi             const QOperand& operand) {
7857*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7858*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
7859*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7860*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7861*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7862*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7863*f5c631daSSadaf Ebrahimi     vmov(cond, dt, rd, operand);
7864*f5c631daSSadaf Ebrahimi   }
Vmov(DataType dt,QRegister rd,const QOperand & operand)7865*f5c631daSSadaf Ebrahimi   void Vmov(DataType dt, QRegister rd, const QOperand& operand) {
7866*f5c631daSSadaf Ebrahimi     Vmov(al, dt, rd, operand);
7867*f5c631daSSadaf Ebrahimi   }
7868*f5c631daSSadaf Ebrahimi 
Vmov(Condition cond,DataType dt,SRegister rd,const SOperand & operand)7869*f5c631daSSadaf Ebrahimi   void Vmov(Condition cond,
7870*f5c631daSSadaf Ebrahimi             DataType dt,
7871*f5c631daSSadaf Ebrahimi             SRegister rd,
7872*f5c631daSSadaf Ebrahimi             const SOperand& operand) {
7873*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7874*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
7875*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7876*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7877*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7878*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7879*f5c631daSSadaf Ebrahimi     vmov(cond, dt, rd, operand);
7880*f5c631daSSadaf Ebrahimi   }
Vmov(DataType dt,SRegister rd,const SOperand & operand)7881*f5c631daSSadaf Ebrahimi   void Vmov(DataType dt, SRegister rd, const SOperand& operand) {
7882*f5c631daSSadaf Ebrahimi     Vmov(al, dt, rd, operand);
7883*f5c631daSSadaf Ebrahimi   }
7884*f5c631daSSadaf Ebrahimi 
Vmov(Condition cond,DataType dt,Register rt,DRegisterLane rn)7885*f5c631daSSadaf Ebrahimi   void Vmov(Condition cond, DataType dt, Register rt, DRegisterLane rn) {
7886*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
7887*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7888*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7889*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7890*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7891*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7892*f5c631daSSadaf Ebrahimi     vmov(cond, dt, rt, rn);
7893*f5c631daSSadaf Ebrahimi   }
Vmov(DataType dt,Register rt,DRegisterLane rn)7894*f5c631daSSadaf Ebrahimi   void Vmov(DataType dt, Register rt, DRegisterLane rn) {
7895*f5c631daSSadaf Ebrahimi     Vmov(al, dt, rt, rn);
7896*f5c631daSSadaf Ebrahimi   }
Vmov(Condition cond,Register rt,DRegisterLane rn)7897*f5c631daSSadaf Ebrahimi   void Vmov(Condition cond, Register rt, DRegisterLane rn) {
7898*f5c631daSSadaf Ebrahimi     Vmov(cond, kDataTypeValueNone, rt, rn);
7899*f5c631daSSadaf Ebrahimi   }
Vmov(Register rt,DRegisterLane rn)7900*f5c631daSSadaf Ebrahimi   void Vmov(Register rt, DRegisterLane rn) {
7901*f5c631daSSadaf Ebrahimi     Vmov(al, kDataTypeValueNone, rt, rn);
7902*f5c631daSSadaf Ebrahimi   }
7903*f5c631daSSadaf Ebrahimi 
Vmovl(Condition cond,DataType dt,QRegister rd,DRegister rm)7904*f5c631daSSadaf Ebrahimi   void Vmovl(Condition cond, DataType dt, QRegister rd, DRegister rm) {
7905*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7906*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7907*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7908*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7909*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7910*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7911*f5c631daSSadaf Ebrahimi     vmovl(cond, dt, rd, rm);
7912*f5c631daSSadaf Ebrahimi   }
Vmovl(DataType dt,QRegister rd,DRegister rm)7913*f5c631daSSadaf Ebrahimi   void Vmovl(DataType dt, QRegister rd, DRegister rm) { Vmovl(al, dt, rd, rm); }
7914*f5c631daSSadaf Ebrahimi 
Vmovn(Condition cond,DataType dt,DRegister rd,QRegister rm)7915*f5c631daSSadaf Ebrahimi   void Vmovn(Condition cond, DataType dt, DRegister rd, QRegister rm) {
7916*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7917*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7918*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7919*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7920*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7921*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7922*f5c631daSSadaf Ebrahimi     vmovn(cond, dt, rd, rm);
7923*f5c631daSSadaf Ebrahimi   }
Vmovn(DataType dt,DRegister rd,QRegister rm)7924*f5c631daSSadaf Ebrahimi   void Vmovn(DataType dt, DRegister rd, QRegister rm) { Vmovn(al, dt, rd, rm); }
7925*f5c631daSSadaf Ebrahimi 
Vmrs(Condition cond,RegisterOrAPSR_nzcv rt,SpecialFPRegister spec_reg)7926*f5c631daSSadaf Ebrahimi   void Vmrs(Condition cond,
7927*f5c631daSSadaf Ebrahimi             RegisterOrAPSR_nzcv rt,
7928*f5c631daSSadaf Ebrahimi             SpecialFPRegister spec_reg) {
7929*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
7930*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7931*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7932*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7933*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7934*f5c631daSSadaf Ebrahimi     vmrs(cond, rt, spec_reg);
7935*f5c631daSSadaf Ebrahimi   }
Vmrs(RegisterOrAPSR_nzcv rt,SpecialFPRegister spec_reg)7936*f5c631daSSadaf Ebrahimi   void Vmrs(RegisterOrAPSR_nzcv rt, SpecialFPRegister spec_reg) {
7937*f5c631daSSadaf Ebrahimi     Vmrs(al, rt, spec_reg);
7938*f5c631daSSadaf Ebrahimi   }
7939*f5c631daSSadaf Ebrahimi 
Vmsr(Condition cond,SpecialFPRegister spec_reg,Register rt)7940*f5c631daSSadaf Ebrahimi   void Vmsr(Condition cond, SpecialFPRegister spec_reg, Register rt) {
7941*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rt));
7942*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7943*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7944*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7945*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7946*f5c631daSSadaf Ebrahimi     vmsr(cond, spec_reg, rt);
7947*f5c631daSSadaf Ebrahimi   }
Vmsr(SpecialFPRegister spec_reg,Register rt)7948*f5c631daSSadaf Ebrahimi   void Vmsr(SpecialFPRegister spec_reg, Register rt) { Vmsr(al, spec_reg, rt); }
7949*f5c631daSSadaf Ebrahimi 
Vmul(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister dm,unsigned index)7950*f5c631daSSadaf Ebrahimi   void Vmul(Condition cond,
7951*f5c631daSSadaf Ebrahimi             DataType dt,
7952*f5c631daSSadaf Ebrahimi             DRegister rd,
7953*f5c631daSSadaf Ebrahimi             DRegister rn,
7954*f5c631daSSadaf Ebrahimi             DRegister dm,
7955*f5c631daSSadaf Ebrahimi             unsigned index) {
7956*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7957*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7958*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(dm));
7959*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7960*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7961*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7962*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7963*f5c631daSSadaf Ebrahimi     vmul(cond, dt, rd, rn, dm, index);
7964*f5c631daSSadaf Ebrahimi   }
Vmul(DataType dt,DRegister rd,DRegister rn,DRegister dm,unsigned index)7965*f5c631daSSadaf Ebrahimi   void Vmul(
7966*f5c631daSSadaf Ebrahimi       DataType dt, DRegister rd, DRegister rn, DRegister dm, unsigned index) {
7967*f5c631daSSadaf Ebrahimi     Vmul(al, dt, rd, rn, dm, index);
7968*f5c631daSSadaf Ebrahimi   }
7969*f5c631daSSadaf Ebrahimi 
Vmul(Condition cond,DataType dt,QRegister rd,QRegister rn,DRegister dm,unsigned index)7970*f5c631daSSadaf Ebrahimi   void Vmul(Condition cond,
7971*f5c631daSSadaf Ebrahimi             DataType dt,
7972*f5c631daSSadaf Ebrahimi             QRegister rd,
7973*f5c631daSSadaf Ebrahimi             QRegister rn,
7974*f5c631daSSadaf Ebrahimi             DRegister dm,
7975*f5c631daSSadaf Ebrahimi             unsigned index) {
7976*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7977*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7978*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(dm));
7979*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7980*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7981*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7982*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7983*f5c631daSSadaf Ebrahimi     vmul(cond, dt, rd, rn, dm, index);
7984*f5c631daSSadaf Ebrahimi   }
Vmul(DataType dt,QRegister rd,QRegister rn,DRegister dm,unsigned index)7985*f5c631daSSadaf Ebrahimi   void Vmul(
7986*f5c631daSSadaf Ebrahimi       DataType dt, QRegister rd, QRegister rn, DRegister dm, unsigned index) {
7987*f5c631daSSadaf Ebrahimi     Vmul(al, dt, rd, rn, dm, index);
7988*f5c631daSSadaf Ebrahimi   }
7989*f5c631daSSadaf Ebrahimi 
Vmul(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)7990*f5c631daSSadaf Ebrahimi   void Vmul(
7991*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
7992*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
7993*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
7994*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
7995*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
7996*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
7997*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
7998*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
7999*f5c631daSSadaf Ebrahimi     vmul(cond, dt, rd, rn, rm);
8000*f5c631daSSadaf Ebrahimi   }
Vmul(DataType dt,DRegister rd,DRegister rn,DRegister rm)8001*f5c631daSSadaf Ebrahimi   void Vmul(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
8002*f5c631daSSadaf Ebrahimi     Vmul(al, dt, rd, rn, rm);
8003*f5c631daSSadaf Ebrahimi   }
8004*f5c631daSSadaf Ebrahimi 
Vmul(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)8005*f5c631daSSadaf Ebrahimi   void Vmul(
8006*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
8007*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8008*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
8009*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8010*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8011*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8012*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8013*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8014*f5c631daSSadaf Ebrahimi     vmul(cond, dt, rd, rn, rm);
8015*f5c631daSSadaf Ebrahimi   }
Vmul(DataType dt,QRegister rd,QRegister rn,QRegister rm)8016*f5c631daSSadaf Ebrahimi   void Vmul(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
8017*f5c631daSSadaf Ebrahimi     Vmul(al, dt, rd, rn, rm);
8018*f5c631daSSadaf Ebrahimi   }
8019*f5c631daSSadaf Ebrahimi 
Vmul(Condition cond,DataType dt,SRegister rd,SRegister rn,SRegister rm)8020*f5c631daSSadaf Ebrahimi   void Vmul(
8021*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) {
8022*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8023*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
8024*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8025*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8026*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8027*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8028*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8029*f5c631daSSadaf Ebrahimi     vmul(cond, dt, rd, rn, rm);
8030*f5c631daSSadaf Ebrahimi   }
Vmul(DataType dt,SRegister rd,SRegister rn,SRegister rm)8031*f5c631daSSadaf Ebrahimi   void Vmul(DataType dt, SRegister rd, SRegister rn, SRegister rm) {
8032*f5c631daSSadaf Ebrahimi     Vmul(al, dt, rd, rn, rm);
8033*f5c631daSSadaf Ebrahimi   }
8034*f5c631daSSadaf Ebrahimi 
Vmull(Condition cond,DataType dt,QRegister rd,DRegister rn,DRegister dm,unsigned index)8035*f5c631daSSadaf Ebrahimi   void Vmull(Condition cond,
8036*f5c631daSSadaf Ebrahimi              DataType dt,
8037*f5c631daSSadaf Ebrahimi              QRegister rd,
8038*f5c631daSSadaf Ebrahimi              DRegister rn,
8039*f5c631daSSadaf Ebrahimi              DRegister dm,
8040*f5c631daSSadaf Ebrahimi              unsigned index) {
8041*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8042*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
8043*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(dm));
8044*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8045*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8046*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8047*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8048*f5c631daSSadaf Ebrahimi     vmull(cond, dt, rd, rn, dm, index);
8049*f5c631daSSadaf Ebrahimi   }
Vmull(DataType dt,QRegister rd,DRegister rn,DRegister dm,unsigned index)8050*f5c631daSSadaf Ebrahimi   void Vmull(
8051*f5c631daSSadaf Ebrahimi       DataType dt, QRegister rd, DRegister rn, DRegister dm, unsigned index) {
8052*f5c631daSSadaf Ebrahimi     Vmull(al, dt, rd, rn, dm, index);
8053*f5c631daSSadaf Ebrahimi   }
8054*f5c631daSSadaf Ebrahimi 
Vmull(Condition cond,DataType dt,QRegister rd,DRegister rn,DRegister rm)8055*f5c631daSSadaf Ebrahimi   void Vmull(
8056*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm) {
8057*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8058*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
8059*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8060*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8061*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8062*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8063*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8064*f5c631daSSadaf Ebrahimi     vmull(cond, dt, rd, rn, rm);
8065*f5c631daSSadaf Ebrahimi   }
Vmull(DataType dt,QRegister rd,DRegister rn,DRegister rm)8066*f5c631daSSadaf Ebrahimi   void Vmull(DataType dt, QRegister rd, DRegister rn, DRegister rm) {
8067*f5c631daSSadaf Ebrahimi     Vmull(al, dt, rd, rn, rm);
8068*f5c631daSSadaf Ebrahimi   }
8069*f5c631daSSadaf Ebrahimi 
Vmvn(Condition cond,DataType dt,DRegister rd,const DOperand & operand)8070*f5c631daSSadaf Ebrahimi   void Vmvn(Condition cond,
8071*f5c631daSSadaf Ebrahimi             DataType dt,
8072*f5c631daSSadaf Ebrahimi             DRegister rd,
8073*f5c631daSSadaf Ebrahimi             const DOperand& operand) {
8074*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8075*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
8076*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8077*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8078*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8079*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8080*f5c631daSSadaf Ebrahimi     vmvn(cond, dt, rd, operand);
8081*f5c631daSSadaf Ebrahimi   }
Vmvn(DataType dt,DRegister rd,const DOperand & operand)8082*f5c631daSSadaf Ebrahimi   void Vmvn(DataType dt, DRegister rd, const DOperand& operand) {
8083*f5c631daSSadaf Ebrahimi     Vmvn(al, dt, rd, operand);
8084*f5c631daSSadaf Ebrahimi   }
8085*f5c631daSSadaf Ebrahimi 
Vmvn(Condition cond,DataType dt,QRegister rd,const QOperand & operand)8086*f5c631daSSadaf Ebrahimi   void Vmvn(Condition cond,
8087*f5c631daSSadaf Ebrahimi             DataType dt,
8088*f5c631daSSadaf Ebrahimi             QRegister rd,
8089*f5c631daSSadaf Ebrahimi             const QOperand& operand) {
8090*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8091*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
8092*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8093*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8094*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8095*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8096*f5c631daSSadaf Ebrahimi     vmvn(cond, dt, rd, operand);
8097*f5c631daSSadaf Ebrahimi   }
Vmvn(DataType dt,QRegister rd,const QOperand & operand)8098*f5c631daSSadaf Ebrahimi   void Vmvn(DataType dt, QRegister rd, const QOperand& operand) {
8099*f5c631daSSadaf Ebrahimi     Vmvn(al, dt, rd, operand);
8100*f5c631daSSadaf Ebrahimi   }
8101*f5c631daSSadaf Ebrahimi 
Vneg(Condition cond,DataType dt,DRegister rd,DRegister rm)8102*f5c631daSSadaf Ebrahimi   void Vneg(Condition cond, DataType dt, DRegister rd, DRegister rm) {
8103*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8104*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8105*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8106*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8107*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8108*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8109*f5c631daSSadaf Ebrahimi     vneg(cond, dt, rd, rm);
8110*f5c631daSSadaf Ebrahimi   }
Vneg(DataType dt,DRegister rd,DRegister rm)8111*f5c631daSSadaf Ebrahimi   void Vneg(DataType dt, DRegister rd, DRegister rm) { Vneg(al, dt, rd, rm); }
8112*f5c631daSSadaf Ebrahimi 
Vneg(Condition cond,DataType dt,QRegister rd,QRegister rm)8113*f5c631daSSadaf Ebrahimi   void Vneg(Condition cond, DataType dt, QRegister rd, QRegister rm) {
8114*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8115*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8116*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8117*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8118*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8119*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8120*f5c631daSSadaf Ebrahimi     vneg(cond, dt, rd, rm);
8121*f5c631daSSadaf Ebrahimi   }
Vneg(DataType dt,QRegister rd,QRegister rm)8122*f5c631daSSadaf Ebrahimi   void Vneg(DataType dt, QRegister rd, QRegister rm) { Vneg(al, dt, rd, rm); }
8123*f5c631daSSadaf Ebrahimi 
Vneg(Condition cond,DataType dt,SRegister rd,SRegister rm)8124*f5c631daSSadaf Ebrahimi   void Vneg(Condition cond, DataType dt, SRegister rd, SRegister rm) {
8125*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8126*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8127*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8128*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8129*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8130*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8131*f5c631daSSadaf Ebrahimi     vneg(cond, dt, rd, rm);
8132*f5c631daSSadaf Ebrahimi   }
Vneg(DataType dt,SRegister rd,SRegister rm)8133*f5c631daSSadaf Ebrahimi   void Vneg(DataType dt, SRegister rd, SRegister rm) { Vneg(al, dt, rd, rm); }
8134*f5c631daSSadaf Ebrahimi 
Vnmla(Condition cond,DataType dt,SRegister rd,SRegister rn,SRegister rm)8135*f5c631daSSadaf Ebrahimi   void Vnmla(
8136*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) {
8137*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8138*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
8139*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8140*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8141*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8142*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8143*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8144*f5c631daSSadaf Ebrahimi     vnmla(cond, dt, rd, rn, rm);
8145*f5c631daSSadaf Ebrahimi   }
Vnmla(DataType dt,SRegister rd,SRegister rn,SRegister rm)8146*f5c631daSSadaf Ebrahimi   void Vnmla(DataType dt, SRegister rd, SRegister rn, SRegister rm) {
8147*f5c631daSSadaf Ebrahimi     Vnmla(al, dt, rd, rn, rm);
8148*f5c631daSSadaf Ebrahimi   }
8149*f5c631daSSadaf Ebrahimi 
Vnmla(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)8150*f5c631daSSadaf Ebrahimi   void Vnmla(
8151*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
8152*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8153*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
8154*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8155*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8156*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8157*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8158*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8159*f5c631daSSadaf Ebrahimi     vnmla(cond, dt, rd, rn, rm);
8160*f5c631daSSadaf Ebrahimi   }
Vnmla(DataType dt,DRegister rd,DRegister rn,DRegister rm)8161*f5c631daSSadaf Ebrahimi   void Vnmla(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
8162*f5c631daSSadaf Ebrahimi     Vnmla(al, dt, rd, rn, rm);
8163*f5c631daSSadaf Ebrahimi   }
8164*f5c631daSSadaf Ebrahimi 
Vnmls(Condition cond,DataType dt,SRegister rd,SRegister rn,SRegister rm)8165*f5c631daSSadaf Ebrahimi   void Vnmls(
8166*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) {
8167*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8168*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
8169*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8170*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8171*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8172*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8173*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8174*f5c631daSSadaf Ebrahimi     vnmls(cond, dt, rd, rn, rm);
8175*f5c631daSSadaf Ebrahimi   }
Vnmls(DataType dt,SRegister rd,SRegister rn,SRegister rm)8176*f5c631daSSadaf Ebrahimi   void Vnmls(DataType dt, SRegister rd, SRegister rn, SRegister rm) {
8177*f5c631daSSadaf Ebrahimi     Vnmls(al, dt, rd, rn, rm);
8178*f5c631daSSadaf Ebrahimi   }
8179*f5c631daSSadaf Ebrahimi 
Vnmls(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)8180*f5c631daSSadaf Ebrahimi   void Vnmls(
8181*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
8182*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8183*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
8184*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8185*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8186*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8187*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8188*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8189*f5c631daSSadaf Ebrahimi     vnmls(cond, dt, rd, rn, rm);
8190*f5c631daSSadaf Ebrahimi   }
Vnmls(DataType dt,DRegister rd,DRegister rn,DRegister rm)8191*f5c631daSSadaf Ebrahimi   void Vnmls(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
8192*f5c631daSSadaf Ebrahimi     Vnmls(al, dt, rd, rn, rm);
8193*f5c631daSSadaf Ebrahimi   }
8194*f5c631daSSadaf Ebrahimi 
Vnmul(Condition cond,DataType dt,SRegister rd,SRegister rn,SRegister rm)8195*f5c631daSSadaf Ebrahimi   void Vnmul(
8196*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) {
8197*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8198*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
8199*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8200*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8201*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8202*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8203*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8204*f5c631daSSadaf Ebrahimi     vnmul(cond, dt, rd, rn, rm);
8205*f5c631daSSadaf Ebrahimi   }
Vnmul(DataType dt,SRegister rd,SRegister rn,SRegister rm)8206*f5c631daSSadaf Ebrahimi   void Vnmul(DataType dt, SRegister rd, SRegister rn, SRegister rm) {
8207*f5c631daSSadaf Ebrahimi     Vnmul(al, dt, rd, rn, rm);
8208*f5c631daSSadaf Ebrahimi   }
8209*f5c631daSSadaf Ebrahimi 
Vnmul(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)8210*f5c631daSSadaf Ebrahimi   void Vnmul(
8211*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
8212*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8213*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
8214*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8215*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8216*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8217*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8218*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8219*f5c631daSSadaf Ebrahimi     vnmul(cond, dt, rd, rn, rm);
8220*f5c631daSSadaf Ebrahimi   }
Vnmul(DataType dt,DRegister rd,DRegister rn,DRegister rm)8221*f5c631daSSadaf Ebrahimi   void Vnmul(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
8222*f5c631daSSadaf Ebrahimi     Vnmul(al, dt, rd, rn, rm);
8223*f5c631daSSadaf Ebrahimi   }
8224*f5c631daSSadaf Ebrahimi 
Vorn(Condition cond,DataType dt,DRegister rd,DRegister rn,const DOperand & operand)8225*f5c631daSSadaf Ebrahimi   void Vorn(Condition cond,
8226*f5c631daSSadaf Ebrahimi             DataType dt,
8227*f5c631daSSadaf Ebrahimi             DRegister rd,
8228*f5c631daSSadaf Ebrahimi             DRegister rn,
8229*f5c631daSSadaf Ebrahimi             const DOperand& operand) {
8230*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8231*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
8232*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
8233*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8234*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8235*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8236*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8237*f5c631daSSadaf Ebrahimi     vorn(cond, dt, rd, rn, operand);
8238*f5c631daSSadaf Ebrahimi   }
Vorn(DataType dt,DRegister rd,DRegister rn,const DOperand & operand)8239*f5c631daSSadaf Ebrahimi   void Vorn(DataType dt, DRegister rd, DRegister rn, const DOperand& operand) {
8240*f5c631daSSadaf Ebrahimi     Vorn(al, dt, rd, rn, operand);
8241*f5c631daSSadaf Ebrahimi   }
8242*f5c631daSSadaf Ebrahimi 
Vorn(Condition cond,DataType dt,QRegister rd,QRegister rn,const QOperand & operand)8243*f5c631daSSadaf Ebrahimi   void Vorn(Condition cond,
8244*f5c631daSSadaf Ebrahimi             DataType dt,
8245*f5c631daSSadaf Ebrahimi             QRegister rd,
8246*f5c631daSSadaf Ebrahimi             QRegister rn,
8247*f5c631daSSadaf Ebrahimi             const QOperand& operand) {
8248*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8249*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
8250*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
8251*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8252*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8253*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8254*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8255*f5c631daSSadaf Ebrahimi     vorn(cond, dt, rd, rn, operand);
8256*f5c631daSSadaf Ebrahimi   }
Vorn(DataType dt,QRegister rd,QRegister rn,const QOperand & operand)8257*f5c631daSSadaf Ebrahimi   void Vorn(DataType dt, QRegister rd, QRegister rn, const QOperand& operand) {
8258*f5c631daSSadaf Ebrahimi     Vorn(al, dt, rd, rn, operand);
8259*f5c631daSSadaf Ebrahimi   }
8260*f5c631daSSadaf Ebrahimi 
Vorr(Condition cond,DataType dt,DRegister rd,DRegister rn,const DOperand & operand)8261*f5c631daSSadaf Ebrahimi   void Vorr(Condition cond,
8262*f5c631daSSadaf Ebrahimi             DataType dt,
8263*f5c631daSSadaf Ebrahimi             DRegister rd,
8264*f5c631daSSadaf Ebrahimi             DRegister rn,
8265*f5c631daSSadaf Ebrahimi             const DOperand& operand) {
8266*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8267*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
8268*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
8269*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8270*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8271*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8272*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8273*f5c631daSSadaf Ebrahimi     vorr(cond, dt, rd, rn, operand);
8274*f5c631daSSadaf Ebrahimi   }
Vorr(DataType dt,DRegister rd,DRegister rn,const DOperand & operand)8275*f5c631daSSadaf Ebrahimi   void Vorr(DataType dt, DRegister rd, DRegister rn, const DOperand& operand) {
8276*f5c631daSSadaf Ebrahimi     Vorr(al, dt, rd, rn, operand);
8277*f5c631daSSadaf Ebrahimi   }
Vorr(Condition cond,DRegister rd,DRegister rn,const DOperand & operand)8278*f5c631daSSadaf Ebrahimi   void Vorr(Condition cond,
8279*f5c631daSSadaf Ebrahimi             DRegister rd,
8280*f5c631daSSadaf Ebrahimi             DRegister rn,
8281*f5c631daSSadaf Ebrahimi             const DOperand& operand) {
8282*f5c631daSSadaf Ebrahimi     Vorr(cond, kDataTypeValueNone, rd, rn, operand);
8283*f5c631daSSadaf Ebrahimi   }
Vorr(DRegister rd,DRegister rn,const DOperand & operand)8284*f5c631daSSadaf Ebrahimi   void Vorr(DRegister rd, DRegister rn, const DOperand& operand) {
8285*f5c631daSSadaf Ebrahimi     Vorr(al, kDataTypeValueNone, rd, rn, operand);
8286*f5c631daSSadaf Ebrahimi   }
8287*f5c631daSSadaf Ebrahimi 
Vorr(Condition cond,DataType dt,QRegister rd,QRegister rn,const QOperand & operand)8288*f5c631daSSadaf Ebrahimi   void Vorr(Condition cond,
8289*f5c631daSSadaf Ebrahimi             DataType dt,
8290*f5c631daSSadaf Ebrahimi             QRegister rd,
8291*f5c631daSSadaf Ebrahimi             QRegister rn,
8292*f5c631daSSadaf Ebrahimi             const QOperand& operand) {
8293*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8294*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
8295*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
8296*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8297*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8298*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8299*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8300*f5c631daSSadaf Ebrahimi     vorr(cond, dt, rd, rn, operand);
8301*f5c631daSSadaf Ebrahimi   }
Vorr(DataType dt,QRegister rd,QRegister rn,const QOperand & operand)8302*f5c631daSSadaf Ebrahimi   void Vorr(DataType dt, QRegister rd, QRegister rn, const QOperand& operand) {
8303*f5c631daSSadaf Ebrahimi     Vorr(al, dt, rd, rn, operand);
8304*f5c631daSSadaf Ebrahimi   }
Vorr(Condition cond,QRegister rd,QRegister rn,const QOperand & operand)8305*f5c631daSSadaf Ebrahimi   void Vorr(Condition cond,
8306*f5c631daSSadaf Ebrahimi             QRegister rd,
8307*f5c631daSSadaf Ebrahimi             QRegister rn,
8308*f5c631daSSadaf Ebrahimi             const QOperand& operand) {
8309*f5c631daSSadaf Ebrahimi     Vorr(cond, kDataTypeValueNone, rd, rn, operand);
8310*f5c631daSSadaf Ebrahimi   }
Vorr(QRegister rd,QRegister rn,const QOperand & operand)8311*f5c631daSSadaf Ebrahimi   void Vorr(QRegister rd, QRegister rn, const QOperand& operand) {
8312*f5c631daSSadaf Ebrahimi     Vorr(al, kDataTypeValueNone, rd, rn, operand);
8313*f5c631daSSadaf Ebrahimi   }
8314*f5c631daSSadaf Ebrahimi 
Vpadal(Condition cond,DataType dt,DRegister rd,DRegister rm)8315*f5c631daSSadaf Ebrahimi   void Vpadal(Condition cond, DataType dt, DRegister rd, DRegister rm) {
8316*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8317*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8318*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8319*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8320*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8321*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8322*f5c631daSSadaf Ebrahimi     vpadal(cond, dt, rd, rm);
8323*f5c631daSSadaf Ebrahimi   }
Vpadal(DataType dt,DRegister rd,DRegister rm)8324*f5c631daSSadaf Ebrahimi   void Vpadal(DataType dt, DRegister rd, DRegister rm) {
8325*f5c631daSSadaf Ebrahimi     Vpadal(al, dt, rd, rm);
8326*f5c631daSSadaf Ebrahimi   }
8327*f5c631daSSadaf Ebrahimi 
Vpadal(Condition cond,DataType dt,QRegister rd,QRegister rm)8328*f5c631daSSadaf Ebrahimi   void Vpadal(Condition cond, DataType dt, QRegister rd, QRegister rm) {
8329*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8330*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8331*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8332*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8333*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8334*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8335*f5c631daSSadaf Ebrahimi     vpadal(cond, dt, rd, rm);
8336*f5c631daSSadaf Ebrahimi   }
Vpadal(DataType dt,QRegister rd,QRegister rm)8337*f5c631daSSadaf Ebrahimi   void Vpadal(DataType dt, QRegister rd, QRegister rm) {
8338*f5c631daSSadaf Ebrahimi     Vpadal(al, dt, rd, rm);
8339*f5c631daSSadaf Ebrahimi   }
8340*f5c631daSSadaf Ebrahimi 
Vpadd(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)8341*f5c631daSSadaf Ebrahimi   void Vpadd(
8342*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
8343*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8344*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
8345*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8346*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8347*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8348*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8349*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8350*f5c631daSSadaf Ebrahimi     vpadd(cond, dt, rd, rn, rm);
8351*f5c631daSSadaf Ebrahimi   }
Vpadd(DataType dt,DRegister rd,DRegister rn,DRegister rm)8352*f5c631daSSadaf Ebrahimi   void Vpadd(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
8353*f5c631daSSadaf Ebrahimi     Vpadd(al, dt, rd, rn, rm);
8354*f5c631daSSadaf Ebrahimi   }
8355*f5c631daSSadaf Ebrahimi 
Vpaddl(Condition cond,DataType dt,DRegister rd,DRegister rm)8356*f5c631daSSadaf Ebrahimi   void Vpaddl(Condition cond, DataType dt, DRegister rd, DRegister rm) {
8357*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8358*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8359*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8360*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8361*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8362*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8363*f5c631daSSadaf Ebrahimi     vpaddl(cond, dt, rd, rm);
8364*f5c631daSSadaf Ebrahimi   }
Vpaddl(DataType dt,DRegister rd,DRegister rm)8365*f5c631daSSadaf Ebrahimi   void Vpaddl(DataType dt, DRegister rd, DRegister rm) {
8366*f5c631daSSadaf Ebrahimi     Vpaddl(al, dt, rd, rm);
8367*f5c631daSSadaf Ebrahimi   }
8368*f5c631daSSadaf Ebrahimi 
Vpaddl(Condition cond,DataType dt,QRegister rd,QRegister rm)8369*f5c631daSSadaf Ebrahimi   void Vpaddl(Condition cond, DataType dt, QRegister rd, QRegister rm) {
8370*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8371*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8372*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8373*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8374*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8375*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8376*f5c631daSSadaf Ebrahimi     vpaddl(cond, dt, rd, rm);
8377*f5c631daSSadaf Ebrahimi   }
Vpaddl(DataType dt,QRegister rd,QRegister rm)8378*f5c631daSSadaf Ebrahimi   void Vpaddl(DataType dt, QRegister rd, QRegister rm) {
8379*f5c631daSSadaf Ebrahimi     Vpaddl(al, dt, rd, rm);
8380*f5c631daSSadaf Ebrahimi   }
8381*f5c631daSSadaf Ebrahimi 
Vpmax(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)8382*f5c631daSSadaf Ebrahimi   void Vpmax(
8383*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
8384*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8385*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
8386*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8387*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8388*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8389*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8390*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8391*f5c631daSSadaf Ebrahimi     vpmax(cond, dt, rd, rn, rm);
8392*f5c631daSSadaf Ebrahimi   }
Vpmax(DataType dt,DRegister rd,DRegister rn,DRegister rm)8393*f5c631daSSadaf Ebrahimi   void Vpmax(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
8394*f5c631daSSadaf Ebrahimi     Vpmax(al, dt, rd, rn, rm);
8395*f5c631daSSadaf Ebrahimi   }
8396*f5c631daSSadaf Ebrahimi 
Vpmin(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)8397*f5c631daSSadaf Ebrahimi   void Vpmin(
8398*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
8399*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8400*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
8401*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8402*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8403*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8404*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8405*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8406*f5c631daSSadaf Ebrahimi     vpmin(cond, dt, rd, rn, rm);
8407*f5c631daSSadaf Ebrahimi   }
Vpmin(DataType dt,DRegister rd,DRegister rn,DRegister rm)8408*f5c631daSSadaf Ebrahimi   void Vpmin(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
8409*f5c631daSSadaf Ebrahimi     Vpmin(al, dt, rd, rn, rm);
8410*f5c631daSSadaf Ebrahimi   }
8411*f5c631daSSadaf Ebrahimi 
Vpop(Condition cond,DataType dt,DRegisterList dreglist)8412*f5c631daSSadaf Ebrahimi   void Vpop(Condition cond, DataType dt, DRegisterList dreglist) {
8413*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(dreglist));
8414*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8415*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8416*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8417*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8418*f5c631daSSadaf Ebrahimi     vpop(cond, dt, dreglist);
8419*f5c631daSSadaf Ebrahimi   }
Vpop(DataType dt,DRegisterList dreglist)8420*f5c631daSSadaf Ebrahimi   void Vpop(DataType dt, DRegisterList dreglist) { Vpop(al, dt, dreglist); }
Vpop(Condition cond,DRegisterList dreglist)8421*f5c631daSSadaf Ebrahimi   void Vpop(Condition cond, DRegisterList dreglist) {
8422*f5c631daSSadaf Ebrahimi     Vpop(cond, kDataTypeValueNone, dreglist);
8423*f5c631daSSadaf Ebrahimi   }
Vpop(DRegisterList dreglist)8424*f5c631daSSadaf Ebrahimi   void Vpop(DRegisterList dreglist) { Vpop(al, kDataTypeValueNone, dreglist); }
8425*f5c631daSSadaf Ebrahimi 
Vpop(Condition cond,DataType dt,SRegisterList sreglist)8426*f5c631daSSadaf Ebrahimi   void Vpop(Condition cond, DataType dt, SRegisterList sreglist) {
8427*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(sreglist));
8428*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8429*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8430*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8431*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8432*f5c631daSSadaf Ebrahimi     vpop(cond, dt, sreglist);
8433*f5c631daSSadaf Ebrahimi   }
Vpop(DataType dt,SRegisterList sreglist)8434*f5c631daSSadaf Ebrahimi   void Vpop(DataType dt, SRegisterList sreglist) { Vpop(al, dt, sreglist); }
Vpop(Condition cond,SRegisterList sreglist)8435*f5c631daSSadaf Ebrahimi   void Vpop(Condition cond, SRegisterList sreglist) {
8436*f5c631daSSadaf Ebrahimi     Vpop(cond, kDataTypeValueNone, sreglist);
8437*f5c631daSSadaf Ebrahimi   }
Vpop(SRegisterList sreglist)8438*f5c631daSSadaf Ebrahimi   void Vpop(SRegisterList sreglist) { Vpop(al, kDataTypeValueNone, sreglist); }
8439*f5c631daSSadaf Ebrahimi 
Vpush(Condition cond,DataType dt,DRegisterList dreglist)8440*f5c631daSSadaf Ebrahimi   void Vpush(Condition cond, DataType dt, DRegisterList dreglist) {
8441*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(dreglist));
8442*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8443*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8444*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8445*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8446*f5c631daSSadaf Ebrahimi     vpush(cond, dt, dreglist);
8447*f5c631daSSadaf Ebrahimi   }
Vpush(DataType dt,DRegisterList dreglist)8448*f5c631daSSadaf Ebrahimi   void Vpush(DataType dt, DRegisterList dreglist) { Vpush(al, dt, dreglist); }
Vpush(Condition cond,DRegisterList dreglist)8449*f5c631daSSadaf Ebrahimi   void Vpush(Condition cond, DRegisterList dreglist) {
8450*f5c631daSSadaf Ebrahimi     Vpush(cond, kDataTypeValueNone, dreglist);
8451*f5c631daSSadaf Ebrahimi   }
Vpush(DRegisterList dreglist)8452*f5c631daSSadaf Ebrahimi   void Vpush(DRegisterList dreglist) {
8453*f5c631daSSadaf Ebrahimi     Vpush(al, kDataTypeValueNone, dreglist);
8454*f5c631daSSadaf Ebrahimi   }
8455*f5c631daSSadaf Ebrahimi 
Vpush(Condition cond,DataType dt,SRegisterList sreglist)8456*f5c631daSSadaf Ebrahimi   void Vpush(Condition cond, DataType dt, SRegisterList sreglist) {
8457*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(sreglist));
8458*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8459*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8460*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8461*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8462*f5c631daSSadaf Ebrahimi     vpush(cond, dt, sreglist);
8463*f5c631daSSadaf Ebrahimi   }
Vpush(DataType dt,SRegisterList sreglist)8464*f5c631daSSadaf Ebrahimi   void Vpush(DataType dt, SRegisterList sreglist) { Vpush(al, dt, sreglist); }
Vpush(Condition cond,SRegisterList sreglist)8465*f5c631daSSadaf Ebrahimi   void Vpush(Condition cond, SRegisterList sreglist) {
8466*f5c631daSSadaf Ebrahimi     Vpush(cond, kDataTypeValueNone, sreglist);
8467*f5c631daSSadaf Ebrahimi   }
Vpush(SRegisterList sreglist)8468*f5c631daSSadaf Ebrahimi   void Vpush(SRegisterList sreglist) {
8469*f5c631daSSadaf Ebrahimi     Vpush(al, kDataTypeValueNone, sreglist);
8470*f5c631daSSadaf Ebrahimi   }
8471*f5c631daSSadaf Ebrahimi 
Vqabs(Condition cond,DataType dt,DRegister rd,DRegister rm)8472*f5c631daSSadaf Ebrahimi   void Vqabs(Condition cond, DataType dt, DRegister rd, DRegister rm) {
8473*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8474*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8475*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8476*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8477*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8478*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8479*f5c631daSSadaf Ebrahimi     vqabs(cond, dt, rd, rm);
8480*f5c631daSSadaf Ebrahimi   }
Vqabs(DataType dt,DRegister rd,DRegister rm)8481*f5c631daSSadaf Ebrahimi   void Vqabs(DataType dt, DRegister rd, DRegister rm) { Vqabs(al, dt, rd, rm); }
8482*f5c631daSSadaf Ebrahimi 
Vqabs(Condition cond,DataType dt,QRegister rd,QRegister rm)8483*f5c631daSSadaf Ebrahimi   void Vqabs(Condition cond, DataType dt, QRegister rd, QRegister rm) {
8484*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8485*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8486*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8487*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8488*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8489*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8490*f5c631daSSadaf Ebrahimi     vqabs(cond, dt, rd, rm);
8491*f5c631daSSadaf Ebrahimi   }
Vqabs(DataType dt,QRegister rd,QRegister rm)8492*f5c631daSSadaf Ebrahimi   void Vqabs(DataType dt, QRegister rd, QRegister rm) { Vqabs(al, dt, rd, rm); }
8493*f5c631daSSadaf Ebrahimi 
Vqadd(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)8494*f5c631daSSadaf Ebrahimi   void Vqadd(
8495*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
8496*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8497*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
8498*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8499*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8500*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8501*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8502*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8503*f5c631daSSadaf Ebrahimi     vqadd(cond, dt, rd, rn, rm);
8504*f5c631daSSadaf Ebrahimi   }
Vqadd(DataType dt,DRegister rd,DRegister rn,DRegister rm)8505*f5c631daSSadaf Ebrahimi   void Vqadd(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
8506*f5c631daSSadaf Ebrahimi     Vqadd(al, dt, rd, rn, rm);
8507*f5c631daSSadaf Ebrahimi   }
8508*f5c631daSSadaf Ebrahimi 
Vqadd(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)8509*f5c631daSSadaf Ebrahimi   void Vqadd(
8510*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
8511*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8512*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
8513*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8514*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8515*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8516*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8517*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8518*f5c631daSSadaf Ebrahimi     vqadd(cond, dt, rd, rn, rm);
8519*f5c631daSSadaf Ebrahimi   }
Vqadd(DataType dt,QRegister rd,QRegister rn,QRegister rm)8520*f5c631daSSadaf Ebrahimi   void Vqadd(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
8521*f5c631daSSadaf Ebrahimi     Vqadd(al, dt, rd, rn, rm);
8522*f5c631daSSadaf Ebrahimi   }
8523*f5c631daSSadaf Ebrahimi 
Vqdmlal(Condition cond,DataType dt,QRegister rd,DRegister rn,DRegister rm)8524*f5c631daSSadaf Ebrahimi   void Vqdmlal(
8525*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm) {
8526*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8527*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
8528*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8529*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8530*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8531*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8532*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8533*f5c631daSSadaf Ebrahimi     vqdmlal(cond, dt, rd, rn, rm);
8534*f5c631daSSadaf Ebrahimi   }
Vqdmlal(DataType dt,QRegister rd,DRegister rn,DRegister rm)8535*f5c631daSSadaf Ebrahimi   void Vqdmlal(DataType dt, QRegister rd, DRegister rn, DRegister rm) {
8536*f5c631daSSadaf Ebrahimi     Vqdmlal(al, dt, rd, rn, rm);
8537*f5c631daSSadaf Ebrahimi   }
8538*f5c631daSSadaf Ebrahimi 
Vqdmlal(Condition cond,DataType dt,QRegister rd,DRegister rn,DRegister dm,unsigned index)8539*f5c631daSSadaf Ebrahimi   void Vqdmlal(Condition cond,
8540*f5c631daSSadaf Ebrahimi                DataType dt,
8541*f5c631daSSadaf Ebrahimi                QRegister rd,
8542*f5c631daSSadaf Ebrahimi                DRegister rn,
8543*f5c631daSSadaf Ebrahimi                DRegister dm,
8544*f5c631daSSadaf Ebrahimi                unsigned index) {
8545*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8546*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
8547*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(dm));
8548*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8549*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8550*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8551*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8552*f5c631daSSadaf Ebrahimi     vqdmlal(cond, dt, rd, rn, dm, index);
8553*f5c631daSSadaf Ebrahimi   }
Vqdmlal(DataType dt,QRegister rd,DRegister rn,DRegister dm,unsigned index)8554*f5c631daSSadaf Ebrahimi   void Vqdmlal(
8555*f5c631daSSadaf Ebrahimi       DataType dt, QRegister rd, DRegister rn, DRegister dm, unsigned index) {
8556*f5c631daSSadaf Ebrahimi     Vqdmlal(al, dt, rd, rn, dm, index);
8557*f5c631daSSadaf Ebrahimi   }
8558*f5c631daSSadaf Ebrahimi 
Vqdmlsl(Condition cond,DataType dt,QRegister rd,DRegister rn,DRegister rm)8559*f5c631daSSadaf Ebrahimi   void Vqdmlsl(
8560*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm) {
8561*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8562*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
8563*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8564*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8565*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8566*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8567*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8568*f5c631daSSadaf Ebrahimi     vqdmlsl(cond, dt, rd, rn, rm);
8569*f5c631daSSadaf Ebrahimi   }
Vqdmlsl(DataType dt,QRegister rd,DRegister rn,DRegister rm)8570*f5c631daSSadaf Ebrahimi   void Vqdmlsl(DataType dt, QRegister rd, DRegister rn, DRegister rm) {
8571*f5c631daSSadaf Ebrahimi     Vqdmlsl(al, dt, rd, rn, rm);
8572*f5c631daSSadaf Ebrahimi   }
8573*f5c631daSSadaf Ebrahimi 
Vqdmlsl(Condition cond,DataType dt,QRegister rd,DRegister rn,DRegister dm,unsigned index)8574*f5c631daSSadaf Ebrahimi   void Vqdmlsl(Condition cond,
8575*f5c631daSSadaf Ebrahimi                DataType dt,
8576*f5c631daSSadaf Ebrahimi                QRegister rd,
8577*f5c631daSSadaf Ebrahimi                DRegister rn,
8578*f5c631daSSadaf Ebrahimi                DRegister dm,
8579*f5c631daSSadaf Ebrahimi                unsigned index) {
8580*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8581*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
8582*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(dm));
8583*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8584*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8585*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8586*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8587*f5c631daSSadaf Ebrahimi     vqdmlsl(cond, dt, rd, rn, dm, index);
8588*f5c631daSSadaf Ebrahimi   }
Vqdmlsl(DataType dt,QRegister rd,DRegister rn,DRegister dm,unsigned index)8589*f5c631daSSadaf Ebrahimi   void Vqdmlsl(
8590*f5c631daSSadaf Ebrahimi       DataType dt, QRegister rd, DRegister rn, DRegister dm, unsigned index) {
8591*f5c631daSSadaf Ebrahimi     Vqdmlsl(al, dt, rd, rn, dm, index);
8592*f5c631daSSadaf Ebrahimi   }
8593*f5c631daSSadaf Ebrahimi 
Vqdmulh(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)8594*f5c631daSSadaf Ebrahimi   void Vqdmulh(
8595*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
8596*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8597*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
8598*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8599*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8600*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8601*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8602*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8603*f5c631daSSadaf Ebrahimi     vqdmulh(cond, dt, rd, rn, rm);
8604*f5c631daSSadaf Ebrahimi   }
Vqdmulh(DataType dt,DRegister rd,DRegister rn,DRegister rm)8605*f5c631daSSadaf Ebrahimi   void Vqdmulh(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
8606*f5c631daSSadaf Ebrahimi     Vqdmulh(al, dt, rd, rn, rm);
8607*f5c631daSSadaf Ebrahimi   }
8608*f5c631daSSadaf Ebrahimi 
Vqdmulh(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)8609*f5c631daSSadaf Ebrahimi   void Vqdmulh(
8610*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
8611*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8612*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
8613*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8614*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8615*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8616*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8617*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8618*f5c631daSSadaf Ebrahimi     vqdmulh(cond, dt, rd, rn, rm);
8619*f5c631daSSadaf Ebrahimi   }
Vqdmulh(DataType dt,QRegister rd,QRegister rn,QRegister rm)8620*f5c631daSSadaf Ebrahimi   void Vqdmulh(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
8621*f5c631daSSadaf Ebrahimi     Vqdmulh(al, dt, rd, rn, rm);
8622*f5c631daSSadaf Ebrahimi   }
8623*f5c631daSSadaf Ebrahimi 
Vqdmulh(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegisterLane rm)8624*f5c631daSSadaf Ebrahimi   void Vqdmulh(Condition cond,
8625*f5c631daSSadaf Ebrahimi                DataType dt,
8626*f5c631daSSadaf Ebrahimi                DRegister rd,
8627*f5c631daSSadaf Ebrahimi                DRegister rn,
8628*f5c631daSSadaf Ebrahimi                DRegisterLane rm) {
8629*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8630*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
8631*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8632*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8633*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8634*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8635*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8636*f5c631daSSadaf Ebrahimi     vqdmulh(cond, dt, rd, rn, rm);
8637*f5c631daSSadaf Ebrahimi   }
Vqdmulh(DataType dt,DRegister rd,DRegister rn,DRegisterLane rm)8638*f5c631daSSadaf Ebrahimi   void Vqdmulh(DataType dt, DRegister rd, DRegister rn, DRegisterLane rm) {
8639*f5c631daSSadaf Ebrahimi     Vqdmulh(al, dt, rd, rn, rm);
8640*f5c631daSSadaf Ebrahimi   }
8641*f5c631daSSadaf Ebrahimi 
Vqdmulh(Condition cond,DataType dt,QRegister rd,QRegister rn,DRegisterLane rm)8642*f5c631daSSadaf Ebrahimi   void Vqdmulh(Condition cond,
8643*f5c631daSSadaf Ebrahimi                DataType dt,
8644*f5c631daSSadaf Ebrahimi                QRegister rd,
8645*f5c631daSSadaf Ebrahimi                QRegister rn,
8646*f5c631daSSadaf Ebrahimi                DRegisterLane rm) {
8647*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8648*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
8649*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8650*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8651*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8652*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8653*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8654*f5c631daSSadaf Ebrahimi     vqdmulh(cond, dt, rd, rn, rm);
8655*f5c631daSSadaf Ebrahimi   }
Vqdmulh(DataType dt,QRegister rd,QRegister rn,DRegisterLane rm)8656*f5c631daSSadaf Ebrahimi   void Vqdmulh(DataType dt, QRegister rd, QRegister rn, DRegisterLane rm) {
8657*f5c631daSSadaf Ebrahimi     Vqdmulh(al, dt, rd, rn, rm);
8658*f5c631daSSadaf Ebrahimi   }
8659*f5c631daSSadaf Ebrahimi 
Vqdmull(Condition cond,DataType dt,QRegister rd,DRegister rn,DRegister rm)8660*f5c631daSSadaf Ebrahimi   void Vqdmull(
8661*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm) {
8662*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8663*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
8664*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8665*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8666*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8667*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8668*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8669*f5c631daSSadaf Ebrahimi     vqdmull(cond, dt, rd, rn, rm);
8670*f5c631daSSadaf Ebrahimi   }
Vqdmull(DataType dt,QRegister rd,DRegister rn,DRegister rm)8671*f5c631daSSadaf Ebrahimi   void Vqdmull(DataType dt, QRegister rd, DRegister rn, DRegister rm) {
8672*f5c631daSSadaf Ebrahimi     Vqdmull(al, dt, rd, rn, rm);
8673*f5c631daSSadaf Ebrahimi   }
8674*f5c631daSSadaf Ebrahimi 
Vqdmull(Condition cond,DataType dt,QRegister rd,DRegister rn,DRegisterLane rm)8675*f5c631daSSadaf Ebrahimi   void Vqdmull(Condition cond,
8676*f5c631daSSadaf Ebrahimi                DataType dt,
8677*f5c631daSSadaf Ebrahimi                QRegister rd,
8678*f5c631daSSadaf Ebrahimi                DRegister rn,
8679*f5c631daSSadaf Ebrahimi                DRegisterLane rm) {
8680*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8681*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
8682*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8683*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8684*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8685*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8686*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8687*f5c631daSSadaf Ebrahimi     vqdmull(cond, dt, rd, rn, rm);
8688*f5c631daSSadaf Ebrahimi   }
Vqdmull(DataType dt,QRegister rd,DRegister rn,DRegisterLane rm)8689*f5c631daSSadaf Ebrahimi   void Vqdmull(DataType dt, QRegister rd, DRegister rn, DRegisterLane rm) {
8690*f5c631daSSadaf Ebrahimi     Vqdmull(al, dt, rd, rn, rm);
8691*f5c631daSSadaf Ebrahimi   }
8692*f5c631daSSadaf Ebrahimi 
Vqmovn(Condition cond,DataType dt,DRegister rd,QRegister rm)8693*f5c631daSSadaf Ebrahimi   void Vqmovn(Condition cond, DataType dt, DRegister rd, QRegister rm) {
8694*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8695*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8696*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8697*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8698*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8699*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8700*f5c631daSSadaf Ebrahimi     vqmovn(cond, dt, rd, rm);
8701*f5c631daSSadaf Ebrahimi   }
Vqmovn(DataType dt,DRegister rd,QRegister rm)8702*f5c631daSSadaf Ebrahimi   void Vqmovn(DataType dt, DRegister rd, QRegister rm) {
8703*f5c631daSSadaf Ebrahimi     Vqmovn(al, dt, rd, rm);
8704*f5c631daSSadaf Ebrahimi   }
8705*f5c631daSSadaf Ebrahimi 
Vqmovun(Condition cond,DataType dt,DRegister rd,QRegister rm)8706*f5c631daSSadaf Ebrahimi   void Vqmovun(Condition cond, DataType dt, DRegister rd, QRegister rm) {
8707*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8708*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8709*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8710*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8711*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8712*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8713*f5c631daSSadaf Ebrahimi     vqmovun(cond, dt, rd, rm);
8714*f5c631daSSadaf Ebrahimi   }
Vqmovun(DataType dt,DRegister rd,QRegister rm)8715*f5c631daSSadaf Ebrahimi   void Vqmovun(DataType dt, DRegister rd, QRegister rm) {
8716*f5c631daSSadaf Ebrahimi     Vqmovun(al, dt, rd, rm);
8717*f5c631daSSadaf Ebrahimi   }
8718*f5c631daSSadaf Ebrahimi 
Vqneg(Condition cond,DataType dt,DRegister rd,DRegister rm)8719*f5c631daSSadaf Ebrahimi   void Vqneg(Condition cond, DataType dt, DRegister rd, DRegister rm) {
8720*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8721*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8722*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8723*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8724*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8725*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8726*f5c631daSSadaf Ebrahimi     vqneg(cond, dt, rd, rm);
8727*f5c631daSSadaf Ebrahimi   }
Vqneg(DataType dt,DRegister rd,DRegister rm)8728*f5c631daSSadaf Ebrahimi   void Vqneg(DataType dt, DRegister rd, DRegister rm) { Vqneg(al, dt, rd, rm); }
8729*f5c631daSSadaf Ebrahimi 
Vqneg(Condition cond,DataType dt,QRegister rd,QRegister rm)8730*f5c631daSSadaf Ebrahimi   void Vqneg(Condition cond, DataType dt, QRegister rd, QRegister rm) {
8731*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8732*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8733*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8734*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8735*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8736*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8737*f5c631daSSadaf Ebrahimi     vqneg(cond, dt, rd, rm);
8738*f5c631daSSadaf Ebrahimi   }
Vqneg(DataType dt,QRegister rd,QRegister rm)8739*f5c631daSSadaf Ebrahimi   void Vqneg(DataType dt, QRegister rd, QRegister rm) { Vqneg(al, dt, rd, rm); }
8740*f5c631daSSadaf Ebrahimi 
Vqrdmulh(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)8741*f5c631daSSadaf Ebrahimi   void Vqrdmulh(
8742*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
8743*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8744*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
8745*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8746*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8747*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8748*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8749*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8750*f5c631daSSadaf Ebrahimi     vqrdmulh(cond, dt, rd, rn, rm);
8751*f5c631daSSadaf Ebrahimi   }
Vqrdmulh(DataType dt,DRegister rd,DRegister rn,DRegister rm)8752*f5c631daSSadaf Ebrahimi   void Vqrdmulh(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
8753*f5c631daSSadaf Ebrahimi     Vqrdmulh(al, dt, rd, rn, rm);
8754*f5c631daSSadaf Ebrahimi   }
8755*f5c631daSSadaf Ebrahimi 
Vqrdmulh(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)8756*f5c631daSSadaf Ebrahimi   void Vqrdmulh(
8757*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
8758*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8759*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
8760*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8761*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8762*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8763*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8764*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8765*f5c631daSSadaf Ebrahimi     vqrdmulh(cond, dt, rd, rn, rm);
8766*f5c631daSSadaf Ebrahimi   }
Vqrdmulh(DataType dt,QRegister rd,QRegister rn,QRegister rm)8767*f5c631daSSadaf Ebrahimi   void Vqrdmulh(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
8768*f5c631daSSadaf Ebrahimi     Vqrdmulh(al, dt, rd, rn, rm);
8769*f5c631daSSadaf Ebrahimi   }
8770*f5c631daSSadaf Ebrahimi 
Vqrdmulh(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegisterLane rm)8771*f5c631daSSadaf Ebrahimi   void Vqrdmulh(Condition cond,
8772*f5c631daSSadaf Ebrahimi                 DataType dt,
8773*f5c631daSSadaf Ebrahimi                 DRegister rd,
8774*f5c631daSSadaf Ebrahimi                 DRegister rn,
8775*f5c631daSSadaf Ebrahimi                 DRegisterLane rm) {
8776*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8777*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
8778*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8779*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8780*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8781*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8782*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8783*f5c631daSSadaf Ebrahimi     vqrdmulh(cond, dt, rd, rn, rm);
8784*f5c631daSSadaf Ebrahimi   }
Vqrdmulh(DataType dt,DRegister rd,DRegister rn,DRegisterLane rm)8785*f5c631daSSadaf Ebrahimi   void Vqrdmulh(DataType dt, DRegister rd, DRegister rn, DRegisterLane rm) {
8786*f5c631daSSadaf Ebrahimi     Vqrdmulh(al, dt, rd, rn, rm);
8787*f5c631daSSadaf Ebrahimi   }
8788*f5c631daSSadaf Ebrahimi 
Vqrdmulh(Condition cond,DataType dt,QRegister rd,QRegister rn,DRegisterLane rm)8789*f5c631daSSadaf Ebrahimi   void Vqrdmulh(Condition cond,
8790*f5c631daSSadaf Ebrahimi                 DataType dt,
8791*f5c631daSSadaf Ebrahimi                 QRegister rd,
8792*f5c631daSSadaf Ebrahimi                 QRegister rn,
8793*f5c631daSSadaf Ebrahimi                 DRegisterLane rm) {
8794*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8795*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
8796*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8797*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8798*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8799*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8800*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8801*f5c631daSSadaf Ebrahimi     vqrdmulh(cond, dt, rd, rn, rm);
8802*f5c631daSSadaf Ebrahimi   }
Vqrdmulh(DataType dt,QRegister rd,QRegister rn,DRegisterLane rm)8803*f5c631daSSadaf Ebrahimi   void Vqrdmulh(DataType dt, QRegister rd, QRegister rn, DRegisterLane rm) {
8804*f5c631daSSadaf Ebrahimi     Vqrdmulh(al, dt, rd, rn, rm);
8805*f5c631daSSadaf Ebrahimi   }
8806*f5c631daSSadaf Ebrahimi 
Vqrshl(Condition cond,DataType dt,DRegister rd,DRegister rm,DRegister rn)8807*f5c631daSSadaf Ebrahimi   void Vqrshl(
8808*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rm, DRegister rn) {
8809*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8810*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8811*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
8812*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8813*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8814*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8815*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8816*f5c631daSSadaf Ebrahimi     vqrshl(cond, dt, rd, rm, rn);
8817*f5c631daSSadaf Ebrahimi   }
Vqrshl(DataType dt,DRegister rd,DRegister rm,DRegister rn)8818*f5c631daSSadaf Ebrahimi   void Vqrshl(DataType dt, DRegister rd, DRegister rm, DRegister rn) {
8819*f5c631daSSadaf Ebrahimi     Vqrshl(al, dt, rd, rm, rn);
8820*f5c631daSSadaf Ebrahimi   }
8821*f5c631daSSadaf Ebrahimi 
Vqrshl(Condition cond,DataType dt,QRegister rd,QRegister rm,QRegister rn)8822*f5c631daSSadaf Ebrahimi   void Vqrshl(
8823*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, QRegister rm, QRegister rn) {
8824*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8825*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8826*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
8827*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8828*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8829*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8830*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8831*f5c631daSSadaf Ebrahimi     vqrshl(cond, dt, rd, rm, rn);
8832*f5c631daSSadaf Ebrahimi   }
Vqrshl(DataType dt,QRegister rd,QRegister rm,QRegister rn)8833*f5c631daSSadaf Ebrahimi   void Vqrshl(DataType dt, QRegister rd, QRegister rm, QRegister rn) {
8834*f5c631daSSadaf Ebrahimi     Vqrshl(al, dt, rd, rm, rn);
8835*f5c631daSSadaf Ebrahimi   }
8836*f5c631daSSadaf Ebrahimi 
Vqrshrn(Condition cond,DataType dt,DRegister rd,QRegister rm,const QOperand & operand)8837*f5c631daSSadaf Ebrahimi   void Vqrshrn(Condition cond,
8838*f5c631daSSadaf Ebrahimi                DataType dt,
8839*f5c631daSSadaf Ebrahimi                DRegister rd,
8840*f5c631daSSadaf Ebrahimi                QRegister rm,
8841*f5c631daSSadaf Ebrahimi                const QOperand& operand) {
8842*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8843*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8844*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
8845*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8846*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8847*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8848*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8849*f5c631daSSadaf Ebrahimi     vqrshrn(cond, dt, rd, rm, operand);
8850*f5c631daSSadaf Ebrahimi   }
Vqrshrn(DataType dt,DRegister rd,QRegister rm,const QOperand & operand)8851*f5c631daSSadaf Ebrahimi   void Vqrshrn(DataType dt,
8852*f5c631daSSadaf Ebrahimi                DRegister rd,
8853*f5c631daSSadaf Ebrahimi                QRegister rm,
8854*f5c631daSSadaf Ebrahimi                const QOperand& operand) {
8855*f5c631daSSadaf Ebrahimi     Vqrshrn(al, dt, rd, rm, operand);
8856*f5c631daSSadaf Ebrahimi   }
8857*f5c631daSSadaf Ebrahimi 
Vqrshrun(Condition cond,DataType dt,DRegister rd,QRegister rm,const QOperand & operand)8858*f5c631daSSadaf Ebrahimi   void Vqrshrun(Condition cond,
8859*f5c631daSSadaf Ebrahimi                 DataType dt,
8860*f5c631daSSadaf Ebrahimi                 DRegister rd,
8861*f5c631daSSadaf Ebrahimi                 QRegister rm,
8862*f5c631daSSadaf Ebrahimi                 const QOperand& operand) {
8863*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8864*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8865*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
8866*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8867*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8868*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8869*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8870*f5c631daSSadaf Ebrahimi     vqrshrun(cond, dt, rd, rm, operand);
8871*f5c631daSSadaf Ebrahimi   }
Vqrshrun(DataType dt,DRegister rd,QRegister rm,const QOperand & operand)8872*f5c631daSSadaf Ebrahimi   void Vqrshrun(DataType dt,
8873*f5c631daSSadaf Ebrahimi                 DRegister rd,
8874*f5c631daSSadaf Ebrahimi                 QRegister rm,
8875*f5c631daSSadaf Ebrahimi                 const QOperand& operand) {
8876*f5c631daSSadaf Ebrahimi     Vqrshrun(al, dt, rd, rm, operand);
8877*f5c631daSSadaf Ebrahimi   }
8878*f5c631daSSadaf Ebrahimi 
Vqshl(Condition cond,DataType dt,DRegister rd,DRegister rm,const DOperand & operand)8879*f5c631daSSadaf Ebrahimi   void Vqshl(Condition cond,
8880*f5c631daSSadaf Ebrahimi              DataType dt,
8881*f5c631daSSadaf Ebrahimi              DRegister rd,
8882*f5c631daSSadaf Ebrahimi              DRegister rm,
8883*f5c631daSSadaf Ebrahimi              const DOperand& operand) {
8884*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8885*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8886*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
8887*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8888*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8889*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8890*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8891*f5c631daSSadaf Ebrahimi     vqshl(cond, dt, rd, rm, operand);
8892*f5c631daSSadaf Ebrahimi   }
Vqshl(DataType dt,DRegister rd,DRegister rm,const DOperand & operand)8893*f5c631daSSadaf Ebrahimi   void Vqshl(DataType dt, DRegister rd, DRegister rm, const DOperand& operand) {
8894*f5c631daSSadaf Ebrahimi     Vqshl(al, dt, rd, rm, operand);
8895*f5c631daSSadaf Ebrahimi   }
8896*f5c631daSSadaf Ebrahimi 
Vqshl(Condition cond,DataType dt,QRegister rd,QRegister rm,const QOperand & operand)8897*f5c631daSSadaf Ebrahimi   void Vqshl(Condition cond,
8898*f5c631daSSadaf Ebrahimi              DataType dt,
8899*f5c631daSSadaf Ebrahimi              QRegister rd,
8900*f5c631daSSadaf Ebrahimi              QRegister rm,
8901*f5c631daSSadaf Ebrahimi              const QOperand& operand) {
8902*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8903*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8904*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
8905*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8906*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8907*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8908*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8909*f5c631daSSadaf Ebrahimi     vqshl(cond, dt, rd, rm, operand);
8910*f5c631daSSadaf Ebrahimi   }
Vqshl(DataType dt,QRegister rd,QRegister rm,const QOperand & operand)8911*f5c631daSSadaf Ebrahimi   void Vqshl(DataType dt, QRegister rd, QRegister rm, const QOperand& operand) {
8912*f5c631daSSadaf Ebrahimi     Vqshl(al, dt, rd, rm, operand);
8913*f5c631daSSadaf Ebrahimi   }
8914*f5c631daSSadaf Ebrahimi 
Vqshlu(Condition cond,DataType dt,DRegister rd,DRegister rm,const DOperand & operand)8915*f5c631daSSadaf Ebrahimi   void Vqshlu(Condition cond,
8916*f5c631daSSadaf Ebrahimi               DataType dt,
8917*f5c631daSSadaf Ebrahimi               DRegister rd,
8918*f5c631daSSadaf Ebrahimi               DRegister rm,
8919*f5c631daSSadaf Ebrahimi               const DOperand& operand) {
8920*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8921*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8922*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
8923*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8924*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8925*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8926*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8927*f5c631daSSadaf Ebrahimi     vqshlu(cond, dt, rd, rm, operand);
8928*f5c631daSSadaf Ebrahimi   }
Vqshlu(DataType dt,DRegister rd,DRegister rm,const DOperand & operand)8929*f5c631daSSadaf Ebrahimi   void Vqshlu(DataType dt,
8930*f5c631daSSadaf Ebrahimi               DRegister rd,
8931*f5c631daSSadaf Ebrahimi               DRegister rm,
8932*f5c631daSSadaf Ebrahimi               const DOperand& operand) {
8933*f5c631daSSadaf Ebrahimi     Vqshlu(al, dt, rd, rm, operand);
8934*f5c631daSSadaf Ebrahimi   }
8935*f5c631daSSadaf Ebrahimi 
Vqshlu(Condition cond,DataType dt,QRegister rd,QRegister rm,const QOperand & operand)8936*f5c631daSSadaf Ebrahimi   void Vqshlu(Condition cond,
8937*f5c631daSSadaf Ebrahimi               DataType dt,
8938*f5c631daSSadaf Ebrahimi               QRegister rd,
8939*f5c631daSSadaf Ebrahimi               QRegister rm,
8940*f5c631daSSadaf Ebrahimi               const QOperand& operand) {
8941*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8942*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8943*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
8944*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8945*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8946*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8947*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8948*f5c631daSSadaf Ebrahimi     vqshlu(cond, dt, rd, rm, operand);
8949*f5c631daSSadaf Ebrahimi   }
Vqshlu(DataType dt,QRegister rd,QRegister rm,const QOperand & operand)8950*f5c631daSSadaf Ebrahimi   void Vqshlu(DataType dt,
8951*f5c631daSSadaf Ebrahimi               QRegister rd,
8952*f5c631daSSadaf Ebrahimi               QRegister rm,
8953*f5c631daSSadaf Ebrahimi               const QOperand& operand) {
8954*f5c631daSSadaf Ebrahimi     Vqshlu(al, dt, rd, rm, operand);
8955*f5c631daSSadaf Ebrahimi   }
8956*f5c631daSSadaf Ebrahimi 
Vqshrn(Condition cond,DataType dt,DRegister rd,QRegister rm,const QOperand & operand)8957*f5c631daSSadaf Ebrahimi   void Vqshrn(Condition cond,
8958*f5c631daSSadaf Ebrahimi               DataType dt,
8959*f5c631daSSadaf Ebrahimi               DRegister rd,
8960*f5c631daSSadaf Ebrahimi               QRegister rm,
8961*f5c631daSSadaf Ebrahimi               const QOperand& operand) {
8962*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8963*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8964*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
8965*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8966*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8967*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8968*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8969*f5c631daSSadaf Ebrahimi     vqshrn(cond, dt, rd, rm, operand);
8970*f5c631daSSadaf Ebrahimi   }
Vqshrn(DataType dt,DRegister rd,QRegister rm,const QOperand & operand)8971*f5c631daSSadaf Ebrahimi   void Vqshrn(DataType dt,
8972*f5c631daSSadaf Ebrahimi               DRegister rd,
8973*f5c631daSSadaf Ebrahimi               QRegister rm,
8974*f5c631daSSadaf Ebrahimi               const QOperand& operand) {
8975*f5c631daSSadaf Ebrahimi     Vqshrn(al, dt, rd, rm, operand);
8976*f5c631daSSadaf Ebrahimi   }
8977*f5c631daSSadaf Ebrahimi 
Vqshrun(Condition cond,DataType dt,DRegister rd,QRegister rm,const QOperand & operand)8978*f5c631daSSadaf Ebrahimi   void Vqshrun(Condition cond,
8979*f5c631daSSadaf Ebrahimi                DataType dt,
8980*f5c631daSSadaf Ebrahimi                DRegister rd,
8981*f5c631daSSadaf Ebrahimi                QRegister rm,
8982*f5c631daSSadaf Ebrahimi                const QOperand& operand) {
8983*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
8984*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
8985*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
8986*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
8987*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
8988*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
8989*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
8990*f5c631daSSadaf Ebrahimi     vqshrun(cond, dt, rd, rm, operand);
8991*f5c631daSSadaf Ebrahimi   }
Vqshrun(DataType dt,DRegister rd,QRegister rm,const QOperand & operand)8992*f5c631daSSadaf Ebrahimi   void Vqshrun(DataType dt,
8993*f5c631daSSadaf Ebrahimi                DRegister rd,
8994*f5c631daSSadaf Ebrahimi                QRegister rm,
8995*f5c631daSSadaf Ebrahimi                const QOperand& operand) {
8996*f5c631daSSadaf Ebrahimi     Vqshrun(al, dt, rd, rm, operand);
8997*f5c631daSSadaf Ebrahimi   }
8998*f5c631daSSadaf Ebrahimi 
Vqsub(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)8999*f5c631daSSadaf Ebrahimi   void Vqsub(
9000*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
9001*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9002*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
9003*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9004*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9005*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9006*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9007*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9008*f5c631daSSadaf Ebrahimi     vqsub(cond, dt, rd, rn, rm);
9009*f5c631daSSadaf Ebrahimi   }
Vqsub(DataType dt,DRegister rd,DRegister rn,DRegister rm)9010*f5c631daSSadaf Ebrahimi   void Vqsub(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
9011*f5c631daSSadaf Ebrahimi     Vqsub(al, dt, rd, rn, rm);
9012*f5c631daSSadaf Ebrahimi   }
9013*f5c631daSSadaf Ebrahimi 
Vqsub(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)9014*f5c631daSSadaf Ebrahimi   void Vqsub(
9015*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
9016*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9017*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
9018*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9019*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9020*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9021*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9022*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9023*f5c631daSSadaf Ebrahimi     vqsub(cond, dt, rd, rn, rm);
9024*f5c631daSSadaf Ebrahimi   }
Vqsub(DataType dt,QRegister rd,QRegister rn,QRegister rm)9025*f5c631daSSadaf Ebrahimi   void Vqsub(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
9026*f5c631daSSadaf Ebrahimi     Vqsub(al, dt, rd, rn, rm);
9027*f5c631daSSadaf Ebrahimi   }
9028*f5c631daSSadaf Ebrahimi 
Vraddhn(Condition cond,DataType dt,DRegister rd,QRegister rn,QRegister rm)9029*f5c631daSSadaf Ebrahimi   void Vraddhn(
9030*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, QRegister rn, QRegister rm) {
9031*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9032*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
9033*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9034*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9035*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9036*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9037*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9038*f5c631daSSadaf Ebrahimi     vraddhn(cond, dt, rd, rn, rm);
9039*f5c631daSSadaf Ebrahimi   }
Vraddhn(DataType dt,DRegister rd,QRegister rn,QRegister rm)9040*f5c631daSSadaf Ebrahimi   void Vraddhn(DataType dt, DRegister rd, QRegister rn, QRegister rm) {
9041*f5c631daSSadaf Ebrahimi     Vraddhn(al, dt, rd, rn, rm);
9042*f5c631daSSadaf Ebrahimi   }
9043*f5c631daSSadaf Ebrahimi 
Vrecpe(Condition cond,DataType dt,DRegister rd,DRegister rm)9044*f5c631daSSadaf Ebrahimi   void Vrecpe(Condition cond, DataType dt, DRegister rd, DRegister rm) {
9045*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9046*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9047*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9048*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9049*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9050*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9051*f5c631daSSadaf Ebrahimi     vrecpe(cond, dt, rd, rm);
9052*f5c631daSSadaf Ebrahimi   }
Vrecpe(DataType dt,DRegister rd,DRegister rm)9053*f5c631daSSadaf Ebrahimi   void Vrecpe(DataType dt, DRegister rd, DRegister rm) {
9054*f5c631daSSadaf Ebrahimi     Vrecpe(al, dt, rd, rm);
9055*f5c631daSSadaf Ebrahimi   }
9056*f5c631daSSadaf Ebrahimi 
Vrecpe(Condition cond,DataType dt,QRegister rd,QRegister rm)9057*f5c631daSSadaf Ebrahimi   void Vrecpe(Condition cond, DataType dt, QRegister rd, QRegister rm) {
9058*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9059*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9060*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9061*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9062*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9063*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9064*f5c631daSSadaf Ebrahimi     vrecpe(cond, dt, rd, rm);
9065*f5c631daSSadaf Ebrahimi   }
Vrecpe(DataType dt,QRegister rd,QRegister rm)9066*f5c631daSSadaf Ebrahimi   void Vrecpe(DataType dt, QRegister rd, QRegister rm) {
9067*f5c631daSSadaf Ebrahimi     Vrecpe(al, dt, rd, rm);
9068*f5c631daSSadaf Ebrahimi   }
9069*f5c631daSSadaf Ebrahimi 
Vrecps(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)9070*f5c631daSSadaf Ebrahimi   void Vrecps(
9071*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
9072*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9073*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
9074*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9075*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9076*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9077*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9078*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9079*f5c631daSSadaf Ebrahimi     vrecps(cond, dt, rd, rn, rm);
9080*f5c631daSSadaf Ebrahimi   }
Vrecps(DataType dt,DRegister rd,DRegister rn,DRegister rm)9081*f5c631daSSadaf Ebrahimi   void Vrecps(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
9082*f5c631daSSadaf Ebrahimi     Vrecps(al, dt, rd, rn, rm);
9083*f5c631daSSadaf Ebrahimi   }
9084*f5c631daSSadaf Ebrahimi 
Vrecps(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)9085*f5c631daSSadaf Ebrahimi   void Vrecps(
9086*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
9087*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9088*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
9089*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9090*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9091*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9092*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9093*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9094*f5c631daSSadaf Ebrahimi     vrecps(cond, dt, rd, rn, rm);
9095*f5c631daSSadaf Ebrahimi   }
Vrecps(DataType dt,QRegister rd,QRegister rn,QRegister rm)9096*f5c631daSSadaf Ebrahimi   void Vrecps(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
9097*f5c631daSSadaf Ebrahimi     Vrecps(al, dt, rd, rn, rm);
9098*f5c631daSSadaf Ebrahimi   }
9099*f5c631daSSadaf Ebrahimi 
Vrev16(Condition cond,DataType dt,DRegister rd,DRegister rm)9100*f5c631daSSadaf Ebrahimi   void Vrev16(Condition cond, DataType dt, DRegister rd, DRegister rm) {
9101*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9102*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9103*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9104*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9105*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9106*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9107*f5c631daSSadaf Ebrahimi     vrev16(cond, dt, rd, rm);
9108*f5c631daSSadaf Ebrahimi   }
Vrev16(DataType dt,DRegister rd,DRegister rm)9109*f5c631daSSadaf Ebrahimi   void Vrev16(DataType dt, DRegister rd, DRegister rm) {
9110*f5c631daSSadaf Ebrahimi     Vrev16(al, dt, rd, rm);
9111*f5c631daSSadaf Ebrahimi   }
9112*f5c631daSSadaf Ebrahimi 
Vrev16(Condition cond,DataType dt,QRegister rd,QRegister rm)9113*f5c631daSSadaf Ebrahimi   void Vrev16(Condition cond, DataType dt, QRegister rd, QRegister rm) {
9114*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9115*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9116*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9117*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9118*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9119*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9120*f5c631daSSadaf Ebrahimi     vrev16(cond, dt, rd, rm);
9121*f5c631daSSadaf Ebrahimi   }
Vrev16(DataType dt,QRegister rd,QRegister rm)9122*f5c631daSSadaf Ebrahimi   void Vrev16(DataType dt, QRegister rd, QRegister rm) {
9123*f5c631daSSadaf Ebrahimi     Vrev16(al, dt, rd, rm);
9124*f5c631daSSadaf Ebrahimi   }
9125*f5c631daSSadaf Ebrahimi 
Vrev32(Condition cond,DataType dt,DRegister rd,DRegister rm)9126*f5c631daSSadaf Ebrahimi   void Vrev32(Condition cond, DataType dt, DRegister rd, DRegister rm) {
9127*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9128*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9129*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9130*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9131*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9132*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9133*f5c631daSSadaf Ebrahimi     vrev32(cond, dt, rd, rm);
9134*f5c631daSSadaf Ebrahimi   }
Vrev32(DataType dt,DRegister rd,DRegister rm)9135*f5c631daSSadaf Ebrahimi   void Vrev32(DataType dt, DRegister rd, DRegister rm) {
9136*f5c631daSSadaf Ebrahimi     Vrev32(al, dt, rd, rm);
9137*f5c631daSSadaf Ebrahimi   }
9138*f5c631daSSadaf Ebrahimi 
Vrev32(Condition cond,DataType dt,QRegister rd,QRegister rm)9139*f5c631daSSadaf Ebrahimi   void Vrev32(Condition cond, DataType dt, QRegister rd, QRegister rm) {
9140*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9141*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9142*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9143*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9144*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9145*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9146*f5c631daSSadaf Ebrahimi     vrev32(cond, dt, rd, rm);
9147*f5c631daSSadaf Ebrahimi   }
Vrev32(DataType dt,QRegister rd,QRegister rm)9148*f5c631daSSadaf Ebrahimi   void Vrev32(DataType dt, QRegister rd, QRegister rm) {
9149*f5c631daSSadaf Ebrahimi     Vrev32(al, dt, rd, rm);
9150*f5c631daSSadaf Ebrahimi   }
9151*f5c631daSSadaf Ebrahimi 
Vrev64(Condition cond,DataType dt,DRegister rd,DRegister rm)9152*f5c631daSSadaf Ebrahimi   void Vrev64(Condition cond, DataType dt, DRegister rd, DRegister rm) {
9153*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9154*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9155*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9156*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9157*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9158*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9159*f5c631daSSadaf Ebrahimi     vrev64(cond, dt, rd, rm);
9160*f5c631daSSadaf Ebrahimi   }
Vrev64(DataType dt,DRegister rd,DRegister rm)9161*f5c631daSSadaf Ebrahimi   void Vrev64(DataType dt, DRegister rd, DRegister rm) {
9162*f5c631daSSadaf Ebrahimi     Vrev64(al, dt, rd, rm);
9163*f5c631daSSadaf Ebrahimi   }
9164*f5c631daSSadaf Ebrahimi 
Vrev64(Condition cond,DataType dt,QRegister rd,QRegister rm)9165*f5c631daSSadaf Ebrahimi   void Vrev64(Condition cond, DataType dt, QRegister rd, QRegister rm) {
9166*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9167*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9168*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9169*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9170*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9171*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9172*f5c631daSSadaf Ebrahimi     vrev64(cond, dt, rd, rm);
9173*f5c631daSSadaf Ebrahimi   }
Vrev64(DataType dt,QRegister rd,QRegister rm)9174*f5c631daSSadaf Ebrahimi   void Vrev64(DataType dt, QRegister rd, QRegister rm) {
9175*f5c631daSSadaf Ebrahimi     Vrev64(al, dt, rd, rm);
9176*f5c631daSSadaf Ebrahimi   }
9177*f5c631daSSadaf Ebrahimi 
Vrhadd(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)9178*f5c631daSSadaf Ebrahimi   void Vrhadd(
9179*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
9180*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9181*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
9182*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9183*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9184*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9185*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9186*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9187*f5c631daSSadaf Ebrahimi     vrhadd(cond, dt, rd, rn, rm);
9188*f5c631daSSadaf Ebrahimi   }
Vrhadd(DataType dt,DRegister rd,DRegister rn,DRegister rm)9189*f5c631daSSadaf Ebrahimi   void Vrhadd(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
9190*f5c631daSSadaf Ebrahimi     Vrhadd(al, dt, rd, rn, rm);
9191*f5c631daSSadaf Ebrahimi   }
9192*f5c631daSSadaf Ebrahimi 
Vrhadd(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)9193*f5c631daSSadaf Ebrahimi   void Vrhadd(
9194*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
9195*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9196*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
9197*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9198*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9199*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9200*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9201*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9202*f5c631daSSadaf Ebrahimi     vrhadd(cond, dt, rd, rn, rm);
9203*f5c631daSSadaf Ebrahimi   }
Vrhadd(DataType dt,QRegister rd,QRegister rn,QRegister rm)9204*f5c631daSSadaf Ebrahimi   void Vrhadd(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
9205*f5c631daSSadaf Ebrahimi     Vrhadd(al, dt, rd, rn, rm);
9206*f5c631daSSadaf Ebrahimi   }
9207*f5c631daSSadaf Ebrahimi 
Vrinta(DataType dt,DRegister rd,DRegister rm)9208*f5c631daSSadaf Ebrahimi   void Vrinta(DataType dt, DRegister rd, DRegister rm) {
9209*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9210*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9211*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9212*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9213*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9214*f5c631daSSadaf Ebrahimi     vrinta(dt, rd, rm);
9215*f5c631daSSadaf Ebrahimi   }
9216*f5c631daSSadaf Ebrahimi 
Vrinta(DataType dt,QRegister rd,QRegister rm)9217*f5c631daSSadaf Ebrahimi   void Vrinta(DataType dt, QRegister rd, QRegister rm) {
9218*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9219*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9220*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9221*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9222*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9223*f5c631daSSadaf Ebrahimi     vrinta(dt, rd, rm);
9224*f5c631daSSadaf Ebrahimi   }
9225*f5c631daSSadaf Ebrahimi 
Vrinta(DataType dt,SRegister rd,SRegister rm)9226*f5c631daSSadaf Ebrahimi   void Vrinta(DataType dt, SRegister rd, SRegister rm) {
9227*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9228*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9229*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9230*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9231*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9232*f5c631daSSadaf Ebrahimi     vrinta(dt, rd, rm);
9233*f5c631daSSadaf Ebrahimi   }
9234*f5c631daSSadaf Ebrahimi 
Vrintm(DataType dt,DRegister rd,DRegister rm)9235*f5c631daSSadaf Ebrahimi   void Vrintm(DataType dt, DRegister rd, DRegister rm) {
9236*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9237*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9238*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9239*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9240*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9241*f5c631daSSadaf Ebrahimi     vrintm(dt, rd, rm);
9242*f5c631daSSadaf Ebrahimi   }
9243*f5c631daSSadaf Ebrahimi 
Vrintm(DataType dt,QRegister rd,QRegister rm)9244*f5c631daSSadaf Ebrahimi   void Vrintm(DataType dt, QRegister rd, QRegister rm) {
9245*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9246*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9247*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9248*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9249*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9250*f5c631daSSadaf Ebrahimi     vrintm(dt, rd, rm);
9251*f5c631daSSadaf Ebrahimi   }
9252*f5c631daSSadaf Ebrahimi 
Vrintm(DataType dt,SRegister rd,SRegister rm)9253*f5c631daSSadaf Ebrahimi   void Vrintm(DataType dt, SRegister rd, SRegister rm) {
9254*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9255*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9256*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9257*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9258*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9259*f5c631daSSadaf Ebrahimi     vrintm(dt, rd, rm);
9260*f5c631daSSadaf Ebrahimi   }
9261*f5c631daSSadaf Ebrahimi 
Vrintn(DataType dt,DRegister rd,DRegister rm)9262*f5c631daSSadaf Ebrahimi   void Vrintn(DataType dt, DRegister rd, DRegister rm) {
9263*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9264*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9265*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9266*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9267*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9268*f5c631daSSadaf Ebrahimi     vrintn(dt, rd, rm);
9269*f5c631daSSadaf Ebrahimi   }
9270*f5c631daSSadaf Ebrahimi 
Vrintn(DataType dt,QRegister rd,QRegister rm)9271*f5c631daSSadaf Ebrahimi   void Vrintn(DataType dt, QRegister rd, QRegister rm) {
9272*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9273*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9274*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9275*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9276*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9277*f5c631daSSadaf Ebrahimi     vrintn(dt, rd, rm);
9278*f5c631daSSadaf Ebrahimi   }
9279*f5c631daSSadaf Ebrahimi 
Vrintn(DataType dt,SRegister rd,SRegister rm)9280*f5c631daSSadaf Ebrahimi   void Vrintn(DataType dt, SRegister rd, SRegister rm) {
9281*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9282*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9283*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9284*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9285*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9286*f5c631daSSadaf Ebrahimi     vrintn(dt, rd, rm);
9287*f5c631daSSadaf Ebrahimi   }
9288*f5c631daSSadaf Ebrahimi 
Vrintp(DataType dt,DRegister rd,DRegister rm)9289*f5c631daSSadaf Ebrahimi   void Vrintp(DataType dt, DRegister rd, DRegister rm) {
9290*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9291*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9292*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9293*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9294*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9295*f5c631daSSadaf Ebrahimi     vrintp(dt, rd, rm);
9296*f5c631daSSadaf Ebrahimi   }
9297*f5c631daSSadaf Ebrahimi 
Vrintp(DataType dt,QRegister rd,QRegister rm)9298*f5c631daSSadaf Ebrahimi   void Vrintp(DataType dt, QRegister rd, QRegister rm) {
9299*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9300*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9301*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9302*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9303*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9304*f5c631daSSadaf Ebrahimi     vrintp(dt, rd, rm);
9305*f5c631daSSadaf Ebrahimi   }
9306*f5c631daSSadaf Ebrahimi 
Vrintp(DataType dt,SRegister rd,SRegister rm)9307*f5c631daSSadaf Ebrahimi   void Vrintp(DataType dt, SRegister rd, SRegister rm) {
9308*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9309*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9310*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9311*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9312*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9313*f5c631daSSadaf Ebrahimi     vrintp(dt, rd, rm);
9314*f5c631daSSadaf Ebrahimi   }
9315*f5c631daSSadaf Ebrahimi 
Vrintr(Condition cond,DataType dt,SRegister rd,SRegister rm)9316*f5c631daSSadaf Ebrahimi   void Vrintr(Condition cond, DataType dt, SRegister rd, SRegister rm) {
9317*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9318*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9319*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9320*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9321*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9322*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9323*f5c631daSSadaf Ebrahimi     vrintr(cond, dt, rd, rm);
9324*f5c631daSSadaf Ebrahimi   }
Vrintr(DataType dt,SRegister rd,SRegister rm)9325*f5c631daSSadaf Ebrahimi   void Vrintr(DataType dt, SRegister rd, SRegister rm) {
9326*f5c631daSSadaf Ebrahimi     Vrintr(al, dt, rd, rm);
9327*f5c631daSSadaf Ebrahimi   }
9328*f5c631daSSadaf Ebrahimi 
Vrintr(Condition cond,DataType dt,DRegister rd,DRegister rm)9329*f5c631daSSadaf Ebrahimi   void Vrintr(Condition cond, DataType dt, DRegister rd, DRegister rm) {
9330*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9331*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9332*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9333*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9334*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9335*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9336*f5c631daSSadaf Ebrahimi     vrintr(cond, dt, rd, rm);
9337*f5c631daSSadaf Ebrahimi   }
Vrintr(DataType dt,DRegister rd,DRegister rm)9338*f5c631daSSadaf Ebrahimi   void Vrintr(DataType dt, DRegister rd, DRegister rm) {
9339*f5c631daSSadaf Ebrahimi     Vrintr(al, dt, rd, rm);
9340*f5c631daSSadaf Ebrahimi   }
9341*f5c631daSSadaf Ebrahimi 
Vrintx(Condition cond,DataType dt,DRegister rd,DRegister rm)9342*f5c631daSSadaf Ebrahimi   void Vrintx(Condition cond, DataType dt, DRegister rd, DRegister rm) {
9343*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9344*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9345*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9346*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9347*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9348*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9349*f5c631daSSadaf Ebrahimi     vrintx(cond, dt, rd, rm);
9350*f5c631daSSadaf Ebrahimi   }
Vrintx(DataType dt,DRegister rd,DRegister rm)9351*f5c631daSSadaf Ebrahimi   void Vrintx(DataType dt, DRegister rd, DRegister rm) {
9352*f5c631daSSadaf Ebrahimi     Vrintx(al, dt, rd, rm);
9353*f5c631daSSadaf Ebrahimi   }
9354*f5c631daSSadaf Ebrahimi 
Vrintx(DataType dt,QRegister rd,QRegister rm)9355*f5c631daSSadaf Ebrahimi   void Vrintx(DataType dt, QRegister rd, QRegister rm) {
9356*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9357*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9358*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9359*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9360*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9361*f5c631daSSadaf Ebrahimi     vrintx(dt, rd, rm);
9362*f5c631daSSadaf Ebrahimi   }
9363*f5c631daSSadaf Ebrahimi 
Vrintx(Condition cond,DataType dt,SRegister rd,SRegister rm)9364*f5c631daSSadaf Ebrahimi   void Vrintx(Condition cond, DataType dt, SRegister rd, SRegister rm) {
9365*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9366*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9367*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9368*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9369*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9370*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9371*f5c631daSSadaf Ebrahimi     vrintx(cond, dt, rd, rm);
9372*f5c631daSSadaf Ebrahimi   }
Vrintx(DataType dt,SRegister rd,SRegister rm)9373*f5c631daSSadaf Ebrahimi   void Vrintx(DataType dt, SRegister rd, SRegister rm) {
9374*f5c631daSSadaf Ebrahimi     Vrintx(al, dt, rd, rm);
9375*f5c631daSSadaf Ebrahimi   }
9376*f5c631daSSadaf Ebrahimi 
Vrintz(Condition cond,DataType dt,DRegister rd,DRegister rm)9377*f5c631daSSadaf Ebrahimi   void Vrintz(Condition cond, DataType dt, DRegister rd, DRegister rm) {
9378*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9379*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9380*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9381*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9382*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9383*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9384*f5c631daSSadaf Ebrahimi     vrintz(cond, dt, rd, rm);
9385*f5c631daSSadaf Ebrahimi   }
Vrintz(DataType dt,DRegister rd,DRegister rm)9386*f5c631daSSadaf Ebrahimi   void Vrintz(DataType dt, DRegister rd, DRegister rm) {
9387*f5c631daSSadaf Ebrahimi     Vrintz(al, dt, rd, rm);
9388*f5c631daSSadaf Ebrahimi   }
9389*f5c631daSSadaf Ebrahimi 
Vrintz(DataType dt,QRegister rd,QRegister rm)9390*f5c631daSSadaf Ebrahimi   void Vrintz(DataType dt, QRegister rd, QRegister rm) {
9391*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9392*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9393*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9394*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9395*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9396*f5c631daSSadaf Ebrahimi     vrintz(dt, rd, rm);
9397*f5c631daSSadaf Ebrahimi   }
9398*f5c631daSSadaf Ebrahimi 
Vrintz(Condition cond,DataType dt,SRegister rd,SRegister rm)9399*f5c631daSSadaf Ebrahimi   void Vrintz(Condition cond, DataType dt, SRegister rd, SRegister rm) {
9400*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9401*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9402*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9403*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9404*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9405*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9406*f5c631daSSadaf Ebrahimi     vrintz(cond, dt, rd, rm);
9407*f5c631daSSadaf Ebrahimi   }
Vrintz(DataType dt,SRegister rd,SRegister rm)9408*f5c631daSSadaf Ebrahimi   void Vrintz(DataType dt, SRegister rd, SRegister rm) {
9409*f5c631daSSadaf Ebrahimi     Vrintz(al, dt, rd, rm);
9410*f5c631daSSadaf Ebrahimi   }
9411*f5c631daSSadaf Ebrahimi 
Vrshl(Condition cond,DataType dt,DRegister rd,DRegister rm,DRegister rn)9412*f5c631daSSadaf Ebrahimi   void Vrshl(
9413*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rm, DRegister rn) {
9414*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9415*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9416*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
9417*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9418*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9419*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9420*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9421*f5c631daSSadaf Ebrahimi     vrshl(cond, dt, rd, rm, rn);
9422*f5c631daSSadaf Ebrahimi   }
Vrshl(DataType dt,DRegister rd,DRegister rm,DRegister rn)9423*f5c631daSSadaf Ebrahimi   void Vrshl(DataType dt, DRegister rd, DRegister rm, DRegister rn) {
9424*f5c631daSSadaf Ebrahimi     Vrshl(al, dt, rd, rm, rn);
9425*f5c631daSSadaf Ebrahimi   }
9426*f5c631daSSadaf Ebrahimi 
Vrshl(Condition cond,DataType dt,QRegister rd,QRegister rm,QRegister rn)9427*f5c631daSSadaf Ebrahimi   void Vrshl(
9428*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, QRegister rm, QRegister rn) {
9429*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9430*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9431*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
9432*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9433*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9434*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9435*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9436*f5c631daSSadaf Ebrahimi     vrshl(cond, dt, rd, rm, rn);
9437*f5c631daSSadaf Ebrahimi   }
Vrshl(DataType dt,QRegister rd,QRegister rm,QRegister rn)9438*f5c631daSSadaf Ebrahimi   void Vrshl(DataType dt, QRegister rd, QRegister rm, QRegister rn) {
9439*f5c631daSSadaf Ebrahimi     Vrshl(al, dt, rd, rm, rn);
9440*f5c631daSSadaf Ebrahimi   }
9441*f5c631daSSadaf Ebrahimi 
Vrshr(Condition cond,DataType dt,DRegister rd,DRegister rm,const DOperand & operand)9442*f5c631daSSadaf Ebrahimi   void Vrshr(Condition cond,
9443*f5c631daSSadaf Ebrahimi              DataType dt,
9444*f5c631daSSadaf Ebrahimi              DRegister rd,
9445*f5c631daSSadaf Ebrahimi              DRegister rm,
9446*f5c631daSSadaf Ebrahimi              const DOperand& operand) {
9447*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9448*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9449*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
9450*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9451*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9452*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9453*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9454*f5c631daSSadaf Ebrahimi     vrshr(cond, dt, rd, rm, operand);
9455*f5c631daSSadaf Ebrahimi   }
Vrshr(DataType dt,DRegister rd,DRegister rm,const DOperand & operand)9456*f5c631daSSadaf Ebrahimi   void Vrshr(DataType dt, DRegister rd, DRegister rm, const DOperand& operand) {
9457*f5c631daSSadaf Ebrahimi     Vrshr(al, dt, rd, rm, operand);
9458*f5c631daSSadaf Ebrahimi   }
9459*f5c631daSSadaf Ebrahimi 
Vrshr(Condition cond,DataType dt,QRegister rd,QRegister rm,const QOperand & operand)9460*f5c631daSSadaf Ebrahimi   void Vrshr(Condition cond,
9461*f5c631daSSadaf Ebrahimi              DataType dt,
9462*f5c631daSSadaf Ebrahimi              QRegister rd,
9463*f5c631daSSadaf Ebrahimi              QRegister rm,
9464*f5c631daSSadaf Ebrahimi              const QOperand& operand) {
9465*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9466*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9467*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
9468*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9469*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9470*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9471*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9472*f5c631daSSadaf Ebrahimi     vrshr(cond, dt, rd, rm, operand);
9473*f5c631daSSadaf Ebrahimi   }
Vrshr(DataType dt,QRegister rd,QRegister rm,const QOperand & operand)9474*f5c631daSSadaf Ebrahimi   void Vrshr(DataType dt, QRegister rd, QRegister rm, const QOperand& operand) {
9475*f5c631daSSadaf Ebrahimi     Vrshr(al, dt, rd, rm, operand);
9476*f5c631daSSadaf Ebrahimi   }
9477*f5c631daSSadaf Ebrahimi 
Vrshrn(Condition cond,DataType dt,DRegister rd,QRegister rm,const QOperand & operand)9478*f5c631daSSadaf Ebrahimi   void Vrshrn(Condition cond,
9479*f5c631daSSadaf Ebrahimi               DataType dt,
9480*f5c631daSSadaf Ebrahimi               DRegister rd,
9481*f5c631daSSadaf Ebrahimi               QRegister rm,
9482*f5c631daSSadaf Ebrahimi               const QOperand& operand) {
9483*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9484*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9485*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
9486*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9487*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9488*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9489*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9490*f5c631daSSadaf Ebrahimi     vrshrn(cond, dt, rd, rm, operand);
9491*f5c631daSSadaf Ebrahimi   }
Vrshrn(DataType dt,DRegister rd,QRegister rm,const QOperand & operand)9492*f5c631daSSadaf Ebrahimi   void Vrshrn(DataType dt,
9493*f5c631daSSadaf Ebrahimi               DRegister rd,
9494*f5c631daSSadaf Ebrahimi               QRegister rm,
9495*f5c631daSSadaf Ebrahimi               const QOperand& operand) {
9496*f5c631daSSadaf Ebrahimi     Vrshrn(al, dt, rd, rm, operand);
9497*f5c631daSSadaf Ebrahimi   }
9498*f5c631daSSadaf Ebrahimi 
Vrsqrte(Condition cond,DataType dt,DRegister rd,DRegister rm)9499*f5c631daSSadaf Ebrahimi   void Vrsqrte(Condition cond, DataType dt, DRegister rd, DRegister rm) {
9500*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9501*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9502*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9503*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9504*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9505*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9506*f5c631daSSadaf Ebrahimi     vrsqrte(cond, dt, rd, rm);
9507*f5c631daSSadaf Ebrahimi   }
Vrsqrte(DataType dt,DRegister rd,DRegister rm)9508*f5c631daSSadaf Ebrahimi   void Vrsqrte(DataType dt, DRegister rd, DRegister rm) {
9509*f5c631daSSadaf Ebrahimi     Vrsqrte(al, dt, rd, rm);
9510*f5c631daSSadaf Ebrahimi   }
9511*f5c631daSSadaf Ebrahimi 
Vrsqrte(Condition cond,DataType dt,QRegister rd,QRegister rm)9512*f5c631daSSadaf Ebrahimi   void Vrsqrte(Condition cond, DataType dt, QRegister rd, QRegister rm) {
9513*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9514*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9515*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9516*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9517*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9518*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9519*f5c631daSSadaf Ebrahimi     vrsqrte(cond, dt, rd, rm);
9520*f5c631daSSadaf Ebrahimi   }
Vrsqrte(DataType dt,QRegister rd,QRegister rm)9521*f5c631daSSadaf Ebrahimi   void Vrsqrte(DataType dt, QRegister rd, QRegister rm) {
9522*f5c631daSSadaf Ebrahimi     Vrsqrte(al, dt, rd, rm);
9523*f5c631daSSadaf Ebrahimi   }
9524*f5c631daSSadaf Ebrahimi 
Vrsqrts(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)9525*f5c631daSSadaf Ebrahimi   void Vrsqrts(
9526*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
9527*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9528*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
9529*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9530*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9531*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9532*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9533*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9534*f5c631daSSadaf Ebrahimi     vrsqrts(cond, dt, rd, rn, rm);
9535*f5c631daSSadaf Ebrahimi   }
Vrsqrts(DataType dt,DRegister rd,DRegister rn,DRegister rm)9536*f5c631daSSadaf Ebrahimi   void Vrsqrts(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
9537*f5c631daSSadaf Ebrahimi     Vrsqrts(al, dt, rd, rn, rm);
9538*f5c631daSSadaf Ebrahimi   }
9539*f5c631daSSadaf Ebrahimi 
Vrsqrts(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)9540*f5c631daSSadaf Ebrahimi   void Vrsqrts(
9541*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
9542*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9543*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
9544*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9545*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9546*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9547*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9548*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9549*f5c631daSSadaf Ebrahimi     vrsqrts(cond, dt, rd, rn, rm);
9550*f5c631daSSadaf Ebrahimi   }
Vrsqrts(DataType dt,QRegister rd,QRegister rn,QRegister rm)9551*f5c631daSSadaf Ebrahimi   void Vrsqrts(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
9552*f5c631daSSadaf Ebrahimi     Vrsqrts(al, dt, rd, rn, rm);
9553*f5c631daSSadaf Ebrahimi   }
9554*f5c631daSSadaf Ebrahimi 
Vrsra(Condition cond,DataType dt,DRegister rd,DRegister rm,const DOperand & operand)9555*f5c631daSSadaf Ebrahimi   void Vrsra(Condition cond,
9556*f5c631daSSadaf Ebrahimi              DataType dt,
9557*f5c631daSSadaf Ebrahimi              DRegister rd,
9558*f5c631daSSadaf Ebrahimi              DRegister rm,
9559*f5c631daSSadaf Ebrahimi              const DOperand& operand) {
9560*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9561*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9562*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
9563*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9564*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9565*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9566*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9567*f5c631daSSadaf Ebrahimi     vrsra(cond, dt, rd, rm, operand);
9568*f5c631daSSadaf Ebrahimi   }
Vrsra(DataType dt,DRegister rd,DRegister rm,const DOperand & operand)9569*f5c631daSSadaf Ebrahimi   void Vrsra(DataType dt, DRegister rd, DRegister rm, const DOperand& operand) {
9570*f5c631daSSadaf Ebrahimi     Vrsra(al, dt, rd, rm, operand);
9571*f5c631daSSadaf Ebrahimi   }
9572*f5c631daSSadaf Ebrahimi 
Vrsra(Condition cond,DataType dt,QRegister rd,QRegister rm,const QOperand & operand)9573*f5c631daSSadaf Ebrahimi   void Vrsra(Condition cond,
9574*f5c631daSSadaf Ebrahimi              DataType dt,
9575*f5c631daSSadaf Ebrahimi              QRegister rd,
9576*f5c631daSSadaf Ebrahimi              QRegister rm,
9577*f5c631daSSadaf Ebrahimi              const QOperand& operand) {
9578*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9579*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9580*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
9581*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9582*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9583*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9584*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9585*f5c631daSSadaf Ebrahimi     vrsra(cond, dt, rd, rm, operand);
9586*f5c631daSSadaf Ebrahimi   }
Vrsra(DataType dt,QRegister rd,QRegister rm,const QOperand & operand)9587*f5c631daSSadaf Ebrahimi   void Vrsra(DataType dt, QRegister rd, QRegister rm, const QOperand& operand) {
9588*f5c631daSSadaf Ebrahimi     Vrsra(al, dt, rd, rm, operand);
9589*f5c631daSSadaf Ebrahimi   }
9590*f5c631daSSadaf Ebrahimi 
Vrsubhn(Condition cond,DataType dt,DRegister rd,QRegister rn,QRegister rm)9591*f5c631daSSadaf Ebrahimi   void Vrsubhn(
9592*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, QRegister rn, QRegister rm) {
9593*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9594*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
9595*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9596*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9597*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9598*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9599*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9600*f5c631daSSadaf Ebrahimi     vrsubhn(cond, dt, rd, rn, rm);
9601*f5c631daSSadaf Ebrahimi   }
Vrsubhn(DataType dt,DRegister rd,QRegister rn,QRegister rm)9602*f5c631daSSadaf Ebrahimi   void Vrsubhn(DataType dt, DRegister rd, QRegister rn, QRegister rm) {
9603*f5c631daSSadaf Ebrahimi     Vrsubhn(al, dt, rd, rn, rm);
9604*f5c631daSSadaf Ebrahimi   }
9605*f5c631daSSadaf Ebrahimi 
Vseleq(DataType dt,DRegister rd,DRegister rn,DRegister rm)9606*f5c631daSSadaf Ebrahimi   void Vseleq(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
9607*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9608*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
9609*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9610*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9611*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9612*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9613*f5c631daSSadaf Ebrahimi     vseleq(dt, rd, rn, rm);
9614*f5c631daSSadaf Ebrahimi   }
9615*f5c631daSSadaf Ebrahimi 
Vseleq(DataType dt,SRegister rd,SRegister rn,SRegister rm)9616*f5c631daSSadaf Ebrahimi   void Vseleq(DataType dt, SRegister rd, SRegister rn, SRegister rm) {
9617*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9618*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
9619*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9620*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9621*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9622*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9623*f5c631daSSadaf Ebrahimi     vseleq(dt, rd, rn, rm);
9624*f5c631daSSadaf Ebrahimi   }
9625*f5c631daSSadaf Ebrahimi 
Vselge(DataType dt,DRegister rd,DRegister rn,DRegister rm)9626*f5c631daSSadaf Ebrahimi   void Vselge(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
9627*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9628*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
9629*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9630*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9631*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9632*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9633*f5c631daSSadaf Ebrahimi     vselge(dt, rd, rn, rm);
9634*f5c631daSSadaf Ebrahimi   }
9635*f5c631daSSadaf Ebrahimi 
Vselge(DataType dt,SRegister rd,SRegister rn,SRegister rm)9636*f5c631daSSadaf Ebrahimi   void Vselge(DataType dt, SRegister rd, SRegister rn, SRegister rm) {
9637*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9638*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
9639*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9640*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9641*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9642*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9643*f5c631daSSadaf Ebrahimi     vselge(dt, rd, rn, rm);
9644*f5c631daSSadaf Ebrahimi   }
9645*f5c631daSSadaf Ebrahimi 
Vselgt(DataType dt,DRegister rd,DRegister rn,DRegister rm)9646*f5c631daSSadaf Ebrahimi   void Vselgt(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
9647*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9648*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
9649*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9650*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9651*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9652*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9653*f5c631daSSadaf Ebrahimi     vselgt(dt, rd, rn, rm);
9654*f5c631daSSadaf Ebrahimi   }
9655*f5c631daSSadaf Ebrahimi 
Vselgt(DataType dt,SRegister rd,SRegister rn,SRegister rm)9656*f5c631daSSadaf Ebrahimi   void Vselgt(DataType dt, SRegister rd, SRegister rn, SRegister rm) {
9657*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9658*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
9659*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9660*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9661*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9662*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9663*f5c631daSSadaf Ebrahimi     vselgt(dt, rd, rn, rm);
9664*f5c631daSSadaf Ebrahimi   }
9665*f5c631daSSadaf Ebrahimi 
Vselvs(DataType dt,DRegister rd,DRegister rn,DRegister rm)9666*f5c631daSSadaf Ebrahimi   void Vselvs(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
9667*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9668*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
9669*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9670*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9671*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9672*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9673*f5c631daSSadaf Ebrahimi     vselvs(dt, rd, rn, rm);
9674*f5c631daSSadaf Ebrahimi   }
9675*f5c631daSSadaf Ebrahimi 
Vselvs(DataType dt,SRegister rd,SRegister rn,SRegister rm)9676*f5c631daSSadaf Ebrahimi   void Vselvs(DataType dt, SRegister rd, SRegister rn, SRegister rm) {
9677*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9678*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
9679*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9680*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9681*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9682*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9683*f5c631daSSadaf Ebrahimi     vselvs(dt, rd, rn, rm);
9684*f5c631daSSadaf Ebrahimi   }
9685*f5c631daSSadaf Ebrahimi 
Vshl(Condition cond,DataType dt,DRegister rd,DRegister rm,const DOperand & operand)9686*f5c631daSSadaf Ebrahimi   void Vshl(Condition cond,
9687*f5c631daSSadaf Ebrahimi             DataType dt,
9688*f5c631daSSadaf Ebrahimi             DRegister rd,
9689*f5c631daSSadaf Ebrahimi             DRegister rm,
9690*f5c631daSSadaf Ebrahimi             const DOperand& operand) {
9691*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9692*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9693*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
9694*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9695*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9696*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9697*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9698*f5c631daSSadaf Ebrahimi     vshl(cond, dt, rd, rm, operand);
9699*f5c631daSSadaf Ebrahimi   }
Vshl(DataType dt,DRegister rd,DRegister rm,const DOperand & operand)9700*f5c631daSSadaf Ebrahimi   void Vshl(DataType dt, DRegister rd, DRegister rm, const DOperand& operand) {
9701*f5c631daSSadaf Ebrahimi     Vshl(al, dt, rd, rm, operand);
9702*f5c631daSSadaf Ebrahimi   }
9703*f5c631daSSadaf Ebrahimi 
Vshl(Condition cond,DataType dt,QRegister rd,QRegister rm,const QOperand & operand)9704*f5c631daSSadaf Ebrahimi   void Vshl(Condition cond,
9705*f5c631daSSadaf Ebrahimi             DataType dt,
9706*f5c631daSSadaf Ebrahimi             QRegister rd,
9707*f5c631daSSadaf Ebrahimi             QRegister rm,
9708*f5c631daSSadaf Ebrahimi             const QOperand& operand) {
9709*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9710*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9711*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
9712*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9713*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9714*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9715*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9716*f5c631daSSadaf Ebrahimi     vshl(cond, dt, rd, rm, operand);
9717*f5c631daSSadaf Ebrahimi   }
Vshl(DataType dt,QRegister rd,QRegister rm,const QOperand & operand)9718*f5c631daSSadaf Ebrahimi   void Vshl(DataType dt, QRegister rd, QRegister rm, const QOperand& operand) {
9719*f5c631daSSadaf Ebrahimi     Vshl(al, dt, rd, rm, operand);
9720*f5c631daSSadaf Ebrahimi   }
9721*f5c631daSSadaf Ebrahimi 
Vshll(Condition cond,DataType dt,QRegister rd,DRegister rm,const DOperand & operand)9722*f5c631daSSadaf Ebrahimi   void Vshll(Condition cond,
9723*f5c631daSSadaf Ebrahimi              DataType dt,
9724*f5c631daSSadaf Ebrahimi              QRegister rd,
9725*f5c631daSSadaf Ebrahimi              DRegister rm,
9726*f5c631daSSadaf Ebrahimi              const DOperand& operand) {
9727*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9728*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9729*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
9730*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9731*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9732*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9733*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9734*f5c631daSSadaf Ebrahimi     vshll(cond, dt, rd, rm, operand);
9735*f5c631daSSadaf Ebrahimi   }
Vshll(DataType dt,QRegister rd,DRegister rm,const DOperand & operand)9736*f5c631daSSadaf Ebrahimi   void Vshll(DataType dt, QRegister rd, DRegister rm, const DOperand& operand) {
9737*f5c631daSSadaf Ebrahimi     Vshll(al, dt, rd, rm, operand);
9738*f5c631daSSadaf Ebrahimi   }
9739*f5c631daSSadaf Ebrahimi 
Vshr(Condition cond,DataType dt,DRegister rd,DRegister rm,const DOperand & operand)9740*f5c631daSSadaf Ebrahimi   void Vshr(Condition cond,
9741*f5c631daSSadaf Ebrahimi             DataType dt,
9742*f5c631daSSadaf Ebrahimi             DRegister rd,
9743*f5c631daSSadaf Ebrahimi             DRegister rm,
9744*f5c631daSSadaf Ebrahimi             const DOperand& operand) {
9745*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9746*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9747*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
9748*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9749*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9750*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9751*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9752*f5c631daSSadaf Ebrahimi     vshr(cond, dt, rd, rm, operand);
9753*f5c631daSSadaf Ebrahimi   }
Vshr(DataType dt,DRegister rd,DRegister rm,const DOperand & operand)9754*f5c631daSSadaf Ebrahimi   void Vshr(DataType dt, DRegister rd, DRegister rm, const DOperand& operand) {
9755*f5c631daSSadaf Ebrahimi     Vshr(al, dt, rd, rm, operand);
9756*f5c631daSSadaf Ebrahimi   }
9757*f5c631daSSadaf Ebrahimi 
Vshr(Condition cond,DataType dt,QRegister rd,QRegister rm,const QOperand & operand)9758*f5c631daSSadaf Ebrahimi   void Vshr(Condition cond,
9759*f5c631daSSadaf Ebrahimi             DataType dt,
9760*f5c631daSSadaf Ebrahimi             QRegister rd,
9761*f5c631daSSadaf Ebrahimi             QRegister rm,
9762*f5c631daSSadaf Ebrahimi             const QOperand& operand) {
9763*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9764*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9765*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
9766*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9767*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9768*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9769*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9770*f5c631daSSadaf Ebrahimi     vshr(cond, dt, rd, rm, operand);
9771*f5c631daSSadaf Ebrahimi   }
Vshr(DataType dt,QRegister rd,QRegister rm,const QOperand & operand)9772*f5c631daSSadaf Ebrahimi   void Vshr(DataType dt, QRegister rd, QRegister rm, const QOperand& operand) {
9773*f5c631daSSadaf Ebrahimi     Vshr(al, dt, rd, rm, operand);
9774*f5c631daSSadaf Ebrahimi   }
9775*f5c631daSSadaf Ebrahimi 
Vshrn(Condition cond,DataType dt,DRegister rd,QRegister rm,const QOperand & operand)9776*f5c631daSSadaf Ebrahimi   void Vshrn(Condition cond,
9777*f5c631daSSadaf Ebrahimi              DataType dt,
9778*f5c631daSSadaf Ebrahimi              DRegister rd,
9779*f5c631daSSadaf Ebrahimi              QRegister rm,
9780*f5c631daSSadaf Ebrahimi              const QOperand& operand) {
9781*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9782*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9783*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
9784*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9785*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9786*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9787*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9788*f5c631daSSadaf Ebrahimi     vshrn(cond, dt, rd, rm, operand);
9789*f5c631daSSadaf Ebrahimi   }
Vshrn(DataType dt,DRegister rd,QRegister rm,const QOperand & operand)9790*f5c631daSSadaf Ebrahimi   void Vshrn(DataType dt, DRegister rd, QRegister rm, const QOperand& operand) {
9791*f5c631daSSadaf Ebrahimi     Vshrn(al, dt, rd, rm, operand);
9792*f5c631daSSadaf Ebrahimi   }
9793*f5c631daSSadaf Ebrahimi 
Vsli(Condition cond,DataType dt,DRegister rd,DRegister rm,const DOperand & operand)9794*f5c631daSSadaf Ebrahimi   void Vsli(Condition cond,
9795*f5c631daSSadaf Ebrahimi             DataType dt,
9796*f5c631daSSadaf Ebrahimi             DRegister rd,
9797*f5c631daSSadaf Ebrahimi             DRegister rm,
9798*f5c631daSSadaf Ebrahimi             const DOperand& operand) {
9799*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9800*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9801*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
9802*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9803*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9804*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9805*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9806*f5c631daSSadaf Ebrahimi     vsli(cond, dt, rd, rm, operand);
9807*f5c631daSSadaf Ebrahimi   }
Vsli(DataType dt,DRegister rd,DRegister rm,const DOperand & operand)9808*f5c631daSSadaf Ebrahimi   void Vsli(DataType dt, DRegister rd, DRegister rm, const DOperand& operand) {
9809*f5c631daSSadaf Ebrahimi     Vsli(al, dt, rd, rm, operand);
9810*f5c631daSSadaf Ebrahimi   }
9811*f5c631daSSadaf Ebrahimi 
Vsli(Condition cond,DataType dt,QRegister rd,QRegister rm,const QOperand & operand)9812*f5c631daSSadaf Ebrahimi   void Vsli(Condition cond,
9813*f5c631daSSadaf Ebrahimi             DataType dt,
9814*f5c631daSSadaf Ebrahimi             QRegister rd,
9815*f5c631daSSadaf Ebrahimi             QRegister rm,
9816*f5c631daSSadaf Ebrahimi             const QOperand& operand) {
9817*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9818*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9819*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
9820*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9821*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9822*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9823*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9824*f5c631daSSadaf Ebrahimi     vsli(cond, dt, rd, rm, operand);
9825*f5c631daSSadaf Ebrahimi   }
Vsli(DataType dt,QRegister rd,QRegister rm,const QOperand & operand)9826*f5c631daSSadaf Ebrahimi   void Vsli(DataType dt, QRegister rd, QRegister rm, const QOperand& operand) {
9827*f5c631daSSadaf Ebrahimi     Vsli(al, dt, rd, rm, operand);
9828*f5c631daSSadaf Ebrahimi   }
9829*f5c631daSSadaf Ebrahimi 
Vsqrt(Condition cond,DataType dt,SRegister rd,SRegister rm)9830*f5c631daSSadaf Ebrahimi   void Vsqrt(Condition cond, DataType dt, SRegister rd, SRegister rm) {
9831*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9832*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9833*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9834*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9835*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9836*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9837*f5c631daSSadaf Ebrahimi     vsqrt(cond, dt, rd, rm);
9838*f5c631daSSadaf Ebrahimi   }
Vsqrt(DataType dt,SRegister rd,SRegister rm)9839*f5c631daSSadaf Ebrahimi   void Vsqrt(DataType dt, SRegister rd, SRegister rm) { Vsqrt(al, dt, rd, rm); }
9840*f5c631daSSadaf Ebrahimi 
Vsqrt(Condition cond,DataType dt,DRegister rd,DRegister rm)9841*f5c631daSSadaf Ebrahimi   void Vsqrt(Condition cond, DataType dt, DRegister rd, DRegister rm) {
9842*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9843*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9844*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9845*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9846*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9847*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9848*f5c631daSSadaf Ebrahimi     vsqrt(cond, dt, rd, rm);
9849*f5c631daSSadaf Ebrahimi   }
Vsqrt(DataType dt,DRegister rd,DRegister rm)9850*f5c631daSSadaf Ebrahimi   void Vsqrt(DataType dt, DRegister rd, DRegister rm) { Vsqrt(al, dt, rd, rm); }
9851*f5c631daSSadaf Ebrahimi 
Vsra(Condition cond,DataType dt,DRegister rd,DRegister rm,const DOperand & operand)9852*f5c631daSSadaf Ebrahimi   void Vsra(Condition cond,
9853*f5c631daSSadaf Ebrahimi             DataType dt,
9854*f5c631daSSadaf Ebrahimi             DRegister rd,
9855*f5c631daSSadaf Ebrahimi             DRegister rm,
9856*f5c631daSSadaf Ebrahimi             const DOperand& operand) {
9857*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9858*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9859*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
9860*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9861*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9862*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9863*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9864*f5c631daSSadaf Ebrahimi     vsra(cond, dt, rd, rm, operand);
9865*f5c631daSSadaf Ebrahimi   }
Vsra(DataType dt,DRegister rd,DRegister rm,const DOperand & operand)9866*f5c631daSSadaf Ebrahimi   void Vsra(DataType dt, DRegister rd, DRegister rm, const DOperand& operand) {
9867*f5c631daSSadaf Ebrahimi     Vsra(al, dt, rd, rm, operand);
9868*f5c631daSSadaf Ebrahimi   }
9869*f5c631daSSadaf Ebrahimi 
Vsra(Condition cond,DataType dt,QRegister rd,QRegister rm,const QOperand & operand)9870*f5c631daSSadaf Ebrahimi   void Vsra(Condition cond,
9871*f5c631daSSadaf Ebrahimi             DataType dt,
9872*f5c631daSSadaf Ebrahimi             QRegister rd,
9873*f5c631daSSadaf Ebrahimi             QRegister rm,
9874*f5c631daSSadaf Ebrahimi             const QOperand& operand) {
9875*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9876*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9877*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
9878*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9879*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9880*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9881*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9882*f5c631daSSadaf Ebrahimi     vsra(cond, dt, rd, rm, operand);
9883*f5c631daSSadaf Ebrahimi   }
Vsra(DataType dt,QRegister rd,QRegister rm,const QOperand & operand)9884*f5c631daSSadaf Ebrahimi   void Vsra(DataType dt, QRegister rd, QRegister rm, const QOperand& operand) {
9885*f5c631daSSadaf Ebrahimi     Vsra(al, dt, rd, rm, operand);
9886*f5c631daSSadaf Ebrahimi   }
9887*f5c631daSSadaf Ebrahimi 
Vsri(Condition cond,DataType dt,DRegister rd,DRegister rm,const DOperand & operand)9888*f5c631daSSadaf Ebrahimi   void Vsri(Condition cond,
9889*f5c631daSSadaf Ebrahimi             DataType dt,
9890*f5c631daSSadaf Ebrahimi             DRegister rd,
9891*f5c631daSSadaf Ebrahimi             DRegister rm,
9892*f5c631daSSadaf Ebrahimi             const DOperand& operand) {
9893*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9894*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9895*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
9896*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9897*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9898*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9899*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9900*f5c631daSSadaf Ebrahimi     vsri(cond, dt, rd, rm, operand);
9901*f5c631daSSadaf Ebrahimi   }
Vsri(DataType dt,DRegister rd,DRegister rm,const DOperand & operand)9902*f5c631daSSadaf Ebrahimi   void Vsri(DataType dt, DRegister rd, DRegister rm, const DOperand& operand) {
9903*f5c631daSSadaf Ebrahimi     Vsri(al, dt, rd, rm, operand);
9904*f5c631daSSadaf Ebrahimi   }
9905*f5c631daSSadaf Ebrahimi 
Vsri(Condition cond,DataType dt,QRegister rd,QRegister rm,const QOperand & operand)9906*f5c631daSSadaf Ebrahimi   void Vsri(Condition cond,
9907*f5c631daSSadaf Ebrahimi             DataType dt,
9908*f5c631daSSadaf Ebrahimi             QRegister rd,
9909*f5c631daSSadaf Ebrahimi             QRegister rm,
9910*f5c631daSSadaf Ebrahimi             const QOperand& operand) {
9911*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
9912*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
9913*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
9914*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9915*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9916*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9917*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9918*f5c631daSSadaf Ebrahimi     vsri(cond, dt, rd, rm, operand);
9919*f5c631daSSadaf Ebrahimi   }
Vsri(DataType dt,QRegister rd,QRegister rm,const QOperand & operand)9920*f5c631daSSadaf Ebrahimi   void Vsri(DataType dt, QRegister rd, QRegister rm, const QOperand& operand) {
9921*f5c631daSSadaf Ebrahimi     Vsri(al, dt, rd, rm, operand);
9922*f5c631daSSadaf Ebrahimi   }
9923*f5c631daSSadaf Ebrahimi 
Vst1(Condition cond,DataType dt,const NeonRegisterList & nreglist,const AlignedMemOperand & operand)9924*f5c631daSSadaf Ebrahimi   void Vst1(Condition cond,
9925*f5c631daSSadaf Ebrahimi             DataType dt,
9926*f5c631daSSadaf Ebrahimi             const NeonRegisterList& nreglist,
9927*f5c631daSSadaf Ebrahimi             const AlignedMemOperand& operand) {
9928*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(nreglist));
9929*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
9930*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9931*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9932*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9933*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9934*f5c631daSSadaf Ebrahimi     vst1(cond, dt, nreglist, operand);
9935*f5c631daSSadaf Ebrahimi   }
Vst1(DataType dt,const NeonRegisterList & nreglist,const AlignedMemOperand & operand)9936*f5c631daSSadaf Ebrahimi   void Vst1(DataType dt,
9937*f5c631daSSadaf Ebrahimi             const NeonRegisterList& nreglist,
9938*f5c631daSSadaf Ebrahimi             const AlignedMemOperand& operand) {
9939*f5c631daSSadaf Ebrahimi     Vst1(al, dt, nreglist, operand);
9940*f5c631daSSadaf Ebrahimi   }
9941*f5c631daSSadaf Ebrahimi 
Vst2(Condition cond,DataType dt,const NeonRegisterList & nreglist,const AlignedMemOperand & operand)9942*f5c631daSSadaf Ebrahimi   void Vst2(Condition cond,
9943*f5c631daSSadaf Ebrahimi             DataType dt,
9944*f5c631daSSadaf Ebrahimi             const NeonRegisterList& nreglist,
9945*f5c631daSSadaf Ebrahimi             const AlignedMemOperand& operand) {
9946*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(nreglist));
9947*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
9948*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9949*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9950*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9951*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9952*f5c631daSSadaf Ebrahimi     vst2(cond, dt, nreglist, operand);
9953*f5c631daSSadaf Ebrahimi   }
Vst2(DataType dt,const NeonRegisterList & nreglist,const AlignedMemOperand & operand)9954*f5c631daSSadaf Ebrahimi   void Vst2(DataType dt,
9955*f5c631daSSadaf Ebrahimi             const NeonRegisterList& nreglist,
9956*f5c631daSSadaf Ebrahimi             const AlignedMemOperand& operand) {
9957*f5c631daSSadaf Ebrahimi     Vst2(al, dt, nreglist, operand);
9958*f5c631daSSadaf Ebrahimi   }
9959*f5c631daSSadaf Ebrahimi 
Vst3(Condition cond,DataType dt,const NeonRegisterList & nreglist,const AlignedMemOperand & operand)9960*f5c631daSSadaf Ebrahimi   void Vst3(Condition cond,
9961*f5c631daSSadaf Ebrahimi             DataType dt,
9962*f5c631daSSadaf Ebrahimi             const NeonRegisterList& nreglist,
9963*f5c631daSSadaf Ebrahimi             const AlignedMemOperand& operand) {
9964*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(nreglist));
9965*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
9966*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9967*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9968*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9969*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9970*f5c631daSSadaf Ebrahimi     vst3(cond, dt, nreglist, operand);
9971*f5c631daSSadaf Ebrahimi   }
Vst3(DataType dt,const NeonRegisterList & nreglist,const AlignedMemOperand & operand)9972*f5c631daSSadaf Ebrahimi   void Vst3(DataType dt,
9973*f5c631daSSadaf Ebrahimi             const NeonRegisterList& nreglist,
9974*f5c631daSSadaf Ebrahimi             const AlignedMemOperand& operand) {
9975*f5c631daSSadaf Ebrahimi     Vst3(al, dt, nreglist, operand);
9976*f5c631daSSadaf Ebrahimi   }
9977*f5c631daSSadaf Ebrahimi 
Vst3(Condition cond,DataType dt,const NeonRegisterList & nreglist,const MemOperand & operand)9978*f5c631daSSadaf Ebrahimi   void Vst3(Condition cond,
9979*f5c631daSSadaf Ebrahimi             DataType dt,
9980*f5c631daSSadaf Ebrahimi             const NeonRegisterList& nreglist,
9981*f5c631daSSadaf Ebrahimi             const MemOperand& operand) {
9982*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(nreglist));
9983*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
9984*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
9985*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
9986*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
9987*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
9988*f5c631daSSadaf Ebrahimi     vst3(cond, dt, nreglist, operand);
9989*f5c631daSSadaf Ebrahimi   }
Vst3(DataType dt,const NeonRegisterList & nreglist,const MemOperand & operand)9990*f5c631daSSadaf Ebrahimi   void Vst3(DataType dt,
9991*f5c631daSSadaf Ebrahimi             const NeonRegisterList& nreglist,
9992*f5c631daSSadaf Ebrahimi             const MemOperand& operand) {
9993*f5c631daSSadaf Ebrahimi     Vst3(al, dt, nreglist, operand);
9994*f5c631daSSadaf Ebrahimi   }
9995*f5c631daSSadaf Ebrahimi 
Vst4(Condition cond,DataType dt,const NeonRegisterList & nreglist,const AlignedMemOperand & operand)9996*f5c631daSSadaf Ebrahimi   void Vst4(Condition cond,
9997*f5c631daSSadaf Ebrahimi             DataType dt,
9998*f5c631daSSadaf Ebrahimi             const NeonRegisterList& nreglist,
9999*f5c631daSSadaf Ebrahimi             const AlignedMemOperand& operand) {
10000*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(nreglist));
10001*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
10002*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
10003*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
10004*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
10005*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
10006*f5c631daSSadaf Ebrahimi     vst4(cond, dt, nreglist, operand);
10007*f5c631daSSadaf Ebrahimi   }
Vst4(DataType dt,const NeonRegisterList & nreglist,const AlignedMemOperand & operand)10008*f5c631daSSadaf Ebrahimi   void Vst4(DataType dt,
10009*f5c631daSSadaf Ebrahimi             const NeonRegisterList& nreglist,
10010*f5c631daSSadaf Ebrahimi             const AlignedMemOperand& operand) {
10011*f5c631daSSadaf Ebrahimi     Vst4(al, dt, nreglist, operand);
10012*f5c631daSSadaf Ebrahimi   }
10013*f5c631daSSadaf Ebrahimi 
Vstm(Condition cond,DataType dt,Register rn,WriteBack write_back,DRegisterList dreglist)10014*f5c631daSSadaf Ebrahimi   void Vstm(Condition cond,
10015*f5c631daSSadaf Ebrahimi             DataType dt,
10016*f5c631daSSadaf Ebrahimi             Register rn,
10017*f5c631daSSadaf Ebrahimi             WriteBack write_back,
10018*f5c631daSSadaf Ebrahimi             DRegisterList dreglist) {
10019*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
10020*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(dreglist));
10021*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
10022*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
10023*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
10024*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
10025*f5c631daSSadaf Ebrahimi     vstm(cond, dt, rn, write_back, dreglist);
10026*f5c631daSSadaf Ebrahimi   }
Vstm(DataType dt,Register rn,WriteBack write_back,DRegisterList dreglist)10027*f5c631daSSadaf Ebrahimi   void Vstm(DataType dt,
10028*f5c631daSSadaf Ebrahimi             Register rn,
10029*f5c631daSSadaf Ebrahimi             WriteBack write_back,
10030*f5c631daSSadaf Ebrahimi             DRegisterList dreglist) {
10031*f5c631daSSadaf Ebrahimi     Vstm(al, dt, rn, write_back, dreglist);
10032*f5c631daSSadaf Ebrahimi   }
Vstm(Condition cond,Register rn,WriteBack write_back,DRegisterList dreglist)10033*f5c631daSSadaf Ebrahimi   void Vstm(Condition cond,
10034*f5c631daSSadaf Ebrahimi             Register rn,
10035*f5c631daSSadaf Ebrahimi             WriteBack write_back,
10036*f5c631daSSadaf Ebrahimi             DRegisterList dreglist) {
10037*f5c631daSSadaf Ebrahimi     Vstm(cond, kDataTypeValueNone, rn, write_back, dreglist);
10038*f5c631daSSadaf Ebrahimi   }
Vstm(Register rn,WriteBack write_back,DRegisterList dreglist)10039*f5c631daSSadaf Ebrahimi   void Vstm(Register rn, WriteBack write_back, DRegisterList dreglist) {
10040*f5c631daSSadaf Ebrahimi     Vstm(al, kDataTypeValueNone, rn, write_back, dreglist);
10041*f5c631daSSadaf Ebrahimi   }
10042*f5c631daSSadaf Ebrahimi 
Vstm(Condition cond,DataType dt,Register rn,WriteBack write_back,SRegisterList sreglist)10043*f5c631daSSadaf Ebrahimi   void Vstm(Condition cond,
10044*f5c631daSSadaf Ebrahimi             DataType dt,
10045*f5c631daSSadaf Ebrahimi             Register rn,
10046*f5c631daSSadaf Ebrahimi             WriteBack write_back,
10047*f5c631daSSadaf Ebrahimi             SRegisterList sreglist) {
10048*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
10049*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(sreglist));
10050*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
10051*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
10052*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
10053*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
10054*f5c631daSSadaf Ebrahimi     vstm(cond, dt, rn, write_back, sreglist);
10055*f5c631daSSadaf Ebrahimi   }
Vstm(DataType dt,Register rn,WriteBack write_back,SRegisterList sreglist)10056*f5c631daSSadaf Ebrahimi   void Vstm(DataType dt,
10057*f5c631daSSadaf Ebrahimi             Register rn,
10058*f5c631daSSadaf Ebrahimi             WriteBack write_back,
10059*f5c631daSSadaf Ebrahimi             SRegisterList sreglist) {
10060*f5c631daSSadaf Ebrahimi     Vstm(al, dt, rn, write_back, sreglist);
10061*f5c631daSSadaf Ebrahimi   }
Vstm(Condition cond,Register rn,WriteBack write_back,SRegisterList sreglist)10062*f5c631daSSadaf Ebrahimi   void Vstm(Condition cond,
10063*f5c631daSSadaf Ebrahimi             Register rn,
10064*f5c631daSSadaf Ebrahimi             WriteBack write_back,
10065*f5c631daSSadaf Ebrahimi             SRegisterList sreglist) {
10066*f5c631daSSadaf Ebrahimi     Vstm(cond, kDataTypeValueNone, rn, write_back, sreglist);
10067*f5c631daSSadaf Ebrahimi   }
Vstm(Register rn,WriteBack write_back,SRegisterList sreglist)10068*f5c631daSSadaf Ebrahimi   void Vstm(Register rn, WriteBack write_back, SRegisterList sreglist) {
10069*f5c631daSSadaf Ebrahimi     Vstm(al, kDataTypeValueNone, rn, write_back, sreglist);
10070*f5c631daSSadaf Ebrahimi   }
10071*f5c631daSSadaf Ebrahimi 
Vstmdb(Condition cond,DataType dt,Register rn,WriteBack write_back,DRegisterList dreglist)10072*f5c631daSSadaf Ebrahimi   void Vstmdb(Condition cond,
10073*f5c631daSSadaf Ebrahimi               DataType dt,
10074*f5c631daSSadaf Ebrahimi               Register rn,
10075*f5c631daSSadaf Ebrahimi               WriteBack write_back,
10076*f5c631daSSadaf Ebrahimi               DRegisterList dreglist) {
10077*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
10078*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(dreglist));
10079*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
10080*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
10081*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
10082*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
10083*f5c631daSSadaf Ebrahimi     vstmdb(cond, dt, rn, write_back, dreglist);
10084*f5c631daSSadaf Ebrahimi   }
Vstmdb(DataType dt,Register rn,WriteBack write_back,DRegisterList dreglist)10085*f5c631daSSadaf Ebrahimi   void Vstmdb(DataType dt,
10086*f5c631daSSadaf Ebrahimi               Register rn,
10087*f5c631daSSadaf Ebrahimi               WriteBack write_back,
10088*f5c631daSSadaf Ebrahimi               DRegisterList dreglist) {
10089*f5c631daSSadaf Ebrahimi     Vstmdb(al, dt, rn, write_back, dreglist);
10090*f5c631daSSadaf Ebrahimi   }
Vstmdb(Condition cond,Register rn,WriteBack write_back,DRegisterList dreglist)10091*f5c631daSSadaf Ebrahimi   void Vstmdb(Condition cond,
10092*f5c631daSSadaf Ebrahimi               Register rn,
10093*f5c631daSSadaf Ebrahimi               WriteBack write_back,
10094*f5c631daSSadaf Ebrahimi               DRegisterList dreglist) {
10095*f5c631daSSadaf Ebrahimi     Vstmdb(cond, kDataTypeValueNone, rn, write_back, dreglist);
10096*f5c631daSSadaf Ebrahimi   }
Vstmdb(Register rn,WriteBack write_back,DRegisterList dreglist)10097*f5c631daSSadaf Ebrahimi   void Vstmdb(Register rn, WriteBack write_back, DRegisterList dreglist) {
10098*f5c631daSSadaf Ebrahimi     Vstmdb(al, kDataTypeValueNone, rn, write_back, dreglist);
10099*f5c631daSSadaf Ebrahimi   }
10100*f5c631daSSadaf Ebrahimi 
Vstmdb(Condition cond,DataType dt,Register rn,WriteBack write_back,SRegisterList sreglist)10101*f5c631daSSadaf Ebrahimi   void Vstmdb(Condition cond,
10102*f5c631daSSadaf Ebrahimi               DataType dt,
10103*f5c631daSSadaf Ebrahimi               Register rn,
10104*f5c631daSSadaf Ebrahimi               WriteBack write_back,
10105*f5c631daSSadaf Ebrahimi               SRegisterList sreglist) {
10106*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
10107*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(sreglist));
10108*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
10109*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
10110*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
10111*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
10112*f5c631daSSadaf Ebrahimi     vstmdb(cond, dt, rn, write_back, sreglist);
10113*f5c631daSSadaf Ebrahimi   }
Vstmdb(DataType dt,Register rn,WriteBack write_back,SRegisterList sreglist)10114*f5c631daSSadaf Ebrahimi   void Vstmdb(DataType dt,
10115*f5c631daSSadaf Ebrahimi               Register rn,
10116*f5c631daSSadaf Ebrahimi               WriteBack write_back,
10117*f5c631daSSadaf Ebrahimi               SRegisterList sreglist) {
10118*f5c631daSSadaf Ebrahimi     Vstmdb(al, dt, rn, write_back, sreglist);
10119*f5c631daSSadaf Ebrahimi   }
Vstmdb(Condition cond,Register rn,WriteBack write_back,SRegisterList sreglist)10120*f5c631daSSadaf Ebrahimi   void Vstmdb(Condition cond,
10121*f5c631daSSadaf Ebrahimi               Register rn,
10122*f5c631daSSadaf Ebrahimi               WriteBack write_back,
10123*f5c631daSSadaf Ebrahimi               SRegisterList sreglist) {
10124*f5c631daSSadaf Ebrahimi     Vstmdb(cond, kDataTypeValueNone, rn, write_back, sreglist);
10125*f5c631daSSadaf Ebrahimi   }
Vstmdb(Register rn,WriteBack write_back,SRegisterList sreglist)10126*f5c631daSSadaf Ebrahimi   void Vstmdb(Register rn, WriteBack write_back, SRegisterList sreglist) {
10127*f5c631daSSadaf Ebrahimi     Vstmdb(al, kDataTypeValueNone, rn, write_back, sreglist);
10128*f5c631daSSadaf Ebrahimi   }
10129*f5c631daSSadaf Ebrahimi 
Vstmia(Condition cond,DataType dt,Register rn,WriteBack write_back,DRegisterList dreglist)10130*f5c631daSSadaf Ebrahimi   void Vstmia(Condition cond,
10131*f5c631daSSadaf Ebrahimi               DataType dt,
10132*f5c631daSSadaf Ebrahimi               Register rn,
10133*f5c631daSSadaf Ebrahimi               WriteBack write_back,
10134*f5c631daSSadaf Ebrahimi               DRegisterList dreglist) {
10135*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
10136*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(dreglist));
10137*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
10138*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
10139*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
10140*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
10141*f5c631daSSadaf Ebrahimi     vstmia(cond, dt, rn, write_back, dreglist);
10142*f5c631daSSadaf Ebrahimi   }
Vstmia(DataType dt,Register rn,WriteBack write_back,DRegisterList dreglist)10143*f5c631daSSadaf Ebrahimi   void Vstmia(DataType dt,
10144*f5c631daSSadaf Ebrahimi               Register rn,
10145*f5c631daSSadaf Ebrahimi               WriteBack write_back,
10146*f5c631daSSadaf Ebrahimi               DRegisterList dreglist) {
10147*f5c631daSSadaf Ebrahimi     Vstmia(al, dt, rn, write_back, dreglist);
10148*f5c631daSSadaf Ebrahimi   }
Vstmia(Condition cond,Register rn,WriteBack write_back,DRegisterList dreglist)10149*f5c631daSSadaf Ebrahimi   void Vstmia(Condition cond,
10150*f5c631daSSadaf Ebrahimi               Register rn,
10151*f5c631daSSadaf Ebrahimi               WriteBack write_back,
10152*f5c631daSSadaf Ebrahimi               DRegisterList dreglist) {
10153*f5c631daSSadaf Ebrahimi     Vstmia(cond, kDataTypeValueNone, rn, write_back, dreglist);
10154*f5c631daSSadaf Ebrahimi   }
Vstmia(Register rn,WriteBack write_back,DRegisterList dreglist)10155*f5c631daSSadaf Ebrahimi   void Vstmia(Register rn, WriteBack write_back, DRegisterList dreglist) {
10156*f5c631daSSadaf Ebrahimi     Vstmia(al, kDataTypeValueNone, rn, write_back, dreglist);
10157*f5c631daSSadaf Ebrahimi   }
10158*f5c631daSSadaf Ebrahimi 
Vstmia(Condition cond,DataType dt,Register rn,WriteBack write_back,SRegisterList sreglist)10159*f5c631daSSadaf Ebrahimi   void Vstmia(Condition cond,
10160*f5c631daSSadaf Ebrahimi               DataType dt,
10161*f5c631daSSadaf Ebrahimi               Register rn,
10162*f5c631daSSadaf Ebrahimi               WriteBack write_back,
10163*f5c631daSSadaf Ebrahimi               SRegisterList sreglist) {
10164*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
10165*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(sreglist));
10166*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
10167*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
10168*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
10169*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
10170*f5c631daSSadaf Ebrahimi     vstmia(cond, dt, rn, write_back, sreglist);
10171*f5c631daSSadaf Ebrahimi   }
Vstmia(DataType dt,Register rn,WriteBack write_back,SRegisterList sreglist)10172*f5c631daSSadaf Ebrahimi   void Vstmia(DataType dt,
10173*f5c631daSSadaf Ebrahimi               Register rn,
10174*f5c631daSSadaf Ebrahimi               WriteBack write_back,
10175*f5c631daSSadaf Ebrahimi               SRegisterList sreglist) {
10176*f5c631daSSadaf Ebrahimi     Vstmia(al, dt, rn, write_back, sreglist);
10177*f5c631daSSadaf Ebrahimi   }
Vstmia(Condition cond,Register rn,WriteBack write_back,SRegisterList sreglist)10178*f5c631daSSadaf Ebrahimi   void Vstmia(Condition cond,
10179*f5c631daSSadaf Ebrahimi               Register rn,
10180*f5c631daSSadaf Ebrahimi               WriteBack write_back,
10181*f5c631daSSadaf Ebrahimi               SRegisterList sreglist) {
10182*f5c631daSSadaf Ebrahimi     Vstmia(cond, kDataTypeValueNone, rn, write_back, sreglist);
10183*f5c631daSSadaf Ebrahimi   }
Vstmia(Register rn,WriteBack write_back,SRegisterList sreglist)10184*f5c631daSSadaf Ebrahimi   void Vstmia(Register rn, WriteBack write_back, SRegisterList sreglist) {
10185*f5c631daSSadaf Ebrahimi     Vstmia(al, kDataTypeValueNone, rn, write_back, sreglist);
10186*f5c631daSSadaf Ebrahimi   }
10187*f5c631daSSadaf Ebrahimi 
Vstr(Condition cond,DataType dt,DRegister rd,const MemOperand & operand)10188*f5c631daSSadaf Ebrahimi   void Vstr(Condition cond,
10189*f5c631daSSadaf Ebrahimi             DataType dt,
10190*f5c631daSSadaf Ebrahimi             DRegister rd,
10191*f5c631daSSadaf Ebrahimi             const MemOperand& operand) {
10192*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
10193*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
10194*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
10195*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
10196*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
10197*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
10198*f5c631daSSadaf Ebrahimi     vstr(cond, dt, rd, operand);
10199*f5c631daSSadaf Ebrahimi   }
Vstr(DataType dt,DRegister rd,const MemOperand & operand)10200*f5c631daSSadaf Ebrahimi   void Vstr(DataType dt, DRegister rd, const MemOperand& operand) {
10201*f5c631daSSadaf Ebrahimi     Vstr(al, dt, rd, operand);
10202*f5c631daSSadaf Ebrahimi   }
Vstr(Condition cond,DRegister rd,const MemOperand & operand)10203*f5c631daSSadaf Ebrahimi   void Vstr(Condition cond, DRegister rd, const MemOperand& operand) {
10204*f5c631daSSadaf Ebrahimi     Vstr(cond, Untyped64, rd, operand);
10205*f5c631daSSadaf Ebrahimi   }
Vstr(DRegister rd,const MemOperand & operand)10206*f5c631daSSadaf Ebrahimi   void Vstr(DRegister rd, const MemOperand& operand) {
10207*f5c631daSSadaf Ebrahimi     Vstr(al, Untyped64, rd, operand);
10208*f5c631daSSadaf Ebrahimi   }
10209*f5c631daSSadaf Ebrahimi 
Vstr(Condition cond,DataType dt,SRegister rd,const MemOperand & operand)10210*f5c631daSSadaf Ebrahimi   void Vstr(Condition cond,
10211*f5c631daSSadaf Ebrahimi             DataType dt,
10212*f5c631daSSadaf Ebrahimi             SRegister rd,
10213*f5c631daSSadaf Ebrahimi             const MemOperand& operand) {
10214*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
10215*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(operand));
10216*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
10217*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
10218*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
10219*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
10220*f5c631daSSadaf Ebrahimi     vstr(cond, dt, rd, operand);
10221*f5c631daSSadaf Ebrahimi   }
Vstr(DataType dt,SRegister rd,const MemOperand & operand)10222*f5c631daSSadaf Ebrahimi   void Vstr(DataType dt, SRegister rd, const MemOperand& operand) {
10223*f5c631daSSadaf Ebrahimi     Vstr(al, dt, rd, operand);
10224*f5c631daSSadaf Ebrahimi   }
Vstr(Condition cond,SRegister rd,const MemOperand & operand)10225*f5c631daSSadaf Ebrahimi   void Vstr(Condition cond, SRegister rd, const MemOperand& operand) {
10226*f5c631daSSadaf Ebrahimi     Vstr(cond, Untyped32, rd, operand);
10227*f5c631daSSadaf Ebrahimi   }
Vstr(SRegister rd,const MemOperand & operand)10228*f5c631daSSadaf Ebrahimi   void Vstr(SRegister rd, const MemOperand& operand) {
10229*f5c631daSSadaf Ebrahimi     Vstr(al, Untyped32, rd, operand);
10230*f5c631daSSadaf Ebrahimi   }
10231*f5c631daSSadaf Ebrahimi 
Vsub(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)10232*f5c631daSSadaf Ebrahimi   void Vsub(
10233*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
10234*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
10235*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
10236*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
10237*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
10238*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
10239*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
10240*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
10241*f5c631daSSadaf Ebrahimi     vsub(cond, dt, rd, rn, rm);
10242*f5c631daSSadaf Ebrahimi   }
Vsub(DataType dt,DRegister rd,DRegister rn,DRegister rm)10243*f5c631daSSadaf Ebrahimi   void Vsub(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
10244*f5c631daSSadaf Ebrahimi     Vsub(al, dt, rd, rn, rm);
10245*f5c631daSSadaf Ebrahimi   }
10246*f5c631daSSadaf Ebrahimi 
Vsub(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)10247*f5c631daSSadaf Ebrahimi   void Vsub(
10248*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
10249*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
10250*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
10251*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
10252*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
10253*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
10254*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
10255*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
10256*f5c631daSSadaf Ebrahimi     vsub(cond, dt, rd, rn, rm);
10257*f5c631daSSadaf Ebrahimi   }
Vsub(DataType dt,QRegister rd,QRegister rn,QRegister rm)10258*f5c631daSSadaf Ebrahimi   void Vsub(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
10259*f5c631daSSadaf Ebrahimi     Vsub(al, dt, rd, rn, rm);
10260*f5c631daSSadaf Ebrahimi   }
10261*f5c631daSSadaf Ebrahimi 
Vsub(Condition cond,DataType dt,SRegister rd,SRegister rn,SRegister rm)10262*f5c631daSSadaf Ebrahimi   void Vsub(
10263*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) {
10264*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
10265*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
10266*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
10267*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
10268*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
10269*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
10270*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
10271*f5c631daSSadaf Ebrahimi     vsub(cond, dt, rd, rn, rm);
10272*f5c631daSSadaf Ebrahimi   }
Vsub(DataType dt,SRegister rd,SRegister rn,SRegister rm)10273*f5c631daSSadaf Ebrahimi   void Vsub(DataType dt, SRegister rd, SRegister rn, SRegister rm) {
10274*f5c631daSSadaf Ebrahimi     Vsub(al, dt, rd, rn, rm);
10275*f5c631daSSadaf Ebrahimi   }
10276*f5c631daSSadaf Ebrahimi 
Vsubhn(Condition cond,DataType dt,DRegister rd,QRegister rn,QRegister rm)10277*f5c631daSSadaf Ebrahimi   void Vsubhn(
10278*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, QRegister rn, QRegister rm) {
10279*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
10280*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
10281*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
10282*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
10283*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
10284*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
10285*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
10286*f5c631daSSadaf Ebrahimi     vsubhn(cond, dt, rd, rn, rm);
10287*f5c631daSSadaf Ebrahimi   }
Vsubhn(DataType dt,DRegister rd,QRegister rn,QRegister rm)10288*f5c631daSSadaf Ebrahimi   void Vsubhn(DataType dt, DRegister rd, QRegister rn, QRegister rm) {
10289*f5c631daSSadaf Ebrahimi     Vsubhn(al, dt, rd, rn, rm);
10290*f5c631daSSadaf Ebrahimi   }
10291*f5c631daSSadaf Ebrahimi 
Vsubl(Condition cond,DataType dt,QRegister rd,DRegister rn,DRegister rm)10292*f5c631daSSadaf Ebrahimi   void Vsubl(
10293*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm) {
10294*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
10295*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
10296*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
10297*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
10298*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
10299*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
10300*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
10301*f5c631daSSadaf Ebrahimi     vsubl(cond, dt, rd, rn, rm);
10302*f5c631daSSadaf Ebrahimi   }
Vsubl(DataType dt,QRegister rd,DRegister rn,DRegister rm)10303*f5c631daSSadaf Ebrahimi   void Vsubl(DataType dt, QRegister rd, DRegister rn, DRegister rm) {
10304*f5c631daSSadaf Ebrahimi     Vsubl(al, dt, rd, rn, rm);
10305*f5c631daSSadaf Ebrahimi   }
10306*f5c631daSSadaf Ebrahimi 
Vsubw(Condition cond,DataType dt,QRegister rd,QRegister rn,DRegister rm)10307*f5c631daSSadaf Ebrahimi   void Vsubw(
10308*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, QRegister rn, DRegister rm) {
10309*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
10310*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
10311*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
10312*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
10313*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
10314*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
10315*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
10316*f5c631daSSadaf Ebrahimi     vsubw(cond, dt, rd, rn, rm);
10317*f5c631daSSadaf Ebrahimi   }
Vsubw(DataType dt,QRegister rd,QRegister rn,DRegister rm)10318*f5c631daSSadaf Ebrahimi   void Vsubw(DataType dt, QRegister rd, QRegister rn, DRegister rm) {
10319*f5c631daSSadaf Ebrahimi     Vsubw(al, dt, rd, rn, rm);
10320*f5c631daSSadaf Ebrahimi   }
10321*f5c631daSSadaf Ebrahimi 
Vswp(Condition cond,DataType dt,DRegister rd,DRegister rm)10322*f5c631daSSadaf Ebrahimi   void Vswp(Condition cond, DataType dt, DRegister rd, DRegister rm) {
10323*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
10324*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
10325*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
10326*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
10327*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
10328*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
10329*f5c631daSSadaf Ebrahimi     vswp(cond, dt, rd, rm);
10330*f5c631daSSadaf Ebrahimi   }
Vswp(DataType dt,DRegister rd,DRegister rm)10331*f5c631daSSadaf Ebrahimi   void Vswp(DataType dt, DRegister rd, DRegister rm) { Vswp(al, dt, rd, rm); }
Vswp(Condition cond,DRegister rd,DRegister rm)10332*f5c631daSSadaf Ebrahimi   void Vswp(Condition cond, DRegister rd, DRegister rm) {
10333*f5c631daSSadaf Ebrahimi     Vswp(cond, kDataTypeValueNone, rd, rm);
10334*f5c631daSSadaf Ebrahimi   }
Vswp(DRegister rd,DRegister rm)10335*f5c631daSSadaf Ebrahimi   void Vswp(DRegister rd, DRegister rm) {
10336*f5c631daSSadaf Ebrahimi     Vswp(al, kDataTypeValueNone, rd, rm);
10337*f5c631daSSadaf Ebrahimi   }
10338*f5c631daSSadaf Ebrahimi 
Vswp(Condition cond,DataType dt,QRegister rd,QRegister rm)10339*f5c631daSSadaf Ebrahimi   void Vswp(Condition cond, DataType dt, QRegister rd, QRegister rm) {
10340*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
10341*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
10342*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
10343*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
10344*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
10345*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
10346*f5c631daSSadaf Ebrahimi     vswp(cond, dt, rd, rm);
10347*f5c631daSSadaf Ebrahimi   }
Vswp(DataType dt,QRegister rd,QRegister rm)10348*f5c631daSSadaf Ebrahimi   void Vswp(DataType dt, QRegister rd, QRegister rm) { Vswp(al, dt, rd, rm); }
Vswp(Condition cond,QRegister rd,QRegister rm)10349*f5c631daSSadaf Ebrahimi   void Vswp(Condition cond, QRegister rd, QRegister rm) {
10350*f5c631daSSadaf Ebrahimi     Vswp(cond, kDataTypeValueNone, rd, rm);
10351*f5c631daSSadaf Ebrahimi   }
Vswp(QRegister rd,QRegister rm)10352*f5c631daSSadaf Ebrahimi   void Vswp(QRegister rd, QRegister rm) {
10353*f5c631daSSadaf Ebrahimi     Vswp(al, kDataTypeValueNone, rd, rm);
10354*f5c631daSSadaf Ebrahimi   }
10355*f5c631daSSadaf Ebrahimi 
Vtbl(Condition cond,DataType dt,DRegister rd,const NeonRegisterList & nreglist,DRegister rm)10356*f5c631daSSadaf Ebrahimi   void Vtbl(Condition cond,
10357*f5c631daSSadaf Ebrahimi             DataType dt,
10358*f5c631daSSadaf Ebrahimi             DRegister rd,
10359*f5c631daSSadaf Ebrahimi             const NeonRegisterList& nreglist,
10360*f5c631daSSadaf Ebrahimi             DRegister rm) {
10361*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
10362*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(nreglist));
10363*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
10364*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
10365*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
10366*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
10367*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
10368*f5c631daSSadaf Ebrahimi     vtbl(cond, dt, rd, nreglist, rm);
10369*f5c631daSSadaf Ebrahimi   }
Vtbl(DataType dt,DRegister rd,const NeonRegisterList & nreglist,DRegister rm)10370*f5c631daSSadaf Ebrahimi   void Vtbl(DataType dt,
10371*f5c631daSSadaf Ebrahimi             DRegister rd,
10372*f5c631daSSadaf Ebrahimi             const NeonRegisterList& nreglist,
10373*f5c631daSSadaf Ebrahimi             DRegister rm) {
10374*f5c631daSSadaf Ebrahimi     Vtbl(al, dt, rd, nreglist, rm);
10375*f5c631daSSadaf Ebrahimi   }
10376*f5c631daSSadaf Ebrahimi 
Vtbx(Condition cond,DataType dt,DRegister rd,const NeonRegisterList & nreglist,DRegister rm)10377*f5c631daSSadaf Ebrahimi   void Vtbx(Condition cond,
10378*f5c631daSSadaf Ebrahimi             DataType dt,
10379*f5c631daSSadaf Ebrahimi             DRegister rd,
10380*f5c631daSSadaf Ebrahimi             const NeonRegisterList& nreglist,
10381*f5c631daSSadaf Ebrahimi             DRegister rm) {
10382*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
10383*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(nreglist));
10384*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
10385*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
10386*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
10387*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
10388*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
10389*f5c631daSSadaf Ebrahimi     vtbx(cond, dt, rd, nreglist, rm);
10390*f5c631daSSadaf Ebrahimi   }
Vtbx(DataType dt,DRegister rd,const NeonRegisterList & nreglist,DRegister rm)10391*f5c631daSSadaf Ebrahimi   void Vtbx(DataType dt,
10392*f5c631daSSadaf Ebrahimi             DRegister rd,
10393*f5c631daSSadaf Ebrahimi             const NeonRegisterList& nreglist,
10394*f5c631daSSadaf Ebrahimi             DRegister rm) {
10395*f5c631daSSadaf Ebrahimi     Vtbx(al, dt, rd, nreglist, rm);
10396*f5c631daSSadaf Ebrahimi   }
10397*f5c631daSSadaf Ebrahimi 
Vtrn(Condition cond,DataType dt,DRegister rd,DRegister rm)10398*f5c631daSSadaf Ebrahimi   void Vtrn(Condition cond, DataType dt, DRegister rd, DRegister rm) {
10399*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
10400*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
10401*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
10402*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
10403*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
10404*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
10405*f5c631daSSadaf Ebrahimi     vtrn(cond, dt, rd, rm);
10406*f5c631daSSadaf Ebrahimi   }
Vtrn(DataType dt,DRegister rd,DRegister rm)10407*f5c631daSSadaf Ebrahimi   void Vtrn(DataType dt, DRegister rd, DRegister rm) { Vtrn(al, dt, rd, rm); }
10408*f5c631daSSadaf Ebrahimi 
Vtrn(Condition cond,DataType dt,QRegister rd,QRegister rm)10409*f5c631daSSadaf Ebrahimi   void Vtrn(Condition cond, DataType dt, QRegister rd, QRegister rm) {
10410*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
10411*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
10412*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
10413*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
10414*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
10415*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
10416*f5c631daSSadaf Ebrahimi     vtrn(cond, dt, rd, rm);
10417*f5c631daSSadaf Ebrahimi   }
Vtrn(DataType dt,QRegister rd,QRegister rm)10418*f5c631daSSadaf Ebrahimi   void Vtrn(DataType dt, QRegister rd, QRegister rm) { Vtrn(al, dt, rd, rm); }
10419*f5c631daSSadaf Ebrahimi 
Vtst(Condition cond,DataType dt,DRegister rd,DRegister rn,DRegister rm)10420*f5c631daSSadaf Ebrahimi   void Vtst(
10421*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) {
10422*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
10423*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
10424*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
10425*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
10426*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
10427*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
10428*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
10429*f5c631daSSadaf Ebrahimi     vtst(cond, dt, rd, rn, rm);
10430*f5c631daSSadaf Ebrahimi   }
Vtst(DataType dt,DRegister rd,DRegister rn,DRegister rm)10431*f5c631daSSadaf Ebrahimi   void Vtst(DataType dt, DRegister rd, DRegister rn, DRegister rm) {
10432*f5c631daSSadaf Ebrahimi     Vtst(al, dt, rd, rn, rm);
10433*f5c631daSSadaf Ebrahimi   }
10434*f5c631daSSadaf Ebrahimi 
Vtst(Condition cond,DataType dt,QRegister rd,QRegister rn,QRegister rm)10435*f5c631daSSadaf Ebrahimi   void Vtst(
10436*f5c631daSSadaf Ebrahimi       Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) {
10437*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
10438*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rn));
10439*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
10440*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
10441*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
10442*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
10443*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
10444*f5c631daSSadaf Ebrahimi     vtst(cond, dt, rd, rn, rm);
10445*f5c631daSSadaf Ebrahimi   }
Vtst(DataType dt,QRegister rd,QRegister rn,QRegister rm)10446*f5c631daSSadaf Ebrahimi   void Vtst(DataType dt, QRegister rd, QRegister rn, QRegister rm) {
10447*f5c631daSSadaf Ebrahimi     Vtst(al, dt, rd, rn, rm);
10448*f5c631daSSadaf Ebrahimi   }
10449*f5c631daSSadaf Ebrahimi 
Vuzp(Condition cond,DataType dt,DRegister rd,DRegister rm)10450*f5c631daSSadaf Ebrahimi   void Vuzp(Condition cond, DataType dt, DRegister rd, DRegister rm) {
10451*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
10452*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
10453*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
10454*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
10455*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
10456*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
10457*f5c631daSSadaf Ebrahimi     vuzp(cond, dt, rd, rm);
10458*f5c631daSSadaf Ebrahimi   }
Vuzp(DataType dt,DRegister rd,DRegister rm)10459*f5c631daSSadaf Ebrahimi   void Vuzp(DataType dt, DRegister rd, DRegister rm) { Vuzp(al, dt, rd, rm); }
10460*f5c631daSSadaf Ebrahimi 
Vuzp(Condition cond,DataType dt,QRegister rd,QRegister rm)10461*f5c631daSSadaf Ebrahimi   void Vuzp(Condition cond, DataType dt, QRegister rd, QRegister rm) {
10462*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
10463*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
10464*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
10465*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
10466*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
10467*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
10468*f5c631daSSadaf Ebrahimi     vuzp(cond, dt, rd, rm);
10469*f5c631daSSadaf Ebrahimi   }
Vuzp(DataType dt,QRegister rd,QRegister rm)10470*f5c631daSSadaf Ebrahimi   void Vuzp(DataType dt, QRegister rd, QRegister rm) { Vuzp(al, dt, rd, rm); }
10471*f5c631daSSadaf Ebrahimi 
Vzip(Condition cond,DataType dt,DRegister rd,DRegister rm)10472*f5c631daSSadaf Ebrahimi   void Vzip(Condition cond, DataType dt, DRegister rd, DRegister rm) {
10473*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
10474*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
10475*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
10476*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
10477*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
10478*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
10479*f5c631daSSadaf Ebrahimi     vzip(cond, dt, rd, rm);
10480*f5c631daSSadaf Ebrahimi   }
Vzip(DataType dt,DRegister rd,DRegister rm)10481*f5c631daSSadaf Ebrahimi   void Vzip(DataType dt, DRegister rd, DRegister rm) { Vzip(al, dt, rd, rm); }
10482*f5c631daSSadaf Ebrahimi 
Vzip(Condition cond,DataType dt,QRegister rd,QRegister rm)10483*f5c631daSSadaf Ebrahimi   void Vzip(Condition cond, DataType dt, QRegister rd, QRegister rm) {
10484*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rd));
10485*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(!AliasesAvailableScratchRegister(rm));
10486*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
10487*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
10488*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
10489*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
10490*f5c631daSSadaf Ebrahimi     vzip(cond, dt, rd, rm);
10491*f5c631daSSadaf Ebrahimi   }
Vzip(DataType dt,QRegister rd,QRegister rm)10492*f5c631daSSadaf Ebrahimi   void Vzip(DataType dt, QRegister rd, QRegister rm) { Vzip(al, dt, rd, rm); }
10493*f5c631daSSadaf Ebrahimi 
Yield(Condition cond)10494*f5c631daSSadaf Ebrahimi   void Yield(Condition cond) {
10495*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(allow_macro_instructions_);
10496*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(OutsideITBlock());
10497*f5c631daSSadaf Ebrahimi     MacroEmissionCheckScope guard(this);
10498*f5c631daSSadaf Ebrahimi     ITScope it_scope(this, &cond, guard);
10499*f5c631daSSadaf Ebrahimi     yield(cond);
10500*f5c631daSSadaf Ebrahimi   }
Yield()10501*f5c631daSSadaf Ebrahimi   void Yield() { Yield(al); }
Vabs(Condition cond,VRegister rd,VRegister rm)10502*f5c631daSSadaf Ebrahimi   void Vabs(Condition cond, VRegister rd, VRegister rm) {
10503*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.IsS() || rd.IsD());
10504*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rm.GetType());
10505*f5c631daSSadaf Ebrahimi     if (rd.IsS()) {
10506*f5c631daSSadaf Ebrahimi       Vabs(cond, F32, rd.S(), rm.S());
10507*f5c631daSSadaf Ebrahimi     } else {
10508*f5c631daSSadaf Ebrahimi       Vabs(cond, F64, rd.D(), rm.D());
10509*f5c631daSSadaf Ebrahimi     }
10510*f5c631daSSadaf Ebrahimi   }
Vabs(VRegister rd,VRegister rm)10511*f5c631daSSadaf Ebrahimi   void Vabs(VRegister rd, VRegister rm) { Vabs(al, rd, rm); }
Vadd(Condition cond,VRegister rd,VRegister rn,VRegister rm)10512*f5c631daSSadaf Ebrahimi   void Vadd(Condition cond, VRegister rd, VRegister rn, VRegister rm) {
10513*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.IsS() || rd.IsD());
10514*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rn.GetType());
10515*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rm.GetType());
10516*f5c631daSSadaf Ebrahimi     if (rd.IsS()) {
10517*f5c631daSSadaf Ebrahimi       Vadd(cond, F32, rd.S(), rn.S(), rm.S());
10518*f5c631daSSadaf Ebrahimi     } else {
10519*f5c631daSSadaf Ebrahimi       Vadd(cond, F64, rd.D(), rn.D(), rm.D());
10520*f5c631daSSadaf Ebrahimi     }
10521*f5c631daSSadaf Ebrahimi   }
Vadd(VRegister rd,VRegister rn,VRegister rm)10522*f5c631daSSadaf Ebrahimi   void Vadd(VRegister rd, VRegister rn, VRegister rm) { Vadd(al, rd, rn, rm); }
Vcmp(Condition cond,VRegister rd,VRegister rm)10523*f5c631daSSadaf Ebrahimi   void Vcmp(Condition cond, VRegister rd, VRegister rm) {
10524*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.IsS() || rd.IsD());
10525*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rm.GetType());
10526*f5c631daSSadaf Ebrahimi     if (rd.IsS()) {
10527*f5c631daSSadaf Ebrahimi       Vcmp(cond, F32, rd.S(), rm.S());
10528*f5c631daSSadaf Ebrahimi     } else {
10529*f5c631daSSadaf Ebrahimi       Vcmp(cond, F64, rd.D(), rm.D());
10530*f5c631daSSadaf Ebrahimi     }
10531*f5c631daSSadaf Ebrahimi   }
Vcmp(VRegister rd,VRegister rm)10532*f5c631daSSadaf Ebrahimi   void Vcmp(VRegister rd, VRegister rm) { Vcmp(al, rd, rm); }
Vcmpe(Condition cond,VRegister rd,VRegister rm)10533*f5c631daSSadaf Ebrahimi   void Vcmpe(Condition cond, VRegister rd, VRegister rm) {
10534*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.IsS() || rd.IsD());
10535*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rm.GetType());
10536*f5c631daSSadaf Ebrahimi     if (rd.IsS()) {
10537*f5c631daSSadaf Ebrahimi       Vcmpe(cond, F32, rd.S(), rm.S());
10538*f5c631daSSadaf Ebrahimi     } else {
10539*f5c631daSSadaf Ebrahimi       Vcmpe(cond, F64, rd.D(), rm.D());
10540*f5c631daSSadaf Ebrahimi     }
10541*f5c631daSSadaf Ebrahimi   }
Vcmpe(VRegister rd,VRegister rm)10542*f5c631daSSadaf Ebrahimi   void Vcmpe(VRegister rd, VRegister rm) { Vcmpe(al, rd, rm); }
Vdiv(Condition cond,VRegister rd,VRegister rn,VRegister rm)10543*f5c631daSSadaf Ebrahimi   void Vdiv(Condition cond, VRegister rd, VRegister rn, VRegister rm) {
10544*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.IsS() || rd.IsD());
10545*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rn.GetType());
10546*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rm.GetType());
10547*f5c631daSSadaf Ebrahimi     if (rd.IsS()) {
10548*f5c631daSSadaf Ebrahimi       Vdiv(cond, F32, rd.S(), rn.S(), rm.S());
10549*f5c631daSSadaf Ebrahimi     } else {
10550*f5c631daSSadaf Ebrahimi       Vdiv(cond, F64, rd.D(), rn.D(), rm.D());
10551*f5c631daSSadaf Ebrahimi     }
10552*f5c631daSSadaf Ebrahimi   }
Vdiv(VRegister rd,VRegister rn,VRegister rm)10553*f5c631daSSadaf Ebrahimi   void Vdiv(VRegister rd, VRegister rn, VRegister rm) { Vdiv(al, rd, rn, rm); }
Vfma(Condition cond,VRegister rd,VRegister rn,VRegister rm)10554*f5c631daSSadaf Ebrahimi   void Vfma(Condition cond, VRegister rd, VRegister rn, VRegister rm) {
10555*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.IsS() || rd.IsD());
10556*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rn.GetType());
10557*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rm.GetType());
10558*f5c631daSSadaf Ebrahimi     if (rd.IsS()) {
10559*f5c631daSSadaf Ebrahimi       Vfma(cond, F32, rd.S(), rn.S(), rm.S());
10560*f5c631daSSadaf Ebrahimi     } else {
10561*f5c631daSSadaf Ebrahimi       Vfma(cond, F64, rd.D(), rn.D(), rm.D());
10562*f5c631daSSadaf Ebrahimi     }
10563*f5c631daSSadaf Ebrahimi   }
Vfma(VRegister rd,VRegister rn,VRegister rm)10564*f5c631daSSadaf Ebrahimi   void Vfma(VRegister rd, VRegister rn, VRegister rm) { Vfma(al, rd, rn, rm); }
Vfms(Condition cond,VRegister rd,VRegister rn,VRegister rm)10565*f5c631daSSadaf Ebrahimi   void Vfms(Condition cond, VRegister rd, VRegister rn, VRegister rm) {
10566*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.IsS() || rd.IsD());
10567*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rn.GetType());
10568*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rm.GetType());
10569*f5c631daSSadaf Ebrahimi     if (rd.IsS()) {
10570*f5c631daSSadaf Ebrahimi       Vfms(cond, F32, rd.S(), rn.S(), rm.S());
10571*f5c631daSSadaf Ebrahimi     } else {
10572*f5c631daSSadaf Ebrahimi       Vfms(cond, F64, rd.D(), rn.D(), rm.D());
10573*f5c631daSSadaf Ebrahimi     }
10574*f5c631daSSadaf Ebrahimi   }
Vfms(VRegister rd,VRegister rn,VRegister rm)10575*f5c631daSSadaf Ebrahimi   void Vfms(VRegister rd, VRegister rn, VRegister rm) { Vfms(al, rd, rn, rm); }
Vfnma(Condition cond,VRegister rd,VRegister rn,VRegister rm)10576*f5c631daSSadaf Ebrahimi   void Vfnma(Condition cond, VRegister rd, VRegister rn, VRegister rm) {
10577*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.IsS() || rd.IsD());
10578*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rn.GetType());
10579*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rm.GetType());
10580*f5c631daSSadaf Ebrahimi     if (rd.IsS()) {
10581*f5c631daSSadaf Ebrahimi       Vfnma(cond, F32, rd.S(), rn.S(), rm.S());
10582*f5c631daSSadaf Ebrahimi     } else {
10583*f5c631daSSadaf Ebrahimi       Vfnma(cond, F64, rd.D(), rn.D(), rm.D());
10584*f5c631daSSadaf Ebrahimi     }
10585*f5c631daSSadaf Ebrahimi   }
Vfnma(VRegister rd,VRegister rn,VRegister rm)10586*f5c631daSSadaf Ebrahimi   void Vfnma(VRegister rd, VRegister rn, VRegister rm) {
10587*f5c631daSSadaf Ebrahimi     Vfnma(al, rd, rn, rm);
10588*f5c631daSSadaf Ebrahimi   }
Vfnms(Condition cond,VRegister rd,VRegister rn,VRegister rm)10589*f5c631daSSadaf Ebrahimi   void Vfnms(Condition cond, VRegister rd, VRegister rn, VRegister rm) {
10590*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.IsS() || rd.IsD());
10591*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rn.GetType());
10592*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rm.GetType());
10593*f5c631daSSadaf Ebrahimi     if (rd.IsS()) {
10594*f5c631daSSadaf Ebrahimi       Vfnms(cond, F32, rd.S(), rn.S(), rm.S());
10595*f5c631daSSadaf Ebrahimi     } else {
10596*f5c631daSSadaf Ebrahimi       Vfnms(cond, F64, rd.D(), rn.D(), rm.D());
10597*f5c631daSSadaf Ebrahimi     }
10598*f5c631daSSadaf Ebrahimi   }
Vfnms(VRegister rd,VRegister rn,VRegister rm)10599*f5c631daSSadaf Ebrahimi   void Vfnms(VRegister rd, VRegister rn, VRegister rm) {
10600*f5c631daSSadaf Ebrahimi     Vfnms(al, rd, rn, rm);
10601*f5c631daSSadaf Ebrahimi   }
Vmaxnm(VRegister rd,VRegister rn,VRegister rm)10602*f5c631daSSadaf Ebrahimi   void Vmaxnm(VRegister rd, VRegister rn, VRegister rm) {
10603*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.IsS() || rd.IsD());
10604*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rn.GetType());
10605*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rm.GetType());
10606*f5c631daSSadaf Ebrahimi     if (rd.IsS()) {
10607*f5c631daSSadaf Ebrahimi       Vmaxnm(F32, rd.S(), rn.S(), rm.S());
10608*f5c631daSSadaf Ebrahimi     } else {
10609*f5c631daSSadaf Ebrahimi       Vmaxnm(F64, rd.D(), rn.D(), rm.D());
10610*f5c631daSSadaf Ebrahimi     }
10611*f5c631daSSadaf Ebrahimi   }
Vminnm(VRegister rd,VRegister rn,VRegister rm)10612*f5c631daSSadaf Ebrahimi   void Vminnm(VRegister rd, VRegister rn, VRegister rm) {
10613*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.IsS() || rd.IsD());
10614*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rn.GetType());
10615*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rm.GetType());
10616*f5c631daSSadaf Ebrahimi     if (rd.IsS()) {
10617*f5c631daSSadaf Ebrahimi       Vminnm(F32, rd.S(), rn.S(), rm.S());
10618*f5c631daSSadaf Ebrahimi     } else {
10619*f5c631daSSadaf Ebrahimi       Vminnm(F64, rd.D(), rn.D(), rm.D());
10620*f5c631daSSadaf Ebrahimi     }
10621*f5c631daSSadaf Ebrahimi   }
Vmla(Condition cond,VRegister rd,VRegister rn,VRegister rm)10622*f5c631daSSadaf Ebrahimi   void Vmla(Condition cond, VRegister rd, VRegister rn, VRegister rm) {
10623*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.IsS() || rd.IsD());
10624*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rn.GetType());
10625*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rm.GetType());
10626*f5c631daSSadaf Ebrahimi     if (rd.IsS()) {
10627*f5c631daSSadaf Ebrahimi       Vmla(cond, F32, rd.S(), rn.S(), rm.S());
10628*f5c631daSSadaf Ebrahimi     } else {
10629*f5c631daSSadaf Ebrahimi       Vmla(cond, F64, rd.D(), rn.D(), rm.D());
10630*f5c631daSSadaf Ebrahimi     }
10631*f5c631daSSadaf Ebrahimi   }
Vmla(VRegister rd,VRegister rn,VRegister rm)10632*f5c631daSSadaf Ebrahimi   void Vmla(VRegister rd, VRegister rn, VRegister rm) { Vmla(al, rd, rn, rm); }
Vmls(Condition cond,VRegister rd,VRegister rn,VRegister rm)10633*f5c631daSSadaf Ebrahimi   void Vmls(Condition cond, VRegister rd, VRegister rn, VRegister rm) {
10634*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.IsS() || rd.IsD());
10635*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rn.GetType());
10636*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rm.GetType());
10637*f5c631daSSadaf Ebrahimi     if (rd.IsS()) {
10638*f5c631daSSadaf Ebrahimi       Vmls(cond, F32, rd.S(), rn.S(), rm.S());
10639*f5c631daSSadaf Ebrahimi     } else {
10640*f5c631daSSadaf Ebrahimi       Vmls(cond, F64, rd.D(), rn.D(), rm.D());
10641*f5c631daSSadaf Ebrahimi     }
10642*f5c631daSSadaf Ebrahimi   }
Vmls(VRegister rd,VRegister rn,VRegister rm)10643*f5c631daSSadaf Ebrahimi   void Vmls(VRegister rd, VRegister rn, VRegister rm) { Vmls(al, rd, rn, rm); }
Vmov(Condition cond,VRegister rd,VRegister rm)10644*f5c631daSSadaf Ebrahimi   void Vmov(Condition cond, VRegister rd, VRegister rm) {
10645*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.IsS() || rd.IsD());
10646*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rm.GetType());
10647*f5c631daSSadaf Ebrahimi     if (rd.IsS()) {
10648*f5c631daSSadaf Ebrahimi       Vmov(cond, F32, rd.S(), rm.S());
10649*f5c631daSSadaf Ebrahimi     } else {
10650*f5c631daSSadaf Ebrahimi       Vmov(cond, F64, rd.D(), rm.D());
10651*f5c631daSSadaf Ebrahimi     }
10652*f5c631daSSadaf Ebrahimi   }
Vmov(VRegister rd,VRegister rm)10653*f5c631daSSadaf Ebrahimi   void Vmov(VRegister rd, VRegister rm) { Vmov(al, rd, rm); }
Vmul(Condition cond,VRegister rd,VRegister rn,VRegister rm)10654*f5c631daSSadaf Ebrahimi   void Vmul(Condition cond, VRegister rd, VRegister rn, VRegister rm) {
10655*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.IsS() || rd.IsD());
10656*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rn.GetType());
10657*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rm.GetType());
10658*f5c631daSSadaf Ebrahimi     if (rd.IsS()) {
10659*f5c631daSSadaf Ebrahimi       Vmul(cond, F32, rd.S(), rn.S(), rm.S());
10660*f5c631daSSadaf Ebrahimi     } else {
10661*f5c631daSSadaf Ebrahimi       Vmul(cond, F64, rd.D(), rn.D(), rm.D());
10662*f5c631daSSadaf Ebrahimi     }
10663*f5c631daSSadaf Ebrahimi   }
Vmul(VRegister rd,VRegister rn,VRegister rm)10664*f5c631daSSadaf Ebrahimi   void Vmul(VRegister rd, VRegister rn, VRegister rm) { Vmul(al, rd, rn, rm); }
Vneg(Condition cond,VRegister rd,VRegister rm)10665*f5c631daSSadaf Ebrahimi   void Vneg(Condition cond, VRegister rd, VRegister rm) {
10666*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.IsS() || rd.IsD());
10667*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rm.GetType());
10668*f5c631daSSadaf Ebrahimi     if (rd.IsS()) {
10669*f5c631daSSadaf Ebrahimi       Vneg(cond, F32, rd.S(), rm.S());
10670*f5c631daSSadaf Ebrahimi     } else {
10671*f5c631daSSadaf Ebrahimi       Vneg(cond, F64, rd.D(), rm.D());
10672*f5c631daSSadaf Ebrahimi     }
10673*f5c631daSSadaf Ebrahimi   }
Vneg(VRegister rd,VRegister rm)10674*f5c631daSSadaf Ebrahimi   void Vneg(VRegister rd, VRegister rm) { Vneg(al, rd, rm); }
Vnmla(Condition cond,VRegister rd,VRegister rn,VRegister rm)10675*f5c631daSSadaf Ebrahimi   void Vnmla(Condition cond, VRegister rd, VRegister rn, VRegister rm) {
10676*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.IsS() || rd.IsD());
10677*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rn.GetType());
10678*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rm.GetType());
10679*f5c631daSSadaf Ebrahimi     if (rd.IsS()) {
10680*f5c631daSSadaf Ebrahimi       Vnmla(cond, F32, rd.S(), rn.S(), rm.S());
10681*f5c631daSSadaf Ebrahimi     } else {
10682*f5c631daSSadaf Ebrahimi       Vnmla(cond, F64, rd.D(), rn.D(), rm.D());
10683*f5c631daSSadaf Ebrahimi     }
10684*f5c631daSSadaf Ebrahimi   }
Vnmla(VRegister rd,VRegister rn,VRegister rm)10685*f5c631daSSadaf Ebrahimi   void Vnmla(VRegister rd, VRegister rn, VRegister rm) {
10686*f5c631daSSadaf Ebrahimi     Vnmla(al, rd, rn, rm);
10687*f5c631daSSadaf Ebrahimi   }
Vnmls(Condition cond,VRegister rd,VRegister rn,VRegister rm)10688*f5c631daSSadaf Ebrahimi   void Vnmls(Condition cond, VRegister rd, VRegister rn, VRegister rm) {
10689*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.IsS() || rd.IsD());
10690*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rn.GetType());
10691*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rm.GetType());
10692*f5c631daSSadaf Ebrahimi     if (rd.IsS()) {
10693*f5c631daSSadaf Ebrahimi       Vnmls(cond, F32, rd.S(), rn.S(), rm.S());
10694*f5c631daSSadaf Ebrahimi     } else {
10695*f5c631daSSadaf Ebrahimi       Vnmls(cond, F64, rd.D(), rn.D(), rm.D());
10696*f5c631daSSadaf Ebrahimi     }
10697*f5c631daSSadaf Ebrahimi   }
Vnmls(VRegister rd,VRegister rn,VRegister rm)10698*f5c631daSSadaf Ebrahimi   void Vnmls(VRegister rd, VRegister rn, VRegister rm) {
10699*f5c631daSSadaf Ebrahimi     Vnmls(al, rd, rn, rm);
10700*f5c631daSSadaf Ebrahimi   }
Vnmul(Condition cond,VRegister rd,VRegister rn,VRegister rm)10701*f5c631daSSadaf Ebrahimi   void Vnmul(Condition cond, VRegister rd, VRegister rn, VRegister rm) {
10702*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.IsS() || rd.IsD());
10703*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rn.GetType());
10704*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rm.GetType());
10705*f5c631daSSadaf Ebrahimi     if (rd.IsS()) {
10706*f5c631daSSadaf Ebrahimi       Vnmul(cond, F32, rd.S(), rn.S(), rm.S());
10707*f5c631daSSadaf Ebrahimi     } else {
10708*f5c631daSSadaf Ebrahimi       Vnmul(cond, F64, rd.D(), rn.D(), rm.D());
10709*f5c631daSSadaf Ebrahimi     }
10710*f5c631daSSadaf Ebrahimi   }
Vnmul(VRegister rd,VRegister rn,VRegister rm)10711*f5c631daSSadaf Ebrahimi   void Vnmul(VRegister rd, VRegister rn, VRegister rm) {
10712*f5c631daSSadaf Ebrahimi     Vnmul(al, rd, rn, rm);
10713*f5c631daSSadaf Ebrahimi   }
Vrinta(VRegister rd,VRegister rm)10714*f5c631daSSadaf Ebrahimi   void Vrinta(VRegister rd, VRegister rm) {
10715*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.IsS() || rd.IsD());
10716*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rm.GetType());
10717*f5c631daSSadaf Ebrahimi     if (rd.IsS()) {
10718*f5c631daSSadaf Ebrahimi       Vrinta(F32, rd.S(), rm.S());
10719*f5c631daSSadaf Ebrahimi     } else {
10720*f5c631daSSadaf Ebrahimi       Vrinta(F64, rd.D(), rm.D());
10721*f5c631daSSadaf Ebrahimi     }
10722*f5c631daSSadaf Ebrahimi   }
Vrintm(VRegister rd,VRegister rm)10723*f5c631daSSadaf Ebrahimi   void Vrintm(VRegister rd, VRegister rm) {
10724*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.IsS() || rd.IsD());
10725*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rm.GetType());
10726*f5c631daSSadaf Ebrahimi     if (rd.IsS()) {
10727*f5c631daSSadaf Ebrahimi       Vrintm(F32, rd.S(), rm.S());
10728*f5c631daSSadaf Ebrahimi     } else {
10729*f5c631daSSadaf Ebrahimi       Vrintm(F64, rd.D(), rm.D());
10730*f5c631daSSadaf Ebrahimi     }
10731*f5c631daSSadaf Ebrahimi   }
Vrintn(VRegister rd,VRegister rm)10732*f5c631daSSadaf Ebrahimi   void Vrintn(VRegister rd, VRegister rm) {
10733*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.IsS() || rd.IsD());
10734*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rm.GetType());
10735*f5c631daSSadaf Ebrahimi     if (rd.IsS()) {
10736*f5c631daSSadaf Ebrahimi       Vrintn(F32, rd.S(), rm.S());
10737*f5c631daSSadaf Ebrahimi     } else {
10738*f5c631daSSadaf Ebrahimi       Vrintn(F64, rd.D(), rm.D());
10739*f5c631daSSadaf Ebrahimi     }
10740*f5c631daSSadaf Ebrahimi   }
Vrintp(VRegister rd,VRegister rm)10741*f5c631daSSadaf Ebrahimi   void Vrintp(VRegister rd, VRegister rm) {
10742*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.IsS() || rd.IsD());
10743*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rm.GetType());
10744*f5c631daSSadaf Ebrahimi     if (rd.IsS()) {
10745*f5c631daSSadaf Ebrahimi       Vrintp(F32, rd.S(), rm.S());
10746*f5c631daSSadaf Ebrahimi     } else {
10747*f5c631daSSadaf Ebrahimi       Vrintp(F64, rd.D(), rm.D());
10748*f5c631daSSadaf Ebrahimi     }
10749*f5c631daSSadaf Ebrahimi   }
Vrintr(Condition cond,VRegister rd,VRegister rm)10750*f5c631daSSadaf Ebrahimi   void Vrintr(Condition cond, VRegister rd, VRegister rm) {
10751*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.IsS() || rd.IsD());
10752*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rm.GetType());
10753*f5c631daSSadaf Ebrahimi     if (rd.IsS()) {
10754*f5c631daSSadaf Ebrahimi       Vrintr(cond, F32, rd.S(), rm.S());
10755*f5c631daSSadaf Ebrahimi     } else {
10756*f5c631daSSadaf Ebrahimi       Vrintr(cond, F64, rd.D(), rm.D());
10757*f5c631daSSadaf Ebrahimi     }
10758*f5c631daSSadaf Ebrahimi   }
Vrintr(VRegister rd,VRegister rm)10759*f5c631daSSadaf Ebrahimi   void Vrintr(VRegister rd, VRegister rm) { Vrintr(al, rd, rm); }
Vrintx(Condition cond,VRegister rd,VRegister rm)10760*f5c631daSSadaf Ebrahimi   void Vrintx(Condition cond, VRegister rd, VRegister rm) {
10761*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.IsS() || rd.IsD());
10762*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rm.GetType());
10763*f5c631daSSadaf Ebrahimi     if (rd.IsS()) {
10764*f5c631daSSadaf Ebrahimi       Vrintx(cond, F32, rd.S(), rm.S());
10765*f5c631daSSadaf Ebrahimi     } else {
10766*f5c631daSSadaf Ebrahimi       Vrintx(cond, F64, rd.D(), rm.D());
10767*f5c631daSSadaf Ebrahimi     }
10768*f5c631daSSadaf Ebrahimi   }
Vrintx(VRegister rd,VRegister rm)10769*f5c631daSSadaf Ebrahimi   void Vrintx(VRegister rd, VRegister rm) { Vrintx(al, rd, rm); }
Vrintz(Condition cond,VRegister rd,VRegister rm)10770*f5c631daSSadaf Ebrahimi   void Vrintz(Condition cond, VRegister rd, VRegister rm) {
10771*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.IsS() || rd.IsD());
10772*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rm.GetType());
10773*f5c631daSSadaf Ebrahimi     if (rd.IsS()) {
10774*f5c631daSSadaf Ebrahimi       Vrintz(cond, F32, rd.S(), rm.S());
10775*f5c631daSSadaf Ebrahimi     } else {
10776*f5c631daSSadaf Ebrahimi       Vrintz(cond, F64, rd.D(), rm.D());
10777*f5c631daSSadaf Ebrahimi     }
10778*f5c631daSSadaf Ebrahimi   }
Vrintz(VRegister rd,VRegister rm)10779*f5c631daSSadaf Ebrahimi   void Vrintz(VRegister rd, VRegister rm) { Vrintz(al, rd, rm); }
Vseleq(VRegister rd,VRegister rn,VRegister rm)10780*f5c631daSSadaf Ebrahimi   void Vseleq(VRegister rd, VRegister rn, VRegister rm) {
10781*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.IsS() || rd.IsD());
10782*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rn.GetType());
10783*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rm.GetType());
10784*f5c631daSSadaf Ebrahimi     if (rd.IsS()) {
10785*f5c631daSSadaf Ebrahimi       Vseleq(F32, rd.S(), rn.S(), rm.S());
10786*f5c631daSSadaf Ebrahimi     } else {
10787*f5c631daSSadaf Ebrahimi       Vseleq(F64, rd.D(), rn.D(), rm.D());
10788*f5c631daSSadaf Ebrahimi     }
10789*f5c631daSSadaf Ebrahimi   }
Vselge(VRegister rd,VRegister rn,VRegister rm)10790*f5c631daSSadaf Ebrahimi   void Vselge(VRegister rd, VRegister rn, VRegister rm) {
10791*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.IsS() || rd.IsD());
10792*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rn.GetType());
10793*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rm.GetType());
10794*f5c631daSSadaf Ebrahimi     if (rd.IsS()) {
10795*f5c631daSSadaf Ebrahimi       Vselge(F32, rd.S(), rn.S(), rm.S());
10796*f5c631daSSadaf Ebrahimi     } else {
10797*f5c631daSSadaf Ebrahimi       Vselge(F64, rd.D(), rn.D(), rm.D());
10798*f5c631daSSadaf Ebrahimi     }
10799*f5c631daSSadaf Ebrahimi   }
Vselgt(VRegister rd,VRegister rn,VRegister rm)10800*f5c631daSSadaf Ebrahimi   void Vselgt(VRegister rd, VRegister rn, VRegister rm) {
10801*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.IsS() || rd.IsD());
10802*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rn.GetType());
10803*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rm.GetType());
10804*f5c631daSSadaf Ebrahimi     if (rd.IsS()) {
10805*f5c631daSSadaf Ebrahimi       Vselgt(F32, rd.S(), rn.S(), rm.S());
10806*f5c631daSSadaf Ebrahimi     } else {
10807*f5c631daSSadaf Ebrahimi       Vselgt(F64, rd.D(), rn.D(), rm.D());
10808*f5c631daSSadaf Ebrahimi     }
10809*f5c631daSSadaf Ebrahimi   }
Vselvs(VRegister rd,VRegister rn,VRegister rm)10810*f5c631daSSadaf Ebrahimi   void Vselvs(VRegister rd, VRegister rn, VRegister rm) {
10811*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.IsS() || rd.IsD());
10812*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rn.GetType());
10813*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rm.GetType());
10814*f5c631daSSadaf Ebrahimi     if (rd.IsS()) {
10815*f5c631daSSadaf Ebrahimi       Vselvs(F32, rd.S(), rn.S(), rm.S());
10816*f5c631daSSadaf Ebrahimi     } else {
10817*f5c631daSSadaf Ebrahimi       Vselvs(F64, rd.D(), rn.D(), rm.D());
10818*f5c631daSSadaf Ebrahimi     }
10819*f5c631daSSadaf Ebrahimi   }
Vsqrt(Condition cond,VRegister rd,VRegister rm)10820*f5c631daSSadaf Ebrahimi   void Vsqrt(Condition cond, VRegister rd, VRegister rm) {
10821*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.IsS() || rd.IsD());
10822*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rm.GetType());
10823*f5c631daSSadaf Ebrahimi     if (rd.IsS()) {
10824*f5c631daSSadaf Ebrahimi       Vsqrt(cond, F32, rd.S(), rm.S());
10825*f5c631daSSadaf Ebrahimi     } else {
10826*f5c631daSSadaf Ebrahimi       Vsqrt(cond, F64, rd.D(), rm.D());
10827*f5c631daSSadaf Ebrahimi     }
10828*f5c631daSSadaf Ebrahimi   }
Vsqrt(VRegister rd,VRegister rm)10829*f5c631daSSadaf Ebrahimi   void Vsqrt(VRegister rd, VRegister rm) { Vsqrt(al, rd, rm); }
Vsub(Condition cond,VRegister rd,VRegister rn,VRegister rm)10830*f5c631daSSadaf Ebrahimi   void Vsub(Condition cond, VRegister rd, VRegister rn, VRegister rm) {
10831*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.IsS() || rd.IsD());
10832*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rn.GetType());
10833*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(rd.GetType() == rm.GetType());
10834*f5c631daSSadaf Ebrahimi     if (rd.IsS()) {
10835*f5c631daSSadaf Ebrahimi       Vsub(cond, F32, rd.S(), rn.S(), rm.S());
10836*f5c631daSSadaf Ebrahimi     } else {
10837*f5c631daSSadaf Ebrahimi       Vsub(cond, F64, rd.D(), rn.D(), rm.D());
10838*f5c631daSSadaf Ebrahimi     }
10839*f5c631daSSadaf Ebrahimi   }
Vsub(VRegister rd,VRegister rn,VRegister rm)10840*f5c631daSSadaf Ebrahimi   void Vsub(VRegister rd, VRegister rn, VRegister rm) { Vsub(al, rd, rn, rm); }
10841*f5c631daSSadaf Ebrahimi   // End of generated code.
10842*f5c631daSSadaf Ebrahimi 
AllowUnpredictable()10843*f5c631daSSadaf Ebrahimi   virtual bool AllowUnpredictable() VIXL_OVERRIDE {
10844*f5c631daSSadaf Ebrahimi     VIXL_ABORT_WITH_MSG("Unpredictable instruction.\n");
10845*f5c631daSSadaf Ebrahimi     return false;
10846*f5c631daSSadaf Ebrahimi   }
AllowStronglyDiscouraged()10847*f5c631daSSadaf Ebrahimi   virtual bool AllowStronglyDiscouraged() VIXL_OVERRIDE {
10848*f5c631daSSadaf Ebrahimi     VIXL_ABORT_WITH_MSG(
10849*f5c631daSSadaf Ebrahimi         "ARM strongly recommends to not use this instruction.\n");
10850*f5c631daSSadaf Ebrahimi     return false;
10851*f5c631daSSadaf Ebrahimi   }
10852*f5c631daSSadaf Ebrahimi   // Old syntax of vrint instructions.
10853*f5c631daSSadaf Ebrahimi   VIXL_DEPRECATED(
10854*f5c631daSSadaf Ebrahimi       "void Vrinta(DataType dt, DRegister rd, DRegister rm)",
Vrinta(DataType dt1,DataType dt2,DRegister rd,DRegister rm)10855*f5c631daSSadaf Ebrahimi       void Vrinta(DataType dt1, DataType dt2, DRegister rd, DRegister rm)) {
10856*f5c631daSSadaf Ebrahimi     USE(dt2);
10857*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(dt1.Is(dt2));
10858*f5c631daSSadaf Ebrahimi     return Vrinta(dt1, rd, rm);
10859*f5c631daSSadaf Ebrahimi   }
10860*f5c631daSSadaf Ebrahimi   VIXL_DEPRECATED(
10861*f5c631daSSadaf Ebrahimi       "void Vrinta(DataType dt, QRegister rd, QRegister rm)",
Vrinta(DataType dt1,DataType dt2,QRegister rd,QRegister rm)10862*f5c631daSSadaf Ebrahimi       void Vrinta(DataType dt1, DataType dt2, QRegister rd, QRegister rm)) {
10863*f5c631daSSadaf Ebrahimi     USE(dt2);
10864*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(dt1.Is(dt2));
10865*f5c631daSSadaf Ebrahimi     return Vrinta(dt1, rd, rm);
10866*f5c631daSSadaf Ebrahimi   }
10867*f5c631daSSadaf Ebrahimi   VIXL_DEPRECATED(
10868*f5c631daSSadaf Ebrahimi       "void Vrinta(DataType dt, SRegister rd, SRegister rm)",
Vrinta(DataType dt1,DataType dt2,SRegister rd,SRegister rm)10869*f5c631daSSadaf Ebrahimi       void Vrinta(DataType dt1, DataType dt2, SRegister rd, SRegister rm)) {
10870*f5c631daSSadaf Ebrahimi     USE(dt2);
10871*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(dt1.Is(dt2));
10872*f5c631daSSadaf Ebrahimi     return Vrinta(dt1, rd, rm);
10873*f5c631daSSadaf Ebrahimi   }
10874*f5c631daSSadaf Ebrahimi 
10875*f5c631daSSadaf Ebrahimi   VIXL_DEPRECATED(
10876*f5c631daSSadaf Ebrahimi       "void Vrintm(DataType dt, DRegister rd, DRegister rm)",
Vrintm(DataType dt1,DataType dt2,DRegister rd,DRegister rm)10877*f5c631daSSadaf Ebrahimi       void Vrintm(DataType dt1, DataType dt2, DRegister rd, DRegister rm)) {
10878*f5c631daSSadaf Ebrahimi     USE(dt2);
10879*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(dt1.Is(dt2));
10880*f5c631daSSadaf Ebrahimi     return Vrintm(dt1, rd, rm);
10881*f5c631daSSadaf Ebrahimi   }
10882*f5c631daSSadaf Ebrahimi   VIXL_DEPRECATED(
10883*f5c631daSSadaf Ebrahimi       "void Vrintm(DataType dt, QRegister rd, QRegister rm)",
Vrintm(DataType dt1,DataType dt2,QRegister rd,QRegister rm)10884*f5c631daSSadaf Ebrahimi       void Vrintm(DataType dt1, DataType dt2, QRegister rd, QRegister rm)) {
10885*f5c631daSSadaf Ebrahimi     USE(dt2);
10886*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(dt1.Is(dt2));
10887*f5c631daSSadaf Ebrahimi     return Vrintm(dt1, rd, rm);
10888*f5c631daSSadaf Ebrahimi   }
10889*f5c631daSSadaf Ebrahimi   VIXL_DEPRECATED(
10890*f5c631daSSadaf Ebrahimi       "void Vrintm(DataType dt, SRegister rd, SRegister rm)",
Vrintm(DataType dt1,DataType dt2,SRegister rd,SRegister rm)10891*f5c631daSSadaf Ebrahimi       void Vrintm(DataType dt1, DataType dt2, SRegister rd, SRegister rm)) {
10892*f5c631daSSadaf Ebrahimi     USE(dt2);
10893*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(dt1.Is(dt2));
10894*f5c631daSSadaf Ebrahimi     return Vrintm(dt1, rd, rm);
10895*f5c631daSSadaf Ebrahimi   }
10896*f5c631daSSadaf Ebrahimi 
10897*f5c631daSSadaf Ebrahimi   VIXL_DEPRECATED(
10898*f5c631daSSadaf Ebrahimi       "void Vrintn(DataType dt, DRegister rd, DRegister rm)",
Vrintn(DataType dt1,DataType dt2,DRegister rd,DRegister rm)10899*f5c631daSSadaf Ebrahimi       void Vrintn(DataType dt1, DataType dt2, DRegister rd, DRegister rm)) {
10900*f5c631daSSadaf Ebrahimi     USE(dt2);
10901*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(dt1.Is(dt2));
10902*f5c631daSSadaf Ebrahimi     return Vrintn(dt1, rd, rm);
10903*f5c631daSSadaf Ebrahimi   }
10904*f5c631daSSadaf Ebrahimi   VIXL_DEPRECATED(
10905*f5c631daSSadaf Ebrahimi       "void Vrintn(DataType dt, QRegister rd, QRegister rm)",
Vrintn(DataType dt1,DataType dt2,QRegister rd,QRegister rm)10906*f5c631daSSadaf Ebrahimi       void Vrintn(DataType dt1, DataType dt2, QRegister rd, QRegister rm)) {
10907*f5c631daSSadaf Ebrahimi     USE(dt2);
10908*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(dt1.Is(dt2));
10909*f5c631daSSadaf Ebrahimi     return Vrintn(dt1, rd, rm);
10910*f5c631daSSadaf Ebrahimi   }
10911*f5c631daSSadaf Ebrahimi   VIXL_DEPRECATED(
10912*f5c631daSSadaf Ebrahimi       "void Vrintn(DataType dt, SRegister rd, SRegister rm)",
Vrintn(DataType dt1,DataType dt2,SRegister rd,SRegister rm)10913*f5c631daSSadaf Ebrahimi       void Vrintn(DataType dt1, DataType dt2, SRegister rd, SRegister rm)) {
10914*f5c631daSSadaf Ebrahimi     USE(dt2);
10915*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(dt1.Is(dt2));
10916*f5c631daSSadaf Ebrahimi     return Vrintn(dt1, rd, rm);
10917*f5c631daSSadaf Ebrahimi   }
10918*f5c631daSSadaf Ebrahimi 
10919*f5c631daSSadaf Ebrahimi   VIXL_DEPRECATED(
10920*f5c631daSSadaf Ebrahimi       "void Vrintp(DataType dt, DRegister rd, DRegister rm)",
Vrintp(DataType dt1,DataType dt2,DRegister rd,DRegister rm)10921*f5c631daSSadaf Ebrahimi       void Vrintp(DataType dt1, DataType dt2, DRegister rd, DRegister rm)) {
10922*f5c631daSSadaf Ebrahimi     USE(dt2);
10923*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(dt1.Is(dt2));
10924*f5c631daSSadaf Ebrahimi     return Vrintp(dt1, rd, rm);
10925*f5c631daSSadaf Ebrahimi   }
10926*f5c631daSSadaf Ebrahimi   VIXL_DEPRECATED(
10927*f5c631daSSadaf Ebrahimi       "void Vrintp(DataType dt, QRegister rd, QRegister rm)",
Vrintp(DataType dt1,DataType dt2,QRegister rd,QRegister rm)10928*f5c631daSSadaf Ebrahimi       void Vrintp(DataType dt1, DataType dt2, QRegister rd, QRegister rm)) {
10929*f5c631daSSadaf Ebrahimi     USE(dt2);
10930*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(dt1.Is(dt2));
10931*f5c631daSSadaf Ebrahimi     return Vrintp(dt1, rd, rm);
10932*f5c631daSSadaf Ebrahimi   }
10933*f5c631daSSadaf Ebrahimi   VIXL_DEPRECATED(
10934*f5c631daSSadaf Ebrahimi       "void Vrintp(DataType dt, SRegister rd, SRegister rm)",
Vrintp(DataType dt1,DataType dt2,SRegister rd,SRegister rm)10935*f5c631daSSadaf Ebrahimi       void Vrintp(DataType dt1, DataType dt2, SRegister rd, SRegister rm)) {
10936*f5c631daSSadaf Ebrahimi     USE(dt2);
10937*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(dt1.Is(dt2));
10938*f5c631daSSadaf Ebrahimi     return Vrintp(dt1, rd, rm);
10939*f5c631daSSadaf Ebrahimi   }
10940*f5c631daSSadaf Ebrahimi 
10941*f5c631daSSadaf Ebrahimi   VIXL_DEPRECATED(
10942*f5c631daSSadaf Ebrahimi       "void Vrintr(Condition cond, DataType dt, SRegister rd, SRegister rm)",
Vrintr(Condition cond,DataType dt1,DataType dt2,SRegister rd,SRegister rm)10943*f5c631daSSadaf Ebrahimi       void Vrintr(Condition cond,
10944*f5c631daSSadaf Ebrahimi                   DataType dt1,
10945*f5c631daSSadaf Ebrahimi                   DataType dt2,
10946*f5c631daSSadaf Ebrahimi                   SRegister rd,
10947*f5c631daSSadaf Ebrahimi                   SRegister rm)) {
10948*f5c631daSSadaf Ebrahimi     USE(dt2);
10949*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(dt1.Is(dt2));
10950*f5c631daSSadaf Ebrahimi     return Vrintr(cond, dt1, rd, rm);
10951*f5c631daSSadaf Ebrahimi   }
10952*f5c631daSSadaf Ebrahimi   VIXL_DEPRECATED(
10953*f5c631daSSadaf Ebrahimi       "void Vrintr(DataType dt, SRegister rd, SRegister rm)",
Vrintr(DataType dt1,DataType dt2,SRegister rd,SRegister rm)10954*f5c631daSSadaf Ebrahimi       void Vrintr(DataType dt1, DataType dt2, SRegister rd, SRegister rm)) {
10955*f5c631daSSadaf Ebrahimi     USE(dt2);
10956*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(dt1.Is(dt2));
10957*f5c631daSSadaf Ebrahimi     return Vrintr(dt1, rd, rm);
10958*f5c631daSSadaf Ebrahimi   }
10959*f5c631daSSadaf Ebrahimi 
10960*f5c631daSSadaf Ebrahimi   VIXL_DEPRECATED(
10961*f5c631daSSadaf Ebrahimi       "void Vrintr(Condition cond, DataType dt, DRegister rd, DRegister rm)",
Vrintr(Condition cond,DataType dt1,DataType dt2,DRegister rd,DRegister rm)10962*f5c631daSSadaf Ebrahimi       void Vrintr(Condition cond,
10963*f5c631daSSadaf Ebrahimi                   DataType dt1,
10964*f5c631daSSadaf Ebrahimi                   DataType dt2,
10965*f5c631daSSadaf Ebrahimi                   DRegister rd,
10966*f5c631daSSadaf Ebrahimi                   DRegister rm)) {
10967*f5c631daSSadaf Ebrahimi     USE(dt2);
10968*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(dt1.Is(dt2));
10969*f5c631daSSadaf Ebrahimi     return Vrintr(cond, dt1, rd, rm);
10970*f5c631daSSadaf Ebrahimi   }
10971*f5c631daSSadaf Ebrahimi   VIXL_DEPRECATED(
10972*f5c631daSSadaf Ebrahimi       "void Vrintr(DataType dt, DRegister rd, DRegister rm)",
Vrintr(DataType dt1,DataType dt2,DRegister rd,DRegister rm)10973*f5c631daSSadaf Ebrahimi       void Vrintr(DataType dt1, DataType dt2, DRegister rd, DRegister rm)) {
10974*f5c631daSSadaf Ebrahimi     USE(dt2);
10975*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(dt1.Is(dt2));
10976*f5c631daSSadaf Ebrahimi     return Vrintr(dt1, rd, rm);
10977*f5c631daSSadaf Ebrahimi   }
10978*f5c631daSSadaf Ebrahimi 
10979*f5c631daSSadaf Ebrahimi   VIXL_DEPRECATED(
10980*f5c631daSSadaf Ebrahimi       "void Vrintx(Condition cond, DataType dt, DRegister rd, DRegister rm)",
Vrintx(Condition cond,DataType dt1,DataType dt2,DRegister rd,DRegister rm)10981*f5c631daSSadaf Ebrahimi       void Vrintx(Condition cond,
10982*f5c631daSSadaf Ebrahimi                   DataType dt1,
10983*f5c631daSSadaf Ebrahimi                   DataType dt2,
10984*f5c631daSSadaf Ebrahimi                   DRegister rd,
10985*f5c631daSSadaf Ebrahimi                   DRegister rm)) {
10986*f5c631daSSadaf Ebrahimi     USE(dt2);
10987*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(dt1.Is(dt2));
10988*f5c631daSSadaf Ebrahimi     return Vrintx(cond, dt1, rd, rm);
10989*f5c631daSSadaf Ebrahimi   }
10990*f5c631daSSadaf Ebrahimi   VIXL_DEPRECATED(
10991*f5c631daSSadaf Ebrahimi       "void Vrintx(DataType dt, DRegister rd, DRegister rm)",
Vrintx(DataType dt1,DataType dt2,DRegister rd,DRegister rm)10992*f5c631daSSadaf Ebrahimi       void Vrintx(DataType dt1, DataType dt2, DRegister rd, DRegister rm)) {
10993*f5c631daSSadaf Ebrahimi     USE(dt2);
10994*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(dt1.Is(dt2));
10995*f5c631daSSadaf Ebrahimi     return Vrintx(dt1, rd, rm);
10996*f5c631daSSadaf Ebrahimi   }
10997*f5c631daSSadaf Ebrahimi 
10998*f5c631daSSadaf Ebrahimi   VIXL_DEPRECATED(
10999*f5c631daSSadaf Ebrahimi       "void Vrintx(DataType dt, QRegister rd, QRegister rm)",
Vrintx(DataType dt1,DataType dt2,QRegister rd,QRegister rm)11000*f5c631daSSadaf Ebrahimi       void Vrintx(DataType dt1, DataType dt2, QRegister rd, QRegister rm)) {
11001*f5c631daSSadaf Ebrahimi     USE(dt2);
11002*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(dt1.Is(dt2));
11003*f5c631daSSadaf Ebrahimi     return Vrintx(dt1, rd, rm);
11004*f5c631daSSadaf Ebrahimi   }
11005*f5c631daSSadaf Ebrahimi 
11006*f5c631daSSadaf Ebrahimi   VIXL_DEPRECATED(
11007*f5c631daSSadaf Ebrahimi       "void Vrintx(Condition cond, DataType dt, SRegister rd, SRegister rm)",
Vrintx(Condition cond,DataType dt1,DataType dt2,SRegister rd,SRegister rm)11008*f5c631daSSadaf Ebrahimi       void Vrintx(Condition cond,
11009*f5c631daSSadaf Ebrahimi                   DataType dt1,
11010*f5c631daSSadaf Ebrahimi                   DataType dt2,
11011*f5c631daSSadaf Ebrahimi                   SRegister rd,
11012*f5c631daSSadaf Ebrahimi                   SRegister rm)) {
11013*f5c631daSSadaf Ebrahimi     USE(dt2);
11014*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(dt1.Is(dt2));
11015*f5c631daSSadaf Ebrahimi     return Vrintx(cond, dt1, rd, rm);
11016*f5c631daSSadaf Ebrahimi   }
11017*f5c631daSSadaf Ebrahimi   VIXL_DEPRECATED(
11018*f5c631daSSadaf Ebrahimi       "void Vrintx(DataType dt, SRegister rd, SRegister rm)",
Vrintx(DataType dt1,DataType dt2,SRegister rd,SRegister rm)11019*f5c631daSSadaf Ebrahimi       void Vrintx(DataType dt1, DataType dt2, SRegister rd, SRegister rm)) {
11020*f5c631daSSadaf Ebrahimi     USE(dt2);
11021*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(dt1.Is(dt2));
11022*f5c631daSSadaf Ebrahimi     return Vrintx(dt1, rd, rm);
11023*f5c631daSSadaf Ebrahimi   }
11024*f5c631daSSadaf Ebrahimi 
11025*f5c631daSSadaf Ebrahimi   VIXL_DEPRECATED(
11026*f5c631daSSadaf Ebrahimi       "void Vrintz(Condition cond, DataType dt, DRegister rd, DRegister rm)",
Vrintz(Condition cond,DataType dt1,DataType dt2,DRegister rd,DRegister rm)11027*f5c631daSSadaf Ebrahimi       void Vrintz(Condition cond,
11028*f5c631daSSadaf Ebrahimi                   DataType dt1,
11029*f5c631daSSadaf Ebrahimi                   DataType dt2,
11030*f5c631daSSadaf Ebrahimi                   DRegister rd,
11031*f5c631daSSadaf Ebrahimi                   DRegister rm)) {
11032*f5c631daSSadaf Ebrahimi     USE(dt2);
11033*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(dt1.Is(dt2));
11034*f5c631daSSadaf Ebrahimi     return Vrintz(cond, dt1, rd, rm);
11035*f5c631daSSadaf Ebrahimi   }
11036*f5c631daSSadaf Ebrahimi   VIXL_DEPRECATED(
11037*f5c631daSSadaf Ebrahimi       "void Vrintz(DataType dt, DRegister rd, DRegister rm)",
Vrintz(DataType dt1,DataType dt2,DRegister rd,DRegister rm)11038*f5c631daSSadaf Ebrahimi       void Vrintz(DataType dt1, DataType dt2, DRegister rd, DRegister rm)) {
11039*f5c631daSSadaf Ebrahimi     USE(dt2);
11040*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(dt1.Is(dt2));
11041*f5c631daSSadaf Ebrahimi     return Vrintz(dt1, rd, rm);
11042*f5c631daSSadaf Ebrahimi   }
11043*f5c631daSSadaf Ebrahimi 
11044*f5c631daSSadaf Ebrahimi   VIXL_DEPRECATED(
11045*f5c631daSSadaf Ebrahimi       "void Vrintz(DataType dt, QRegister rd, QRegister rm)",
Vrintz(DataType dt1,DataType dt2,QRegister rd,QRegister rm)11046*f5c631daSSadaf Ebrahimi       void Vrintz(DataType dt1, DataType dt2, QRegister rd, QRegister rm)) {
11047*f5c631daSSadaf Ebrahimi     USE(dt2);
11048*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(dt1.Is(dt2));
11049*f5c631daSSadaf Ebrahimi     return Vrintz(dt1, rd, rm);
11050*f5c631daSSadaf Ebrahimi   }
11051*f5c631daSSadaf Ebrahimi 
11052*f5c631daSSadaf Ebrahimi   VIXL_DEPRECATED(
11053*f5c631daSSadaf Ebrahimi       "void Vrintz(Condition cond, DataType dt, SRegister rd, SRegister rm)",
Vrintz(Condition cond,DataType dt1,DataType dt2,SRegister rd,SRegister rm)11054*f5c631daSSadaf Ebrahimi       void Vrintz(Condition cond,
11055*f5c631daSSadaf Ebrahimi                   DataType dt1,
11056*f5c631daSSadaf Ebrahimi                   DataType dt2,
11057*f5c631daSSadaf Ebrahimi                   SRegister rd,
11058*f5c631daSSadaf Ebrahimi                   SRegister rm)) {
11059*f5c631daSSadaf Ebrahimi     USE(dt2);
11060*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(dt1.Is(dt2));
11061*f5c631daSSadaf Ebrahimi     return Vrintz(cond, dt1, rd, rm);
11062*f5c631daSSadaf Ebrahimi   }
11063*f5c631daSSadaf Ebrahimi   VIXL_DEPRECATED(
11064*f5c631daSSadaf Ebrahimi       "void Vrintz(DataType dt, SRegister rd, SRegister rm)",
Vrintz(DataType dt1,DataType dt2,SRegister rd,SRegister rm)11065*f5c631daSSadaf Ebrahimi       void Vrintz(DataType dt1, DataType dt2, SRegister rd, SRegister rm)) {
11066*f5c631daSSadaf Ebrahimi     USE(dt2);
11067*f5c631daSSadaf Ebrahimi     VIXL_ASSERT(dt1.Is(dt2));
11068*f5c631daSSadaf Ebrahimi     return Vrintz(dt1, rd, rm);
11069*f5c631daSSadaf Ebrahimi   }
11070*f5c631daSSadaf Ebrahimi 
11071*f5c631daSSadaf Ebrahimi  private:
NeedBranch(Condition * cond)11072*f5c631daSSadaf Ebrahimi   bool NeedBranch(Condition* cond) { return !cond->Is(al) && IsUsingT32(); }
11073*f5c631daSSadaf Ebrahimi   static const int kBranchSize = kMaxInstructionSizeInBytes;
11074*f5c631daSSadaf Ebrahimi 
11075*f5c631daSSadaf Ebrahimi   RegisterList available_;
11076*f5c631daSSadaf Ebrahimi   VRegisterList available_vfp_;
11077*f5c631daSSadaf Ebrahimi   UseScratchRegisterScope* current_scratch_scope_;
11078*f5c631daSSadaf Ebrahimi   MacroAssemblerContext context_;
11079*f5c631daSSadaf Ebrahimi   PoolManager<int32_t> pool_manager_;
11080*f5c631daSSadaf Ebrahimi   bool generate_simulator_code_;
11081*f5c631daSSadaf Ebrahimi   bool allow_macro_instructions_;
11082*f5c631daSSadaf Ebrahimi   Label* pool_end_;
11083*f5c631daSSadaf Ebrahimi 
11084*f5c631daSSadaf Ebrahimi   friend class TestMacroAssembler;
11085*f5c631daSSadaf Ebrahimi };
11086*f5c631daSSadaf Ebrahimi 
11087*f5c631daSSadaf Ebrahimi // This scope utility allows scratch registers to be managed safely. The
11088*f5c631daSSadaf Ebrahimi // MacroAssembler's GetScratchRegisterList() is used as a pool of scratch
11089*f5c631daSSadaf Ebrahimi // registers. These registers can be allocated on demand, and will be returned
11090*f5c631daSSadaf Ebrahimi // at the end of the scope.
11091*f5c631daSSadaf Ebrahimi //
11092*f5c631daSSadaf Ebrahimi // When the scope ends, the MacroAssembler's lists will be restored to their
11093*f5c631daSSadaf Ebrahimi // original state, even if the lists were modified by some other means.
11094*f5c631daSSadaf Ebrahimi //
11095*f5c631daSSadaf Ebrahimi // Scopes must nest perfectly. That is, they must be destructed in reverse
11096*f5c631daSSadaf Ebrahimi // construction order. Otherwise, it is not clear how to handle cases where one
11097*f5c631daSSadaf Ebrahimi // scope acquires a register that was included in a now-closing scope. With
11098*f5c631daSSadaf Ebrahimi // perfect nesting, this cannot occur.
11099*f5c631daSSadaf Ebrahimi class UseScratchRegisterScope {
11100*f5c631daSSadaf Ebrahimi  public:
11101*f5c631daSSadaf Ebrahimi   // This constructor implicitly calls the `Open` function to initialise the
11102*f5c631daSSadaf Ebrahimi   // scope, so it is ready to use immediately after it has been constructed.
UseScratchRegisterScope(MacroAssembler * masm)11103*f5c631daSSadaf Ebrahimi   explicit UseScratchRegisterScope(MacroAssembler* masm)
11104*f5c631daSSadaf Ebrahimi       : masm_(NULL), parent_(NULL), old_available_(0), old_available_vfp_(0) {
11105*f5c631daSSadaf Ebrahimi     Open(masm);
11106*f5c631daSSadaf Ebrahimi   }
11107*f5c631daSSadaf Ebrahimi   // This constructor allows deferred and optional initialisation of the scope.
11108*f5c631daSSadaf Ebrahimi   // The user is required to explicitly call the `Open` function before using
11109*f5c631daSSadaf Ebrahimi   // the scope.
UseScratchRegisterScope()11110*f5c631daSSadaf Ebrahimi   UseScratchRegisterScope()
11111*f5c631daSSadaf Ebrahimi       : masm_(NULL), parent_(NULL), old_available_(0), old_available_vfp_(0) {}
11112*f5c631daSSadaf Ebrahimi 
11113*f5c631daSSadaf Ebrahimi   // This function performs the actual initialisation work.
11114*f5c631daSSadaf Ebrahimi   void Open(MacroAssembler* masm);
11115*f5c631daSSadaf Ebrahimi 
11116*f5c631daSSadaf Ebrahimi   // The destructor always implicitly calls the `Close` function.
~UseScratchRegisterScope()11117*f5c631daSSadaf Ebrahimi   ~UseScratchRegisterScope() { Close(); }
11118*f5c631daSSadaf Ebrahimi 
11119*f5c631daSSadaf Ebrahimi   // This function performs the cleaning-up work. It must succeed even if the
11120*f5c631daSSadaf Ebrahimi   // scope has not been opened. It is safe to call multiple times.
11121*f5c631daSSadaf Ebrahimi   void Close();
11122*f5c631daSSadaf Ebrahimi 
11123*f5c631daSSadaf Ebrahimi   bool IsAvailable(const Register& reg) const;
11124*f5c631daSSadaf Ebrahimi   bool IsAvailable(const VRegister& reg) const;
11125*f5c631daSSadaf Ebrahimi 
11126*f5c631daSSadaf Ebrahimi   // Take a register from the temp list. It will be returned automatically when
11127*f5c631daSSadaf Ebrahimi   // the scope ends.
11128*f5c631daSSadaf Ebrahimi   Register Acquire();
11129*f5c631daSSadaf Ebrahimi   VRegister AcquireV(unsigned size_in_bits);
11130*f5c631daSSadaf Ebrahimi   QRegister AcquireQ();
11131*f5c631daSSadaf Ebrahimi   DRegister AcquireD();
11132*f5c631daSSadaf Ebrahimi   SRegister AcquireS();
11133*f5c631daSSadaf Ebrahimi 
11134*f5c631daSSadaf Ebrahimi   // Explicitly release an acquired (or excluded) register, putting it back in
11135*f5c631daSSadaf Ebrahimi   // the temp list.
11136*f5c631daSSadaf Ebrahimi   void Release(const Register& reg);
11137*f5c631daSSadaf Ebrahimi   void Release(const VRegister& reg);
11138*f5c631daSSadaf Ebrahimi 
11139*f5c631daSSadaf Ebrahimi   // Make the specified registers available as scratch registers for the
11140*f5c631daSSadaf Ebrahimi   // duration of this scope.
11141*f5c631daSSadaf Ebrahimi   void Include(const RegisterList& list);
11142*f5c631daSSadaf Ebrahimi   void Include(const Register& reg1,
11143*f5c631daSSadaf Ebrahimi                const Register& reg2 = NoReg,
11144*f5c631daSSadaf Ebrahimi                const Register& reg3 = NoReg,
11145*f5c631daSSadaf Ebrahimi                const Register& reg4 = NoReg) {
11146*f5c631daSSadaf Ebrahimi     Include(RegisterList(reg1, reg2, reg3, reg4));
11147*f5c631daSSadaf Ebrahimi   }
11148*f5c631daSSadaf Ebrahimi   void Include(const VRegisterList& list);
11149*f5c631daSSadaf Ebrahimi   void Include(const VRegister& reg1,
11150*f5c631daSSadaf Ebrahimi                const VRegister& reg2 = NoVReg,
11151*f5c631daSSadaf Ebrahimi                const VRegister& reg3 = NoVReg,
11152*f5c631daSSadaf Ebrahimi                const VRegister& reg4 = NoVReg) {
11153*f5c631daSSadaf Ebrahimi     Include(VRegisterList(reg1, reg2, reg3, reg4));
11154*f5c631daSSadaf Ebrahimi   }
11155*f5c631daSSadaf Ebrahimi 
11156*f5c631daSSadaf Ebrahimi   // Make sure that the specified registers are not available in this scope.
11157*f5c631daSSadaf Ebrahimi   // This can be used to prevent helper functions from using sensitive
11158*f5c631daSSadaf Ebrahimi   // registers, for example.
11159*f5c631daSSadaf Ebrahimi   void Exclude(const RegisterList& list);
11160*f5c631daSSadaf Ebrahimi   void Exclude(const Register& reg1,
11161*f5c631daSSadaf Ebrahimi                const Register& reg2 = NoReg,
11162*f5c631daSSadaf Ebrahimi                const Register& reg3 = NoReg,
11163*f5c631daSSadaf Ebrahimi                const Register& reg4 = NoReg) {
11164*f5c631daSSadaf Ebrahimi     Exclude(RegisterList(reg1, reg2, reg3, reg4));
11165*f5c631daSSadaf Ebrahimi   }
11166*f5c631daSSadaf Ebrahimi   void Exclude(const VRegisterList& list);
11167*f5c631daSSadaf Ebrahimi   void Exclude(const VRegister& reg1,
11168*f5c631daSSadaf Ebrahimi                const VRegister& reg2 = NoVReg,
11169*f5c631daSSadaf Ebrahimi                const VRegister& reg3 = NoVReg,
11170*f5c631daSSadaf Ebrahimi                const VRegister& reg4 = NoVReg) {
11171*f5c631daSSadaf Ebrahimi     Exclude(VRegisterList(reg1, reg2, reg3, reg4));
11172*f5c631daSSadaf Ebrahimi   }
11173*f5c631daSSadaf Ebrahimi 
11174*f5c631daSSadaf Ebrahimi   // A convenience helper to exclude any registers used by the operand.
11175*f5c631daSSadaf Ebrahimi   void Exclude(const Operand& operand);
11176*f5c631daSSadaf Ebrahimi 
11177*f5c631daSSadaf Ebrahimi   // Prevent any scratch registers from being used in this scope.
11178*f5c631daSSadaf Ebrahimi   void ExcludeAll();
11179*f5c631daSSadaf Ebrahimi 
11180*f5c631daSSadaf Ebrahimi  private:
11181*f5c631daSSadaf Ebrahimi   // The MacroAssembler maintains a list of available scratch registers, and
11182*f5c631daSSadaf Ebrahimi   // also keeps track of the most recently-opened scope so that on destruction
11183*f5c631daSSadaf Ebrahimi   // we can check that scopes do not outlive their parents.
11184*f5c631daSSadaf Ebrahimi   MacroAssembler* masm_;
11185*f5c631daSSadaf Ebrahimi   UseScratchRegisterScope* parent_;
11186*f5c631daSSadaf Ebrahimi 
11187*f5c631daSSadaf Ebrahimi   // The state of the available lists at the start of this scope.
11188*f5c631daSSadaf Ebrahimi   uint32_t old_available_;      // kRRegister
11189*f5c631daSSadaf Ebrahimi   uint64_t old_available_vfp_;  // kVRegister
11190*f5c631daSSadaf Ebrahimi 
UseScratchRegisterScope(const UseScratchRegisterScope &)11191*f5c631daSSadaf Ebrahimi   VIXL_NO_RETURN_IN_DEBUG_MODE UseScratchRegisterScope(
11192*f5c631daSSadaf Ebrahimi       const UseScratchRegisterScope&) {
11193*f5c631daSSadaf Ebrahimi     VIXL_UNREACHABLE();
11194*f5c631daSSadaf Ebrahimi   }
11195*f5c631daSSadaf Ebrahimi   VIXL_NO_RETURN_IN_DEBUG_MODE void operator=(const UseScratchRegisterScope&) {
11196*f5c631daSSadaf Ebrahimi     VIXL_UNREACHABLE();
11197*f5c631daSSadaf Ebrahimi   }
11198*f5c631daSSadaf Ebrahimi };
11199*f5c631daSSadaf Ebrahimi 
11200*f5c631daSSadaf Ebrahimi 
11201*f5c631daSSadaf Ebrahimi }  // namespace aarch32
11202*f5c631daSSadaf Ebrahimi }  // namespace vixl
11203*f5c631daSSadaf Ebrahimi 
11204*f5c631daSSadaf Ebrahimi #endif  // VIXL_AARCH32_MACRO_ASSEMBLER_AARCH32_H_
11205