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