This is a list of the AArch64 instructions supported by the VIXL assembler, disassembler and simulator. The simulator may not support all floating point operations to the precision required by AArch64 - please check the simulator source code for details.
Add with carry bit.
void adc(const Register& rd, const Register& rn, const Operand& operand)
Add with carry bit and update status flags.
void adcs(const Register& rd, const Register& rn, const Operand& operand)
Add.
void add(const Register& rd, const Register& rn, const Operand& operand)
Add and update status flags.
void adds(const Register& rd, const Register& rn, const Operand& operand)
Calculate the address of a PC offset.
void adr(const Register& xd, int64_t imm21)
Calculate the address of a label.
void adr(const Register& xd, Label* label)
Calculate the page address of a PC offset.
void adrp(const Register& xd, int64_t imm21)
Calculate the page address of a label.
void adrp(const Register& xd, Label* label)
Bitwise and (A & B).
void and_(const Register& rd, const Register& rn, const Operand& operand)
Bitwise and (A & B) and update status flags.
void ands(const Register& rd, const Register& rn, const Operand& operand)
Arithmetic shift right.
void asr(const Register& rd, const Register& rn, unsigned shift)
Arithmetic shift right by variable.
void asrv(const Register& rd, const Register& rn, const Register& rm)
Authenticate Data address, using key A (Armv8.3).
void autda(const Register& xd, const Register& xn)
Authenticate Data address, using key A, with address in x17 and modifier in x16 (Armv8.3).
void autda1716()
Authenticate Data address, using key A, with address in LR and modifier in SP (Armv8.3).
void autdasp()
Authenticate Data address, using key A, with address in LR and a modifier of zero (Armv8.3).
void autdaz()
Authenticate Data address, using key B (Armv8.3).
void autdb(const Register& xd, const Register& xn)
Authenticate Data address, using key B, with address in x17 and modifier in x16 (Armv8.3).
void autdb1716()
Authenticate Data address, using key B, with address in LR and modifier in SP (Armv8.3).
void autdbsp()
Authenticate Data address, using key B, with address in LR and a modifier of zero (Armv8.3).
void autdbz()
Authenticate Data address, using key A and a modifier of zero (Armv8.3).
void autdza(const Register& xd)
Authenticate Data address, using key B and a modifier of zero (Armv8.3).
void autdzb(const Register& xd)
Authenticate Instruction address, using key A (Armv8.3).
void autia(const Register& xd, const Register& xn)
Authenticate Instruction address, using key A, with address in x17 and modifier in x16 (Armv8.3).
void autia1716()
Authenticate Instruction address, using key A, with address in LR and modifier in SP (Armv8.3).
void autiasp()
Authenticate Instruction address, using key A, with address in LR and a modifier of zero (Armv8.3).
void autiaz()
Authenticate Instruction address, using key B (Armv8.3).
void autib(const Register& xd, const Register& xn)
Authenticate Instruction address, using key B, with address in x17 and modifier in x16 (Armv8.3).
void autib1716()
Authenticate Instruction address, using key B, with address in LR and modifier in SP (Armv8.3).
void autibsp()
Authenticate Instruction address, using key B, with address in LR and a modifier of zero (Armv8.3).
void autibz()
Authenticate Instruction address, using key A and a modifier of zero (Armv8.3).
void autiza(const Register& xd)
Authenticate Instruction address, using key B and a modifier of zero (Armv8.3).
void autizb(const Register& xd)
Convert floating-point condition flags from Arm format to alternative format (Armv8.5).
void axflag()
Conditional branch to PC offset.
void b(int64_t imm19, Condition cond)
Conditional branch to label.
void b(Label* label, Condition cond)
Unconditional branch to PC offset.
void b(int64_t imm26)
Unconditional branch to label.
void b(Label* label)
Bitfield clear (Armv8.2).
void bfc(const Register& rd, unsigned lsb, unsigned width)
Bitfield insert.
void bfi(const Register& rd, const Register& rn, unsigned lsb, unsigned width)
Bitfield move.
void bfm(const Register& rd, const Register& rn, unsigned immr, unsigned imms)
Bitfield extract and insert low.
void bfxil(const Register& rd, const Register& rn, unsigned lsb, unsigned width)
Bit clear (A & ~B).
void bic(const Register& rd, const Register& rn, const Operand& operand)
Bit clear (A & ~B) and update status flags.
void bics(const Register& rd, const Register& rn, const Operand& operand)
Branch with link to PC offset.
void bl(int64_t imm26)
Branch with link to label.
void bl(Label* label)
Branch with link to register.
void blr(const Register& xn)
Branch with link to register, with pointer authentication. Using key A (Armv8.3).
void blraa(const Register& xn, const Register& xm)
Branch with link to register, with pointer authentication. Using key A and a modifier of zero (Armv8.3).
void blraaz(const Register& xn)
Branch with link to register, with pointer authentication. Using key B (Armv8.3).
void blrab(const Register& xn, const Register& xm)
Branch with link to register, with pointer authentication. Using key B and a modifier of zero (Armv8.3).
void blrabz(const Register& xn)
Branch to register.
void br(const Register& xn)
Branch to register, with pointer authentication. Using key A (Armv8.3).
void braa(const Register& xn, const Register& xm)
Branch to register, with pointer authentication. Using key A and a modifier of zero (Armv8.3).
void braaz(const Register& xn)
Branch to register, with pointer authentication. Using key B (Armv8.3).
void brab(const Register& xn, const Register& xm)
Branch to register, with pointer authentication. Using key B and a modifier of zero (Armv8.3).
void brabz(const Register& xn)
Monitor debug-mode breakpoint.
void brk(int code)
Branch target identification.
void bti(BranchTargetIdentifier id)
Compare and Swap word or doubleword in memory (Armv8.1).
void cas(const Register& rs, const Register& rt, const MemOperand& src)
Compare and Swap word or doubleword in memory (Armv8.1).
void casa(const Register& rs, const Register& rt, const MemOperand& src)
Compare and Swap byte in memory (Armv8.1).
void casab(const Register& rs, const Register& rt, const MemOperand& src)
Compare and Swap halfword in memory (Armv8.1).
void casah(const Register& rs, const Register& rt, const MemOperand& src)
Compare and Swap word or doubleword in memory (Armv8.1).
void casal(const Register& rs, const Register& rt, const MemOperand& src)
Compare and Swap byte in memory (Armv8.1).
void casalb(const Register& rs, const Register& rt, const MemOperand& src)
Compare and Swap halfword in memory (Armv8.1).
void casalh(const Register& rs, const Register& rt, const MemOperand& src)
Compare and Swap byte in memory (Armv8.1).
void casb(const Register& rs, const Register& rt, const MemOperand& src)
Compare and Swap halfword in memory (Armv8.1).
void cash(const Register& rs, const Register& rt, const MemOperand& src)
Compare and Swap word or doubleword in memory (Armv8.1).
void casl(const Register& rs, const Register& rt, const MemOperand& src)
Compare and Swap byte in memory (Armv8.1).
void caslb(const Register& rs, const Register& rt, const MemOperand& src)
Compare and Swap halfword in memory (Armv8.1).
void caslh(const Register& rs, const Register& rt, const MemOperand& src)
Compare and Swap Pair of words or doublewords in memory (Armv8.1).
void casp(const Register& rs, const Register& rs2, const Register& rt, const Register& rt2, const MemOperand& src)
Compare and Swap Pair of words or doublewords in memory (Armv8.1).
void caspa(const Register& rs, const Register& rs2, const Register& rt, const Register& rt2, const MemOperand& src)
Compare and Swap Pair of words or doublewords in memory (Armv8.1).
void caspal(const Register& rs, const Register& rs2, const Register& rt, const Register& rt2, const MemOperand& src)
Compare and Swap Pair of words or doublewords in memory (Armv8.1).
void caspl(const Register& rs, const Register& rs2, const Register& rt, const Register& rt2, const MemOperand& src)
Compare and branch to PC offset if not zero.
void cbnz(const Register& rt, int64_t imm19)
Compare and branch to label if not zero.
void cbnz(const Register& rt, Label* label)
Compare and branch to PC offset if zero.
void cbz(const Register& rt, int64_t imm19)
Compare and branch to label if zero.
void cbz(const Register& rt, Label* label)
Conditional compare negative.
void ccmn(const Register& rn, const Operand& operand, StatusFlags nzcv, Condition cond)
Conditional compare.
void ccmp(const Register& rn, const Operand& operand, StatusFlags nzcv, Condition cond)
Invert carry flag (Armv8.4).
void cfinv()
Conditional increment: rd = cond ? rn + 1 : rn.
void cinc(const Register& rd, const Register& rn, Condition cond)
Conditional invert: rd = cond ? ~rn : rn.
void cinv(const Register& rd, const Register& rn, Condition cond)
Clear exclusive monitor.
void clrex(int imm4 = 0xf)
Count leading sign bits.
void cls(const Register& rd, const Register& rn)
Count leading zeroes.
void clz(const Register& rd, const Register& rn)
Compare negative.
void cmn(const Register& rn, const Operand& operand)
Compare.
void cmp(const Register& rn, const Operand& operand)
Conditional negate: rd = cond ? -rn : rn.
void cneg(const Register& rd, const Register& rn, Condition cond)
CRC-32 checksum from byte.
void crc32b(const Register& wd, const Register& wn, const Register& wm)
CRC-32 C checksum from byte.
void crc32cb(const Register& wd, const Register& wn, const Register& wm)
CRC-32 C checksum from half-word.
void crc32ch(const Register& wd, const Register& wn, const Register& wm)
CRC-32 C checksum from word.
void crc32cw(const Register& wd, const Register& wn, const Register& wm)
CRC-32C checksum from double word.
void crc32cx(const Register& wd, const Register& wn, const Register& xm)
CRC-32 checksum from half-word.
void crc32h(const Register& wd, const Register& wn, const Register& wm)
CRC-32 checksum from word.
void crc32w(const Register& wd, const Register& wn, const Register& wm)
CRC-32 checksum from double word.
void crc32x(const Register& wd, const Register& wn, const Register& xm)
Conditional speculation dependency barrier.
void csdb()
Conditional select: rd = cond ? rn : rm.
void csel(const Register& rd, const Register& rn, const Register& rm, Condition cond)
Conditional set: rd = cond ? 1 : 0.
void cset(const Register& rd, Condition cond)
Conditional set mask: rd = cond ? -1 : 0.
void csetm(const Register& rd, Condition cond)
Conditional select increment: rd = cond ? rn : rm + 1.
void csinc(const Register& rd, const Register& rn, const Register& rm, Condition cond)
Conditional select inversion: rd = cond ? rn : ~rm.
void csinv(const Register& rd, const Register& rn, const Register& rm, Condition cond)
Conditional select negation: rd = cond ? rn : -rm.
void csneg(const Register& rd, const Register& rn, const Register& rm, Condition cond)
System data cache operation.
void dc(DataCacheOp op, const Register& rt)
Data memory barrier.
void dmb(BarrierDomain domain, BarrierType type)
Data synchronization barrier.
void dsb(BarrierDomain domain, BarrierType type)
Bitwise enor/xnor (A ^ ~B).
void eon(const Register& rd, const Register& rn, const Operand& operand)
Bitwise eor/xor (A ^ B).
void eor(const Register& rd, const Register& rn, const Operand& operand)
Error synchronization barrier.
void esb()
Extract.
void extr(const Register& rd, const Register& rn, const Register& rm, unsigned lsb)
System hint (named type).
void hint(SystemHint code)
System hint (numbered type).
void hint(int imm7)
Halting debug-mode breakpoint.
void hlt(int code)
System instruction cache operation.
void ic(InstructionCacheOp op, const Register& rt)
Instruction synchronization barrier.
void isb()
Atomic add on word or doubleword in memory (Armv8.1)
void ldadd(const Register& rs, const Register& rt, const MemOperand& src)
Atomic add on word or doubleword in memory, with Load-acquire semantics (Armv8.1)
void ldadda(const Register& rs, const Register& rt, const MemOperand& src)
Atomic add on byte in memory, with Load-acquire semantics (Armv8.1)
void ldaddab(const Register& rs, const Register& rt, const MemOperand& src)
Atomic add on halfword in memory, with Load-acquire semantics (Armv8.1)
void ldaddah(const Register& rs, const Register& rt, const MemOperand& src)
Atomic add on word or doubleword in memory, with Load-acquire and Store-release semantics (Armv8.1)
void ldaddal(const Register& rs, const Register& rt, const MemOperand& src)
Atomic add on byte in memory, with Load-acquire and Store-release semantics (Armv8.1)
void ldaddalb(const Register& rs, const Register& rt, const MemOperand& src)
Atomic add on halfword in memory, with Load-acquire and Store-release semantics (Armv8.1)
void ldaddalh(const Register& rs, const Register& rt, const MemOperand& src)
Atomic add on byte in memory (Armv8.1)
void ldaddb(const Register& rs, const Register& rt, const MemOperand& src)
Atomic add on halfword in memory (Armv8.1)
void ldaddh(const Register& rs, const Register& rt, const MemOperand& src)
Atomic add on word or doubleword in memory, with Store-release semantics (Armv8.1)
void ldaddl(const Register& rs, const Register& rt, const MemOperand& src)
Atomic add on byte in memory, with Store-release semantics (Armv8.1)
void ldaddlb(const Register& rs, const Register& rt, const MemOperand& src)
Atomic add on halfword in memory, with Store-release semantics (Armv8.1)
void ldaddlh(const Register& rs, const Register& rt, const MemOperand& src)
Load-Acquire RCpc Register word or doubleword (Armv8.3)
void ldapr(const Register& rt, const MemOperand& src)
Load-Acquire RCpc Register byte (Armv8.3)
void ldaprb(const Register& rt, const MemOperand& src)
Load-Acquire RCpc Register halfword (Armv8.3)
void ldaprh(const Register& rt, const MemOperand& src)
Load-acquire RCpc Register word or double-word (with unscaled offset) (Armv8.4).
void ldapur(const Register& rt, const MemOperand& src)
Load-acquire RCpc Register byte (with unscaled offset) (Armv8.4).
void ldapurb(const Register& rt, const MemOperand& src)
Load-acquire RCpc Register half-word (with unscaled offset) (Armv8.4).
void ldapurh(const Register& rt, const MemOperand& src)
Load-acquire RCpc Register signed byte (with unscaled offset) (Armv8.4).
void ldapursb(const Register& rt, const MemOperand& src)
Load-acquire RCpc Register signed half-word (with unscaled offset) (Armv8.4).
void ldapursh(const Register& rt, const MemOperand& src)
Load-acquire RCpc Register signed word (with unscaled offset) (Armv8.4).
void ldapursw(const Register& xt, const MemOperand& src)
Load-acquire register.
void ldar(const Register& rt, const MemOperand& src)
Load-acquire byte.
void ldarb(const Register& rt, const MemOperand& src)
Load-acquire half-word.
void ldarh(const Register& rt, const MemOperand& src)
Load-acquire exclusive register pair.
void ldaxp(const Register& rt, const Register& rt2, const MemOperand& src)
Load-acquire exclusive register.
void ldaxr(const Register& rt, const MemOperand& src)
Load-acquire exclusive byte.
void ldaxrb(const Register& rt, const MemOperand& src)
Load-acquire exclusive half-word.
void ldaxrh(const Register& rt, const MemOperand& src)
Atomic bit clear on word or doubleword in memory (Armv8.1)
void ldclr(const Register& rs, const Register& rt, const MemOperand& src)
Atomic bit clear on word or doubleword in memory, with Load-acquire semantics (Armv8.1)
void ldclra(const Register& rs, const Register& rt, const MemOperand& src)
Atomic bit clear on byte in memory, with Load-acquire semantics (Armv8.1)
void ldclrab(const Register& rs, const Register& rt, const MemOperand& src)
Atomic bit clear on halfword in memory, with Load-acquire semantics (Armv8.1)
void ldclrah(const Register& rs, const Register& rt, const MemOperand& src)
Atomic bit clear on word or doubleword in memory, with Load-acquire and Store-release semantics (Armv8.1)
void ldclral(const Register& rs, const Register& rt, const MemOperand& src)
Atomic bit clear on byte in memory, with Load-acquire and Store-release semantics (Armv8.1)
void ldclralb(const Register& rs, const Register& rt, const MemOperand& src)
Atomic bit clear on halfword in memory, with Load-acquire and Store-release semantics (Armv8.1)
void ldclralh(const Register& rs, const Register& rt, const MemOperand& src)
Atomic bit clear on byte in memory (Armv8.1)
void ldclrb(const Register& rs, const Register& rt, const MemOperand& src)
Atomic bit clear on halfword in memory (Armv8.1)
void ldclrh(const Register& rs, const Register& rt, const MemOperand& src)
Atomic bit clear on word or doubleword in memory, with Store-release semantics (Armv8.1)
void ldclrl(const Register& rs, const Register& rt, const MemOperand& src)
Atomic bit clear on byte in memory, with Store-release semantics (Armv8.1)
void ldclrlb(const Register& rs, const Register& rt, const MemOperand& src)
Atomic bit clear on halfword in memory, with Store-release semantics (Armv8.1)
void ldclrlh(const Register& rs, const Register& rt, const MemOperand& src)
Atomic exclusive OR on word or doubleword in memory (Armv8.1)
void ldeor(const Register& rs, const Register& rt, const MemOperand& src)
Atomic exclusive OR on word or doubleword in memory, with Load-acquire semantics (Armv8.1)
void ldeora(const Register& rs, const Register& rt, const MemOperand& src)
Atomic exclusive OR on byte in memory, with Load-acquire semantics (Armv8.1)
void ldeorab(const Register& rs, const Register& rt, const MemOperand& src)
Atomic exclusive OR on halfword in memory, with Load-acquire semantics (Armv8.1)
void ldeorah(const Register& rs, const Register& rt, const MemOperand& src)
Atomic exclusive OR on word or doubleword in memory, with Load-acquire and Store-release semantics (Armv8.1)
void ldeoral(const Register& rs, const Register& rt, const MemOperand& src)
Atomic exclusive OR on byte in memory, with Load-acquire and Store-release semantics (Armv8.1)
void ldeoralb(const Register& rs, const Register& rt, const MemOperand& src)
Atomic exclusive OR on halfword in memory, with Load-acquire and Store-release semantics (Armv8.1)
void ldeoralh(const Register& rs, const Register& rt, const MemOperand& src)
Atomic exclusive OR on byte in memory (Armv8.1)
void ldeorb(const Register& rs, const Register& rt, const MemOperand& src)
Atomic exclusive OR on halfword in memory (Armv8.1)
void ldeorh(const Register& rs, const Register& rt, const MemOperand& src)
Atomic exclusive OR on word or doubleword in memory, with Store-release semantics (Armv8.1)
void ldeorl(const Register& rs, const Register& rt, const MemOperand& src)
Atomic exclusive OR on byte in memory, with Store-release semantics (Armv8.1)
void ldeorlb(const Register& rs, const Register& rt, const MemOperand& src)
Atomic exclusive OR on halfword in memory, with Store-release semantics (Armv8.1)
void ldeorlh(const Register& rs, const Register& rt, const MemOperand& src)
Load LORelease register (Armv8.1).
void ldlar(const Register& rt, const MemOperand& src)
Load LORelease byte (Armv8.1).
void ldlarb(const Register& rt, const MemOperand& src)
Load LORelease half-word (Armv8.1).
void ldlarh(const Register& rt, const MemOperand& src)
Load integer or FP register pair, non-temporal.
void ldnp(const CPURegister& rt, const CPURegister& rt2, const MemOperand& src)
Load integer or FP register pair.
void ldp(const CPURegister& rt, const CPURegister& rt2, const MemOperand& src)
Load word pair with sign extension.
void ldpsw(const Register& xt, const Register& xt2, const MemOperand& src)
Load integer or FP register from literal pool.
void ldr(const CPURegister& rt, RawLiteral* literal)
Load integer or FP register from pc + imm19 << 2.
void ldr(const CPURegister& rt, int64_t imm19)
Load integer or FP register.
void ldr(const CPURegister& rt, const MemOperand& src, LoadStoreScalingOption option = PreferScaledOffset)
Load double-word with pointer authentication, using data key A and a modifier of zero (Armv8.3).
void ldraa(const Register& xt, const MemOperand& src)
Load double-word with pointer authentication, using data key B and a modifier of zero (Armv8.3).
void ldrab(const Register& xt, const MemOperand& src)
Load byte.
void ldrb(const Register& rt, const MemOperand& src, LoadStoreScalingOption option = PreferScaledOffset)
Load half-word.
void ldrh(const Register& rt, const MemOperand& src, LoadStoreScalingOption option = PreferScaledOffset)
Load byte with sign extension.
void ldrsb(const Register& rt, const MemOperand& src, LoadStoreScalingOption option = PreferScaledOffset)
Load half-word with sign extension.
void ldrsh(const Register& rt, const MemOperand& src, LoadStoreScalingOption option = PreferScaledOffset)
Load word with sign extension from literal pool.
void ldrsw(const Register& xt, RawLiteral* literal)
Load word with sign extension from pc + imm19 << 2.
void ldrsw(const Register& xt, int64_t imm19)
Load word with sign extension.
void ldrsw(const Register& xt, const MemOperand& src, LoadStoreScalingOption option = PreferScaledOffset)
Atomic bit set on word or doubleword in memory (Armv8.1)
void ldset(const Register& rs, const Register& rt, const MemOperand& src)
Atomic bit set on word or doubleword in memory, with Load-acquire semantics (Armv8.1)
void ldseta(const Register& rs, const Register& rt, const MemOperand& src)
Atomic bit set on byte in memory, with Load-acquire semantics (Armv8.1)
void ldsetab(const Register& rs, const Register& rt, const MemOperand& src)
Atomic bit set on halfword in memory, with Load-acquire semantics (Armv8.1)
void ldsetah(const Register& rs, const Register& rt, const MemOperand& src)
Atomic bit set on word or doubleword in memory, with Load-acquire and Store-release semantics (Armv8.1)
void ldsetal(const Register& rs, const Register& rt, const MemOperand& src)
Atomic bit set on byte in memory, with Load-acquire and Store-release semantics (Armv8.1)
void ldsetalb(const Register& rs, const Register& rt, const MemOperand& src)
Atomic bit set on halfword in memory, with Load-acquire and Store-release semantics (Armv8.1)
void ldsetalh(const Register& rs, const Register& rt, const MemOperand& src)
Atomic bit set on byte in memory (Armv8.1)
void ldsetb(const Register& rs, const Register& rt, const MemOperand& src)
Atomic bit set on halfword in memory (Armv8.1)
void ldseth(const Register& rs, const Register& rt, const MemOperand& src)
Atomic bit set on word or doubleword in memory, with Store-release semantics (Armv8.1)
void ldsetl(const Register& rs, const Register& rt, const MemOperand& src)
Atomic bit set on byte in memory, with Store-release semantics (Armv8.1)
void ldsetlb(const Register& rs, const Register& rt, const MemOperand& src)
Atomic bit set on halfword in memory, with Store-release semantics (Armv8.1)
void ldsetlh(const Register& rs, const Register& rt, const MemOperand& src)
Atomic signed maximum on word or doubleword in memory (Armv8.1)
void ldsmax(const Register& rs, const Register& rt, const MemOperand& src)
Atomic signed maximum on word or doubleword in memory, with Load-acquire semantics (Armv8.1)
void ldsmaxa(const Register& rs, const Register& rt, const MemOperand& src)
Atomic signed maximum on byte in memory, with Load-acquire semantics (Armv8.1)
void ldsmaxab(const Register& rs, const Register& rt, const MemOperand& src)
Atomic signed maximum on halfword in memory, with Load-acquire semantics (Armv8.1)
void ldsmaxah(const Register& rs, const Register& rt, const MemOperand& src)
Atomic signed maximum on word or doubleword in memory, with Load-acquire and Store-release semantics (Armv8.1)
void ldsmaxal(const Register& rs, const Register& rt, const MemOperand& src)
Atomic signed maximum on byte in memory, with Load-acquire and Store-release semantics (Armv8.1)
void ldsmaxalb(const Register& rs, const Register& rt, const MemOperand& src)
Atomic signed maximum on halfword in memory, with Load-acquire and Store-release semantics (Armv8.1)
void ldsmaxalh(const Register& rs, const Register& rt, const MemOperand& src)
Atomic signed maximum on byte in memory (Armv8.1)
void ldsmaxb(const Register& rs, const Register& rt, const MemOperand& src)
Atomic signed maximum on halfword in memory (Armv8.1)
void ldsmaxh(const Register& rs, const Register& rt, const MemOperand& src)
Atomic signed maximum on word or doubleword in memory, with Store-release semantics (Armv8.1)
void ldsmaxl(const Register& rs, const Register& rt, const MemOperand& src)
Atomic signed maximum on byte in memory, with Store-release semantics (Armv8.1)
void ldsmaxlb(const Register& rs, const Register& rt, const MemOperand& src)
Atomic signed maximum on halfword in memory, with Store-release semantics (Armv8.1)
void ldsmaxlh(const Register& rs, const Register& rt, const MemOperand& src)
Atomic signed minimum on word or doubleword in memory (Armv8.1)
void ldsmin(const Register& rs, const Register& rt, const MemOperand& src)
Atomic signed minimum on word or doubleword in memory, with Load-acquire semantics (Armv8.1)
void ldsmina(const Register& rs, const Register& rt, const MemOperand& src)
Atomic signed minimum on byte in memory, with Load-acquire semantics (Armv8.1)
void ldsminab(const Register& rs, const Register& rt, const MemOperand& src)
Atomic signed minimum on halfword in memory, with Load-acquire semantics (Armv8.1)
void ldsminah(const Register& rs, const Register& rt, const MemOperand& src)
Atomic signed minimum on word or doubleword in memory, with Load-acquire and Store-release semantics (Armv8.1)
void ldsminal(const Register& rs, const Register& rt, const MemOperand& src)
Atomic signed minimum on byte in memory, with Load-acquire and Store-release semantics (Armv8.1)
void ldsminalb(const Register& rs, const Register& rt, const MemOperand& src)
Atomic signed minimum on halfword in memory, with Load-acquire and Store-release semantics (Armv8.1)
void ldsminalh(const Register& rs, const Register& rt, const MemOperand& src)
Atomic signed minimum on byte in memory (Armv8.1)
void ldsminb(const Register& rs, const Register& rt, const MemOperand& src)
Atomic signed minimum on halfword in memory (Armv8.1)
void ldsminh(const Register& rs, const Register& rt, const MemOperand& src)
Atomic signed minimum on word or doubleword in memory, with Store-release semantics (Armv8.1)
void ldsminl(const Register& rs, const Register& rt, const MemOperand& src)
Atomic signed minimum on byte in memory, with Store-release semantics (Armv8.1)
void ldsminlb(const Register& rs, const Register& rt, const MemOperand& src)
Atomic signed minimum on halfword in memory, with Store-release semantics (Armv8.1)
void ldsminlh(const Register& rs, const Register& rt, const MemOperand& src)
Atomic unsigned maximum on word or doubleword in memory (Armv8.1)
void ldumax(const Register& rs, const Register& rt, const MemOperand& src)
Atomic unsigned maximum on word or doubleword in memory, with Load-acquire semantics (Armv8.1)
void ldumaxa(const Register& rs, const Register& rt, const MemOperand& src)
Atomic unsigned maximum on byte in memory, with Load-acquire semantics (Armv8.1)
void ldumaxab(const Register& rs, const Register& rt, const MemOperand& src)
Atomic unsigned maximum on halfword in memory, with Load-acquire semantics (Armv8.1)
void ldumaxah(const Register& rs, const Register& rt, const MemOperand& src)
Atomic unsigned maximum on word or doubleword in memory, with Load-acquire and Store-release semantics (Armv8.1)
void ldumaxal(const Register& rs, const Register& rt, const MemOperand& src)
Atomic unsigned maximum on byte in memory, with Load-acquire and Store-release semantics (Armv8.1)
void ldumaxalb(const Register& rs, const Register& rt, const MemOperand& src)
Atomic unsigned maximum on halfword in memory, with Load-acquire and Store-release semantics (Armv8.1)
void ldumaxalh(const Register& rs, const Register& rt, const MemOperand& src)
Atomic unsigned maximum on byte in memory (Armv8.1)
void ldumaxb(const Register& rs, const Register& rt, const MemOperand& src)
Atomic unsigned maximum on halfword in memory (Armv8.1)
void ldumaxh(const Register& rs, const Register& rt, const MemOperand& src)
Atomic unsigned maximum on word or doubleword in memory, with Store-release semantics (Armv8.1)
void ldumaxl(const Register& rs, const Register& rt, const MemOperand& src)
Atomic unsigned maximum on byte in memory, with Store-release semantics (Armv8.1)
void ldumaxlb(const Register& rs, const Register& rt, const MemOperand& src)
Atomic unsigned maximum on halfword in memory, with Store-release semantics (Armv8.1)
void ldumaxlh(const Register& rs, const Register& rt, const MemOperand& src)
Atomic unsigned minimum on word or doubleword in memory (Armv8.1)
void ldumin(const Register& rs, const Register& rt, const MemOperand& src)
Atomic unsigned minimum on word or doubleword in memory, with Load-acquire semantics (Armv8.1)
void ldumina(const Register& rs, const Register& rt, const MemOperand& src)
Atomic unsigned minimum on byte in memory, with Load-acquire semantics (Armv8.1)
void lduminab(const Register& rs, const Register& rt, const MemOperand& src)
Atomic unsigned minimum on halfword in memory, with Load-acquire semantics (Armv8.1)
void lduminah(const Register& rs, const Register& rt, const MemOperand& src)
Atomic unsigned minimum on word or doubleword in memory, with Load-acquire and Store-release semantics (Armv8.1)
void lduminal(const Register& rs, const Register& rt, const MemOperand& src)
Atomic unsigned minimum on byte in memory, with Load-acquire and Store-release semantics (Armv8.1)
void lduminalb(const Register& rs, const Register& rt, const MemOperand& src)
Atomic unsigned minimum on halfword in memory, with Load-acquire and Store-release semantics (Armv8.1)
void lduminalh(const Register& rs, const Register& rt, const MemOperand& src)
Atomic unsigned minimum on byte in memory (Armv8.1)
void lduminb(const Register& rs, const Register& rt, const MemOperand& src)
Atomic unsigned minimum on halfword in memory (Armv8.1)
void lduminh(const Register& rs, const Register& rt, const MemOperand& src)
Atomic unsigned minimum on word or doubleword in memory, with Store-release semantics (Armv8.1)
void lduminl(const Register& rs, const Register& rt, const MemOperand& src)
Atomic unsigned minimum on byte in memory, with Store-release semantics (Armv8.1)
void lduminlb(const Register& rs, const Register& rt, const MemOperand& src)
Atomic unsigned minimum on halfword in memory, with Store-release semantics (Armv8.1)
void lduminlh(const Register& rs, const Register& rt, const MemOperand& src)
Load integer or FP register (with unscaled offset).
void ldur(const CPURegister& rt, const MemOperand& src, LoadStoreScalingOption option = PreferUnscaledOffset)
Load byte (with unscaled offset).
void ldurb(const Register& rt, const MemOperand& src, LoadStoreScalingOption option = PreferUnscaledOffset)
Load half-word (with unscaled offset).
void ldurh(const Register& rt, const MemOperand& src, LoadStoreScalingOption option = PreferUnscaledOffset)
Load byte with sign extension (and unscaled offset).
void ldursb(const Register& rt, const MemOperand& src, LoadStoreScalingOption option = PreferUnscaledOffset)
Load half-word with sign extension (and unscaled offset).
void ldursh(const Register& rt, const MemOperand& src, LoadStoreScalingOption option = PreferUnscaledOffset)
Load word with sign extension.
void ldursw(const Register& xt, const MemOperand& src, LoadStoreScalingOption option = PreferUnscaledOffset)
Load exclusive register pair.
void ldxp(const Register& rt, const Register& rt2, const MemOperand& src)
Load exclusive register.
void ldxr(const Register& rt, const MemOperand& src)
Load exclusive byte.
void ldxrb(const Register& rt, const MemOperand& src)
Load exclusive half-word.
void ldxrh(const Register& rt, const MemOperand& src)
Logical shift left.
void lsl(const Register& rd, const Register& rn, unsigned shift)
Logical shift left by variable.
void lslv(const Register& rd, const Register& rn, const Register& rm)
Logical shift right.
void lsr(const Register& rd, const Register& rn, unsigned shift)
Logical shift right by variable.
void lsrv(const Register& rd, const Register& rn, const Register& rm)
Multiply and accumulate.
void madd(const Register& rd, const Register& rn, const Register& rm, const Register& ra)
Negated multiply.
void mneg(const Register& rd, const Register& rn, const Register& rm)
Move register to register.
void mov(const Register& rd, const Register& rn)
Move immediate and keep.
void movk(const Register& rd, uint64_t imm, int shift = -1)
Move inverted immediate.
void movn(const Register& rd, uint64_t imm, int shift = -1)
Move immediate.
void movz(const Register& rd, uint64_t imm, int shift = -1)
Move to register from system register.
void mrs(const Register& xt, SystemRegister sysreg)
Move from register to system register.
void msr(SystemRegister sysreg, const Register& xt)
Multiply and subtract.
void msub(const Register& rd, const Register& rn, const Register& rm, const Register& ra)
Multiply.
void mul(const Register& rd, const Register& rn, const Register& rm)
Move inverted operand to register.
void mvn(const Register& rd, const Operand& operand)
Negate.
void neg(const Register& rd, const Operand& operand)
Negate and update status flags.
void negs(const Register& rd, const Operand& operand)
Negate with carry bit.
void ngc(const Register& rd, const Operand& operand)
Negate with carry bit and update status flags.
void ngcs(const Register& rd, const Operand& operand)
No-op.
void nop()
Bitwise nor (A | ~B).
void orn(const Register& rd, const Register& rn, const Operand& operand)
Bitwise or (A | B).
void orr(const Register& rd, const Register& rn, const Operand& operand)
Pointer Authentication Code for Data address, using key A (Armv8.3).
void pacda(const Register& xd, const Register& xn)
Pointer Authentication Code for Data address, using key A, with address in x17 and modifier in x16 (Armv8.3).
void pacda1716()
Pointer Authentication Code for Data address, using key A, with address in LR and modifier in SP (Armv8.3).
void pacdasp()
Pointer Authentication Code for Data address, using key A, with address in LR and a modifier of zero (Armv8.3).
void pacdaz()
Pointer Authentication Code for Data address, using key B (Armv8.3).
void pacdb(const Register& xd, const Register& xn)
Pointer Authentication Code for Data address, using key B, with address in x17 and modifier in x16 (Armv8.3).
void pacdb1716()
Pointer Authentication Code for Data address, using key B, with address in LR and modifier in SP (Armv8.3).
void pacdbsp()
Pointer Authentication Code for Data address, using key B, with address in LR and a modifier of zero (Armv8.3).
void pacdbz()
Pointer Authentication Code for Data address, using key A and a modifier of zero (Armv8.3).
void pacdza(const Register& xd)
Pointer Authentication Code for Data address, using key B and a modifier of zero (Armv8.3).
void pacdzb(const Register& xd)
Pointer Authentication Code, using Generic key (Armv8.3).
void pacga(const Register& xd, const Register& xn, const Register& xm)
Pointer Authentication Code for Instruction address, using key A (Armv8.3).
void pacia(const Register& xd, const Register& rn)
Pointer Authentication Code for Instruction address, using key A, with address in x17 and modifier in x16 (Armv8.3).
void pacia1716()
Pointer Authentication Code for Instruction address, using key A, with address in LR and modifier in SP (Armv8.3).
void paciasp()
Pointer Authentication Code for Instruction address, using key A, with address in LR and a modifier of zero (Armv8.3).
void paciaz()
Pointer Authentication Code for Instruction address, using key B (Armv8.3).
void pacib(const Register& xd, const Register& xn)
Pointer Authentication Code for Instruction address, using key B, with address in x17 and modifier in x16 (Armv8.3).
void pacib1716()
Pointer Authentication Code for Instruction address, using key B, with address in LR and modifier in SP (Armv8.3).
void pacibsp()
Pointer Authentication Code for Instruction address, using key B, with address in LR and a modifier of zero (Armv8.3).
void pacibz()
Pointer Authentication Code for Instruction address, using key A and a modifier of zero (Armv8.3).
void paciza(const Register& xd)
Pointer Authentication Code for Instruction address, using key B and a modifier of zero (Armv8.3).
void pacizb(const Register& xd)
Prefetch from pc + imm19 << 2.
void prfm(PrefetchOperation op, int64_t imm19)
Prefetch memory in the literal pool.
void prfm(PrefetchOperation op, RawLiteral* literal)
Prefetch memory.
void prfm(PrefetchOperation op, const MemOperand& addr, LoadStoreScalingOption option = PreferScaledOffset)
Prefetch memory (with unscaled offset).
void prfum(PrefetchOperation op, const MemOperand& addr, LoadStoreScalingOption option = PreferUnscaledOffset)
Bit reverse.
void rbit(const Register& rd, const Register& rn)
Branch to register with return hint.
void ret(const Register& xn = lr)
Return from subroutine, with pointer authentication. Using key A (Armv8.3).
void retaa()
Return from subroutine, with pointer authentication. Using key B (Armv8.3).
void retab()
Reverse bytes.
void rev(const Register& rd, const Register& rn)
Reverse bytes in 16-bit half words.
void rev16(const Register& rd, const Register& rn)
Reverse bytes in 32-bit words.
void rev32(const Register& xd, const Register& xn)
Reverse bytes in 64-bit general purpose register, an alias for rev (Armv8.2).
void rev64(const Register& xd, const Register& xn)
Rotate register right and insert into NZCV flags under the control of a mask (Armv8.4).
void rmif(const Register& xn, unsigned rotation, StatusFlags flags)
Rotate right.
void ror(const Register& rd, const Register& rs, unsigned shift)
Rotate right by variable.
void rorv(const Register& rd, const Register& rn, const Register& rm)
Subtract with carry bit.
void sbc(const Register& rd, const Register& rn, const Operand& operand)
Subtract with carry bit and update status flags.
void sbcs(const Register& rd, const Register& rn, const Operand& operand)
Signed bitfield insert with zero at right.
void sbfiz(const Register& rd, const Register& rn, unsigned lsb, unsigned width)
Signed bitfield move.
void sbfm(const Register& rd, const Register& rn, unsigned immr, unsigned imms)
Signed bitfield extract.
void sbfx(const Register& rd, const Register& rn, unsigned lsb, unsigned width)
Signed integer divide.
void sdiv(const Register& rd, const Register& rn, const Register& rm)
Set NZCV flags from register, treated as an 16-bit value (Armv8.4).
void setf16(const Register& rn)
Set NZCV flags from register, treated as an 8-bit value (Armv8.4).
void setf8(const Register& rn)
Signed long multiply and accumulate: 32 x 32 + 64 -> 64-bit.
void smaddl(const Register& xd, const Register& wn, const Register& wm, const Register& xa)
Signed long multiply and subtract: 64 - (32 x 32) -> 64-bit.
void smsubl(const Register& xd, const Register& wn, const Register& wm, const Register& xa)
Signed multiply high: 64 x 64 -> 64-bit <127:64>.
void smulh(const Register& xd, const Register& xn, const Register& xm)
Signed long multiply: 32 x 32 -> 64-bit.
void smull(const Register& xd, const Register& wn, const Register& wm)
Atomic add on word or doubleword in memory, without return. (Armv8.1)
void stadd(const Register& rs, const MemOperand& src)
Atomic add on byte in memory, without return. (Armv8.1)
void staddb(const Register& rs, const MemOperand& src)
Atomic add on halfword in memory, without return. (Armv8.1)
void staddh(const Register& rs, const MemOperand& src)
Atomic add on word or doubleword in memory, with Store-release semantics and without return. (Armv8.1)
void staddl(const Register& rs, const MemOperand& src)
Atomic add on byte in memory, with Store-release semantics and without return. (Armv8.1)
void staddlb(const Register& rs, const MemOperand& src)
Atomic add on halfword in memory, with Store-release semantics and without return. (Armv8.1)
void staddlh(const Register& rs, const MemOperand& src)
Atomic bit clear on word or doubleword in memory, without return. (Armv8.1)
void stclr(const Register& rs, const MemOperand& src)
Atomic bit clear on byte in memory, without return. (Armv8.1)
void stclrb(const Register& rs, const MemOperand& src)
Atomic bit clear on halfword in memory, without return. (Armv8.1)
void stclrh(const Register& rs, const MemOperand& src)
Atomic bit clear on word or doubleword in memory, with Store-release semantics and without return. (Armv8.1)
void stclrl(const Register& rs, const MemOperand& src)
Atomic bit clear on byte in memory, with Store-release semantics and without return. (Armv8.1)
void stclrlb(const Register& rs, const MemOperand& src)
Atomic bit clear on halfword in memory, with Store-release semantics and without return. (Armv8.1)
void stclrlh(const Register& rs, const MemOperand& src)
Atomic exclusive OR on word or doubleword in memory, without return. (Armv8.1)
void steor(const Register& rs, const MemOperand& src)
Atomic exclusive OR on byte in memory, without return. (Armv8.1)
void steorb(const Register& rs, const MemOperand& src)
Atomic exclusive OR on halfword in memory, without return. (Armv8.1)
void steorh(const Register& rs, const MemOperand& src)
Atomic exclusive OR on word or doubleword in memory, with Store-release semantics and without return. (Armv8.1)
void steorl(const Register& rs, const MemOperand& src)
Atomic exclusive OR on byte in memory, with Store-release semantics and without return. (Armv8.1)
void steorlb(const Register& rs, const MemOperand& src)
Atomic exclusive OR on halfword in memory, with Store-release semantics and without return. (Armv8.1)
void steorlh(const Register& rs, const MemOperand& src)
Store LORelease register (Armv8.1).
void stllr(const Register& rt, const MemOperand& dst)
Store LORelease byte (Armv8.1).
void stllrb(const Register& rt, const MemOperand& dst)
Store LORelease half-word (Armv8.1).
void stllrh(const Register& rt, const MemOperand& dst)
Store-release register.
void stlr(const Register& rt, const MemOperand& dst)
Store-release byte.
void stlrb(const Register& rt, const MemOperand& dst)
Store-release half-word.
void stlrh(const Register& rt, const MemOperand& dst)
Store-release word or double-word (with unscaled offset) (Armv8.4).
void stlur(const Register& rt, const MemOperand& dst)
Store-release byte (with unscaled offset) (Armv8.4).
void stlurb(const Register& rt, const MemOperand& dst)
Store-release half-word (with unscaled offset) (Armv8.4).
void stlurh(const Register& rt, const MemOperand& dst)
Store-release exclusive register pair.
void stlxp(const Register& rs, const Register& rt, const Register& rt2, const MemOperand& dst)
Store-release exclusive register.
void stlxr(const Register& rs, const Register& rt, const MemOperand& dst)
Store-release exclusive byte.
void stlxrb(const Register& rs, const Register& rt, const MemOperand& dst)
Store-release exclusive half-word.
void stlxrh(const Register& rs, const Register& rt, const MemOperand& dst)
Store integer or FP register pair, non-temporal.
void stnp(const CPURegister& rt, const CPURegister& rt2, const MemOperand& dst)
Store integer or FP register pair.
void stp(const CPURegister& rt, const CPURegister& rt2, const MemOperand& dst)
Store integer or FP register.
void str(const CPURegister& rt, const MemOperand& dst, LoadStoreScalingOption option = PreferScaledOffset)
Store byte.
void strb(const Register& rt, const MemOperand& dst, LoadStoreScalingOption option = PreferScaledOffset)
Store half-word.
void strh(const Register& rt, const MemOperand& dst, LoadStoreScalingOption option = PreferScaledOffset)
Atomic bit set on word or doubleword in memory, without return. (Armv8.1)
void stset(const Register& rs, const MemOperand& src)
Atomic bit set on byte in memory, without return. (Armv8.1)
void stsetb(const Register& rs, const MemOperand& src)
Atomic bit set on halfword in memory, without return. (Armv8.1)
void stseth(const Register& rs, const MemOperand& src)
Atomic bit set on word or doubleword in memory, with Store-release semantics and without return. (Armv8.1)
void stsetl(const Register& rs, const MemOperand& src)
Atomic bit set on byte in memory, with Store-release semantics and without return. (Armv8.1)
void stsetlb(const Register& rs, const MemOperand& src)
Atomic bit set on halfword in memory, with Store-release semantics and without return. (Armv8.1)
void stsetlh(const Register& rs, const MemOperand& src)
Atomic signed maximum on word or doubleword in memory, without return. (Armv8.1)
void stsmax(const Register& rs, const MemOperand& src)
Atomic signed maximum on byte in memory, without return. (Armv8.1)
void stsmaxb(const Register& rs, const MemOperand& src)
Atomic signed maximum on halfword in memory, without return. (Armv8.1)
void stsmaxh(const Register& rs, const MemOperand& src)
Atomic signed maximum on word or doubleword in memory, with Store-release semantics and without return. (Armv8.1)
void stsmaxl(const Register& rs, const MemOperand& src)
Atomic signed maximum on byte in memory, with Store-release semantics and without return. (Armv8.1)
void stsmaxlb(const Register& rs, const MemOperand& src)
Atomic signed maximum on halfword in memory, with Store-release semantics and without return. (Armv8.1)
void stsmaxlh(const Register& rs, const MemOperand& src)
Atomic signed minimum on word or doubleword in memory, without return. (Armv8.1)
void stsmin(const Register& rs, const MemOperand& src)
Atomic signed minimum on byte in memory, without return. (Armv8.1)
void stsminb(const Register& rs, const MemOperand& src)
Atomic signed minimum on halfword in memory, without return. (Armv8.1)
void stsminh(const Register& rs, const MemOperand& src)
Atomic signed minimum on word or doubleword in memory, with Store-release semantics and without return. semantics (Armv8.1)
void stsminl(const Register& rs, const MemOperand& src)
Atomic signed minimum on byte in memory, with Store-release semantics and without return. (Armv8.1)
void stsminlb(const Register& rs, const MemOperand& src)
Atomic signed minimum on halfword in memory, with Store-release semantics and without return. (Armv8.1)
void stsminlh(const Register& rs, const MemOperand& src)
Atomic unsigned maximum on word or doubleword in memory, without return. (Armv8.1)
void stumax(const Register& rs, const MemOperand& src)
Atomic unsigned maximum on byte in memory, without return. (Armv8.1)
void stumaxb(const Register& rs, const MemOperand& src)
Atomic unsigned maximum on halfword in memory, without return. (Armv8.1)
void stumaxh(const Register& rs, const MemOperand& src)
Atomic unsigned maximum on word or doubleword in memory, with Store-release semantics and without return. (Armv8.1)
void stumaxl(const Register& rs, const MemOperand& src)
Atomic unsigned maximum on byte in memory, with Store-release semantics and without return. (Armv8.1)
void stumaxlb(const Register& rs, const MemOperand& src)
Atomic unsigned maximum on halfword in memory, with Store-release semantics and without return. (Armv8.1)
void stumaxlh(const Register& rs, const MemOperand& src)
Atomic unsigned minimum on word or doubleword in memory, without return. (Armv8.1)
void stumin(const Register& rs, const MemOperand& src)
Atomic unsigned minimum on byte in memory, without return. (Armv8.1)
void stuminb(const Register& rs, const MemOperand& src)
Atomic unsigned minimum on halfword in memory, without return. (Armv8.1)
void stuminh(const Register& rs, const MemOperand& src)
Atomic unsigned minimum on word or doubleword in memory, with Store-release semantics and without return. (Armv8.1)
void stuminl(const Register& rs, const MemOperand& src)
Atomic unsigned minimum on byte in memory, with Store-release semantics and without return. (Armv8.1)
void stuminlb(const Register& rs, const MemOperand& src)
Atomic unsigned minimum on halfword in memory, with Store-release semantics and without return. (Armv8.1)
void stuminlh(const Register& rs, const MemOperand& src)
Store integer or FP register (with unscaled offset).
void stur(const CPURegister& rt, const MemOperand& src, LoadStoreScalingOption option = PreferUnscaledOffset)
Store byte (with unscaled offset).
void sturb(const Register& rt, const MemOperand& dst, LoadStoreScalingOption option = PreferUnscaledOffset)
Store half-word (with unscaled offset).
void sturh(const Register& rt, const MemOperand& dst, LoadStoreScalingOption option = PreferUnscaledOffset)
Store exclusive register pair.
void stxp(const Register& rs, const Register& rt, const Register& rt2, const MemOperand& dst)
Store exclusive register.
void stxr(const Register& rs, const Register& rt, const MemOperand& dst)
Store exclusive byte.
void stxrb(const Register& rs, const Register& rt, const MemOperand& dst)
Store exclusive half-word.
void stxrh(const Register& rs, const Register& rt, const MemOperand& dst)
Subtract.
void sub(const Register& rd, const Register& rn, const Operand& operand)
Subtract and update status flags.
void subs(const Register& rd, const Register& rn, const Operand& operand)
Generate exception targeting EL1.
void svc(int code)
Swap word or doubleword in memory (Armv8.1)
void swp(const Register& rs, const Register& rt, const MemOperand& src)
Swap word or doubleword in memory, with Load-acquire semantics (Armv8.1)
void swpa(const Register& rs, const Register& rt, const MemOperand& src)
Swap byte in memory, with Load-acquire semantics (Armv8.1)
void swpab(const Register& rs, const Register& rt, const MemOperand& src)
Swap halfword in memory, with Load-acquire semantics (Armv8.1)
void swpah(const Register& rs, const Register& rt, const MemOperand& src)
Swap word or doubleword in memory, with Load-acquire and Store-release semantics (Armv8.1)
void swpal(const Register& rs, const Register& rt, const MemOperand& src)
Swap byte in memory, with Load-acquire and Store-release semantics (Armv8.1)
void swpalb(const Register& rs, const Register& rt, const MemOperand& src)
Swap halfword in memory, with Load-acquire and Store-release semantics (Armv8.1)
void swpalh(const Register& rs, const Register& rt, const MemOperand& src)
Swap byte in memory (Armv8.1)
void swpb(const Register& rs, const Register& rt, const MemOperand& src)
Swap halfword in memory (Armv8.1)
void swph(const Register& rs, const Register& rt, const MemOperand& src)
Swap word or doubleword in memory, with Store-release semantics (Armv8.1)
void swpl(const Register& rs, const Register& rt, const MemOperand& src)
Swap byte in memory, with Store-release semantics (Armv8.1)
void swplb(const Register& rs, const Register& rt, const MemOperand& src)
Swap halfword in memory, with Store-release semantics (Armv8.1)
void swplh(const Register& rs, const Register& rt, const MemOperand& src)
Signed extend byte.
void sxtb(const Register& rd, const Register& rn)
Signed extend halfword.
void sxth(const Register& rd, const Register& rn)
Signed extend word.
void sxtw(const Register& rd, const Register& rn)
System instruction with pre-encoded op (op1:crn:crm:op2).
void sys(int op, const Register& xt = xzr)
System instruction.
void sys(int op1, int crn, int crm, int op2, const Register& xt = xzr)
Test bit and branch to PC offset if not zero.
void tbnz(const Register& rt, unsigned bit_pos, int64_t imm14)
Test bit and branch to label if not zero.
void tbnz(const Register& rt, unsigned bit_pos, Label* label)
Test bit and branch to PC offset if zero.
void tbz(const Register& rt, unsigned bit_pos, int64_t imm14)
Test bit and branch to label if zero.
void tbz(const Register& rt, unsigned bit_pos, Label* label)
Bit test and set flags.
void tst(const Register& rn, const Operand& operand)
Unsigned bitfield insert with zero at right.
void ubfiz(const Register& rd, const Register& rn, unsigned lsb, unsigned width)
Unsigned bitfield move.
void ubfm(const Register& rd, const Register& rn, unsigned immr, unsigned imms)
Unsigned bitfield extract.
void ubfx(const Register& rd, const Register& rn, unsigned lsb, unsigned width)
Unsigned integer divide.
void udiv(const Register& rd, const Register& rn, const Register& rm)
Unsigned long multiply and accumulate: 32 x 32 + 64 -> 64-bit.
void umaddl(const Register& xd, const Register& wn, const Register& wm, const Register& xa)
Unsigned long multiply and subtract: 64 - (32 x 32) -> 64-bit.
void umsubl(const Register& xd, const Register& wn, const Register& wm, const Register& xa)
Unsigned multiply high: 64 x 64 -> 64-bit <127:64>.
void umulh(const Register& xd, const Register& xn, const Register& xm)
Unsigned long multiply: 32 x 32 -> 64-bit.
void umull(const Register& xd, const Register& wn, const Register& wm)
Unsigned extend byte.
void uxtb(const Register& rd, const Register& rn)
Unsigned extend halfword.
void uxth(const Register& rd, const Register& rn)
Unsigned extend word.
void uxtw(const Register& rd, const Register& rn)
Convert floating-point condition flags from alternative format to Arm format (Armv8.5).
void xaflag()
Strip Pointer Authentication Code of Data address (Armv8.3).
void xpacd(const Register& xd)
Strip Pointer Authentication Code of Instruction address (Armv8.3).
void xpaci(const Register& xd)
Strip Pointer Authentication Code of Instruction address in LR (Armv8.3).
void xpaclri()
Absolute value.
void abs(const VRegister& vd, const VRegister& vn)
Add.
void add(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Add narrow returning high half.
void addhn(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Add narrow returning high half (second part).
void addhn2(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Add pair of elements scalar.
void addp(const VRegister& vd, const VRegister& vn)
Add pairwise.
void addp(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Add across vector.
void addv(const VRegister& vd, const VRegister& vn)
Bitwise and.
void and_(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Bit clear immediate.
void bic(const VRegister& vd, const int imm8, const int left_shift = 0)
Bit clear.
void bic(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Bitwise insert if false.
void bif(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Bitwise insert if true.
void bit(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Bitwise select.
void bsl(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Count leading sign bits.
void cls(const VRegister& vd, const VRegister& vn)
Count leading zero bits (vector).
void clz(const VRegister& vd, const VRegister& vn)
Compare bitwise to zero.
void cmeq(const VRegister& vd, const VRegister& vn, int value)
Compare equal.
void cmeq(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Compare signed greater than or equal to zero.
void cmge(const VRegister& vd, const VRegister& vn, int value)
Compare signed greater than or equal.
void cmge(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Compare signed greater than zero.
void cmgt(const VRegister& vd, const VRegister& vn, int value)
Compare signed greater than.
void cmgt(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Compare unsigned higher.
void cmhi(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Compare unsigned higher or same.
void cmhs(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Compare signed less than or equal to zero.
void cmle(const VRegister& vd, const VRegister& vn, int value)
Compare signed less than zero.
void cmlt(const VRegister& vd, const VRegister& vn, int value)
Compare bitwise test bits nonzero.
void cmtst(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Population count per byte.
void cnt(const VRegister& vd, const VRegister& vn)
Duplicate general-purpose register to vector.
void dup(const VRegister& vd, const Register& rn)
Duplicate vector element to vector or scalar.
void dup(const VRegister& vd, const VRegister& vn, int vn_index)
Bitwise eor.
void eor(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Extract vector from pair of vectors.
void ext(const VRegister& vd, const VRegister& vn, const VRegister& vm, int index)
FP absolute difference.
void fabd(const VRegister& vd, const VRegister& vn, const VRegister& vm)
FP absolute.
void fabs(const VRegister& vd, const VRegister& vn)
FP absolute greater than or equal.
void facge(const VRegister& vd, const VRegister& vn, const VRegister& vm)
FP absolute greater than.
void facgt(const VRegister& vd, const VRegister& vn, const VRegister& vm)
FP add.
void fadd(const VRegister& vd, const VRegister& vn, const VRegister& vm)
FP pairwise add scalar.
void faddp(const VRegister& vd, const VRegister& vn)
FP pairwise add vector.
void faddp(const VRegister& vd, const VRegister& vn, const VRegister& vm)
FP complex add (Armv8.3).
void fcadd(const VRegister& vd, const VRegister& vn, const VRegister& vm, int rot)
FP conditional compare.
void fccmp(const VRegister& vn, const VRegister& vm, StatusFlags nzcv, Condition cond)
FP conditional signaling compare.
void fccmpe(const VRegister& vn, const VRegister& vm, StatusFlags nzcv, Condition cond)
FP compare equal to zero.
void fcmeq(const VRegister& vd, const VRegister& vn, double imm)
FP compare equal.
void fcmeq(const VRegister& vd, const VRegister& vn, const VRegister& vm)
FP greater than or equal to zero.
void fcmge(const VRegister& vd, const VRegister& vn, double imm)
FP greater than or equal.
void fcmge(const VRegister& vd, const VRegister& vn, const VRegister& vm)
FP greater than zero.
void fcmgt(const VRegister& vd, const VRegister& vn, double imm)
FP greater than.
void fcmgt(const VRegister& vd, const VRegister& vn, const VRegister& vm)
FP complex multiply accumulate (by element) (Armv8.3).
void fcmla(const VRegister& vd, const VRegister& vn, const VRegister& vm, int vm_index, int rot)
FP complex multiply accumulate (Armv8.3).
void fcmla(const VRegister& vd, const VRegister& vn, const VRegister& vm, int rot)
FP less than or equal to zero.
void fcmle(const VRegister& vd, const VRegister& vn, double imm)
FP less than to zero.
void fcmlt(const VRegister& vd, const VRegister& vn, double imm)
FP compare immediate.
void fcmp(const VRegister& vn, double value)
FP compare registers.
void fcmp(const VRegister& vn, const VRegister& vm)
FP signaling compare immediate.
void fcmpe(const VRegister& vn, double value)
FP signaling compare registers.
void fcmpe(const VRegister& vn, const VRegister& vm)
FP conditional select.
void fcsel(const VRegister& vd, const VRegister& vn, const VRegister& vm, Condition cond)
FP convert between precisions.
void fcvt(const VRegister& vd, const VRegister& vn)
FP convert to signed integer, nearest with ties to away.
void fcvtas(const Register& rd, const VRegister& vn)
FP convert to signed integer, nearest with ties to away.
void fcvtas(const VRegister& vd, const VRegister& vn)
FP convert to unsigned integer, nearest with ties to away.
void fcvtau(const Register& rd, const VRegister& vn)
FP convert to unsigned integer, nearest with ties to away.
void fcvtau(const VRegister& vd, const VRegister& vn)
FP convert to higher precision.
void fcvtl(const VRegister& vd, const VRegister& vn)
FP convert to higher precision (second part).
void fcvtl2(const VRegister& vd, const VRegister& vn)
FP convert to signed integer, round towards -infinity.
void fcvtms(const Register& rd, const VRegister& vn)
FP convert to signed integer, round towards -infinity.
void fcvtms(const VRegister& vd, const VRegister& vn)
FP convert to unsigned integer, round towards -infinity.
void fcvtmu(const Register& rd, const VRegister& vn)
FP convert to unsigned integer, round towards -infinity.
void fcvtmu(const VRegister& vd, const VRegister& vn)
FP convert to lower precision.
void fcvtn(const VRegister& vd, const VRegister& vn)
FP convert to lower prevision (second part).
void fcvtn2(const VRegister& vd, const VRegister& vn)
FP convert to signed integer, nearest with ties to even.
void fcvtns(const Register& rd, const VRegister& vn)
FP convert to signed integer, nearest with ties to even.
void fcvtns(const VRegister& rd, const VRegister& vn)
FP convert to unsigned integer, nearest with ties to even.
void fcvtnu(const Register& rd, const VRegister& vn)
FP convert to unsigned integer, nearest with ties to even.
void fcvtnu(const VRegister& rd, const VRegister& vn)
FP convert to signed integer, round towards +infinity.
void fcvtps(const Register& rd, const VRegister& vn)
FP convert to signed integer, round towards +infinity.
void fcvtps(const VRegister& vd, const VRegister& vn)
FP convert to unsigned integer, round towards +infinity.
void fcvtpu(const Register& rd, const VRegister& vn)
FP convert to unsigned integer, round towards +infinity.
void fcvtpu(const VRegister& vd, const VRegister& vn)
FP convert to lower precision, rounding to odd.
void fcvtxn(const VRegister& vd, const VRegister& vn)
FP convert to lower precision, rounding to odd (second part).
void fcvtxn2(const VRegister& vd, const VRegister& vn)
FP convert to signed integer or fixed-point, round towards zero.
void fcvtzs(const Register& rd, const VRegister& vn, int fbits = 0)
FP convert to signed integer or fixed-point, round towards zero.
void fcvtzs(const VRegister& vd, const VRegister& vn, int fbits = 0)
FP convert to unsigned integer or fixed-point, round towards zero.
void fcvtzu(const Register& rd, const VRegister& vn, int fbits = 0)
FP convert to unsigned integer or fixed-point, round towards zero.
void fcvtzu(const VRegister& vd, const VRegister& vn, int fbits = 0)
FP divide.
void fdiv(const VRegister& vd, const VRegister& fn, const VRegister& vm)
FP JavaScript convert to signed integer, rounding toward zero (Armv8.3).
void fjcvtzs(const Register& rd, const VRegister& vn)
FP fused multiply-add.
void fmadd(const VRegister& vd, const VRegister& vn, const VRegister& vm, const VRegister& va)
FP maximum.
void fmax(const VRegister& vd, const VRegister& fn, const VRegister& vm)
FP maximum number.
void fmaxnm(const VRegister& vd, const VRegister& fn, const VRegister& vm)
FP pairwise maximum number scalar.
void fmaxnmp(const VRegister& vd, const VRegister& vn)
FP pairwise maximum number vector.
void fmaxnmp(const VRegister& vd, const VRegister& vn, const VRegister& vm)
FP maximum number across vector.
void fmaxnmv(const VRegister& vd, const VRegister& vn)
FP pairwise maximum scalar.
void fmaxp(const VRegister& vd, const VRegister& vn)
FP pairwise maximum vector.
void fmaxp(const VRegister& vd, const VRegister& vn, const VRegister& vm)
FP maximum across vector.
void fmaxv(const VRegister& vd, const VRegister& vn)
FP minimum.
void fmin(const VRegister& vd, const VRegister& fn, const VRegister& vm)
FP minimum number.
void fminnm(const VRegister& vd, const VRegister& fn, const VRegister& vm)
FP pairwise minimum number scalar.
void fminnmp(const VRegister& vd, const VRegister& vn)
FP pairwise minimum number vector.
void fminnmp(const VRegister& vd, const VRegister& vn, const VRegister& vm)
FP minimum number across vector.
void fminnmv(const VRegister& vd, const VRegister& vn)
FP pairwise minimum scalar.
void fminp(const VRegister& vd, const VRegister& vn)
FP pairwise minimum vector.
void fminp(const VRegister& vd, const VRegister& vn, const VRegister& vm)
FP minimum across vector.
void fminv(const VRegister& vd, const VRegister& vn)
FP fused multiply-add to accumulator by element.
void fmla(const VRegister& vd, const VRegister& vn, const VRegister& vm, int vm_index)
FP vector multiply accumulate.
void fmla(const VRegister& vd, const VRegister& vn, const VRegister& vm)
FP fused multiply-add long to accumulator by element.
void fmlal(const VRegister& vd, const VRegister& vn, const VRegister& vm, int vm_index)
FP fused multiply-add long to accumulator.
void fmlal(const VRegister& vd, const VRegister& vn, const VRegister& vm)
FP fused multiply-add long to accumulator (second part).
void fmlal2(const VRegister& vd, const VRegister& vn, const VRegister& vm)
FP fused multiply-add long to accumulator by element (second part).
void fmlal2(const VRegister& vd, const VRegister& vn, const VRegister& vm, int vm_index)
FP fused multiply-sub from accumulator by element.
void fmls(const VRegister& vd, const VRegister& vn, const VRegister& vm, int vm_index)
FP vector multiply subtract.
void fmls(const VRegister& vd, const VRegister& vn, const VRegister& vm)
FP fused multiply-subtract long to accumulator by element.
void fmlsl(const VRegister& vd, const VRegister& vn, const VRegister& vm, int vm_index)
FP fused multiply-subtract long to accumulator.
void fmlsl(const VRegister& vd, const VRegister& vn, const VRegister& vm)
FP fused multiply-subtract long to accumulator (second part).
void fmlsl2(const VRegister& vd, const VRegister& vn, const VRegister& vm)
FP fused multiply-subtract long to accumulator by element (second part).
void fmlsl2(const VRegister& vd, const VRegister& vn, const VRegister& vm, int vm_index)
Move 64-bit register to top half of 128-bit FP register.
void fmov(const VRegister& vd, int index, const Register& rn)
Move FP register to FP register.
void fmov(const VRegister& vd, const VRegister& fn)
Move FP register to register.
void fmov(const Register& rd, const VRegister& fn)
Move double precision immediate to FP register.
void fmov(const VRegister& vd, double imm)
Move half precision immediate to FP register (Armv8.2).
void fmov(const VRegister& vd, Float16 imm)
Move register to FP register.
void fmov(const VRegister& vd, const Register& rn)
Move single precision immediate to FP register.
void fmov(const VRegister& vd, float imm)
Move top half of 128-bit FP register to 64-bit register.
void fmov(const Register& rd, const VRegister& vn, int index)
FP fused multiply-subtract.
void fmsub(const VRegister& vd, const VRegister& vn, const VRegister& vm, const VRegister& va)
FP multiply by element.
void fmul(const VRegister& vd, const VRegister& vn, const VRegister& vm, int vm_index)
FP multiply.
void fmul(const VRegister& vd, const VRegister& vn, const VRegister& vm)
FP multiply extended by element.
void fmulx(const VRegister& vd, const VRegister& vn, const VRegister& vm, int vm_index)
FP vector multiply extended.
void fmulx(const VRegister& vd, const VRegister& vn, const VRegister& vm)
FP negate.
void fneg(const VRegister& vd, const VRegister& vn)
FP fused multiply-add and negate.
void fnmadd(const VRegister& vd, const VRegister& vn, const VRegister& vm, const VRegister& va)
FP fused multiply-subtract and negate.
void fnmsub(const VRegister& vd, const VRegister& vn, const VRegister& vm, const VRegister& va)
FP multiply-negate scalar.
void fnmul(const VRegister& vd, const VRegister& vn, const VRegister& vm)
FP reciprocal estimate.
void frecpe(const VRegister& vd, const VRegister& vn)
FP reciprocal step.
void frecps(const VRegister& vd, const VRegister& vn, const VRegister& vm)
FP reciprocal exponent scalar.
void frecpx(const VRegister& vd, const VRegister& vn)
FP round to integer, nearest with ties to away.
void frinta(const VRegister& vd, const VRegister& vn)
FP round to integer, implicit rounding.
void frinti(const VRegister& vd, const VRegister& vn)
FP round to integer, toward minus infinity.
void frintm(const VRegister& vd, const VRegister& vn)
FP round to integer, nearest with ties to even.
void frintn(const VRegister& vd, const VRegister& vn)
FP round to integer, toward plus infinity.
void frintp(const VRegister& vd, const VRegister& vn)
FP round to integer, exact, implicit rounding.
void frintx(const VRegister& vd, const VRegister& vn)
FP round to integer, towards zero.
void frintz(const VRegister& vd, const VRegister& vn)
FP reciprocal square root estimate.
void frsqrte(const VRegister& vd, const VRegister& vn)
FP reciprocal square root step.
void frsqrts(const VRegister& vd, const VRegister& vn, const VRegister& vm)
FP square root.
void fsqrt(const VRegister& vd, const VRegister& vn)
FP subtract.
void fsub(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Insert vector element from another vector element.
void ins(const VRegister& vd, int vd_index, const VRegister& vn, int vn_index)
Insert vector element from general-purpose register.
void ins(const VRegister& vd, int vd_index, const Register& rn)
One-element single structure load to one lane.
void ld1(const VRegister& vt, int lane, const MemOperand& src)
One-element structure load to four registers.
void ld1(const VRegister& vt, const VRegister& vt2, const VRegister& vt3, const VRegister& vt4, const MemOperand& src)
One-element structure load to one register.
void ld1(const VRegister& vt, const MemOperand& src)
One-element structure load to three registers.
void ld1(const VRegister& vt, const VRegister& vt2, const VRegister& vt3, const MemOperand& src)
One-element structure load to two registers.
void ld1(const VRegister& vt, const VRegister& vt2, const MemOperand& src)
One-element single structure load to all lanes.
void ld1r(const VRegister& vt, const MemOperand& src)
Two-element single structure load to one lane.
void ld2(const VRegister& vt, const VRegister& vt2, int lane, const MemOperand& src)
Two-element structure load.
void ld2(const VRegister& vt, const VRegister& vt2, const MemOperand& src)
Two-element single structure load to all lanes.
void ld2r(const VRegister& vt, const VRegister& vt2, const MemOperand& src)
Three-element single structure load to one lane.
void ld3(const VRegister& vt, const VRegister& vt2, const VRegister& vt3, int lane, const MemOperand& src)
Three-element structure load.
void ld3(const VRegister& vt, const VRegister& vt2, const VRegister& vt3, const MemOperand& src)
Three-element single structure load to all lanes.
void ld3r(const VRegister& vt, const VRegister& vt2, const VRegister& vt3, const MemOperand& src)
Four-element single structure load to one lane.
void ld4(const VRegister& vt, const VRegister& vt2, const VRegister& vt3, const VRegister& vt4, int lane, const MemOperand& src)
Four-element structure load.
void ld4(const VRegister& vt, const VRegister& vt2, const VRegister& vt3, const VRegister& vt4, const MemOperand& src)
Four-element single structure load to all lanes.
void ld4r(const VRegister& vt, const VRegister& vt2, const VRegister& vt3, const VRegister& vt4, const MemOperand& src)
Multiply-add by scalar element.
void mla(const VRegister& vd, const VRegister& vn, const VRegister& vm, int vm_index)
Multiply-add to accumulator.
void mla(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Multiply-subtract by scalar element.
void mls(const VRegister& vd, const VRegister& vn, const VRegister& vm, int vm_index)
Multiply-subtract to accumulator.
void mls(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Move general-purpose register to a vector element.
void mov(const VRegister& vd, int vd_index, const Register& rn)
Move register to register.
void mov(const VRegister& vd, const VRegister& vn)
Move vector element to another vector element.
void mov(const VRegister& vd, int vd_index, const VRegister& vn, int vn_index)
Move vector element to general-purpose register.
void mov(const Register& rd, const VRegister& vn, int vn_index)
Move vector element to scalar.
void mov(const VRegister& vd, const VRegister& vn, int vn_index)
Vector move immediate.
void movi(const VRegister& vd, const uint64_t imm, Shift shift = LSL, const int shift_amount = 0)
Multiply by scalar element.
void mul(const VRegister& vd, const VRegister& vn, const VRegister& vm, int vm_index)
Multiply.
void mul(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Bitwise not.
void mvn(const VRegister& vd, const VRegister& vn)
Vector move inverted immediate.
void mvni(const VRegister& vd, const int imm8, Shift shift = LSL, const int shift_amount = 0)
Negate.
void neg(const VRegister& vd, const VRegister& vn)
Bitwise not.
void not_(const VRegister& vd, const VRegister& vn)
Bitwise orn.
void orn(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Bitwise or immediate.
void orr(const VRegister& vd, const int imm8, const int left_shift = 0)
Bitwise or.
void orr(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Polynomial multiply.
void pmul(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Polynomial multiply long.
void pmull(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Polynomial multiply long (second part).
void pmull2(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Rounding add narrow returning high half.
void raddhn(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Rounding add narrow returning high half (second part).
void raddhn2(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Reverse bit order.
void rbit(const VRegister& vd, const VRegister& vn)
Reverse elements in 16-bit halfwords.
void rev16(const VRegister& vd, const VRegister& vn)
Reverse elements in 32-bit words.
void rev32(const VRegister& vd, const VRegister& vn)
Reverse elements in 64-bit doublewords.
void rev64(const VRegister& vd, const VRegister& vn)
Rounding shift right narrow by immediate.
void rshrn(const VRegister& vd, const VRegister& vn, int shift)
Rounding shift right narrow by immediate (second part).
void rshrn2(const VRegister& vd, const VRegister& vn, int shift)
Rounding subtract narrow returning high half.
void rsubhn(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Rounding subtract narrow returning high half (second part).
void rsubhn2(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Signed absolute difference and accumulate.
void saba(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Signed absolute difference and accumulate long.
void sabal(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Signed absolute difference and accumulate long (second part).
void sabal2(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Signed absolute difference.
void sabd(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Signed absolute difference long.
void sabdl(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Signed absolute difference long (second part).
void sabdl2(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Signed pairwise long add and accumulate.
void sadalp(const VRegister& vd, const VRegister& vn)
Signed add long.
void saddl(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Signed add long (second part).
void saddl2(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Signed pairwise long add.
void saddlp(const VRegister& vd, const VRegister& vn)
Signed add long across vector.
void saddlv(const VRegister& vd, const VRegister& vn)
Signed add wide.
void saddw(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Signed add wide (second part).
void saddw2(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Convert signed integer or fixed point to FP.
void scvtf(const VRegister& fd, const Register& rn, int fbits = 0)
Convert signed integer or fixed-point to FP.
void scvtf(const VRegister& fd, const VRegister& vn, int fbits = 0)
Signed dot product (Armv8.2).
void sdot(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Signed dot product by element (Armv8.2).
void sdot(const VRegister& vd, const VRegister& vn, const VRegister& vm, int vm_index)
Signed halving add.
void shadd(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Shift left by immediate.
void shl(const VRegister& vd, const VRegister& vn, int shift)
Shift left long by element size.
void shll(const VRegister& vd, const VRegister& vn, int shift)
Shift left long by element size (second part).
void shll2(const VRegister& vd, const VRegister& vn, int shift)
Shift right narrow by immediate.
void shrn(const VRegister& vd, const VRegister& vn, int shift)
Shift right narrow by immediate (second part).
void shrn2(const VRegister& vd, const VRegister& vn, int shift)
Signed halving sub.
void shsub(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Shift left by immediate and insert.
void sli(const VRegister& vd, const VRegister& vn, int shift)
Signed maximum.
void smax(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Signed pairwise maximum.
void smaxp(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Signed maximum across vector.
void smaxv(const VRegister& vd, const VRegister& vn)
Signed minimum.
void smin(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Signed minimum pairwise.
void sminp(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Signed minimum across vector.
void sminv(const VRegister& vd, const VRegister& vn)
Signed long multiply-add by scalar element.
void smlal(const VRegister& vd, const VRegister& vn, const VRegister& vm, int vm_index)
Signed long multiply-add.
void smlal(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Signed long multiply-add (second part).
void smlal2(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Signed long multiply-add by scalar element (second part).
void smlal2(const VRegister& vd, const VRegister& vn, const VRegister& vm, int vm_index)
Signed long multiply-sub by scalar element.
void smlsl(const VRegister& vd, const VRegister& vn, const VRegister& vm, int vm_index)
Signed long multiply-sub.
void smlsl(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Signed long multiply-sub (second part).
void smlsl2(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Signed long multiply-sub by scalar element (second part).
void smlsl2(const VRegister& vd, const VRegister& vn, const VRegister& vm, int vm_index)
Signed move vector element to general-purpose register.
void smov(const Register& rd, const VRegister& vn, int vn_index)
Signed long multiply by scalar element.
void smull(const VRegister& vd, const VRegister& vn, const VRegister& vm, int vm_index)
Signed long multiply.
void smull(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Signed long multiply (second part).
void smull2(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Signed long multiply by scalar element (second part).
void smull2(const VRegister& vd, const VRegister& vn, const VRegister& vm, int vm_index)
Signed saturating absolute value.
void sqabs(const VRegister& vd, const VRegister& vn)
Signed saturating add.
void sqadd(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Signed saturating doubling long multiply-add by element.
void sqdmlal(const VRegister& vd, const VRegister& vn, const VRegister& vm, int vm_index)
Signed saturating doubling long multiply-add.
void sqdmlal(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Signed saturating doubling long multiply-add (second part).
void sqdmlal2(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Signed saturating doubling long multiply-add by element (second part).
void sqdmlal2(const VRegister& vd, const VRegister& vn, const VRegister& vm, int vm_index)
Signed saturating doubling long multiply-sub by element.
void sqdmlsl(const VRegister& vd, const VRegister& vn, const VRegister& vm, int vm_index)
Signed saturating doubling long multiply-subtract.
void sqdmlsl(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Signed saturating doubling long multiply-sub by element (second part).
void sqdmlsl2(const VRegister& vd, const VRegister& vn, const VRegister& vm, int vm_index)
Signed saturating doubling long multiply-subtract (second part).
void sqdmlsl2(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Signed saturating doubling multiply element returning high half.
void sqdmulh(const VRegister& vd, const VRegister& vn, const VRegister& vm, int vm_index)
Signed saturating doubling multiply returning high half.
void sqdmulh(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Signed saturating double long multiply by element.
void sqdmull(const VRegister& vd, const VRegister& vn, const VRegister& vm, int vm_index)
Signed saturating doubling long multiply.
void sqdmull(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Signed saturating double long multiply by element (second part).
void sqdmull2(const VRegister& vd, const VRegister& vn, const VRegister& vm, int vm_index)
Signed saturating doubling long multiply (second part).
void sqdmull2(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Signed saturating negate.
void sqneg(const VRegister& vd, const VRegister& vn)
Signed saturating rounding doubling multiply accumulate element returning high half (Armv8.1).
void sqrdmlah(const VRegister& vd, const VRegister& vn, const VRegister& vm, int vm_index)
Signed saturating rounding doubling multiply accumulate returning high half (Armv8.1).
void sqrdmlah(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Signed saturating rounding doubling multiply subtract element returning high half (Armv8.1).
void sqrdmlsh(const VRegister& vd, const VRegister& vn, const VRegister& vm, int vm_index)
Signed saturating rounding doubling multiply subtract returning high half (Armv8.1).
void sqrdmlsh(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Signed saturating rounding doubling multiply element returning high half.
void sqrdmulh(const VRegister& vd, const VRegister& vn, const VRegister& vm, int vm_index)
Signed saturating rounding doubling multiply returning high half.
void sqrdmulh(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Signed saturating rounding shift left by register.
void sqrshl(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Signed saturating rounded shift right narrow by immediate.
void sqrshrn(const VRegister& vd, const VRegister& vn, int shift)
Signed saturating rounded shift right narrow by immediate (second part).
void sqrshrn2(const VRegister& vd, const VRegister& vn, int shift)
Signed sat rounded shift right unsigned narrow by immediate.
void sqrshrun(const VRegister& vd, const VRegister& vn, int shift)
Signed sat rounded shift right unsigned narrow by immediate (second part).
void sqrshrun2(const VRegister& vd, const VRegister& vn, int shift)
Signed saturating shift left by immediate.
void sqshl(const VRegister& vd, const VRegister& vn, int shift)
Signed saturating shift left by register.
void sqshl(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Signed saturating shift left unsigned by immediate.
void sqshlu(const VRegister& vd, const VRegister& vn, int shift)
Signed saturating shift right narrow by immediate.
void sqshrn(const VRegister& vd, const VRegister& vn, int shift)
Signed saturating shift right narrow by immediate (second part).
void sqshrn2(const VRegister& vd, const VRegister& vn, int shift)
Signed saturating shift right unsigned narrow by immediate.
void sqshrun(const VRegister& vd, const VRegister& vn, int shift)
Signed saturating shift right unsigned narrow by immediate (second part).
void sqshrun2(const VRegister& vd, const VRegister& vn, int shift)
Signed saturating subtract.
void sqsub(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Signed saturating extract narrow.
void sqxtn(const VRegister& vd, const VRegister& vn)
Signed saturating extract narrow (second part).
void sqxtn2(const VRegister& vd, const VRegister& vn)
Signed saturating extract unsigned narrow.
void sqxtun(const VRegister& vd, const VRegister& vn)
Signed saturating extract unsigned narrow (second part).
void sqxtun2(const VRegister& vd, const VRegister& vn)
Signed rounding halving add.
void srhadd(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Shift right by immediate and insert.
void sri(const VRegister& vd, const VRegister& vn, int shift)
Signed rounding shift left by register.
void srshl(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Signed rounding shift right by immediate.
void srshr(const VRegister& vd, const VRegister& vn, int shift)
Signed rounding shift right by immediate and accumulate.
void srsra(const VRegister& vd, const VRegister& vn, int shift)
Signed shift left by register.
void sshl(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Signed shift left long by immediate.
void sshll(const VRegister& vd, const VRegister& vn, int shift)
Signed shift left long by immediate (second part).
void sshll2(const VRegister& vd, const VRegister& vn, int shift)
Signed shift right by immediate.
void sshr(const VRegister& vd, const VRegister& vn, int shift)
Signed shift right by immediate and accumulate.
void ssra(const VRegister& vd, const VRegister& vn, int shift)
Signed subtract long.
void ssubl(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Signed subtract long (second part).
void ssubl2(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Signed integer subtract wide.
void ssubw(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Signed integer subtract wide (second part).
void ssubw2(const VRegister& vd, const VRegister& vn, const VRegister& vm)
One-element single structure store from one lane.
void st1(const VRegister& vt, int lane, const MemOperand& src)
One-element structure store from four registers.
void st1(const VRegister& vt, const VRegister& vt2, const VRegister& vt3, const VRegister& vt4, const MemOperand& src)
One-element structure store from one register.
void st1(const VRegister& vt, const MemOperand& src)
One-element structure store from three registers.
void st1(const VRegister& vt, const VRegister& vt2, const VRegister& vt3, const MemOperand& src)
One-element structure store from two registers.
void st1(const VRegister& vt, const VRegister& vt2, const MemOperand& src)
Two-element single structure store from two lanes.
void st2(const VRegister& vt, const VRegister& vt2, int lane, const MemOperand& src)
Two-element structure store from two registers.
void st2(const VRegister& vt, const VRegister& vt2, const MemOperand& src)
Three-element single structure store from three lanes.
void st3(const VRegister& vt, const VRegister& vt2, const VRegister& vt3, int lane, const MemOperand& src)
Three-element structure store from three registers.
void st3(const VRegister& vt, const VRegister& vt2, const VRegister& vt3, const MemOperand& src)
Four-element single structure store from four lanes.
void st4(const VRegister& vt, const VRegister& vt2, const VRegister& vt3, const VRegister& vt4, int lane, const MemOperand& src)
Four-element structure store from four registers.
void st4(const VRegister& vt, const VRegister& vt2, const VRegister& vt3, const VRegister& vt4, const MemOperand& src)
Subtract.
void sub(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Subtract narrow returning high half.
void subhn(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Subtract narrow returning high half (second part).
void subhn2(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Signed saturating accumulate of unsigned value.
void suqadd(const VRegister& vd, const VRegister& vn)
Signed extend long.
void sxtl(const VRegister& vd, const VRegister& vn)
Signed extend long (second part).
void sxtl2(const VRegister& vd, const VRegister& vn)
Table lookup from four registers.
void tbl(const VRegister& vd, const VRegister& vn, const VRegister& vn2, const VRegister& vn3, const VRegister& vn4, const VRegister& vm)
Table lookup from one register.
void tbl(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Table lookup from three registers.
void tbl(const VRegister& vd, const VRegister& vn, const VRegister& vn2, const VRegister& vn3, const VRegister& vm)
Table lookup from two registers.
void tbl(const VRegister& vd, const VRegister& vn, const VRegister& vn2, const VRegister& vm)
Table lookup extension from four registers.
void tbx(const VRegister& vd, const VRegister& vn, const VRegister& vn2, const VRegister& vn3, const VRegister& vn4, const VRegister& vm)
Table lookup extension from one register.
void tbx(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Table lookup extension from three registers.
void tbx(const VRegister& vd, const VRegister& vn, const VRegister& vn2, const VRegister& vn3, const VRegister& vm)
Table lookup extension from two registers.
void tbx(const VRegister& vd, const VRegister& vn, const VRegister& vn2, const VRegister& vm)
Transpose vectors (primary).
void trn1(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Transpose vectors (secondary).
void trn2(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Unsigned absolute difference and accumulate.
void uaba(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Unsigned absolute difference and accumulate long.
void uabal(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Unsigned absolute difference and accumulate long (second part).
void uabal2(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Unsigned absolute difference.
void uabd(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Unsigned absolute difference long.
void uabdl(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Unsigned absolute difference long (second part).
void uabdl2(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Unsigned pairwise long add and accumulate.
void uadalp(const VRegister& vd, const VRegister& vn)
Unsigned add long.
void uaddl(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Unsigned add long (second part).
void uaddl2(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Unsigned pairwise long add.
void uaddlp(const VRegister& vd, const VRegister& vn)
Unsigned add long across vector.
void uaddlv(const VRegister& vd, const VRegister& vn)
Unsigned add wide.
void uaddw(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Unsigned add wide (second part).
void uaddw2(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Convert unsigned integer or fixed point to FP.
void ucvtf(const VRegister& fd, const Register& rn, int fbits = 0)
Convert unsigned integer or fixed-point to FP.
void ucvtf(const VRegister& fd, const VRegister& vn, int fbits = 0)
Unsigned dot product (Armv8.2).
void udot(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Unsigned dot product by element (Armv8.2).
void udot(const VRegister& vd, const VRegister& vn, const VRegister& vm, int vm_index)
Unsigned halving add.
void uhadd(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Unsigned halving sub.
void uhsub(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Unsigned maximum.
void umax(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Unsigned pairwise maximum.
void umaxp(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Unsigned maximum across vector.
void umaxv(const VRegister& vd, const VRegister& vn)
Unsigned minimum.
void umin(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Unsigned pairwise minimum.
void uminp(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Unsigned minimum across vector.
void uminv(const VRegister& vd, const VRegister& vn)
Unsigned long multiply-add by scalar element.
void umlal(const VRegister& vd, const VRegister& vn, const VRegister& vm, int vm_index)
Unsigned long multiply-add.
void umlal(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Unsigned long multiply-add (second part).
void umlal2(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Unsigned long multiply-add by scalar element (second part).
void umlal2(const VRegister& vd, const VRegister& vn, const VRegister& vm, int vm_index)
Unsigned long multiply-sub by scalar element.
void umlsl(const VRegister& vd, const VRegister& vn, const VRegister& vm, int vm_index)
Unsigned long multiply-sub.
void umlsl(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Unsigned long multiply-sub (second part).
void umlsl2(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Unsigned long multiply-sub by scalar element (second part).
void umlsl2(const VRegister& vd, const VRegister& vn, const VRegister& vm, int vm_index)
Unsigned move vector element to general-purpose register.
void umov(const Register& rd, const VRegister& vn, int vn_index)
Unsigned long multiply by scalar element.
void umull(const VRegister& vd, const VRegister& vn, const VRegister& vm, int vm_index)
Unsigned long multiply long.
void umull(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Unsigned long multiply (second part).
void umull2(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Unsigned long multiply by scalar element (second part).
void umull2(const VRegister& vd, const VRegister& vn, const VRegister& vm, int vm_index)
Unsigned saturating add.
void uqadd(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Unsigned saturating rounding shift left by register.
void uqrshl(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Unsigned saturating rounding shift right narrow by immediate.
void uqrshrn(const VRegister& vd, const VRegister& vn, int shift)
Unsigned saturating rounding shift right narrow by immediate (second part).
void uqrshrn2(const VRegister& vd, const VRegister& vn, int shift)
Unsigned saturating shift left by immediate.
void uqshl(const VRegister& vd, const VRegister& vn, int shift)
Unsigned saturating shift left by register.
void uqshl(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Unsigned saturating shift right narrow by immediate.
void uqshrn(const VRegister& vd, const VRegister& vn, int shift)
Unsigned saturating shift right narrow by immediate (second part).
void uqshrn2(const VRegister& vd, const VRegister& vn, int shift)
Unsigned saturating subtract.
void uqsub(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Unsigned saturating extract narrow.
void uqxtn(const VRegister& vd, const VRegister& vn)
Unsigned saturating extract narrow (second part).
void uqxtn2(const VRegister& vd, const VRegister& vn)
Unsigned reciprocal estimate.
void urecpe(const VRegister& vd, const VRegister& vn)
Unsigned rounding halving add.
void urhadd(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Unsigned rounding shift left by register.
void urshl(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Unsigned rounding shift right by immediate.
void urshr(const VRegister& vd, const VRegister& vn, int shift)
Unsigned reciprocal square root estimate.
void ursqrte(const VRegister& vd, const VRegister& vn)
Unsigned rounding shift right by immediate and accumulate.
void ursra(const VRegister& vd, const VRegister& vn, int shift)
Unsigned shift left by register.
void ushl(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Unsigned shift left long by immediate.
void ushll(const VRegister& vd, const VRegister& vn, int shift)
Unsigned shift left long by immediate (second part).
void ushll2(const VRegister& vd, const VRegister& vn, int shift)
Unsigned shift right by immediate.
void ushr(const VRegister& vd, const VRegister& vn, int shift)
Unsigned saturating accumulate of signed value.
void usqadd(const VRegister& vd, const VRegister& vn)
Unsigned shift right by immediate and accumulate.
void usra(const VRegister& vd, const VRegister& vn, int shift)
Unsigned subtract long.
void usubl(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Unsigned subtract long (second part).
void usubl2(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Unsigned subtract wide.
void usubw(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Unsigned subtract wide (second part).
void usubw2(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Unsigned extend long.
void uxtl(const VRegister& vd, const VRegister& vn)
Unsigned extend long (second part).
void uxtl2(const VRegister& vd, const VRegister& vn)
Unzip vectors (primary).
void uzp1(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Unzip vectors (secondary).
void uzp2(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Extract narrow.
void xtn(const VRegister& vd, const VRegister& vn)
Extract narrow (second part).
void xtn2(const VRegister& vd, const VRegister& vn)
Zip vectors (primary).
void zip1(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Zip vectors (secondary).
void zip2(const VRegister& vd, const VRegister& vn, const VRegister& vm)
Bind a label to the current PC.
void bind(Label* label)
Emit data in the instruction stream.
void dc(T data)
Emit 32 bits of data into the instruction stream.
void dc32(uint32_t data)
Emit 64 bits of data into the instruction stream.
void dc64(uint64_t data)
Emit raw instructions into the instruction stream.
void dci(Instr raw_inst)
Place a literal at the current PC.
void place(RawLiteral* literal)