blob: 679f47ba6adc1b0e5169dfc9217c90a9875e62fc [file] [log] [blame]
// Copyright 2017, VIXL authors
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
// * Neither the name of ARM Limited nor the names of its contributors may be
// used to endorse or promote products derived from this software without
// specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#ifndef VIXL_DISASM_AARCH32_H_
#define VIXL_DISASM_AARCH32_H_
extern "C" {
#include <stdint.h>
}
#include <iomanip>
#include "aarch32/constants-aarch32.h"
#include "aarch32/operands-aarch32.h"
namespace vixl {
namespace aarch32 {
class ITBlock {
Condition first_condition_;
Condition condition_;
uint16_t it_mask_;
public:
ITBlock() : first_condition_(al), condition_(al), it_mask_(0) {}
void Advance() {
condition_ = Condition((condition_.GetCondition() & 0xe) | (it_mask_ >> 3));
it_mask_ = (it_mask_ << 1) & 0xf;
}
bool InITBlock() const { return it_mask_ != 0; }
bool OutsideITBlock() const { return !InITBlock(); }
bool LastInITBlock() const { return it_mask_ == 0x8; }
bool OutsideITBlockOrLast() const {
return OutsideITBlock() || LastInITBlock();
}
void Set(Condition first_condition, uint16_t mask) {
condition_ = first_condition_ = first_condition;
it_mask_ = mask;
}
Condition GetFirstCondition() const { return first_condition_; }
Condition GetCurrentCondition() const { return condition_; }
};
class Disassembler {
public:
enum LocationType {
kAnyLocation,
kCodeLocation,
kDataLocation,
kCoprocLocation,
kLoadByteLocation,
kLoadHalfWordLocation,
kLoadWordLocation,
kLoadDoubleWordLocation,
kLoadSignedByteLocation,
kLoadSignedHalfWordLocation,
kLoadSinglePrecisionLocation,
kLoadDoublePrecisionLocation,
kStoreByteLocation,
kStoreHalfWordLocation,
kStoreWordLocation,
kStoreDoubleWordLocation,
kStoreSinglePrecisionLocation,
kStoreDoublePrecisionLocation,
kVld1Location,
kVld2Location,
kVld3Location,
kVld4Location,
kVst1Location,
kVst2Location,
kVst3Location,
kVst4Location
};
class ConditionPrinter {
const ITBlock& it_block_;
Condition cond_;
public:
ConditionPrinter(const ITBlock& it_block, Condition cond)
: it_block_(it_block), cond_(cond) {}
const ITBlock& GetITBlock() const { return it_block_; }
Condition GetCond() const { return cond_; }
friend std::ostream& operator<<(std::ostream& os, ConditionPrinter cond) {
if (cond.it_block_.InITBlock() && cond.cond_.Is(al) &&
!cond.cond_.IsNone()) {
return os << "al";
}
return os << cond.cond_;
}
};
class ImmediatePrinter {
uint32_t imm_;
public:
explicit ImmediatePrinter(uint32_t imm) : imm_(imm) {}
uint32_t GetImm() const { return imm_; }
friend std::ostream& operator<<(std::ostream& os, ImmediatePrinter imm) {
return os << "#" << imm.GetImm();
}
};
class SignedImmediatePrinter {
int32_t imm_;
public:
explicit SignedImmediatePrinter(int32_t imm) : imm_(imm) {}
int32_t GetImm() const { return imm_; }
friend std::ostream& operator<<(std::ostream& os,
SignedImmediatePrinter imm) {
return os << "#" << imm.GetImm();
}
};
class RawImmediatePrinter {
uint32_t imm_;
public:
explicit RawImmediatePrinter(uint32_t imm) : imm_(imm) {}
uint32_t GetImm() const { return imm_; }
friend std::ostream& operator<<(std::ostream& os, RawImmediatePrinter imm) {
return os << imm.GetImm();
}
};
class DtPrinter {
DataType dt_;
DataType default_dt_;
public:
DtPrinter(DataType dt, DataType default_dt)
: dt_(dt), default_dt_(default_dt) {}
DataType GetDt() const { return dt_; }
DataType GetDefaultDt() const { return default_dt_; }
friend std::ostream& operator<<(std::ostream& os, DtPrinter dt) {
if (dt.dt_.Is(dt.default_dt_)) return os;
return os << dt.dt_;
}
};
class IndexedRegisterPrinter {
DRegister reg_;
uint32_t index_;
public:
IndexedRegisterPrinter(DRegister reg, uint32_t index)
: reg_(reg), index_(index) {}
DRegister GetReg() const { return reg_; }
uint32_t GetIndex() const { return index_; }
friend std::ostream& operator<<(std::ostream& os,
IndexedRegisterPrinter reg) {
return os << reg.GetReg() << "[" << reg.GetIndex() << "]";
}
};
// TODO: Merge this class with PrintLabel below. This Location class
// represents a PC-relative offset, not an address.
class Location {
public:
typedef int32_t Offset;
Location(Offset immediate, Offset pc_offset)
: immediate_(immediate), pc_offset_(pc_offset) {}
Offset GetImmediate() const { return immediate_; }
Offset GetPCOffset() const { return pc_offset_; }
private:
Offset immediate_;
Offset pc_offset_;
};
class PrintLabel {
LocationType location_type_;
Location::Offset immediate_;
Location::Offset location_;
public:
PrintLabel(LocationType location_type,
Location* offset,
Location::Offset position)
: location_type_(location_type),
immediate_(offset->GetImmediate()),
location_(static_cast<Location::Offset>(
static_cast<int64_t>(offset->GetPCOffset()) +
offset->GetImmediate() + position)) {}
LocationType GetLocationType() const { return location_type_; }
Location::Offset GetLocation() const { return location_; }
Location::Offset GetImmediate() const { return immediate_; }
friend inline std::ostream& operator<<(std::ostream& os,
const PrintLabel& label) {
os << "0x" << std::hex << std::setw(8) << std::setfill('0')
<< label.GetLocation() << std::dec;
return os;
}
};
class PrintMemOperand {
LocationType location_type_;
const MemOperand& operand_;
public:
PrintMemOperand(LocationType location_type, const MemOperand& operand)
: location_type_(location_type), operand_(operand) {}
LocationType GetLocationType() const { return location_type_; }
const MemOperand& GetOperand() const { return operand_; }
};
class PrintAlignedMemOperand {
LocationType location_type_;
const AlignedMemOperand& operand_;
public:
PrintAlignedMemOperand(LocationType location_type,
const AlignedMemOperand& operand)
: location_type_(location_type), operand_(operand) {}
LocationType GetLocationType() const { return location_type_; }
const AlignedMemOperand& GetOperand() const { return operand_; }
};
class DisassemblerStream {
std::ostream& os_;
InstructionType current_instruction_type_;
InstructionAttribute current_instruction_attributes_;
public:
explicit DisassemblerStream(std::ostream& os) // NOLINT(runtime/references)
: os_(os),
current_instruction_type_(kUndefInstructionType),
current_instruction_attributes_(kNoAttribute) {}
virtual ~DisassemblerStream() {}
std::ostream& os() const { return os_; }
void SetCurrentInstruction(
InstructionType current_instruction_type,
InstructionAttribute current_instruction_attributes) {
current_instruction_type_ = current_instruction_type;
current_instruction_attributes_ = current_instruction_attributes;
}
InstructionType GetCurrentInstructionType() const {
return current_instruction_type_;
}
InstructionAttribute GetCurrentInstructionAttributes() const {
return current_instruction_attributes_;
}
bool Has(InstructionAttribute attributes) const {
return (current_instruction_attributes_ & attributes) == attributes;
}
template <typename T>
DisassemblerStream& operator<<(T value) {
os_ << value;
return *this;
}
virtual DisassemblerStream& operator<<(const char* string) {
os_ << string;
return *this;
}
virtual DisassemblerStream& operator<<(const ConditionPrinter& cond) {
os_ << cond;
return *this;
}
virtual DisassemblerStream& operator<<(Condition cond) {
os_ << cond;
return *this;
}
virtual DisassemblerStream& operator<<(const EncodingSize& size) {
os_ << size;
return *this;
}
virtual DisassemblerStream& operator<<(const ImmediatePrinter& imm) {
os_ << imm;
return *this;
}
virtual DisassemblerStream& operator<<(const SignedImmediatePrinter& imm) {
os_ << imm;
return *this;
}
virtual DisassemblerStream& operator<<(const RawImmediatePrinter& imm) {
os_ << imm;
return *this;
}
virtual DisassemblerStream& operator<<(const DtPrinter& dt) {
os_ << dt;
return *this;
}
virtual DisassemblerStream& operator<<(const DataType& type) {
os_ << type;
return *this;
}
virtual DisassemblerStream& operator<<(Shift shift) {
os_ << shift;
return *this;
}
virtual DisassemblerStream& operator<<(Sign sign) {
os_ << sign;
return *this;
}
virtual DisassemblerStream& operator<<(Alignment alignment) {
os_ << alignment;
return *this;
}
virtual DisassemblerStream& operator<<(const PrintLabel& label) {
os_ << label;
return *this;
}
virtual DisassemblerStream& operator<<(const WriteBack& write_back) {
os_ << write_back;
return *this;
}
virtual DisassemblerStream& operator<<(const NeonImmediate& immediate) {
os_ << immediate;
return *this;
}
virtual DisassemblerStream& operator<<(Register reg) {
os_ << reg;
return *this;
}
virtual DisassemblerStream& operator<<(SRegister reg) {
os_ << reg;
return *this;
}
virtual DisassemblerStream& operator<<(DRegister reg) {
os_ << reg;
return *this;
}
virtual DisassemblerStream& operator<<(QRegister reg) {
os_ << reg;
return *this;
}
virtual DisassemblerStream& operator<<(const RegisterOrAPSR_nzcv reg) {
os_ << reg;
return *this;
}
virtual DisassemblerStream& operator<<(SpecialRegister reg) {
os_ << reg;
return *this;
}
virtual DisassemblerStream& operator<<(MaskedSpecialRegister reg) {
os_ << reg;
return *this;
}
virtual DisassemblerStream& operator<<(SpecialFPRegister reg) {
os_ << reg;
return *this;
}
virtual DisassemblerStream& operator<<(BankedRegister reg) {
os_ << reg;
return *this;
}
virtual DisassemblerStream& operator<<(const RegisterList& list) {
os_ << list;
return *this;
}
virtual DisassemblerStream& operator<<(const SRegisterList& list) {
os_ << list;
return *this;
}
virtual DisassemblerStream& operator<<(const DRegisterList& list) {
os_ << list;
return *this;
}
virtual DisassemblerStream& operator<<(const NeonRegisterList& list) {
os_ << list;
return *this;
}
virtual DisassemblerStream& operator<<(const DRegisterLane& reg) {
os_ << reg;
return *this;
}
virtual DisassemblerStream& operator<<(const IndexedRegisterPrinter& reg) {
os_ << reg;
return *this;
}
virtual DisassemblerStream& operator<<(Coprocessor coproc) {
os_ << coproc;
return *this;
}
virtual DisassemblerStream& operator<<(CRegister reg) {
os_ << reg;
return *this;
}
virtual DisassemblerStream& operator<<(Endianness endian_specifier) {
os_ << endian_specifier;
return *this;
}
virtual DisassemblerStream& operator<<(MemoryBarrier option) {
os_ << option;
return *this;
}
virtual DisassemblerStream& operator<<(InterruptFlags iflags) {
os_ << iflags;
return *this;
}
virtual DisassemblerStream& operator<<(const Operand& operand) {
if (operand.IsImmediate()) {
if (Has(kBitwise)) {
return *this << "#0x" << std::hex << operand.GetImmediate()
<< std::dec;
}
return *this << "#" << operand.GetImmediate();
}
if (operand.IsImmediateShiftedRegister()) {
if ((operand.GetShift().IsLSL() || operand.GetShift().IsROR()) &&
(operand.GetShiftAmount() == 0)) {
return *this << operand.GetBaseRegister();
}
if (operand.GetShift().IsRRX()) {
return *this << operand.GetBaseRegister() << ", rrx";
}
return *this << operand.GetBaseRegister() << ", " << operand.GetShift()
<< " #" << operand.GetShiftAmount();
}
if (operand.IsRegisterShiftedRegister()) {
return *this << operand.GetBaseRegister() << ", " << operand.GetShift()
<< " " << operand.GetShiftRegister();
}
VIXL_UNREACHABLE();
return *this;
}
virtual DisassemblerStream& operator<<(const SOperand& operand) {
if (operand.IsImmediate()) {
return *this << operand.GetNeonImmediate();
}
return *this << operand.GetRegister();
}
virtual DisassemblerStream& operator<<(const DOperand& operand) {
if (operand.IsImmediate()) {
return *this << operand.GetNeonImmediate();
}
return *this << operand.GetRegister();
}
virtual DisassemblerStream& operator<<(const QOperand& operand) {
if (operand.IsImmediate()) {
return *this << operand.GetNeonImmediate();
}
return *this << operand.GetRegister();
}
virtual DisassemblerStream& operator<<(const MemOperand& operand) {
*this << "[" << operand.GetBaseRegister();
if (operand.GetAddrMode() == PostIndex) {
*this << "]";
if (operand.IsRegisterOnly()) return *this << "!";
}
if (operand.IsImmediate()) {
if ((operand.GetOffsetImmediate() != 0) ||
operand.GetSign().IsMinus() ||
((operand.GetAddrMode() != Offset) && !operand.IsRegisterOnly())) {
if (operand.GetOffsetImmediate() == 0) {
*this << ", #" << operand.GetSign() << operand.GetOffsetImmediate();
} else {
*this << ", #" << operand.GetOffsetImmediate();
}
}
} else if (operand.IsPlainRegister()) {
*this << ", " << operand.GetSign() << operand.GetOffsetRegister();
} else if (operand.IsShiftedRegister()) {
*this << ", " << operand.GetSign() << operand.GetOffsetRegister()
<< ImmediateShiftOperand(operand.GetShift(),
operand.GetShiftAmount());
} else {
VIXL_UNREACHABLE();
return *this;
}
if (operand.GetAddrMode() == Offset) {
*this << "]";
} else if (operand.GetAddrMode() == PreIndex) {
*this << "]!";
}
return *this;
}
virtual DisassemblerStream& operator<<(const PrintMemOperand& operand) {
return *this << operand.GetOperand();
}
virtual DisassemblerStream& operator<<(const AlignedMemOperand& operand) {
*this << "[" << operand.GetBaseRegister() << operand.GetAlignment()
<< "]";
if (operand.GetAddrMode() == PostIndex) {
if (operand.IsPlainRegister()) {
*this << ", " << operand.GetOffsetRegister();
} else {
*this << "!";
}
}
return *this;
}
virtual DisassemblerStream& operator<<(
const PrintAlignedMemOperand& operand) {
return *this << operand.GetOperand();
}
};
private:
class ITBlockScope {
ITBlock* const it_block_;
bool inside_;
public:
explicit ITBlockScope(ITBlock* it_block)
: it_block_(it_block), inside_(it_block->InITBlock()) {}
~ITBlockScope() {
if (inside_) it_block_->Advance();
}
};
ITBlock it_block_;
DisassemblerStream* os_;
bool owns_os_;
uint32_t code_address_;
// True if the disassembler always output instructions with all the
// registers (even if two registers are identical and only one could be
// output).
bool use_short_hand_form_;
public:
explicit Disassembler(std::ostream& os, // NOLINT(runtime/references)
uint32_t code_address = 0)
: os_(new DisassemblerStream(os)),
owns_os_(true),
code_address_(code_address),
use_short_hand_form_(true) {}
explicit Disassembler(DisassemblerStream* os, uint32_t code_address = 0)
: os_(os),
owns_os_(false),
code_address_(code_address),
use_short_hand_form_(true) {}
virtual ~Disassembler() {
if (owns_os_) {
delete os_;
}
}
DisassemblerStream& os() const { return *os_; }
void SetIT(Condition first_condition, uint16_t it_mask) {
it_block_.Set(first_condition, it_mask);
}
const ITBlock& GetITBlock() const { return it_block_; }
bool InITBlock() const { return it_block_.InITBlock(); }
bool OutsideITBlock() const { return it_block_.OutsideITBlock(); }
bool OutsideITBlockOrLast() const { return it_block_.OutsideITBlockOrLast(); }
void CheckNotIT() const { VIXL_ASSERT(it_block_.OutsideITBlock()); }
// Return the current condition depending on the IT state for T32.
Condition CurrentCond() const {
if (it_block_.OutsideITBlock()) return al;
return it_block_.GetCurrentCondition();
}
bool UseShortHandForm() const { return use_short_hand_form_; }
void SetUseShortHandForm(bool use_short_hand_form) {
use_short_hand_form_ = use_short_hand_form;
}
virtual void UnallocatedT32(uint32_t instruction) {
if (T32Size(instruction) == 2) {
os() << "unallocated " << std::hex << std::setw(4) << std::setfill('0')
<< (instruction >> 16) << std::dec;
} else {
os() << "unallocated " << std::hex << std::setw(8) << std::setfill('0')
<< instruction << std::dec;
}
}
virtual void UnallocatedA32(uint32_t instruction) {
os() << "unallocated " << std::hex << std::setw(8) << std::setfill('0')
<< instruction << std::dec;
}
virtual void UnimplementedT32_16(const char* name, uint32_t instruction) {
os() << "unimplemented " << name << " T32:" << std::hex << std::setw(4)
<< std::setfill('0') << (instruction >> 16) << std::dec;
}
virtual void UnimplementedT32_32(const char* name, uint32_t instruction) {
os() << "unimplemented " << name << " T32:" << std::hex << std::setw(8)
<< std::setfill('0') << instruction << std::dec;
}
virtual void UnimplementedA32(const char* name, uint32_t instruction) {
os() << "unimplemented " << name << " ARM:" << std::hex << std::setw(8)
<< std::setfill('0') << instruction << std::dec;
}
virtual void Unpredictable() { os() << " ; unpredictable"; }
virtual void UnpredictableT32(uint32_t /*instr*/) { return Unpredictable(); }
virtual void UnpredictableA32(uint32_t /*instr*/) { return Unpredictable(); }
static bool Is16BitEncoding(uint32_t instr) { return instr < 0xe8000000; }
uint32_t GetCodeAddress() const { return code_address_; }
void SetCodeAddress(uint32_t code_address) { code_address_ = code_address; }
// Start of generated code.
void adc(Condition cond,
EncodingSize size,
Register rd,
Register rn,
const Operand& operand);
void adcs(Condition cond,
EncodingSize size,
Register rd,
Register rn,
const Operand& operand);
void add(Condition cond,
EncodingSize size,
Register rd,
Register rn,
const Operand& operand);
void add(Condition cond, Register rd, const Operand& operand);
void adds(Condition cond,
EncodingSize size,
Register rd,
Register rn,
const Operand& operand);
void adds(Register rd, const Operand& operand);
void addw(Condition cond, Register rd, Register rn, const Operand& operand);
void adr(Condition cond, EncodingSize size, Register rd, Location* location);
void and_(Condition cond,
EncodingSize size,
Register rd,
Register rn,
const Operand& operand);
void ands(Condition cond,
EncodingSize size,
Register rd,
Register rn,
const Operand& operand);
void asr(Condition cond,
EncodingSize size,
Register rd,
Register rm,
const Operand& operand);
void asrs(Condition cond,
EncodingSize size,
Register rd,
Register rm,
const Operand& operand);
void b(Condition cond, EncodingSize size, Location* location);
void bfc(Condition cond, Register rd, uint32_t lsb, uint32_t width);
void bfi(
Condition cond, Register rd, Register rn, uint32_t lsb, uint32_t width);
void bic(Condition cond,
EncodingSize size,
Register rd,
Register rn,
const Operand& operand);
void bics(Condition cond,
EncodingSize size,
Register rd,
Register rn,
const Operand& operand);
void bkpt(Condition cond, uint32_t imm);
void bl(Condition cond, Location* location);
void blx(Condition cond, Location* location);
void blx(Condition cond, Register rm);
void bx(Condition cond, Register rm);
void bxj(Condition cond, Register rm);
void cbnz(Register rn, Location* location);
void cbz(Register rn, Location* location);
void clrex(Condition cond);
void clz(Condition cond, Register rd, Register rm);
void cmn(Condition cond,
EncodingSize size,
Register rn,
const Operand& operand);
void cmp(Condition cond,
EncodingSize size,
Register rn,
const Operand& operand);
void crc32b(Condition cond, Register rd, Register rn, Register rm);
void crc32cb(Condition cond, Register rd, Register rn, Register rm);
void crc32ch(Condition cond, Register rd, Register rn, Register rm);
void crc32cw(Condition cond, Register rd, Register rn, Register rm);
void crc32h(Condition cond, Register rd, Register rn, Register rm);
void crc32w(Condition cond, Register rd, Register rn, Register rm);
void dmb(Condition cond, MemoryBarrier option);
void dsb(Condition cond, MemoryBarrier option);
void eor(Condition cond,
EncodingSize size,
Register rd,
Register rn,
const Operand& operand);
void eors(Condition cond,
EncodingSize size,
Register rd,
Register rn,
const Operand& operand);
void fldmdbx(Condition cond,
Register rn,
WriteBack write_back,
DRegisterList dreglist);
void fldmiax(Condition cond,
Register rn,
WriteBack write_back,
DRegisterList dreglist);
void fstmdbx(Condition cond,
Register rn,
WriteBack write_back,
DRegisterList dreglist);
void fstmiax(Condition cond,
Register rn,
WriteBack write_back,
DRegisterList dreglist);
void hlt(Condition cond, uint32_t imm);
void hvc(Condition cond, uint32_t imm);
void isb(Condition cond, MemoryBarrier option);
void it(Condition cond, uint16_t mask);
void lda(Condition cond, Register rt, const MemOperand& operand);
void ldab(Condition cond, Register rt, const MemOperand& operand);
void ldaex(Condition cond, Register rt, const MemOperand& operand);
void ldaexb(Condition cond, Register rt, const MemOperand& operand);
void ldaexd(Condition cond,
Register rt,
Register rt2,
const MemOperand& operand);
void ldaexh(Condition cond, Register rt, const MemOperand& operand);
void ldah(Condition cond, Register rt, const MemOperand& operand);
void ldm(Condition cond,
EncodingSize size,
Register rn,
WriteBack write_back,
RegisterList registers);
void ldmda(Condition cond,
Register rn,
WriteBack write_back,
RegisterList registers);
void ldmdb(Condition cond,
Register rn,
WriteBack write_back,
RegisterList registers);
void ldmea(Condition cond,
Register rn,
WriteBack write_back,
RegisterList registers);
void ldmed(Condition cond,
Register rn,
WriteBack write_back,
RegisterList registers);
void ldmfa(Condition cond,
Register rn,
WriteBack write_back,
RegisterList registers);
void ldmfd(Condition cond,
EncodingSize size,
Register rn,
WriteBack write_back,
RegisterList registers);
void ldmib(Condition cond,
Register rn,
WriteBack write_back,
RegisterList registers);
void ldr(Condition cond,
EncodingSize size,
Register rt,
const MemOperand& operand);
void ldr(Condition cond, EncodingSize size, Register rt, Location* location);
void ldrb(Condition cond,
EncodingSize size,
Register rt,
const MemOperand& operand);
void ldrb(Condition cond, Register rt, Location* location);
void ldrd(Condition cond,
Register rt,
Register rt2,
const MemOperand& operand);
void ldrd(Condition cond, Register rt, Register rt2, Location* location);
void ldrex(Condition cond, Register rt, const MemOperand& operand);
void ldrexb(Condition cond, Register rt, const MemOperand& operand);
void ldrexd(Condition cond,
Register rt,
Register rt2,
const MemOperand& operand);
void ldrexh(Condition cond, Register rt, const MemOperand& operand);
void ldrh(Condition cond,
EncodingSize size,
Register rt,
const MemOperand& operand);
void ldrh(Condition cond, Register rt, Location* location);
void ldrsb(Condition cond,
EncodingSize size,
Register rt,
const MemOperand& operand);
void ldrsb(Condition cond, Register rt, Location* location);
void ldrsh(Condition cond,
EncodingSize size,
Register rt,
const MemOperand& operand);
void ldrsh(Condition cond, Register rt, Location* location);
void lsl(Condition cond,
EncodingSize size,
Register rd,
Register rm,
const Operand& operand);
void lsls(Condition cond,
EncodingSize size,
Register rd,
Register rm,
const Operand& operand);
void lsr(Condition cond,
EncodingSize size,
Register rd,
Register rm,
const Operand& operand);
void lsrs(Condition cond,
EncodingSize size,
Register rd,
Register rm,
const Operand& operand);
void mla(Condition cond, Register rd, Register rn, Register rm, Register ra);
void mlas(Condition cond, Register rd, Register rn, Register rm, Register ra);
void mls(Condition cond, Register rd, Register rn, Register rm, Register ra);
void mov(Condition cond,
EncodingSize size,
Register rd,
const Operand& operand);
void movs(Condition cond,
EncodingSize size,
Register rd,
const Operand& operand);
void movt(Condition cond, Register rd, const Operand& operand);
void movw(Condition cond, Register rd, const Operand& operand);
void mrs(Condition cond, Register rd, SpecialRegister spec_reg);
void msr(Condition cond,
MaskedSpecialRegister spec_reg,
const Operand& operand);
void mul(
Condition cond, EncodingSize size, Register rd, Register rn, Register rm);
void muls(Condition cond, Register rd, Register rn, Register rm);
void mvn(Condition cond,
EncodingSize size,
Register rd,
const Operand& operand);
void mvns(Condition cond,
EncodingSize size,
Register rd,
const Operand& operand);
void nop(Condition cond, EncodingSize size);
void orn(Condition cond, Register rd, Register rn, const Operand& operand);
void orns(Condition cond, Register rd, Register rn, const Operand& operand);
void orr(Condition cond,
EncodingSize size,
Register rd,
Register rn,
const Operand& operand);
void orrs(Condition cond,
EncodingSize size,
Register rd,
Register rn,
const Operand& operand);
void pkhbt(Condition cond, Register rd, Register rn, const Operand& operand);
void pkhtb(Condition cond, Register rd, Register rn, const Operand& operand);
void pld(Condition cond, Location* location);
void pld(Condition cond, const MemOperand& operand);
void pldw(Condition cond, const MemOperand& operand);
void pli(Condition cond, const MemOperand& operand);
void pli(Condition cond, Location* location);
void pop(Condition cond, EncodingSize size, RegisterList registers);
void pop(Condition cond, EncodingSize size, Register rt);
void push(Condition cond, EncodingSize size, RegisterList registers);
void push(Condition cond, EncodingSize size, Register rt);
void qadd(Condition cond, Register rd, Register rm, Register rn);
void qadd16(Condition cond, Register rd, Register rn, Register rm);
void qadd8(Condition cond, Register rd, Register rn, Register rm);
void qasx(Condition cond, Register rd, Register rn, Register rm);
void qdadd(Condition cond, Register rd, Register rm, Register rn);
void qdsub(Condition cond, Register rd, Register rm, Register rn);
void qsax(Condition cond, Register rd, Register rn, Register rm);
void qsub(Condition cond, Register rd, Register rm, Register rn);
void qsub16(Condition cond, Register rd, Register rn, Register rm);
void qsub8(Condition cond, Register rd, Register rn, Register rm);
void rbit(Condition cond, Register rd, Register rm);
void rev(Condition cond, EncodingSize size, Register rd, Register rm);
void rev16(Condition cond, EncodingSize size, Register rd, Register rm);
void revsh(Condition cond, EncodingSize size, Register rd, Register rm);
void ror(Condition cond,
EncodingSize size,
Register rd,
Register rm,
const Operand& operand);
void rors(Condition cond,
EncodingSize size,
Register rd,
Register rm,
const Operand& operand);
void rrx(Condition cond, Register rd, Register rm);
void rrxs(Condition cond, Register rd, Register rm);
void rsb(Condition cond,
EncodingSize size,
Register rd,
Register rn,
const Operand& operand);
void rsbs(Condition cond,
EncodingSize size,
Register rd,
Register rn,
const Operand& operand);
void rsc(Condition cond, Register rd, Register rn, const Operand& operand);
void rscs(Condition cond, Register rd, Register rn, const Operand& operand);
void sadd16(Condition cond, Register rd, Register rn, Register rm);
void sadd8(Condition cond, Register rd, Register rn, Register rm);
void sasx(Condition cond, Register rd, Register rn, Register rm);
void sbc(Condition cond,
EncodingSize size,
Register rd,
Register rn,
const Operand& operand);
void sbcs(Condition cond,
EncodingSize size,
Register rd,
Register rn,
const Operand& operand);
void sbfx(
Condition cond, Register rd, Register rn, uint32_t lsb, uint32_t width);
void sdiv(Condition cond, Register rd, Register rn, Register rm);
void sel(Condition cond, Register rd, Register rn, Register rm);
void shadd16(Condition cond, Register rd, Register rn, Register rm);
void shadd8(Condition cond, Register rd, Register rn, Register rm);
void shasx(Condition cond, Register rd, Register rn, Register rm);
void shsax(Condition cond, Register rd, Register rn, Register rm);
void shsub16(Condition cond, Register rd, Register rn, Register rm);
void shsub8(Condition cond, Register rd, Register rn, Register rm);
void smlabb(
Condition cond, Register rd, Register rn, Register rm, Register ra);
void smlabt(
Condition cond, Register rd, Register rn, Register rm, Register ra);
void smlad(
Condition cond, Register rd, Register rn, Register rm, Register ra);
void smladx(
Condition cond, Register rd, Register rn, Register rm, Register ra);
void smlal(
Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
void smlalbb(
Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
void smlalbt(
Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
void smlald(
Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
void smlaldx(
Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
void smlals(
Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
void smlaltb(
Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
void smlaltt(
Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
void smlatb(
Condition cond, Register rd, Register rn, Register rm, Register ra);
void smlatt(
Condition cond, Register rd, Register rn, Register rm, Register ra);
void smlawb(
Condition cond, Register rd, Register rn, Register rm, Register ra);
void smlawt(
Condition cond, Register rd, Register rn, Register rm, Register ra);
void smlsd(
Condition cond, Register rd, Register rn, Register rm, Register ra);
void smlsdx(
Condition cond, Register rd, Register rn, Register rm, Register ra);
void smlsld(
Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
void smlsldx(
Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
void smmla(
Condition cond, Register rd, Register rn, Register rm, Register ra);
void smmlar(
Condition cond, Register rd, Register rn, Register rm, Register ra);
void smmls(
Condition cond, Register rd, Register rn, Register rm, Register ra);
void smmlsr(
Condition cond, Register rd, Register rn, Register rm, Register ra);
void smmul(Condition cond, Register rd, Register rn, Register rm);
void smmulr(Condition cond, Register rd, Register rn, Register rm);
void smuad(Condition cond, Register rd, Register rn, Register rm);
void smuadx(Condition cond, Register rd, Register rn, Register rm);
void smulbb(Condition cond, Register rd, Register rn, Register rm);
void smulbt(Condition cond, Register rd, Register rn, Register rm);
void smull(
Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
void smulls(
Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
void smultb(Condition cond, Register rd, Register rn, Register rm);
void smultt(Condition cond, Register rd, Register rn, Register rm);
void smulwb(Condition cond, Register rd, Register rn, Register rm);
void smulwt(Condition cond, Register rd, Register rn, Register rm);
void smusd(Condition cond, Register rd, Register rn, Register rm);
void smusdx(Condition cond, Register rd, Register rn, Register rm);
void ssat(Condition cond, Register rd, uint32_t imm, const Operand& operand);
void ssat16(Condition cond, Register rd, uint32_t imm, Register rn);
void ssax(Condition cond, Register rd, Register rn, Register rm);
void ssub16(Condition cond, Register rd, Register rn, Register rm);
void ssub8(Condition cond, Register rd, Register rn, Register rm);
void stl(Condition cond, Register rt, const MemOperand& operand);
void stlb(Condition cond, Register rt, const MemOperand& operand);
void stlex(Condition cond,
Register rd,
Register rt,
const MemOperand& operand);
void stlexb(Condition cond,
Register rd,
Register rt,
const MemOperand& operand);
void stlexd(Condition cond,
Register rd,
Register rt,
Register rt2,
const MemOperand& operand);
void stlexh(Condition cond,
Register rd,
Register rt,
const MemOperand& operand);
void stlh(Condition cond, Register rt, const MemOperand& operand);
void stm(Condition cond,
EncodingSize size,
Register rn,
WriteBack write_back,
RegisterList registers);
void stmda(Condition cond,
Register rn,
WriteBack write_back,
RegisterList registers);
void stmdb(Condition cond,
EncodingSize size,
Register rn,
WriteBack write_back,
RegisterList registers);
void stmea(Condition cond,
EncodingSize size,
Register rn,
WriteBack write_back,
RegisterList registers);
void stmed(Condition cond,
Register rn,
WriteBack write_back,
RegisterList registers);
void stmfa(Condition cond,
Register rn,
WriteBack write_back,
RegisterList registers);
void stmfd(Condition cond,
Register rn,
WriteBack write_back,
RegisterList registers);
void stmib(Condition cond,
Register rn,
WriteBack write_back,
RegisterList registers);
void str(Condition cond,
EncodingSize size,
Register rt,
const MemOperand& operand);
void strb(Condition cond,
EncodingSize size,
Register rt,
const MemOperand& operand);
void strd(Condition cond,
Register rt,
Register rt2,
const MemOperand& operand);
void strex(Condition cond,
Register rd,
Register rt,
const MemOperand& operand);
void strexb(Condition cond,
Register rd,
Register rt,
const MemOperand& operand);
void strexd(Condition cond,
Register rd,
Register rt,
Register rt2,
const MemOperand& operand);
void strexh(Condition cond,
Register rd,
Register rt,
const MemOperand& operand);
void strh(Condition cond,
EncodingSize size,
Register rt,
const MemOperand& operand);
void sub(Condition cond,
EncodingSize size,
Register rd,
Register rn,
const Operand& operand);
void sub(Condition cond, Register rd, const Operand& operand);
void subs(Condition cond,
EncodingSize size,
Register rd,
Register rn,
const Operand& operand);
void subs(Register rd, const Operand& operand);
void subw(Condition cond, Register rd, Register rn, const Operand& operand);
void svc(Condition cond, uint32_t imm);
void sxtab(Condition cond, Register rd, Register rn, const Operand& operand);
void sxtab16(Condition cond,
Register rd,
Register rn,
const Operand& operand);
void sxtah(Condition cond, Register rd, Register rn, const Operand& operand);
void sxtb(Condition cond,
EncodingSize size,
Register rd,
const Operand& operand);
void sxtb16(Condition cond, Register rd, const Operand& operand);
void sxth(Condition cond,
EncodingSize size,
Register rd,
const Operand& operand);
void tbb(Condition cond, Register rn, Register rm);
void tbh(Condition cond, Register rn, Register rm);
void teq(Condition cond, Register rn, const Operand& operand);
void tst(Condition cond,
EncodingSize size,
Register rn,
const Operand& operand);
void uadd16(Condition cond, Register rd, Register rn, Register rm);
void uadd8(Condition cond, Register rd, Register rn, Register rm);
void uasx(Condition cond, Register rd, Register rn, Register rm);
void ubfx(
Condition cond, Register rd, Register rn, uint32_t lsb, uint32_t width);
void udf(Condition cond, EncodingSize size, uint32_t imm);
void udiv(Condition cond, Register rd, Register rn, Register rm);
void uhadd16(Condition cond, Register rd, Register rn, Register rm);
void uhadd8(Condition cond, Register rd, Register rn, Register rm);
void uhasx(Condition cond, Register rd, Register rn, Register rm);
void uhsax(Condition cond, Register rd, Register rn, Register rm);
void uhsub16(Condition cond, Register rd, Register rn, Register rm);
void uhsub8(Condition cond, Register rd, Register rn, Register rm);
void umaal(
Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
void umlal(
Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
void umlals(
Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
void umull(
Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
void umulls(
Condition cond, Register rdlo, Register rdhi, Register rn, Register rm);
void uqadd16(Condition cond, Register rd, Register rn, Register rm);
void uqadd8(Condition cond, Register rd, Register rn, Register rm);
void uqasx(Condition cond, Register rd, Register rn, Register rm);
void uqsax(Condition cond, Register rd, Register rn, Register rm);
void uqsub16(Condition cond, Register rd, Register rn, Register rm);
void uqsub8(Condition cond, Register rd, Register rn, Register rm);
void usad8(Condition cond, Register rd, Register rn, Register rm);
void usada8(
Condition cond, Register rd, Register rn, Register rm, Register ra);
void usat(Condition cond, Register rd, uint32_t imm, const Operand& operand);
void usat16(Condition cond, Register rd, uint32_t imm, Register rn);
void usax(Condition cond, Register rd, Register rn, Register rm);
void usub16(Condition cond, Register rd, Register rn, Register rm);
void usub8(Condition cond, Register rd, Register rn, Register rm);
void uxtab(Condition cond, Register rd, Register rn, const Operand& operand);
void uxtab16(Condition cond,
Register rd,
Register rn,
const Operand& operand);
void uxtah(Condition cond, Register rd, Register rn, const Operand& operand);
void uxtb(Condition cond,
EncodingSize size,
Register rd,
const Operand& operand);
void uxtb16(Condition cond, Register rd, const Operand& operand);
void uxth(Condition cond,
EncodingSize size,
Register rd,
const Operand& operand);
void vaba(
Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vaba(
Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
void vabal(
Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm);
void vabd(
Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vabd(
Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
void vabdl(
Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm);
void vabs(Condition cond, DataType dt, DRegister rd, DRegister rm);
void vabs(Condition cond, DataType dt, QRegister rd, QRegister rm);
void vabs(Condition cond, DataType dt, SRegister rd, SRegister rm);
void vacge(
Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vacge(
Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
void vacgt(
Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vacgt(
Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
void vacle(
Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vacle(
Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
void vaclt(
Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vaclt(
Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
void vadd(
Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vadd(
Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
void vadd(
Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm);
void vaddhn(
Condition cond, DataType dt, DRegister rd, QRegister rn, QRegister rm);
void vaddl(
Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm);
void vaddw(
Condition cond, DataType dt, QRegister rd, QRegister rn, DRegister rm);
void vand(Condition cond,
DataType dt,
DRegister rd,
DRegister rn,
const DOperand& operand);
void vand(Condition cond,
DataType dt,
QRegister rd,
QRegister rn,
const QOperand& operand);
void vbic(Condition cond,
DataType dt,
DRegister rd,
DRegister rn,
const DOperand& operand);
void vbic(Condition cond,
DataType dt,
QRegister rd,
QRegister rn,
const QOperand& operand);
void vbif(
Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vbif(
Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
void vbit(
Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vbit(
Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
void vbsl(
Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vbsl(
Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
void vceq(Condition cond,
DataType dt,
DRegister rd,
DRegister rm,
const DOperand& operand);
void vceq(Condition cond,
DataType dt,
QRegister rd,
QRegister rm,
const QOperand& operand);
void vceq(
Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vceq(
Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
void vcge(Condition cond,
DataType dt,
DRegister rd,
DRegister rm,
const DOperand& operand);
void vcge(Condition cond,
DataType dt,
QRegister rd,
QRegister rm,
const QOperand& operand);
void vcge(
Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vcge(
Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
void vcgt(Condition cond,
DataType dt,
DRegister rd,
DRegister rm,
const DOperand& operand);
void vcgt(Condition cond,
DataType dt,
QRegister rd,
QRegister rm,
const QOperand& operand);
void vcgt(
Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vcgt(
Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
void vcle(Condition cond,
DataType dt,
DRegister rd,
DRegister rm,
const DOperand& operand);
void vcle(Condition cond,
DataType dt,
QRegister rd,
QRegister rm,
const QOperand& operand);
void vcle(
Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vcle(
Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
void vcls(Condition cond, DataType dt, DRegister rd, DRegister rm);
void vcls(Condition cond, DataType dt, QRegister rd, QRegister rm);
void vclt(Condition cond,
DataType dt,
DRegister rd,
DRegister rm,
const DOperand& operand);
void vclt(Condition cond,
DataType dt,
QRegister rd,
QRegister rm,
const QOperand& operand);
void vclt(
Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vclt(
Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
void vclz(Condition cond, DataType dt, DRegister rd, DRegister rm);
void vclz(Condition cond, DataType dt, QRegister rd, QRegister rm);
void vcmp(Condition cond, DataType dt, SRegister rd, const SOperand& operand);
void vcmp(Condition cond, DataType dt, DRegister rd, const DOperand& operand);
void vcmpe(Condition cond,
DataType dt,
SRegister rd,
const SOperand& operand);
void vcmpe(Condition cond,
DataType dt,
DRegister rd,
const DOperand& operand);
void vcnt(Condition cond, DataType dt, DRegister rd, DRegister rm);
void vcnt(Condition cond, DataType dt, QRegister rd, QRegister rm);
void vcvt(
Condition cond, DataType dt1, DataType dt2, DRegister rd, SRegister rm);
void vcvt(
Condition cond, DataType dt1, DataType dt2, SRegister rd, DRegister rm);
void vcvt(Condition cond,
DataType dt1,
DataType dt2,
DRegister rd,
DRegister rm,
int32_t fbits);
void vcvt(Condition cond,
DataType dt1,
DataType dt2,
QRegister rd,
QRegister rm,
int32_t fbits);
void vcvt(Condition cond,
DataType dt1,
DataType dt2,
SRegister rd,
SRegister rm,
int32_t fbits);
void vcvt(
Condition cond, DataType dt1, DataType dt2, DRegister rd, DRegister rm);
void vcvt(
Condition cond, DataType dt1, DataType dt2, QRegister rd, QRegister rm);
void vcvt(
Condition cond, DataType dt1, DataType dt2, DRegister rd, QRegister rm);
void vcvt(
Condition cond, DataType dt1, DataType dt2, QRegister rd, DRegister rm);
void vcvt(
Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm);
void vcvta(DataType dt1, DataType dt2, DRegister rd, DRegister rm);
void vcvta(DataType dt1, DataType dt2, QRegister rd, QRegister rm);
void vcvta(DataType dt1, DataType dt2, SRegister rd, SRegister rm);
void vcvta(DataType dt1, DataType dt2, SRegister rd, DRegister rm);
void vcvtb(
Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm);
void vcvtb(
Condition cond, DataType dt1, DataType dt2, DRegister rd, SRegister rm);
void vcvtb(
Condition cond, DataType dt1, DataType dt2, SRegister rd, DRegister rm);
void vcvtm(DataType dt1, DataType dt2, DRegister rd, DRegister rm);
void vcvtm(DataType dt1, DataType dt2, QRegister rd, QRegister rm);
void vcvtm(DataType dt1, DataType dt2, SRegister rd, SRegister rm);
void vcvtm(DataType dt1, DataType dt2, SRegister rd, DRegister rm);
void vcvtn(DataType dt1, DataType dt2, DRegister rd, DRegister rm);
void vcvtn(DataType dt1, DataType dt2, QRegister rd, QRegister rm);
void vcvtn(DataType dt1, DataType dt2, SRegister rd, SRegister rm);
void vcvtn(DataType dt1, DataType dt2, SRegister rd, DRegister rm);
void vcvtp(DataType dt1, DataType dt2, DRegister rd, DRegister rm);
void vcvtp(DataType dt1, DataType dt2, QRegister rd, QRegister rm);
void vcvtp(DataType dt1, DataType dt2, SRegister rd, SRegister rm);
void vcvtp(DataType dt1, DataType dt2, SRegister rd, DRegister rm);
void vcvtr(
Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm);
void vcvtr(
Condition cond, DataType dt1, DataType dt2, SRegister rd, DRegister rm);
void vcvtt(
Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm);
void vcvtt(
Condition cond, DataType dt1, DataType dt2, DRegister rd, SRegister rm);
void vcvtt(
Condition cond, DataType dt1, DataType dt2, SRegister rd, DRegister rm);
void vdiv(
Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm);
void vdiv(
Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vdup(Condition cond, DataType dt, QRegister rd, Register rt);
void vdup(Condition cond, DataType dt, DRegister rd, Register rt);
void vdup(Condition cond, DataType dt, DRegister rd, DRegisterLane rm);
void vdup(Condition cond, DataType dt, QRegister rd, DRegisterLane rm);
void veor(
Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
void veor(
Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
void vext(Condition cond,
DataType dt,
DRegister rd,
DRegister rn,
DRegister rm,
const DOperand& operand);
void vext(Condition cond,
DataType dt,
QRegister rd,
QRegister rn,
QRegister rm,
const QOperand& operand);
void vfma(
Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vfma(
Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
void vfma(
Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm);
void vfms(
Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vfms(
Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
void vfms(
Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm);
void vfnma(
Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm);
void vfnma(
Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vfnms(
Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm);
void vfnms(
Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vhadd(
Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vhadd(
Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
void vhsub(
Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vhsub(
Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
void vld1(Condition cond,
DataType dt,
const NeonRegisterList& nreglist,
const AlignedMemOperand& operand);
void vld2(Condition cond,
DataType dt,
const NeonRegisterList& nreglist,
const AlignedMemOperand& operand);
void vld3(Condition cond,
DataType dt,
const NeonRegisterList& nreglist,
const AlignedMemOperand& operand);
void vld3(Condition cond,
DataType dt,
const NeonRegisterList& nreglist,
const MemOperand& operand);
void vld4(Condition cond,
DataType dt,
const NeonRegisterList& nreglist,
const AlignedMemOperand& operand);
void vldm(Condition cond,
DataType dt,
Register rn,
WriteBack write_back,
DRegisterList dreglist);
void vldm(Condition cond,
DataType dt,
Register rn,
WriteBack write_back,
SRegisterList sreglist);
void vldmdb(Condition cond,
DataType dt,
Register rn,
WriteBack write_back,
DRegisterList dreglist);
void vldmdb(Condition cond,
DataType dt,
Register rn,
WriteBack write_back,
SRegisterList sreglist);
void vldmia(Condition cond,
DataType dt,
Register rn,
WriteBack write_back,
DRegisterList dreglist);
void vldmia(Condition cond,
DataType dt,
Register rn,
WriteBack write_back,
SRegisterList sreglist);
void vldr(Condition cond, DataType dt, DRegister rd, Location* location);
void vldr(Condition cond,
DataType dt,
DRegister rd,
const MemOperand& operand);
void vldr(Condition cond, DataType dt, SRegister rd, Location* location);
void vldr(Condition cond,
DataType dt,
SRegister rd,
const MemOperand& operand);
void vmax(
Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vmax(
Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
void vmaxnm(DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vmaxnm(DataType dt, QRegister rd, QRegister rn, QRegister rm);
void vmaxnm(DataType dt, SRegister rd, SRegister rn, SRegister rm);
void vmin(
Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vmin(
Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
void vminnm(DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vminnm(DataType dt, QRegister rd, QRegister rn, QRegister rm);
void vminnm(DataType dt, SRegister rd, SRegister rn, SRegister rm);
void vmla(Condition cond,
DataType dt,
DRegister rd,
DRegister rn,
DRegisterLane rm);
void vmla(Condition cond,
DataType dt,
QRegister rd,
QRegister rn,
DRegisterLane rm);
void vmla(
Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vmla(
Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
void vmla(
Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm);
void vmlal(Condition cond,
DataType dt,
QRegister rd,
DRegister rn,
DRegisterLane rm);
void vmlal(
Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm);
void vmls(Condition cond,
DataType dt,
DRegister rd,
DRegister rn,
DRegisterLane rm);
void vmls(Condition cond,
DataType dt,
QRegister rd,
QRegister rn,
DRegisterLane rm);
void vmls(
Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vmls(
Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
void vmls(
Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm);
void vmlsl(Condition cond,
DataType dt,
QRegister rd,
DRegister rn,
DRegisterLane rm);
void vmlsl(
Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm);
void vmov(Condition cond, Register rt, SRegister rn);
void vmov(Condition cond, SRegister rn, Register rt);
void vmov(Condition cond, Register rt, Register rt2, DRegister rm);
void vmov(Condition cond, DRegister rm, Register rt, Register rt2);
void vmov(
Condition cond, Register rt, Register rt2, SRegister rm, SRegister rm1);
void vmov(
Condition cond, SRegister rm, SRegister rm1, Register rt, Register rt2);
void vmov(Condition cond, DataType dt, DRegisterLane rd, Register rt);
void vmov(Condition cond, DataType dt, DRegister rd, const DOperand& operand);
void vmov(Condition cond, DataType dt, QRegister rd, const QOperand& operand);
void vmov(Condition cond, DataType dt, SRegister rd, const SOperand& operand);
void vmov(Condition cond, DataType dt, Register rt, DRegisterLane rn);
void vmovl(Condition cond, DataType dt, QRegister rd, DRegister rm);
void vmovn(Condition cond, DataType dt, DRegister rd, QRegister rm);
void vmrs(Condition cond, RegisterOrAPSR_nzcv rt, SpecialFPRegister spec_reg);
void vmsr(Condition cond, SpecialFPRegister spec_reg, Register rt);
void vmul(Condition cond,
DataType dt,
DRegister rd,
DRegister rn,
DRegister dm,
unsigned index);
void vmul(Condition cond,
DataType dt,
QRegister rd,
QRegister rn,
DRegister dm,
unsigned index);
void vmul(
Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vmul(
Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
void vmul(
Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm);
void vmull(Condition cond,
DataType dt,
QRegister rd,
DRegister rn,
DRegister dm,
unsigned index);
void vmull(
Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm);
void vmvn(Condition cond, DataType dt, DRegister rd, const DOperand& operand);
void vmvn(Condition cond, DataType dt, QRegister rd, const QOperand& operand);
void vneg(Condition cond, DataType dt, DRegister rd, DRegister rm);
void vneg(Condition cond, DataType dt, QRegister rd, QRegister rm);
void vneg(Condition cond, DataType dt, SRegister rd, SRegister rm);
void vnmla(
Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm);
void vnmla(
Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vnmls(
Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm);
void vnmls(
Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vnmul(
Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm);
void vnmul(
Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vorn(Condition cond,
DataType dt,
DRegister rd,
DRegister rn,
const DOperand& operand);
void vorn(Condition cond,
DataType dt,
QRegister rd,
QRegister rn,
const QOperand& operand);
void vorr(Condition cond,
DataType dt,
DRegister rd,
DRegister rn,
const DOperand& operand);
void vorr(Condition cond,
DataType dt,
QRegister rd,
QRegister rn,
const QOperand& operand);
void vpadal(Condition cond, DataType dt, DRegister rd, DRegister rm);
void vpadal(Condition cond, DataType dt, QRegister rd, QRegister rm);
void vpadd(
Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vpaddl(Condition cond, DataType dt, DRegister rd, DRegister rm);
void vpaddl(Condition cond, DataType dt, QRegister rd, QRegister rm);
void vpmax(
Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vpmin(
Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vpop(Condition cond, DataType dt, DRegisterList dreglist);
void vpop(Condition cond, DataType dt, SRegisterList sreglist);
void vpush(Condition cond, DataType dt, DRegisterList dreglist);
void vpush(Condition cond, DataType dt, SRegisterList sreglist);
void vqabs(Condition cond, DataType dt, DRegister rd, DRegister rm);
void vqabs(Condition cond, DataType dt, QRegister rd, QRegister rm);
void vqadd(
Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vqadd(
Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
void vqdmlal(
Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm);
void vqdmlal(Condition cond,
DataType dt,
QRegister rd,
DRegister rn,
DRegister dm,
unsigned index);
void vqdmlsl(
Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm);
void vqdmlsl(Condition cond,
DataType dt,
QRegister rd,
DRegister rn,
DRegister dm,
unsigned index);
void vqdmulh(
Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vqdmulh(
Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
void vqdmulh(Condition cond,
DataType dt,
DRegister rd,
DRegister rn,
DRegisterLane rm);
void vqdmulh(Condition cond,
DataType dt,
QRegister rd,
QRegister rn,
DRegisterLane rm);
void vqdmull(
Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm);
void vqdmull(Condition cond,
DataType dt,
QRegister rd,
DRegister rn,
DRegisterLane rm);
void vqmovn(Condition cond, DataType dt, DRegister rd, QRegister rm);
void vqmovun(Condition cond, DataType dt, DRegister rd, QRegister rm);
void vqneg(Condition cond, DataType dt, DRegister rd, DRegister rm);
void vqneg(Condition cond, DataType dt, QRegister rd, QRegister rm);
void vqrdmulh(
Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vqrdmulh(
Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
void vqrdmulh(Condition cond,
DataType dt,
DRegister rd,
DRegister rn,
DRegisterLane rm);
void vqrdmulh(Condition cond,
DataType dt,
QRegister rd,
QRegister rn,
DRegisterLane rm);
void vqrshl(
Condition cond, DataType dt, DRegister rd, DRegister rm, DRegister rn);
void vqrshl(
Condition cond, DataType dt, QRegister rd, QRegister rm, QRegister rn);
void vqrshrn(Condition cond,
DataType dt,
DRegister rd,
QRegister rm,
const QOperand& operand);
void vqrshrun(Condition cond,
DataType dt,
DRegister rd,
QRegister rm,
const QOperand& operand);
void vqshl(Condition cond,
DataType dt,
DRegister rd,
DRegister rm,
const DOperand& operand);
void vqshl(Condition cond,
DataType dt,
QRegister rd,
QRegister rm,
const QOperand& operand);
void vqshlu(Condition cond,
DataType dt,
DRegister rd,
DRegister rm,
const DOperand& operand);
void vqshlu(Condition cond,
DataType dt,
QRegister rd,
QRegister rm,
const QOperand& operand);
void vqshrn(Condition cond,
DataType dt,
DRegister rd,
QRegister rm,
const QOperand& operand);
void vqshrun(Condition cond,
DataType dt,
DRegister rd,
QRegister rm,
const QOperand& operand);
void vqsub(
Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vqsub(
Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
void vraddhn(
Condition cond, DataType dt, DRegister rd, QRegister rn, QRegister rm);
void vrecpe(Condition cond, DataType dt, DRegister rd, DRegister rm);
void vrecpe(Condition cond, DataType dt, QRegister rd, QRegister rm);
void vrecps(
Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vrecps(
Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
void vrev16(Condition cond, DataType dt, DRegister rd, DRegister rm);
void vrev16(Condition cond, DataType dt, QRegister rd, QRegister rm);
void vrev32(Condition cond, DataType dt, DRegister rd, DRegister rm);
void vrev32(Condition cond, DataType dt, QRegister rd, QRegister rm);
void vrev64(Condition cond, DataType dt, DRegister rd, DRegister rm);
void vrev64(Condition cond, DataType dt, QRegister rd, QRegister rm);
void vrhadd(
Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vrhadd(
Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
void vrinta(DataType dt, DRegister rd, DRegister rm);
void vrinta(DataType dt, QRegister rd, QRegister rm);
void vrinta(DataType dt, SRegister rd, SRegister rm);
void vrintm(DataType dt, DRegister rd, DRegister rm);
void vrintm(DataType dt, QRegister rd, QRegister rm);
void vrintm(DataType dt, SRegister rd, SRegister rm);
void vrintn(DataType dt, DRegister rd, DRegister rm);
void vrintn(DataType dt, QRegister rd, QRegister rm);
void vrintn(DataType dt, SRegister rd, SRegister rm);
void vrintp(DataType dt, DRegister rd, DRegister rm);
void vrintp(DataType dt, QRegister rd, QRegister rm);
void vrintp(DataType dt, SRegister rd, SRegister rm);
void vrintr(Condition cond, DataType dt, SRegister rd, SRegister rm);
void vrintr(Condition cond, DataType dt, DRegister rd, DRegister rm);
void vrintx(Condition cond, DataType dt, DRegister rd, DRegister rm);
void vrintx(DataType dt, QRegister rd, QRegister rm);
void vrintx(Condition cond, DataType dt, SRegister rd, SRegister rm);
void vrintz(Condition cond, DataType dt, DRegister rd, DRegister rm);
void vrintz(DataType dt, QRegister rd, QRegister rm);
void vrintz(Condition cond, DataType dt, SRegister rd, SRegister rm);
void vrshl(
Condition cond, DataType dt, DRegister rd, DRegister rm, DRegister rn);
void vrshl(
Condition cond, DataType dt, QRegister rd, QRegister rm, QRegister rn);
void vrshr(Condition cond,
DataType dt,
DRegister rd,
DRegister rm,
const DOperand& operand);
void vrshr(Condition cond,
DataType dt,
QRegister rd,
QRegister rm,
const QOperand& operand);
void vrshrn(Condition cond,
DataType dt,
DRegister rd,
QRegister rm,
const QOperand& operand);
void vrsqrte(Condition cond, DataType dt, DRegister rd, DRegister rm);
void vrsqrte(Condition cond, DataType dt, QRegister rd, QRegister rm);
void vrsqrts(
Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vrsqrts(
Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
void vrsra(Condition cond,
DataType dt,
DRegister rd,
DRegister rm,
const DOperand& operand);
void vrsra(Condition cond,
DataType dt,
QRegister rd,
QRegister rm,
const QOperand& operand);
void vrsubhn(
Condition cond, DataType dt, DRegister rd, QRegister rn, QRegister rm);
void vseleq(DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vseleq(DataType dt, SRegister rd, SRegister rn, SRegister rm);
void vselge(DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vselge(DataType dt, SRegister rd, SRegister rn, SRegister rm);
void vselgt(DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vselgt(DataType dt, SRegister rd, SRegister rn, SRegister rm);
void vselvs(DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vselvs(DataType dt, SRegister rd, SRegister rn, SRegister rm);
void vshl(Condition cond,
DataType dt,
DRegister rd,
DRegister rm,
const DOperand& operand);
void vshl(Condition cond,
DataType dt,
QRegister rd,
QRegister rm,
const QOperand& operand);
void vshll(Condition cond,
DataType dt,
QRegister rd,
DRegister rm,
const DOperand& operand);
void vshr(Condition cond,
DataType dt,
DRegister rd,
DRegister rm,
const DOperand& operand);
void vshr(Condition cond,
DataType dt,
QRegister rd,
QRegister rm,
const QOperand& operand);
void vshrn(Condition cond,
DataType dt,
DRegister rd,
QRegister rm,
const QOperand& operand);
void vsli(Condition cond,
DataType dt,
DRegister rd,
DRegister rm,
const DOperand& operand);
void vsli(Condition cond,
DataType dt,
QRegister rd,
QRegister rm,
const QOperand& operand);
void vsqrt(Condition cond, DataType dt, SRegister rd, SRegister rm);
void vsqrt(Condition cond, DataType dt, DRegister rd, DRegister rm);
void vsra(Condition cond,
DataType dt,
DRegister rd,
DRegister rm,
const DOperand& operand);
void vsra(Condition cond,
DataType dt,
QRegister rd,
QRegister rm,
const QOperand& operand);
void vsri(Condition cond,
DataType dt,
DRegister rd,
DRegister rm,
const DOperand& operand);
void vsri(Condition cond,
DataType dt,
QRegister rd,
QRegister rm,
const QOperand& operand);
void vst1(Condition cond,
DataType dt,
const NeonRegisterList& nreglist,
const AlignedMemOperand& operand);
void vst2(Condition cond,
DataType dt,
const NeonRegisterList& nreglist,
const AlignedMemOperand& operand);
void vst3(Condition cond,
DataType dt,
const NeonRegisterList& nreglist,
const AlignedMemOperand& operand);
void vst3(Condition cond,
DataType dt,
const NeonRegisterList& nreglist,
const MemOperand& operand);
void vst4(Condition cond,
DataType dt,
const NeonRegisterList& nreglist,
const AlignedMemOperand& operand);
void vstm(Condition cond,
DataType dt,
Register rn,
WriteBack write_back,
DRegisterList dreglist);
void vstm(Condition cond,
DataType dt,
Register rn,
WriteBack write_back,
SRegisterList sreglist);
void vstmdb(Condition cond,
DataType dt,
Register rn,
WriteBack write_back,
DRegisterList dreglist);
void vstmdb(Condition cond,
DataType dt,
Register rn,
WriteBack write_back,
SRegisterList sreglist);
void vstmia(Condition cond,
DataType dt,
Register rn,
WriteBack write_back,
DRegisterList dreglist);
void vstmia(Condition cond,
DataType dt,
Register rn,
WriteBack write_back,
SRegisterList sreglist);
void vstr(Condition cond,
DataType dt,
DRegister rd,
const MemOperand& operand);
void vstr(Condition cond,
DataType dt,
SRegister rd,
const MemOperand& operand);
void vsub(
Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vsub(
Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
void vsub(
Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm);
void vsubhn(
Condition cond, DataType dt, DRegister rd, QRegister rn, QRegister rm);
void vsubl(
Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm);
void vsubw(
Condition cond, DataType dt, QRegister rd, QRegister rn, DRegister rm);
void vswp(Condition cond, DataType dt, DRegister rd, DRegister rm);
void vswp(Condition cond, DataType dt, QRegister rd, QRegister rm);
void vtbl(Condition cond,
DataType dt,
DRegister rd,
const NeonRegisterList& nreglist,
DRegister rm);
void vtbx(Condition cond,
DataType dt,
DRegister rd,
const NeonRegisterList& nreglist,
DRegister rm);
void vtrn(Condition cond, DataType dt, DRegister rd, DRegister rm);
void vtrn(Condition cond, DataType dt, QRegister rd, QRegister rm);
void vtst(
Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm);
void vtst(
Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm);
void vuzp(Condition cond, DataType dt, DRegister rd, DRegister rm);
void vuzp(Condition cond, DataType dt, QRegister rd, QRegister rm);
void vzip(Condition cond, DataType dt, DRegister rd, DRegister rm);
void vzip(Condition cond, DataType dt, QRegister rd, QRegister rm);
void yield(Condition cond, EncodingSize size);
int T32Size(uint32_t instr);
void DecodeT32(uint32_t instr);
void DecodeA32(uint32_t instr);
};
DataTypeValue Dt_L_imm6_1_Decode(uint32_t value, uint32_t type_value);
DataTypeValue Dt_L_imm6_2_Decode(uint32_t value, uint32_t type_value);
DataTypeValue Dt_L_imm6_3_Decode(uint32_t value);
DataTypeValue Dt_L_imm6_4_Decode(uint32_t value);
DataTypeValue Dt_imm6_1_Decode(uint32_t value, uint32_t type_value);
DataTypeValue Dt_imm6_2_Decode(uint32_t value, uint32_t type_value);
DataTypeValue Dt_imm6_3_Decode(uint32_t value);
DataTypeValue Dt_imm6_4_Decode(uint32_t value, uint32_t type_value);
DataTypeValue Dt_op_U_size_1_Decode(uint32_t value);
DataTypeValue Dt_op_size_1_Decode(uint32_t value);
DataTypeValue Dt_op_size_2_Decode(uint32_t value);
DataTypeValue Dt_op_size_3_Decode(uint32_t value);
DataTypeValue Dt_U_imm3H_1_Decode(uint32_t value);
DataTypeValue Dt_U_opc1_opc2_1_Decode(uint32_t value, unsigned* lane);
DataTypeValue Dt_opc1_opc2_1_Decode(uint32_t value, unsigned* lane);
DataTypeValue Dt_imm4_1_Decode(uint32_t value, unsigned* lane);
DataTypeValue Dt_B_E_1_Decode(uint32_t value);
DataTypeValue Dt_op_1_Decode1(uint32_t value);
DataTypeValue Dt_op_1_Decode2(uint32_t value);
DataTypeValue Dt_op_2_Decode(uint32_t value);
DataTypeValue Dt_op_3_Decode(uint32_t value);
DataTypeValue Dt_U_sx_1_Decode(uint32_t value);
DataTypeValue Dt_op_U_1_Decode1(uint32_t value);
DataTypeValue Dt_op_U_1_Decode2(uint32_t value);
DataTypeValue Dt_sz_1_Decode(uint32_t value);
DataTypeValue Dt_F_size_1_Decode(uint32_t value);
DataTypeValue Dt_F_size_2_Decode(uint32_t value);
DataTypeValue Dt_F_size_3_Decode(uint32_t value);
DataTypeValue Dt_F_size_4_Decode(uint32_t value);
DataTypeValue Dt_U_size_1_Decode(uint32_t value);
DataTypeValue Dt_U_size_2_Decode(uint32_t value);
DataTypeValue Dt_U_size_3_Decode(uint32_t value);
DataTypeValue Dt_size_1_Decode(uint32_t value);
DataTypeValue Dt_size_2_Decode(uint32_t value);
DataTypeValue Dt_size_3_Decode(uint32_t value);
DataTypeValue Dt_size_4_Decode(uint32_t value);
DataTypeValue Dt_size_5_Decode(uint32_t value);
DataTypeValue Dt_size_6_Decode(uint32_t value);
DataTypeValue Dt_size_7_Decode(uint32_t value);
DataTypeValue Dt_size_8_Decode(uint32_t value);
DataTypeValue Dt_size_9_Decode(uint32_t value, uint32_t type_value);
DataTypeValue Dt_size_10_Decode(uint32_t value);
DataTypeValue Dt_size_11_Decode(uint32_t value, uint32_t type_value);
DataTypeValue Dt_size_12_Decode(uint32_t value, uint32_t type_value);
DataTypeValue Dt_size_13_Decode(uint32_t value);
DataTypeValue Dt_size_14_Decode(uint32_t value);
DataTypeValue Dt_size_15_Decode(uint32_t value);
DataTypeValue Dt_size_16_Decode(uint32_t value);
DataTypeValue Dt_size_17_Decode(uint32_t value);
// End of generated code.
class PrintDisassembler : public Disassembler {
public:
explicit PrintDisassembler(std::ostream& os, // NOLINT(runtime/references)
uint32_t code_address = 0)
: Disassembler(os, code_address) {}
explicit PrintDisassembler(DisassemblerStream* os, uint32_t code_address = 0)
: Disassembler(os, code_address) {}
virtual void PrintCodeAddress(uint32_t code_address) {
os() << "0x" << std::hex << std::setw(8) << std::setfill('0')
<< code_address << "\t";
}
virtual void PrintOpcode16(uint32_t opcode) {
os() << std::hex << std::setw(4) << std::setfill('0') << opcode << " "
<< std::dec << "\t";
}
virtual void PrintOpcode32(uint32_t opcode) {
os() << std::hex << std::setw(8) << std::setfill('0') << opcode << std::dec
<< "\t";
}
const uint32_t* DecodeA32At(const uint32_t* instruction_address) {
DecodeA32(*instruction_address);
return instruction_address + 1;
}
// Returns the address of the next instruction.
const uint16_t* DecodeT32At(const uint16_t* instruction_address,
const uint16_t* buffer_end);
void DecodeT32(uint32_t instruction);
void DecodeA32(uint32_t instruction);
void DisassembleA32Buffer(const uint32_t* buffer, size_t size_in_bytes);
void DisassembleT32Buffer(const uint16_t* buffer, size_t size_in_bytes);
};
} // namespace aarch32
} // namespace vixl
#endif // VIXL_DISASM_AARCH32_H_