#![cfg_attr(rustfmt, rustfmt_skip)]
use crate::*;
#[derive(Debug, Clone)]
pub struct Options {
pub version: Version,
pub extensions: Extensions,
pub av: bool,
pub r9_use: R9Use,
pub sl: bool,
pub fp: bool,
pub ip: bool,
pub ual: bool,
}
impl Default for Options {
fn default() -> Self {
Self {
version: Version::default(),
extensions: Extensions::default(),
av: false,
r9_use: R9Use::default(),
sl: false,
fp: false,
ip: false,
ual: true,
}
}
}
#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Copy, Hash)]
pub enum Version {
#[cfg(feature = "v4")]
V4,
#[cfg(feature = "v4t")]
V4T,
#[cfg(feature = "v5t")]
V5T,
#[cfg(feature = "v5te")]
V5Te,
#[cfg(feature = "v5tej")]
V5Tej,
#[cfg(feature = "v6")]
V6,
#[cfg(feature = "v6k")]
V6K,
}
impl Version {
pub const fn bit(self) -> u8 {
1 << self as u8
}
}
#[derive(Debug, PartialEq, Eq, Clone, Copy)]
pub struct Versions(u8);
impl Versions {
pub const fn none() -> Self {
Self(0)
}
pub const fn all() -> Self {
Self(u8::MAX)
}
pub fn with(self, version: Version) -> Self {
Self(self.0 | version.bit())
}
pub const fn of(versions: &[Version]) -> Self {
let mut mask = 0;
let mut i = 0;
loop {
if i >= versions.len() {
break;
}
mask |= versions[i].bit();
i += 1;
}
Self(mask)
}
pub fn has(self, version: Version) -> bool {
(self.0 & version.bit()) != 0
}
}
impl Default for Version {
#[allow(unreachable_code)]
fn default() -> Self {
#[cfg(feature = "v6k")] return Self::V6K;
#[cfg(feature = "v6")] return Self::V6;
#[cfg(feature = "v5tej")] return Self::V5Tej;
#[cfg(feature = "v5te")] return Self::V5Te;
#[cfg(feature = "v5t")] return Self::V5T;
#[cfg(feature = "v4t")] return Self::V4T;
#[cfg(feature = "v4")] return Self::V4;
}
}
#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Copy, Hash)]
pub enum Extension {
#[cfg(feature = "vfp_v2")]
VfpV2,
}
impl Extension {
pub const fn bit(self) -> u8 {
1 << self as u8
}
}
#[derive(Debug, PartialEq, Eq, Clone, Copy)]
pub struct Extensions(u8);
impl Extensions {
pub const fn none() -> Self {
Self(0)
}
pub const fn all() -> Self {
Self(u8::MAX)
}
pub fn with(self, extension: Extension) -> Self {
Self(self.0 | extension.bit())
}
pub const fn of(extensions: &[Extension]) -> Self {
let mut mask = 0;
let mut i = 0;
loop {
if i >= extensions.len() {
break;
}
mask |= extensions[i].bit();
i += 1;
}
Self(mask)
}
pub fn has_all(self, extensions: Extensions) -> bool {
(self.0 & extensions.0) == self.0
}
}
impl Default for Extensions {
fn default() -> Self {
Self::all()
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum R9Use {
#[default]
R9,
Sb,
Tr,
}
#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Copy, Hash)]
pub struct BranchTarget {
pub addr: u32,
}
#[cfg(
any(
feature = "v5t",
feature = "v5te",
feature = "v5tej",
feature = "v6",
feature = "v6k"
)
)]
#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Copy, Hash)]
pub enum BlxTarget {
Direct(BranchTarget),
Indirect(Reg),
}
#[repr(u8)]
#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Copy, Hash)]
pub enum Cond {
Eq,
Ne,
Hs,
Lo,
Mi,
Pl,
Vs,
Vc,
Hi,
Ls,
Ge,
Lt,
Gt,
Le,
Al,
}
#[repr(u8)]
#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Copy, Hash)]
pub enum Reg {
R0,
R1,
R2,
R3,
R4,
R5,
R6,
R7,
R8,
R9,
R10,
R11,
R12,
Sp,
Lr,
Pc,
}
#[cfg(feature = "arm")]
#[repr(u8)]
#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Copy, Hash)]
pub enum StatusReg {
Cpsr,
Spsr,
}
#[cfg(feature = "arm")]
#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Copy, Hash)]
pub struct StatusFields {
pub reg: StatusReg,
pub c: bool,
pub x: bool,
pub s: bool,
pub f: bool,
}
#[cfg(feature = "arm")]
#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Copy, Hash)]
pub enum MsrOp2 {
Imm(u32),
Reg(Reg),
}
#[repr(u8)]
#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Copy, Hash)]
pub enum ShiftOp {
Lsl,
Lsr,
Asr,
Ror,
}
#[cfg(feature = "arm")]
#[repr(u8)]
#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Copy, Hash)]
pub enum Coproc {
P0,
P1,
P2,
P3,
P4,
P5,
P6,
P7,
P8,
P9,
P10,
P11,
P12,
P13,
P14,
P15,
}
#[cfg(feature = "arm")]
#[repr(u8)]
#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Copy, Hash)]
pub enum CoReg {
C0,
C1,
C2,
C3,
C4,
C5,
C6,
C7,
C8,
C9,
C10,
C11,
C12,
C13,
C14,
C15,
}
#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Copy, Hash)]
pub enum Op2 {
Imm(u32),
ShiftReg(ShiftReg),
ShiftImm(ShiftImm),
}
#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Copy, Hash)]
pub struct ShiftReg {
pub rm: Reg,
pub shift_op: ShiftOp,
pub rs: Reg,
}
#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Copy, Hash)]
pub struct ShiftImm {
pub rm: Reg,
pub shift_op: ShiftOp,
pub imm: u32,
}
#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Copy, Hash)]
pub enum Op2Shift {
Imm(u32),
Reg(Reg),
}
#[cfg(any(feature = "v6", feature = "v6k"))]
#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Copy, Hash)]
pub enum CpsEffect {
SetMode,
Ie,
Id,
}
#[cfg(any(feature = "v6", feature = "v6k"))]
#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Copy, Hash)]
pub struct AifFlags {
pub a: bool,
pub i: bool,
pub f: bool,
}
#[cfg(feature = "arm")]
#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Copy, Hash)]
pub enum AddrLdcStc {
Pre {
rn: Reg,
offset: i32,
writeback: bool,
},
Post {
rn: Reg,
offset: i32,
},
Unidx {
rn: Reg,
option: u32,
},
}
#[repr(u8)]
#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Copy, Hash)]
pub enum LdmStmMode {
Da,
Ia,
Db,
Ib,
}
#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Copy, Hash)]
pub enum AddrLdrStr {
Pre {
rn: Reg,
offset: LdrStrOffset,
writeback: bool,
},
Post(AddrLdrStrPost),
}
#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Copy, Hash)]
pub struct AddrLdrStrPost {
pub rn: Reg,
pub offset: LdrStrOffset,
}
#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Copy, Hash)]
pub enum LdrStrOffset {
Imm(i32),
Reg {
subtract: bool,
rm: Reg,
shift_op: ShiftOp,
imm: u32,
},
}
#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Copy, Hash)]
pub enum AddrMiscLoad {
Pre {
rn: Reg,
offset: MiscLoadOffset,
writeback: bool,
},
Post {
rn: Reg,
offset: MiscLoadOffset,
},
}
#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Copy, Hash)]
pub enum MiscLoadOffset {
Imm(i32),
Reg {
subtract: bool,
rm: Reg,
},
}
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
#[repr(u8)]
#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Copy, Hash)]
pub enum SrsRfeMode {
Da,
Ia,
Db,
Ib,
}
#[cfg(any(feature = "v6", feature = "v6k"))]
#[repr(u8)]
#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Copy, Hash)]
pub enum Endianness {
Le,
Be,
}
#[cfg(
all(
feature = "arm",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
#[repr(u8)]
#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Copy, Hash)]
pub enum RegSide {
Bottom,
Top,
}
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
#[repr(u8)]
#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Copy, Hash)]
pub enum Sreg {
S0,
S1,
S2,
S3,
S4,
S5,
S6,
S7,
S8,
S9,
S10,
S11,
S12,
S13,
S14,
S15,
S16,
S17,
S18,
S19,
S20,
S21,
S22,
S23,
S24,
S25,
S26,
S27,
S28,
S29,
S30,
S31,
}
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
#[repr(u8)]
#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Copy, Hash)]
pub enum Dreg {
D0,
D1,
D2,
D3,
D4,
D5,
D6,
D7,
D8,
D9,
D10,
D11,
D12,
D13,
D14,
D15,
D16,
D17,
D18,
D19,
D20,
D21,
D22,
D23,
D24,
D25,
D26,
D27,
D28,
D29,
D30,
D31,
}
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Copy, Hash)]
pub enum VcmpF32Op2 {
Zero,
Reg(Sreg),
}
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Copy, Hash)]
pub enum VcmpF64Op2 {
Zero,
Reg(Dreg),
}
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Copy, Hash)]
pub struct DregIndex {
pub dreg: Dreg,
pub index: u32,
}
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Copy, Hash)]
pub struct Fpscr {}
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Copy, Hash)]
pub enum VldmVstmMode {
Ia,
Db,
}
#[repr(u16)]
#[derive(Debug, Clone, PartialOrd, Ord, PartialEq, Eq, Hash)]
pub enum Ins {
Adc { s: bool, thumb: bool, cond: Cond, rd: Reg, rn: Reg, op2: Op2 },
Add { s: bool, thumb: bool, cond: Cond, rd: Reg, rn: Reg, op2: Op2 },
And { s: bool, thumb: bool, cond: Cond, rd: Reg, rn: Reg, op2: Op2 },
Asr { s: bool, thumb: bool, cond: Cond, rd: Reg, rn: Reg, op2: Op2Shift },
B { cond: Cond, target: BranchTarget },
Bic { s: bool, thumb: bool, cond: Cond, rd: Reg, rn: Reg, op2: Op2 },
#[cfg(
any(
feature = "v5t",
feature = "v5te",
feature = "v5tej",
feature = "v6",
feature = "v6k"
)
)]
Bkpt { imm: u32 },
Bl { cond: Cond, target: BranchTarget },
#[cfg(
any(
feature = "v5t",
feature = "v5te",
feature = "v5tej",
feature = "v6",
feature = "v6k"
)
)]
Blx { cond: Cond, target: BlxTarget },
#[cfg(
any(
feature = "v4t",
feature = "v5t",
feature = "v5te",
feature = "v5tej",
feature = "v6",
feature = "v6k"
)
)]
Bx { cond: Cond, rm: Reg },
#[cfg(all(feature = "arm", any(feature = "v5tej", feature = "v6", feature = "v6k")))]
Bxj { cond: Cond, rm: Reg },
#[cfg(feature = "arm")]
Cdp {
cond: Cond,
coproc: Coproc,
opc1: u32,
crd: CoReg,
crn: CoReg,
crm: CoReg,
opc2: u32,
},
#[cfg(
all(
feature = "arm",
any(
feature = "v5t",
feature = "v5te",
feature = "v5tej",
feature = "v6",
feature = "v6k"
)
)
)]
Cdp2 { coproc: Coproc, opc1: u32, crd: CoReg, crn: CoReg, crm: CoReg, opc2: u32 },
#[cfg(all(feature = "arm", feature = "v6k"))]
Clrex {},
#[cfg(
all(
feature = "arm",
any(
feature = "v5t",
feature = "v5te",
feature = "v5tej",
feature = "v6",
feature = "v6k"
)
)
)]
Clz { cond: Cond, rd: Reg, rm: Reg },
Cmn { cond: Cond, rn: Reg, op2: Op2 },
Cmp { cond: Cond, rn: Reg, op2: Op2 },
#[cfg(any(feature = "v6", feature = "v6k"))]
Cps { effect: CpsEffect, aif: AifFlags, mode: u32 },
#[cfg(feature = "arm")]
Csdb { cond: Cond },
#[cfg(all(feature = "arm", feature = "v6k"))]
Dbg { cond: Cond, option: u32 },
Eor { s: bool, thumb: bool, cond: Cond, rd: Reg, rn: Reg, op2: Op2 },
#[cfg(feature = "arm")]
Ldc { l: bool, cond: Cond, coproc: Coproc, crd: CoReg, dest: AddrLdcStc },
#[cfg(
all(
feature = "arm",
any(
feature = "v5t",
feature = "v5te",
feature = "v5tej",
feature = "v6",
feature = "v6k"
)
)
)]
Ldc2 { l: bool, coproc: Coproc, crd: CoReg, dest: AddrLdcStc },
Ldm {
mode: LdmStmMode,
cond: Cond,
rn: Reg,
writeback: bool,
regs: RegList,
user_mode: bool,
},
Ldr { cond: Cond, rd: Reg, addr: AddrLdrStr },
Ldrb { cond: Cond, rd: Reg, addr: AddrLdrStr },
#[cfg(feature = "arm")]
Ldrbt { cond: Cond, rd: Reg, addr: AddrLdrStrPost },
#[cfg(
all(
feature = "arm",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
Ldrd { cond: Cond, rd: Reg, rd2: Reg, addr: AddrMiscLoad },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Ldrex { cond: Cond, rd: Reg, rn: Reg },
#[cfg(all(feature = "arm", feature = "v6k"))]
Ldrexb { cond: Cond, rd: Reg, rn: Reg },
#[cfg(all(feature = "arm", feature = "v6k"))]
Ldrexd { cond: Cond, rd: Reg, rd2: Reg, rn: Reg },
#[cfg(all(feature = "arm", feature = "v6k"))]
Ldrexh { cond: Cond, rd: Reg, rn: Reg },
Ldrh { cond: Cond, rd: Reg, addr: AddrMiscLoad },
Ldrsb { cond: Cond, rd: Reg, addr: AddrMiscLoad },
Ldrsh { cond: Cond, rd: Reg, addr: AddrMiscLoad },
#[cfg(feature = "arm")]
Ldrt { cond: Cond, rd: Reg, addr: AddrLdrStrPost },
Lsl { s: bool, thumb: bool, cond: Cond, rd: Reg, rn: Reg, op2: Op2Shift },
Lsr { s: bool, thumb: bool, cond: Cond, rd: Reg, rn: Reg, op2: Op2Shift },
#[cfg(feature = "arm")]
Mcr {
cond: Cond,
coproc: Coproc,
opc1: u32,
rd: Reg,
crn: CoReg,
crm: CoReg,
opc2: u32,
},
#[cfg(
all(
feature = "arm",
any(
feature = "v5t",
feature = "v5te",
feature = "v5tej",
feature = "v6",
feature = "v6k"
)
)
)]
Mcr2 { coproc: Coproc, opc1: u32, rd: Reg, crn: CoReg, crm: CoReg, opc2: u32 },
#[cfg(
all(
feature = "arm",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
Mcrr { cond: Cond, coproc: Coproc, opc: u32, rd: Reg, rd2: Reg, crm: CoReg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Mcrr2 { coproc: Coproc, opc: u32, rd: Reg, rd2: Reg, crm: CoReg },
#[cfg(feature = "arm")]
Mla { s: bool, cond: Cond, rd: Reg, rn: Reg, rm: Reg, ra: Reg },
Mov { s: bool, thumb: bool, cond: Cond, rd: Reg, op2: Op2 },
#[cfg(feature = "arm")]
Mrc {
cond: Cond,
coproc: Coproc,
opc1: u32,
rd: Reg,
crn: CoReg,
crm: CoReg,
opc2: u32,
},
#[cfg(
all(
feature = "arm",
any(
feature = "v5t",
feature = "v5te",
feature = "v5tej",
feature = "v6",
feature = "v6k"
)
)
)]
Mrc2 { coproc: Coproc, opc1: u32, rd: Reg, crn: CoReg, crm: CoReg, opc2: u32 },
#[cfg(
all(
feature = "arm",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
Mrrc { cond: Cond, coproc: Coproc, opc: u32, rd: Reg, rd2: Reg, crm: CoReg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Mrrc2 { coproc: Coproc, opc: u32, rd: Reg, rd2: Reg, crm: CoReg },
#[cfg(feature = "arm")]
Mrs { cond: Cond, rd: Reg, status_reg: StatusReg },
#[cfg(feature = "arm")]
Msr { cond: Cond, status_fields: StatusFields, op2: MsrOp2 },
Mul { s: bool, thumb: bool, cond: Cond, rd: Reg, rn: Reg, rm: Reg },
Mvn { s: bool, thumb: bool, cond: Cond, rd: Reg, op2: Op2 },
#[cfg(feature = "thumb")]
Neg { rd: Reg, rm: Reg },
#[cfg(all(feature = "arm", feature = "v6k"))]
Nop { cond: Cond },
Orr { s: bool, thumb: bool, cond: Cond, rd: Reg, rn: Reg, op2: Op2 },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Pkhbt { cond: Cond, rd: Reg, rn: Reg, rm: Reg, shift_op: ShiftOp, shift: u32 },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Pkhtb { cond: Cond, rd: Reg, rn: Reg, rm: Reg, shift_op: ShiftOp, shift: u32 },
#[cfg(
all(
feature = "arm",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
Pld { addr: AddrLdrStr },
Pop { cond: Cond, regs: RegList },
Push { cond: Cond, regs: RegList },
#[cfg(
all(
feature = "arm",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
Qadd { cond: Cond, rd: Reg, rm: Reg, rn: Reg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Qadd16 { cond: Cond, rd: Reg, rn: Reg, rm: Reg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Qadd8 { cond: Cond, rd: Reg, rn: Reg, rm: Reg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Qasx { cond: Cond, rd: Reg, rn: Reg, rm: Reg },
#[cfg(
all(
feature = "arm",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
Qdadd { cond: Cond, rd: Reg, rm: Reg, rn: Reg },
#[cfg(
all(
feature = "arm",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
Qdsub { cond: Cond, rd: Reg, rm: Reg, rn: Reg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Qsax { cond: Cond, rd: Reg, rn: Reg, rm: Reg },
#[cfg(
all(
feature = "arm",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
Qsub { cond: Cond, rd: Reg, rm: Reg, rn: Reg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Qsub16 { cond: Cond, rd: Reg, rn: Reg, rm: Reg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Qsub8 { cond: Cond, rd: Reg, rn: Reg, rm: Reg },
#[cfg(any(feature = "v6", feature = "v6k"))]
Rev { cond: Cond, rd: Reg, rm: Reg },
#[cfg(any(feature = "v6", feature = "v6k"))]
Rev16 { cond: Cond, rd: Reg, rm: Reg },
#[cfg(any(feature = "v6", feature = "v6k"))]
Revsh { cond: Cond, rd: Reg, rm: Reg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Rfe { addr_mode: SrsRfeMode, rn: Reg, writeback: bool },
Ror { s: bool, thumb: bool, cond: Cond, rd: Reg, rn: Reg, op2: Op2Shift },
#[cfg(feature = "arm")]
Rrx { s: bool, cond: Cond, rd: Reg, rm: Reg },
Rsb { s: bool, cond: Cond, rd: Reg, rn: Reg, op2: Op2 },
#[cfg(feature = "arm")]
Rsc { s: bool, cond: Cond, rd: Reg, rn: Reg, op2: Op2 },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Sadd16 { cond: Cond, rd: Reg, rn: Reg, rm: Reg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Sadd8 { cond: Cond, rd: Reg, rn: Reg, rm: Reg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Sasx { cond: Cond, rd: Reg, rn: Reg, rm: Reg },
Sbc { s: bool, thumb: bool, cond: Cond, rd: Reg, rn: Reg, op2: Op2 },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Sel { cond: Cond, rd: Reg, rn: Reg, rm: Reg },
#[cfg(any(feature = "v6", feature = "v6k"))]
Setend { endian: Endianness },
#[cfg(all(feature = "arm", feature = "v6k"))]
Sev { cond: Cond },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Shadd16 { cond: Cond, rd: Reg, rn: Reg, rm: Reg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Shadd8 { cond: Cond, rd: Reg, rn: Reg, rm: Reg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Shasx { cond: Cond, rd: Reg, rn: Reg, rm: Reg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Shsax { cond: Cond, rd: Reg, rn: Reg, rm: Reg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Shsub16 { cond: Cond, rd: Reg, rn: Reg, rm: Reg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Shsub8 { cond: Cond, rd: Reg, rn: Reg, rm: Reg },
#[cfg(
all(
feature = "arm",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
Smla {
cond: Cond,
rd: Reg,
rn: Reg,
rn_side: RegSide,
rm: Reg,
rm_side: RegSide,
ra: Reg,
},
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Smlad { cond: Cond, rd: Reg, rn: Reg, rm: Reg, swap_rm: bool, ra: Reg },
#[cfg(feature = "arm")]
Smlal { s: bool, cond: Cond, rd_lo: Reg, rd_hi: Reg, rn: Reg, rm: Reg },
#[cfg(
all(
feature = "arm",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
SmlalHalf {
cond: Cond,
rd_lo: Reg,
rd_hi: Reg,
rn: Reg,
rn_side: RegSide,
rm: Reg,
rm_side: RegSide,
},
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Smlald { cond: Cond, rd_lo: Reg, rd_hi: Reg, rn: Reg, rm: Reg, swap_rm: bool },
#[cfg(
all(
feature = "arm",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
Smlaw { cond: Cond, rd: Reg, rn: Reg, rm: Reg, rm_side: RegSide, ra: Reg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Smlsd { cond: Cond, rd: Reg, rn: Reg, rm: Reg, swap_rm: bool, ra: Reg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Smlsld { cond: Cond, rd_lo: Reg, rd_hi: Reg, rn: Reg, rm: Reg, swap_rm: bool },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Smmla { round: bool, cond: Cond, rd: Reg, rn: Reg, rm: Reg, ra: Reg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Smmls { round: bool, cond: Cond, rd: Reg, rn: Reg, rm: Reg, ra: Reg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Smmul { round: bool, cond: Cond, rd: Reg, rn: Reg, rm: Reg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Smuad { cond: Cond, rd: Reg, rn: Reg, rm: Reg, swap_rm: bool },
#[cfg(
all(
feature = "arm",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
Smul { cond: Cond, rd: Reg, rn: Reg, rn_side: RegSide, rm: Reg, rm_side: RegSide },
#[cfg(feature = "arm")]
Smull { s: bool, cond: Cond, rd_lo: Reg, rd_hi: Reg, rn: Reg, rm: Reg },
#[cfg(
all(
feature = "arm",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
Smulw { cond: Cond, rd: Reg, rn: Reg, rm: Reg, rm_side: RegSide },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Smusd { cond: Cond, rd: Reg, rn: Reg, rm: Reg, swap_rm: bool },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Srs { addr_mode: SrsRfeMode, rn: Reg, writeback: bool, mode: u32 },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Ssat { cond: Cond, rd: Reg, imm: u32, op2: ShiftImm },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Ssat16 { cond: Cond, rd: Reg, imm: u32, rn: Reg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Ssax { cond: Cond, rd: Reg, rn: Reg, rm: Reg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Ssub16 { cond: Cond, rd: Reg, rn: Reg, rm: Reg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Ssub8 { cond: Cond, rd: Reg, rn: Reg, rm: Reg },
#[cfg(feature = "arm")]
Stc { l: bool, cond: Cond, coproc: Coproc, crd: CoReg, dest: AddrLdcStc },
#[cfg(
all(
feature = "arm",
any(
feature = "v5t",
feature = "v5te",
feature = "v5tej",
feature = "v6",
feature = "v6k"
)
)
)]
Stc2 { l: bool, coproc: Coproc, crd: CoReg, dest: AddrLdcStc },
Stm {
mode: LdmStmMode,
cond: Cond,
rn: Reg,
writeback: bool,
regs: RegList,
user_mode: bool,
},
Str { cond: Cond, rd: Reg, addr: AddrLdrStr },
Strb { cond: Cond, rd: Reg, addr: AddrLdrStr },
#[cfg(feature = "arm")]
Strbt { cond: Cond, rd: Reg, addr: AddrLdrStrPost },
#[cfg(
all(
feature = "arm",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
Strd { cond: Cond, rd: Reg, rd2: Reg, addr: AddrMiscLoad },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Strex { cond: Cond, rd: Reg, rm: Reg, rn: Reg },
#[cfg(all(feature = "arm", feature = "v6k"))]
Strexb { cond: Cond, rd: Reg, rm: Reg, rn: Reg },
#[cfg(all(feature = "arm", feature = "v6k"))]
Strexd { cond: Cond, rd: Reg, rm: Reg, rm2: Reg, rn: Reg },
#[cfg(all(feature = "arm", feature = "v6k"))]
Strexh { cond: Cond, rd: Reg, rm: Reg, rn: Reg },
Strh { cond: Cond, rd: Reg, addr: AddrMiscLoad },
#[cfg(feature = "arm")]
Strt { cond: Cond, rd: Reg, addr: AddrLdrStrPost },
Sub { s: bool, thumb: bool, cond: Cond, rd: Reg, rn: Reg, op2: Op2 },
Svc { cond: Cond, imm: u32 },
#[cfg(feature = "arm")]
Swp { cond: Cond, rd: Reg, rd2: Reg, rn: Reg },
#[cfg(feature = "arm")]
Swpb { cond: Cond, rd: Reg, rd2: Reg, rn: Reg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Sxtab { cond: Cond, rd: Reg, rn: Reg, rm: Reg, rotate: u32 },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Sxtab16 { cond: Cond, rd: Reg, rn: Reg, rm: Reg, rotate: u32 },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Sxtah { cond: Cond, rd: Reg, rn: Reg, rm: Reg, rotate: u32 },
#[cfg(any(feature = "v6", feature = "v6k"))]
Sxtb { cond: Cond, rd: Reg, rm: Reg, rotate: u32 },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Sxtb16 { cond: Cond, rd: Reg, rm: Reg, rotate: u32 },
#[cfg(any(feature = "v6", feature = "v6k"))]
Sxth { cond: Cond, rd: Reg, rm: Reg, rotate: u32 },
#[cfg(feature = "arm")]
Teq { cond: Cond, rn: Reg, op2: Op2 },
Tst { cond: Cond, rn: Reg, op2: Op2 },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Uadd16 { cond: Cond, rd: Reg, rn: Reg, rm: Reg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Uadd8 { cond: Cond, rd: Reg, rn: Reg, rm: Reg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Uasx { cond: Cond, rd: Reg, rn: Reg, rm: Reg },
#[cfg(
any(
feature = "v4t",
feature = "v5t",
feature = "v5te",
feature = "v5tej",
feature = "v6",
feature = "v6k"
)
)]
Udf { imm: u32 },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Uhadd16 { cond: Cond, rd: Reg, rn: Reg, rm: Reg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Uhadd8 { cond: Cond, rd: Reg, rn: Reg, rm: Reg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Uhasx { cond: Cond, rd: Reg, rn: Reg, rm: Reg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Uhsax { cond: Cond, rd: Reg, rn: Reg, rm: Reg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Uhsub16 { cond: Cond, rd: Reg, rn: Reg, rm: Reg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Uhsub8 { cond: Cond, rd: Reg, rn: Reg, rm: Reg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Umaal { cond: Cond, rd_lo: Reg, rd_hi: Reg, rn: Reg, rm: Reg },
#[cfg(feature = "arm")]
Umlal { s: bool, cond: Cond, rd_lo: Reg, rd_hi: Reg, rn: Reg, rm: Reg },
#[cfg(feature = "arm")]
Umull { s: bool, cond: Cond, rd_lo: Reg, rd_hi: Reg, rn: Reg, rm: Reg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Uqadd16 { cond: Cond, rd: Reg, rn: Reg, rm: Reg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Uqadd8 { cond: Cond, rd: Reg, rn: Reg, rm: Reg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Uqasx { cond: Cond, rd: Reg, rn: Reg, rm: Reg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Uqsax { cond: Cond, rd: Reg, rn: Reg, rm: Reg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Uqsub16 { cond: Cond, rd: Reg, rn: Reg, rm: Reg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Uqsub8 { cond: Cond, rd: Reg, rn: Reg, rm: Reg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Usad8 { cond: Cond, rd: Reg, rn: Reg, rm: Reg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Usada8 { cond: Cond, rd: Reg, rn: Reg, rm: Reg, ra: Reg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Usat { cond: Cond, rd: Reg, imm: u32, op2: ShiftImm },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Usat16 { cond: Cond, rd: Reg, imm: u32, rn: Reg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Usax { cond: Cond, rd: Reg, rn: Reg, rm: Reg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Usub16 { cond: Cond, rd: Reg, rn: Reg, rm: Reg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Usub8 { cond: Cond, rd: Reg, rn: Reg, rm: Reg },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Uxtab { cond: Cond, rd: Reg, rn: Reg, rm: Reg, rotate: u32 },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Uxtab16 { cond: Cond, rd: Reg, rn: Reg, rm: Reg, rotate: u32 },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Uxtah { cond: Cond, rd: Reg, rn: Reg, rm: Reg, rotate: u32 },
#[cfg(any(feature = "v6", feature = "v6k"))]
Uxtb { cond: Cond, rd: Reg, rm: Reg, rotate: u32 },
#[cfg(all(feature = "arm", any(feature = "v6", feature = "v6k")))]
Uxtb16 { cond: Cond, rd: Reg, rm: Reg, rotate: u32 },
#[cfg(any(feature = "v6", feature = "v6k"))]
Uxth { cond: Cond, rd: Reg, rm: Reg, rotate: u32 },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VabsF32 { cond: Cond, sd: Sreg, sm: Sreg },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VabsF64 { cond: Cond, dd: Dreg, dm: Dreg },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VaddF32 { cond: Cond, sd: Sreg, sn: Sreg, sm: Sreg },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VaddF64 { cond: Cond, dd: Dreg, dn: Dreg, dm: Dreg },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VcmpF32 { nan_exc: bool, cond: Cond, sd: Sreg, op2: VcmpF32Op2 },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VcmpF64 { nan_exc: bool, cond: Cond, dd: Dreg, op2: VcmpF64Op2 },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VcvtF32F64 { cond: Cond, sd: Sreg, dm: Dreg },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VcvtF32S32 { cond: Cond, sd: Sreg, sm: Sreg },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VcvtF32U32 { cond: Cond, sd: Sreg, sm: Sreg },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VcvtF64F32 { cond: Cond, dd: Dreg, sm: Sreg },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VcvtF64S32 { cond: Cond, dd: Dreg, sm: Sreg },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VcvtF64U32 { cond: Cond, dd: Dreg, sm: Sreg },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VcvtS32F32 { round_zero: bool, cond: Cond, sd: Sreg, sm: Sreg },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VcvtS32F64 { round_zero: bool, cond: Cond, sd: Sreg, dm: Dreg },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VcvtU32F32 { round_zero: bool, cond: Cond, sd: Sreg, sm: Sreg },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VcvtU32F64 { round_zero: bool, cond: Cond, sd: Sreg, dm: Dreg },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VdivF32 { cond: Cond, sd: Sreg, sn: Sreg, sm: Sreg },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VdivF64 { cond: Cond, dd: Dreg, dn: Dreg, dm: Dreg },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VldmF32 { mode: VldmVstmMode, cond: Cond, rn: Reg, writeback: bool, regs: SregList },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VldmF64 { mode: VldmVstmMode, cond: Cond, rn: Reg, writeback: bool, regs: DregList },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VldrF32 { cond: Cond, sd: Sreg, addr: AddrLdrStr },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VldrF64 { cond: Cond, dd: Dreg, addr: AddrLdrStr },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VmlaF32 { cond: Cond, sd: Sreg, sn: Sreg, sm: Sreg },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VmlaF64 { cond: Cond, dd: Dreg, dn: Dreg, dm: Dreg },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VmlsF32 { cond: Cond, sd: Sreg, sn: Sreg, sm: Sreg },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VmlsF64 { cond: Cond, dd: Dreg, dn: Dreg, dm: Dreg },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
Vmov32Reg { cond: Cond, dd: DregIndex, rt: Reg },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VmovF32 { cond: Cond, sd: Sreg, sm: Sreg },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VmovF32Reg { cond: Cond, sn: Sreg, rt: Reg },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VmovF64 { cond: Cond, dd: Dreg, dm: Dreg },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VmovReg32 { cond: Cond, rt: Reg, dn: DregIndex },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VmovRegF32 { cond: Cond, rt: Reg, sn: Sreg },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VmovRegF32Dual { cond: Cond, rt: Reg, rt2: Reg, sm: Sreg, sm2: Sreg },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VmovF32RegDual { cond: Cond, sm: Sreg, sm2: Sreg, rt: Reg, rt2: Reg },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VmovRegF64 { cond: Cond, rt: Reg, rt2: Reg, dm: Dreg },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VmovF64Reg { cond: Cond, dm: Dreg, rt: Reg, rt2: Reg },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
Vmrs { cond: Cond, rd: Reg, fpscr: Fpscr },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
Vmsr { cond: Cond, fpscr: Fpscr, rd: Reg },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VmulF32 { cond: Cond, sd: Sreg, sn: Sreg, sm: Sreg },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VmulF64 { cond: Cond, dd: Dreg, dn: Dreg, dm: Dreg },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VnegF32 { cond: Cond, sd: Sreg, sm: Sreg },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VnegF64 { cond: Cond, dd: Dreg, dm: Dreg },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VnmlaF32 { cond: Cond, sd: Sreg, sn: Sreg, sm: Sreg },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VnmlaF64 { cond: Cond, dd: Dreg, dn: Dreg, dm: Dreg },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VnmlsF32 { cond: Cond, sd: Sreg, sn: Sreg, sm: Sreg },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VnmlsF64 { cond: Cond, dd: Dreg, dn: Dreg, dm: Dreg },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VnmulF32 { cond: Cond, sd: Sreg, sn: Sreg, sm: Sreg },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VnmulF64 { cond: Cond, dd: Dreg, dn: Dreg, dm: Dreg },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VpopF32 { cond: Cond, regs: SregList },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VpopF64 { cond: Cond, regs: DregList },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VpushF32 { cond: Cond, regs: SregList },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VpushF64 { cond: Cond, regs: DregList },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VsqrtF32 { cond: Cond, sd: Sreg, sm: Sreg },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VsqrtF64 { cond: Cond, dd: Dreg, dm: Dreg },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VstmF32 { mode: VldmVstmMode, cond: Cond, rn: Reg, writeback: bool, regs: SregList },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VstmF64 { mode: VldmVstmMode, cond: Cond, rn: Reg, writeback: bool, regs: DregList },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VstrF32 { cond: Cond, sd: Sreg, addr: AddrLdrStr },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VstrF64 { cond: Cond, dd: Dreg, addr: AddrLdrStr },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VsubF32 { cond: Cond, sd: Sreg, sn: Sreg, sm: Sreg },
#[cfg(
all(
feature = "arm",
feature = "vfp_v2",
any(feature = "v5te", feature = "v5tej", feature = "v6", feature = "v6k")
)
)]
VsubF64 { cond: Cond, dd: Dreg, dn: Dreg, dm: Dreg },
#[cfg(all(feature = "arm", feature = "v6k"))]
Wfe { cond: Cond },
#[cfg(all(feature = "arm", feature = "v6k"))]
Wfi { cond: Cond },
#[cfg(all(feature = "arm", feature = "v6k"))]
Yield { cond: Cond },
Word(u32),
HalfWord(u16),
Byte(u8),
Illegal,
}