Skip to main content

asmkit/aarch64/
instdb.rs

1/* Copyright (c) 2008-2024 The AsmJit Authors
2
3   This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.
4
5   Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:
6
7   The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
8   Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
9   This notice may not be removed or altered from any source distribution.
10*/
11
12use super::assembler::*;
13use super::operands::*;
14use crate::core::operand::RegType;
15
16pub const W: u32 = 0x1;
17pub const X: u32 = 0x2;
18pub const WX: u32 = W | X;
19
20pub const ZR: u32 = Gp::ID_ZR as u32;
21pub const SP: u32 = Gp::ID_SP as u32;
22
23#[derive(Debug, Clone, Copy, PartialEq, Eq)]
24pub enum RwInfo {
25    R,
26    RW,
27    RX,
28    RRW,
29    RWX,
30    W,
31    WRW,
32    WRX,
33    WRRW,
34    WRRX,
35    WW,
36    X,
37    XRX,
38    XXRRX,
39
40    LDn,
41    STn,
42}
43
44pub const RWI_R: u16 = RwInfo::R as u16;
45pub const RWI_RW: u16 = RwInfo::RW as u16;
46pub const RWI_RX: u16 = RwInfo::RX as u16;
47pub const RWI_RRW: u16 = RwInfo::RRW as u16;
48pub const RWI_RWX: u16 = RwInfo::RWX as u16;
49pub const RWI_W: u16 = RwInfo::W as u16;
50pub const RWI_WRW: u16 = RwInfo::WRW as u16;
51pub const RWI_WRX: u16 = RwInfo::WRX as u16;
52pub const RWI_WRRW: u16 = RwInfo::WRRW as u16;
53pub const RWI_WRRX: u16 = RwInfo::WRRX as u16;
54pub const RWI_WW: u16 = RwInfo::WW as u16;
55pub const RWI_X: u16 = RwInfo::X as u16;
56pub const RWI_XRX: u16 = RwInfo::XRX as u16;
57pub const RWI_XXRRX: u16 = RwInfo::XXRRX as u16;
58pub const RWI_LDN: u16 = RwInfo::LDn as u16;
59pub const RWI_STN: u16 = RwInfo::STn as u16;
60
61impl RwInfo {
62    pub const SPECIAL_START: Self = Self::LDn;
63}
64
65#[derive(Debug, Clone, Copy, PartialEq, Eq)]
66pub enum InstElementType {
67    None = VecElementType::None as isize,
68    B = VecElementType::B as isize,
69    H = VecElementType::H as isize,
70    S = VecElementType::S as isize,
71    D = VecElementType::D as isize,
72    _2H = VecElementType::H2 as isize,
73    _4B = VecElementType::B4 as isize,
74}
75
76#[derive(Debug, Clone, Copy, PartialEq, Eq)]
77pub enum GpType {
78    X,
79    W,
80    XSp,
81}
82
83#[derive(Debug, Clone, Copy, PartialEq, Eq)]
84#[repr(u32)]
85pub enum OpSignature {
86    GpW = Reg::signature_of(RegType::Gp32).bits,
87    GpX = Reg::signature_of(RegType::Gp64).bits,
88    B = Reg::signature_of(RegType::Vec8).bits,
89    H = Reg::signature_of(RegType::Vec16).bits,
90    S = Reg::signature_of(RegType::Vec32).bits,
91    D = Reg::signature_of(RegType::Vec64).bits,
92    Q = Reg::signature_of(RegType::Vec128).bits,
93    V8B = Self::D as u32 | Vec::SIGNATURE_ELEMENT_B,
94    V4H = Self::D as u32 | Vec::SIGNATURE_ELEMENT_H,
95    V2S = Self::D as u32 | Vec::SIGNATURE_ELEMENT_S,
96
97    V16B = Self::Q as u32 | Vec::SIGNATURE_ELEMENT_B,
98    V8H = Self::Q as u32 | Vec::SIGNATURE_ELEMENT_H,
99    V4S = Self::Q as u32 | Vec::SIGNATURE_ELEMENT_S,
100    V2D = Self::Q as u32 | Vec::SIGNATURE_ELEMENT_D,
101}
102
103#[derive(Debug, Clone, Copy, PartialEq, Eq)]
104pub enum HFConv {
105    N,
106    None,
107    A,
108    B,
109    C,
110    D,
111    Count,
112}
113
114pub enum VOType {
115    VB,
116    VBH,
117    VBH4S,
118    VBHS,
119    VBHSD2,
120    VHS,
121    VS,
122
123    VB8H4,
124    VB8H4S2,
125    VB8D1,
126    VH4S2,
127
128    VB16,
129    VB16H8,
130    VB16H8S4,
131    VB16D2,
132    VH8S4,
133    VS4,
134    VD2,
135
136    SVBHS,
137    SVB8H4S2,
138    SVHS,
139    VAny,
140    SVAny,
141
142    Count,
143}
144
145#[derive(Debug, Clone, Copy, PartialEq, Eq)]
146#[repr(u8)]
147pub enum Encoding {
148    None = 0,
149    BaseAddSub,
150    BaseAdr,
151    BaseAtDcIcTlbi,
152    BaseAtomicCasp,
153    BaseAtomicOp,
154    BaseAtomicSt,
155    BaseBfc,
156    BaseBfi,
157    BaseBfm,
158    BaseBfx,
159    BaseBranchCmp,
160    BaseBranchReg,
161    BaseBranchRel,
162    BaseBranchTst,
163    BaseCCmp,
164    BaseCInc,
165    BaseCSel,
166    BaseCSet,
167    BaseCmpCmn,
168    BaseExtend,
169    BaseExtract,
170    BaseLdSt,
171    BaseLdpStp,
172    BaseLdxp,
173    BaseLogical,
174    BaseMinMax,
175    BaseMov,
176    BaseMovKNZ,
177    BaseMrs,
178    BaseMsr,
179    BaseMvnNeg,
180    BaseOp,
181    BaseOpImm,
182    BaseOpX16,
183    BasePrfm,
184    BaseR,
185    BaseRMNoImm,
186    BaseRMSImm10,
187    BaseRMSImm9,
188    BaseRR,
189    BaseRRII,
190    BaseRRR,
191    BaseRRRR,
192    BaseRev,
193    BaseShift,
194    BaseStx,
195    BaseStxp,
196    BaseSys,
197    BaseTst,
198    FSimdPair,
199    FSimdSV,
200    FSimdVV,
201    FSimdVVV,
202    FSimdVVVV,
203    FSimdVVVe,
204    ISimdPair,
205    ISimdSV,
206    ISimdVV,
207    ISimdVVV,
208    ISimdVVVI,
209    ISimdVVVV,
210    ISimdVVVVx,
211    ISimdVVVe,
212    ISimdVVVx,
213    ISimdVVx,
214    ISimdWWV,
215    SimdBicOrr,
216    SimdCmp,
217    SimdDot,
218    SimdDup,
219    SimdFcadd,
220    SimdFccmpFccmpe,
221    SimdFcm,
222    SimdFcmla,
223    SimdFcmpFcmpe,
224    SimdFcsel,
225    SimdFcvt,
226    SimdFcvtLN,
227    SimdFcvtSV,
228    SimdFmlal,
229    SimdFmov,
230    SimdIns,
231    SimdLdNStN,
232    SimdLdSt,
233    SimdLdpStp,
234    SimdLdurStur,
235    SimdMov,
236    SimdMoviMvni,
237    SimdShift,
238    SimdShiftES,
239    SimdSm3tt,
240    SimdSmovUmov,
241    SimdSxtlUxtl,
242    SimdTblTbx,
243
244    Count,
245}
246
247impl TryFrom<u8> for Encoding {
248    type Error = ();
249
250    fn try_from(value: u8) -> Result<Self, Self::Error> {
251        unsafe {
252            if value >= Self::Count as u8 {
253                Err(())
254            } else {
255                Ok(::core::mem::transmute(value))
256            }
257        }
258    }
259}
260
261const HF_C: u32 = HFConv::C as u32;
262
263macro_rules! impl_const_new_zero {
264    ($name:ident { $($field:ident : $ty:ty),* $(,)? }) => {
265        impl $name {
266            pub const fn new($($field: $ty),*) -> Self {
267                Self {
268                    $($field),*
269                }
270            }
271        }
272    };
273}
274
275#[derive(Debug, Clone, Copy, Default)]
276pub struct BaseOp {
277    pub opcode: u32,
278}
279
280#[derive(Debug, Clone, Copy, Default)]
281pub struct BaseOpX16 {
282    pub opcode: u32,
283}
284
285#[derive(Debug, Clone, Copy, Default)]
286pub struct BaseOpImm {
287    pub opcode: u32,
288    pub imm_bits: u16,
289    pub imm_offset: u16,
290}
291
292#[derive(Debug, Clone, Copy, Default)]
293pub struct BaseR {
294    pub opcode: u32,
295    pub reg_type: u32,
296    pub reg_hi_id: u32,
297    pub r_shift: u32,
298}
299
300#[derive(Debug, Clone, Copy, Default)]
301pub struct BaseRR {
302    pub opcode: u32,
303    pub a_type: u32,
304    pub a_hi_id: u32,
305    pub a_shift: u32,
306    pub b_type: u32,
307    pub b_hi_id: u32,
308    pub b_shift: u32,
309    pub uniform: u32,
310}
311
312#[derive(Debug, Clone, Copy, Default)]
313pub struct BaseRRR {
314    opcode: u32,
315    pub a_type: u32,
316    pub a_hi_id: u32,
317    pub b_type: u32,
318    pub b_hi_id: u32,
319    pub c_type: u32,
320    pub c_hi_id: u32,
321    pub uniform: u32,
322}
323
324impl BaseRRR {
325    pub const fn opcode(&self) -> u32 {
326        self.opcode << 10
327    }
328}
329
330#[derive(Debug, Clone, Copy, Default)]
331pub struct BaseRRRR {
332    opcode: u32,
333    pub a_type: u32,
334    pub a_hi_id: u32,
335    pub b_type: u32,
336    pub b_hi_id: u32,
337    pub c_type: u32,
338    pub c_hi_id: u32,
339    pub d_type: u32,
340    pub d_hi_id: u32,
341    pub uniform: u32,
342}
343
344impl BaseRRRR {
345    pub const fn opcode(&self) -> u32 {
346        self.opcode << 10
347    }
348}
349
350#[derive(Debug, Clone, Copy, Default)]
351pub struct BaseRRII {
352    opcode: u32,
353    pub a_type: u32,
354    pub a_hi_id: u32,
355    pub b_type: u32,
356    pub b_hi_id: u32,
357    pub a_imm_size: u32,
358    pub a_imm_discard_lsb: u32,
359    pub a_imm_offset: u32,
360    pub b_imm_size: u32,
361    pub b_imm_discard_lsb: u32,
362    pub b_imm_offset: u32,
363}
364
365impl BaseRRII {
366    pub const fn opcode(&self) -> u32 {
367        self.opcode << 10
368    }
369}
370
371#[derive(Debug, Clone, Copy, Default)]
372pub struct BaseAtDcIcTlbi {
373    pub imm_verify_mask: u32,
374    pub imm_verify_data: u32,
375    pub mandatory_reg: u32,
376}
377
378#[derive(Debug, Clone, Copy, Default)]
379pub struct BaseAdcSbc {
380    pub opcode: u32,
381}
382
383#[derive(Debug, Clone, Copy, Default)]
384pub struct BaseMinMax {
385    pub register_op: u32,
386    pub immediate_op: u32,
387}
388
389#[derive(Debug, Clone, Copy, Default)]
390pub struct BaseAddSub {
391    pub shifted_op: u32,
392    pub extended_op: u32,
393    pub immediate_op: u32,
394}
395
396#[derive(Debug, Clone, Copy, Default)]
397pub struct BaseAdr {
398    opcode: u32,
399    pub offset_type: u8,
400}
401
402impl BaseAdr {
403    pub const fn opcode(&self) -> u32 {
404        self.opcode << 10
405    }
406}
407
408#[derive(Debug, Clone, Copy, Default)]
409pub struct BaseBfm {
410    pub opcode: u32,
411}
412
413#[derive(Debug, Clone, Copy, Default)]
414pub struct BaseCmpCmn {
415    pub shifted_op: u32,
416    pub extended_op: u32,
417    pub immediate_op: u32,
418}
419
420#[derive(Debug, Clone, Copy, Default)]
421pub struct BaseExtend {
422    opcode: u32,
423    pub reg_type: u32,
424    pub u: u32,
425}
426
427impl BaseExtend {
428    pub const fn opcode(&self) -> u32 {
429        self.opcode << 10
430    }
431}
432
433#[derive(Debug, Clone, Copy, Default)]
434pub struct BaseLogical {
435    pub shifted_op: u32,
436    pub immediate_op: u32,
437    pub negate_imm: u32,
438}
439
440#[derive(Debug, Clone, Copy, Default)]
441pub struct BaseMvnNeg {
442    pub opcode: u32,
443}
444
445#[derive(Debug, Clone, Copy, Default)]
446pub struct BaseShift {
447    pub register_op: u32,
448    pub immediate_op: u32,
449    pub ror: u32,
450}
451
452impl BaseShift {
453    pub const fn register_op(&self) -> u32 {
454        self.register_op << 10
455    }
456
457    pub const fn immediate_op(&self) -> u32 {
458        self.immediate_op << 10
459    }
460}
461
462#[derive(Debug, Clone, Copy, Default)]
463pub struct BaseTst {
464    pub shifted_op: u32,
465    pub immediate_op: u32,
466}
467
468#[derive(Debug, Clone, Copy, Default)]
469pub struct BaseRMNoImm {
470    opcode: u32,
471    pub reg_type: u32,
472    pub reg_hi_id: u32,
473    pub x_offset: u32,
474}
475
476impl BaseRMNoImm {
477    pub const fn opcode(&self) -> u32 {
478        self.opcode << 10
479    }
480}
481
482#[derive(Debug, Clone, Copy, Default)]
483pub struct BaseRMSImm9 {
484    pub offset_op: u32,
485    pub pre_post_op: u32,
486    pub reg_type: u32,
487    pub reg_hi_id: u32,
488    pub x_offset: u32,
489    pub imm_shift: u32,
490}
491
492impl BaseRMSImm9 {
493    pub const fn offset_op(&self) -> u32 {
494        self.offset_op << 10
495    }
496
497    pub const fn pre_post_op(&self) -> u32 {
498        self.pre_post_op << 10
499    }
500}
501
502#[derive(Debug, Clone, Copy, Default)]
503pub struct BaseRMSImm10 {
504    opcode: u32,
505    pub reg_type: u32,
506    pub reg_hi_id: u32,
507    pub x_offset: u32,
508    pub imm_shift: u32,
509}
510
511impl BaseRMSImm10 {
512    pub const fn opcode(&self) -> u32 {
513        self.opcode << 10
514    }
515}
516
517#[derive(Debug, Clone, Copy, Default)]
518pub struct BasePrfm {
519    pub register_op: u32,
520    pub s_offset_op: u32,
521    pub u_offset_op: u32,
522    pub literal_op: u32,
523}
524
525#[derive(Debug, Clone, Copy, Default)]
526pub struct BaseLdSt {
527    pub u_offset_op: u32,
528    pub pre_post_op: u32,
529    pub register_op: u32,
530    pub literal_op: u32,
531    pub reg_type: u32,
532    pub x_offset: u32,
533    pub u_offset_shift: u32,
534    pub u_alt_inst_id: u32,
535}
536
537#[derive(Debug, Clone, Copy, Default)]
538pub struct BaseLdpStp {
539    pub offset_op: u32,
540    pub pre_post_op: u32,
541    pub reg_type: u32,
542    pub x_offset: u32,
543    pub offset_shift: u32,
544}
545
546#[derive(Debug, Clone, Copy, Default)]
547pub struct BaseStx {
548    opcode: u32,
549    pub reg_type: u32,
550    pub x_offset: u32,
551}
552
553impl BaseStx {
554    pub const fn opcode(&self) -> u32 {
555        self.opcode << 10
556    }
557}
558
559#[derive(Debug, Clone, Copy, Default)]
560pub struct BaseLdxp {
561    opcode: u32,
562    pub reg_type: u32,
563    pub x_offset: u32,
564}
565
566impl BaseLdxp {
567    pub const fn opcode(&self) -> u32 {
568        self.opcode << 10
569    }
570}
571
572#[derive(Debug, Clone, Copy, Default)]
573pub struct BaseStxp {
574    opcode: u32,
575    pub reg_type: u32,
576    pub x_offset: u32,
577}
578
579impl BaseStxp {
580    pub const fn opcode(&self) -> u32 {
581        self.opcode << 10
582    }
583}
584
585#[derive(Debug, Clone, Copy, Default)]
586pub struct BaseAtomicOp {
587    opcode: u32,
588    pub reg_type: u32,
589    pub x_offset: u32,
590    pub zr_reg: u32,
591}
592
593impl BaseAtomicOp {
594    pub const fn opcode(&self) -> u32 {
595        self.opcode << 10
596    }
597}
598
599#[derive(Debug, Clone, Copy, Default)]
600pub struct BaseAtomicSt {
601    opcode: u32,
602    pub reg_type: u32,
603    pub x_offset: u32,
604}
605
606impl BaseAtomicSt {
607    pub const fn opcode(&self) -> u32 {
608        self.opcode << 10
609    }
610}
611
612#[derive(Debug, Clone, Copy, Default)]
613pub struct BaseAtomicCasp {
614    opcode: u32,
615    pub reg_type: u32,
616    pub x_offset: u32,
617}
618
619impl BaseAtomicCasp {
620    pub const fn opcode(&self) -> u32 {
621        self.opcode << 10
622    }
623}
624
625pub type BaseBranchReg = BaseOp;
626pub type BaseBranchRel = BaseOp;
627pub type BaseBranchCmp = BaseOp;
628pub type BaseBranchTst = BaseOp;
629pub type BaseExtract = BaseOp;
630pub type BaseBfc = BaseOp;
631pub type BaseBfi = BaseOp;
632pub type BaseBfx = BaseOp;
633pub type BaseCCmp = BaseOp;
634pub type BaseCInc = BaseOp;
635pub type BaseCSet = BaseOp;
636pub type BaseCSel = BaseOp;
637pub type BaseMovKNZ = BaseOp;
638pub type BaseMull = BaseOp;
639
640#[derive(Debug, Clone, Copy, Default)]
641pub struct FSimdGeneric {
642    scalar_op: u32,
643    scalar_hf: u32,
644    vector_op: u32,
645    vector_hf: u32,
646}
647
648impl FSimdGeneric {
649    pub const fn scalar_op(&self) -> u32 {
650        self.scalar_op << 10
651    }
652
653    pub const fn vector_op(&self) -> u32 {
654        self.vector_op << 10
655    }
656
657    pub const fn scalar_hf(&self) -> u32 {
658        self.scalar_hf
659    }
660
661    pub const fn vector_hf(&self) -> u32 {
662        self.vector_hf
663    }
664}
665
666pub type FSimdVV = FSimdGeneric;
667pub type FSimdVVV = FSimdGeneric;
668pub type FSimdVVVV = FSimdGeneric;
669
670#[derive(Debug, Clone, Copy, Default)]
671pub struct FSimdSV {
672    pub opcode: u32,
673}
674
675#[derive(Debug, Clone, Copy, Default)]
676pub struct FSimdVVVe {
677    scalar_op: u32,
678    scalar_hf: u32,
679    vector_op: u32,
680    element_op: u32,
681}
682
683impl FSimdVVVe {
684    pub const fn scalar_op(&self) -> u32 {
685        self.scalar_op << 10
686    }
687
688    pub const fn scalar_hf(&self) -> u32 {
689        self.scalar_hf
690    }
691
692    pub const fn vector_op(&self) -> u32 {
693        self.vector_op << 10
694    }
695
696    pub const fn vector_hf(&self) -> u32 {
697        HF_C
698    }
699
700    pub const fn element_scalar_op(&self) -> u32 {
701        (self.element_op << 10) | (0x5 << 28)
702    }
703
704    pub const fn element_vector_op(&self) -> u32 {
705        self.element_op << 10
706    }
707}
708
709#[derive(Debug, Clone, Copy, Default)]
710pub struct SimdFcadd {
711    opcode: u32,
712}
713
714impl SimdFcadd {
715    pub const fn opcode(&self) -> u32 {
716        self.opcode << 10
717    }
718}
719
720#[derive(Debug, Clone, Copy, Default)]
721pub struct SimdFcmla {
722    regular_op: u32,
723    element_op: u32,
724}
725
726impl SimdFcmla {
727    pub const fn regular_op(&self) -> u32 {
728        self.regular_op << 10
729    }
730
731    pub const fn element_op(&self) -> u32 {
732        self.element_op << 10
733    }
734}
735
736#[derive(Debug, Clone, Copy, Default)]
737pub struct SimdFccmpFccmpe {
738    opcode: u32,
739}
740
741impl SimdFccmpFccmpe {
742    pub const fn opcode(&self) -> u32 {
743        self.opcode
744    }
745}
746
747#[derive(Debug, Clone, Copy, Default)]
748pub struct SimdFcm {
749    register_op: u32,
750    register_hf: u32,
751    zero_op: u32,
752}
753
754impl SimdFcm {
755    pub const fn has_register_op(&self) -> bool {
756        self.register_op != 0
757    }
758
759    pub const fn has_zero_op(&self) -> bool {
760        self.zero_op != 0
761    }
762
763    pub const fn register_scalar_op(&self) -> u32 {
764        (self.register_op << 10) | (0x5 << 28)
765    }
766
767    pub const fn register_vector_op(&self) -> u32 {
768        self.register_op << 10
769    }
770
771    pub const fn register_scalar_hf(&self) -> u32 {
772        self.register_hf
773    }
774
775    pub const fn register_vector_hf(&self) -> u32 {
776        self.register_hf
777    }
778
779    pub const fn zero_scalar_op(&self) -> u32 {
780        (self.zero_op << 10) | (0x5 << 28)
781    }
782
783    pub const fn zero_vector_op(&self) -> u32 {
784        self.zero_op << 10
785    }
786}
787
788#[derive(Debug, Clone, Copy, Default)]
789pub struct SimdFcmpFcmpe {
790    opcode: u32,
791}
792
793impl SimdFcmpFcmpe {
794    pub const fn opcode(&self) -> u32 {
795        self.opcode
796    }
797}
798
799#[derive(Debug, Clone, Copy, Default)]
800pub struct SimdFcvtLN {
801    opcode: u32,
802    is_cvtxn: u32,
803    has_scalar: u32,
804}
805
806impl SimdFcvtLN {
807    pub const fn scalar_op(&self) -> u32 {
808        (self.opcode << 10) | (0x5 << 28)
809    }
810
811    pub const fn vector_op(&self) -> u32 {
812        self.opcode << 10
813    }
814
815    pub const fn is_cvtxn(&self) -> u32 {
816        self.is_cvtxn
817    }
818
819    pub const fn has_scalar(&self) -> u32 {
820        self.has_scalar
821    }
822}
823
824#[derive(Debug, Clone, Copy, Default)]
825pub struct SimdFcvtSV {
826    vector_int_op: u32,
827    vector_fp_op: u32,
828    general_op: u32,
829    is_float_to_int: u32,
830}
831
832impl SimdFcvtSV {
833    pub const fn scalar_int_op(&self) -> u32 {
834        (self.vector_int_op << 10) | (0x5 << 28)
835    }
836
837    pub const fn vector_int_op(&self) -> u32 {
838        self.vector_int_op << 10
839    }
840
841    pub const fn scalar_fp_op(&self) -> u32 {
842        (self.vector_fp_op << 10) | (0x5 << 28)
843    }
844
845    pub const fn vector_fp_op(&self) -> u32 {
846        self.vector_fp_op << 10
847    }
848
849    pub const fn general_op(&self) -> u32 {
850        self.general_op << 10
851    }
852
853    pub const fn is_float_to_int(&self) -> u32 {
854        self.is_float_to_int
855    }
856
857    pub const fn is_fixed_point(&self) -> bool {
858        self.vector_fp_op != 0
859    }
860}
861
862#[derive(Debug, Clone, Copy, Default)]
863pub struct SimdFmlal {
864    pub vector_op: u32,
865    pub element_op: u32,
866    pub optional_q: u8,
867    pub ta: u8,
868    pub tb: u8,
869    pub t_element: u8,
870}
871
872impl SimdFmlal {
873    pub const fn vector_op(&self) -> u32 {
874        self.vector_op << 10
875    }
876
877    pub const fn element_op(&self) -> u32 {
878        self.element_op << 10
879    }
880
881    pub const fn optional_q(&self) -> u32 {
882        self.optional_q as u32
883    }
884}
885
886#[derive(Debug, Clone, Copy, Default)]
887pub struct FSimdPair {
888    pub scalar_op: u32,
889    pub vector_op: u32,
890}
891
892impl FSimdPair {
893    pub const fn scalar_op(&self) -> u32 {
894        self.scalar_op << 10
895    }
896
897    pub const fn vector_op(&self) -> u32 {
898        self.vector_op << 10
899    }
900}
901
902#[derive(Debug, Clone, Copy, Default)]
903pub struct ISimdVV {
904    opcode: u32,
905    pub vec_op_type: u32,
906}
907
908impl ISimdVV {
909    pub const fn opcode(&self) -> u32 {
910        self.opcode << 10
911    }
912}
913
914#[derive(Debug, Clone, Copy, Default)]
915pub struct ISimdVVx {
916    opcode: u32,
917    pub op0_signature: u32,
918    pub op1_signature: u32,
919}
920
921impl ISimdVVx {
922    pub const fn opcode(&self) -> u32 {
923        self.opcode << 10
924    }
925}
926
927#[derive(Debug, Clone, Copy, Default)]
928pub struct ISimdSV {
929    opcode: u32,
930    pub vec_op_type: u32,
931}
932
933impl ISimdSV {
934    pub const fn opcode(&self) -> u32 {
935        self.opcode << 10
936    }
937}
938
939#[derive(Debug, Clone, Copy, Default)]
940pub struct ISimdVVV {
941    opcode: u32,
942    pub vec_op_type: u32,
943}
944
945impl ISimdVVV {
946    pub const fn opcode(&self) -> u32 {
947        self.opcode << 10
948    }
949}
950
951#[derive(Debug, Clone, Copy, Default)]
952pub struct ISimdVVVx {
953    opcode: u32,
954    pub op0_signature: u32,
955    pub op1_signature: u32,
956    pub op2_signature: u32,
957}
958
959impl ISimdVVVx {
960    pub const fn opcode(&self) -> u32 {
961        self.opcode << 10
962    }
963}
964
965#[derive(Debug, Clone, Copy, Default)]
966pub struct ISimdWWV {
967    opcode: u32,
968    pub vec_op_type: u32,
969}
970
971impl ISimdWWV {
972    pub const fn opcode(&self) -> u32 {
973        self.opcode << 10
974    }
975}
976
977#[derive(Debug, Clone, Copy, Default)]
978pub struct ISimdVVVe {
979    pub regular_op: u32,
980    pub regular_vec_type: u32,
981    pub element_op: u32,
982    pub element_vec_type: u32,
983}
984
985#[derive(Debug, Clone, Copy, Default)]
986pub struct ISimdVVVI {
987    opcode: u32,
988    pub vec_op_type: u32,
989    pub imm_size: u32,
990    pub imm_shift: u32,
991    pub imm64_has_one_bit_less: u32,
992}
993
994impl ISimdVVVI {
995    pub const fn opcode(&self) -> u32 {
996        self.opcode << 10
997    }
998}
999
1000#[derive(Debug, Clone, Copy, Default)]
1001pub struct ISimdVVVV {
1002    pub opcode: u32,
1003    pub vec_op_type: u32,
1004}
1005
1006#[derive(Debug, Clone, Copy, Default)]
1007pub struct ISimdVVVVx {
1008    pub opcode: u32,
1009    pub op0_signature: u32,
1010    pub op1_signature: u32,
1011    pub op2_signature: u32,
1012    pub op3_signature: u32,
1013}
1014
1015#[derive(Debug, Clone, Copy, Default)]
1016pub struct SimdBicOrr {
1017    pub register_op: u32,
1018    pub immediate_op: u32,
1019}
1020
1021#[derive(Debug, Clone, Copy, Default)]
1022pub struct SimdCmp {
1023    pub register_op: u32,
1024    pub zero_op: u32,
1025    pub vec_op_type: u32,
1026}
1027
1028#[derive(Debug, Clone, Copy, Default)]
1029pub struct SimdDot {
1030    pub vector_op: u32,
1031    pub element_op: u32,
1032    pub ta: u8,
1033    pub tb: u8,
1034    pub t_element: u8,
1035}
1036
1037#[derive(Debug, Clone, Copy, Default)]
1038pub struct SimdMoviMvni {
1039    pub opcode: u32,
1040    pub inverted: u32,
1041}
1042
1043#[derive(Debug, Clone, Copy, Default)]
1044pub struct SimdLdSt {
1045    pub u_offset_op: u32,
1046    pub pre_post_op: u32,
1047    pub register_op: u32,
1048    pub literal_op: u32,
1049    pub u_alt_inst_id: u32,
1050}
1051
1052#[derive(Debug, Clone, Copy, Default)]
1053pub struct SimdLdNStN {
1054    pub single_op: u32,
1055    pub multiple_op: u32,
1056    pub n: u32,
1057    pub replicate: u32,
1058}
1059
1060#[derive(Debug, Clone, Copy, Default)]
1061pub struct SimdLdpStp {
1062    pub offset_op: u32,
1063    pub pre_post_op: u32,
1064}
1065
1066#[derive(Debug, Clone, Copy, Default)]
1067pub struct SimdLdurStur {
1068    pub opcode: u32,
1069}
1070
1071#[derive(Debug, Clone, Copy, Default)]
1072pub struct ISimdPair {
1073    pub opcode2: u32,
1074    pub opcode3: u32,
1075    pub op_type3: u32,
1076}
1077
1078#[derive(Debug, Clone, Copy, Default)]
1079pub struct SimdShift {
1080    pub register_op: u32,
1081    pub immediate_op: u32,
1082    pub inverted_imm: u32,
1083    pub vec_op_type: u32,
1084}
1085
1086#[derive(Debug, Clone, Copy, Default)]
1087pub struct SimdShiftES {
1088    pub opcode: u32,
1089    pub vec_op_type: u32,
1090}
1091
1092#[derive(Debug, Clone, Copy, Default)]
1093pub struct SimdSm3tt {
1094    pub opcode: u32,
1095}
1096
1097#[derive(Debug, Clone, Copy, Default)]
1098pub struct SimdSmovUmov {
1099    pub opcode: u32,
1100    pub vec_op_type: u32,
1101    pub is_signed: u32,
1102}
1103
1104#[derive(Debug, Clone, Copy, Default)]
1105pub struct SimdSxtlUxtl {
1106    pub opcode: u32,
1107    pub vec_op_type: u32,
1108}
1109
1110#[derive(Debug, Clone, Copy, Default)]
1111pub struct SimdTblTbx {
1112    pub opcode: u32,
1113}
1114
1115impl_const_new_zero!(BaseOp { opcode: u32 });
1116impl_const_new_zero!(BaseOpX16 { opcode: u32 });
1117impl_const_new_zero!(BaseOpImm {
1118    opcode: u32,
1119    imm_bits: u16,
1120    imm_offset: u16
1121});
1122impl_const_new_zero!(BaseR {
1123    opcode: u32,
1124    reg_type: u32,
1125    reg_hi_id: u32,
1126    r_shift: u32
1127});
1128impl_const_new_zero!(BaseRR {
1129    opcode: u32,
1130    a_type: u32,
1131    a_hi_id: u32,
1132    a_shift: u32,
1133    b_type: u32,
1134    b_hi_id: u32,
1135    b_shift: u32,
1136    uniform: u32,
1137});
1138impl_const_new_zero!(BaseRRR {
1139    opcode: u32,
1140    a_type: u32,
1141    a_hi_id: u32,
1142    b_type: u32,
1143    b_hi_id: u32,
1144    c_type: u32,
1145    c_hi_id: u32,
1146    uniform: u32,
1147});
1148impl_const_new_zero!(BaseRRRR {
1149    opcode: u32,
1150    a_type: u32,
1151    a_hi_id: u32,
1152    b_type: u32,
1153    b_hi_id: u32,
1154    c_type: u32,
1155    c_hi_id: u32,
1156    d_type: u32,
1157    d_hi_id: u32,
1158    uniform: u32,
1159});
1160impl_const_new_zero!(BaseRRII {
1161    opcode: u32,
1162    a_type: u32,
1163    a_hi_id: u32,
1164    b_type: u32,
1165    b_hi_id: u32,
1166    a_imm_size: u32,
1167    a_imm_discard_lsb: u32,
1168    a_imm_offset: u32,
1169    b_imm_size: u32,
1170    b_imm_discard_lsb: u32,
1171    b_imm_offset: u32,
1172});
1173impl_const_new_zero!(BaseAtDcIcTlbi {
1174    imm_verify_mask: u32,
1175    imm_verify_data: u32,
1176    mandatory_reg: u32,
1177});
1178impl_const_new_zero!(BaseAdcSbc { opcode: u32 });
1179impl_const_new_zero!(BaseMinMax {
1180    register_op: u32,
1181    immediate_op: u32
1182});
1183impl_const_new_zero!(BaseAddSub {
1184    shifted_op: u32,
1185    extended_op: u32,
1186    immediate_op: u32
1187});
1188impl_const_new_zero!(BaseAdr {
1189    opcode: u32,
1190    offset_type: u8
1191});
1192impl_const_new_zero!(BaseBfm { opcode: u32 });
1193impl_const_new_zero!(BaseCmpCmn {
1194    shifted_op: u32,
1195    extended_op: u32,
1196    immediate_op: u32
1197});
1198impl_const_new_zero!(BaseExtend {
1199    opcode: u32,
1200    reg_type: u32,
1201    u: u32
1202});
1203impl_const_new_zero!(BaseLogical {
1204    shifted_op: u32,
1205    immediate_op: u32,
1206    negate_imm: u32
1207});
1208impl_const_new_zero!(BaseMvnNeg { opcode: u32 });
1209impl_const_new_zero!(BaseShift {
1210    register_op: u32,
1211    immediate_op: u32,
1212    ror: u32
1213});
1214impl_const_new_zero!(BaseTst {
1215    shifted_op: u32,
1216    immediate_op: u32
1217});
1218impl_const_new_zero!(BaseRMNoImm {
1219    opcode: u32,
1220    reg_type: u32,
1221    reg_hi_id: u32,
1222    x_offset: u32
1223});
1224impl_const_new_zero!(BaseRMSImm9 {
1225    offset_op: u32,
1226    pre_post_op: u32,
1227    reg_type: u32,
1228    reg_hi_id: u32,
1229    x_offset: u32,
1230    imm_shift: u32,
1231});
1232impl_const_new_zero!(BaseRMSImm10 {
1233    opcode: u32,
1234    reg_type: u32,
1235    reg_hi_id: u32,
1236    x_offset: u32,
1237    imm_shift: u32,
1238});
1239impl_const_new_zero!(BasePrfm {
1240    register_op: u32,
1241    s_offset_op: u32,
1242    u_offset_op: u32,
1243    literal_op: u32
1244});
1245impl_const_new_zero!(BaseLdSt {
1246    u_offset_op: u32,
1247    pre_post_op: u32,
1248    register_op: u32,
1249    literal_op: u32,
1250    reg_type: u32,
1251    x_offset: u32,
1252    u_offset_shift: u32,
1253    u_alt_inst_id: u32,
1254});
1255impl_const_new_zero!(BaseLdpStp {
1256    offset_op: u32,
1257    pre_post_op: u32,
1258    reg_type: u32,
1259    x_offset: u32,
1260    offset_shift: u32,
1261});
1262impl_const_new_zero!(BaseStx {
1263    opcode: u32,
1264    reg_type: u32,
1265    x_offset: u32
1266});
1267impl_const_new_zero!(BaseLdxp {
1268    opcode: u32,
1269    reg_type: u32,
1270    x_offset: u32
1271});
1272impl_const_new_zero!(BaseStxp {
1273    opcode: u32,
1274    reg_type: u32,
1275    x_offset: u32
1276});
1277impl_const_new_zero!(BaseAtomicOp {
1278    opcode: u32,
1279    reg_type: u32,
1280    x_offset: u32,
1281    zr_reg: u32
1282});
1283impl_const_new_zero!(BaseAtomicSt {
1284    opcode: u32,
1285    reg_type: u32,
1286    x_offset: u32
1287});
1288impl_const_new_zero!(BaseAtomicCasp {
1289    opcode: u32,
1290    reg_type: u32,
1291    x_offset: u32
1292});
1293
1294impl_const_new_zero!(FSimdGeneric {
1295    scalar_op: u32,
1296    scalar_hf: u32,
1297    vector_op: u32,
1298    vector_hf: u32
1299});
1300impl_const_new_zero!(FSimdSV { opcode: u32 });
1301impl_const_new_zero!(FSimdVVVe {
1302    scalar_op: u32,
1303    scalar_hf: u32,
1304    vector_op: u32,
1305    element_op: u32
1306});
1307impl_const_new_zero!(SimdFcadd { opcode: u32 });
1308impl_const_new_zero!(SimdFcmla {
1309    regular_op: u32,
1310    element_op: u32
1311});
1312impl_const_new_zero!(SimdFccmpFccmpe { opcode: u32 });
1313impl_const_new_zero!(SimdFcm {
1314    register_op: u32,
1315    register_hf: u32,
1316    zero_op: u32
1317});
1318impl_const_new_zero!(SimdFcmpFcmpe { opcode: u32 });
1319impl_const_new_zero!(SimdFcvtLN {
1320    opcode: u32,
1321    is_cvtxn: u32,
1322    has_scalar: u32
1323});
1324impl_const_new_zero!(SimdFcvtSV {
1325    vector_int_op: u32,
1326    vector_fp_op: u32,
1327    general_op: u32,
1328    is_float_to_int: u32,
1329});
1330impl_const_new_zero!(SimdFmlal {
1331    vector_op: u32,
1332    element_op: u32,
1333    optional_q: u8,
1334    ta: u8,
1335    tb: u8,
1336    t_element: u8,
1337});
1338impl_const_new_zero!(FSimdPair {
1339    scalar_op: u32,
1340    vector_op: u32
1341});
1342
1343impl_const_new_zero!(ISimdVV {
1344    opcode: u32,
1345    vec_op_type: u32
1346});
1347impl_const_new_zero!(ISimdVVx {
1348    opcode: u32,
1349    op0_signature: u32,
1350    op1_signature: u32
1351});
1352impl_const_new_zero!(ISimdSV {
1353    opcode: u32,
1354    vec_op_type: u32
1355});
1356impl_const_new_zero!(ISimdVVV {
1357    opcode: u32,
1358    vec_op_type: u32
1359});
1360impl_const_new_zero!(ISimdVVVx {
1361    opcode: u32,
1362    op0_signature: u32,
1363    op1_signature: u32,
1364    op2_signature: u32,
1365});
1366impl_const_new_zero!(ISimdWWV {
1367    opcode: u32,
1368    vec_op_type: u32
1369});
1370impl_const_new_zero!(ISimdVVVe {
1371    regular_op: u32,
1372    regular_vec_type: u32,
1373    element_op: u32,
1374    element_vec_type: u32,
1375});
1376impl_const_new_zero!(ISimdVVVI {
1377    opcode: u32,
1378    vec_op_type: u32,
1379    imm_size: u32,
1380    imm_shift: u32,
1381    imm64_has_one_bit_less: u32,
1382});
1383impl_const_new_zero!(ISimdVVVV {
1384    opcode: u32,
1385    vec_op_type: u32
1386});
1387impl_const_new_zero!(ISimdVVVVx {
1388    opcode: u32,
1389    op0_signature: u32,
1390    op1_signature: u32,
1391    op2_signature: u32,
1392    op3_signature: u32,
1393});
1394impl_const_new_zero!(SimdBicOrr {
1395    register_op: u32,
1396    immediate_op: u32
1397});
1398impl_const_new_zero!(SimdCmp {
1399    register_op: u32,
1400    zero_op: u32,
1401    vec_op_type: u32
1402});
1403impl_const_new_zero!(SimdDot {
1404    vector_op: u32,
1405    element_op: u32,
1406    ta: u8,
1407    tb: u8,
1408    t_element: u8
1409});
1410impl_const_new_zero!(SimdMoviMvni {
1411    opcode: u32,
1412    inverted: u32
1413});
1414impl_const_new_zero!(SimdLdSt {
1415    u_offset_op: u32,
1416    pre_post_op: u32,
1417    register_op: u32,
1418    literal_op: u32,
1419    u_alt_inst_id: u32,
1420});
1421impl_const_new_zero!(SimdLdNStN {
1422    single_op: u32,
1423    multiple_op: u32,
1424    n: u32,
1425    replicate: u32
1426});
1427impl_const_new_zero!(SimdLdpStp {
1428    offset_op: u32,
1429    pre_post_op: u32
1430});
1431impl_const_new_zero!(SimdLdurStur { opcode: u32 });
1432impl_const_new_zero!(ISimdPair {
1433    opcode2: u32,
1434    opcode3: u32,
1435    op_type3: u32
1436});
1437impl_const_new_zero!(SimdShift {
1438    register_op: u32,
1439    immediate_op: u32,
1440    inverted_imm: u32,
1441    vec_op_type: u32
1442});
1443impl_const_new_zero!(SimdShiftES {
1444    opcode: u32,
1445    vec_op_type: u32
1446});
1447impl_const_new_zero!(SimdSm3tt { opcode: u32 });
1448impl_const_new_zero!(SimdSmovUmov {
1449    opcode: u32,
1450    vec_op_type: u32,
1451    is_signed: u32
1452});
1453impl_const_new_zero!(SimdSxtlUxtl {
1454    opcode: u32,
1455    vec_op_type: u32
1456});
1457impl_const_new_zero!(SimdTblTbx { opcode: u32 });
1458
1459#[derive(Debug, Clone, Copy)]
1460pub struct InstInfo {
1461    pub encoding: u8,
1462    pub encoding_data_index: u8,
1463    pub reserved: u16,
1464    pub rw_info_index: u16,
1465    pub flags: u16,
1466}
1467
1468impl InstInfo {
1469    pub const fn new(
1470        encoding: u8,
1471        encoding_data_index: u8,
1472        reserved: u16,
1473        rw_info_index: u16,
1474        flags: u16,
1475    ) -> Self {
1476        Self {
1477            encoding,
1478            encoding_data_index,
1479            reserved,
1480            rw_info_index,
1481            flags,
1482        }
1483    }
1484}
1485
1486#[derive(Debug, Clone, Copy)]
1487pub enum InstFlag {
1488    Cond = 0x00000001,
1489    Pair = 0x00000002,
1490    Long = 0x00000004,
1491    Narrow = 0x00000008,
1492    VH0_15 = 0x00000010,
1493    Consecutive = 0x00000080,
1494}
1495
1496macro_rules! F {
1497    ($name: ident) => {
1498        InstFlag::$name as u16
1499    };
1500}
1501
1502macro_rules! INST {
1503    ($id: ident, $opcode_encoding: ident, $opcode_data: expr, $rw_info_index: expr, $flags: expr, $opcode_data_index: expr) => {
1504        InstInfo::new(
1505            Encoding::$opcode_encoding as u8,
1506            $opcode_data_index as u8,
1507            0,
1508            $rw_info_index,
1509            $flags,
1510        )
1511    };
1512}
1513
1514macro_rules! TABLE {
1515    ($name: ident = {
1516        $(INST(
1517            $id: ident,
1518            $opcode_encoding: ident,
1519            $opcode_data: expr,
1520            $rw_info_index: expr,
1521            $flags: expr,
1522            $opcode_data_index: expr
1523        ),)*
1524    }) => {
1525        pub static $name: &[InstInfo] = &[
1526            $(
1527                INST!(
1528                    $id,
1529                    $opcode_encoding,
1530                    $opcode_data,
1531                    $rw_info_index,
1532                    $flags,
1533                    $opcode_data_index)
1534            ),*
1535        ];
1536    };
1537}
1538
1539TABLE!(INST_INFO_TABLE
1540
1541  = {
1542// +------------------+---------------------+--------------------------------------------------------------------------------------+-----------+---------------------------+----+
1543// | Instruction Id   | Encoding            | Opcode Data                                                                          | RW Info   | Instruction Flags         |DatX|
1544// +------------------+---------------------+--------------------------------------------------------------------------------------+-----------+---------------------------+----+
1545// ${InstInfo:Begin}
1546INST(None             , None               , (_)                                                                                   , 0         , 0                         , 0  ), // #0
1547INST(Abs              , BaseRR             , (0b01011010110000000010000000000000, kWX, kZR, 0, kWX, kZR, 5, true)                  , RWI_W    , 0                         , 0  ), // #1
1548INST(Adc              , BaseRRR            , (0b0001101000000000000000, kWX, kZR, kWX, kZR, kWX, kZR, true)                        , RWI_W    , 0                         , 0  ), // #2
1549INST(Adcs             , BaseRRR            , (0b0011101000000000000000, kWX, kZR, kWX, kZR, kWX, kZR, true)                        , RWI_W    , 0                         , 1  ), // #3
1550INST(Add              , BaseAddSub         , (0b0001011000, 0b0001011001, 0b0010001)                                               , RWI_W    , 0                         , 0  ), // #4
1551INST(Addg             , BaseRRII           , (0b1001000110000000000000, kX, kSP, kX, kSP, 6, 4, 16, 4, 0, 10)                      , RWI_W    , 0                         , 0  ), // #5
1552INST(Adds             , BaseAddSub         , (0b0101011000, 0b0101011001, 0b0110001)                                               , RWI_W    , 0                         , 1  ), // #6
1553INST(Adr              , BaseAdr            , (0b0001000000000000000000, OffsetType::kAArch64_ADR)                                  , RWI_W    , 0                         , 0  ), // #7
1554INST(Adrp             , BaseAdr            , (0b1001000000000000000000, OffsetType::kAArch64_ADRP)                                 , RWI_W    , 0                         , 1  ), // #8
1555INST(And              , BaseLogical        , (0b0001010000, 0b00100100, 0)                                                         , RWI_W    , 0                         , 0  ), // #9
1556INST(Ands             , BaseLogical        , (0b1101010000, 0b11100100, 0)                                                         , RWI_W    , 0                         , 1  ), // #10
1557INST(Asr              , BaseShift          , (0b0001101011000000001010, 0b0001001100000000011111, 0)                               , RWI_W    , 0                         , 0  ), // #11
1558INST(Asrv             , BaseShift          , (0b0001101011000000001010, 0b0000000000000000000000, 0)                               , RWI_W    , 0                         , 1  ), // #12
1559INST(At               , BaseAtDcIcTlbi     , (0b00011111110000, 0b00001111000000, true)                                            , RWI_RX   , 0                         , 0  ), // #13
1560INST(Autda            , BaseRR             , (0b11011010110000010001100000000000, kX, kZR, 0, kX, kSP, 5, true)                    , RWI_X    , 0                         , 1  ), // #14
1561INST(Autdza           , BaseR              , (0b11011010110000010011101111100000, kX, kZR, 0)                                      , RWI_X    , 0                         , 0  ), // #15
1562INST(Autdb            , BaseRR             , (0b11011010110000010001110000000000, kX, kZR, 0, kX, kSP, 5, true)                    , RWI_X    , 0                         , 2  ), // #16
1563INST(Autdzb           , BaseR              , (0b11011010110000010011111111100000, kX, kZR, 0)                                      , RWI_X    , 0                         , 1  ), // #17
1564INST(Autia            , BaseRR             , (0b11011010110000010001000000000000, kX, kZR, 0, kX, kSP, 5, true)                    , RWI_X    , 0                         , 3  ), // #18
1565INST(Autia1716        , BaseOp             , (0b11010101000000110010000110011111)                                                  , 0         , 0                         , 0  ), // #19
1566INST(Autiasp          , BaseOp             , (0b11010101000000110010001110111111)                                                  , 0         , 0                         , 1  ), // #20
1567INST(Autiaz           , BaseOp             , (0b11010101000000110010001110011111)                                                  , 0         , 0                         , 2  ), // #21
1568INST(Autib            , BaseRR             , (0b11011010110000010001010000000000, kX, kZR, 0, kX, kSP, 5, true)                    , RWI_X    , 0                         , 4  ), // #22
1569INST(Autib1716        , BaseOp             , (0b11010101000000110010000111011111)                                                  , 0         , 0                         , 3  ), // #23
1570INST(Autibsp          , BaseOp             , (0b11010101000000110010001111111111)                                                  , 0         , 0                         , 4  ), // #24
1571INST(Autibz           , BaseOp             , (0b11010101000000110010001111011111)                                                  , 0         , 0                         , 5  ), // #25
1572INST(Autiza           , BaseR              , (0b11011010110000010011001111100000, kX, kZR, 0)                                      , RWI_X    , 0                         , 2  ), // #26
1573INST(Autizb           , BaseR              , (0b11011010110000010011011111100000, kX, kZR, 0)                                      , RWI_X    , 0                         , 3  ), // #27
1574INST(Axflag           , BaseOp             , (0b11010101000000000100000001011111)                                                  , 0         , 0                         , 6  ), // #28
1575INST(B                , BaseBranchRel      , (0b00010100000000000000000000000000)                                                  , 0         , F!(Cond)                   , 0  ), // #29
1576INST(Bc               , BaseBranchRel      , (0b00010100000000000000000000010000)                                                  , 0         , F!(Cond)                   , 1  ), // #30
1577INST(Bfc              , BaseBfc            , (0b00110011000000000000001111100000)                                                  , RWI_X    , 0                         , 0  ), // #31
1578INST(Bfi              , BaseBfi            , (0b00110011000000000000000000000000)                                                  , RWI_X    , 0                         , 0  ), // #32
1579INST(Bfm              , BaseBfm            , (0b00110011000000000000000000000000)                                                  , RWI_X    , 0                         , 0  ), // #33
1580INST(Bfxil            , BaseBfx            , (0b00110011000000000000000000000000)                                                  , RWI_X    , 0                         , 0  ), // #34
1581INST(Bic              , BaseLogical        , (0b0001010001, 0b00100100, 1)                                                         , RWI_W    , 0                         , 2  ), // #35
1582INST(Bics             , BaseLogical        , (0b1101010001, 0b11100100, 1)                                                         , RWI_W    , 0                         , 3  ), // #36
1583INST(Bl               , BaseBranchRel      , (0b10010100000000000000000000000000)                                                  , 0         , 0                         , 2  ), // #37
1584INST(Blr              , BaseBranchReg      , (0b11010110001111110000000000000000)                                                  , RWI_R    , 0                         , 0  ), // #38
1585INST(Br               , BaseBranchReg      , (0b11010110000111110000000000000000)                                                  , RWI_R    , 0                         , 1  ), // #39
1586INST(Brk              , BaseOpImm          , (0b11010100001000000000000000000000, 16, 5)                                           , 0         , 0                         , 0  ), // #40
1587INST(Bti              , BaseOpImm          , (0b11010101000000110010010000011111, 2, 6)                                            , 0         , 0                         , 1  ), // #41
1588INST(Cas              , BaseAtomicOp       , (0b1000100010100000011111, kWX, 30, 0)                                                , RWI_XRX  , 0                         , 0  ), // #42
1589INST(Casa             , BaseAtomicOp       , (0b1000100011100000011111, kWX, 30, 1)                                                , RWI_XRX  , 0                         , 1  ), // #43
1590INST(Casab            , BaseAtomicOp       , (0b0000100011100000011111, kW , 0 , 1)                                                , RWI_XRX  , 0                         , 2  ), // #44
1591INST(Casah            , BaseAtomicOp       , (0b0100100011100000011111, kW , 0 , 1)                                                , RWI_XRX  , 0                         , 3  ), // #45
1592INST(Casal            , BaseAtomicOp       , (0b1000100011100000111111, kWX, 30, 1)                                                , RWI_XRX  , 0                         , 4  ), // #46
1593INST(Casalb           , BaseAtomicOp       , (0b0000100011100000111111, kW , 0 , 1)                                                , RWI_XRX  , 0                         , 5  ), // #47
1594INST(Casalh           , BaseAtomicOp       , (0b0100100011100000111111, kW , 0 , 1)                                                , RWI_XRX  , 0                         , 6  ), // #48
1595INST(Casb             , BaseAtomicOp       , (0b0000100010100000011111, kW , 0 , 0)                                                , RWI_XRX  , 0                         , 7  ), // #49
1596INST(Cash             , BaseAtomicOp       , (0b0100100010100000011111, kW , 0 , 0)                                                , RWI_XRX  , 0                         , 8  ), // #50
1597INST(Casl             , BaseAtomicOp       , (0b1000100010100000111111, kWX, 30, 0)                                                , RWI_XRX  , 0                         , 9  ), // #51
1598INST(Caslb            , BaseAtomicOp       , (0b0000100010100000111111, kW , 0 , 0)                                                , RWI_XRX  , 0                         , 10 ), // #52
1599INST(Caslh            , BaseAtomicOp       , (0b0100100010100000111111, kW , 0 , 0)                                                , RWI_XRX  , 0                         , 11 ), // #53
1600INST(Casp             , BaseAtomicCasp     , (0b0000100000100000011111, kWX, 30)                                                   , RWI_XXRRX, F!(Consecutive)            , 0  ), // #54
1601INST(Caspa            , BaseAtomicCasp     , (0b0000100001100000011111, kWX, 30)                                                   , RWI_XXRRX, F!(Consecutive)            , 1  ), // #55
1602INST(Caspal           , BaseAtomicCasp     , (0b0000100001100000111111, kWX, 30)                                                   , RWI_XXRRX, F!(Consecutive)            , 2  ), // #56
1603INST(Caspl            , BaseAtomicCasp     , (0b0000100000100000111111, kWX, 30)                                                   , RWI_XXRRX, F!(Consecutive)            , 3  ), // #57
1604INST(Cbnz             , BaseBranchCmp      , (0b00110101000000000000000000000000)                                                  , RWI_R    , 0                         , 0  ), // #58
1605INST(Cbz              , BaseBranchCmp      , (0b00110100000000000000000000000000)                                                  , RWI_R    , 0                         , 1  ), // #59
1606INST(Ccmn             , BaseCCmp           , (0b00111010010000000000000000000000)                                                  , RWI_R    , 0                         , 0  ), // #60
1607INST(Ccmp             , BaseCCmp           , (0b01111010010000000000000000000000)                                                  , RWI_R    , 0                         , 1  ), // #61
1608INST(Cfinv            , BaseOp             , (0b11010101000000000100000000011111)                                                  , 0         , 0                         , 7  ), // #62
1609INST(Chkfeat          , BaseOpX16          , (0b11010101000000110010010100011111)                                                  , 0         , 0                         , 0  ), // #63
1610INST(Cinc             , BaseCInc           , (0b00011010100000000000010000000000)                                                  , RWI_W    , 0                         , 0  ), // #64
1611INST(Cinv             , BaseCInc           , (0b01011010100000000000000000000000)                                                  , RWI_W    , 0                         , 1  ), // #65
1612INST(Clrbhb           , BaseOp             , (0b11010101000000110010001011011111)                                                  , 0         , 0                         , 8  ), // #66
1613INST(Clrex            , BaseOpImm          , (0b11010101000000110011000001011111, 4, 8)                                            , 0         , 0                         , 2  ), // #67
1614INST(Cls              , BaseRR             , (0b01011010110000000001010000000000, kWX, kZR, 0, kWX, kZR, 5, true)                  , RWI_W    , 0                         , 5  ), // #68
1615INST(Clz              , BaseRR             , (0b01011010110000000001000000000000, kWX, kZR, 0, kWX, kZR, 5, true)                  , RWI_W    , 0                         , 6  ), // #69
1616INST(Cmn              , BaseCmpCmn         , (0b0101011000, 0b0101011001, 0b0110001)                                               , RWI_R    , 0                         , 0  ), // #70
1617INST(Cmp              , BaseCmpCmn         , (0b1101011000, 0b1101011001, 0b1110001)                                               , RWI_R    , 0                         , 1  ), // #71
1618INST(Cmpp             , BaseRR             , (0b10111010110000000000000000011111, kX, kSP, 5, kX, kSP, 16, true)                   , RWI_R    , 0                         , 7  ), // #72
1619INST(Cneg             , BaseCInc           , (0b01011010100000000000010000000000)                                                  , RWI_W    , 0                         , 2  ), // #73
1620INST(Cnt              , BaseRR             , (0b01011010110000000001110000000000, kWX, kZR, 0, kWX, kZR, 5, true)                  , RWI_W    , 0                         , 8  ), // #74
1621INST(Crc32b           , BaseRRR            , (0b0001101011000000010000, kW, kZR, kW, kZR, kW, kZR, false)                          , RWI_W    , 0                         , 2  ), // #75
1622INST(Crc32cb          , BaseRRR            , (0b0001101011000000010100, kW, kZR, kW, kZR, kW, kZR, false)                          , RWI_W    , 0                         , 3  ), // #76
1623INST(Crc32ch          , BaseRRR            , (0b0001101011000000010101, kW, kZR, kW, kZR, kW, kZR, false)                          , RWI_W    , 0                         , 4  ), // #77
1624INST(Crc32cw          , BaseRRR            , (0b0001101011000000010110, kW, kZR, kW, kZR, kW, kZR, false)                          , RWI_W    , 0                         , 5  ), // #78
1625INST(Crc32cx          , BaseRRR            , (0b1001101011000000010111, kW, kZR, kW, kZR, kX, kZR, false)                          , RWI_W    , 0                         , 6  ), // #79
1626INST(Crc32h           , BaseRRR            , (0b0001101011000000010001, kW, kZR, kW, kZR, kW, kZR, false)                          , RWI_W    , 0                         , 7  ), // #80
1627INST(Crc32w           , BaseRRR            , (0b0001101011000000010010, kW, kZR, kW, kZR, kW, kZR, false)                          , RWI_W    , 0                         , 8  ), // #81
1628INST(Crc32x           , BaseRRR            , (0b1001101011000000010011, kW, kZR, kW, kZR, kX, kZR, false)                          , RWI_W    , 0                         , 9  ), // #82
1629INST(Csdb             , BaseOp             , (0b11010101000000110010001010011111)                                                  , 0         , 0                         , 9  ), // #83
1630INST(Csel             , BaseCSel           , (0b00011010100000000000000000000000)                                                  , RWI_W    , 0                         , 0  ), // #84
1631INST(Cset             , BaseCSet           , (0b00011010100111110000011111100000)                                                  , RWI_W    , 0                         , 0  ), // #85
1632INST(Csetm            , BaseCSet           , (0b01011010100111110000001111100000)                                                  , RWI_W    , 0                         , 1  ), // #86
1633INST(Csinc            , BaseCSel           , (0b00011010100000000000010000000000)                                                  , RWI_W    , 0                         , 1  ), // #87
1634INST(Csinv            , BaseCSel           , (0b01011010100000000000000000000000)                                                  , RWI_W    , 0                         , 2  ), // #88
1635INST(Csneg            , BaseCSel           , (0b01011010100000000000010000000000)                                                  , RWI_W    , 0                         , 3  ), // #89
1636INST(Ctz              , BaseRR             , (0b01011010110000000001100000000000, kWX, kZR, 0, kWX, kZR, 5, true)                  , RWI_W    , 0                         , 9  ), // #90
1637INST(Dc               , BaseAtDcIcTlbi     , (0b00011110000000, 0b00001110000000, true)                                            , RWI_RX   , 0                         , 1  ), // #91
1638INST(Dcps1            , BaseOpImm          , (0b11010100101000000000000000000001, 16, 5)                                           , 0         , 0                         , 3  ), // #92
1639INST(Dcps2            , BaseOpImm          , (0b11010100101000000000000000000010, 16, 5)                                           , 0         , 0                         , 4  ), // #93
1640INST(Dcps3            , BaseOpImm          , (0b11010100101000000000000000000011, 16, 5)                                           , 0         , 0                         , 5  ), // #94
1641INST(Dgh              , BaseOp             , (0b11010101000000110010000011011111)                                                  , 0         , 0                         , 10 ), // #95
1642INST(Dmb              , BaseOpImm          , (0b11010101000000110011000010111111, 4, 8)                                            , 0         , 0                         , 6  ), // #96
1643INST(Drps             , BaseOp             , (0b11010110101111110000001111100000)                                                  , 0         , 0                         , 11 ), // #97
1644INST(Dsb              , BaseOpImm          , (0b11010101000000110011000010011111, 4, 8)                                            , 0         , 0                         , 7  ), // #98
1645INST(Eon              , BaseLogical        , (0b1001010001, 0b10100100, 1)                                                         , RWI_W    , 0                         , 4  ), // #99
1646INST(Eor              , BaseLogical        , (0b1001010000, 0b10100100, 0)                                                         , RWI_W    , 0                         , 5  ), // #100
1647INST(Esb              , BaseOp             , (0b11010101000000110010001000011111)                                                  , 0         , 0                         , 12 ), // #101
1648INST(Extr             , BaseExtract        , (0b00010011100000000000000000000000)                                                  , RWI_W    , 0                         , 0  ), // #102
1649INST(Eret             , BaseOp             , (0b11010110100111110000001111100000)                                                  , 0         , 0                         , 13 ), // #103
1650INST(Gmi              , BaseRRR            , (0b1001101011000000000101, kX , kZR, kX , kSP, kX , kZR, true)                        , RWI_W    , 0                         , 10 ), // #104
1651INST(Hint             , BaseOpImm          , (0b11010101000000110010000000011111, 7, 5)                                            , 0         , 0                         , 8  ), // #105
1652INST(Hlt              , BaseOpImm          , (0b11010100010000000000000000000000, 16, 5)                                           , 0         , 0                         , 9  ), // #106
1653INST(Hvc              , BaseOpImm          , (0b11010100000000000000000000000010, 16, 5)                                           , 0         , 0                         , 10 ), // #107
1654INST(Ic               , BaseAtDcIcTlbi     , (0b00011110000000, 0b00001110000000, false)                                           , RWI_RX   , 0                         , 2  ), // #108
1655INST(Isb              , BaseOpImm          , (0b11010101000000110011000011011111, 4, 8)                                            , 0         , 0                         , 11 ), // #109
1656INST(Ldadd            , BaseAtomicOp       , (0b1011100000100000000000, kWX, 30, 0)                                                , RWI_WRX  , 0                         , 12 ), // #110
1657INST(Ldadda           , BaseAtomicOp       , (0b1011100010100000000000, kWX, 30, 1)                                                , RWI_WRX  , 0                         , 13 ), // #111
1658INST(Ldaddab          , BaseAtomicOp       , (0b0011100010100000000000, kW , 0 , 1)                                                , RWI_WRX  , 0                         , 14 ), // #112
1659INST(Ldaddah          , BaseAtomicOp       , (0b0111100010100000000000, kW , 0 , 1)                                                , RWI_WRX  , 0                         , 15 ), // #113
1660INST(Ldaddal          , BaseAtomicOp       , (0b1011100011100000000000, kWX, 30, 1)                                                , RWI_WRX  , 0                         , 16 ), // #114
1661INST(Ldaddalb         , BaseAtomicOp       , (0b0011100011100000000000, kW , 0 , 1)                                                , RWI_WRX  , 0                         , 17 ), // #115
1662INST(Ldaddalh         , BaseAtomicOp       , (0b0111100011100000000000, kW , 0 , 1)                                                , RWI_WRX  , 0                         , 18 ), // #116
1663INST(Ldaddb           , BaseAtomicOp       , (0b0011100000100000000000, kW , 0 , 0)                                                , RWI_WRX  , 0                         , 19 ), // #117
1664INST(Ldaddh           , BaseAtomicOp       , (0b0111100000100000000000, kW , 0 , 0)                                                , RWI_WRX  , 0                         , 20 ), // #118
1665INST(Ldaddl           , BaseAtomicOp       , (0b1011100001100000000000, kWX, 30, 0)                                                , RWI_WRX  , 0                         , 21 ), // #119
1666INST(Ldaddlb          , BaseAtomicOp       , (0b0011100001100000000000, kW , 0 , 0)                                                , RWI_WRX  , 0                         , 22 ), // #120
1667INST(Ldaddlh          , BaseAtomicOp       , (0b0111100001100000000000, kW , 0 , 0)                                                , RWI_WRX  , 0                         , 23 ), // #121
1668INST(Ldar             , BaseRMNoImm       , (0b1000100011011111111111, kWX, kZR, 30)                                              , RWI_W    , 0                         , 0  ), // #122
1669INST(Ldarb            , BaseRMNoImm       , (0b0000100011011111111111, kW , kZR, 0 )                                              , RWI_W    , 0                         , 1  ), // #123
1670INST(Ldarh            , BaseRMNoImm       , (0b0100100011011111111111, kW , kZR, 0 )                                              , RWI_W    , 0                         , 2  ), // #124
1671INST(Ldaxp            , BaseLdxp           , (0b1000100001111111100000, kWX, 30)                                                   , RWI_WW   , 0                         , 0  ), // #125
1672INST(Ldaxr            , BaseRMNoImm       , (0b1000100001011111111111, kWX, kZR, 30)                                              , RWI_W    , 0                         , 3  ), // #126
1673INST(Ldaxrb           , BaseRMNoImm       , (0b0000100001011111111111, kW , kZR, 0 )                                              , RWI_W    , 0                         , 4  ), // #127
1674INST(Ldaxrh           , BaseRMNoImm       , (0b0100100001011111111111, kW , kZR, 0 )                                              , RWI_W    , 0                         , 5  ), // #128
1675INST(Ldclr            , BaseAtomicOp       , (0b1011100000100000000100, kWX, 30, 0)                                                , RWI_WRX  , 0                         , 24 ), // #129
1676INST(Ldclra           , BaseAtomicOp       , (0b1011100010100000000100, kWX, 30, 1)                                                , RWI_WRX  , 0                         , 25 ), // #130
1677INST(Ldclrab          , BaseAtomicOp       , (0b0011100010100000000100, kW , 0 , 1)                                                , RWI_WRX  , 0                         , 26 ), // #131
1678INST(Ldclrah          , BaseAtomicOp       , (0b0111100010100000000100, kW , 0 , 1)                                                , RWI_WRX  , 0                         , 27 ), // #132
1679INST(Ldclral          , BaseAtomicOp       , (0b1011100011100000000100, kWX, 30, 1)                                                , RWI_WRX  , 0                         , 28 ), // #133
1680INST(Ldclralb         , BaseAtomicOp       , (0b0011100011100000000100, kW , 0 , 1)                                                , RWI_WRX  , 0                         , 29 ), // #134
1681INST(Ldclralh         , BaseAtomicOp       , (0b0111100011100000000100, kW , 0 , 1)                                                , RWI_WRX  , 0                         , 30 ), // #135
1682INST(Ldclrb           , BaseAtomicOp       , (0b0011100000100000000100, kW , 0 , 0)                                                , RWI_WRX  , 0                         , 31 ), // #136
1683INST(Ldclrh           , BaseAtomicOp       , (0b0111100000100000000100, kW , 0 , 0)                                                , RWI_WRX  , 0                         , 32 ), // #137
1684INST(Ldclrl           , BaseAtomicOp       , (0b1011100001100000000100, kWX, 30, 0)                                                , RWI_WRX  , 0                         , 33 ), // #138
1685INST(Ldclrlb          , BaseAtomicOp       , (0b0011100001100000000100, kW , 0 , 0)                                                , RWI_WRX  , 0                         , 34 ), // #139
1686INST(Ldclrlh          , BaseAtomicOp       , (0b0111100001100000000100, kW , 0 , 0)                                                , RWI_WRX  , 0                         , 35 ), // #140
1687INST(Ldeor            , BaseAtomicOp       , (0b1011100000100000001000, kWX, 30, 0)                                                , RWI_WRX  , 0                         , 36 ), // #141
1688INST(Ldeora           , BaseAtomicOp       , (0b1011100010100000001000, kWX, 30, 1)                                                , RWI_WRX  , 0                         , 37 ), // #142
1689INST(Ldeorab          , BaseAtomicOp       , (0b0011100010100000001000, kW , 0 , 1)                                                , RWI_WRX  , 0                         , 38 ), // #143
1690INST(Ldeorah          , BaseAtomicOp       , (0b0111100010100000001000, kW , 0 , 1)                                                , RWI_WRX  , 0                         , 39 ), // #144
1691INST(Ldeoral          , BaseAtomicOp       , (0b1011100011100000001000, kWX, 30, 1)                                                , RWI_WRX  , 0                         , 40 ), // #145
1692INST(Ldeoralb         , BaseAtomicOp       , (0b0011100011100000001000, kW , 0 , 1)                                                , RWI_WRX  , 0                         , 41 ), // #146
1693INST(Ldeoralh         , BaseAtomicOp       , (0b0111100011100000001000, kW , 0 , 1)                                                , RWI_WRX  , 0                         , 42 ), // #147
1694INST(Ldeorb           , BaseAtomicOp       , (0b0011100000100000001000, kW , 0 , 0)                                                , RWI_WRX  , 0                         , 43 ), // #148
1695INST(Ldeorh           , BaseAtomicOp       , (0b0111100000100000001000, kW , 0 , 0)                                                , RWI_WRX  , 0                         , 44 ), // #149
1696INST(Ldeorl           , BaseAtomicOp       , (0b1011100001100000001000, kWX, 30, 0)                                                , RWI_WRX  , 0                         , 45 ), // #150
1697INST(Ldeorlb          , BaseAtomicOp       , (0b0011100001100000001000, kW , 0 , 0)                                                , RWI_WRX  , 0                         , 46 ), // #151
1698INST(Ldeorlh          , BaseAtomicOp       , (0b0111100001100000001000, kW , 0 , 0)                                                , RWI_WRX  , 0                         , 47 ), // #152
1699INST(Ldg              , BaseRMSImm9       , (0b1101100101100000000000, 0b0000000000000000000000, kX , kZR, 0, 4)                  , RWI_W    , 0                         , 0  ), // #153
1700INST(Ldgm             , BaseRMNoImm       , (0b1101100111100000000000, kX , kZR, 0 )                                              , RWI_W    , 0                         , 6  ), // #154
1701INST(Ldlar            , BaseRMNoImm       , (0b1000100011011111011111, kWX, kZR, 30)                                              , RWI_W    , 0                         , 7  ), // #155
1702INST(Ldlarb           , BaseRMNoImm       , (0b0000100011011111011111, kW , kZR, 0 )                                              , RWI_W    , 0                         , 8  ), // #156
1703INST(Ldlarh           , BaseRMNoImm       , (0b0100100011011111011111, kW , kZR, 0 )                                              , RWI_W    , 0                         , 9  ), // #157
1704INST(Ldnp             , BaseLdpStp         , (0b0010100001, 0           , kWX, 31, 2)                                              , RWI_WW   , 0                         , 0  ), // #158
1705INST(Ldp              , BaseLdpStp         , (0b0010100101, 0b0010100011, kWX, 31, 2)                                              , RWI_WW   , 0                         , 1  ), // #159
1706INST(Ldpsw            , BaseLdpStp         , (0b0110100101, 0b0110100011, kX , 0 , 2)                                              , RWI_WW   , 0                         , 2  ), // #160
1707INST(Ldr              , BaseLdSt           , (0b1011100101, 0b10111000010, 0b10111000011, 0b00011000, kWX, 30, 2, InstId::Ldur)   , RWI_W    , 0                         , 0  ), // #161
1708INST(Ldraa            , BaseRMSImm10      , (0b1111100000100000000001, kX , kZR, 0, 3)                                            , RWI_W    , 0                         , 0  ), // #162
1709INST(Ldrab            , BaseRMSImm10      , (0b1111100010100000000001, kX , kZR, 0, 3)                                            , RWI_W    , 0                         , 1  ), // #163
1710INST(Ldrb             , BaseLdSt           , (0b0011100101, 0b00111000010, 0b00111000011, 0         , kW , 0 , 0, InstId::Ldurb)  , RWI_W    , 0                         , 1  ), // #164
1711INST(Ldrh             , BaseLdSt           , (0b0111100101, 0b01111000010, 0b01111000011, 0         , kW , 0 , 1, InstId::Ldurh)  , RWI_W    , 0                         , 2  ), // #165
1712INST(Ldrsb            , BaseLdSt           , (0b0011100111, 0b00111000100, 0b00111000111, 0         , kWX, 22, 0, InstId::Ldursb) , RWI_W    , 0                         , 3  ), // #166
1713INST(Ldrsh            , BaseLdSt           , (0b0111100111, 0b01111000100, 0b01111000111, 0         , kWX, 22, 1, InstId::Ldursh) , RWI_W    , 0                         , 4  ), // #167
1714INST(Ldrsw            , BaseLdSt           , (0b1011100110, 0b10111000100, 0b10111000101, 0b10011000, kX , 0 , 2, InstId::Ldursw) , RWI_W    , 0                         , 5  ), // #168
1715INST(Ldset            , BaseAtomicOp       , (0b1011100000100000001100, kWX, 30, 0)                                                , RWI_WRX  , 0                         , 48 ), // #169
1716INST(Ldseta           , BaseAtomicOp       , (0b1011100010100000001100, kWX, 30, 1)                                                , RWI_WRX  , 0                         , 49 ), // #170
1717INST(Ldsetab          , BaseAtomicOp       , (0b0011100010100000001100, kW , 0 , 1)                                                , RWI_WRX  , 0                         , 50 ), // #171
1718INST(Ldsetah          , BaseAtomicOp       , (0b0111100010100000001100, kW , 0 , 1)                                                , RWI_WRX  , 0                         , 51 ), // #172
1719INST(Ldsetal          , BaseAtomicOp       , (0b1011100011100000001100, kWX, 30, 1)                                                , RWI_WRX  , 0                         , 52 ), // #173
1720INST(Ldsetalb         , BaseAtomicOp       , (0b0011100011100000001100, kW , 0 , 1)                                                , RWI_WRX  , 0                         , 53 ), // #174
1721INST(Ldsetalh         , BaseAtomicOp       , (0b0111100011100000001100, kW , 0 , 1)                                                , RWI_WRX  , 0                         , 54 ), // #175
1722INST(Ldsetb           , BaseAtomicOp       , (0b0011100000100000001100, kW , 0 , 0)                                                , RWI_WRX  , 0                         , 55 ), // #176
1723INST(Ldseth           , BaseAtomicOp       , (0b0111100000100000001100, kW , 0 , 0)                                                , RWI_WRX  , 0                         , 56 ), // #177
1724INST(Ldsetl           , BaseAtomicOp       , (0b1011100001100000001100, kWX, 30, 0)                                                , RWI_WRX  , 0                         , 57 ), // #178
1725INST(Ldsetlb          , BaseAtomicOp       , (0b0011100001100000001100, kW , 0 , 0)                                                , RWI_WRX  , 0                         , 58 ), // #179
1726INST(Ldsetlh          , BaseAtomicOp       , (0b0111100001100000001100, kW , 0 , 0)                                                , RWI_WRX  , 0                         , 59 ), // #180
1727INST(Ldsmax           , BaseAtomicOp       , (0b1011100000100000010000, kWX, 30, 0)                                                , RWI_WRX  , 0                         , 60 ), // #181
1728INST(Ldsmaxa          , BaseAtomicOp       , (0b1011100010100000010000, kWX, 30, 1)                                                , RWI_WRX  , 0                         , 61 ), // #182
1729INST(Ldsmaxab         , BaseAtomicOp       , (0b0011100010100000010000, kW , 0 , 1)                                                , RWI_WRX  , 0                         , 62 ), // #183
1730INST(Ldsmaxah         , BaseAtomicOp       , (0b0111100010100000010000, kW , 0 , 1)                                                , RWI_WRX  , 0                         , 63 ), // #184
1731INST(Ldsmaxal         , BaseAtomicOp       , (0b1011100011100000010000, kWX, 30, 1)                                                , RWI_WRX  , 0                         , 64 ), // #185
1732INST(Ldsmaxalb        , BaseAtomicOp       , (0b0011100011100000010000, kW , 0 , 1)                                                , RWI_WRX  , 0                         , 65 ), // #186
1733INST(Ldsmaxalh        , BaseAtomicOp       , (0b0111100011100000010000, kW , 0 , 1)                                                , RWI_WRX  , 0                         , 66 ), // #187
1734INST(Ldsmaxb          , BaseAtomicOp       , (0b0011100000100000010000, kW , 0 , 0)                                                , RWI_WRX  , 0                         , 67 ), // #188
1735INST(Ldsmaxh          , BaseAtomicOp       , (0b0111100000100000010000, kW , 0 , 0)                                                , RWI_WRX  , 0                         , 68 ), // #189
1736INST(Ldsmaxl          , BaseAtomicOp       , (0b1011100001100000010000, kWX, 30, 0)                                                , RWI_WRX  , 0                         , 69 ), // #190
1737INST(Ldsmaxlb         , BaseAtomicOp       , (0b0011100001100000010000, kW , 0 , 0)                                                , RWI_WRX  , 0                         , 70 ), // #191
1738INST(Ldsmaxlh         , BaseAtomicOp       , (0b0111100001100000010000, kW , 0 , 0)                                                , RWI_WRX  , 0                         , 71 ), // #192
1739INST(Ldsmin           , BaseAtomicOp       , (0b1011100000100000010100, kWX, 30, 0)                                                , RWI_WRX  , 0                         , 72 ), // #193
1740INST(Ldsmina          , BaseAtomicOp       , (0b1011100010100000010100, kWX, 30, 1)                                                , RWI_WRX  , 0                         , 73 ), // #194
1741INST(Ldsminab         , BaseAtomicOp       , (0b0011100010100000010100, kW , 0 , 1)                                                , RWI_WRX  , 0                         , 74 ), // #195
1742INST(Ldsminah         , BaseAtomicOp       , (0b0111100010100000010100, kW , 0 , 1)                                                , RWI_WRX  , 0                         , 75 ), // #196
1743INST(Ldsminal         , BaseAtomicOp       , (0b1011100011100000010100, kWX, 30, 1)                                                , RWI_WRX  , 0                         , 76 ), // #197
1744INST(Ldsminalb        , BaseAtomicOp       , (0b0011100011100000010100, kW , 0 , 1)                                                , RWI_WRX  , 0                         , 77 ), // #198
1745INST(Ldsminalh        , BaseAtomicOp       , (0b0111100011100000010100, kW , 0 , 1)                                                , RWI_WRX  , 0                         , 78 ), // #199
1746INST(Ldsminb          , BaseAtomicOp       , (0b0011100000100000010100, kW , 0 , 0)                                                , RWI_WRX  , 0                         , 79 ), // #200
1747INST(Ldsminh          , BaseAtomicOp       , (0b0111100000100000010100, kW , 0 , 0)                                                , RWI_WRX  , 0                         , 80 ), // #201
1748INST(Ldsminl          , BaseAtomicOp       , (0b1011100001100000010100, kWX, 30, 0)                                                , RWI_WRX  , 0                         , 81 ), // #202
1749INST(Ldsminlb         , BaseAtomicOp       , (0b0011100001100000010100, kW , 0 , 0)                                                , RWI_WRX  , 0                         , 82 ), // #203
1750INST(Ldsminlh         , BaseAtomicOp       , (0b0111100001100000010100, kW , 0 , 0)                                                , RWI_WRX  , 0                         , 83 ), // #204
1751INST(Ldtr             , BaseRMSImm9       , (0b1011100001000000000010, 0b0000000000000000000000, kWX, kZR, 30, 0)                 , RWI_W    , 0                         , 1  ), // #205
1752INST(Ldtrb            , BaseRMSImm9       , (0b0011100001000000000010, 0b0000000000000000000000, kW , kZR, 0 , 0)                 , RWI_W    , 0                         , 2  ), // #206
1753INST(Ldtrh            , BaseRMSImm9       , (0b0111100001000000000010, 0b0000000000000000000000, kW , kZR, 0 , 0)                 , RWI_W    , 0                         , 3  ), // #207
1754INST(Ldtrsb           , BaseRMSImm9       , (0b0011100011000000000010, 0b0000000000000000000000, kWX, kZR, 22, 0)                 , RWI_W    , 0                         , 4  ), // #208
1755INST(Ldtrsh           , BaseRMSImm9       , (0b0111100011000000000010, 0b0000000000000000000000, kWX, kZR, 22, 0)                 , RWI_W    , 0                         , 5  ), // #209
1756INST(Ldtrsw           , BaseRMSImm9       , (0b1011100010000000000010, 0b0000000000000000000000, kX , kZR, 0 , 0)                 , RWI_W    , 0                         , 6  ), // #210
1757INST(Ldumax           , BaseAtomicOp       , (0b1011100000100000011000, kWX, 30, 0)                                                , RWI_WRX  , 0                         , 84 ), // #211
1758INST(Ldumaxa          , BaseAtomicOp       , (0b1011100010100000011000, kWX, 30, 1)                                                , RWI_WRX  , 0                         , 85 ), // #212
1759INST(Ldumaxab         , BaseAtomicOp       , (0b0011100010100000011000, kW , 0 , 1)                                                , RWI_WRX  , 0                         , 86 ), // #213
1760INST(Ldumaxah         , BaseAtomicOp       , (0b0111100010100000011000, kW , 0 , 1)                                                , RWI_WRX  , 0                         , 87 ), // #214
1761INST(Ldumaxal         , BaseAtomicOp       , (0b1011100011100000011000, kWX, 30, 1)                                                , RWI_WRX  , 0                         , 88 ), // #215
1762INST(Ldumaxalb        , BaseAtomicOp       , (0b0011100011100000011000, kW , 0 , 1)                                                , RWI_WRX  , 0                         , 89 ), // #216
1763INST(Ldumaxalh        , BaseAtomicOp       , (0b0111100011100000011000, kW , 0 , 1)                                                , RWI_WRX  , 0                         , 90 ), // #217
1764INST(Ldumaxb          , BaseAtomicOp       , (0b0011100000100000011000, kW , 0 , 0)                                                , RWI_WRX  , 0                         , 91 ), // #218
1765INST(Ldumaxh          , BaseAtomicOp       , (0b0111100000100000011000, kW , 0 , 0)                                                , RWI_WRX  , 0                         , 92 ), // #219
1766INST(Ldumaxl          , BaseAtomicOp       , (0b1011100001100000011000, kWX, 30, 0)                                                , RWI_WRX  , 0                         , 93 ), // #220
1767INST(Ldumaxlb         , BaseAtomicOp       , (0b0011100001100000011000, kW , 0 , 0)                                                , RWI_WRX  , 0                         , 94 ), // #221
1768INST(Ldumaxlh         , BaseAtomicOp       , (0b0111100001100000011000, kW , 0 , 0)                                                , RWI_WRX  , 0                         , 95 ), // #222
1769INST(Ldumin           , BaseAtomicOp       , (0b1011100000100000011100, kWX, 30, 0)                                                , RWI_WRX  , 0                         , 96 ), // #223
1770INST(Ldumina          , BaseAtomicOp       , (0b1011100010100000011100, kWX, 30, 1)                                                , RWI_WRX  , 0                         , 97 ), // #224
1771INST(Lduminab         , BaseAtomicOp       , (0b0011100010100000011100, kW , 0 , 1)                                                , RWI_WRX  , 0                         , 98 ), // #225
1772INST(Lduminah         , BaseAtomicOp       , (0b0111100010100000011100, kW , 0 , 1)                                                , RWI_WRX  , 0                         , 99 ), // #226
1773INST(Lduminal         , BaseAtomicOp       , (0b1011100011100000011100, kWX, 30, 1)                                                , RWI_WRX  , 0                         , 100), // #227
1774INST(Lduminalb        , BaseAtomicOp       , (0b0011100011100000011100, kW , 0 , 1)                                                , RWI_WRX  , 0                         , 101), // #228
1775INST(Lduminalh        , BaseAtomicOp       , (0b0111100011100000011100, kW , 0 , 1)                                                , RWI_WRX  , 0                         , 102), // #229
1776INST(Lduminb          , BaseAtomicOp       , (0b0011100000100000011100, kW , 0 , 0)                                                , RWI_WRX  , 0                         , 103), // #230
1777INST(Lduminh          , BaseAtomicOp       , (0b0111100000100000011100, kW , 0 , 0)                                                , RWI_WRX  , 0                         , 104), // #231
1778INST(Lduminl          , BaseAtomicOp       , (0b1011100001100000011100, kWX, 30, 0)                                                , RWI_WRX  , 0                         , 105), // #232
1779INST(Lduminlb         , BaseAtomicOp       , (0b0011100001100000011100, kW , 0 , 0)                                                , RWI_WRX  , 0                         , 106), // #233
1780INST(Lduminlh         , BaseAtomicOp       , (0b0111100001100000011100, kW , 0 , 0)                                                , RWI_WRX  , 0                         , 107), // #234
1781INST(Ldur             , BaseRMSImm9       , (0b1011100001000000000000, 0b0000000000000000000000, kWX, kZR, 30, 0)                 , RWI_W    , 0                         , 7  ), // #235
1782INST(Ldurb            , BaseRMSImm9       , (0b0011100001000000000000, 0b0000000000000000000000, kW , kZR, 0 , 0)                 , RWI_W    , 0                         , 8  ), // #236
1783INST(Ldurh            , BaseRMSImm9       , (0b0111100001000000000000, 0b0000000000000000000000, kW , kZR, 0 , 0)                 , RWI_W    , 0                         , 9  ), // #237
1784INST(Ldursb           , BaseRMSImm9       , (0b0011100011000000000000, 0b0000000000000000000000, kWX, kZR, 22, 0)                 , RWI_W    , 0                         , 10 ), // #238
1785INST(Ldursh           , BaseRMSImm9       , (0b0111100011000000000000, 0b0000000000000000000000, kWX, kZR, 22, 0)                 , RWI_W    , 0                         , 11 ), // #239
1786INST(Ldursw           , BaseRMSImm9       , (0b1011100010000000000000, 0b0000000000000000000000, kX , kZR, 0 , 0)                 , RWI_W    , 0                         , 12 ), // #240
1787INST(Ldxp             , BaseLdxp           , (0b1000100001111111000000, kWX, 30)                                                   , RWI_WW   , 0                         , 1  ), // #241
1788INST(Ldxr             , BaseRMNoImm       , (0b1000100001011111011111, kWX, kZR, 30)                                              , RWI_W    , 0                         , 10 ), // #242
1789INST(Ldxrb            , BaseRMNoImm       , (0b0000100001011111011111, kW , kZR, 0 )                                              , RWI_W    , 0                         , 11 ), // #243
1790INST(Ldxrh            , BaseRMNoImm       , (0b0100100001011111011111, kW , kZR, 0 )                                              , RWI_W    , 0                         , 12 ), // #244
1791INST(Lsl              , BaseShift          , (0b0001101011000000001000, 0b0101001100000000000000, 0)                               , RWI_W    , 0                         , 2  ), // #245
1792INST(Lslv             , BaseShift          , (0b0001101011000000001000, 0b0000000000000000000000, 0)                               , RWI_W    , 0                         , 3  ), // #246
1793INST(Lsr              , BaseShift          , (0b0001101011000000001001, 0b0101001100000000011111, 0)                               , RWI_W    , 0                         , 4  ), // #247
1794INST(Lsrv             , BaseShift          , (0b0001101011000000001001, 0b0000000000000000000000, 0)                               , RWI_W    , 0                         , 5  ), // #248
1795INST(Madd             , BaseRRRR           , (0b0001101100000000000000, kWX, kZR, kWX, kZR, kWX, kZR, kWX, kZR, true)              , RWI_W    , 0                         , 0  ), // #249
1796INST(Mneg             , BaseRRR            , (0b0001101100000000111111, kWX, kZR, kWX, kZR, kWX, kZR, true)                        , RWI_W    , 0                         , 11 ), // #250
1797INST(Mov              , BaseMov            , (_)                                                                                   , RWI_W    , 0                         , 0  ), // #251
1798INST(Movk             , BaseMovKNZ         , (0b01110010100000000000000000000000)                                                  , RWI_X    , 0                         , 0  ), // #252
1799INST(Movn             , BaseMovKNZ         , (0b00010010100000000000000000000000)                                                  , RWI_W    , 0                         , 1  ), // #253
1800INST(Movz             , BaseMovKNZ         , (0b01010010100000000000000000000000)                                                  , RWI_W    , 0                         , 2  ), // #254
1801INST(Mrs              , BaseMrs            , (_)                                                                                   , RWI_W    , 0                         , 0  ), // #255
1802INST(Msr              , BaseMsr            , (_)                                                                                   , RWI_W    , 0                         , 0  ), // #256
1803INST(Msub             , BaseRRRR           , (0b0001101100000000100000, kWX, kZR, kWX, kZR, kWX, kZR, kWX, kZR, true)              , RWI_W    , 0                         , 1  ), // #257
1804INST(Mul              , BaseRRR            , (0b0001101100000000011111, kWX, kZR, kWX, kZR, kWX, kZR, true)                        , RWI_W    , 0                         , 12 ), // #258
1805INST(Mvn              , BaseMvnNeg         , (0b00101010001000000000001111100000)                                                  , RWI_W    , 0                         , 0  ), // #259
1806INST(Neg              , BaseMvnNeg         , (0b01001011000000000000001111100000)                                                  , RWI_W    , 0                         , 1  ), // #260
1807INST(Negs             , BaseMvnNeg         , (0b01101011000000000000001111100000)                                                  , RWI_W    , 0                         , 2  ), // #261
1808INST(Ngc              , BaseRR             , (0b01011010000000000000001111100000, kWX, kZR, 0, kWX, kZR, 16, true)                 , RWI_W    , 0                         , 10 ), // #262
1809INST(Ngcs             , BaseRR             , (0b01111010000000000000001111100000, kWX, kZR, 0, kWX, kZR, 16, true)                 , RWI_W    , 0                         , 11 ), // #263
1810INST(Nop              , BaseOp             , (0b11010101000000110010000000011111)                                                  , 0         , 0                         , 14 ), // #264
1811INST(Orn              , BaseLogical        , (0b0101010001, 0b01100100, 1)                                                         , RWI_W    , 0                         , 6  ), // #265
1812INST(Orr              , BaseLogical        , (0b0101010000, 0b01100100, 0)                                                         , RWI_W    , 0                         , 7  ), // #266
1813INST(Pacda            , BaseRR             , (0b11011010110000010000100000000000, kX, kZR, 0, kX, kSP, 5, true)                    , RWI_X    , 0                         , 12 ), // #267
1814INST(Pacdb            , BaseRR             , (0b11011010110000010000110000000000, kX, kZR, 0, kX, kSP, 5, true)                    , RWI_X    , 0                         , 13 ), // #268
1815INST(Pacdza           , BaseR              , (0b11011010110000010010101111100000, kX, kZR, 0)                                      , RWI_X    , 0                         , 4  ), // #269
1816INST(Pacdzb           , BaseR              , (0b11011010110000010010111111100000, kX, kZR, 0)                                      , RWI_X    , 0                         , 5  ), // #270
1817INST(Pacga            , BaseRRR            , (0b1001101011000000001100, kX, kZR, kX, kZR, kX, kSP, false)                          , RWI_W    , 0                         , 13 ), // #271
1818INST(Prfm             , BasePrfm           , (0b11111000101, 0b1111100110, 0b11111000100, 0b11011000)                              , RWI_R    , 0                         , 0  ), // #272
1819INST(Pssbb            , BaseOp             , (0b11010101000000110011010010011111)                                                  , 0         , 0                         , 15 ), // #273
1820INST(Rbit             , BaseRR             , (0b01011010110000000000000000000000, kWX, kZR, 0, kWX, kZR, 5, true)                  , RWI_W    , 0                         , 14 ), // #274
1821INST(Ret              , BaseBranchReg      , (0b11010110010111110000000000000000)                                                  , RWI_R    , 0                         , 2  ), // #275
1822INST(Rev              , BaseRev            , (_)                                                                                   , RWI_W    , 0                         , 0  ), // #276
1823INST(Rev16            , BaseRR             , (0b01011010110000000000010000000000, kWX, kZR, 0, kWX, kZR, 5, true)                  , RWI_W    , 0                         , 15 ), // #277
1824INST(Rev32            , BaseRR             , (0b11011010110000000000100000000000, kWX, kZR, 0, kWX, kZR, 5, true)                  , RWI_W    , 0                         , 16 ), // #278
1825INST(Rev64            , BaseRR             , (0b11011010110000000000110000000000, kWX, kZR, 0, kWX, kZR, 5, true)                  , RWI_W    , 0                         , 17 ), // #279
1826INST(Ror              , BaseShift          , (0b0001101011000000001011, 0b0001001110000000000000, 1)                               , RWI_W    , 0                         , 6  ), // #280
1827INST(Rorv             , BaseShift          , (0b0001101011000000001011, 0b0000000000000000000000, 1)                               , RWI_W    , 0                         , 7  ), // #281
1828INST(Sbc              , BaseRRR            , (0b0101101000000000000000, kWX, kZR, kWX, kZR, kWX, kZR, true)                        , RWI_W    , 0                         , 14 ), // #282
1829INST(Sbcs             , BaseRRR            , (0b0111101000000000000000, kWX, kZR, kWX, kZR, kWX, kZR, true)                        , RWI_W    , 0                         , 15 ), // #283
1830INST(Sbfiz            , BaseBfi            , (0b00010011000000000000000000000000)                                                  , RWI_W    , 0                         , 1  ), // #284
1831INST(Sbfm             , BaseBfm            , (0b00010011000000000000000000000000)                                                  , RWI_W    , 0                         , 1  ), // #285
1832INST(Sbfx             , BaseBfx            , (0b00010011000000000000000000000000)                                                  , RWI_W    , 0                         , 1  ), // #286
1833INST(Sdiv             , BaseRRR            , (0b0001101011000000000011, kWX, kZR, kWX, kZR, kWX, kZR, true)                        , RWI_W    , 0                         , 16 ), // #287
1834INST(Setf8            , BaseR              , (0b00111010000000000000100000001101, kW, kZR, 5)                                      , 0         , 0                         , 6  ), // #288
1835INST(Setf16           , BaseR              , (0b00111010000000000100100000001101, kW, kZR, 5)                                      , 0         , 0                         , 7  ), // #289
1836INST(Sev              , BaseOp             , (0b11010101000000110010000010011111)                                                  , 0         , 0                         , 16 ), // #290
1837INST(Sevl             , BaseOp             , (0b11010101000000110010000010111111)                                                  , 0         , 0                         , 17 ), // #291
1838INST(Smaddl           , BaseRRRR           , (0b1001101100100000000000, kX , kZR, kW , kZR, kW , kZR, kX , kZR, false)             , RWI_W    , 0                         , 2  ), // #292
1839INST(Smax             , BaseMinMax         , (0b00011010110000000110000000000000, 0b00010001110000000000000000000000)              , RWI_W    , 0                         , 0  ), // #293
1840INST(Smc              , BaseOpImm          , (0b11010100000000000000000000000011, 16, 5)                                           , 0         , 0                         , 12 ), // #294
1841INST(Smin             , BaseMinMax         , (0b00011010110000000110100000000000, 0b00010001110010000000000000000000)              , RWI_W    , 0                         , 1  ), // #295
1842INST(Smnegl           , BaseRRR            , (0b1001101100100000111111, kX , kZR, kW , kZR, kW , kZR, false)                       , RWI_W    , 0                         , 17 ), // #296
1843INST(Smsubl           , BaseRRRR           , (0b1001101100100000100000, kX , kZR, kW , kZR, kW , kZR, kX , kZR, false)             , RWI_W    , 0                         , 3  ), // #297
1844INST(Smulh            , BaseRRR            , (0b1001101101000000011111, kX , kZR, kX , kZR, kX , kZR, true)                        , RWI_W    , 0                         , 18 ), // #298
1845INST(Smull            , BaseRRR            , (0b1001101100100000011111, kX , kZR, kW , kZR, kW , kZR, false)                       , RWI_W    , 0                         , 19 ), // #299
1846INST(Ssbb             , BaseOp             , (0b11010101000000110011000010011111)                                                  , 0         , 0                         , 18 ), // #300
1847INST(St2g             , BaseRMSImm9       , (0b1101100110100000000010, 0b1101100110100000000001, kX, kSP, 0, 4)                   , RWI_RW   , 0                         , 13 ), // #301
1848INST(Stadd            , BaseAtomicSt       , (0b1011100000100000000000, kWX, 30)                                                   , RWI_RX   , 0                         , 0  ), // #302
1849INST(Staddl           , BaseAtomicSt       , (0b1011100001100000000000, kWX, 30)                                                   , RWI_RX   , 0                         , 1  ), // #303
1850INST(Staddb           , BaseAtomicSt       , (0b0011100000100000000000, kW , 0 )                                                   , RWI_RX   , 0                         , 2  ), // #304
1851INST(Staddlb          , BaseAtomicSt       , (0b0011100001100000000000, kW , 0 )                                                   , RWI_RX   , 0                         , 3  ), // #305
1852INST(Staddh           , BaseAtomicSt       , (0b0111100000100000000000, kW , 0 )                                                   , RWI_RX   , 0                         , 4  ), // #306
1853INST(Staddlh          , BaseAtomicSt       , (0b0111100001100000000000, kW , 0 )                                                   , RWI_RX   , 0                         , 5  ), // #307
1854INST(Stclr            , BaseAtomicSt       , (0b1011100000100000000100, kWX, 30)                                                   , RWI_RX   , 0                         , 6  ), // #308
1855INST(Stclrl           , BaseAtomicSt       , (0b1011100001100000000100, kWX, 30)                                                   , RWI_RX   , 0                         , 7  ), // #309
1856INST(Stclrb           , BaseAtomicSt       , (0b0011100000100000000100, kW , 0 )                                                   , RWI_RX   , 0                         , 8  ), // #310
1857INST(Stclrlb          , BaseAtomicSt       , (0b0011100001100000000100, kW , 0 )                                                   , RWI_RX   , 0                         , 9  ), // #311
1858INST(Stclrh           , BaseAtomicSt       , (0b0111100000100000000100, kW , 0 )                                                   , RWI_RX   , 0                         , 10 ), // #312
1859INST(Stclrlh          , BaseAtomicSt       , (0b0111100001100000000100, kW , 0 )                                                   , RWI_RX   , 0                         , 11 ), // #313
1860INST(Steor            , BaseAtomicSt       , (0b1011100000100000001000, kWX, 30)                                                   , RWI_RX   , 0                         , 12 ), // #314
1861INST(Steorl           , BaseAtomicSt       , (0b1011100001100000001000, kWX, 30)                                                   , RWI_RX   , 0                         , 13 ), // #315
1862INST(Steorb           , BaseAtomicSt       , (0b0011100000100000001000, kW , 0 )                                                   , RWI_RX   , 0                         , 14 ), // #316
1863INST(Steorlb          , BaseAtomicSt       , (0b0011100001100000001000, kW , 0 )                                                   , RWI_RX   , 0                         , 15 ), // #317
1864INST(Steorh           , BaseAtomicSt       , (0b0111100000100000001000, kW , 0 )                                                   , RWI_RX   , 0                         , 16 ), // #318
1865INST(Steorlh          , BaseAtomicSt       , (0b0111100001100000001000, kW , 0 )                                                   , RWI_RX   , 0                         , 17 ), // #319
1866INST(Stg              , BaseRMSImm9       , (0b1101100100100000000010, 0b1101100100100000000001, kX, kSP, 0, 4)                   , RWI_RW   , 0                         , 14 ), // #320
1867INST(Stgm             , BaseRMNoImm       , (0b1101100110100000000000, kX , kZR, 0 )                                              , RWI_RW   , 0                         , 13 ), // #321
1868INST(Stgp             , BaseLdpStp         , (0b0110100100, 0b0110100010, kX, 0, 4)                                                , RWI_RRW  , 0                         , 3  ), // #322
1869INST(Stllr            , BaseRMNoImm       , (0b1000100010011111011111, kWX, kZR, 30)                                              , RWI_RW   , 0                         , 14 ), // #323
1870INST(Stllrb           , BaseRMNoImm       , (0b0000100010011111011111, kW , kZR, 0 )                                              , RWI_RW   , 0                         , 15 ), // #324
1871INST(Stllrh           , BaseRMNoImm       , (0b0100100010011111011111, kW , kZR, 0 )                                              , RWI_RW   , 0                         , 16 ), // #325
1872INST(Stlr             , BaseRMNoImm       , (0b1000100010011111111111, kWX, kZR, 30)                                              , RWI_RW   , 0                         , 17 ), // #326
1873INST(Stlrb            , BaseRMNoImm       , (0b0000100010011111111111, kW , kZR, 0 )                                              , RWI_RW   , 0                         , 18 ), // #327
1874INST(Stlrh            , BaseRMNoImm       , (0b0100100010011111111111, kW , kZR, 0 )                                              , RWI_RW   , 0                         , 19 ), // #328
1875INST(Stlxp            , BaseStxp           , (0b1000100000100000100000, kWX, 30)                                                   , RWI_WRRX , 0                         , 0  ), // #329
1876INST(Stlxr            , BaseAtomicOp       , (0b1000100000000000111111, kWX, 30, 1)                                                , RWI_WRX  , 0                         , 108), // #330
1877INST(Stlxrb           , BaseAtomicOp       , (0b0000100000000000111111, kW , 0 , 1)                                                , RWI_WRX  , 0                         , 109), // #331
1878INST(Stlxrh           , BaseAtomicOp       , (0b0100100000000000111111, kW , 0 , 1)                                                , RWI_WRX  , 0                         , 110), // #332
1879INST(Stnp             , BaseLdpStp         , (0b0010100000, 0           , kWX, 31, 2)                                              , RWI_RRW  , 0                         , 4  ), // #333
1880INST(Stp              , BaseLdpStp         , (0b0010100100, 0b0010100010, kWX, 31, 2)                                              , RWI_RRW  , 0                         , 5  ), // #334
1881INST(Str              , BaseLdSt           , (0b1011100100, 0b10111000000, 0b10111000001, 0         , kWX, 30, 2, InstId::Stur)   , RWI_RW   , 0                         , 6  ), // #335
1882INST(Strb             , BaseLdSt           , (0b0011100100, 0b00111000000, 0b00111000001, 0         , kW , 30, 0, InstId::Sturb)  , RWI_RW   , 0                         , 7  ), // #336
1883INST(Strh             , BaseLdSt           , (0b0111100100, 0b01111000000, 0b01111000001, 0         , kWX, 30, 1, InstId::Sturh)  , RWI_RW   , 0                         , 8  ), // #337
1884INST(Stset            , BaseAtomicSt       , (0b1011100000100000001100, kWX, 30)                                                   , RWI_RX   , 0                         , 18 ), // #338
1885INST(Stsetl           , BaseAtomicSt       , (0b1011100001100000001100, kWX, 30)                                                   , RWI_RX   , 0                         , 19 ), // #339
1886INST(Stsetb           , BaseAtomicSt       , (0b0011100000100000001100, kW , 0 )                                                   , RWI_RX   , 0                         , 20 ), // #340
1887INST(Stsetlb          , BaseAtomicSt       , (0b0011100001100000001100, kW , 0 )                                                   , RWI_RX   , 0                         , 21 ), // #341
1888INST(Stseth           , BaseAtomicSt       , (0b0111100000100000001100, kW , 0 )                                                   , RWI_RX   , 0                         , 22 ), // #342
1889INST(Stsetlh          , BaseAtomicSt       , (0b0111100001100000001100, kW , 0 )                                                   , RWI_RX   , 0                         , 23 ), // #343
1890INST(Stsmax           , BaseAtomicSt       , (0b1011100000100000010000, kWX, 30)                                                   , RWI_RX   , 0                         , 24 ), // #344
1891INST(Stsmaxl          , BaseAtomicSt       , (0b1011100001100000010000, kWX, 30)                                                   , RWI_RX   , 0                         , 25 ), // #345
1892INST(Stsmaxb          , BaseAtomicSt       , (0b0011100000100000010000, kW , 0 )                                                   , RWI_RX   , 0                         , 26 ), // #346
1893INST(Stsmaxlb         , BaseAtomicSt       , (0b0011100001100000010000, kW , 0 )                                                   , RWI_RX   , 0                         , 27 ), // #347
1894INST(Stsmaxh          , BaseAtomicSt       , (0b0111100000100000010000, kW , 0 )                                                   , RWI_RX   , 0                         , 28 ), // #348
1895INST(Stsmaxlh         , BaseAtomicSt       , (0b0111100001100000010000, kW , 0 )                                                   , RWI_RX   , 0                         , 29 ), // #349
1896INST(Stsmin           , BaseAtomicSt       , (0b1011100000100000010100, kWX, 30)                                                   , RWI_RX   , 0                         , 30 ), // #350
1897INST(Stsminl          , BaseAtomicSt       , (0b1011100001100000010100, kWX, 30)                                                   , RWI_RX   , 0                         , 31 ), // #351
1898INST(Stsminb          , BaseAtomicSt       , (0b0011100000100000010100, kW , 0 )                                                   , RWI_RX   , 0                         , 32 ), // #352
1899INST(Stsminlb         , BaseAtomicSt       , (0b0011100001100000010100, kW , 0 )                                                   , RWI_RX   , 0                         , 33 ), // #353
1900INST(Stsminh          , BaseAtomicSt       , (0b0111100000100000010100, kW , 0 )                                                   , RWI_RX   , 0                         , 34 ), // #354
1901INST(Stsminlh         , BaseAtomicSt       , (0b0111100001100000010100, kW , 0 )                                                   , RWI_RX   , 0                         , 35 ), // #355
1902INST(Sttr             , BaseRMSImm9       , (0b1011100000000000000010, 0b0000000000000000000000, kWX, kZR, 30, 0)                 , RWI_RW   , 0                         , 15 ), // #356
1903INST(Sttrb            , BaseRMSImm9       , (0b0011100000000000000010, 0b0000000000000000000000, kW , kZR, 0 , 0)                 , RWI_RW   , 0                         , 16 ), // #357
1904INST(Sttrh            , BaseRMSImm9       , (0b0111100000000000000010, 0b0000000000000000000000, kW , kZR, 0 , 0)                 , RWI_RW   , 0                         , 17 ), // #358
1905INST(Stumax           , BaseAtomicSt       , (0b1011100000100000011000, kWX, 30)                                                   , RWI_RX   , 0                         , 36 ), // #359
1906INST(Stumaxl          , BaseAtomicSt       , (0b1011100001100000011000, kWX, 30)                                                   , RWI_RX   , 0                         , 37 ), // #360
1907INST(Stumaxb          , BaseAtomicSt       , (0b0011100000100000011000, kW , 0 )                                                   , RWI_RX   , 0                         , 38 ), // #361
1908INST(Stumaxlb         , BaseAtomicSt       , (0b0011100001100000011000, kW , 0 )                                                   , RWI_RX   , 0                         , 39 ), // #362
1909INST(Stumaxh          , BaseAtomicSt       , (0b0111100000100000011000, kW , 0 )                                                   , RWI_RX   , 0                         , 40 ), // #363
1910INST(Stumaxlh         , BaseAtomicSt       , (0b0111100001100000011000, kW , 0 )                                                   , RWI_RX   , 0                         , 41 ), // #364
1911INST(Stumin           , BaseAtomicSt       , (0b1011100000100000011100, kWX, 30)                                                   , RWI_RX   , 0                         , 42 ), // #365
1912INST(Stuminl          , BaseAtomicSt       , (0b1011100001100000011100, kWX, 30)                                                   , RWI_RX   , 0                         , 43 ), // #366
1913INST(Stuminb          , BaseAtomicSt       , (0b0011100000100000011100, kW , 0 )                                                   , RWI_RX   , 0                         , 44 ), // #367
1914INST(Stuminlb         , BaseAtomicSt       , (0b0011100001100000011100, kW , 0 )                                                   , RWI_RX   , 0                         , 45 ), // #368
1915INST(Stuminh          , BaseAtomicSt       , (0b0111100000100000011100, kW , 0 )                                                   , RWI_RX   , 0                         , 46 ), // #369
1916INST(Stuminlh         , BaseAtomicSt       , (0b0111100001100000011100, kW , 0 )                                                   , RWI_RX   , 0                         , 47 ), // #370
1917INST(Stur             , BaseRMSImm9       , (0b1011100000000000000000, 0b0000000000000000000000, kWX, kZR, 30, 0)                 , RWI_RW   , 0                         , 18 ), // #371
1918INST(Sturb            , BaseRMSImm9       , (0b0011100000000000000000, 0b0000000000000000000000, kW , kZR, 0 , 0)                 , RWI_RW   , 0                         , 19 ), // #372
1919INST(Sturh            , BaseRMSImm9       , (0b0111100000000000000000, 0b0000000000000000000000, kW , kZR, 0 , 0)                 , RWI_RW   , 0                         , 20 ), // #373
1920INST(Stxp             , BaseStxp           , (0b1000100000100000000000, kWX, 30)                                                   , RWI_WRRW , 0                         , 1  ), // #374
1921INST(Stxr             , BaseStx            , (0b1000100000000000011111, kWX, 30)                                                   , RWI_WRW  , 0                         , 0  ), // #375
1922INST(Stxrb            , BaseStx            , (0b0000100000000000011111, kW , 0 )                                                   , RWI_WRW  , 0                         , 1  ), // #376
1923INST(Stxrh            , BaseStx            , (0b0100100000000000011111, kW , 0 )                                                   , RWI_WRW  , 0                         , 2  ), // #377
1924INST(Stz2g            , BaseRMSImm9       , (0b1101100111100000000010, 0b1101100111100000000001, kX , kSP, 0, 4)                  , RWI_RW   , 0                         , 21 ), // #378
1925INST(Stzg             , BaseRMSImm9       , (0b1101100101100000000010, 0b1101100101100000000001, kX , kSP, 0, 4)                  , RWI_RW   , 0                         , 22 ), // #379
1926INST(Stzgm            , BaseRMNoImm       , (0b1101100100100000000000, kX , kZR, 0)                                               , RWI_RW   , 0                         , 20 ), // #380
1927INST(Sub              , BaseAddSub         , (0b1001011000, 0b1001011001, 0b1010001)                                               , RWI_W    , 0                         , 2  ), // #381
1928INST(Subg             , BaseRRII           , (0b1101000110000000000000, kX, kSP, kX, kSP, 6, 4, 16, 4, 0, 10)                      , RWI_W    , 0                         , 1  ), // #382
1929INST(Subp             , BaseRRR            , (0b1001101011000000000000, kX, kZR, kX, kSP, kX, kSP, false)                          , RWI_W    , 0                         , 20 ), // #383
1930INST(Subps            , BaseRRR            , (0b1011101011000000000000, kX, kZR, kX, kSP, kX, kSP, false)                          , RWI_W    , 0                         , 21 ), // #384
1931INST(Subs             , BaseAddSub         , (0b1101011000, 0b1101011001, 0b1110001)                                               , RWI_W    , 0                         , 3  ), // #385
1932INST(Svc              , BaseOpImm          , (0b11010100000000000000000000000001, 16, 5)                                           , 0         , 0                         , 13 ), // #386
1933INST(Swp              , BaseAtomicOp       , (0b1011100000100000100000, kWX, 30, 1)                                                , RWI_RWX  , 0                         , 111), // #387
1934INST(Swpa             , BaseAtomicOp       , (0b1011100010100000100000, kWX, 30, 1)                                                , RWI_RWX  , 0                         , 112), // #388
1935INST(Swpab            , BaseAtomicOp       , (0b0011100010100000100000, kW , 0 , 1)                                                , RWI_RWX  , 0                         , 113), // #389
1936INST(Swpah            , BaseAtomicOp       , (0b0111100010100000100000, kW , 0 , 1)                                                , RWI_RWX  , 0                         , 114), // #390
1937INST(Swpal            , BaseAtomicOp       , (0b1011100011100000100000, kWX, 30, 1)                                                , RWI_RWX  , 0                         , 115), // #391
1938INST(Swpalb           , BaseAtomicOp       , (0b0011100011100000100000, kW , 0 , 1)                                                , RWI_RWX  , 0                         , 116), // #392
1939INST(Swpalh           , BaseAtomicOp       , (0b0111100011100000100000, kW , 0 , 1)                                                , RWI_RWX  , 0                         , 117), // #393
1940INST(Swpb             , BaseAtomicOp       , (0b0011100000100000100000, kW , 0 , 1)                                                , RWI_RWX  , 0                         , 118), // #394
1941INST(Swph             , BaseAtomicOp       , (0b0111100000100000100000, kW , 0 , 1)                                                , RWI_RWX  , 0                         , 119), // #395
1942INST(Swpl             , BaseAtomicOp       , (0b1011100001100000100000, kWX, 30, 1)                                                , RWI_RWX  , 0                         , 120), // #396
1943INST(Swplb            , BaseAtomicOp       , (0b0011100001100000100000, kW , 0 , 1)                                                , RWI_RWX  , 0                         , 121), // #397
1944INST(Swplh            , BaseAtomicOp       , (0b0111100001100000100000, kW , 0 , 1)                                                , RWI_RWX  , 0                         , 122), // #398
1945INST(Sxtb             , BaseExtend         , (0b0001001100000000000111, kWX, 0)                                                    , RWI_W    , 0                         , 0  ), // #399
1946INST(Sxth             , BaseExtend         , (0b0001001100000000001111, kWX, 0)                                                    , RWI_W    , 0                         , 1  ), // #400
1947INST(Sxtw             , BaseExtend         , (0b1001001101000000011111, kX , 0)                                                    , RWI_W    , 0                         , 2  ), // #401
1948INST(Sys              , BaseSys            , (_)                                                                                   , RWI_W    , 0                         , 0  ), // #402
1949INST(Tlbi             , BaseAtDcIcTlbi     , (0b00011110000000, 0b00010000000000, false)                                           , RWI_RX   , 0                         , 3  ), // #403
1950INST(Tst              , BaseTst            , (0b1101010000, 0b111001000)                                                           , RWI_R    , 0                         , 0  ), // #404
1951INST(Tbnz             , BaseBranchTst      , (0b00110111000000000000000000000000)                                                  , RWI_R    , 0                         , 0  ), // #405
1952INST(Tbz              , BaseBranchTst      , (0b00110110000000000000000000000000)                                                  , RWI_R    , 0                         , 1  ), // #406
1953INST(Ubfiz            , BaseBfi            , (0b01010011000000000000000000000000)                                                  , RWI_W    , 0                         , 2  ), // #407
1954INST(Ubfm             , BaseBfm            , (0b01010011000000000000000000000000)                                                  , RWI_W    , 0                         , 2  ), // #408
1955INST(Ubfx             , BaseBfx            , (0b01010011000000000000000000000000)                                                  , RWI_W    , 0                         , 2  ), // #409
1956INST(Udf              , BaseOpImm          , (0b00000000000000000000000000000000, 16, 0)                                           , 0         , 0                         , 14 ), // #410
1957INST(Udiv             , BaseRRR            , (0b0001101011000000000010, kWX, kZR, kWX, kZR, kWX, kZR, true)                        , RWI_W    , 0                         , 22 ), // #411
1958INST(Umaddl           , BaseRRRR           , (0b1001101110100000000000, kX , kZR, kW , kZR, kW , kZR, kX , kZR, false)             , RWI_W    , 0                         , 4  ), // #412
1959INST(Umax             , BaseMinMax         , (0b00011010110000000110010000000000, 0b00010001110001000000000000000000)              , RWI_W    , 0                         , 2  ), // #413
1960INST(Umin             , BaseMinMax         , (0b00011010110000000110110000000000, 0b00010001110011000000000000000000)              , RWI_W    , 0                         , 3  ), // #414
1961INST(Umnegl           , BaseRRR            , (0b1001101110100000111111, kX , kZR, kW , kZR, kW , kZR, false)                       , RWI_W    , 0                         , 23 ), // #415
1962INST(Umull            , BaseRRR            , (0b1001101110100000011111, kX , kZR, kW , kZR, kW , kZR, false)                       , RWI_W    , 0                         , 24 ), // #416
1963INST(Umulh            , BaseRRR            , (0b1001101111000000011111, kX , kZR, kX , kZR, kX , kZR, false)                       , RWI_W    , 0                         , 25 ), // #417
1964INST(Umsubl           , BaseRRRR           , (0b1001101110100000100000, kX , kZR, kW , kZR, kW , kZR, kX , kZR, false)             , RWI_W    , 0                         , 5  ), // #418
1965INST(Uxtb             , BaseExtend         , (0b0101001100000000000111, kW, 1)                                                     , RWI_W    , 0                         , 3  ), // #419
1966INST(Uxth             , BaseExtend         , (0b0101001100000000001111, kW, 1)                                                     , RWI_W    , 0                         , 4  ), // #420
1967INST(Wfe              , BaseOp             , (0b11010101000000110010000001011111)                                                  , 0         , 0                         , 19 ), // #421
1968INST(Wfi              , BaseOp             , (0b11010101000000110010000001111111)                                                  , 0         , 0                         , 20 ), // #422
1969INST(Xaflag           , BaseOp             , (0b11010101000000000100000000111111)                                                  , 0         , 0                         , 21 ), // #423
1970INST(Xpacd            , BaseR              , (0b11011010110000010100011111100000, kX, kZR, 0)                                      , RWI_X    , 0                         , 8  ), // #424
1971INST(Xpaci            , BaseR              , (0b11011010110000010100001111100000, kX, kZR, 0)                                      , RWI_X    , 0                         , 9  ), // #425
1972INST(Xpaclri          , BaseOp             , (0b11010101000000110010000011111111)                                                  , RWI_X    , 0                         , 22 ), // #426
1973INST(Yield            , BaseOp             , (0b11010101000000110010000000111111)                                                  , 0         , 0                         , 23 ), // #427
1974INST(Abs_v            , ISimdVV            , (0b0000111000100000101110, kVO_V_Any)                                                 , RWI_W    , 0                         , 0  ), // #428
1975INST(Add_v            , ISimdVVV           , (0b0000111000100000100001, kVO_V_Any)                                                 , RWI_W    , 0                         , 0  ), // #429
1976INST(Addhn_v          , ISimdVVV           , (0b0000111000100000010000, kVO_V_B8H4S2)                                              , RWI_W    , F!(Narrow)                 , 1  ), // #430
1977INST(Addhn2_v         , ISimdVVV           , (0b0100111000100000010000, kVO_V_B16H8S4)                                             , RWI_W    , F!(Narrow)                 , 2  ), // #431
1978INST(Addp_v           , ISimdPair          , (0b0101111000110001101110, 0b0000111000100000101111, kVO_V_Any)                       , RWI_W    , F!(Pair)                   , 0  ), // #432
1979INST(Addv_v           , ISimdSV            , (0b0000111000110001101110, kVO_V_BH_4S)                                               , RWI_W    , 0                         , 0  ), // #433
1980INST(Aesd_v           , ISimdVVx           , (0b0100111000101000010110, kOp_V16B, kOp_V16B)                                        , RWI_X    , 0                         , 0  ), // #434
1981INST(Aese_v           , ISimdVVx           , (0b0100111000101000010010, kOp_V16B, kOp_V16B)                                        , RWI_X    , 0                         , 1  ), // #435
1982INST(Aesimc_v         , ISimdVVx           , (0b0100111000101000011110, kOp_V16B, kOp_V16B)                                        , RWI_W    , 0                         , 2  ), // #436
1983INST(Aesmc_v          , ISimdVVx           , (0b0100111000101000011010, kOp_V16B, kOp_V16B)                                        , RWI_W    , 0                         , 3  ), // #437
1984INST(And_v            , ISimdVVV           , (0b0000111000100000000111, kVO_V_B)                                                   , RWI_W    , 0                         , 3  ), // #438
1985INST(Bcax_v           , ISimdVVVV          , (0b1100111000100000000000, kVO_V_B16)                                                 , RWI_W    , 0                         , 0  ), // #439
1986INST(Bfcvt_v          , ISimdVVx           , (0b0001111001100011010000, kOp_H, kOp_S)                                              , RWI_W    , 0                         , 4  ), // #440
1987INST(Bfcvtn_v         , ISimdVVx           , (0b0000111010100001011010, kOp_V4H, kOp_V4S)                                          , RWI_W    , F!(Narrow)                 , 5  ), // #441
1988INST(Bfcvtn2_v        , ISimdVVx           , (0b0100111010100001011010, kOp_V8H, kOp_V4S)                                          , RWI_W    , F!(Narrow)                 , 6  ), // #442
1989INST(Bfdot_v          , SimdDot            , (0b0010111001000000111111, 0b0000111101000000111100, kET_S, kET_H, kET_2H)            , RWI_X    , 0                         , 0  ), // #443
1990INST(Bfmlalb_v        , SimdFmlal          , (0b0010111011000000111111, 0b0000111111000000111100, 0, kET_S, kET_H, kET_H)          , RWI_X    , F!(VH0_15)                 , 0  ), // #444
1991INST(Bfmlalt_v        , SimdFmlal          , (0b0110111011000000111111, 0b0100111111000000111100, 0, kET_S, kET_H, kET_H)          , RWI_X    , F!(VH0_15)                 , 1  ), // #445
1992INST(Bfmmla_v         , ISimdVVVx          , (0b0110111001000000111011, kOp_V4S, kOp_V8H, kOp_V8H)                                 , RWI_X    , F!(Long)                   , 0  ), // #446
1993INST(Bic_v            , SimdBicOrr         , (0b0000111001100000000111, 0b0010111100000000000001)                                  , RWI_W    , 0                         , 0  ), // #447
1994INST(Bif_v            , ISimdVVV           , (0b0010111011100000000111, kVO_V_B)                                                   , RWI_X    , 0                         , 4  ), // #448
1995INST(Bit_v            , ISimdVVV           , (0b0010111010100000000111, kVO_V_B)                                                   , RWI_X    , 0                         , 5  ), // #449
1996INST(Bsl_v            , ISimdVVV           , (0b0010111001100000000111, kVO_V_B)                                                   , RWI_X    , 0                         , 6  ), // #450
1997INST(Cls_v            , ISimdVV            , (0b0000111000100000010010, kVO_V_BHS)                                                 , RWI_W    , 0                         , 1  ), // #451
1998INST(Clz_v            , ISimdVV            , (0b0010111000100000010010, kVO_V_BHS)                                                 , RWI_W    , 0                         , 2  ), // #452
1999INST(Cmeq_v           , SimdCmp            , (0b0010111000100000100011, 0b0000111000100000100110, kVO_V_Any)                       , RWI_W    , 0                         , 0  ), // #453
2000INST(Cmge_v           , SimdCmp            , (0b0000111000100000001111, 0b0010111000100000100010, kVO_V_Any)                       , RWI_W    , 0                         , 1  ), // #454
2001INST(Cmgt_v           , SimdCmp            , (0b0000111000100000001101, 0b0000111000100000100010, kVO_V_Any)                       , RWI_W    , 0                         , 2  ), // #455
2002INST(Cmhi_v           , SimdCmp            , (0b0010111000100000001101, 0b0000000000000000000000, kVO_V_Any)                       , RWI_W    , 0                         , 3  ), // #456
2003INST(Cmhs_v           , SimdCmp            , (0b0010111000100000001111, 0b0000000000000000000000, kVO_V_Any)                       , RWI_W    , 0                         , 4  ), // #457
2004INST(Cmle_v           , SimdCmp            , (0b0000000000000000000000, 0b0010111000100000100110, kVO_V_Any)                       , RWI_W    , 0                         , 5  ), // #458
2005INST(Cmlt_v           , SimdCmp            , (0b0000000000000000000000, 0b0000111000100000101010, kVO_V_Any)                       , RWI_W    , 0                         , 6  ), // #459
2006INST(Cmtst_v          , ISimdVVV           , (0b0000111000100000100011, kVO_V_Any)                                                 , RWI_W    , 0                         , 7  ), // #460
2007INST(Cnt_v            , ISimdVV            , (0b0000111000100000010110, kVO_V_B)                                                   , RWI_W    , 0                         , 3  ), // #461
2008INST(Dup_v            , SimdDup            , (_)                                                                                   , RWI_W    , 0                         , 0  ), // #462
2009INST(Eor_v            , ISimdVVV           , (0b0010111000100000000111, kVO_V_B)                                                   , RWI_W    , 0                         , 8  ), // #463
2010INST(Eor3_v           , ISimdVVVV          , (0b1100111000000000000000, kVO_V_B16)                                                 , RWI_W    , 0                         , 1  ), // #464
2011INST(Ext_v            , ISimdVVVI          , (0b0010111000000000000000, kVO_V_B, 4, 11, 1)                                         , RWI_W    , 0                         , 0  ), // #465
2012INST(Fabd_v           , FSimdVVV           , (0b0111111010100000110101, kHF_C, 0b0010111010100000110101, kHF_C)                    , RWI_W    , 0                         , 0  ), // #466
2013INST(Fabs_v           , FSimdVV            , (0b0001111000100000110000, kHF_A, 0b0000111010100000111110, kHF_B)                    , RWI_W    , 0                         , 0  ), // #467
2014INST(Facge_v          , FSimdVVV           , (0b0111111000100000111011, kHF_C, 0b0010111000100000111011, kHF_C)                    , RWI_W    , 0                         , 1  ), // #468
2015INST(Facgt_v          , FSimdVVV           , (0b0111111010100000111011, kHF_C, 0b0010111010100000111011, kHF_C)                    , RWI_W    , 0                         , 2  ), // #469
2016INST(Fadd_v           , FSimdVVV           , (0b0001111000100000001010, kHF_A, 0b0000111000100000110101, kHF_C)                    , RWI_W    , 0                         , 3  ), // #470
2017INST(Faddp_v          , FSimdPair          , (0b0111111000110000110110, 0b0010111000100000110101)                                  , RWI_W    , 0                         , 0  ), // #471
2018INST(Fcadd_v          , SimdFcadd          , (0b0010111000000000111001)                                                            , RWI_W    , 0                         , 0  ), // #472
2019INST(Fccmp_v          , SimdFccmpFccmpe    , (0b00011110001000000000010000000000)                                                  , RWI_R    , 0                         , 0  ), // #473
2020INST(Fccmpe_v         , SimdFccmpFccmpe    , (0b00011110001000000000010000010000)                                                  , RWI_R    , 0                         , 1  ), // #474
2021INST(Fcmeq_v          , SimdFcm            , (0b0000111000100000111001, kHF_C, 0b0000111010100000110110)                           , RWI_W    , 0                         , 0  ), // #475
2022INST(Fcmge_v          , SimdFcm            , (0b0010111000100000111001, kHF_C, 0b0010111010100000110010)                           , RWI_W    , 0                         , 1  ), // #476
2023INST(Fcmgt_v          , SimdFcm            , (0b0010111010100000111001, kHF_C, 0b0000111010100000110010)                           , RWI_W    , 0                         , 2  ), // #477
2024INST(Fcmla_v          , SimdFcmla          , (0b0010111000000000110001, 0b0010111100000000000100)                                  , RWI_X    , 0                         , 0  ), // #478
2025INST(Fcmle_v          , SimdFcm            , (0b0000000000000000000000, kHF_C, 0b0010111010100000110110)                           , RWI_W    , 0                         , 3  ), // #479
2026INST(Fcmlt_v          , SimdFcm            , (0b0000000000000000000000, kHF_C, 0b0000111010100000111010)                           , RWI_W    , 0                         , 4  ), // #480
2027INST(Fcmp_v           , SimdFcmpFcmpe      , (0b00011110001000000010000000000000)                                                  , RWI_R    , 0                         , 0  ), // #481
2028INST(Fcmpe_v          , SimdFcmpFcmpe      , (0b00011110001000000010000000010000)                                                  , RWI_R    , 0                         , 1  ), // #482
2029INST(Fcsel_v          , SimdFcsel          , (_)                                                                                   , RWI_W    , 0                         , 0  ), // #483
2030INST(Fcvt_v           , SimdFcvt           , (_)                                                                                   , RWI_W    , 0                         , 0  ), // #484
2031INST(Fcvtas_v         , SimdFcvtSV         , (0b0000111000100001110010, 0b0000000000000000000000, 0b0001111000100100000000, 1)     , RWI_W    , 0                         , 0  ), // #485
2032INST(Fcvtau_v         , SimdFcvtSV         , (0b0010111000100001110010, 0b0000000000000000000000, 0b0001111000100101000000, 1)     , RWI_W    , 0                         , 1  ), // #486
2033INST(Fcvtl_v          , SimdFcvtLN         , (0b0000111000100001011110, 0, 0)                                                      , RWI_W    , F!(Long)                   , 0  ), // #487
2034INST(Fcvtl2_v         , SimdFcvtLN         , (0b0100111000100001011110, 0, 0)                                                      , RWI_W    , F!(Long)                   , 1  ), // #488
2035INST(Fcvtms_v         , SimdFcvtSV         , (0b0000111000100001101110, 0b0000000000000000000000, 0b0001111000110000000000, 1)     , RWI_W    , 0                         , 2  ), // #489
2036INST(Fcvtmu_v         , SimdFcvtSV         , (0b0010111000100001101110, 0b0000000000000000000000, 0b0001111000110001000000, 1)     , RWI_W    , 0                         , 3  ), // #490
2037INST(Fcvtn_v          , SimdFcvtLN         , (0b0000111000100001011010, 0, 0)                                                      , RWI_W    , F!(Narrow)                 , 2  ), // #491
2038INST(Fcvtn2_v         , SimdFcvtLN         , (0b0100111000100001011010, 0, 0)                                                      , RWI_X    , F!(Narrow)                 , 3  ), // #492
2039INST(Fcvtns_v         , SimdFcvtSV         , (0b0000111000100001101010, 0b0000000000000000000000, 0b0001111000100000000000, 1)     , RWI_W    , 0                         , 4  ), // #493
2040INST(Fcvtnu_v         , SimdFcvtSV         , (0b0010111000100001101010, 0b0000000000000000000000, 0b0001111000100001000000, 1)     , RWI_W    , 0                         , 5  ), // #494
2041INST(Fcvtps_v         , SimdFcvtSV         , (0b0000111010100001101010, 0b0000000000000000000000, 0b0001111000101000000000, 1)     , RWI_W    , 0                         , 6  ), // #495
2042INST(Fcvtpu_v         , SimdFcvtSV         , (0b0010111010100001101010, 0b0000000000000000000000, 0b0001111000101001000000, 1)     , RWI_W    , 0                         , 7  ), // #496
2043INST(Fcvtxn_v         , SimdFcvtLN         , (0b0010111000100001011010, 1, 1)                                                      , RWI_W    , F!(Narrow)                 , 4  ), // #497
2044INST(Fcvtxn2_v        , SimdFcvtLN         , (0b0110111000100001011010, 1, 0)                                                      , RWI_X    , F!(Narrow)                 , 5  ), // #498
2045INST(Fcvtzs_v         , SimdFcvtSV         , (0b0000111010100001101110, 0b0000111100000000111111, 0b0001111000111000000000, 1)     , RWI_W    , 0                         , 8  ), // #499
2046INST(Fcvtzu_v         , SimdFcvtSV         , (0b0010111010100001101110, 0b0010111100000000111111, 0b0001111000111001000000, 1)     , RWI_W    , 0                         , 9  ), // #500
2047INST(Fdiv_v           , FSimdVVV           , (0b0001111000100000000110, kHF_A, 0b0010111000100000111111, kHF_C)                    , RWI_W    , 0                         , 4  ), // #501
2048INST(Fjcvtzs_v        , ISimdVVx           , (0b0001111001111110000000, kOp_GpW, kOp_D)                                            , RWI_W    , 0                         , 7  ), // #502
2049INST(Fmadd_v          , FSimdVVVV          , (0b0001111100000000000000, kHF_A, 0b0000000000000000000000, kHF_N)                    , RWI_W    , 0                         , 0  ), // #503
2050INST(Fmax_v           , FSimdVVV           , (0b0001111000100000010010, kHF_A, 0b0000111000100000111101, kHF_C)                    , RWI_W    , 0                         , 5  ), // #504
2051INST(Fmaxnm_v         , FSimdVVV           , (0b0001111000100000011010, kHF_A, 0b0000111000100000110001, kHF_C)                    , RWI_W    , 0                         , 6  ), // #505
2052INST(Fmaxnmp_v        , FSimdPair          , (0b0111111000110000110010, 0b0010111000100000110001)                                  , RWI_W    , 0                         , 1  ), // #506
2053INST(Fmaxnmv_v        , FSimdSV            , (0b0010111000110000110010)                                                            , RWI_W    , 0                         , 0  ), // #507
2054INST(Fmaxp_v          , FSimdPair          , (0b0111111000110000111110, 0b0010111000100000111101)                                  , RWI_W    , 0                         , 2  ), // #508
2055INST(Fmaxv_v          , FSimdSV            , (0b0010111000110000111110)                                                            , RWI_W    , 0                         , 1  ), // #509
2056INST(Fmin_v           , FSimdVVV           , (0b0001111000100000010110, kHF_A, 0b0000111010100000111101, kHF_C)                    , RWI_W    , 0                         , 7  ), // #510
2057INST(Fminnm_v         , FSimdVVV           , (0b0001111000100000011110, kHF_A, 0b0000111010100000110001, kHF_C)                    , RWI_W    , 0                         , 8  ), // #511
2058INST(Fminnmp_v        , FSimdPair          , (0b0111111010110000110010, 0b0010111010100000110001)                                  , RWI_W    , 0                         , 3  ), // #512
2059INST(Fminnmv_v        , FSimdSV            , (0b0010111010110000110010)                                                            , RWI_W    , 0                         , 2  ), // #513
2060INST(Fminp_v          , FSimdPair          , (0b0111111010110000111110, 0b0010111010100000111101)                                  , RWI_W    , 0                         , 4  ), // #514
2061INST(Fminv_v          , FSimdSV            , (0b0010111010110000111110)                                                            , RWI_W    , 0                         , 3  ), // #515
2062INST(Fmla_v           , FSimdVVVe          , (0b0000000000000000000000, kHF_N, 0b0000111000100000110011, 0b0000111110000000000100) , RWI_X    , F!(VH0_15)                 , 0  ), // #516
2063INST(Fmlal_v          , SimdFmlal          , (0b0000111000100000111011, 0b0000111110000000000000, 1, kET_S, kET_H, kET_H)          , RWI_X    , F!(VH0_15)                 , 2  ), // #517
2064INST(Fmlal2_v         , SimdFmlal          , (0b0010111000100000110011, 0b0010111110000000100000, 1, kET_S, kET_H, kET_H)          , RWI_X    , F!(VH0_15)                 , 3  ), // #518
2065INST(Fmls_v           , FSimdVVVe          , (0b0000000000000000000000, kHF_N, 0b0000111010100000110011, 0b0000111110000000010100) , RWI_X    , F!(VH0_15)                 , 1  ), // #519
2066INST(Fmlsl_v          , SimdFmlal          , (0b0000111010100000111011, 0b0000111110000000010000, 1, kET_S, kET_H, kET_H)          , RWI_X    , F!(VH0_15)                 , 4  ), // #520
2067INST(Fmlsl2_v         , SimdFmlal          , (0b0010111010100000110011, 0b0010111110000000110000, 1, kET_S, kET_H, kET_H)          , RWI_X    , F!(VH0_15)                 , 5  ), // #521
2068INST(Fmov_v           , SimdFmov           , (_)                                                                                   , RWI_W    , 0                         , 0  ), // #522
2069INST(Fmsub_v          , FSimdVVVV          , (0b0001111100000000100000, kHF_A, 0b0000000000000000000000, kHF_N)                    , RWI_W    , 0                         , 1  ), // #523
2070INST(Fmul_v           , FSimdVVVe          , (0b0001111000100000000010, kHF_A, 0b0010111000100000110111, 0b0000111110000000100100) , RWI_W    , F!(VH0_15)                 , 2  ), // #524
2071INST(Fmulx_v          , FSimdVVVe          , (0b0101111000100000110111, kHF_C, 0b0000111000100000110111, 0b0010111110000000100100) , RWI_W    , F!(VH0_15)                 , 3  ), // #525
2072INST(Fneg_v           , FSimdVV            , (0b0001111000100001010000, kHF_A, 0b0010111010100000111110, kHF_B)                    , RWI_W    , 0                         , 1  ), // #526
2073INST(Fnmadd_v         , FSimdVVVV          , (0b0001111100100000000000, kHF_A, 0b0000000000000000000000, kHF_N)                    , RWI_W    , 0                         , 2  ), // #527
2074INST(Fnmsub_v         , FSimdVVVV          , (0b0001111100100000100000, kHF_A, 0b0000000000000000000000, kHF_N)                    , RWI_W    , 0                         , 3  ), // #528
2075INST(Fnmul_v          , FSimdVVV           , (0b0001111000100000100010, kHF_A, 0b0000000000000000000000, kHF_N)                    , RWI_W    , 0                         , 9  ), // #529
2076INST(Frecpe_v         , FSimdVV            , (0b0101111010100001110110, kHF_B, 0b0000111010100001110110, kHF_B)                    , RWI_W    , 0                         , 2  ), // #530
2077INST(Frecps_v         , FSimdVVV           , (0b0101111000100000111111, kHF_C, 0b0000111000100000111111, kHF_C)                    , RWI_W    , 0                         , 10 ), // #531
2078INST(Frecpx_v         , FSimdVV            , (0b0101111010100001111110, kHF_B, 0b0000000000000000000000, kHF_N)                    , RWI_W    , 0                         , 3  ), // #532
2079INST(Frint32x_v       , FSimdVV            , (0b0001111000101000110000, kHF_N, 0b0010111000100001111010, kHF_N)                    , RWI_W    , 0                         , 4  ), // #533
2080INST(Frint32z_v       , FSimdVV            , (0b0001111000101000010000, kHF_N, 0b0000111000100001111010, kHF_N)                    , RWI_W    , 0                         , 5  ), // #534
2081INST(Frint64x_v       , FSimdVV            , (0b0001111000101001110000, kHF_N, 0b0010111000100001111110, kHF_N)                    , RWI_W    , 0                         , 6  ), // #535
2082INST(Frint64z_v       , FSimdVV            , (0b0001111000101001010000, kHF_N, 0b0000111000100001111110, kHF_N)                    , RWI_W    , 0                         , 7  ), // #536
2083INST(Frinta_v         , FSimdVV            , (0b0001111000100110010000, kHF_A, 0b0010111000100001100010, kHF_B)                    , RWI_W    , 0                         , 8  ), // #537
2084INST(Frinti_v         , FSimdVV            , (0b0001111000100111110000, kHF_A, 0b0010111010100001100110, kHF_B)                    , RWI_W    , 0                         , 9  ), // #538
2085INST(Frintm_v         , FSimdVV            , (0b0001111000100101010000, kHF_A, 0b0000111000100001100110, kHF_B)                    , RWI_W    , 0                         , 10 ), // #539
2086INST(Frintn_v         , FSimdVV            , (0b0001111000100100010000, kHF_A, 0b0000111000100001100010, kHF_B)                    , RWI_W    , 0                         , 11 ), // #540
2087INST(Frintp_v         , FSimdVV            , (0b0001111000100100110000, kHF_A, 0b0000111010100001100010, kHF_B)                    , RWI_W    , 0                         , 12 ), // #541
2088INST(Frintx_v         , FSimdVV            , (0b0001111000100111010000, kHF_A, 0b0010111000100001100110, kHF_B)                    , RWI_W    , 0                         , 13 ), // #542
2089INST(Frintz_v         , FSimdVV            , (0b0001111000100101110000, kHF_A, 0b0000111010100001100110, kHF_B)                    , RWI_W    , 0                         , 14 ), // #543
2090INST(Frsqrte_v        , FSimdVV            , (0b0111111010100001110110, kHF_B, 0b0010111010100001110110, kHF_B)                    , RWI_W    , 0                         , 15 ), // #544
2091INST(Frsqrts_v        , FSimdVVV           , (0b0101111010100000111111, kHF_C, 0b0000111010100000111111, kHF_C)                    , RWI_W    , 0                         , 11 ), // #545
2092INST(Fsqrt_v          , FSimdVV            , (0b0001111000100001110000, kHF_A, 0b0010111010100001111110, kHF_B)                    , RWI_W    , 0                         , 16 ), // #546
2093INST(Fsub_v           , FSimdVVV           , (0b0001111000100000001110, kHF_A, 0b0000111010100000110101, kHF_C)                    , RWI_W    , 0                         , 12 ), // #547
2094INST(Ins_v            , SimdIns            , (_)                                                                                   , RWI_X    , 0                         , 0  ), // #548
2095INST(Ld1_v            , SimdLdNStN         , (0b0000110101000000000000, 0b0000110001000000001000, 1, 0)                            , RWI_LDN  , F!(Consecutive)            , 0  ), // #549
2096INST(Ld1r_v           , SimdLdNStN         , (0b0000110101000000110000, 0b0000000000000000000000, 1, 1)                            , RWI_LDN  , F!(Consecutive)            , 1  ), // #550
2097INST(Ld2_v            , SimdLdNStN         , (0b0000110101100000000000, 0b0000110001000000100000, 2, 0)                            , RWI_LDN  , F!(Consecutive)            , 2  ), // #551
2098INST(Ld2r_v           , SimdLdNStN         , (0b0000110101100000110000, 0b0000000000000000000000, 2, 1)                            , RWI_LDN  , F!(Consecutive)            , 3  ), // #552
2099INST(Ld3_v            , SimdLdNStN         , (0b0000110101000000001000, 0b0000110001000000010000, 3, 0)                            , RWI_LDN  , F!(Consecutive)            , 4  ), // #553
2100INST(Ld3r_v           , SimdLdNStN         , (0b0000110101000000111000, 0b0000000000000000000000, 3, 1)                            , RWI_LDN  , F!(Consecutive)            , 5  ), // #554
2101INST(Ld4_v            , SimdLdNStN         , (0b0000110101100000001000, 0b0000110001000000000000, 4, 0)                            , RWI_LDN  , F!(Consecutive)            , 6  ), // #555
2102INST(Ld4r_v           , SimdLdNStN         , (0b0000110101100000111000, 0b0000000000000000000000, 4, 1)                            , RWI_LDN  , F!(Consecutive)            , 7  ), // #556
2103INST(Ldnp_v           , SimdLdpStp         , (0b0010110001, 0b0000000000)                                                          , RWI_WW   , 0                         , 0  ), // #557
2104INST(Ldp_v            , SimdLdpStp         , (0b0010110101, 0b0010110011)                                                          , RWI_WW   , 0                         , 1  ), // #558
2105INST(Ldr_v            , SimdLdSt           , (0b0011110101, 0b00111100010, 0b00111100011, 0b00011100, InstId::Ldur_v)             , RWI_W    , 0                         , 0  ), // #559
2106INST(Ldur_v           , SimdLdurStur       , (0b0011110001000000000000)                                                            , RWI_W    , 0                         , 0  ), // #560
2107INST(Mla_v            , ISimdVVVe          , (0b0000111000100000100101, kVO_V_BHS, 0b0010111100000000000000, kVO_V_HS)             , RWI_X    , F!(VH0_15)                 , 0  ), // #561
2108INST(Mls_v            , ISimdVVVe          , (0b0010111000100000100101, kVO_V_BHS, 0b0010111100000000010000, kVO_V_HS)             , RWI_X    , F!(VH0_15)                 , 1  ), // #562
2109INST(Mov_v            , SimdMov            , (_)                                                                                   , RWI_W    , 0                         , 0  ), // #563
2110INST(Movi_v           , SimdMoviMvni       , (0b0000111100000000000001, 0)                                                         , RWI_W    , 0                         , 0  ), // #564
2111INST(Mul_v            , ISimdVVVe          , (0b0000111000100000100111, kVO_V_BHS, 0b0000111100000000100000, kVO_V_HS)             , RWI_W    , F!(VH0_15)                 , 2  ), // #565
2112INST(Mvn_v            , ISimdVV            , (0b0010111000100000010110, kVO_V_B)                                                   , RWI_W    , 0                         , 4  ), // #566
2113INST(Mvni_v           , SimdMoviMvni       , (0b0000111100000000000001, 1)                                                         , RWI_W    , 0                         , 1  ), // #567
2114INST(Neg_v            , ISimdVV            , (0b0010111000100000101110, kVO_V_Any)                                                 , RWI_W    , 0                         , 5  ), // #568
2115INST(Not_v            , ISimdVV            , (0b0010111000100000010110, kVO_V_B)                                                   , RWI_W    , 0                         , 6  ), // #569
2116INST(Orn_v            , ISimdVVV           , (0b0000111011100000000111, kVO_V_B)                                                   , RWI_W    , 0                         , 9  ), // #570
2117INST(Orr_v            , SimdBicOrr         , (0b0000111010100000000111, 0b0000111100000000000001)                                  , RWI_W    , 0                         , 1  ), // #571
2118INST(Pmul_v           , ISimdVVV           , (0b0010111000100000100111, kVO_V_B)                                                   , RWI_W    , 0                         , 10 ), // #572
2119INST(Pmull_v          , ISimdVVV           , (0b0000111000100000111000, kVO_V_B8D1)                                                , RWI_W    , F!(Long)                   , 11 ), // #573
2120INST(Pmull2_v         , ISimdVVV           , (0b0100111000100000111000, kVO_V_B16D2)                                               , RWI_W    , F!(Long)                   , 12 ), // #574
2121INST(Raddhn_v         , ISimdVVV           , (0b0010111000100000010000, kVO_V_B8H4S2)                                              , RWI_W    , F!(Narrow)                 , 13 ), // #575
2122INST(Raddhn2_v        , ISimdVVV           , (0b0110111000100000010000, kVO_V_B16H8S4)                                             , RWI_X    , F!(Narrow)                 , 14 ), // #576
2123INST(Rax1_v           , ISimdVVV           , (0b1100111001100000100011, kVO_V_D2)                                                  , RWI_W    , 0                         , 15 ), // #577
2124INST(Rbit_v           , ISimdVV            , (0b0010111001100000010110, kVO_V_B)                                                   , RWI_W    , 0                         , 7  ), // #578
2125INST(Rev16_v          , ISimdVV            , (0b0000111000100000000110, kVO_V_B)                                                   , RWI_W    , 0                         , 8  ), // #579
2126INST(Rev32_v          , ISimdVV            , (0b0010111000100000000010, kVO_V_BH)                                                  , RWI_W    , 0                         , 9  ), // #580
2127INST(Rev64_v          , ISimdVV            , (0b0000111000100000000010, kVO_V_BHS)                                                 , RWI_W    , 0                         , 10 ), // #581
2128INST(Rshrn_v          , SimdShift          , (0b0000000000000000000000, 0b0000111100000000100011, 1, kVO_V_B8H4S2)                 , RWI_W    , F!(Narrow)                 , 0  ), // #582
2129INST(Rshrn2_v         , SimdShift          , (0b0000000000000000000000, 0b0100111100000000100011, 1, kVO_V_B16H8S4)                , RWI_X    , F!(Narrow)                 , 1  ), // #583
2130INST(Rsubhn_v         , ISimdVVV           , (0b0010111000100000011000, kVO_V_B8H4S2)                                              , RWI_W    , F!(Narrow)                 , 16 ), // #584
2131INST(Rsubhn2_v        , ISimdVVV           , (0b0110111000100000011000, kVO_V_B16H8S4)                                             , RWI_X    , F!(Narrow)                 , 17 ), // #585
2132INST(Saba_v           , ISimdVVV           , (0b0000111000100000011111, kVO_V_BHS)                                                 , RWI_X    , 0                         , 18 ), // #586
2133INST(Sabal_v          , ISimdVVV           , (0b0000111000100000010100, kVO_V_B8H4S2)                                              , RWI_X    , F!(Long)                   , 19 ), // #587
2134INST(Sabal2_v         , ISimdVVV           , (0b0100111000100000010100, kVO_V_B16H8S4)                                             , RWI_X    , F!(Long)                   , 20 ), // #588
2135INST(Sabd_v           , ISimdVVV           , (0b0000111000100000011101, kVO_V_BHS)                                                 , RWI_W    , 0                         , 21 ), // #589
2136INST(Sabdl_v          , ISimdVVV           , (0b0000111000100000011100, kVO_V_B8H4S2)                                              , RWI_W    , F!(Long)                   , 22 ), // #590
2137INST(Sabdl2_v         , ISimdVVV           , (0b0100111000100000011100, kVO_V_B16H8S4)                                             , RWI_W    , F!(Long)                   , 23 ), // #591
2138INST(Sadalp_v         , ISimdVV            , (0b0000111000100000011010, kVO_V_BHS)                                                 , RWI_X    , F!(Long) | F!(Pair)         , 11 ), // #592
2139INST(Saddl_v          , ISimdVVV           , (0b0000111000100000000000, kVO_V_B8H4S2)                                              , RWI_W    , F!(Long)                   , 24 ), // #593
2140INST(Saddl2_v         , ISimdVVV           , (0b0100111000100000000000, kVO_V_B16H8S4)                                             , RWI_W    , F!(Long)                   , 25 ), // #594
2141INST(Saddlp_v         , ISimdVV            , (0b0000111000100000001010, kVO_V_BHS)                                                 , RWI_W    , F!(Long) | F!(Pair)         , 12 ), // #595
2142INST(Saddlv_v         , ISimdSV            , (0b0000111000110000001110, kVO_V_BH_4S)                                               , RWI_W    , F!(Long)                   , 1  ), // #596
2143INST(Saddw_v          , ISimdWWV           , (0b0000111000100000000100, kVO_V_B8H4S2)                                              , RWI_W    , 0                         , 0  ), // #597
2144INST(Saddw2_v         , ISimdWWV           , (0b0000111000100000000100, kVO_V_B16H8S4)                                             , RWI_W    , 0                         , 1  ), // #598
2145INST(Scvtf_v          , SimdFcvtSV         , (0b0000111000100001110110, 0b0000111100000000111001, 0b0001111000100010000000, 0)     , RWI_W    , 0                         , 10 ), // #599
2146INST(Sdot_v           , SimdDot            , (0b0000111010000000100101, 0b0000111110000000111000, kET_S, kET_B, kET_4B)            , RWI_X    , 0                         , 1  ), // #600
2147INST(Sha1c_v          , ISimdVVVx          , (0b0101111000000000000000, kOp_Q, kOp_S, kOp_V4S)                                     , RWI_X    , 0                         , 1  ), // #601
2148INST(Sha1h_v          , ISimdVVx           , (0b0101111000101000000010, kOp_S, kOp_S)                                              , RWI_W    , 0                         , 8  ), // #602
2149INST(Sha1m_v          , ISimdVVVx          , (0b0101111000000000001000, kOp_Q, kOp_S, kOp_V4S)                                     , RWI_X    , 0                         , 2  ), // #603
2150INST(Sha1p_v          , ISimdVVVx          , (0b0101111000000000000100, kOp_Q, kOp_S, kOp_V4S)                                     , RWI_X    , 0                         , 3  ), // #604
2151INST(Sha1su0_v        , ISimdVVVx          , (0b0101111000000000001100, kOp_V4S, kOp_V4S, kOp_V4S)                                 , RWI_X    , 0                         , 4  ), // #605
2152INST(Sha1su1_v        , ISimdVVx           , (0b0101111000101000000110, kOp_V4S, kOp_V4S)                                          , RWI_X    , 0                         , 9  ), // #606
2153INST(Sha256h_v        , ISimdVVVx          , (0b0101111000000000010000, kOp_Q, kOp_Q, kOp_V4S)                                     , RWI_X    , 0                         , 5  ), // #607
2154INST(Sha256h2_v       , ISimdVVVx          , (0b0101111000000000010100, kOp_Q, kOp_Q, kOp_V4S)                                     , RWI_X    , 0                         , 6  ), // #608
2155INST(Sha256su0_v      , ISimdVVx           , (0b0101111000101000001010, kOp_V4S, kOp_V4S)                                          , RWI_X    , 0                         , 10 ), // #609
2156INST(Sha256su1_v      , ISimdVVVx          , (0b0101111000000000011000, kOp_V4S, kOp_V4S, kOp_V4S)                                 , RWI_X    , 0                         , 7  ), // #610
2157INST(Sha512h_v        , ISimdVVVx          , (0b1100111001100000100000, kOp_Q, kOp_Q, kOp_V2D)                                     , RWI_X    , 0                         , 8  ), // #611
2158INST(Sha512h2_v       , ISimdVVVx          , (0b1100111001100000100001, kOp_Q, kOp_Q, kOp_V2D)                                     , RWI_X    , 0                         , 9  ), // #612
2159INST(Sha512su0_v      , ISimdVVx           , (0b1100111011000000100000, kOp_V2D, kOp_V2D)                                          , RWI_X    , 0                         , 11 ), // #613
2160INST(Sha512su1_v      , ISimdVVVx          , (0b1100111001100000100010, kOp_V2D, kOp_V2D, kOp_V2D)                                 , RWI_X    , 0                         , 10 ), // #614
2161INST(Shadd_v          , ISimdVVV           , (0b0000111000100000000001, kVO_V_BHS)                                                 , RWI_W    , 0                         , 26 ), // #615
2162INST(Shl_v            , SimdShift          , (0b0000000000000000000000, 0b0000111100000000010101, 0, kVO_V_Any)                    , RWI_W    , 0                         , 2  ), // #616
2163INST(Shll_v           , SimdShiftES        , (0b0010111000100001001110, kVO_V_B8H4S2)                                              , RWI_W    , F!(Long)                   , 0  ), // #617
2164INST(Shll2_v          , SimdShiftES        , (0b0110111000100001001110, kVO_V_B16H8S4)                                             , RWI_W    , F!(Long)                   , 1  ), // #618
2165INST(Shrn_v           , SimdShift          , (0b0000000000000000000000, 0b0000111100000000100001, 1, kVO_V_B8H4S2)                 , RWI_W    , F!(Narrow)                 , 3  ), // #619
2166INST(Shrn2_v          , SimdShift          , (0b0000000000000000000000, 0b0100111100000000100001, 1, kVO_V_B16H8S4)                , RWI_X    , F!(Narrow)                 , 4  ), // #620
2167INST(Shsub_v          , ISimdVVV           , (0b0000111000100000001001, kVO_V_BHS)                                                 , RWI_W    , 0                         , 27 ), // #621
2168INST(Sli_v            , SimdShift          , (0b0000000000000000000000, 0b0010111100000000010101, 0, kVO_V_Any)                    , RWI_X    , 0                         , 5  ), // #622
2169INST(Sm3partw1_v      , ISimdVVVx          , (0b1100111001100000110000, kOp_V4S, kOp_V4S, kOp_V4S)                                 , RWI_X    , 0                         , 11 ), // #623
2170INST(Sm3partw2_v      , ISimdVVVx          , (0b1100111001100000110001, kOp_V4S, kOp_V4S, kOp_V4S)                                 , RWI_X    , 0                         , 12 ), // #624
2171INST(Sm3ss1_v         , ISimdVVVVx         , (0b1100111001000000000000, kOp_V4S, kOp_V4S, kOp_V4S, kOp_V4S)                        , RWI_W    , 0                         , 0  ), // #625
2172INST(Sm3tt1a_v        , SimdSm3tt          , (0b1100111001000000100000)                                                            , RWI_X    , 0                         , 0  ), // #626
2173INST(Sm3tt1b_v        , SimdSm3tt          , (0b1100111001000000100001)                                                            , RWI_X    , 0                         , 1  ), // #627
2174INST(Sm3tt2a_v        , SimdSm3tt          , (0b1100111001000000100010)                                                            , RWI_X    , 0                         , 2  ), // #628
2175INST(Sm3tt2b_v        , SimdSm3tt          , (0b1100111001000000100011)                                                            , RWI_X    , 0                         , 3  ), // #629
2176INST(Sm4e_v           , ISimdVVx           , (0b1100111011000000100001, kOp_V4S, kOp_V4S)                                          , RWI_X    , 0                         , 12 ), // #630
2177INST(Sm4ekey_v        , ISimdVVVx          , (0b1100111001100000110010, kOp_V4S, kOp_V4S, kOp_V4S)                                 , RWI_X    , 0                         , 13 ), // #631
2178INST(Smax_v           , ISimdVVV           , (0b0000111000100000011001, kVO_V_BHS)                                                 , RWI_W    , 0                         , 28 ), // #632
2179INST(Smaxp_v          , ISimdVVV           , (0b0000111000100000101001, kVO_V_BHS)                                                 , RWI_W    , 0                         , 29 ), // #633
2180INST(Smaxv_v          , ISimdSV            , (0b0000111000110000101010, kVO_V_BH_4S)                                               , RWI_W    , 0                         , 2  ), // #634
2181INST(Smin_v           , ISimdVVV           , (0b0000111000100000011011, kVO_V_BHS)                                                 , RWI_W    , 0                         , 30 ), // #635
2182INST(Sminp_v          , ISimdVVV           , (0b0000111000100000101011, kVO_V_BHS)                                                 , RWI_W    , 0                         , 31 ), // #636
2183INST(Sminv_v          , ISimdSV            , (0b0000111000110001101010, kVO_V_BH_4S)                                               , RWI_W    , 0                         , 3  ), // #637
2184INST(Smlal_v          , ISimdVVVe          , (0b0000111000100000100000, kVO_V_B8H4S2, 0b0000111100000000001000, kVO_V_H4S2)        , RWI_X    , F!(Long) | F!(VH0_15)       , 3  ), // #638
2185INST(Smlal2_v         , ISimdVVVe          , (0b0100111000100000100000, kVO_V_B16H8S4, 0b0100111100000000001000, kVO_V_H8S4)       , RWI_X    , F!(Long) | F!(VH0_15)       , 4  ), // #639
2186INST(Smlsl_v          , ISimdVVVe          , (0b0000111000100000101000, kVO_V_B8H4S2, 0b0000111100000000011000, kVO_V_H4S2)        , RWI_X    , F!(Long) | F!(VH0_15)       , 5  ), // #640
2187INST(Smlsl2_v         , ISimdVVVe          , (0b0100111000100000101000, kVO_V_B16H8S4, 0b0100111100000000011000, kVO_V_H8S4)       , RWI_X    , F!(Long) | F!(VH0_15)       , 6  ), // #641
2188INST(Smmla_v          , ISimdVVVx          , (0b0100111010000000101001, kOp_V4S, kOp_V16B, kOp_V16B)                               , RWI_X    , 0                         , 14 ), // #642
2189INST(Smov_v           , SimdSmovUmov       , (0b0000111000000000001011, kVO_V_BHS, 1)                                              , RWI_W    , 0                         , 0  ), // #643
2190INST(Smull_v          , ISimdVVVe          , (0b0000111000100000110000, kVO_V_B8H4S2, 0b0000111100000000101000, kVO_V_H4S2)        , RWI_W    , F!(Long) | F!(VH0_15)       , 7  ), // #644
2191INST(Smull2_v         , ISimdVVVe          , (0b0100111000100000110000, kVO_V_B16H8S4, 0b0100111100000000101000, kVO_V_H8S4)       , RWI_W    , F!(Long) | F!(VH0_15)       , 8  ), // #645
2192INST(Sqabs_v          , ISimdVV            , (0b0000111000100000011110, kVO_SV_Any)                                                , RWI_W    , 0                         , 13 ), // #646
2193INST(Sqadd_v          , ISimdVVV           , (0b0000111000100000000011, kVO_SV_Any)                                                , RWI_W    , 0                         , 32 ), // #647
2194INST(Sqdmlal_v        , ISimdVVVe          , (0b0000111000100000100100, kVO_SV_BHS, 0b0000111100000000001100, kVO_V_H4S2)          , RWI_X    , F!(Long) | F!(VH0_15)       , 9  ), // #648
2195INST(Sqdmlal2_v       , ISimdVVVe          , (0b0100111000100000100100, kVO_V_B16H8S4, 0b0100111100000000001100, kVO_V_H8S4)       , RWI_X    , F!(Long) | F!(VH0_15)       , 10 ), // #649
2196INST(Sqdmlsl_v        , ISimdVVVe          , (0b0000111000100000101100, kVO_SV_BHS, 0b0000111100000000011100, kVO_V_H4S2)          , RWI_X    , F!(Long) | F!(VH0_15)       , 11 ), // #650
2197INST(Sqdmlsl2_v       , ISimdVVVe          , (0b0100111000100000101100, kVO_V_B16H8S4, 0b0100111100000000011100, kVO_V_H8S4)       , RWI_X    , F!(Long) | F!(VH0_15)       , 12 ), // #651
2198INST(Sqdmulh_v        , ISimdVVVe          , (0b0000111000100000101101, kVO_SV_HS, 0b0000111100000000110000, kVO_SV_HS)            , RWI_W    , F!(VH0_15)                 , 13 ), // #652
2199INST(Sqdmull_v        , ISimdVVVe          , (0b0000111000100000110100, kVO_SV_BHS, 0b0000111100000000101100, kVO_V_H4S2)          , RWI_W    , F!(Long) | F!(VH0_15)       , 14 ), // #653
2200INST(Sqdmull2_v       , ISimdVVVe          , (0b0100111000100000110100, kVO_V_B16H8S4, 0b0100111100000000101100, kVO_V_H8S4)       , RWI_W    , F!(Long) | F!(VH0_15)       , 15 ), // #654
2201INST(Sqneg_v          , ISimdVV            , (0b0010111000100000011110, kVO_SV_Any)                                                , RWI_W    , 0                         , 14 ), // #655
2202INST(Sqrdmlah_v       , ISimdVVVe          , (0b0010111000000000100001, kVO_SV_HS, 0b0010111100000000110100, kVO_SV_HS)            , RWI_X    , F!(VH0_15)                 , 16 ), // #656
2203INST(Sqrdmlsh_v       , ISimdVVVe          , (0b0010111000000000100011, kVO_SV_HS, 0b0010111100000000111100, kVO_SV_HS)            , RWI_X    , F!(VH0_15)                 , 17 ), // #657
2204INST(Sqrdmulh_v       , ISimdVVVe          , (0b0010111000100000101101, kVO_SV_HS, 0b0000111100000000110100, kVO_SV_HS)            , RWI_W    , F!(VH0_15)                 , 18 ), // #658
2205INST(Sqrshl_v         , SimdShift          , (0b0000111000100000010111, 0b0000000000000000000000, 1, kVO_SV_Any)                   , RWI_W    , 0                         , 6  ), // #659
2206INST(Sqrshrn_v        , SimdShift          , (0b0000000000000000000000, 0b0000111100000000100111, 1, kVO_SV_B8H4S2)                , RWI_W    , F!(Narrow)                 , 7  ), // #660
2207INST(Sqrshrn2_v       , SimdShift          , (0b0000000000000000000000, 0b0100111100000000100111, 1, kVO_V_B16H8S4)                , RWI_X    , F!(Narrow)                 , 8  ), // #661
2208INST(Sqrshrun_v       , SimdShift          , (0b0000000000000000000000, 0b0010111100000000100011, 1, kVO_SV_B8H4S2)                , RWI_W    , F!(Narrow)                 , 9  ), // #662
2209INST(Sqrshrun2_v      , SimdShift          , (0b0000000000000000000000, 0b0110111100000000100011, 1, kVO_V_B16H8S4)                , RWI_X    , F!(Narrow)                 , 10 ), // #663
2210INST(Sqshl_v          , SimdShift          , (0b0000111000100000010011, 0b0000111100000000011101, 0, kVO_SV_Any)                   , RWI_W    , 0                         , 11 ), // #664
2211INST(Sqshlu_v         , SimdShift          , (0b0000000000000000000000, 0b0010111100000000011001, 0, kVO_SV_Any)                   , RWI_W    , 0                         , 12 ), // #665
2212INST(Sqshrn_v         , SimdShift          , (0b0000000000000000000000, 0b0000111100000000100101, 1, kVO_SV_B8H4S2)                , RWI_W    , F!(Narrow)                 , 13 ), // #666
2213INST(Sqshrn2_v        , SimdShift          , (0b0000000000000000000000, 0b0100111100000000100101, 1, kVO_V_B16H8S4)                , RWI_X    , F!(Narrow)                 , 14 ), // #667
2214INST(Sqshrun_v        , SimdShift          , (0b0000000000000000000000, 0b0010111100000000100001, 1, kVO_SV_B8H4S2)                , RWI_W    , F!(Narrow)                 , 15 ), // #668
2215INST(Sqshrun2_v       , SimdShift          , (0b0000000000000000000000, 0b0110111100000000100001, 1, kVO_V_B16H8S4)                , RWI_X    , F!(Narrow)                 , 16 ), // #669
2216INST(Sqsub_v          , ISimdVVV           , (0b0000111000100000001011, kVO_SV_Any)                                                , RWI_W    , 0                         , 33 ), // #670
2217INST(Sqxtn_v          , ISimdVV            , (0b0000111000100001010010, kVO_SV_B8H4S2)                                             , RWI_W    , F!(Narrow)                 , 15 ), // #671
2218INST(Sqxtn2_v         , ISimdVV            , (0b0100111000100001010010, kVO_V_B16H8S4)                                             , RWI_X    , F!(Narrow)                 , 16 ), // #672
2219INST(Sqxtun_v         , ISimdVV            , (0b0010111000100001001010, kVO_SV_B8H4S2)                                             , RWI_W    , F!(Narrow)                 , 17 ), // #673
2220INST(Sqxtun2_v        , ISimdVV            , (0b0110111000100001001010, kVO_V_B16H8S4)                                             , RWI_X    , F!(Narrow)                 , 18 ), // #674
2221INST(Srhadd_v         , ISimdVVV           , (0b0000111000100000000101, kVO_V_BHS)                                                 , RWI_W    , 0                         , 34 ), // #675
2222INST(Sri_v            , SimdShift          , (0b0000000000000000000000, 0b0010111100000000010001, 1, kVO_V_Any)                    , RWI_W    , 0                         , 17 ), // #676
2223INST(Srshl_v          , SimdShift          , (0b0000111000100000010101, 0b0000000000000000000000, 0, kVO_V_Any)                    , RWI_W    , 0                         , 18 ), // #677
2224INST(Srshr_v          , SimdShift          , (0b0000000000000000000000, 0b0000111100000000001001, 1, kVO_V_Any)                    , RWI_W    , 0                         , 19 ), // #678
2225INST(Srsra_v          , SimdShift          , (0b0000000000000000000000, 0b0000111100000000001101, 1, kVO_V_Any)                    , RWI_X    , 0                         , 20 ), // #679
2226INST(Sshl_v           , SimdShift          , (0b0000111000100000010001, 0b0000000000000000000000, 0, kVO_V_Any)                    , RWI_W    , 0                         , 21 ), // #680
2227INST(Sshll_v          , SimdShift          , (0b0000000000000000000000, 0b0000111100000000101001, 0, kVO_V_B8H4S2)                 , RWI_W    , F!(Long)                   , 22 ), // #681
2228INST(Sshll2_v         , SimdShift          , (0b0000000000000000000000, 0b0100111100000000101001, 0, kVO_V_B16H8S4)                , RWI_W    , F!(Long)                   , 23 ), // #682
2229INST(Sshr_v           , SimdShift          , (0b0000000000000000000000, 0b0000111100000000000001, 1, kVO_V_Any)                    , RWI_W    , 0                         , 24 ), // #683
2230INST(Ssra_v           , SimdShift          , (0b0000000000000000000000, 0b0000111100000000000101, 1, kVO_V_Any)                    , RWI_X    , 0                         , 25 ), // #684
2231INST(Ssubl_v          , ISimdVVV           , (0b0000111000100000001000, kVO_V_B8H4S2)                                              , RWI_W    , F!(Long)                   , 35 ), // #685
2232INST(Ssubl2_v         , ISimdVVV           , (0b0100111000100000001000, kVO_V_B16H8S4)                                             , RWI_W    , F!(Long)                   , 36 ), // #686
2233INST(Ssubw_v          , ISimdWWV           , (0b0000111000100000001100, kVO_V_B8H4S2)                                              , RWI_W    , 0                         , 2  ), // #687
2234INST(Ssubw2_v         , ISimdWWV           , (0b0000111000100000001100, kVO_V_B16H8S4)                                             , RWI_X    , 0                         , 3  ), // #688
2235INST(St1_v            , SimdLdNStN         , (0b0000110100000000000000, 0b0000110000000000001000, 1, 0)                            , RWI_STN  , F!(Consecutive)            , 8  ), // #689
2236INST(St2_v            , SimdLdNStN         , (0b0000110100100000000000, 0b0000110000000000100000, 2, 0)                            , RWI_STN  , F!(Consecutive)            , 9  ), // #690
2237INST(St3_v            , SimdLdNStN         , (0b0000110100000000001000, 0b0000110000000000010000, 3, 0)                            , RWI_STN  , F!(Consecutive)            , 10 ), // #691
2238INST(St4_v            , SimdLdNStN         , (0b0000110100100000001000, 0b0000110000000000000000, 4, 0)                            , RWI_STN  , F!(Consecutive)            , 11 ), // #692
2239INST(Stnp_v           , SimdLdpStp         , (0b0010110000, 0b0000000000)                                                          , RWI_RRW  , 0                         , 2  ), // #693
2240INST(Stp_v            , SimdLdpStp         , (0b0010110100, 0b0010110010)                                                          , RWI_RRW  , 0                         , 3  ), // #694
2241INST(Str_v            , SimdLdSt           , (0b0011110100, 0b00111100000, 0b00111100001, 0b00000000, InstId::Stur_v)             , RWI_RW   , 0                         , 1  ), // #695
2242INST(Stur_v           , SimdLdurStur       , (0b0011110000000000000000)                                                            , RWI_RW   , 0                         , 1  ), // #696
2243INST(Sub_v            , ISimdVVV           , (0b0010111000100000100001, kVO_V_Any)                                                 , RWI_W    , 0                         , 37 ), // #697
2244INST(Subhn_v          , ISimdVVV           , (0b0000111000100000011000, kVO_V_B8H4S2)                                              , RWI_W    , F!(Narrow)                 , 38 ), // #698
2245INST(Subhn2_v         , ISimdVVV           , (0b0000111000100000011000, kVO_V_B16H8S4)                                             , RWI_X    , F!(Narrow)                 , 39 ), // #699
2246INST(Sudot_v          , SimdDot            , (0b0000000000000000000000, 0b0000111100000000111100, kET_S, kET_B, kET_4B)            , RWI_X    , 0                         , 2  ), // #700
2247INST(Suqadd_v         , ISimdVV            , (0b0000111000100000001110, kVO_SV_Any)                                                , RWI_X    , 0                         , 19 ), // #701
2248INST(Sxtl_v           , SimdSxtlUxtl       , (0b0000111100000000101001, kVO_V_B8H4S2)                                              , RWI_W    , F!(Long)                   , 0  ), // #702
2249INST(Sxtl2_v          , SimdSxtlUxtl       , (0b0100111100000000101001, kVO_V_B16H8S4)                                             , RWI_W    , F!(Long)                   , 1  ), // #703
2250INST(Tbl_v            , SimdTblTbx         , (0b0000111000000000000000)                                                            , RWI_W    , 0                         , 0  ), // #704
2251INST(Tbx_v            , SimdTblTbx         , (0b0000111000000000000100)                                                            , RWI_W    , 0                         , 1  ), // #705
2252INST(Trn1_v           , ISimdVVV           , (0b0000111000000000001010, kVO_V_BHS_D2)                                              , RWI_W    , 0                         , 40 ), // #706
2253INST(Trn2_v           , ISimdVVV           , (0b0000111000000000011010, kVO_V_BHS_D2)                                              , RWI_W    , 0                         , 41 ), // #707
2254INST(Uaba_v           , ISimdVVV           , (0b0010111000100000011111, kVO_V_BHS)                                                 , RWI_X    , 0                         , 42 ), // #708
2255INST(Uabal_v          , ISimdVVV           , (0b0010111000100000010100, kVO_V_B8H4S2)                                              , RWI_X    , F!(Long)                   , 43 ), // #709
2256INST(Uabal2_v         , ISimdVVV           , (0b0110111000100000010100, kVO_V_B16H8S4)                                             , RWI_X    , F!(Long)                   , 44 ), // #710
2257INST(Uabd_v           , ISimdVVV           , (0b0010111000100000011101, kVO_V_BHS)                                                 , RWI_W    , 0                         , 45 ), // #711
2258INST(Uabdl_v          , ISimdVVV           , (0b0010111000100000011100, kVO_V_B8H4S2)                                              , RWI_W    , F!(Long)                   , 46 ), // #712
2259INST(Uabdl2_v         , ISimdVVV           , (0b0110111000100000011100, kVO_V_B16H8S4)                                             , RWI_W    , F!(Long)                   , 47 ), // #713
2260INST(Uadalp_v         , ISimdVV            , (0b0010111000100000011010, kVO_V_BHS)                                                 , RWI_X    , F!(Long) | F!(Pair)         , 20 ), // #714
2261INST(Uaddl_v          , ISimdVVV           , (0b0010111000100000000000, kVO_V_B8H4S2)                                              , RWI_W    , F!(Long)                   , 48 ), // #715
2262INST(Uaddl2_v         , ISimdVVV           , (0b0110111000100000000000, kVO_V_B16H8S4)                                             , RWI_W    , F!(Long)                   , 49 ), // #716
2263INST(Uaddlp_v         , ISimdVV            , (0b0010111000100000001010, kVO_V_BHS)                                                 , RWI_W    , F!(Long) | F!(Pair)         , 21 ), // #717
2264INST(Uaddlv_v         , ISimdSV            , (0b0010111000110000001110, kVO_V_BH_4S)                                               , RWI_W    , F!(Long)                   , 4  ), // #718
2265INST(Uaddw_v          , ISimdWWV           , (0b0010111000100000000100, kVO_V_B8H4S2)                                              , RWI_W    , 0                         , 4  ), // #719
2266INST(Uaddw2_v         , ISimdWWV           , (0b0010111000100000000100, kVO_V_B16H8S4)                                             , RWI_W    , 0                         , 5  ), // #720
2267INST(Ucvtf_v          , SimdFcvtSV         , (0b0010111000100001110110, 0b0010111100000000111001, 0b0001111000100011000000, 0)     , RWI_W    , 0                         , 11 ), // #721
2268INST(Udot_v           , SimdDot            , (0b0010111010000000100101, 0b0010111110000000111000, kET_S, kET_B, kET_4B)            , RWI_X    , 0                         , 3  ), // #722
2269INST(Uhadd_v          , ISimdVVV           , (0b0010111000100000000001, kVO_V_BHS)                                                 , RWI_W    , 0                         , 50 ), // #723
2270INST(Uhsub_v          , ISimdVVV           , (0b0010111000100000001001, kVO_V_BHS)                                                 , RWI_W    , 0                         , 51 ), // #724
2271INST(Umax_v           , ISimdVVV           , (0b0010111000100000011001, kVO_V_BHS)                                                 , RWI_W    , 0                         , 52 ), // #725
2272INST(Umaxp_v          , ISimdVVV           , (0b0010111000100000101001, kVO_V_BHS)                                                 , RWI_W    , 0                         , 53 ), // #726
2273INST(Umaxv_v          , ISimdSV            , (0b0010111000110000101010, kVO_V_BH_4S)                                               , RWI_W    , 0                         , 5  ), // #727
2274INST(Umin_v           , ISimdVVV           , (0b0010111000100000011011, kVO_V_BHS)                                                 , RWI_W    , 0                         , 54 ), // #728
2275INST(Uminp_v          , ISimdVVV           , (0b0010111000100000101011, kVO_V_BHS)                                                 , RWI_W    , 0                         , 55 ), // #729
2276INST(Uminv_v          , ISimdSV            , (0b0010111000110001101010, kVO_V_BH_4S)                                               , RWI_W    , 0                         , 6  ), // #730
2277INST(Umlal_v          , ISimdVVVe          , (0b0010111000100000100000, kVO_V_B8H4S2, 0b0010111100000000001000, kVO_V_H4S2)        , RWI_X    , F!(Long) | F!(VH0_15)       , 19 ), // #731
2278INST(Umlal2_v         , ISimdVVVe          , (0b0110111000100000100000, kVO_V_B16H8S4, 0b0010111100000000001000, kVO_V_H8S4)       , RWI_X    , F!(Long) | F!(VH0_15)       , 20 ), // #732
2279INST(Umlsl_v          , ISimdVVVe          , (0b0010111000100000101000, kVO_V_B8H4S2, 0b0010111100000000011000, kVO_V_H4S2)        , RWI_X    , F!(Long) | F!(VH0_15)       , 21 ), // #733
2280INST(Umlsl2_v         , ISimdVVVe          , (0b0110111000100000101000, kVO_V_B16H8S4, 0b0110111100000000011000, kVO_V_H8S4)       , RWI_X    , F!(Long) | F!(VH0_15)       , 22 ), // #734
2281INST(Ummla_v          , ISimdVVVx          , (0b0110111010000000101001, kOp_V4S, kOp_V16B, kOp_V16B)                               , RWI_X    , 0                         , 15 ), // #735
2282INST(Umov_v           , SimdSmovUmov       , (0b0000111000000000001111, kVO_V_Any, 0)                                              , RWI_W    , 0                         , 1  ), // #736
2283INST(Umull_v          , ISimdVVVe          , (0b0010111000100000110000, kVO_V_B8H4S2, 0b0010111100000000101000, kVO_V_H4S2)        , RWI_W    , F!(Long) | F!(VH0_15)       , 23 ), // #737
2284INST(Umull2_v         , ISimdVVVe          , (0b0110111000100000110000, kVO_V_B16H8S4, 0b0110111100000000101000, kVO_V_H8S4)       , RWI_W    , F!(Long) | F!(VH0_15)       , 24 ), // #738
2285INST(Uqadd_v          , ISimdVVV           , (0b0010111000100000000011, kVO_SV_Any)                                                , RWI_W    , 0                         , 56 ), // #739
2286INST(Uqrshl_v         , SimdShift          , (0b0010111000100000010111, 0b0000000000000000000000, 0, kVO_SV_Any)                   , RWI_W    , 0                         , 26 ), // #740
2287INST(Uqrshrn_v        , SimdShift          , (0b0000000000000000000000, 0b0010111100000000100111, 1, kVO_SV_B8H4S2)                , RWI_W    , F!(Narrow)                 , 27 ), // #741
2288INST(Uqrshrn2_v       , SimdShift          , (0b0000000000000000000000, 0b0110111100000000100111, 1, kVO_V_B16H8S4)                , RWI_X    , F!(Narrow)                 , 28 ), // #742
2289INST(Uqshl_v          , SimdShift          , (0b0010111000100000010011, 0b0010111100000000011101, 0, kVO_SV_Any)                   , RWI_W    , 0                         , 29 ), // #743
2290INST(Uqshrn_v         , SimdShift          , (0b0000000000000000000000, 0b0010111100000000100101, 1, kVO_SV_B8H4S2)                , RWI_W    , F!(Narrow)                 , 30 ), // #744
2291INST(Uqshrn2_v        , SimdShift          , (0b0000000000000000000000, 0b0110111100000000100101, 1, kVO_V_B16H8S4)                , RWI_X    , F!(Narrow)                 , 31 ), // #745
2292INST(Uqsub_v          , ISimdVVV           , (0b0010111000100000001011, kVO_SV_Any)                                                , RWI_W    , 0                         , 57 ), // #746
2293INST(Uqxtn_v          , ISimdVV            , (0b0010111000100001010010, kVO_SV_B8H4S2)                                             , RWI_W    , F!(Narrow)                 , 22 ), // #747
2294INST(Uqxtn2_v         , ISimdVV            , (0b0110111000100001010010, kVO_V_B16H8S4)                                             , RWI_X    , F!(Narrow)                 , 23 ), // #748
2295INST(Urecpe_v         , ISimdVV            , (0b0000111010100001110010, kVO_V_S)                                                   , RWI_W    , 0                         , 24 ), // #749
2296INST(Urhadd_v         , ISimdVVV           , (0b0010111000100000000101, kVO_V_BHS)                                                 , RWI_W    , 0                         , 58 ), // #750
2297INST(Urshl_v          , SimdShift          , (0b0010111000100000010101, 0b0000000000000000000000, 0, kVO_V_Any)                    , RWI_W    , 0                         , 32 ), // #751
2298INST(Urshr_v          , SimdShift          , (0b0000000000000000000000, 0b0010111100000000001001, 1, kVO_V_Any)                    , RWI_W    , 0                         , 33 ), // #752
2299INST(Ursqrte_v        , ISimdVV            , (0b0010111010100001110010, kVO_V_S)                                                   , RWI_W    , 0                         , 25 ), // #753
2300INST(Ursra_v          , SimdShift          , (0b0000000000000000000000, 0b0010111100000000001101, 1, kVO_V_Any)                    , RWI_X    , 0                         , 34 ), // #754
2301INST(Usdot_v          , SimdDot            , (0b0000111010000000100111, 0b0000111110000000111100, kET_S, kET_B, kET_4B)            , RWI_X    , 0                         , 4  ), // #755
2302INST(Ushl_v           , SimdShift          , (0b0010111000100000010001, 0b0000000000000000000000, 0, kVO_V_Any)                    , RWI_W    , 0                         , 35 ), // #756
2303INST(Ushll_v          , SimdShift          , (0b0000000000000000000000, 0b0010111100000000101001, 0, kVO_V_B8H4S2)                 , RWI_W    , F!(Long)                   , 36 ), // #757
2304INST(Ushll2_v         , SimdShift          , (0b0000000000000000000000, 0b0110111100000000101001, 0, kVO_V_B16H8S4)                , RWI_W    , F!(Long)                   , 37 ), // #758
2305INST(Ushr_v           , SimdShift          , (0b0000000000000000000000, 0b0010111100000000000001, 1, kVO_V_Any)                    , RWI_W    , 0                         , 38 ), // #759
2306INST(Usmmla_v         , ISimdVVVx          , (0b0100111010000000101011, kOp_V4S, kOp_V16B, kOp_V16B)                               , RWI_X    , 0                         , 16 ), // #760
2307INST(Usqadd_v         , ISimdVV            , (0b0010111000100000001110, kVO_SV_Any)                                                , RWI_X    , 0                         , 26 ), // #761
2308INST(Usra_v           , SimdShift          , (0b0000000000000000000000, 0b0010111100000000000101, 1, kVO_V_Any)                    , RWI_X    , 0                         , 39 ), // #762
2309INST(Usubl_v          , ISimdVVV           , (0b0010111000100000001000, kVO_V_B8H4S2)                                              , RWI_W    , F!(Long)                   , 59 ), // #763
2310INST(Usubl2_v         , ISimdVVV           , (0b0110111000100000001000, kVO_V_B16H8S4)                                             , RWI_W    , F!(Long)                   , 60 ), // #764
2311INST(Usubw_v          , ISimdWWV           , (0b0010111000100000001100, kVO_V_B8H4S2)                                              , RWI_W    , 0                         , 6  ), // #765
2312INST(Usubw2_v         , ISimdWWV           , (0b0010111000100000001100, kVO_V_B16H8S4)                                             , RWI_W    , 0                         , 7  ), // #766
2313INST(Uxtl_v           , SimdSxtlUxtl       , (0b0010111100000000101001, kVO_V_B8H4S2)                                              , RWI_W    , F!(Long)                   , 2  ), // #767
2314INST(Uxtl2_v          , SimdSxtlUxtl       , (0b0110111100000000101001, kVO_V_B16H8S4)                                             , RWI_W    , F!(Long)                   , 3  ), // #768
2315INST(Uzp1_v           , ISimdVVV           , (0b0000111000000000000110, kVO_V_BHS_D2)                                              , RWI_W    , 0                         , 61 ), // #769
2316INST(Uzp2_v           , ISimdVVV           , (0b0000111000000000010110, kVO_V_BHS_D2)                                              , RWI_W    , 0                         , 62 ), // #770
2317INST(Xar_v            , ISimdVVVI          , (0b1100111001100000100011, kVO_V_D2, 6, 10, 0)                                        , RWI_W    , 0                         , 1  ), // #771
2318INST(Xtn_v            , ISimdVV            , (0b0000111000100001001010, kVO_V_B8H4S2)                                              , RWI_W    , F!(Narrow)                 , 27 ), // #772
2319INST(Xtn2_v           , ISimdVV            , (0b0100111000100001001010, kVO_V_B16H8S4)                                             , RWI_X    , F!(Narrow)                 , 28 ), // #773
2320INST(Zip1_v           , ISimdVVV           , (0b0000111000000000001110, kVO_V_BHS_D2)                                              , RWI_W    , 0                         , 63 ), // #774
2321INST(Zip2_v           , ISimdVVV           , (0b0000111000000000011110, kVO_V_BHS_D2)                                              , RWI_W    , 0                         , 64 ),  // #775
2322
2323  });
2324
2325pub const BASE_ADD_SUB: [BaseAddSub; 4] = [
2326    BaseAddSub::new(0b0001011000, 0b0001011001, 0b0010001), // add
2327    BaseAddSub::new(0b0101011000, 0b0101011001, 0b0110001), // adds
2328    BaseAddSub::new(0b1001011000, 0b1001011001, 0b1010001), // sub
2329    BaseAddSub::new(0b1101011000, 0b1101011001, 0b1110001), // subs
2330];
2331
2332macro_rules! table_new {
2333        ($ty:ident, { $({ $($e:expr),* $(,)? }),* $(,)? }) => {
2334                [$( $ty::new($($e as u64 as _),*) ),*]
2335        };
2336}
2337
2338const kW: u32 = W;
2339const kX: u32 = X;
2340const kWX: u32 = WX;
2341const kZR: u32 = ZR;
2342const kSP: u32 = SP;
2343
2344const kHF_N: u32 = HFConv::N as u32;
2345const kHF_A: u32 = HFConv::A as u32;
2346const kHF_B: u32 = HFConv::B as u32;
2347const kHF_C: u32 = HFConv::C as u32;
2348
2349const kET_B: u8 = InstElementType::B as u8;
2350const kET_H: u8 = InstElementType::H as u8;
2351const kET_S: u8 = InstElementType::S as u8;
2352const kET_2H: u8 = InstElementType::_2H as u8;
2353const kET_4B: u8 = InstElementType::_4B as u8;
2354
2355const kOp_GpW: u32 = OpSignature::GpW as u32;
2356const kOp_H: u32 = OpSignature::H as u32;
2357const kOp_S: u32 = OpSignature::S as u32;
2358const kOp_D: u32 = OpSignature::D as u32;
2359const kOp_Q: u32 = OpSignature::Q as u32;
2360const kOp_V4H: u32 = OpSignature::V4H as u32;
2361const kOp_V8H: u32 = OpSignature::V8H as u32;
2362const kOp_V4S: u32 = OpSignature::V4S as u32;
2363const kOp_V2D: u32 = OpSignature::V2D as u32;
2364const kOp_V16B: u32 = OpSignature::V16B as u32;
2365
2366const kVO_V_B: u32 = VOType::VB as u32;
2367const kVO_V_BH: u32 = VOType::VBH as u32;
2368const kVO_V_BH_4S: u32 = VOType::VBH4S as u32;
2369const kVO_V_BHS: u32 = VOType::VBHS as u32;
2370const kVO_V_BHS_D2: u32 = VOType::VBHSD2 as u32;
2371const kVO_V_HS: u32 = VOType::VHS as u32;
2372const kVO_V_S: u32 = VOType::VS as u32;
2373const kVO_V_B8H4S2: u32 = VOType::VB8H4S2 as u32;
2374const kVO_V_B8D1: u32 = VOType::VB8D1 as u32;
2375const kVO_V_H4S2: u32 = VOType::VH4S2 as u32;
2376const kVO_V_B16: u32 = VOType::VB16 as u32;
2377const kVO_V_B16H8S4: u32 = VOType::VB16H8S4 as u32;
2378const kVO_V_B16D2: u32 = VOType::VB16D2 as u32;
2379const kVO_V_H8S4: u32 = VOType::VH8S4 as u32;
2380const kVO_V_D2: u32 = VOType::VD2 as u32;
2381const kVO_SV_BHS: u32 = VOType::SVBHS as u32;
2382const kVO_SV_B8H4S2: u32 = VOType::SVB8H4S2 as u32;
2383const kVO_SV_HS: u32 = VOType::SVHS as u32;
2384const kVO_V_Any: u32 = VOType::VAny as u32;
2385const kVO_SV_Any: u32 = VOType::SVAny as u32;
2386
2387pub const BASE_ADR: [BaseAdr; 2] = table_new!(BaseAdr, {
2388    { 0b0001000000000000000000, OffsetType::Adr as u8 }, // adr
2389    { 0b1001000000000000000000, OffsetType::Adrp as u8 }  // adrp
2390});
2391
2392pub const BASE_AT_DC_IC_TLBI: [BaseAtDcIcTlbi; 4] = table_new!(BaseAtDcIcTlbi, {
2393    { 0b00011111110000, 0b00001111000000, true }, // at
2394    { 0b00011110000000, 0b00001110000000, true }, // dc
2395    { 0b00011110000000, 0b00001110000000, false }, // ic
2396    { 0b00011110000000, 0b00010000000000, false }  // tlbi
2397});
2398
2399pub const BASE_ATOMIC_CASP: [BaseAtomicCasp; 4] = table_new!(BaseAtomicCasp, {
2400    { 0b0000100000100000011111, kWX, 30 }, // casp
2401    { 0b0000100001100000011111, kWX, 30 }, // caspa
2402    { 0b0000100001100000111111, kWX, 30 }, // caspal
2403    { 0b0000100000100000111111, kWX, 30 }  // caspl
2404});
2405
2406pub const BASE_ATOMIC_OP: [BaseAtomicOp; 123] = table_new!(BaseAtomicOp, {
2407    { 0b1000100010100000011111, kWX, 30, 0 }, // cas
2408    { 0b1000100011100000011111, kWX, 30, 1 }, // casa
2409    { 0b0000100011100000011111, kW , 0 , 1 }, // casab
2410    { 0b0100100011100000011111, kW , 0 , 1 }, // casah
2411    { 0b1000100011100000111111, kWX, 30, 1 }, // casal
2412    { 0b0000100011100000111111, kW , 0 , 1 }, // casalb
2413    { 0b0100100011100000111111, kW , 0 , 1 }, // casalh
2414    { 0b0000100010100000011111, kW , 0 , 0 }, // casb
2415    { 0b0100100010100000011111, kW , 0 , 0 }, // cash
2416    { 0b1000100010100000111111, kWX, 30, 0 }, // casl
2417    { 0b0000100010100000111111, kW , 0 , 0 }, // caslb
2418    { 0b0100100010100000111111, kW , 0 , 0 }, // caslh
2419    { 0b1011100000100000000000, kWX, 30, 0 }, // ldadd
2420    { 0b1011100010100000000000, kWX, 30, 1 }, // ldadda
2421    { 0b0011100010100000000000, kW , 0 , 1 }, // ldaddab
2422    { 0b0111100010100000000000, kW , 0 , 1 }, // ldaddah
2423    { 0b1011100011100000000000, kWX, 30, 1 }, // ldaddal
2424    { 0b0011100011100000000000, kW , 0 , 1 }, // ldaddalb
2425    { 0b0111100011100000000000, kW , 0 , 1 }, // ldaddalh
2426    { 0b0011100000100000000000, kW , 0 , 0 }, // ldaddb
2427    { 0b0111100000100000000000, kW , 0 , 0 }, // ldaddh
2428    { 0b1011100001100000000000, kWX, 30, 0 }, // ldaddl
2429    { 0b0011100001100000000000, kW , 0 , 0 }, // ldaddlb
2430    { 0b0111100001100000000000, kW , 0 , 0 }, // ldaddlh
2431    { 0b1011100000100000000100, kWX, 30, 0 }, // ldclr
2432    { 0b1011100010100000000100, kWX, 30, 1 }, // ldclra
2433    { 0b0011100010100000000100, kW , 0 , 1 }, // ldclrab
2434    { 0b0111100010100000000100, kW , 0 , 1 }, // ldclrah
2435    { 0b1011100011100000000100, kWX, 30, 1 }, // ldclral
2436    { 0b0011100011100000000100, kW , 0 , 1 }, // ldclralb
2437    { 0b0111100011100000000100, kW , 0 , 1 }, // ldclralh
2438    { 0b0011100000100000000100, kW , 0 , 0 }, // ldclrb
2439    { 0b0111100000100000000100, kW , 0 , 0 }, // ldclrh
2440    { 0b1011100001100000000100, kWX, 30, 0 }, // ldclrl
2441    { 0b0011100001100000000100, kW , 0 , 0 }, // ldclrlb
2442    { 0b0111100001100000000100, kW , 0 , 0 }, // ldclrlh
2443    { 0b1011100000100000001000, kWX, 30, 0 }, // ldeor
2444    { 0b1011100010100000001000, kWX, 30, 1 }, // ldeora
2445    { 0b0011100010100000001000, kW , 0 , 1 }, // ldeorab
2446    { 0b0111100010100000001000, kW , 0 , 1 }, // ldeorah
2447    { 0b1011100011100000001000, kWX, 30, 1 }, // ldeoral
2448    { 0b0011100011100000001000, kW , 0 , 1 }, // ldeoralb
2449    { 0b0111100011100000001000, kW , 0 , 1 }, // ldeoralh
2450    { 0b0011100000100000001000, kW , 0 , 0 }, // ldeorb
2451    { 0b0111100000100000001000, kW , 0 , 0 }, // ldeorh
2452    { 0b1011100001100000001000, kWX, 30, 0 }, // ldeorl
2453    { 0b0011100001100000001000, kW , 0 , 0 }, // ldeorlb
2454    { 0b0111100001100000001000, kW , 0 , 0 }, // ldeorlh
2455    { 0b1011100000100000001100, kWX, 30, 0 }, // ldset
2456    { 0b1011100010100000001100, kWX, 30, 1 }, // ldseta
2457    { 0b0011100010100000001100, kW , 0 , 1 }, // ldsetab
2458    { 0b0111100010100000001100, kW , 0 , 1 }, // ldsetah
2459    { 0b1011100011100000001100, kWX, 30, 1 }, // ldsetal
2460    { 0b0011100011100000001100, kW , 0 , 1 }, // ldsetalb
2461    { 0b0111100011100000001100, kW , 0 , 1 }, // ldsetalh
2462    { 0b0011100000100000001100, kW , 0 , 0 }, // ldsetb
2463    { 0b0111100000100000001100, kW , 0 , 0 }, // ldseth
2464    { 0b1011100001100000001100, kWX, 30, 0 }, // ldsetl
2465    { 0b0011100001100000001100, kW , 0 , 0 }, // ldsetlb
2466    { 0b0111100001100000001100, kW , 0 , 0 }, // ldsetlh
2467    { 0b1011100000100000010000, kWX, 30, 0 }, // ldsmax
2468    { 0b1011100010100000010000, kWX, 30, 1 }, // ldsmaxa
2469    { 0b0011100010100000010000, kW , 0 , 1 }, // ldsmaxab
2470    { 0b0111100010100000010000, kW , 0 , 1 }, // ldsmaxah
2471    { 0b1011100011100000010000, kWX, 30, 1 }, // ldsmaxal
2472    { 0b0011100011100000010000, kW , 0 , 1 }, // ldsmaxalb
2473    { 0b0111100011100000010000, kW , 0 , 1 }, // ldsmaxalh
2474    { 0b0011100000100000010000, kW , 0 , 0 }, // ldsmaxb
2475    { 0b0111100000100000010000, kW , 0 , 0 }, // ldsmaxh
2476    { 0b1011100001100000010000, kWX, 30, 0 }, // ldsmaxl
2477    { 0b0011100001100000010000, kW , 0 , 0 }, // ldsmaxlb
2478    { 0b0111100001100000010000, kW , 0 , 0 }, // ldsmaxlh
2479    { 0b1011100000100000010100, kWX, 30, 0 }, // ldsmin
2480    { 0b1011100010100000010100, kWX, 30, 1 }, // ldsmina
2481    { 0b0011100010100000010100, kW , 0 , 1 }, // ldsminab
2482    { 0b0111100010100000010100, kW , 0 , 1 }, // ldsminah
2483    { 0b1011100011100000010100, kWX, 30, 1 }, // ldsminal
2484    { 0b0011100011100000010100, kW , 0 , 1 }, // ldsminalb
2485    { 0b0111100011100000010100, kW , 0 , 1 }, // ldsminalh
2486    { 0b0011100000100000010100, kW , 0 , 0 }, // ldsminb
2487    { 0b0111100000100000010100, kW , 0 , 0 }, // ldsminh
2488    { 0b1011100001100000010100, kWX, 30, 0 }, // ldsminl
2489    { 0b0011100001100000010100, kW , 0 , 0 }, // ldsminlb
2490    { 0b0111100001100000010100, kW , 0 , 0 }, // ldsminlh
2491    { 0b1011100000100000011000, kWX, 30, 0 }, // ldumax
2492    { 0b1011100010100000011000, kWX, 30, 1 }, // ldumaxa
2493    { 0b0011100010100000011000, kW , 0 , 1 }, // ldumaxab
2494    { 0b0111100010100000011000, kW , 0 , 1 }, // ldumaxah
2495    { 0b1011100011100000011000, kWX, 30, 1 }, // ldumaxal
2496    { 0b0011100011100000011000, kW , 0 , 1 }, // ldumaxalb
2497    { 0b0111100011100000011000, kW , 0 , 1 }, // ldumaxalh
2498    { 0b0011100000100000011000, kW , 0 , 0 }, // ldumaxb
2499    { 0b0111100000100000011000, kW , 0 , 0 }, // ldumaxh
2500    { 0b1011100001100000011000, kWX, 30, 0 }, // ldumaxl
2501    { 0b0011100001100000011000, kW , 0 , 0 }, // ldumaxlb
2502    { 0b0111100001100000011000, kW , 0 , 0 }, // ldumaxlh
2503    { 0b1011100000100000011100, kWX, 30, 0 }, // ldumin
2504    { 0b1011100010100000011100, kWX, 30, 1 }, // ldumina
2505    { 0b0011100010100000011100, kW , 0 , 1 }, // lduminab
2506    { 0b0111100010100000011100, kW , 0 , 1 }, // lduminah
2507    { 0b1011100011100000011100, kWX, 30, 1 }, // lduminal
2508    { 0b0011100011100000011100, kW , 0 , 1 }, // lduminalb
2509    { 0b0111100011100000011100, kW , 0 , 1 }, // lduminalh
2510    { 0b0011100000100000011100, kW , 0 , 0 }, // lduminb
2511    { 0b0111100000100000011100, kW , 0 , 0 }, // lduminh
2512    { 0b1011100001100000011100, kWX, 30, 0 }, // lduminl
2513    { 0b0011100001100000011100, kW , 0 , 0 }, // lduminlb
2514    { 0b0111100001100000011100, kW , 0 , 0 }, // lduminlh
2515    { 0b1000100000000000111111, kWX, 30, 1 }, // stlxr
2516    { 0b0000100000000000111111, kW , 0 , 1 }, // stlxrb
2517    { 0b0100100000000000111111, kW , 0 , 1 }, // stlxrh
2518    { 0b1011100000100000100000, kWX, 30, 1 }, // swp
2519    { 0b1011100010100000100000, kWX, 30, 1 }, // swpa
2520    { 0b0011100010100000100000, kW , 0 , 1 }, // swpab
2521    { 0b0111100010100000100000, kW , 0 , 1 }, // swpah
2522    { 0b1011100011100000100000, kWX, 30, 1 }, // swpal
2523    { 0b0011100011100000100000, kW , 0 , 1 }, // swpalb
2524    { 0b0111100011100000100000, kW , 0 , 1 }, // swpalh
2525    { 0b0011100000100000100000, kW , 0 , 1 }, // swpb
2526    { 0b0111100000100000100000, kW , 0 , 1 }, // swph
2527    { 0b1011100001100000100000, kWX, 30, 1 }, // swpl
2528    { 0b0011100001100000100000, kW , 0 , 1 }, // swplb
2529    { 0b0111100001100000100000, kW , 0 , 1 }  // swplh
2530});
2531
2532pub const BASE_ATOMIC_ST: [BaseAtomicSt; 48] = table_new!(BaseAtomicSt, {
2533    { 0b1011100000100000000000, kWX, 30 }, // stadd
2534    { 0b1011100001100000000000, kWX, 30 }, // staddl
2535    { 0b0011100000100000000000, kW , 0  }, // staddb
2536    { 0b0011100001100000000000, kW , 0  }, // staddlb
2537    { 0b0111100000100000000000, kW , 0  }, // staddh
2538    { 0b0111100001100000000000, kW , 0  }, // staddlh
2539    { 0b1011100000100000000100, kWX, 30 }, // stclr
2540    { 0b1011100001100000000100, kWX, 30 }, // stclrl
2541    { 0b0011100000100000000100, kW , 0  }, // stclrb
2542    { 0b0011100001100000000100, kW , 0  }, // stclrlb
2543    { 0b0111100000100000000100, kW , 0  }, // stclrh
2544    { 0b0111100001100000000100, kW , 0  }, // stclrlh
2545    { 0b1011100000100000001000, kWX, 30 }, // steor
2546    { 0b1011100001100000001000, kWX, 30 }, // steorl
2547    { 0b0011100000100000001000, kW , 0  }, // steorb
2548    { 0b0011100001100000001000, kW , 0  }, // steorlb
2549    { 0b0111100000100000001000, kW , 0  }, // steorh
2550    { 0b0111100001100000001000, kW , 0  }, // steorlh
2551    { 0b1011100000100000001100, kWX, 30 }, // stset
2552    { 0b1011100001100000001100, kWX, 30 }, // stsetl
2553    { 0b0011100000100000001100, kW , 0  }, // stsetb
2554    { 0b0011100001100000001100, kW , 0  }, // stsetlb
2555    { 0b0111100000100000001100, kW , 0  }, // stseth
2556    { 0b0111100001100000001100, kW , 0  }, // stsetlh
2557    { 0b1011100000100000010000, kWX, 30 }, // stsmax
2558    { 0b1011100001100000010000, kWX, 30 }, // stsmaxl
2559    { 0b0011100000100000010000, kW , 0  }, // stsmaxb
2560    { 0b0011100001100000010000, kW , 0  }, // stsmaxlb
2561    { 0b0111100000100000010000, kW , 0  }, // stsmaxh
2562    { 0b0111100001100000010000, kW , 0  }, // stsmaxlh
2563    { 0b1011100000100000010100, kWX, 30 }, // stsmin
2564    { 0b1011100001100000010100, kWX, 30 }, // stsminl
2565    { 0b0011100000100000010100, kW , 0  }, // stsminb
2566    { 0b0011100001100000010100, kW , 0  }, // stsminlb
2567    { 0b0111100000100000010100, kW , 0  }, // stsminh
2568    { 0b0111100001100000010100, kW , 0  }, // stsminlh
2569    { 0b1011100000100000011000, kWX, 30 }, // stumax
2570    { 0b1011100001100000011000, kWX, 30 }, // stumaxl
2571    { 0b0011100000100000011000, kW , 0  }, // stumaxb
2572    { 0b0011100001100000011000, kW , 0  }, // stumaxlb
2573    { 0b0111100000100000011000, kW , 0  }, // stumaxh
2574    { 0b0111100001100000011000, kW , 0  }, // stumaxlh
2575    { 0b1011100000100000011100, kWX, 30 }, // stumin
2576    { 0b1011100001100000011100, kWX, 30 }, // stuminl
2577    { 0b0011100000100000011100, kW , 0  }, // stuminb
2578    { 0b0011100001100000011100, kW , 0  }, // stuminlb
2579    { 0b0111100000100000011100, kW , 0  }, // stuminh
2580    { 0b0111100001100000011100, kW , 0  }  // stuminlh
2581});
2582
2583pub const BASE_BFC: [BaseBfc; 1] = table_new!(BaseBfc, {
2584    { 0b00110011000000000000001111100000 } // bfc
2585});
2586
2587pub const BASE_BFI: [BaseBfi; 3] = table_new!(BaseBfi, {
2588    { 0b00110011000000000000000000000000 }, // bfi
2589    { 0b00010011000000000000000000000000 }, // sbfiz
2590    { 0b01010011000000000000000000000000 }  // ubfiz
2591});
2592
2593pub const BASE_BFM: [BaseBfm; 3] = table_new!(BaseBfm, {
2594    { 0b00110011000000000000000000000000 }, // bfm
2595    { 0b00010011000000000000000000000000 }, // sbfm
2596    { 0b01010011000000000000000000000000 }  // ubfm
2597});
2598
2599pub const BASE_BFX: [BaseBfx; 3] = table_new!(BaseBfx, {
2600    { 0b00110011000000000000000000000000 }, // bfxil
2601    { 0b00010011000000000000000000000000 }, // sbfx
2602    { 0b01010011000000000000000000000000 }  // ubfx
2603});
2604
2605pub const BASE_BRANCH_CMP: [BaseBranchCmp; 2] = table_new!(BaseBranchCmp, {
2606    { 0b00110101000000000000000000000000 }, // cbnz
2607    { 0b00110100000000000000000000000000 }  // cbz
2608});
2609
2610pub const BASE_BRANCH_REG: [BaseBranchReg; 3] = table_new!(BaseBranchReg, {
2611    { 0b11010110001111110000000000000000u32 as i32 }, // blr
2612    { 0b11010110000111110000000000000000u32 as i32 }, // br
2613    { 0b11010110010111110000000000000000u32 as i32 }  // ret
2614});
2615
2616pub const BASE_BRANCH_REL: [BaseBranchRel; 3] = table_new!(BaseBranchRel, {
2617    { 0b00010100000000000000000000000000 }, // b
2618    { 0b00010100000000000000000000010000 }, // bc
2619    { 0b10010100000000000000000000000000u32 as i32 }  // bl
2620});
2621
2622pub const BASE_BRANCH_TST: [BaseBranchTst; 2] = table_new!(BaseBranchTst, {
2623    { 0b00110111000000000000000000000000 }, // tbnz
2624    { 0b00110110000000000000000000000000 }  // tbz
2625});
2626
2627pub const BASE_C_CMP: [BaseCCmp; 2] = table_new!(BaseCCmp, {
2628    { 0b00111010010000000000000000000000 }, // ccmn
2629    { 0b01111010010000000000000000000000 }  // ccmp
2630});
2631
2632pub const BASE_C_INC: [BaseCInc; 3] = table_new!(BaseCInc, {
2633    { 0b00011010100000000000010000000000 }, // cinc
2634    { 0b01011010100000000000000000000000 }, // cinv
2635    { 0b01011010100000000000010000000000 }  // cneg
2636});
2637
2638pub const BASE_C_SEL: [BaseCSel; 4] = table_new!(BaseCSel, {
2639    { 0b00011010100000000000000000000000 }, // csel
2640    { 0b00011010100000000000010000000000 }, // csinc
2641    { 0b01011010100000000000000000000000 }, // csinv
2642    { 0b01011010100000000000010000000000 }  // csneg
2643});
2644
2645pub const BASE_C_SET: [BaseCSet; 2] = table_new!(BaseCSet, {
2646    { 0b00011010100111110000011111100000 }, // cset
2647    { 0b01011010100111110000001111100000 }  // csetm
2648});
2649
2650pub const BASE_CMP_CMN: [BaseCmpCmn; 2] = table_new!(BaseCmpCmn, {
2651    { 0b0101011000, 0b0101011001, 0b0110001 }, // cmn
2652    { 0b1101011000, 0b1101011001, 0b1110001 }  // cmp
2653});
2654
2655pub const BASE_EXTEND: [BaseExtend; 5] = table_new!(BaseExtend, {
2656    { 0b0001001100000000000111, kWX, 0 }, // sxtb
2657    { 0b0001001100000000001111, kWX, 0 }, // sxth
2658    { 0b1001001101000000011111, kX , 0 }, // sxtw
2659    { 0b0101001100000000000111, kW, 1 }, // uxtb
2660    { 0b0101001100000000001111, kW, 1 }  // uxth
2661});
2662
2663pub const BASE_EXTRACT: [BaseExtract; 1] = table_new!(BaseExtract, {
2664    { 0b00010011100000000000000000000000 } // extr
2665});
2666
2667pub const BASE_LD_ST: [BaseLdSt; 9] = table_new!(BaseLdSt, {
2668    { 0b1011100101, 0b10111000010, 0b10111000011, 0b00011000, kWX, 30, 2, InstId::Ldur }, // ldr
2669    { 0b0011100101, 0b00111000010, 0b00111000011, 0         , kW , 0 , 0, InstId::Ldurb }, // ldrb
2670    { 0b0111100101, 0b01111000010, 0b01111000011, 0         , kW , 0 , 1, InstId::Ldurh }, // ldrh
2671    { 0b0011100111, 0b00111000100, 0b00111000111, 0         , kWX, 22, 0, InstId::Ldursb }, // ldrsb
2672    { 0b0111100111, 0b01111000100, 0b01111000111, 0         , kWX, 22, 1, InstId::Ldursh }, // ldrsh
2673    { 0b1011100110, 0b10111000100, 0b10111000101, 0b10011000, kX , 0 , 2, InstId::Ldursw }, // ldrsw
2674    { 0b1011100100, 0b10111000000, 0b10111000001, 0         , kWX, 30, 2, InstId::Stur }, // str
2675    { 0b0011100100, 0b00111000000, 0b00111000001, 0         , kW , 30, 0, InstId::Sturb }, // strb
2676    { 0b0111100100, 0b01111000000, 0b01111000001, 0         , kWX, 30, 1, InstId::Sturh }  // strh
2677});
2678
2679pub const BASE_LDP_STP: [BaseLdpStp; 6] = table_new!(BaseLdpStp, {
2680    { 0b0010100001, 0           , kWX, 31, 2 }, // ldnp
2681    { 0b0010100101, 0b0010100011, kWX, 31, 2 }, // ldp
2682    { 0b0110100101, 0b0110100011, kX , 0 , 2 }, // ldpsw
2683    { 0b0110100100, 0b0110100010, kX, 0, 4 }, // stgp
2684    { 0b0010100000, 0           , kWX, 31, 2 }, // stnp
2685    { 0b0010100100, 0b0010100010, kWX, 31, 2 }  // stp
2686});
2687
2688pub const BASE_LDXP: [BaseLdxp; 2] = table_new!(BaseLdxp, {
2689    { 0b1000100001111111100000, kWX, 30 }, // ldaxp
2690    { 0b1000100001111111000000, kWX, 30 }  // ldxp
2691});
2692
2693pub const BASE_LOGICAL: [BaseLogical; 8] = table_new!(BaseLogical, {
2694    { 0b0001010000, 0b00100100, 0 }, // and
2695    { 0b1101010000, 0b11100100, 0 }, // ands
2696    { 0b0001010001, 0b00100100, 1 }, // bic
2697    { 0b1101010001, 0b11100100, 1 }, // bics
2698    { 0b1001010001, 0b10100100, 1 }, // eon
2699    { 0b1001010000, 0b10100100, 0 }, // eor
2700    { 0b0101010001, 0b01100100, 1 }, // orn
2701    { 0b0101010000, 0b01100100, 0 }  // orr
2702});
2703
2704pub const BASE_MIN_MAX: [BaseMinMax; 4] = table_new!(BaseMinMax, {
2705    { 0b00011010110000000110000000000000, 0b00010001110000000000000000000000 }, // smax
2706    { 0b00011010110000000110100000000000, 0b00010001110010000000000000000000 }, // smin
2707    { 0b00011010110000000110010000000000, 0b00010001110001000000000000000000 }, // umax
2708    { 0b00011010110000000110110000000000, 0b00010001110011000000000000000000 }  // umin
2709});
2710
2711pub const BASE_MOV_KNZ: [BaseMovKNZ; 3] = table_new!(BaseMovKNZ, {
2712    { 0b01110010100000000000000000000000 }, // movk
2713    { 0b00010010100000000000000000000000 }, // movn
2714    { 0b01010010100000000000000000000000 }  // movz
2715});
2716
2717pub const BASE_MVN_NEG: [BaseMvnNeg; 3] = table_new!(BaseMvnNeg, {
2718    { 0b00101010001000000000001111100000 }, // mvn
2719    { 0b01001011000000000000001111100000 }, // neg
2720    { 0b01101011000000000000001111100000 }  // negs
2721});
2722
2723pub const BASE_OP: [BaseOp; 24] = table_new!(BaseOp, {
2724    { 0b11010101000000110010000110011111 }, // autia1716
2725    { 0b11010101000000110010001110111111 }, // autiasp
2726    { 0b11010101000000110010001110011111 }, // autiaz
2727    { 0b11010101000000110010000111011111 }, // autib1716
2728    { 0b11010101000000110010001111111111 }, // autibsp
2729    { 0b11010101000000110010001111011111 }, // autibz
2730    { 0b11010101000000000100000001011111 }, // axflag
2731    { 0b11010101000000000100000000011111 }, // cfinv
2732    { 0b11010101000000110010001011011111 }, // clrbhb
2733    { 0b11010101000000110010001010011111 }, // csdb
2734    { 0b11010101000000110010000011011111 }, // dgh
2735    { 0b11010110101111110000001111100000 }, // drps
2736    { 0b11010101000000110010001000011111 }, // esb
2737    { 0b11010110100111110000001111100000 }, // eret
2738    { 0b11010101000000110010000000011111 }, // nop
2739    { 0b11010101000000110011010010011111 }, // pssbb
2740    { 0b11010101000000110010000010011111 }, // sev
2741    { 0b11010101000000110010000010111111 }, // sevl
2742    { 0b11010101000000110011000010011111 }, // ssbb
2743    { 0b11010101000000110010000001011111 }, // wfe
2744    { 0b11010101000000110010000001111111 }, // wfi
2745    { 0b11010101000000000100000000111111 }, // xaflag
2746    { 0b11010101000000110010000011111111 }, // xpaclri
2747    { 0b11010101000000110010000000111111 }  // yield
2748});
2749
2750pub const BASE_OP_IMM: [BaseOpImm; 15] = table_new!(BaseOpImm, {
2751    { 0b11010100001000000000000000000000, 16, 5 }, // brk
2752    { 0b11010101000000110010010000011111, 2, 6 }, // bti
2753    { 0b11010101000000110011000001011111, 4, 8 }, // clrex
2754    { 0b11010100101000000000000000000001, 16, 5 }, // dcps1
2755    { 0b11010100101000000000000000000010, 16, 5 }, // dcps2
2756    { 0b11010100101000000000000000000011, 16, 5 }, // dcps3
2757    { 0b11010101000000110011000010111111, 4, 8 }, // dmb
2758    { 0b11010101000000110011000010011111, 4, 8 }, // dsb
2759    { 0b11010101000000110010000000011111, 7, 5 }, // hint
2760    { 0b11010100010000000000000000000000, 16, 5 }, // hlt
2761    { 0b11010100000000000000000000000010, 16, 5 }, // hvc
2762    { 0b11010101000000110011000011011111, 4, 8 }, // isb
2763    { 0b11010100000000000000000000000011, 16, 5 }, // smc
2764    { 0b11010100000000000000000000000001, 16, 5 }, // svc
2765    { 0b00000000000000000000000000000000, 16, 0 }  // udf
2766});
2767
2768pub const BASE_OP_X16: [BaseOpX16; 1] = table_new!(BaseOpX16, {
2769    { 0b11010101000000110010010100011111 } // chkfeat
2770});
2771
2772pub const BASE_PRFM: [BasePrfm; 1] = table_new!(BasePrfm, {
2773    { 0b11111000101, 0b1111100110, 0b11111000100, 0b11011000 }  // prfm
2774});
2775
2776pub const BASE_R: [BaseR; 10] = table_new!(BaseR, {
2777    { 0b11011010110000010011101111100000, kX, kZR, 0 }, // autdza
2778    { 0b11011010110000010011111111100000, kX, kZR, 0 }, // autdzb
2779    { 0b11011010110000010011001111100000, kX, kZR, 0 }, // autiza
2780    { 0b11011010110000010011011111100000, kX, kZR, 0 }, // autizb
2781    { 0b11011010110000010010101111100000, kX, kZR, 0 }, // pacdza
2782    { 0b11011010110000010010111111100000, kX, kZR, 0 }, // pacdzb
2783    { 0b00111010000000000000100000001101, kW, kZR, 5 }, // setf8
2784    { 0b00111010000000000100100000001101, kW, kZR, 5 }, // setf16
2785    { 0b11011010110000010100011111100000, kX, kZR, 0 }, // xpacd
2786    { 0b11011010110000010100001111100000, kX, kZR, 0 }  // xpaci
2787});
2788
2789pub const BASE_RM_NO_IMM: [BaseRMNoImm; 21] = table_new!(BaseRMNoImm, {
2790    { 0b1000100011011111111111, kWX, kZR, 30 }, // ldar
2791    { 0b0000100011011111111111, kW , kZR, 0  }, // ldarb
2792    { 0b0100100011011111111111, kW , kZR, 0  }, // ldarh
2793    { 0b1000100001011111111111, kWX, kZR, 30 }, // ldaxr
2794    { 0b0000100001011111111111, kW , kZR, 0  }, // ldaxrb
2795    { 0b0100100001011111111111, kW , kZR, 0  }, // ldaxrh
2796    { 0b1101100111100000000000, kX , kZR, 0  }, // ldgm
2797    { 0b1000100011011111011111, kWX, kZR, 30 }, // ldlar
2798    { 0b0000100011011111011111, kW , kZR, 0  }, // ldlarb
2799    { 0b0100100011011111011111, kW , kZR, 0  }, // ldlarh
2800    { 0b1000100001011111011111, kWX, kZR, 30 }, // ldxr
2801    { 0b0000100001011111011111, kW , kZR, 0  }, // ldxrb
2802    { 0b0100100001011111011111, kW , kZR, 0  }, // ldxrh
2803    { 0b1101100110100000000000, kX , kZR, 0  }, // stgm
2804    { 0b1000100010011111011111, kWX, kZR, 30 }, // stllr
2805    { 0b0000100010011111011111, kW , kZR, 0  }, // stllrb
2806    { 0b0100100010011111011111, kW , kZR, 0  }, // stllrh
2807    { 0b1000100010011111111111, kWX, kZR, 30 }, // stlr
2808    { 0b0000100010011111111111, kW , kZR, 0  }, // stlrb
2809    { 0b0100100010011111111111, kW , kZR, 0  }, // stlrh
2810    { 0b1101100100100000000000, kX , kZR, 0 }  // stzgm
2811});
2812
2813pub const BASE_RM_SIMM10: [BaseRMSImm10; 2] = table_new!(BaseRMSImm10, {
2814    { 0b1111100000100000000001, kX , kZR, 0, 3 }, // ldraa
2815    { 0b1111100010100000000001, kX , kZR, 0, 3 }  // ldrab
2816});
2817
2818pub const BASE_RM_SIMM9: [BaseRMSImm9; 23] = table_new!(BaseRMSImm9, {
2819    { 0b1101100101100000000000, 0b0000000000000000000000, kX , kZR, 0, 4 }, // ldg
2820    { 0b1011100001000000000010, 0b0000000000000000000000, kWX, kZR, 30, 0 }, // ldtr
2821    { 0b0011100001000000000010, 0b0000000000000000000000, kW , kZR, 0 , 0 }, // ldtrb
2822    { 0b0111100001000000000010, 0b0000000000000000000000, kW , kZR, 0 , 0 }, // ldtrh
2823    { 0b0011100011000000000010, 0b0000000000000000000000, kWX, kZR, 22, 0 }, // ldtrsb
2824    { 0b0111100011000000000010, 0b0000000000000000000000, kWX, kZR, 22, 0 }, // ldtrsh
2825    { 0b1011100010000000000010, 0b0000000000000000000000, kX , kZR, 0 , 0 }, // ldtrsw
2826    { 0b1011100001000000000000, 0b0000000000000000000000, kWX, kZR, 30, 0 }, // ldur
2827    { 0b0011100001000000000000, 0b0000000000000000000000, kW , kZR, 0 , 0 }, // ldurb
2828    { 0b0111100001000000000000, 0b0000000000000000000000, kW , kZR, 0 , 0 }, // ldurh
2829    { 0b0011100011000000000000, 0b0000000000000000000000, kWX, kZR, 22, 0 }, // ldursb
2830    { 0b0111100011000000000000, 0b0000000000000000000000, kWX, kZR, 22, 0 }, // ldursh
2831    { 0b1011100010000000000000, 0b0000000000000000000000, kX , kZR, 0 , 0 }, // ldursw
2832    { 0b1101100110100000000010, 0b1101100110100000000001, kX, kSP, 0, 4 }, // st2g
2833    { 0b1101100100100000000010, 0b1101100100100000000001, kX, kSP, 0, 4 }, // stg
2834    { 0b1011100000000000000010, 0b0000000000000000000000, kWX, kZR, 30, 0 }, // sttr
2835    { 0b0011100000000000000010, 0b0000000000000000000000, kW , kZR, 0 , 0 }, // sttrb
2836    { 0b0111100000000000000010, 0b0000000000000000000000, kW , kZR, 0 , 0 }, // sttrh
2837    { 0b1011100000000000000000, 0b0000000000000000000000, kWX, kZR, 30, 0 }, // stur
2838    { 0b0011100000000000000000, 0b0000000000000000000000, kW , kZR, 0 , 0 }, // sturb
2839    { 0b0111100000000000000000, 0b0000000000000000000000, kW , kZR, 0 , 0 }, // sturh
2840    { 0b1101100111100000000010, 0b1101100111100000000001, kX , kSP, 0, 4 }, // stz2g
2841    { 0b1101100101100000000010, 0b1101100101100000000001, kX , kSP, 0, 4 }  // stzg
2842});
2843
2844pub const BASE_RR: [BaseRR; 18] = table_new!(BaseRR, {
2845    { 0b01011010110000000010000000000000, kWX, kZR, 0, kWX, kZR, 5, true }, // abs
2846    { 0b11011010110000010001100000000000, kX, kZR, 0, kX, kSP, 5, true }, // autda
2847    { 0b11011010110000010001110000000000, kX, kZR, 0, kX, kSP, 5, true }, // autdb
2848    { 0b11011010110000010001000000000000, kX, kZR, 0, kX, kSP, 5, true }, // autia
2849    { 0b11011010110000010001010000000000, kX, kZR, 0, kX, kSP, 5, true }, // autib
2850    { 0b01011010110000000001010000000000, kWX, kZR, 0, kWX, kZR, 5, true }, // cls
2851    { 0b01011010110000000001000000000000, kWX, kZR, 0, kWX, kZR, 5, true }, // clz
2852    { 0b10111010110000000000000000011111, kX, kSP, 5, kX, kSP, 16, true }, // cmpp
2853    { 0b01011010110000000001110000000000, kWX, kZR, 0, kWX, kZR, 5, true }, // cnt
2854    { 0b01011010110000000001100000000000, kWX, kZR, 0, kWX, kZR, 5, true }, // ctz
2855    { 0b01011010000000000000001111100000, kWX, kZR, 0, kWX, kZR, 16, true }, // ngc
2856    { 0b01111010000000000000001111100000, kWX, kZR, 0, kWX, kZR, 16, true }, // ngcs
2857    { 0b11011010110000010000100000000000, kX, kZR, 0, kX, kSP, 5, true }, // pacda
2858    { 0b11011010110000010000110000000000, kX, kZR, 0, kX, kSP, 5, true }, // pacdb
2859    { 0b01011010110000000000000000000000, kWX, kZR, 0, kWX, kZR, 5, true }, // rbit
2860    { 0b01011010110000000000010000000000, kWX, kZR, 0, kWX, kZR, 5, true }, // rev16
2861    { 0b11011010110000000000100000000000, kWX, kZR, 0, kWX, kZR, 5, true }, // rev32
2862    { 0b11011010110000000000110000000000, kWX, kZR, 0, kWX, kZR, 5, true }  // rev64
2863});
2864
2865pub const BASE_RRII: [BaseRRII; 2] = table_new!(BaseRRII, {
2866    { 0b1001000110000000000000, kX, kSP, kX, kSP, 6, 4, 16, 4, 0, 10 }, // addg
2867    { 0b1101000110000000000000, kX, kSP, kX, kSP, 6, 4, 16, 4, 0, 10 }  // subg
2868});
2869
2870pub const BASE_RRR: [BaseRRR; 26] = table_new!(BaseRRR, {
2871    { 0b0001101000000000000000, kWX, kZR, kWX, kZR, kWX, kZR, true }, // adc
2872    { 0b0011101000000000000000, kWX, kZR, kWX, kZR, kWX, kZR, true }, // adcs
2873    { 0b0001101011000000010000, kW, kZR, kW, kZR, kW, kZR, false }, // crc32b
2874    { 0b0001101011000000010100, kW, kZR, kW, kZR, kW, kZR, false }, // crc32cb
2875    { 0b0001101011000000010101, kW, kZR, kW, kZR, kW, kZR, false }, // crc32ch
2876    { 0b0001101011000000010110, kW, kZR, kW, kZR, kW, kZR, false }, // crc32cw
2877    { 0b1001101011000000010111, kW, kZR, kW, kZR, kX, kZR, false }, // crc32cx
2878    { 0b0001101011000000010001, kW, kZR, kW, kZR, kW, kZR, false }, // crc32h
2879    { 0b0001101011000000010010, kW, kZR, kW, kZR, kW, kZR, false }, // crc32w
2880    { 0b1001101011000000010011, kW, kZR, kW, kZR, kX, kZR, false }, // crc32x
2881    { 0b1001101011000000000101, kX , kZR, kX , kSP, kX , kZR, true }, // gmi
2882    { 0b0001101100000000111111, kWX, kZR, kWX, kZR, kWX, kZR, true }, // mneg
2883    { 0b0001101100000000011111, kWX, kZR, kWX, kZR, kWX, kZR, true }, // mul
2884    { 0b1001101011000000001100, kX, kZR, kX, kZR, kX, kSP, false }, // pacga
2885    { 0b0101101000000000000000, kWX, kZR, kWX, kZR, kWX, kZR, true }, // sbc
2886    { 0b0111101000000000000000, kWX, kZR, kWX, kZR, kWX, kZR, true }, // sbcs
2887    { 0b0001101011000000000011, kWX, kZR, kWX, kZR, kWX, kZR, true }, // sdiv
2888    { 0b1001101100100000111111, kX , kZR, kW , kZR, kW , kZR, false }, // smnegl
2889    { 0b1001101101000000011111, kX , kZR, kX , kZR, kX , kZR, true }, // smulh
2890    { 0b1001101100100000011111, kX , kZR, kW , kZR, kW , kZR, false }, // smull
2891    { 0b1001101011000000000000, kX, kZR, kX, kSP, kX, kSP, false }, // subp
2892    { 0b1011101011000000000000, kX, kZR, kX, kSP, kX, kSP, false }, // subps
2893    { 0b0001101011000000000010, kWX, kZR, kWX, kZR, kWX, kZR, true }, // udiv
2894    { 0b1001101110100000111111, kX , kZR, kW , kZR, kW , kZR, false }, // umnegl
2895    { 0b1001101110100000011111, kX , kZR, kW , kZR, kW , kZR, false }, // umull
2896    { 0b1001101111000000011111, kX , kZR, kX , kZR, kX , kZR, false }  // umulh
2897});
2898
2899pub const BASE_RRRR: [BaseRRRR; 6] = table_new!(BaseRRRR, {
2900    { 0b0001101100000000000000, kWX, kZR, kWX, kZR, kWX, kZR, kWX, kZR, true }, // madd
2901    { 0b0001101100000000100000, kWX, kZR, kWX, kZR, kWX, kZR, kWX, kZR, true }, // msub
2902    { 0b1001101100100000000000, kX , kZR, kW , kZR, kW , kZR, kX , kZR, false }, // smaddl
2903    { 0b1001101100100000100000, kX , kZR, kW , kZR, kW , kZR, kX , kZR, false }, // smsubl
2904    { 0b1001101110100000000000, kX , kZR, kW , kZR, kW , kZR, kX , kZR, false }, // umaddl
2905    { 0b1001101110100000100000, kX , kZR, kW , kZR, kW , kZR, kX , kZR, false }  // umsubl
2906});
2907
2908pub const BASE_SHIFT: [BaseShift; 8] = table_new!(BaseShift, {
2909    { 0b0001101011000000001010, 0b0001001100000000011111, 0 }, // asr
2910    { 0b0001101011000000001010, 0b0000000000000000000000, 0 }, // asrv
2911    { 0b0001101011000000001000, 0b0101001100000000000000, 0 }, // lsl
2912    { 0b0001101011000000001000, 0b0000000000000000000000, 0 }, // lslv
2913    { 0b0001101011000000001001, 0b0101001100000000011111, 0 }, // lsr
2914    { 0b0001101011000000001001, 0b0000000000000000000000, 0 }, // lsrv
2915    { 0b0001101011000000001011, 0b0001001110000000000000, 1 }, // ror
2916    { 0b0001101011000000001011, 0b0000000000000000000000, 1 }  // rorv
2917});
2918
2919pub const BASE_STX: [BaseStx; 3] = table_new!(BaseStx, {
2920    { 0b1000100000000000011111, kWX, 30 }, // stxr
2921    { 0b0000100000000000011111, kW , 0  }, // stxrb
2922    { 0b0100100000000000011111, kW , 0  }  // stxrh
2923});
2924
2925pub const BASE_STXP: [BaseStxp; 2] = table_new!(BaseStxp, {
2926    { 0b1000100000100000100000, kWX, 30 }, // stlxp
2927    { 0b1000100000100000000000, kWX, 30 }  // stxp
2928});
2929
2930pub const BASE_TST: [BaseTst; 1] = table_new!(BaseTst, {
2931    { 0b1101010000, 0b111001000 }  // tst
2932});
2933
2934pub const F_SIMD_PAIR: [FSimdPair; 5] = table_new!(FSimdPair, {
2935    { 0b0111111000110000110110, 0b0010111000100000110101 }, // faddp_v
2936    { 0b0111111000110000110010, 0b0010111000100000110001 }, // fmaxnmp_v
2937    { 0b0111111000110000111110, 0b0010111000100000111101 }, // fmaxp_v
2938    { 0b0111111010110000110010, 0b0010111010100000110001 }, // fminnmp_v
2939    { 0b0111111010110000111110, 0b0010111010100000111101 }  // fminp_v
2940});
2941
2942pub const F_SIMD_SV: [FSimdSV; 4] = table_new!(FSimdSV, {
2943    { 0b0010111000110000110010 }, // fmaxnmv_v
2944    { 0b0010111000110000111110 }, // fmaxv_v
2945    { 0b0010111010110000110010 }, // fminnmv_v
2946    { 0b0010111010110000111110 }  // fminv_v
2947});
2948
2949pub const F_SIMD_VV: [FSimdVV; 17] = table_new!(FSimdVV, {
2950    { 0b0001111000100000110000, kHF_A, 0b0000111010100000111110, kHF_B }, // fabs_v
2951    { 0b0001111000100001010000, kHF_A, 0b0010111010100000111110, kHF_B }, // fneg_v
2952    { 0b0101111010100001110110, kHF_B, 0b0000111010100001110110, kHF_B }, // frecpe_v
2953    { 0b0101111010100001111110, kHF_B, 0b0000000000000000000000, kHF_N }, // frecpx_v
2954    { 0b0001111000101000110000, kHF_N, 0b0010111000100001111010, kHF_N }, // frint32x_v
2955    { 0b0001111000101000010000, kHF_N, 0b0000111000100001111010, kHF_N }, // frint32z_v
2956    { 0b0001111000101001110000, kHF_N, 0b0010111000100001111110, kHF_N }, // frint64x_v
2957    { 0b0001111000101001010000, kHF_N, 0b0000111000100001111110, kHF_N }, // frint64z_v
2958    { 0b0001111000100110010000, kHF_A, 0b0010111000100001100010, kHF_B }, // frinta_v
2959    { 0b0001111000100111110000, kHF_A, 0b0010111010100001100110, kHF_B }, // frinti_v
2960    { 0b0001111000100101010000, kHF_A, 0b0000111000100001100110, kHF_B }, // frintm_v
2961    { 0b0001111000100100010000, kHF_A, 0b0000111000100001100010, kHF_B }, // frintn_v
2962    { 0b0001111000100100110000, kHF_A, 0b0000111010100001100010, kHF_B }, // frintp_v
2963    { 0b0001111000100111010000, kHF_A, 0b0010111000100001100110, kHF_B }, // frintx_v
2964    { 0b0001111000100101110000, kHF_A, 0b0000111010100001100110, kHF_B }, // frintz_v
2965    { 0b0111111010100001110110, kHF_B, 0b0010111010100001110110, kHF_B }, // frsqrte_v
2966    { 0b0001111000100001110000, kHF_A, 0b0010111010100001111110, kHF_B }  // fsqrt_v
2967});
2968
2969pub const F_SIMD_VVV: [FSimdVVV; 13] = table_new!(FSimdVVV, {
2970    { 0b0111111010100000110101, kHF_C, 0b0010111010100000110101, kHF_C }, // fabd_v
2971    { 0b0111111000100000111011, kHF_C, 0b0010111000100000111011, kHF_C }, // facge_v
2972    { 0b0111111010100000111011, kHF_C, 0b0010111010100000111011, kHF_C }, // facgt_v
2973    { 0b0001111000100000001010, kHF_A, 0b0000111000100000110101, kHF_C }, // fadd_v
2974    { 0b0001111000100000000110, kHF_A, 0b0010111000100000111111, kHF_C }, // fdiv_v
2975    { 0b0001111000100000010010, kHF_A, 0b0000111000100000111101, kHF_C }, // fmax_v
2976    { 0b0001111000100000011010, kHF_A, 0b0000111000100000110001, kHF_C }, // fmaxnm_v
2977    { 0b0001111000100000010110, kHF_A, 0b0000111010100000111101, kHF_C }, // fmin_v
2978    { 0b0001111000100000011110, kHF_A, 0b0000111010100000110001, kHF_C }, // fminnm_v
2979    { 0b0001111000100000100010, kHF_A, 0b0000000000000000000000, kHF_N }, // fnmul_v
2980    { 0b0101111000100000111111, kHF_C, 0b0000111000100000111111, kHF_C }, // frecps_v
2981    { 0b0101111010100000111111, kHF_C, 0b0000111010100000111111, kHF_C }, // frsqrts_v
2982    { 0b0001111000100000001110, kHF_A, 0b0000111010100000110101, kHF_C }  // fsub_v
2983});
2984
2985pub const F_SIMD_VVVV: [FSimdVVVV; 4] = table_new!(FSimdVVVV, {
2986    { 0b0001111100000000000000, kHF_A, 0b0000000000000000000000, kHF_N }, // fmadd_v
2987    { 0b0001111100000000100000, kHF_A, 0b0000000000000000000000, kHF_N }, // fmsub_v
2988    { 0b0001111100100000000000, kHF_A, 0b0000000000000000000000, kHF_N }, // fnmadd_v
2989    { 0b0001111100100000100000, kHF_A, 0b0000000000000000000000, kHF_N }  // fnmsub_v
2990});
2991
2992pub const F_SIMD_VVVE: [FSimdVVVe; 4] = table_new!(FSimdVVVe, {
2993    { 0b0000000000000000000000, kHF_N, 0b0000111000100000110011, 0b0000111110000000000100 }, // fmla_v
2994    { 0b0000000000000000000000, kHF_N, 0b0000111010100000110011, 0b0000111110000000010100 }, // fmls_v
2995    { 0b0001111000100000000010, kHF_A, 0b0010111000100000110111, 0b0000111110000000100100 }, // fmul_v
2996    { 0b0101111000100000110111, kHF_C, 0b0000111000100000110111, 0b0010111110000000100100 }  // fmulx_v
2997});
2998
2999pub const I_SIMD_PAIR: [ISimdPair; 1] = table_new!(ISimdPair, {
3000    { 0b0101111000110001101110, 0b0000111000100000101111, kVO_V_Any }  // addp_v
3001});
3002
3003pub const I_SIMD_SV: [ISimdSV; 7] = table_new!(ISimdSV, {
3004    { 0b0000111000110001101110, kVO_V_BH_4S }, // addv_v
3005    { 0b0000111000110000001110, kVO_V_BH_4S }, // saddlv_v
3006    { 0b0000111000110000101010, kVO_V_BH_4S }, // smaxv_v
3007    { 0b0000111000110001101010, kVO_V_BH_4S }, // sminv_v
3008    { 0b0010111000110000001110, kVO_V_BH_4S }, // uaddlv_v
3009    { 0b0010111000110000101010, kVO_V_BH_4S }, // umaxv_v
3010    { 0b0010111000110001101010, kVO_V_BH_4S }  // uminv_v
3011});
3012
3013pub const I_SIMD_VV: [ISimdVV; 29] = table_new!(ISimdVV, {
3014    { 0b0000111000100000101110, kVO_V_Any }, // abs_v
3015    { 0b0000111000100000010010, kVO_V_BHS }, // cls_v
3016    { 0b0010111000100000010010, kVO_V_BHS }, // clz_v
3017    { 0b0000111000100000010110, kVO_V_B }, // cnt_v
3018    { 0b0010111000100000010110, kVO_V_B }, // mvn_v
3019    { 0b0010111000100000101110, kVO_V_Any }, // neg_v
3020    { 0b0010111000100000010110, kVO_V_B }, // not_v
3021    { 0b0010111001100000010110, kVO_V_B }, // rbit_v
3022    { 0b0000111000100000000110, kVO_V_B }, // rev16_v
3023    { 0b0010111000100000000010, kVO_V_BH }, // rev32_v
3024    { 0b0000111000100000000010, kVO_V_BHS }, // rev64_v
3025    { 0b0000111000100000011010, kVO_V_BHS }, // sadalp_v
3026    { 0b0000111000100000001010, kVO_V_BHS }, // saddlp_v
3027    { 0b0000111000100000011110, kVO_SV_Any }, // sqabs_v
3028    { 0b0010111000100000011110, kVO_SV_Any }, // sqneg_v
3029    { 0b0000111000100001010010, kVO_SV_B8H4S2 }, // sqxtn_v
3030    { 0b0100111000100001010010, kVO_V_B16H8S4 }, // sqxtn2_v
3031    { 0b0010111000100001001010, kVO_SV_B8H4S2 }, // sqxtun_v
3032    { 0b0110111000100001001010, kVO_V_B16H8S4 }, // sqxtun2_v
3033    { 0b0000111000100000001110, kVO_SV_Any }, // suqadd_v
3034    { 0b0010111000100000011010, kVO_V_BHS }, // uadalp_v
3035    { 0b0010111000100000001010, kVO_V_BHS }, // uaddlp_v
3036    { 0b0010111000100001010010, kVO_SV_B8H4S2 }, // uqxtn_v
3037    { 0b0110111000100001010010, kVO_V_B16H8S4 }, // uqxtn2_v
3038    { 0b0000111010100001110010, kVO_V_S }, // urecpe_v
3039    { 0b0010111010100001110010, kVO_V_S }, // ursqrte_v
3040    { 0b0010111000100000001110, kVO_SV_Any }, // usqadd_v
3041    { 0b0000111000100001001010, kVO_V_B8H4S2 }, // xtn_v
3042    { 0b0100111000100001001010, kVO_V_B16H8S4 }  // xtn2_v
3043});
3044
3045pub const I_SIMD_VVV: [ISimdVVV; 65] = table_new!(ISimdVVV, {
3046    { 0b0000111000100000100001, kVO_V_Any }, // add_v
3047    { 0b0000111000100000010000, kVO_V_B8H4S2 }, // addhn_v
3048    { 0b0100111000100000010000, kVO_V_B16H8S4 }, // addhn2_v
3049    { 0b0000111000100000000111, kVO_V_B }, // and_v
3050    { 0b0010111011100000000111, kVO_V_B }, // bif_v
3051    { 0b0010111010100000000111, kVO_V_B }, // bit_v
3052    { 0b0010111001100000000111, kVO_V_B }, // bsl_v
3053    { 0b0000111000100000100011, kVO_V_Any }, // cmtst_v
3054    { 0b0010111000100000000111, kVO_V_B }, // eor_v
3055    { 0b0000111011100000000111, kVO_V_B }, // orn_v
3056    { 0b0010111000100000100111, kVO_V_B }, // pmul_v
3057    { 0b0000111000100000111000, kVO_V_B8D1 }, // pmull_v
3058    { 0b0100111000100000111000, kVO_V_B16D2 }, // pmull2_v
3059    { 0b0010111000100000010000, kVO_V_B8H4S2 }, // raddhn_v
3060    { 0b0110111000100000010000, kVO_V_B16H8S4 }, // raddhn2_v
3061    { 0b1100111001100000100011, kVO_V_D2 }, // rax1_v
3062    { 0b0010111000100000011000, kVO_V_B8H4S2 }, // rsubhn_v
3063    { 0b0110111000100000011000, kVO_V_B16H8S4 }, // rsubhn2_v
3064    { 0b0000111000100000011111, kVO_V_BHS }, // saba_v
3065    { 0b0000111000100000010100, kVO_V_B8H4S2 }, // sabal_v
3066    { 0b0100111000100000010100, kVO_V_B16H8S4 }, // sabal2_v
3067    { 0b0000111000100000011101, kVO_V_BHS }, // sabd_v
3068    { 0b0000111000100000011100, kVO_V_B8H4S2 }, // sabdl_v
3069    { 0b0100111000100000011100, kVO_V_B16H8S4 }, // sabdl2_v
3070    { 0b0000111000100000000000, kVO_V_B8H4S2 }, // saddl_v
3071    { 0b0100111000100000000000, kVO_V_B16H8S4 }, // saddl2_v
3072    { 0b0000111000100000000001, kVO_V_BHS }, // shadd_v
3073    { 0b0000111000100000001001, kVO_V_BHS }, // shsub_v
3074    { 0b0000111000100000011001, kVO_V_BHS }, // smax_v
3075    { 0b0000111000100000101001, kVO_V_BHS }, // smaxp_v
3076    { 0b0000111000100000011011, kVO_V_BHS }, // smin_v
3077    { 0b0000111000100000101011, kVO_V_BHS }, // sminp_v
3078    { 0b0000111000100000000011, kVO_SV_Any }, // sqadd_v
3079    { 0b0000111000100000001011, kVO_SV_Any }, // sqsub_v
3080    { 0b0000111000100000000101, kVO_V_BHS }, // srhadd_v
3081    { 0b0000111000100000001000, kVO_V_B8H4S2 }, // ssubl_v
3082    { 0b0100111000100000001000, kVO_V_B16H8S4 }, // ssubl2_v
3083    { 0b0010111000100000100001, kVO_V_Any }, // sub_v
3084    { 0b0000111000100000011000, kVO_V_B8H4S2 }, // subhn_v
3085    { 0b0000111000100000011000, kVO_V_B16H8S4 }, // subhn2_v
3086    { 0b0000111000000000001010, kVO_V_BHS_D2 }, // trn1_v
3087    { 0b0000111000000000011010, kVO_V_BHS_D2 }, // trn2_v
3088    { 0b0010111000100000011111, kVO_V_BHS }, // uaba_v
3089    { 0b0010111000100000010100, kVO_V_B8H4S2 }, // uabal_v
3090    { 0b0110111000100000010100, kVO_V_B16H8S4 }, // uabal2_v
3091    { 0b0010111000100000011101, kVO_V_BHS }, // uabd_v
3092    { 0b0010111000100000011100, kVO_V_B8H4S2 }, // uabdl_v
3093    { 0b0110111000100000011100, kVO_V_B16H8S4 }, // uabdl2_v
3094    { 0b0010111000100000000000, kVO_V_B8H4S2 }, // uaddl_v
3095    { 0b0110111000100000000000, kVO_V_B16H8S4 }, // uaddl2_v
3096    { 0b0010111000100000000001, kVO_V_BHS }, // uhadd_v
3097    { 0b0010111000100000001001, kVO_V_BHS }, // uhsub_v
3098    { 0b0010111000100000011001, kVO_V_BHS }, // umax_v
3099    { 0b0010111000100000101001, kVO_V_BHS }, // umaxp_v
3100    { 0b0010111000100000011011, kVO_V_BHS }, // umin_v
3101    { 0b0010111000100000101011, kVO_V_BHS }, // uminp_v
3102    { 0b0010111000100000000011, kVO_SV_Any }, // uqadd_v
3103    { 0b0010111000100000001011, kVO_SV_Any }, // uqsub_v
3104    { 0b0010111000100000000101, kVO_V_BHS }, // urhadd_v
3105    { 0b0010111000100000001000, kVO_V_B8H4S2 }, // usubl_v
3106    { 0b0110111000100000001000, kVO_V_B16H8S4 }, // usubl2_v
3107    { 0b0000111000000000000110, kVO_V_BHS_D2 }, // uzp1_v
3108    { 0b0000111000000000010110, kVO_V_BHS_D2 }, // uzp2_v
3109    { 0b0000111000000000001110, kVO_V_BHS_D2 }, // zip1_v
3110    { 0b0000111000000000011110, kVO_V_BHS_D2 }  // zip2_v
3111});
3112
3113pub const I_SIMD_VVVI: [ISimdVVVI; 2] = table_new!(ISimdVVVI, {
3114    { 0b0010111000000000000000, kVO_V_B, 4, 11, 1 }, // ext_v
3115    { 0b1100111001100000100011, kVO_V_D2, 6, 10, 0 }  // xar_v
3116});
3117
3118pub const I_SIMD_VVVV: [ISimdVVVV; 2] = table_new!(ISimdVVVV, {
3119    { 0b1100111000100000000000, kVO_V_B16 }, // bcax_v
3120    { 0b1100111000000000000000, kVO_V_B16 }  // eor3_v
3121});
3122
3123pub const I_SIMD_VVVVX: [ISimdVVVVx; 1] = table_new!(ISimdVVVVx, {
3124    { 0b1100111001000000000000, kOp_V4S, kOp_V4S, kOp_V4S, kOp_V4S }  // sm3ss1_v
3125});
3126
3127pub const I_SIMD_VVVE: [ISimdVVVe; 25] = table_new!(ISimdVVVe, {
3128    { 0b0000111000100000100101, kVO_V_BHS, 0b0010111100000000000000, kVO_V_HS }, // mla_v
3129    { 0b0010111000100000100101, kVO_V_BHS, 0b0010111100000000010000, kVO_V_HS }, // mls_v
3130    { 0b0000111000100000100111, kVO_V_BHS, 0b0000111100000000100000, kVO_V_HS }, // mul_v
3131    { 0b0000111000100000100000, kVO_V_B8H4S2, 0b0000111100000000001000, kVO_V_H4S2 }, // smlal_v
3132    { 0b0100111000100000100000, kVO_V_B16H8S4, 0b0100111100000000001000, kVO_V_H8S4 }, // smlal2_v
3133    { 0b0000111000100000101000, kVO_V_B8H4S2, 0b0000111100000000011000, kVO_V_H4S2 }, // smlsl_v
3134    { 0b0100111000100000101000, kVO_V_B16H8S4, 0b0100111100000000011000, kVO_V_H8S4 }, // smlsl2_v
3135    { 0b0000111000100000110000, kVO_V_B8H4S2, 0b0000111100000000101000, kVO_V_H4S2 }, // smull_v
3136    { 0b0100111000100000110000, kVO_V_B16H8S4, 0b0100111100000000101000, kVO_V_H8S4 }, // smull2_v
3137    { 0b0000111000100000100100, kVO_SV_BHS, 0b0000111100000000001100, kVO_V_H4S2 }, // sqdmlal_v
3138    { 0b0100111000100000100100, kVO_V_B16H8S4, 0b0100111100000000001100, kVO_V_H8S4 }, // sqdmlal2_v
3139    { 0b0000111000100000101100, kVO_SV_BHS, 0b0000111100000000011100, kVO_V_H4S2 }, // sqdmlsl_v
3140    { 0b0100111000100000101100, kVO_V_B16H8S4, 0b0100111100000000011100, kVO_V_H8S4 }, // sqdmlsl2_v
3141    { 0b0000111000100000101101, kVO_SV_HS, 0b0000111100000000110000, kVO_SV_HS }, // sqdmulh_v
3142    { 0b0000111000100000110100, kVO_SV_BHS, 0b0000111100000000101100, kVO_V_H4S2 }, // sqdmull_v
3143    { 0b0100111000100000110100, kVO_V_B16H8S4, 0b0100111100000000101100, kVO_V_H8S4 }, // sqdmull2_v
3144    { 0b0010111000000000100001, kVO_SV_HS, 0b0010111100000000110100, kVO_SV_HS }, // sqrdmlah_v
3145    { 0b0010111000000000100011, kVO_SV_HS, 0b0010111100000000111100, kVO_SV_HS }, // sqrdmlsh_v
3146    { 0b0010111000100000101101, kVO_SV_HS, 0b0000111100000000110100, kVO_SV_HS }, // sqrdmulh_v
3147    { 0b0010111000100000100000, kVO_V_B8H4S2, 0b0010111100000000001000, kVO_V_H4S2 }, // umlal_v
3148    { 0b0110111000100000100000, kVO_V_B16H8S4, 0b0010111100000000001000, kVO_V_H8S4 }, // umlal2_v
3149    { 0b0010111000100000101000, kVO_V_B8H4S2, 0b0010111100000000011000, kVO_V_H4S2 }, // umlsl_v
3150    { 0b0110111000100000101000, kVO_V_B16H8S4, 0b0110111100000000011000, kVO_V_H8S4 }, // umlsl2_v
3151    { 0b0010111000100000110000, kVO_V_B8H4S2, 0b0010111100000000101000, kVO_V_H4S2 }, // umull_v
3152    { 0b0110111000100000110000, kVO_V_B16H8S4, 0b0110111100000000101000, kVO_V_H8S4 }  // umull2_v
3153});
3154
3155pub const I_SIMD_VVVX: [ISimdVVVx; 17] = table_new!(ISimdVVVx, {
3156    { 0b0110111001000000111011, kOp_V4S, kOp_V8H, kOp_V8H }, // bfmmla_v
3157    { 0b0101111000000000000000, kOp_Q, kOp_S, kOp_V4S }, // sha1c_v
3158    { 0b0101111000000000001000, kOp_Q, kOp_S, kOp_V4S }, // sha1m_v
3159    { 0b0101111000000000000100, kOp_Q, kOp_S, kOp_V4S }, // sha1p_v
3160    { 0b0101111000000000001100, kOp_V4S, kOp_V4S, kOp_V4S }, // sha1su0_v
3161    { 0b0101111000000000010000, kOp_Q, kOp_Q, kOp_V4S }, // sha256h_v
3162    { 0b0101111000000000010100, kOp_Q, kOp_Q, kOp_V4S }, // sha256h2_v
3163    { 0b0101111000000000011000, kOp_V4S, kOp_V4S, kOp_V4S }, // sha256su1_v
3164    { 0b1100111001100000100000, kOp_Q, kOp_Q, kOp_V2D }, // sha512h_v
3165    { 0b1100111001100000100001, kOp_Q, kOp_Q, kOp_V2D }, // sha512h2_v
3166    { 0b1100111001100000100010, kOp_V2D, kOp_V2D, kOp_V2D }, // sha512su1_v
3167    { 0b1100111001100000110000, kOp_V4S, kOp_V4S, kOp_V4S }, // sm3partw1_v
3168    { 0b1100111001100000110001, kOp_V4S, kOp_V4S, kOp_V4S }, // sm3partw2_v
3169    { 0b1100111001100000110010, kOp_V4S, kOp_V4S, kOp_V4S }, // sm4ekey_v
3170    { 0b0100111010000000101001, kOp_V4S, kOp_V16B, kOp_V16B }, // smmla_v
3171    { 0b0110111010000000101001, kOp_V4S, kOp_V16B, kOp_V16B }, // ummla_v
3172    { 0b0100111010000000101011, kOp_V4S, kOp_V16B, kOp_V16B }  // usmmla_v
3173});
3174
3175pub const I_SIMD_VVX: [ISimdVVx; 13] = table_new!(ISimdVVx, {
3176    { 0b0100111000101000010110, kOp_V16B, kOp_V16B }, // aesd_v
3177    { 0b0100111000101000010010, kOp_V16B, kOp_V16B }, // aese_v
3178    { 0b0100111000101000011110, kOp_V16B, kOp_V16B }, // aesimc_v
3179    { 0b0100111000101000011010, kOp_V16B, kOp_V16B }, // aesmc_v
3180    { 0b0001111001100011010000, kOp_H, kOp_S }, // bfcvt_v
3181    { 0b0000111010100001011010, kOp_V4H, kOp_V4S }, // bfcvtn_v
3182    { 0b0100111010100001011010, kOp_V8H, kOp_V4S }, // bfcvtn2_v
3183    { 0b0001111001111110000000, kOp_GpW, kOp_D }, // fjcvtzs_v
3184    { 0b0101111000101000000010, kOp_S, kOp_S }, // sha1h_v
3185    { 0b0101111000101000000110, kOp_V4S, kOp_V4S }, // sha1su1_v
3186    { 0b0101111000101000001010, kOp_V4S, kOp_V4S }, // sha256su0_v
3187    { 0b1100111011000000100000, kOp_V2D, kOp_V2D }, // sha512su0_v
3188    { 0b1100111011000000100001, kOp_V4S, kOp_V4S }  // sm4e_v
3189});
3190
3191pub const I_SIMD_WWV: [ISimdWWV; 8] = table_new!(ISimdWWV, {
3192    { 0b0000111000100000000100, kVO_V_B8H4S2 }, // saddw_v
3193    { 0b0000111000100000000100, kVO_V_B16H8S4 }, // saddw2_v
3194    { 0b0000111000100000001100, kVO_V_B8H4S2 }, // ssubw_v
3195    { 0b0000111000100000001100, kVO_V_B16H8S4 }, // ssubw2_v
3196    { 0b0010111000100000000100, kVO_V_B8H4S2 }, // uaddw_v
3197    { 0b0010111000100000000100, kVO_V_B16H8S4 }, // uaddw2_v
3198    { 0b0010111000100000001100, kVO_V_B8H4S2 }, // usubw_v
3199    { 0b0010111000100000001100, kVO_V_B16H8S4 }  // usubw2_v
3200});
3201
3202pub const SIMD_BIC_ORR: [SimdBicOrr; 2] = table_new!(SimdBicOrr, {
3203    { 0b0000111001100000000111, 0b0010111100000000000001 }, // bic_v
3204    { 0b0000111010100000000111, 0b0000111100000000000001 }  // orr_v
3205});
3206
3207pub const SIMD_CMP: [SimdCmp; 7] = table_new!(SimdCmp, {
3208    { 0b0010111000100000100011, 0b0000111000100000100110, kVO_V_Any }, // cmeq_v
3209    { 0b0000111000100000001111, 0b0010111000100000100010, kVO_V_Any }, // cmge_v
3210    { 0b0000111000100000001101, 0b0000111000100000100010, kVO_V_Any }, // cmgt_v
3211    { 0b0010111000100000001101, 0b0000000000000000000000, kVO_V_Any }, // cmhi_v
3212    { 0b0010111000100000001111, 0b0000000000000000000000, kVO_V_Any }, // cmhs_v
3213    { 0b0000000000000000000000, 0b0010111000100000100110, kVO_V_Any }, // cmle_v
3214    { 0b0000000000000000000000, 0b0000111000100000101010, kVO_V_Any }  // cmlt_v
3215});
3216
3217pub const SIMD_DOT: [SimdDot; 5] = table_new!(SimdDot, {
3218    { 0b0010111001000000111111, 0b0000111101000000111100, kET_S, kET_H, kET_2H }, // bfdot_v
3219    { 0b0000111010000000100101, 0b0000111110000000111000, kET_S, kET_B, kET_4B }, // sdot_v
3220    { 0b0000000000000000000000, 0b0000111100000000111100, kET_S, kET_B, kET_4B }, // sudot_v
3221    { 0b0010111010000000100101, 0b0010111110000000111000, kET_S, kET_B, kET_4B }, // udot_v
3222    { 0b0000111010000000100111, 0b0000111110000000111100, kET_S, kET_B, kET_4B }  // usdot_v
3223});
3224
3225pub const SIMD_FCADD: [SimdFcadd; 1] = table_new!(SimdFcadd, {
3226    { 0b0010111000000000111001 } // fcadd_v
3227});
3228
3229pub const SIMD_FCCMP_FCCMPE: [SimdFccmpFccmpe; 2] = table_new!(SimdFccmpFccmpe, {
3230    { 0b00011110001000000000010000000000 }, // fccmp_v
3231    { 0b00011110001000000000010000010000 }  // fccmpe_v
3232});
3233
3234pub const SIMD_FCM: [SimdFcm; 5] = table_new!(SimdFcm, {
3235    { 0b0000111000100000111001, kHF_C, 0b0000111010100000110110 }, // fcmeq_v
3236    { 0b0010111000100000111001, kHF_C, 0b0010111010100000110010 }, // fcmge_v
3237    { 0b0010111010100000111001, kHF_C, 0b0000111010100000110010 }, // fcmgt_v
3238    { 0b0000000000000000000000, kHF_C, 0b0010111010100000110110 }, // fcmle_v
3239    { 0b0000000000000000000000, kHF_C, 0b0000111010100000111010 }  // fcmlt_v
3240});
3241
3242pub const SIMD_FCMLA: [SimdFcmla; 1] = table_new!(SimdFcmla, {
3243    { 0b0010111000000000110001, 0b0010111100000000000100 }  // fcmla_v
3244});
3245
3246pub const SIMD_FCMP_FCMPE: [SimdFcmpFcmpe; 2] = table_new!(SimdFcmpFcmpe, {
3247    { 0b00011110001000000010000000000000 }, // fcmp_v
3248    { 0b00011110001000000010000000010000 }  // fcmpe_v
3249});
3250
3251pub const SIMD_FCVT_LN: [SimdFcvtLN; 6] = table_new!(SimdFcvtLN, {
3252    { 0b0000111000100001011110, 0, 0 }, // fcvtl_v
3253    { 0b0100111000100001011110, 0, 0 }, // fcvtl2_v
3254    { 0b0000111000100001011010, 0, 0 }, // fcvtn_v
3255    { 0b0100111000100001011010, 0, 0 }, // fcvtn2_v
3256    { 0b0010111000100001011010, 1, 1 }, // fcvtxn_v
3257    { 0b0110111000100001011010, 1, 0 }  // fcvtxn2_v
3258});
3259
3260pub const SIMD_FCVT_SV: [SimdFcvtSV; 12] = table_new!(SimdFcvtSV, {
3261    { 0b0000111000100001110010, 0b0000000000000000000000, 0b0001111000100100000000, 1 }, // fcvtas_v
3262    { 0b0010111000100001110010, 0b0000000000000000000000, 0b0001111000100101000000, 1 }, // fcvtau_v
3263    { 0b0000111000100001101110, 0b0000000000000000000000, 0b0001111000110000000000, 1 }, // fcvtms_v
3264    { 0b0010111000100001101110, 0b0000000000000000000000, 0b0001111000110001000000, 1 }, // fcvtmu_v
3265    { 0b0000111000100001101010, 0b0000000000000000000000, 0b0001111000100000000000, 1 }, // fcvtns_v
3266    { 0b0010111000100001101010, 0b0000000000000000000000, 0b0001111000100001000000, 1 }, // fcvtnu_v
3267    { 0b0000111010100001101010, 0b0000000000000000000000, 0b0001111000101000000000, 1 }, // fcvtps_v
3268    { 0b0010111010100001101010, 0b0000000000000000000000, 0b0001111000101001000000, 1 }, // fcvtpu_v
3269    { 0b0000111010100001101110, 0b0000111100000000111111, 0b0001111000111000000000, 1 }, // fcvtzs_v
3270    { 0b0010111010100001101110, 0b0010111100000000111111, 0b0001111000111001000000, 1 }, // fcvtzu_v
3271    { 0b0000111000100001110110, 0b0000111100000000111001, 0b0001111000100010000000, 0 }, // scvtf_v
3272    { 0b0010111000100001110110, 0b0010111100000000111001, 0b0001111000100011000000, 0 }  // ucvtf_v
3273});
3274
3275pub const SIMD_FMLAL: [SimdFmlal; 6] = table_new!(SimdFmlal, {
3276    { 0b0010111011000000111111, 0b0000111111000000111100, 0, kET_S, kET_H, kET_H }, // bfmlalb_v
3277    { 0b0110111011000000111111, 0b0100111111000000111100, 0, kET_S, kET_H, kET_H }, // bfmlalt_v
3278    { 0b0000111000100000111011, 0b0000111110000000000000, 1, kET_S, kET_H, kET_H }, // fmlal_v
3279    { 0b0010111000100000110011, 0b0010111110000000100000, 1, kET_S, kET_H, kET_H }, // fmlal2_v
3280    { 0b0000111010100000111011, 0b0000111110000000010000, 1, kET_S, kET_H, kET_H }, // fmlsl_v
3281    { 0b0010111010100000110011, 0b0010111110000000110000, 1, kET_S, kET_H, kET_H }  // fmlsl2_v
3282});
3283
3284pub const SIMD_LD_N_ST_N: [SimdLdNStN; 12] = table_new!(SimdLdNStN, {
3285    { 0b0000110101000000000000, 0b0000110001000000001000, 1, 0 }, // ld1_v
3286    { 0b0000110101000000110000, 0b0000000000000000000000, 1, 1 }, // ld1r_v
3287    { 0b0000110101100000000000, 0b0000110001000000100000, 2, 0 }, // ld2_v
3288    { 0b0000110101100000110000, 0b0000000000000000000000, 2, 1 }, // ld2r_v
3289    { 0b0000110101000000001000, 0b0000110001000000010000, 3, 0 }, // ld3_v
3290    { 0b0000110101000000111000, 0b0000000000000000000000, 3, 1 }, // ld3r_v
3291    { 0b0000110101100000001000, 0b0000110001000000000000, 4, 0 }, // ld4_v
3292    { 0b0000110101100000111000, 0b0000000000000000000000, 4, 1 }, // ld4r_v
3293    { 0b0000110100000000000000, 0b0000110000000000001000, 1, 0 }, // st1_v
3294    { 0b0000110100100000000000, 0b0000110000000000100000, 2, 0 }, // st2_v
3295    { 0b0000110100000000001000, 0b0000110000000000010000, 3, 0 }, // st3_v
3296    { 0b0000110100100000001000, 0b0000110000000000000000, 4, 0 }  // st4_v
3297});
3298
3299pub const SIMD_LD_ST: [SimdLdSt; 2] = table_new!(SimdLdSt, {
3300    { 0b0011110101, 0b00111100010, 0b00111100011, 0b00011100, InstId::Ldur_v }, // ldr_v
3301    { 0b0011110100, 0b00111100000, 0b00111100001, 0b00000000, InstId::Stur_v }  // str_v
3302});
3303
3304pub const SIMD_LDP_STP: [SimdLdpStp; 4] = table_new!(SimdLdpStp, {
3305    { 0b0010110001, 0b0000000000 }, // ldnp_v
3306    { 0b0010110101, 0b0010110011 }, // ldp_v
3307    { 0b0010110000, 0b0000000000 }, // stnp_v
3308    { 0b0010110100, 0b0010110010 }  // stp_v
3309});
3310
3311pub const SIMD_LDUR_STUR: [SimdLdurStur; 2] = table_new!(SimdLdurStur, {
3312    { 0b0011110001000000000000 }, // ldur_v
3313    { 0b0011110000000000000000 }  // stur_v
3314});
3315
3316pub const SIMD_MOVI_MVNI: [SimdMoviMvni; 2] = table_new!(SimdMoviMvni, {
3317    { 0b0000111100000000000001, 0 }, // movi_v
3318    { 0b0000111100000000000001, 1 }  // mvni_v
3319});
3320
3321pub const SIMD_SHIFT: [SimdShift; 40] = table_new!(SimdShift, {
3322    { 0b0000000000000000000000, 0b0000111100000000100011, 1, kVO_V_B8H4S2 }, // rshrn_v
3323    { 0b0000000000000000000000, 0b0100111100000000100011, 1, kVO_V_B16H8S4 }, // rshrn2_v
3324    { 0b0000000000000000000000, 0b0000111100000000010101, 0, kVO_V_Any }, // shl_v
3325    { 0b0000000000000000000000, 0b0000111100000000100001, 1, kVO_V_B8H4S2 }, // shrn_v
3326    { 0b0000000000000000000000, 0b0100111100000000100001, 1, kVO_V_B16H8S4 }, // shrn2_v
3327    { 0b0000000000000000000000, 0b0010111100000000010101, 0, kVO_V_Any }, // sli_v
3328    { 0b0000111000100000010111, 0b0000000000000000000000, 1, kVO_SV_Any }, // sqrshl_v
3329    { 0b0000000000000000000000, 0b0000111100000000100111, 1, kVO_SV_B8H4S2 }, // sqrshrn_v
3330    { 0b0000000000000000000000, 0b0100111100000000100111, 1, kVO_V_B16H8S4 }, // sqrshrn2_v
3331    { 0b0000000000000000000000, 0b0010111100000000100011, 1, kVO_SV_B8H4S2 }, // sqrshrun_v
3332    { 0b0000000000000000000000, 0b0110111100000000100011, 1, kVO_V_B16H8S4 }, // sqrshrun2_v
3333    { 0b0000111000100000010011, 0b0000111100000000011101, 0, kVO_SV_Any }, // sqshl_v
3334    { 0b0000000000000000000000, 0b0010111100000000011001, 0, kVO_SV_Any }, // sqshlu_v
3335    { 0b0000000000000000000000, 0b0000111100000000100101, 1, kVO_SV_B8H4S2 }, // sqshrn_v
3336    { 0b0000000000000000000000, 0b0100111100000000100101, 1, kVO_V_B16H8S4 }, // sqshrn2_v
3337    { 0b0000000000000000000000, 0b0010111100000000100001, 1, kVO_SV_B8H4S2 }, // sqshrun_v
3338    { 0b0000000000000000000000, 0b0110111100000000100001, 1, kVO_V_B16H8S4 }, // sqshrun2_v
3339    { 0b0000000000000000000000, 0b0010111100000000010001, 1, kVO_V_Any }, // sri_v
3340    { 0b0000111000100000010101, 0b0000000000000000000000, 0, kVO_V_Any }, // srshl_v
3341    { 0b0000000000000000000000, 0b0000111100000000001001, 1, kVO_V_Any }, // srshr_v
3342    { 0b0000000000000000000000, 0b0000111100000000001101, 1, kVO_V_Any }, // srsra_v
3343    { 0b0000111000100000010001, 0b0000000000000000000000, 0, kVO_V_Any }, // sshl_v
3344    { 0b0000000000000000000000, 0b0000111100000000101001, 0, kVO_V_B8H4S2 }, // sshll_v
3345    { 0b0000000000000000000000, 0b0100111100000000101001, 0, kVO_V_B16H8S4 }, // sshll2_v
3346    { 0b0000000000000000000000, 0b0000111100000000000001, 1, kVO_V_Any }, // sshr_v
3347    { 0b0000000000000000000000, 0b0000111100000000000101, 1, kVO_V_Any }, // ssra_v
3348    { 0b0010111000100000010111, 0b0000000000000000000000, 0, kVO_SV_Any }, // uqrshl_v
3349    { 0b0000000000000000000000, 0b0010111100000000100111, 1, kVO_SV_B8H4S2 }, // uqrshrn_v
3350    { 0b0000000000000000000000, 0b0110111100000000100111, 1, kVO_V_B16H8S4 }, // uqrshrn2_v
3351    { 0b0010111000100000010011, 0b0010111100000000011101, 0, kVO_SV_Any }, // uqshl_v
3352    { 0b0000000000000000000000, 0b0010111100000000100101, 1, kVO_SV_B8H4S2 }, // uqshrn_v
3353    { 0b0000000000000000000000, 0b0110111100000000100101, 1, kVO_V_B16H8S4 }, // uqshrn2_v
3354    { 0b0010111000100000010101, 0b0000000000000000000000, 0, kVO_V_Any }, // urshl_v
3355    { 0b0000000000000000000000, 0b0010111100000000001001, 1, kVO_V_Any }, // urshr_v
3356    { 0b0000000000000000000000, 0b0010111100000000001101, 1, kVO_V_Any }, // ursra_v
3357    { 0b0010111000100000010001, 0b0000000000000000000000, 0, kVO_V_Any }, // ushl_v
3358    { 0b0000000000000000000000, 0b0010111100000000101001, 0, kVO_V_B8H4S2 }, // ushll_v
3359    { 0b0000000000000000000000, 0b0110111100000000101001, 0, kVO_V_B16H8S4 }, // ushll2_v
3360    { 0b0000000000000000000000, 0b0010111100000000000001, 1, kVO_V_Any }, // ushr_v
3361    { 0b0000000000000000000000, 0b0010111100000000000101, 1, kVO_V_Any }  // usra_v
3362});
3363
3364pub const SIMD_SHIFT_ES: [SimdShiftES; 2] = table_new!(SimdShiftES, {
3365    { 0b0010111000100001001110, kVO_V_B8H4S2 }, // shll_v
3366    { 0b0110111000100001001110, kVO_V_B16H8S4 }  // shll2_v
3367});
3368
3369pub const SIMD_SM3TT: [SimdSm3tt; 4] = table_new!(SimdSm3tt, {
3370    { 0b1100111001000000100000 }, // sm3tt1a_v
3371    { 0b1100111001000000100001 }, // sm3tt1b_v
3372    { 0b1100111001000000100010 }, // sm3tt2a_v
3373    { 0b1100111001000000100011 }  // sm3tt2b_v
3374});
3375
3376pub const SIMD_SMOV_UMOV: [SimdSmovUmov; 2] = table_new!(SimdSmovUmov, {
3377    { 0b0000111000000000001011, kVO_V_BHS, 1 }, // smov_v
3378    { 0b0000111000000000001111, kVO_V_Any, 0 }  // umov_v
3379});
3380
3381pub const SIMD_SXTL_UXTL: [SimdSxtlUxtl; 4] = table_new!(SimdSxtlUxtl, {
3382    { 0b0000111100000000101001, kVO_V_B8H4S2 }, // sxtl_v
3383    { 0b0100111100000000101001, kVO_V_B16H8S4 }, // sxtl2_v
3384    { 0b0010111100000000101001, kVO_V_B8H4S2 }, // uxtl_v
3385    { 0b0110111100000000101001, kVO_V_B16H8S4 }  // uxtl2_v
3386});
3387
3388pub const SIMD_TBL_TBX: [SimdTblTbx; 2] = table_new!(SimdTblTbx, {
3389    { 0b0000111000000000000000 }, // tbl_v
3390    { 0b0000111000000000000100 }  // tbx_v
3391});
3392
3393pub static INST_NAME_STRING_TABLE: &[u8] = b"autia1716autibldsmaxalhldsminalldumaxallduminalsha256su0sha512su1sm3partwsqrshrunldaddalldclralldeoralldsetallbstsmaxstsminstumaxstuminfrint32z64x64zh2sqdmlalsl2sqdmulsqrdmlaulhn2sqshruuqrshrspchkfeacrc32cstaddstclrsteorstsetxpaclbfcvtbfmlaltfcvtxfjcvtzfmaxnmfminnmfrsqrraddrsubsha1sm3tt12a2bsm4ekeysqxtuuqshrursqrsetfrev8";
3394#[rustfmt::skip]
3395pub static INST_NAME_INDEX_TABLE: &[u32] = &[
3396        0x80000000, // Small ''.
3397    0x80004C41, // Small 'abs'.
3398    0x80000C81, // Small 'adc'.
3399    0x80098C81, // Small 'adcs'.
3400    0x80001081, // Small 'add'.
3401    0x80039081, // Small 'addg'.
3402    0x80099081, // Small 'adds'.
3403    0x80004881, // Small 'adr'.
3404    0x80084881, // Small 'adrp'.
3405    0x800011C1, // Small 'and'.
3406    0x800991C1, // Small 'ands'.
3407    0x80004A61, // Small 'asr'.
3408    0x800B4A61, // Small 'asrv'.
3409    0x80000281, // Small 'at'.
3410    0x801252A1, // Small 'autda'.
3411    0x83A252A1, // Small 'autdza'.
3412    0x802252A1, // Small 'autdb'.
3413    0x85A252A1, // Small 'autdzb'.
3414    0x8014D2A1, // Small 'autia'.
3415    0x00009000, // Large 'autia1716'.
3416    0x20BF5000, // Large 'autia|sp'.
3417    0xB414D2A1, // Small 'autiaz'.
3418    0x8024D2A1, // Small 'autib'.
3419    0x40055009, // Large 'autib|1716'.
3420    0x20BF5009, // Large 'autib|sp'.
3421    0xB424D2A1, // Small 'autibz'.
3422    0x83A4D2A1, // Small 'autiza'.
3423    0x85A4D2A1, // Small 'autizb'.
3424    0x8E161B01, // Small 'axflag'.
3425    0x80000002, // Small 'b'.
3426    0x80000062, // Small 'bc'.
3427    0x80000CC2, // Small 'bfc'.
3428    0x800024C2, // Small 'bfi'.
3429    0x800034C2, // Small 'bfm'.
3430    0x80C4E0C2, // Small 'bfxil'.
3431    0x80000D22, // Small 'bic'.
3432    0x80098D22, // Small 'bics'.
3433    0x80000182, // Small 'bl'.
3434    0x80004982, // Small 'blr'.
3435    0x80000242, // Small 'br'.
3436    0x80002E42, // Small 'brk'.
3437    0x80002682, // Small 'bti'.
3438    0x80004C23, // Small 'cas'.
3439    0x8000CC23, // Small 'casa'.
3440    0x8020CC23, // Small 'casab'.
3441    0x8080CC23, // Small 'casah'.
3442    0x80C0CC23, // Small 'casal'.
3443    0x84C0CC23, // Small 'casalb'.
3444    0x90C0CC23, // Small 'casalh'.
3445    0x80014C23, // Small 'casb'.
3446    0x80044C23, // Small 'cash'.
3447    0x80064C23, // Small 'casl'.
3448    0x80264C23, // Small 'caslb'.
3449    0x80864C23, // Small 'caslh'.
3450    0x80084C23, // Small 'casp'.
3451    0x80184C23, // Small 'caspa'.
3452    0x98184C23, // Small 'caspal'.
3453    0x80C84C23, // Small 'caspl'.
3454    0x800D3843, // Small 'cbnz'.
3455    0x80006843, // Small 'cbz'.
3456    0x80073463, // Small 'ccmn'.
3457    0x80083463, // Small 'ccmp'.
3458    0x816724C3, // Small 'cfinv'.
3459    0x100260C1, // Large 'chkfea|t'.
3460    0x8001B923, // Small 'cinc'.
3461    0x800B3923, // Small 'cinv'.
3462    0x84814983, // Small 'clrbhb'.
3463    0x8182C983, // Small 'clrex'.
3464    0x80004D83, // Small 'cls'.
3465    0x80006983, // Small 'clz'.
3466    0x800039A3, // Small 'cmn'.
3467    0x800041A3, // Small 'cmp'.
3468    0x800841A3, // Small 'cmpp'.
3469    0x800395C3, // Small 'cneg'.
3470    0x800051C3, // Small 'cnt'.
3471    0x85DF0E43, // Small 'crc32b'.
3472    0x100D60C7, // Large 'crc32c|b'.
3473    0x101660C7, // Large 'crc32c|h'.
3474    0x104860C7, // Large 'crc32c|w'.
3475    0x101360C7, // Large 'crc32c|x'.
3476    0x91DF0E43, // Small 'crc32h'.
3477    0xAFDF0E43, // Small 'crc32w'.
3478    0xB1DF0E43, // Small 'crc32x'.
3479    0x80011263, // Small 'csdb'.
3480    0x80061663, // Small 'csel'.
3481    0x800A1663, // Small 'cset'.
3482    0x80DA1663, // Small 'csetm'.
3483    0x80372663, // Small 'csinc'.
3484    0x81672663, // Small 'csinv'.
3485    0x8072BA63, // Small 'csneg'.
3486    0x80006A83, // Small 'ctz'.
3487    0x80000064, // Small 'dc'.
3488    0x81C9C064, // Small 'dcps1'.
3489    0x81D9C064, // Small 'dcps2'.
3490    0x81E9C064, // Small 'dcps3'.
3491    0x800020E4, // Small 'dgh'.
3492    0x800009A4, // Small 'dmb'.
3493    0x8009C244, // Small 'drps'.
3494    0x80000A64, // Small 'dsb'.
3495    0x800039E5, // Small 'eon'.
3496    0x800049E5, // Small 'eor'.
3497    0x80000A65, // Small 'esb'.
3498    0x80095305, // Small 'extr'.
3499    0x800A1645, // Small 'eret'.
3500    0x800025A7, // Small 'gmi'.
3501    0x800A3928, // Small 'hint'.
3502    0x80005188, // Small 'hlt'.
3503    0x80000EC8, // Small 'hvc'.
3504    0x80000069, // Small 'ic'.
3505    0x80000A69, // Small 'isb'.
3506    0x8042048C, // Small 'ldadd'.
3507    0x8242048C, // Small 'ldadda'.
3508    0x100D6051, // Large 'ldadda|b'.
3509    0x10166051, // Large 'ldadda|h'.
3510    0x00007051, // Large 'ldaddal'.
3511    0x100D7051, // Large 'ldaddal|b'.
3512    0x10167051, // Large 'ldaddal|h'.
3513    0x8442048C, // Small 'ldaddb'.
3514    0x9042048C, // Small 'ldaddh'.
3515    0x9842048C, // Small 'ldaddl'.
3516    0x206D5051, // Large 'ldadd|lb'.
3517    0x20155051, // Large 'ldadd|lh'.
3518    0x8009048C, // Small 'ldar'.
3519    0x8029048C, // Small 'ldarb'.
3520    0x8089048C, // Small 'ldarh'.
3521    0x810C048C, // Small 'ldaxp'.
3522    0x812C048C, // Small 'ldaxr'.
3523    0x852C048C, // Small 'ldaxrb'.
3524    0x912C048C, // Small 'ldaxrh'.
3525    0x81260C8C, // Small 'ldclr'.
3526    0x83260C8C, // Small 'ldclra'.
3527    0x100D6058, // Large 'ldclra|b'.
3528    0x10166058, // Large 'ldclra|h'.
3529    0x00007058, // Large 'ldclral'.
3530    0x100D7058, // Large 'ldclral|b'.
3531    0x10167058, // Large 'ldclral|h'.
3532    0x85260C8C, // Small 'ldclrb'.
3533    0x91260C8C, // Small 'ldclrh'.
3534    0x99260C8C, // Small 'ldclrl'.
3535    0x206D5058, // Large 'ldclr|lb'.
3536    0x20155058, // Large 'ldclr|lh'.
3537    0x8127948C, // Small 'ldeor'.
3538    0x8327948C, // Small 'ldeora'.
3539    0x100D605F, // Large 'ldeora|b'.
3540    0x1016605F, // Large 'ldeora|h'.
3541    0x0000705F, // Large 'ldeoral'.
3542    0x100D705F, // Large 'ldeoral|b'.
3543    0x1016705F, // Large 'ldeoral|h'.
3544    0x8527948C, // Small 'ldeorb'.
3545    0x9127948C, // Small 'ldeorh'.
3546    0x9927948C, // Small 'ldeorl'.
3547    0x206D505F, // Large 'ldeor|lb'.
3548    0x2015505F, // Large 'ldeor|lh'.
3549    0x80001C8C, // Small 'ldg'.
3550    0x80069C8C, // Small 'ldgm'.
3551    0x8120B08C, // Small 'ldlar'.
3552    0x8520B08C, // Small 'ldlarb'.
3553    0x9120B08C, // Small 'ldlarh'.
3554    0x8008388C, // Small 'ldnp'.
3555    0x8000408C, // Small 'ldp'.
3556    0x8179C08C, // Small 'ldpsw'.
3557    0x8000488C, // Small 'ldr'.
3558    0x8010C88C, // Small 'ldraa'.
3559    0x8020C88C, // Small 'ldrab'.
3560    0x8001488C, // Small 'ldrb'.
3561    0x8004488C, // Small 'ldrh'.
3562    0x8029C88C, // Small 'ldrsb'.
3563    0x8089C88C, // Small 'ldrsh'.
3564    0x8179C88C, // Small 'ldrsw'.
3565    0x8142CC8C, // Small 'ldset'.
3566    0x8342CC8C, // Small 'ldseta'.
3567    0x100D6066, // Large 'ldseta|b'.
3568    0x10166066, // Large 'ldseta|h'.
3569    0x00007066, // Large 'ldsetal'.
3570    0x100D7066, // Large 'ldsetal|b'.
3571    0x10167066, // Large 'ldsetal|h'.
3572    0x8542CC8C, // Small 'ldsetb'.
3573    0x9142CC8C, // Small 'ldseth'.
3574    0x9942CC8C, // Small 'ldsetl'.
3575    0x206D5066, // Large 'ldset|lb'.
3576    0x20155066, // Large 'ldset|lh'.
3577    0xB016CC8C, // Small 'ldsmax'.
3578    0x0000700E, // Large 'ldsmaxa'.
3579    0x100D700E, // Large 'ldsmaxa|b'.
3580    0x1016700E, // Large 'ldsmaxa|h'.
3581    0x0000800E, // Large 'ldsmaxal'.
3582    0x100D800E, // Large 'ldsmaxal|b'.
3583    0x1016800E, // Large 'ldsmaxal|h'.
3584    0x100D600E, // Large 'ldsmax|b'.
3585    0x1016600E, // Large 'ldsmax|h'.
3586    0x100E600E, // Large 'ldsmax|l'.
3587    0x206D600E, // Large 'ldsmax|lb'.
3588    0x2015600E, // Large 'ldsmax|lh'.
3589    0x9C96CC8C, // Small 'ldsmin'.
3590    0x00007017, // Large 'ldsmina'.
3591    0x100D7017, // Large 'ldsmina|b'.
3592    0x10167017, // Large 'ldsmina|h'.
3593    0x00008017, // Large 'ldsminal'.
3594    0x100D8017, // Large 'ldsminal|b'.
3595    0x10168017, // Large 'ldsminal|h'.
3596    0x100D6017, // Large 'ldsmin|b'.
3597    0x10166017, // Large 'ldsmin|h'.
3598    0x100E6017, // Large 'ldsmin|l'.
3599    0x206D6017, // Large 'ldsmin|lb'.
3600    0x20156017, // Large 'ldsmin|lh'.
3601    0x8009508C, // Small 'ldtr'.
3602    0x8029508C, // Small 'ldtrb'.
3603    0x8089508C, // Small 'ldtrh'.
3604    0x8539508C, // Small 'ldtrsb'.
3605    0x9139508C, // Small 'ldtrsh'.
3606    0xAF39508C, // Small 'ldtrsw'.
3607    0xB016D48C, // Small 'ldumax'.
3608    0x0000701F, // Large 'ldumaxa'.
3609    0x100D701F, // Large 'ldumaxa|b'.
3610    0x1016701F, // Large 'ldumaxa|h'.
3611    0x0000801F, // Large 'ldumaxal'.
3612    0x100D801F, // Large 'ldumaxal|b'.
3613    0x1016801F, // Large 'ldumaxal|h'.
3614    0x100D601F, // Large 'ldumax|b'.
3615    0x1016601F, // Large 'ldumax|h'.
3616    0x100E601F, // Large 'ldumax|l'.
3617    0x206D601F, // Large 'ldumax|lb'.
3618    0x2015601F, // Large 'ldumax|lh'.
3619    0x9C96D48C, // Small 'ldumin'.
3620    0x00007027, // Large 'ldumina'.
3621    0x100D7027, // Large 'ldumina|b'.
3622    0x10167027, // Large 'ldumina|h'.
3623    0x00008027, // Large 'lduminal'.
3624    0x100D8027, // Large 'lduminal|b'.
3625    0x10168027, // Large 'lduminal|h'.
3626    0x100D6027, // Large 'ldumin|b'.
3627    0x10166027, // Large 'ldumin|h'.
3628    0x100E6027, // Large 'ldumin|l'.
3629    0x206D6027, // Large 'ldumin|lb'.
3630    0x20156027, // Large 'ldumin|lh'.
3631    0x8009548C, // Small 'ldur'.
3632    0x8029548C, // Small 'ldurb'.
3633    0x8089548C, // Small 'ldurh'.
3634    0x8539548C, // Small 'ldursb'.
3635    0x9139548C, // Small 'ldursh'.
3636    0xAF39548C, // Small 'ldursw'.
3637    0x8008608C, // Small 'ldxp'.
3638    0x8009608C, // Small 'ldxr'.
3639    0x8029608C, // Small 'ldxrb'.
3640    0x8089608C, // Small 'ldxrh'.
3641    0x8000326C, // Small 'lsl'.
3642    0x800B326C, // Small 'lslv'.
3643    0x80004A6C, // Small 'lsr'.
3644    0x800B4A6C, // Small 'lsrv'.
3645    0x8002102D, // Small 'madd'.
3646    0x800395CD, // Small 'mneg'.
3647    0x800059ED, // Small 'mov'.
3648    0x8005D9ED, // Small 'movk'.
3649    0x800759ED, // Small 'movn'.
3650    0x800D59ED, // Small 'movz'.
3651    0x80004E4D, // Small 'mrs'.
3652    0x80004A6D, // Small 'msr'.
3653    0x8001566D, // Small 'msub'.
3654    0x800032AD, // Small 'mul'.
3655    0x80003ACD, // Small 'mvn'.
3656    0x80001CAE, // Small 'neg'.
3657    0x80099CAE, // Small 'negs'.
3658    0x80000CEE, // Small 'ngc'.
3659    0x80098CEE, // Small 'ngcs'.
3660    0x800041EE, // Small 'nop'.
3661    0x80003A4F, // Small 'orn'.
3662    0x80004A4F, // Small 'orr'.
3663    0x80120C30, // Small 'pacda'.
3664    0x80220C30, // Small 'pacdb'.
3665    0x83A20C30, // Small 'pacdza'.
3666    0x85A20C30, // Small 'pacdzb'.
3667    0x80138C30, // Small 'pacga'.
3668    0x80069A50, // Small 'prfm'.
3669    0x80214E70, // Small 'pssbb'.
3670    0x800A2452, // Small 'rbit'.
3671    0x800050B2, // Small 'ret'.
3672    0x800058B2, // Small 'rev'.
3673    0x2007313E, // Large 'rev|16'.
3674    0x81DF58B2, // Small 'rev32'.
3675    0x208F313E, // Large 'rev|64'.
3676    0x800049F2, // Small 'ror'.
3677    0x800B49F2, // Small 'rorv'.
3678    0x80000C53, // Small 'sbc'.
3679    0x80098C53, // Small 'sbcs'.
3680    0x81A49853, // Small 'sbfiz'.
3681    0x80069853, // Small 'sbfm'.
3682    0x800C1853, // Small 'sbfx'.
3683    0x800B2493, // Small 'sdiv'.
3684    0x1141413A, // Large 'setf|8'.
3685    0x2007413A, // Large 'setf|16'.
3686    0x800058B3, // Small 'sev'.
3687    0x800658B3, // Small 'sevl'.
3688    0x984205B3, // Small 'smaddl'.
3689    0x800C05B3, // Small 'smax'.
3690    0x80000DB3, // Small 'smc'.
3691    0x800725B3, // Small 'smin'.
3692    0x9872B9B3, // Small 'smnegl'.
3693    0x982ACDB3, // Small 'smsubl'.
3694    0x808655B3, // Small 'smulh'.
3695    0x80C655B3, // Small 'smull'.
3696    0x80010A73, // Small 'ssbb'.
3697    0x8003F693, // Small 'st2g'.
3698    0x80420693, // Small 'stadd'.
3699    0x98420693, // Small 'staddl'.
3700    0x84420693, // Small 'staddb'.
3701    0x206D50CD, // Large 'stadd|lb'.
3702    0x90420693, // Small 'staddh'.
3703    0x201550CD, // Large 'stadd|lh'.
3704    0x81260E93, // Small 'stclr'.
3705    0x99260E93, // Small 'stclrl'.
3706    0x85260E93, // Small 'stclrb'.
3707    0x206D50D2, // Large 'stclr|lb'.
3708    0x91260E93, // Small 'stclrh'.
3709    0x201550D2, // Large 'stclr|lh'.
3710    0x81279693, // Small 'steor'.
3711    0x99279693, // Small 'steorl'.
3712    0x85279693, // Small 'steorb'.
3713    0x206D50D7, // Large 'steor|lb'.
3714    0x91279693, // Small 'steorh'.
3715    0x201550D7, // Large 'steor|lh'.
3716    0x80001E93, // Small 'stg'.
3717    0x80069E93, // Small 'stgm'.
3718    0x80081E93, // Small 'stgp'.
3719    0x81263293, // Small 'stllr'.
3720    0x85263293, // Small 'stllrb'.
3721    0x91263293, // Small 'stllrh'.
3722    0x80093293, // Small 'stlr'.
3723    0x80293293, // Small 'stlrb'.
3724    0x80893293, // Small 'stlrh'.
3725    0x810C3293, // Small 'stlxp'.
3726    0x812C3293, // Small 'stlxr'.
3727    0x852C3293, // Small 'stlxrb'.
3728    0x912C3293, // Small 'stlxrh'.
3729    0x80083A93, // Small 'stnp'.
3730    0x80004293, // Small 'stp'.
3731    0x80004A93, // Small 'str'.
3732    0x80014A93, // Small 'strb'.
3733    0x80044A93, // Small 'strh'.
3734    0x8142CE93, // Small 'stset'.
3735    0x9942CE93, // Small 'stsetl'.
3736    0x8542CE93, // Small 'stsetb'.
3737    0x206D50DC, // Large 'stset|lb'.
3738    0x9142CE93, // Small 'stseth'.
3739    0x201550DC, // Large 'stset|lh'.
3740    0xB016CE93, // Small 'stsmax'.
3741    0x100E606F, // Large 'stsmax|l'.
3742    0x100D606F, // Large 'stsmax|b'.
3743    0x206D606F, // Large 'stsmax|lb'.
3744    0x1016606F, // Large 'stsmax|h'.
3745    0x2015606F, // Large 'stsmax|lh'.
3746    0x9C96CE93, // Small 'stsmin'.
3747    0x100E6075, // Large 'stsmin|l'.
3748    0x100D6075, // Large 'stsmin|b'.
3749    0x206D6075, // Large 'stsmin|lb'.
3750    0x10166075, // Large 'stsmin|h'.
3751    0x20156075, // Large 'stsmin|lh'.
3752    0x80095293, // Small 'sttr'.
3753    0x80295293, // Small 'sttrb'.
3754    0x80895293, // Small 'sttrh'.
3755    0xB016D693, // Small 'stumax'.
3756    0x100E607B, // Large 'stumax|l'.
3757    0x100D607B, // Large 'stumax|b'.
3758    0x206D607B, // Large 'stumax|lb'.
3759    0x1016607B, // Large 'stumax|h'.
3760    0x2015607B, // Large 'stumax|lh'.
3761    0x9C96D693, // Small 'stumin'.
3762    0x100E6081, // Large 'stumin|l'.
3763    0x100D6081, // Large 'stumin|b'.
3764    0x206D6081, // Large 'stumin|lb'.
3765    0x10166081, // Large 'stumin|h'.
3766    0x20156081, // Large 'stumin|lh'.
3767    0x80095693, // Small 'stur'.
3768    0x80295693, // Small 'sturb'.
3769    0x80895693, // Small 'sturh'.
3770    0x80086293, // Small 'stxp'.
3771    0x80096293, // Small 'stxr'.
3772    0x80296293, // Small 'stxrb'.
3773    0x80896293, // Small 'stxrh'.
3774    0x807EEA93, // Small 'stz2g'.
3775    0x8003EA93, // Small 'stzg'.
3776    0x80D3EA93, // Small 'stzgm'.
3777    0x80000AB3, // Small 'sub'.
3778    0x80038AB3, // Small 'subg'.
3779    0x80080AB3, // Small 'subp'.
3780    0x81380AB3, // Small 'subps'.
3781    0x80098AB3, // Small 'subs'.
3782    0x80000ED3, // Small 'svc'.
3783    0x800042F3, // Small 'swp'.
3784    0x8000C2F3, // Small 'swpa'.
3785    0x8020C2F3, // Small 'swpab'.
3786    0x8080C2F3, // Small 'swpah'.
3787    0x80C0C2F3, // Small 'swpal'.
3788    0x84C0C2F3, // Small 'swpalb'.
3789    0x90C0C2F3, // Small 'swpalh'.
3790    0x800142F3, // Small 'swpb'.
3791    0x800442F3, // Small 'swph'.
3792    0x800642F3, // Small 'swpl'.
3793    0x802642F3, // Small 'swplb'.
3794    0x808642F3, // Small 'swplh'.
3795    0x80015313, // Small 'sxtb'.
3796    0x80045313, // Small 'sxth'.
3797    0x800BD313, // Small 'sxtw'.
3798    0x80004F33, // Small 'sys'.
3799    0x80048994, // Small 'tlbi'.
3800    0x80005274, // Small 'tst'.
3801    0x800D3854, // Small 'tbnz'.
3802    0x80006854, // Small 'tbz'.
3803    0x81A49855, // Small 'ubfiz'.
3804    0x80069855, // Small 'ubfm'.
3805    0x800C1855, // Small 'ubfx'.
3806    0x80001895, // Small 'udf'.
3807    0x800B2495, // Small 'udiv'.
3808    0x984205B5, // Small 'umaddl'.
3809    0x800C05B5, // Small 'umax'.
3810    0x800725B5, // Small 'umin'.
3811    0x9872B9B5, // Small 'umnegl'.
3812    0x80C655B5, // Small 'umull'.
3813    0x808655B5, // Small 'umulh'.
3814    0x982ACDB5, // Small 'umsubl'.
3815    0x80015315, // Small 'uxtb'.
3816    0x80045315, // Small 'uxth'.
3817    0x800014D7, // Small 'wfe'.
3818    0x800024D7, // Small 'wfi'.
3819    0x8E161838, // Small 'xaflag'.
3820    0x80418618, // Small 'xpacd'.
3821    0x80918618, // Small 'xpaci'.
3822    0x208850E1, // Large 'xpacl|ri'.
3823    0x80461539, // Small 'yield'.
3824    0x80004C41, // Small 'abs'.
3825    0x80001081, // Small 'add'.
3826    0x80E41081, // Small 'addhn'.
3827    0xBAE41081, // Small 'addhn2'.
3828    0x80081081, // Small 'addp'.
3829    0x800B1081, // Small 'addv'.
3830    0x80024CA1, // Small 'aesd'.
3831    0x8002CCA1, // Small 'aese'.
3832    0x86D4CCA1, // Small 'aesimc'.
3833    0x8036CCA1, // Small 'aesmc'.
3834    0x800011C1, // Small 'and'.
3835    0x800C0462, // Small 'bcax'.
3836    0x814B0CC2, // Small 'bfcvt'.
3837    0x9D4B0CC2, // Small 'bfcvtn'.
3838    0x20B150E6, // Large 'bfcvt|n2'.
3839    0x814790C2, // Small 'bfdot'.
3840    0x206D50EB, // Large 'bfmla|lb'.
3841    0x20F050EB, // Large 'bfmla|lt'.
3842    0x82C6B4C2, // Small 'bfmmla'.
3843    0x80000D22, // Small 'bic'.
3844    0x80001922, // Small 'bif'.
3845    0x80005122, // Small 'bit'.
3846    0x80003262, // Small 'bsl'.
3847    0x80004D83, // Small 'cls'.
3848    0x80006983, // Small 'clz'.
3849    0x800895A3, // Small 'cmeq'.
3850    0x80029DA3, // Small 'cmge'.
3851    0x800A1DA3, // Small 'cmgt'.
3852    0x8004A1A3, // Small 'cmhi'.
3853    0x8009A1A3, // Small 'cmhs'.
3854    0x8002B1A3, // Small 'cmle'.
3855    0x800A31A3, // Small 'cmlt'.
3856    0x8149D1A3, // Small 'cmtst'.
3857    0x800051C3, // Small 'cnt'.
3858    0x800042A4, // Small 'dup'.
3859    0x800049E5, // Small 'eor'.
3860    0x800F49E5, // Small 'eor3'.
3861    0x80005305, // Small 'ext'.
3862    0x80020826, // Small 'fabd'.
3863    0x80098826, // Small 'fabs'.
3864    0x80538C26, // Small 'facge'.
3865    0x81438C26, // Small 'facgt'.
3866    0x80021026, // Small 'fadd'.
3867    0x81021026, // Small 'faddp'.
3868    0x80420466, // Small 'fcadd'.
3869    0x81068C66, // Small 'fccmp'.
3870    0x8B068C66, // Small 'fccmpe'.
3871    0x8112B466, // Small 'fcmeq'.
3872    0x8053B466, // Small 'fcmge'.
3873    0x8143B466, // Small 'fcmgt'.
3874    0x80163466, // Small 'fcmla'.
3875    0x80563466, // Small 'fcmle'.
3876    0x81463466, // Small 'fcmlt'.
3877    0x80083466, // Small 'fcmp'.
3878    0x80583466, // Small 'fcmpe'.
3879    0x80C2CC66, // Small 'fcsel'.
3880    0x800A5866, // Small 'fcvt'.
3881    0xA61A5866, // Small 'fcvtas'.
3882    0xAA1A5866, // Small 'fcvtau'.
3883    0x80CA5866, // Small 'fcvtl'.
3884    0xBACA5866, // Small 'fcvtl2'.
3885    0xA6DA5866, // Small 'fcvtms'.
3886    0xAADA5866, // Small 'fcvtmu'.
3887    0x80EA5866, // Small 'fcvtn'.
3888    0xBAEA5866, // Small 'fcvtn2'.
3889    0xA6EA5866, // Small 'fcvtns'.
3890    0xAAEA5866, // Small 'fcvtnu'.
3891    0xA70A5866, // Small 'fcvtps'.
3892    0xAB0A5866, // Small 'fcvtpu'.
3893    0x9D8A5866, // Small 'fcvtxn'.
3894    0x20B150F2, // Large 'fcvtx|n2'.
3895    0xA7AA5866, // Small 'fcvtzs'.
3896    0xABAA5866, // Small 'fcvtzu'.
3897    0x800B2486, // Small 'fdiv'.
3898    0x101060F7, // Large 'fjcvtz|s'.
3899    0x804205A6, // Small 'fmadd'.
3900    0x800C05A6, // Small 'fmax'.
3901    0x9AEC05A6, // Small 'fmaxnm'.
3902    0x104460FD, // Large 'fmaxnm|p'.
3903    0x10E960FD, // Large 'fmaxnm|v'.
3904    0x810C05A6, // Small 'fmaxp'.
3905    0x816C05A6, // Small 'fmaxv'.
3906    0x800725A6, // Small 'fmin'.
3907    0x9AE725A6, // Small 'fminnm'.
3908    0x10446103, // Large 'fminnm|p'.
3909    0x10E96103, // Large 'fminnm|v'.
3910    0x810725A6, // Small 'fminp'.
3911    0x816725A6, // Small 'fminv'.
3912    0x8000B1A6, // Small 'fmla'.
3913    0x80C0B1A6, // Small 'fmlal'.
3914    0xBAC0B1A6, // Small 'fmlal2'.
3915    0x8009B1A6, // Small 'fmls'.
3916    0x80C9B1A6, // Small 'fmlsl'.
3917    0xBAC9B1A6, // Small 'fmlsl2'.
3918    0x800B3DA6, // Small 'fmov'.
3919    0x802ACDA6, // Small 'fmsub'.
3920    0x800655A6, // Small 'fmul'.
3921    0x818655A6, // Small 'fmulx'.
3922    0x800395C6, // Small 'fneg'.
3923    0x8840B5C6, // Small 'fnmadd'.
3924    0x8559B5C6, // Small 'fnmsub'.
3925    0x80CAB5C6, // Small 'fnmul'.
3926    0x8B019646, // Small 'frecpe'.
3927    0xA7019646, // Small 'frecps'.
3928    0xB1019646, // Small 'frecpx'.
3929    0x10137087, // Large 'frint32|x'.
3930    0x108E7087, // Large 'frint32|z'.
3931    0x308F5087, // Large 'frint|64x'.
3932    0x30925087, // Large 'frint|64z'.
3933    0x83472646, // Small 'frinta'.
3934    0x93472646, // Small 'frinti'.
3935    0x9B472646, // Small 'frintm'.
3936    0x9D472646, // Small 'frintn'.
3937    0xA1472646, // Small 'frintp'.
3938    0xB1472646, // Small 'frintx'.
3939    0xB5472646, // Small 'frintz'.
3940    0x20D85109, // Large 'frsqr|te'.
3941    0x20705109, // Large 'frsqr|ts'.
3942    0x81494666, // Small 'fsqrt'.
3943    0x80015666, // Small 'fsub'.
3944    0x80004DC9, // Small 'ins'.
3945    0x8000708C, // Small 'ld1'.
3946    0x8009708C, // Small 'ld1r'.
3947    0x8000748C, // Small 'ld2'.
3948    0x8009748C, // Small 'ld2r'.
3949    0x8000788C, // Small 'ld3'.
3950    0x8009788C, // Small 'ld3r'.
3951    0x80007C8C, // Small 'ld4'.
3952    0x80097C8C, // Small 'ld4r'.
3953    0x8008388C, // Small 'ldnp'.
3954    0x8000408C, // Small 'ldp'.
3955    0x8000488C, // Small 'ldr'.
3956    0x8009548C, // Small 'ldur'.
3957    0x8000058D, // Small 'mla'.
3958    0x80004D8D, // Small 'mls'.
3959    0x800059ED, // Small 'mov'.
3960    0x8004D9ED, // Small 'movi'.
3961    0x800032AD, // Small 'mul'.
3962    0x80003ACD, // Small 'mvn'.
3963    0x8004BACD, // Small 'mvni'.
3964    0x80001CAE, // Small 'neg'.
3965    0x800051EE, // Small 'not'.
3966    0x80003A4F, // Small 'orn'.
3967    0x80004A4F, // Small 'orr'.
3968    0x800655B0, // Small 'pmul'.
3969    0x80C655B0, // Small 'pmull'.
3970    0xBAC655B0, // Small 'pmull2'.
3971    0x9C821032, // Small 'raddhn'.
3972    0x30B0410E, // Large 'radd|hn2'.
3973    0x800E6032, // Small 'rax1'.
3974    0x800A2452, // Small 'rbit'.
3975    0x2007313E, // Large 'rev|16'.
3976    0x81DF58B2, // Small 'rev32'.
3977    0x208F313E, // Large 'rev|64'.
3978    0x80E92272, // Small 'rshrn'.
3979    0xBAE92272, // Small 'rshrn2'.
3980    0x9C815672, // Small 'rsubhn'.
3981    0x30B04112, // Large 'rsub|hn2'.
3982    0x80008833, // Small 'saba'.
3983    0x80C08833, // Small 'sabal'.
3984    0xBAC08833, // Small 'sabal2'.
3985    0x80020833, // Small 'sabd'.
3986    0x80C20833, // Small 'sabdl'.
3987    0xBAC20833, // Small 'sabdl2'.
3988    0xA0C09033, // Small 'sadalp'.
3989    0x80C21033, // Small 'saddl'.
3990    0xBAC21033, // Small 'saddl2'.
3991    0xA0C21033, // Small 'saddlp'.
3992    0xACC21033, // Small 'saddlv'.
3993    0x81721033, // Small 'saddw'.
3994    0xBB721033, // Small 'saddw2'.
3995    0x806A5873, // Small 'scvtf'.
3996    0x800A3C93, // Small 'sdot'.
3997    0x803E0513, // Small 'sha1c'.
3998    0x808E0513, // Small 'sha1h'.
3999    0x80DE0513, // Small 'sha1m'.
4000    0x810E0513, // Small 'sha1p'.
4001    0x30354116, // Large 'sha1|su0'.
4002    0x303E4116, // Large 'sha1|su1'.
4003    0x1016602F, // Large 'sha256|h'.
4004    0x2095602F, // Large 'sha256|h2'.
4005    0x0000902F, // Large 'sha256su0'.
4006    0x1005802F, // Large 'sha256su|1'.
4007    0x10166038, // Large 'sha512|h'.
4008    0x20956038, // Large 'sha512|h2'.
4009    0x30356038, // Large 'sha512|su0'.
4010    0x303E6038, // Large 'sha512|su1'.
4011    0x80420513, // Small 'shadd'.
4012    0x80003113, // Small 'shl'.
4013    0x80063113, // Small 'shll'.
4014    0x81D63113, // Small 'shll2'.
4015    0x80074913, // Small 'shrn'.
4016    0x81D74913, // Small 'shrn2'.
4017    0x802ACD13, // Small 'shsub'.
4018    0x80002593, // Small 'sli'.
4019    0x10058041, // Large 'sm3partw|1'.
4020    0x10328041, // Large 'sm3partw|2'.
4021    0xB939F9B3, // Small 'sm3ss1'.
4022    0x1000611A, // Large 'sm3tt1|a'.
4023    0x100D611A, // Large 'sm3tt1|b'.
4024    0x2120511A, // Large 'sm3tt|2a'.
4025    0x2122511A, // Large 'sm3tt|2b'.
4026    0x8002FDB3, // Small 'sm4e'.
4027    0x00007124, // Large 'sm4ekey'.
4028    0x800C05B3, // Small 'smax'.
4029    0x810C05B3, // Small 'smaxp'.
4030    0x816C05B3, // Small 'smaxv'.
4031    0x800725B3, // Small 'smin'.
4032    0x810725B3, // Small 'sminp'.
4033    0x816725B3, // Small 'sminv'.
4034    0x80C0B1B3, // Small 'smlal'.
4035    0xBAC0B1B3, // Small 'smlal2'.
4036    0x80C9B1B3, // Small 'smlsl'.
4037    0xBAC9B1B3, // Small 'smlsl2'.
4038    0x801635B3, // Small 'smmla'.
4039    0x800B3DB3, // Small 'smov'.
4040    0x80C655B3, // Small 'smull'.
4041    0xBAC655B3, // Small 'smull2'.
4042    0x81310633, // Small 'sqabs'.
4043    0x80420633, // Small 'sqadd'.
4044    0x00007097, // Large 'sqdmlal'.
4045    0x10327097, // Large 'sqdmlal|2'.
4046    0x209E5097, // Large 'sqdml|sl'.
4047    0x309E5097, // Large 'sqdml|sl2'.
4048    0x101660A1, // Large 'sqdmul|h'.
4049    0x100E60A1, // Large 'sqdmul|l'.
4050    0x209F60A1, // Large 'sqdmul|l2'.
4051    0x8072BA33, // Small 'sqneg'.
4052    0x101670A7, // Large 'sqrdmla|h'.
4053    0x202F60A7, // Large 'sqrdml|sh'.
4054    0x30AE50A7, // Large 'sqrdm|ulh'.
4055    0x9889CA33, // Small 'sqrshl'.
4056    0x101C6049, // Large 'sqrshr|n'.
4057    0x20B16049, // Large 'sqrshr|n2'.
4058    0x00008049, // Large 'sqrshrun'.
4059    0x10328049, // Large 'sqrshrun|2'.
4060    0x80C44E33, // Small 'sqshl'.
4061    0xAAC44E33, // Small 'sqshlu'.
4062    0x9D244E33, // Small 'sqshrn'.
4063    0x20B150B3, // Large 'sqshr|n2'.
4064    0x101C60B3, // Large 'sqshru|n'.
4065    0x20B160B3, // Large 'sqshru|n2'.
4066    0x802ACE33, // Small 'sqsub'.
4067    0x80EA6233, // Small 'sqxtn'.
4068    0xBAEA6233, // Small 'sqxtn2'.
4069    0x9D5A6233, // Small 'sqxtun'.
4070    0x20B1512B, // Large 'sqxtu|n2'.
4071    0x8840A253, // Small 'srhadd'.
4072    0x80002653, // Small 'sri'.
4073    0x80C44E53, // Small 'srshl'.
4074    0x81244E53, // Small 'srshr'.
4075    0x80194E53, // Small 'srsra'.
4076    0x80062273, // Small 'sshl'.
4077    0x80C62273, // Small 'sshll'.
4078    0xBAC62273, // Small 'sshll2'.
4079    0x80092273, // Small 'sshr'.
4080    0x8000CA73, // Small 'ssra'.
4081    0x80C15673, // Small 'ssubl'.
4082    0xBAC15673, // Small 'ssubl2'.
4083    0x81715673, // Small 'ssubw'.
4084    0xBB715673, // Small 'ssubw2'.
4085    0x80007293, // Small 'st1'.
4086    0x80007693, // Small 'st2'.
4087    0x80007A93, // Small 'st3'.
4088    0x80007E93, // Small 'st4'.
4089    0x80083A93, // Small 'stnp'.
4090    0x80004293, // Small 'stp'.
4091    0x80004A93, // Small 'str'.
4092    0x80095693, // Small 'stur'.
4093    0x80000AB3, // Small 'sub'.
4094    0x80E40AB3, // Small 'subhn'.
4095    0xBAE40AB3, // Small 'subhn2'.
4096    0x814792B3, // Small 'sudot'.
4097    0x8840C6B3, // Small 'suqadd'.
4098    0x80065313, // Small 'sxtl'.
4099    0x81D65313, // Small 'sxtl2'.
4100    0x80003054, // Small 'tbl'.
4101    0x80006054, // Small 'tbx'.
4102    0x800E3A54, // Small 'trn1'.
4103    0x800EBA54, // Small 'trn2'.
4104    0x80008835, // Small 'uaba'.
4105    0x80C08835, // Small 'uabal'.
4106    0xBAC08835, // Small 'uabal2'.
4107    0x80020835, // Small 'uabd'.
4108    0x80C20835, // Small 'uabdl'.
4109    0xBAC20835, // Small 'uabdl2'.
4110    0xA0C09035, // Small 'uadalp'.
4111    0x80C21035, // Small 'uaddl'.
4112    0xBAC21035, // Small 'uaddl2'.
4113    0xA0C21035, // Small 'uaddlp'.
4114    0xACC21035, // Small 'uaddlv'.
4115    0x81721035, // Small 'uaddw'.
4116    0xBB721035, // Small 'uaddw2'.
4117    0x806A5875, // Small 'ucvtf'.
4118    0x800A3C95, // Small 'udot'.
4119    0x80420515, // Small 'uhadd'.
4120    0x802ACD15, // Small 'uhsub'.
4121    0x800C05B5, // Small 'umax'.
4122    0x810C05B5, // Small 'umaxp'.
4123    0x816C05B5, // Small 'umaxv'.
4124    0x800725B5, // Small 'umin'.
4125    0x810725B5, // Small 'uminp'.
4126    0x816725B5, // Small 'uminv'.
4127    0x80C0B1B5, // Small 'umlal'.
4128    0xBAC0B1B5, // Small 'umlal2'.
4129    0x80C9B1B5, // Small 'umlsl'.
4130    0xBAC9B1B5, // Small 'umlsl2'.
4131    0x801635B5, // Small 'ummla'.
4132    0x800B3DB5, // Small 'umov'.
4133    0x80C655B5, // Small 'umull'.
4134    0xBAC655B5, // Small 'umull2'.
4135    0x80420635, // Small 'uqadd'.
4136    0x9889CA35, // Small 'uqrshl'.
4137    0x101C60B9, // Large 'uqrshr|n'.
4138    0x20B160B9, // Large 'uqrshr|n2'.
4139    0x80C44E35, // Small 'uqshl'.
4140    0x9D244E35, // Small 'uqshrn'.
4141    0x20B15130, // Large 'uqshr|n2'.
4142    0x802ACE35, // Small 'uqsub'.
4143    0x80EA6235, // Small 'uqxtn'.
4144    0xBAEA6235, // Small 'uqxtn2'.
4145    0x8B019655, // Small 'urecpe'.
4146    0x8840A255, // Small 'urhadd'.
4147    0x80C44E55, // Small 'urshl'.
4148    0x81244E55, // Small 'urshr'.
4149    0x20D85135, // Large 'ursqr|te'.
4150    0x80194E55, // Small 'ursra'.
4151    0x81479275, // Small 'usdot'.
4152    0x80062275, // Small 'ushl'.
4153    0x80C62275, // Small 'ushll'.
4154    0xBAC62275, // Small 'ushll2'.
4155    0x80092275, // Small 'ushr'.
4156    0x82C6B675, // Small 'usmmla'.
4157    0x8840C675, // Small 'usqadd'.
4158    0x8000CA75, // Small 'usra'.
4159    0x80C15675, // Small 'usubl'.
4160    0xBAC15675, // Small 'usubl2'.
4161    0x81715675, // Small 'usubw'.
4162    0xBB715675, // Small 'usubw2'.
4163    0x80065315, // Small 'uxtl'.
4164    0x81D65315, // Small 'uxtl2'.
4165    0x800E4355, // Small 'uzp1'.
4166    0x800EC355, // Small 'uzp2'.
4167    0x80004838, // Small 'xar'.
4168    0x80003A98, // Small 'xtn'.
4169    0x800EBA98, // Small 'xtn2'.
4170    0x800E413A, // Small 'zip1'.
4171    0x800EC13A  // Small 'zip2'.
4172];
4173
4174#[rustfmt::skip]
4175#[derive(Debug, Clone, Copy, PartialEq, Eq)]
4176#[allow(non_camel_case_types)]
4177#[repr(u32)]
4178pub enum InstId {
4179    None = 0,                         // Instruction ''.
4180    Abs,                              // Instruction 'abs'.
4181    Adc,                              // Instruction 'adc'.
4182    Adcs,                             // Instruction 'adcs'.
4183    Add,                              // Instruction 'add'.
4184    Addg,                             // Instruction 'addg'.
4185    Adds,                             // Instruction 'adds'.
4186    Adr,                              // Instruction 'adr'.
4187    Adrp,                             // Instruction 'adrp'.
4188    And,                              // Instruction 'and'.
4189    Ands,                             // Instruction 'ands'.
4190    Asr,                              // Instruction 'asr'.
4191    Asrv,                             // Instruction 'asrv'.
4192    At,                               // Instruction 'at'.
4193    Autda,                            // Instruction 'autda'.
4194    Autdza,                           // Instruction 'autdza'.
4195    Autdb,                            // Instruction 'autdb'.
4196    Autdzb,                           // Instruction 'autdzb'.
4197    Autia,                            // Instruction 'autia'.
4198    Autia1716,                        // Instruction 'autia1716'.
4199    Autiasp,                          // Instruction 'autiasp'.
4200    Autiaz,                           // Instruction 'autiaz'.
4201    Autib,                            // Instruction 'autib'.
4202    Autib1716,                        // Instruction 'autib1716'.
4203    Autibsp,                          // Instruction 'autibsp'.
4204    Autibz,                           // Instruction 'autibz'.
4205    Autiza,                           // Instruction 'autiza'.
4206    Autizb,                           // Instruction 'autizb'.
4207    Axflag,                           // Instruction 'axflag'.
4208    B,                                // Instruction 'b'.
4209    Bc,                               // Instruction 'bc'.
4210    Bfc,                              // Instruction 'bfc'.
4211    Bfi,                              // Instruction 'bfi'.
4212    Bfm,                              // Instruction 'bfm'.
4213    Bfxil,                            // Instruction 'bfxil'.
4214    Bic,                              // Instruction 'bic'.
4215    Bics,                             // Instruction 'bics'.
4216    Bl,                               // Instruction 'bl'.
4217    Blr,                              // Instruction 'blr'.
4218    Br,                               // Instruction 'br'.
4219    Brk,                              // Instruction 'brk'.
4220    Bti,                              // Instruction 'bti'.
4221    Cas,                              // Instruction 'cas'.
4222    Casa,                             // Instruction 'casa'.
4223    Casab,                            // Instruction 'casab'.
4224    Casah,                            // Instruction 'casah'.
4225    Casal,                            // Instruction 'casal'.
4226    Casalb,                           // Instruction 'casalb'.
4227    Casalh,                           // Instruction 'casalh'.
4228    Casb,                             // Instruction 'casb'.
4229    Cash,                             // Instruction 'cash'.
4230    Casl,                             // Instruction 'casl'.
4231    Caslb,                            // Instruction 'caslb'.
4232    Caslh,                            // Instruction 'caslh'.
4233    Casp,                             // Instruction 'casp'.
4234    Caspa,                            // Instruction 'caspa'.
4235    Caspal,                           // Instruction 'caspal'.
4236    Caspl,                            // Instruction 'caspl'.
4237    Cbnz,                             // Instruction 'cbnz'.
4238    Cbz,                              // Instruction 'cbz'.
4239    Ccmn,                             // Instruction 'ccmn'.
4240    Ccmp,                             // Instruction 'ccmp'.
4241    Cfinv,                            // Instruction 'cfinv'.
4242    Chkfeat,                          // Instruction 'chkfeat'.
4243    Cinc,                             // Instruction 'cinc'.
4244    Cinv,                             // Instruction 'cinv'.
4245    Clrbhb,                           // Instruction 'clrbhb'.
4246    Clrex,                            // Instruction 'clrex'.
4247    Cls,                              // Instruction 'cls'.
4248    Clz,                              // Instruction 'clz'.
4249    Cmn,                              // Instruction 'cmn'.
4250    Cmp,                              // Instruction 'cmp'.
4251    Cmpp,                             // Instruction 'cmpp'.
4252    Cneg,                             // Instruction 'cneg'.
4253    Cnt,                              // Instruction 'cnt'.
4254    Crc32b,                           // Instruction 'crc32b'.
4255    Crc32cb,                          // Instruction 'crc32cb'.
4256    Crc32ch,                          // Instruction 'crc32ch'.
4257    Crc32cw,                          // Instruction 'crc32cw'.
4258    Crc32cx,                          // Instruction 'crc32cx'.
4259    Crc32h,                           // Instruction 'crc32h'.
4260    Crc32w,                           // Instruction 'crc32w'.
4261    Crc32x,                           // Instruction 'crc32x'.
4262    Csdb,                             // Instruction 'csdb'.
4263    Csel,                             // Instruction 'csel'.
4264    Cset,                             // Instruction 'cset'.
4265    Csetm,                            // Instruction 'csetm'.
4266    Csinc,                            // Instruction 'csinc'.
4267    Csinv,                            // Instruction 'csinv'.
4268    Csneg,                            // Instruction 'csneg'.
4269    Ctz,                              // Instruction 'ctz'.
4270    Dc,                               // Instruction 'dc'.
4271    Dcps1,                            // Instruction 'dcps1'.
4272    Dcps2,                            // Instruction 'dcps2'.
4273    Dcps3,                            // Instruction 'dcps3'.
4274    Dgh,                              // Instruction 'dgh'.
4275    Dmb,                              // Instruction 'dmb'.
4276    Drps,                             // Instruction 'drps'.
4277    Dsb,                              // Instruction 'dsb'.
4278    Eon,                              // Instruction 'eon'.
4279    Eor,                              // Instruction 'eor'.
4280    Esb,                              // Instruction 'esb'.
4281    Extr,                             // Instruction 'extr'.
4282    Eret,                             // Instruction 'eret'.
4283    Gmi,                              // Instruction 'gmi'.
4284    Hint,                             // Instruction 'hint'.
4285    Hlt,                              // Instruction 'hlt'.
4286    Hvc,                              // Instruction 'hvc'.
4287    Ic,                               // Instruction 'ic'.
4288    Isb,                              // Instruction 'isb'.
4289    Ldadd,                            // Instruction 'ldadd'.
4290    Ldadda,                           // Instruction 'ldadda'.
4291    Ldaddab,                          // Instruction 'ldaddab'.
4292    Ldaddah,                          // Instruction 'ldaddah'.
4293    Ldaddal,                          // Instruction 'ldaddal'.
4294    Ldaddalb,                         // Instruction 'ldaddalb'.
4295    Ldaddalh,                         // Instruction 'ldaddalh'.
4296    Ldaddb,                           // Instruction 'ldaddb'.
4297    Ldaddh,                           // Instruction 'ldaddh'.
4298    Ldaddl,                           // Instruction 'ldaddl'.
4299    Ldaddlb,                          // Instruction 'ldaddlb'.
4300    Ldaddlh,                          // Instruction 'ldaddlh'.
4301    Ldar,                             // Instruction 'ldar'.
4302    Ldarb,                            // Instruction 'ldarb'.
4303    Ldarh,                            // Instruction 'ldarh'.
4304    Ldaxp,                            // Instruction 'ldaxp'.
4305    Ldaxr,                            // Instruction 'ldaxr'.
4306    Ldaxrb,                           // Instruction 'ldaxrb'.
4307    Ldaxrh,                           // Instruction 'ldaxrh'.
4308    Ldclr,                            // Instruction 'ldclr'.
4309    Ldclra,                           // Instruction 'ldclra'.
4310    Ldclrab,                          // Instruction 'ldclrab'.
4311    Ldclrah,                          // Instruction 'ldclrah'.
4312    Ldclral,                          // Instruction 'ldclral'.
4313    Ldclralb,                         // Instruction 'ldclralb'.
4314    Ldclralh,                         // Instruction 'ldclralh'.
4315    Ldclrb,                           // Instruction 'ldclrb'.
4316    Ldclrh,                           // Instruction 'ldclrh'.
4317    Ldclrl,                           // Instruction 'ldclrl'.
4318    Ldclrlb,                          // Instruction 'ldclrlb'.
4319    Ldclrlh,                          // Instruction 'ldclrlh'.
4320    Ldeor,                            // Instruction 'ldeor'.
4321    Ldeora,                           // Instruction 'ldeora'.
4322    Ldeorab,                          // Instruction 'ldeorab'.
4323    Ldeorah,                          // Instruction 'ldeorah'.
4324    Ldeoral,                          // Instruction 'ldeoral'.
4325    Ldeoralb,                         // Instruction 'ldeoralb'.
4326    Ldeoralh,                         // Instruction 'ldeoralh'.
4327    Ldeorb,                           // Instruction 'ldeorb'.
4328    Ldeorh,                           // Instruction 'ldeorh'.
4329    Ldeorl,                           // Instruction 'ldeorl'.
4330    Ldeorlb,                          // Instruction 'ldeorlb'.
4331    Ldeorlh,                          // Instruction 'ldeorlh'.
4332    Ldg,                              // Instruction 'ldg'.
4333    Ldgm,                             // Instruction 'ldgm'.
4334    Ldlar,                            // Instruction 'ldlar'.
4335    Ldlarb,                           // Instruction 'ldlarb'.
4336    Ldlarh,                           // Instruction 'ldlarh'.
4337    Ldnp,                             // Instruction 'ldnp'.
4338    Ldp,                              // Instruction 'ldp'.
4339    Ldpsw,                            // Instruction 'ldpsw'.
4340    Ldr,                              // Instruction 'ldr'.
4341    Ldraa,                            // Instruction 'ldraa'.
4342    Ldrab,                            // Instruction 'ldrab'.
4343    Ldrb,                             // Instruction 'ldrb'.
4344    Ldrh,                             // Instruction 'ldrh'.
4345    Ldrsb,                            // Instruction 'ldrsb'.
4346    Ldrsh,                            // Instruction 'ldrsh'.
4347    Ldrsw,                            // Instruction 'ldrsw'.
4348    Ldset,                            // Instruction 'ldset'.
4349    Ldseta,                           // Instruction 'ldseta'.
4350    Ldsetab,                          // Instruction 'ldsetab'.
4351    Ldsetah,                          // Instruction 'ldsetah'.
4352    Ldsetal,                          // Instruction 'ldsetal'.
4353    Ldsetalb,                         // Instruction 'ldsetalb'.
4354    Ldsetalh,                         // Instruction 'ldsetalh'.
4355    Ldsetb,                           // Instruction 'ldsetb'.
4356    Ldseth,                           // Instruction 'ldseth'.
4357    Ldsetl,                           // Instruction 'ldsetl'.
4358    Ldsetlb,                          // Instruction 'ldsetlb'.
4359    Ldsetlh,                          // Instruction 'ldsetlh'.
4360    Ldsmax,                           // Instruction 'ldsmax'.
4361    Ldsmaxa,                          // Instruction 'ldsmaxa'.
4362    Ldsmaxab,                         // Instruction 'ldsmaxab'.
4363    Ldsmaxah,                         // Instruction 'ldsmaxah'.
4364    Ldsmaxal,                         // Instruction 'ldsmaxal'.
4365    Ldsmaxalb,                        // Instruction 'ldsmaxalb'.
4366    Ldsmaxalh,                        // Instruction 'ldsmaxalh'.
4367    Ldsmaxb,                          // Instruction 'ldsmaxb'.
4368    Ldsmaxh,                          // Instruction 'ldsmaxh'.
4369    Ldsmaxl,                          // Instruction 'ldsmaxl'.
4370    Ldsmaxlb,                         // Instruction 'ldsmaxlb'.
4371    Ldsmaxlh,                         // Instruction 'ldsmaxlh'.
4372    Ldsmin,                           // Instruction 'ldsmin'.
4373    Ldsmina,                          // Instruction 'ldsmina'.
4374    Ldsminab,                         // Instruction 'ldsminab'.
4375    Ldsminah,                         // Instruction 'ldsminah'.
4376    Ldsminal,                         // Instruction 'ldsminal'.
4377    Ldsminalb,                        // Instruction 'ldsminalb'.
4378    Ldsminalh,                        // Instruction 'ldsminalh'.
4379    Ldsminb,                          // Instruction 'ldsminb'.
4380    Ldsminh,                          // Instruction 'ldsminh'.
4381    Ldsminl,                          // Instruction 'ldsminl'.
4382    Ldsminlb,                         // Instruction 'ldsminlb'.
4383    Ldsminlh,                         // Instruction 'ldsminlh'.
4384    Ldtr,                             // Instruction 'ldtr'.
4385    Ldtrb,                            // Instruction 'ldtrb'.
4386    Ldtrh,                            // Instruction 'ldtrh'.
4387    Ldtrsb,                           // Instruction 'ldtrsb'.
4388    Ldtrsh,                           // Instruction 'ldtrsh'.
4389    Ldtrsw,                           // Instruction 'ldtrsw'.
4390    Ldumax,                           // Instruction 'ldumax'.
4391    Ldumaxa,                          // Instruction 'ldumaxa'.
4392    Ldumaxab,                         // Instruction 'ldumaxab'.
4393    Ldumaxah,                         // Instruction 'ldumaxah'.
4394    Ldumaxal,                         // Instruction 'ldumaxal'.
4395    Ldumaxalb,                        // Instruction 'ldumaxalb'.
4396    Ldumaxalh,                        // Instruction 'ldumaxalh'.
4397    Ldumaxb,                          // Instruction 'ldumaxb'.
4398    Ldumaxh,                          // Instruction 'ldumaxh'.
4399    Ldumaxl,                          // Instruction 'ldumaxl'.
4400    Ldumaxlb,                         // Instruction 'ldumaxlb'.
4401    Ldumaxlh,                         // Instruction 'ldumaxlh'.
4402    Ldumin,                           // Instruction 'ldumin'.
4403    Ldumina,                          // Instruction 'ldumina'.
4404    Lduminab,                         // Instruction 'lduminab'.
4405    Lduminah,                         // Instruction 'lduminah'.
4406    Lduminal,                         // Instruction 'lduminal'.
4407    Lduminalb,                        // Instruction 'lduminalb'.
4408    Lduminalh,                        // Instruction 'lduminalh'.
4409    Lduminb,                          // Instruction 'lduminb'.
4410    Lduminh,                          // Instruction 'lduminh'.
4411    Lduminl,                          // Instruction 'lduminl'.
4412    Lduminlb,                         // Instruction 'lduminlb'.
4413    Lduminlh,                         // Instruction 'lduminlh'.
4414    Ldur,                             // Instruction 'ldur'.
4415    Ldurb,                            // Instruction 'ldurb'.
4416    Ldurh,                            // Instruction 'ldurh'.
4417    Ldursb,                           // Instruction 'ldursb'.
4418    Ldursh,                           // Instruction 'ldursh'.
4419    Ldursw,                           // Instruction 'ldursw'.
4420    Ldxp,                             // Instruction 'ldxp'.
4421    Ldxr,                             // Instruction 'ldxr'.
4422    Ldxrb,                            // Instruction 'ldxrb'.
4423    Ldxrh,                            // Instruction 'ldxrh'.
4424    Lsl,                              // Instruction 'lsl'.
4425    Lslv,                             // Instruction 'lslv'.
4426    Lsr,                              // Instruction 'lsr'.
4427    Lsrv,                             // Instruction 'lsrv'.
4428    Madd,                             // Instruction 'madd'.
4429    Mneg,                             // Instruction 'mneg'.
4430    Mov,                              // Instruction 'mov'.
4431    Movk,                             // Instruction 'movk'.
4432    Movn,                             // Instruction 'movn'.
4433    Movz,                             // Instruction 'movz'.
4434    Mrs,                              // Instruction 'mrs'.
4435    Msr,                              // Instruction 'msr'.
4436    Msub,                             // Instruction 'msub'.
4437    Mul,                              // Instruction 'mul'.
4438    Mvn,                              // Instruction 'mvn'.
4439    Neg,                              // Instruction 'neg'.
4440    Negs,                             // Instruction 'negs'.
4441    Ngc,                              // Instruction 'ngc'.
4442    Ngcs,                             // Instruction 'ngcs'.
4443    Nop,                              // Instruction 'nop'.
4444    Orn,                              // Instruction 'orn'.
4445    Orr,                              // Instruction 'orr'.
4446    Pacda,                            // Instruction 'pacda'.
4447    Pacdb,                            // Instruction 'pacdb'.
4448    Pacdza,                           // Instruction 'pacdza'.
4449    Pacdzb,                           // Instruction 'pacdzb'.
4450    Pacga,                            // Instruction 'pacga'.
4451    Prfm,                             // Instruction 'prfm'.
4452    Pssbb,                            // Instruction 'pssbb'.
4453    Rbit,                             // Instruction 'rbit'.
4454    Ret,                              // Instruction 'ret'.
4455    Rev,                              // Instruction 'rev'.
4456    Rev16,                            // Instruction 'rev16'.
4457    Rev32,                            // Instruction 'rev32'.
4458    Rev64,                            // Instruction 'rev64'.
4459    Ror,                              // Instruction 'ror'.
4460    Rorv,                             // Instruction 'rorv'.
4461    Sbc,                              // Instruction 'sbc'.
4462    Sbcs,                             // Instruction 'sbcs'.
4463    Sbfiz,                            // Instruction 'sbfiz'.
4464    Sbfm,                             // Instruction 'sbfm'.
4465    Sbfx,                             // Instruction 'sbfx'.
4466    Sdiv,                             // Instruction 'sdiv'.
4467    Setf8,                            // Instruction 'setf8'.
4468    Setf16,                           // Instruction 'setf16'.
4469    Sev,                              // Instruction 'sev'.
4470    Sevl,                             // Instruction 'sevl'.
4471    Smaddl,                           // Instruction 'smaddl'.
4472    Smax,                             // Instruction 'smax'.
4473    Smc,                              // Instruction 'smc'.
4474    Smin,                             // Instruction 'smin'.
4475    Smnegl,                           // Instruction 'smnegl'.
4476    Smsubl,                           // Instruction 'smsubl'.
4477    Smulh,                            // Instruction 'smulh'.
4478    Smull,                            // Instruction 'smull'.
4479    Ssbb,                             // Instruction 'ssbb'.
4480    St2g,                             // Instruction 'st2g'.
4481    Stadd,                            // Instruction 'stadd'.
4482    Staddl,                           // Instruction 'staddl'.
4483    Staddb,                           // Instruction 'staddb'.
4484    Staddlb,                          // Instruction 'staddlb'.
4485    Staddh,                           // Instruction 'staddh'.
4486    Staddlh,                          // Instruction 'staddlh'.
4487    Stclr,                            // Instruction 'stclr'.
4488    Stclrl,                           // Instruction 'stclrl'.
4489    Stclrb,                           // Instruction 'stclrb'.
4490    Stclrlb,                          // Instruction 'stclrlb'.
4491    Stclrh,                           // Instruction 'stclrh'.
4492    Stclrlh,                          // Instruction 'stclrlh'.
4493    Steor,                            // Instruction 'steor'.
4494    Steorl,                           // Instruction 'steorl'.
4495    Steorb,                           // Instruction 'steorb'.
4496    Steorlb,                          // Instruction 'steorlb'.
4497    Steorh,                           // Instruction 'steorh'.
4498    Steorlh,                          // Instruction 'steorlh'.
4499    Stg,                              // Instruction 'stg'.
4500    Stgm,                             // Instruction 'stgm'.
4501    Stgp,                             // Instruction 'stgp'.
4502    Stllr,                            // Instruction 'stllr'.
4503    Stllrb,                           // Instruction 'stllrb'.
4504    Stllrh,                           // Instruction 'stllrh'.
4505    Stlr,                             // Instruction 'stlr'.
4506    Stlrb,                            // Instruction 'stlrb'.
4507    Stlrh,                            // Instruction 'stlrh'.
4508    Stlxp,                            // Instruction 'stlxp'.
4509    Stlxr,                            // Instruction 'stlxr'.
4510    Stlxrb,                           // Instruction 'stlxrb'.
4511    Stlxrh,                           // Instruction 'stlxrh'.
4512    Stnp,                             // Instruction 'stnp'.
4513    Stp,                              // Instruction 'stp'.
4514    Str,                              // Instruction 'str'.
4515    Strb,                             // Instruction 'strb'.
4516    Strh,                             // Instruction 'strh'.
4517    Stset,                            // Instruction 'stset'.
4518    Stsetl,                           // Instruction 'stsetl'.
4519    Stsetb,                           // Instruction 'stsetb'.
4520    Stsetlb,                          // Instruction 'stsetlb'.
4521    Stseth,                           // Instruction 'stseth'.
4522    Stsetlh,                          // Instruction 'stsetlh'.
4523    Stsmax,                           // Instruction 'stsmax'.
4524    Stsmaxl,                          // Instruction 'stsmaxl'.
4525    Stsmaxb,                          // Instruction 'stsmaxb'.
4526    Stsmaxlb,                         // Instruction 'stsmaxlb'.
4527    Stsmaxh,                          // Instruction 'stsmaxh'.
4528    Stsmaxlh,                         // Instruction 'stsmaxlh'.
4529    Stsmin,                           // Instruction 'stsmin'.
4530    Stsminl,                          // Instruction 'stsminl'.
4531    Stsminb,                          // Instruction 'stsminb'.
4532    Stsminlb,                         // Instruction 'stsminlb'.
4533    Stsminh,                          // Instruction 'stsminh'.
4534    Stsminlh,                         // Instruction 'stsminlh'.
4535    Sttr,                             // Instruction 'sttr'.
4536    Sttrb,                            // Instruction 'sttrb'.
4537    Sttrh,                            // Instruction 'sttrh'.
4538    Stumax,                           // Instruction 'stumax'.
4539    Stumaxl,                          // Instruction 'stumaxl'.
4540    Stumaxb,                          // Instruction 'stumaxb'.
4541    Stumaxlb,                         // Instruction 'stumaxlb'.
4542    Stumaxh,                          // Instruction 'stumaxh'.
4543    Stumaxlh,                         // Instruction 'stumaxlh'.
4544    Stumin,                           // Instruction 'stumin'.
4545    Stuminl,                          // Instruction 'stuminl'.
4546    Stuminb,                          // Instruction 'stuminb'.
4547    Stuminlb,                         // Instruction 'stuminlb'.
4548    Stuminh,                          // Instruction 'stuminh'.
4549    Stuminlh,                         // Instruction 'stuminlh'.
4550    Stur,                             // Instruction 'stur'.
4551    Sturb,                            // Instruction 'sturb'.
4552    Sturh,                            // Instruction 'sturh'.
4553    Stxp,                             // Instruction 'stxp'.
4554    Stxr,                             // Instruction 'stxr'.
4555    Stxrb,                            // Instruction 'stxrb'.
4556    Stxrh,                            // Instruction 'stxrh'.
4557    Stz2g,                            // Instruction 'stz2g'.
4558    Stzg,                             // Instruction 'stzg'.
4559    Stzgm,                            // Instruction 'stzgm'.
4560    Sub,                              // Instruction 'sub'.
4561    Subg,                             // Instruction 'subg'.
4562    Subp,                             // Instruction 'subp'.
4563    Subps,                            // Instruction 'subps'.
4564    Subs,                             // Instruction 'subs'.
4565    Svc,                              // Instruction 'svc'.
4566    Swp,                              // Instruction 'swp'.
4567    Swpa,                             // Instruction 'swpa'.
4568    Swpab,                            // Instruction 'swpab'.
4569    Swpah,                            // Instruction 'swpah'.
4570    Swpal,                            // Instruction 'swpal'.
4571    Swpalb,                           // Instruction 'swpalb'.
4572    Swpalh,                           // Instruction 'swpalh'.
4573    Swpb,                             // Instruction 'swpb'.
4574    Swph,                             // Instruction 'swph'.
4575    Swpl,                             // Instruction 'swpl'.
4576    Swplb,                            // Instruction 'swplb'.
4577    Swplh,                            // Instruction 'swplh'.
4578    Sxtb,                             // Instruction 'sxtb'.
4579    Sxth,                             // Instruction 'sxth'.
4580    Sxtw,                             // Instruction 'sxtw'.
4581    Sys,                              // Instruction 'sys'.
4582    Tlbi,                             // Instruction 'tlbi'.
4583    Tst,                              // Instruction 'tst'.
4584    Tbnz,                             // Instruction 'tbnz'.
4585    Tbz,                              // Instruction 'tbz'.
4586    Ubfiz,                            // Instruction 'ubfiz'.
4587    Ubfm,                             // Instruction 'ubfm'.
4588    Ubfx,                             // Instruction 'ubfx'.
4589    Udf,                              // Instruction 'udf'.
4590    Udiv,                             // Instruction 'udiv'.
4591    Umaddl,                           // Instruction 'umaddl'.
4592    Umax,                             // Instruction 'umax'.
4593    Umin,                             // Instruction 'umin'.
4594    Umnegl,                           // Instruction 'umnegl'.
4595    Umull,                            // Instruction 'umull'.
4596    Umulh,                            // Instruction 'umulh'.
4597    Umsubl,                           // Instruction 'umsubl'.
4598    Uxtb,                             // Instruction 'uxtb'.
4599    Uxth,                             // Instruction 'uxth'.
4600    Wfe,                              // Instruction 'wfe'.
4601    Wfi,                              // Instruction 'wfi'.
4602    Xaflag,                           // Instruction 'xaflag'.
4603    Xpacd,                            // Instruction 'xpacd'.
4604    Xpaci,                            // Instruction 'xpaci'.
4605    Xpaclri,                          // Instruction 'xpaclri'.
4606    Yield,                            // Instruction 'yield'.
4607    Abs_v,                            // Instruction 'abs' {ASIMD}.
4608    Add_v,                            // Instruction 'add' {ASIMD}.
4609    Addhn_v,                          // Instruction 'addhn' {ASIMD}.
4610    Addhn2_v,                         // Instruction 'addhn2' {ASIMD}.
4611    Addp_v,                           // Instruction 'addp' {ASIMD}.
4612    Addv_v,                           // Instruction 'addv' {ASIMD}.
4613    Aesd_v,                           // Instruction 'aesd' {ASIMD}.
4614    Aese_v,                           // Instruction 'aese' {ASIMD}.
4615    Aesimc_v,                         // Instruction 'aesimc' {ASIMD}.
4616    Aesmc_v,                          // Instruction 'aesmc' {ASIMD}.
4617    And_v,                            // Instruction 'and' {ASIMD}.
4618    Bcax_v,                           // Instruction 'bcax' {ASIMD}.
4619    Bfcvt_v,                          // Instruction 'bfcvt' {ASIMD}.
4620    Bfcvtn_v,                         // Instruction 'bfcvtn' {ASIMD}.
4621    Bfcvtn2_v,                        // Instruction 'bfcvtn2' {ASIMD}.
4622    Bfdot_v,                          // Instruction 'bfdot' {ASIMD}.
4623    Bfmlalb_v,                        // Instruction 'bfmlalb' {ASIMD}.
4624    Bfmlalt_v,                        // Instruction 'bfmlalt' {ASIMD}.
4625    Bfmmla_v,                         // Instruction 'bfmmla' {ASIMD}.
4626    Bic_v,                            // Instruction 'bic' {ASIMD}.
4627    Bif_v,                            // Instruction 'bif' {ASIMD}.
4628    Bit_v,                            // Instruction 'bit' {ASIMD}.
4629    Bsl_v,                            // Instruction 'bsl' {ASIMD}.
4630    Cls_v,                            // Instruction 'cls' {ASIMD}.
4631    Clz_v,                            // Instruction 'clz' {ASIMD}.
4632    Cmeq_v,                           // Instruction 'cmeq' {ASIMD}.
4633    Cmge_v,                           // Instruction 'cmge' {ASIMD}.
4634    Cmgt_v,                           // Instruction 'cmgt' {ASIMD}.
4635    Cmhi_v,                           // Instruction 'cmhi' {ASIMD}.
4636    Cmhs_v,                           // Instruction 'cmhs' {ASIMD}.
4637    Cmle_v,                           // Instruction 'cmle' {ASIMD}.
4638    Cmlt_v,                           // Instruction 'cmlt' {ASIMD}.
4639    Cmtst_v,                          // Instruction 'cmtst' {ASIMD}.
4640    Cnt_v,                            // Instruction 'cnt' {ASIMD}.
4641    Dup_v,                            // Instruction 'dup' {ASIMD}.
4642    Eor_v,                            // Instruction 'eor' {ASIMD}.
4643    Eor3_v,                           // Instruction 'eor3' {ASIMD}.
4644    Ext_v,                            // Instruction 'ext' {ASIMD}.
4645    Fabd_v,                           // Instruction 'fabd' {ASIMD}.
4646    Fabs_v,                           // Instruction 'fabs' {ASIMD}.
4647    Facge_v,                          // Instruction 'facge' {ASIMD}.
4648    Facgt_v,                          // Instruction 'facgt' {ASIMD}.
4649    Fadd_v,                           // Instruction 'fadd' {ASIMD}.
4650    Faddp_v,                          // Instruction 'faddp' {ASIMD}.
4651    Fcadd_v,                          // Instruction 'fcadd' {ASIMD}.
4652    Fccmp_v,                          // Instruction 'fccmp' {ASIMD}.
4653    Fccmpe_v,                         // Instruction 'fccmpe' {ASIMD}.
4654    Fcmeq_v,                          // Instruction 'fcmeq' {ASIMD}.
4655    Fcmge_v,                          // Instruction 'fcmge' {ASIMD}.
4656    Fcmgt_v,                          // Instruction 'fcmgt' {ASIMD}.
4657    Fcmla_v,                          // Instruction 'fcmla' {ASIMD}.
4658    Fcmle_v,                          // Instruction 'fcmle' {ASIMD}.
4659    Fcmlt_v,                          // Instruction 'fcmlt' {ASIMD}.
4660    Fcmp_v,                           // Instruction 'fcmp' {ASIMD}.
4661    Fcmpe_v,                          // Instruction 'fcmpe' {ASIMD}.
4662    Fcsel_v,                          // Instruction 'fcsel' {ASIMD}.
4663    Fcvt_v,                           // Instruction 'fcvt' {ASIMD}.
4664    Fcvtas_v,                         // Instruction 'fcvtas' {ASIMD}.
4665    Fcvtau_v,                         // Instruction 'fcvtau' {ASIMD}.
4666    Fcvtl_v,                          // Instruction 'fcvtl' {ASIMD}.
4667    Fcvtl2_v,                         // Instruction 'fcvtl2' {ASIMD}.
4668    Fcvtms_v,                         // Instruction 'fcvtms' {ASIMD}.
4669    Fcvtmu_v,                         // Instruction 'fcvtmu' {ASIMD}.
4670    Fcvtn_v,                          // Instruction 'fcvtn' {ASIMD}.
4671    Fcvtn2_v,                         // Instruction 'fcvtn2' {ASIMD}.
4672    Fcvtns_v,                         // Instruction 'fcvtns' {ASIMD}.
4673    Fcvtnu_v,                         // Instruction 'fcvtnu' {ASIMD}.
4674    Fcvtps_v,                         // Instruction 'fcvtps' {ASIMD}.
4675    Fcvtpu_v,                         // Instruction 'fcvtpu' {ASIMD}.
4676    Fcvtxn_v,                         // Instruction 'fcvtxn' {ASIMD}.
4677    Fcvtxn2_v,                        // Instruction 'fcvtxn2' {ASIMD}.
4678    Fcvtzs_v,                         // Instruction 'fcvtzs' {ASIMD}.
4679    Fcvtzu_v,                         // Instruction 'fcvtzu' {ASIMD}.
4680    Fdiv_v,                           // Instruction 'fdiv' {ASIMD}.
4681    Fjcvtzs_v,                        // Instruction 'fjcvtzs' {ASIMD}.
4682    Fmadd_v,                          // Instruction 'fmadd' {ASIMD}.
4683    Fmax_v,                           // Instruction 'fmax' {ASIMD}.
4684    Fmaxnm_v,                         // Instruction 'fmaxnm' {ASIMD}.
4685    Fmaxnmp_v,                        // Instruction 'fmaxnmp' {ASIMD}.
4686    Fmaxnmv_v,                        // Instruction 'fmaxnmv' {ASIMD}.
4687    Fmaxp_v,                          // Instruction 'fmaxp' {ASIMD}.
4688    Fmaxv_v,                          // Instruction 'fmaxv' {ASIMD}.
4689    Fmin_v,                           // Instruction 'fmin' {ASIMD}.
4690    Fminnm_v,                         // Instruction 'fminnm' {ASIMD}.
4691    Fminnmp_v,                        // Instruction 'fminnmp' {ASIMD}.
4692    Fminnmv_v,                        // Instruction 'fminnmv' {ASIMD}.
4693    Fminp_v,                          // Instruction 'fminp' {ASIMD}.
4694    Fminv_v,                          // Instruction 'fminv' {ASIMD}.
4695    Fmla_v,                           // Instruction 'fmla' {ASIMD}.
4696    Fmlal_v,                          // Instruction 'fmlal' {ASIMD}.
4697    Fmlal2_v,                         // Instruction 'fmlal2' {ASIMD}.
4698    Fmls_v,                           // Instruction 'fmls' {ASIMD}.
4699    Fmlsl_v,                          // Instruction 'fmlsl' {ASIMD}.
4700    Fmlsl2_v,                         // Instruction 'fmlsl2' {ASIMD}.
4701    Fmov_v,                           // Instruction 'fmov' {ASIMD}.
4702    Fmsub_v,                          // Instruction 'fmsub' {ASIMD}.
4703    Fmul_v,                           // Instruction 'fmul' {ASIMD}.
4704    Fmulx_v,                          // Instruction 'fmulx' {ASIMD}.
4705    Fneg_v,                           // Instruction 'fneg' {ASIMD}.
4706    Fnmadd_v,                         // Instruction 'fnmadd' {ASIMD}.
4707    Fnmsub_v,                         // Instruction 'fnmsub' {ASIMD}.
4708    Fnmul_v,                          // Instruction 'fnmul' {ASIMD}.
4709    Frecpe_v,                         // Instruction 'frecpe' {ASIMD}.
4710    Frecps_v,                         // Instruction 'frecps' {ASIMD}.
4711    Frecpx_v,                         // Instruction 'frecpx' {ASIMD}.
4712    Frint32x_v,                       // Instruction 'frint32x' {ASIMD}.
4713    Frint32z_v,                       // Instruction 'frint32z' {ASIMD}.
4714    Frint64x_v,                       // Instruction 'frint64x' {ASIMD}.
4715    Frint64z_v,                       // Instruction 'frint64z' {ASIMD}.
4716    Frinta_v,                         // Instruction 'frinta' {ASIMD}.
4717    Frinti_v,                         // Instruction 'frinti' {ASIMD}.
4718    Frintm_v,                         // Instruction 'frintm' {ASIMD}.
4719    Frintn_v,                         // Instruction 'frintn' {ASIMD}.
4720    Frintp_v,                         // Instruction 'frintp' {ASIMD}.
4721    Frintx_v,                         // Instruction 'frintx' {ASIMD}.
4722    Frintz_v,                         // Instruction 'frintz' {ASIMD}.
4723    Frsqrte_v,                        // Instruction 'frsqrte' {ASIMD}.
4724    Frsqrts_v,                        // Instruction 'frsqrts' {ASIMD}.
4725    Fsqrt_v,                          // Instruction 'fsqrt' {ASIMD}.
4726    Fsub_v,                           // Instruction 'fsub' {ASIMD}.
4727    Ins_v,                            // Instruction 'ins' {ASIMD}.
4728    Ld1_v,                            // Instruction 'ld1' {ASIMD}.
4729    Ld1r_v,                           // Instruction 'ld1r' {ASIMD}.
4730    Ld2_v,                            // Instruction 'ld2' {ASIMD}.
4731    Ld2r_v,                           // Instruction 'ld2r' {ASIMD}.
4732    Ld3_v,                            // Instruction 'ld3' {ASIMD}.
4733    Ld3r_v,                           // Instruction 'ld3r' {ASIMD}.
4734    Ld4_v,                            // Instruction 'ld4' {ASIMD}.
4735    Ld4r_v,                           // Instruction 'ld4r' {ASIMD}.
4736    Ldnp_v,                           // Instruction 'ldnp' {ASIMD}.
4737    Ldp_v,                            // Instruction 'ldp' {ASIMD}.
4738    Ldr_v,                            // Instruction 'ldr' {ASIMD}.
4739    Ldur_v,                           // Instruction 'ldur' {ASIMD}.
4740    Mla_v,                            // Instruction 'mla' {ASIMD}.
4741    Mls_v,                            // Instruction 'mls' {ASIMD}.
4742    Mov_v,                            // Instruction 'mov' {ASIMD}.
4743    Movi_v,                           // Instruction 'movi' {ASIMD}.
4744    Mul_v,                            // Instruction 'mul' {ASIMD}.
4745    Mvn_v,                            // Instruction 'mvn' {ASIMD}.
4746    Mvni_v,                           // Instruction 'mvni' {ASIMD}.
4747    Neg_v,                            // Instruction 'neg' {ASIMD}.
4748    Not_v,                            // Instruction 'not' {ASIMD}.
4749    Orn_v,                            // Instruction 'orn' {ASIMD}.
4750    Orr_v,                            // Instruction 'orr' {ASIMD}.
4751    Pmul_v,                           // Instruction 'pmul' {ASIMD}.
4752    Pmull_v,                          // Instruction 'pmull' {ASIMD}.
4753    Pmull2_v,                         // Instruction 'pmull2' {ASIMD}.
4754    Raddhn_v,                         // Instruction 'raddhn' {ASIMD}.
4755    Raddhn2_v,                        // Instruction 'raddhn2' {ASIMD}.
4756    Rax1_v,                           // Instruction 'rax1' {ASIMD}.
4757    Rbit_v,                           // Instruction 'rbit' {ASIMD}.
4758    Rev16_v,                          // Instruction 'rev16' {ASIMD}.
4759    Rev32_v,                          // Instruction 'rev32' {ASIMD}.
4760    Rev64_v,                          // Instruction 'rev64' {ASIMD}.
4761    Rshrn_v,                          // Instruction 'rshrn' {ASIMD}.
4762    Rshrn2_v,                         // Instruction 'rshrn2' {ASIMD}.
4763    Rsubhn_v,                         // Instruction 'rsubhn' {ASIMD}.
4764    Rsubhn2_v,                        // Instruction 'rsubhn2' {ASIMD}.
4765    Saba_v,                           // Instruction 'saba' {ASIMD}.
4766    Sabal_v,                          // Instruction 'sabal' {ASIMD}.
4767    Sabal2_v,                         // Instruction 'sabal2' {ASIMD}.
4768    Sabd_v,                           // Instruction 'sabd' {ASIMD}.
4769    Sabdl_v,                          // Instruction 'sabdl' {ASIMD}.
4770    Sabdl2_v,                         // Instruction 'sabdl2' {ASIMD}.
4771    Sadalp_v,                         // Instruction 'sadalp' {ASIMD}.
4772    Saddl_v,                          // Instruction 'saddl' {ASIMD}.
4773    Saddl2_v,                         // Instruction 'saddl2' {ASIMD}.
4774    Saddlp_v,                         // Instruction 'saddlp' {ASIMD}.
4775    Saddlv_v,                         // Instruction 'saddlv' {ASIMD}.
4776    Saddw_v,                          // Instruction 'saddw' {ASIMD}.
4777    Saddw2_v,                         // Instruction 'saddw2' {ASIMD}.
4778    Scvtf_v,                          // Instruction 'scvtf' {ASIMD}.
4779    Sdot_v,                           // Instruction 'sdot' {ASIMD}.
4780    Sha1c_v,                          // Instruction 'sha1c' {ASIMD}.
4781    Sha1h_v,                          // Instruction 'sha1h' {ASIMD}.
4782    Sha1m_v,                          // Instruction 'sha1m' {ASIMD}.
4783    Sha1p_v,                          // Instruction 'sha1p' {ASIMD}.
4784    Sha1su0_v,                        // Instruction 'sha1su0' {ASIMD}.
4785    Sha1su1_v,                        // Instruction 'sha1su1' {ASIMD}.
4786    Sha256h_v,                        // Instruction 'sha256h' {ASIMD}.
4787    Sha256h2_v,                       // Instruction 'sha256h2' {ASIMD}.
4788    Sha256su0_v,                      // Instruction 'sha256su0' {ASIMD}.
4789    Sha256su1_v,                      // Instruction 'sha256su1' {ASIMD}.
4790    Sha512h_v,                        // Instruction 'sha512h' {ASIMD}.
4791    Sha512h2_v,                       // Instruction 'sha512h2' {ASIMD}.
4792    Sha512su0_v,                      // Instruction 'sha512su0' {ASIMD}.
4793    Sha512su1_v,                      // Instruction 'sha512su1' {ASIMD}.
4794    Shadd_v,                          // Instruction 'shadd' {ASIMD}.
4795    Shl_v,                            // Instruction 'shl' {ASIMD}.
4796    Shll_v,                           // Instruction 'shll' {ASIMD}.
4797    Shll2_v,                          // Instruction 'shll2' {ASIMD}.
4798    Shrn_v,                           // Instruction 'shrn' {ASIMD}.
4799    Shrn2_v,                          // Instruction 'shrn2' {ASIMD}.
4800    Shsub_v,                          // Instruction 'shsub' {ASIMD}.
4801    Sli_v,                            // Instruction 'sli' {ASIMD}.
4802    Sm3partw1_v,                      // Instruction 'sm3partw1' {ASIMD}.
4803    Sm3partw2_v,                      // Instruction 'sm3partw2' {ASIMD}.
4804    Sm3ss1_v,                         // Instruction 'sm3ss1' {ASIMD}.
4805    Sm3tt1a_v,                        // Instruction 'sm3tt1a' {ASIMD}.
4806    Sm3tt1b_v,                        // Instruction 'sm3tt1b' {ASIMD}.
4807    Sm3tt2a_v,                        // Instruction 'sm3tt2a' {ASIMD}.
4808    Sm3tt2b_v,                        // Instruction 'sm3tt2b' {ASIMD}.
4809    Sm4e_v,                           // Instruction 'sm4e' {ASIMD}.
4810    Sm4ekey_v,                        // Instruction 'sm4ekey' {ASIMD}.
4811    Smax_v,                           // Instruction 'smax' {ASIMD}.
4812    Smaxp_v,                          // Instruction 'smaxp' {ASIMD}.
4813    Smaxv_v,                          // Instruction 'smaxv' {ASIMD}.
4814    Smin_v,                           // Instruction 'smin' {ASIMD}.
4815    Sminp_v,                          // Instruction 'sminp' {ASIMD}.
4816    Sminv_v,                          // Instruction 'sminv' {ASIMD}.
4817    Smlal_v,                          // Instruction 'smlal' {ASIMD}.
4818    Smlal2_v,                         // Instruction 'smlal2' {ASIMD}.
4819    Smlsl_v,                          // Instruction 'smlsl' {ASIMD}.
4820    Smlsl2_v,                         // Instruction 'smlsl2' {ASIMD}.
4821    Smmla_v,                          // Instruction 'smmla' {ASIMD}.
4822    Smov_v,                           // Instruction 'smov' {ASIMD}.
4823    Smull_v,                          // Instruction 'smull' {ASIMD}.
4824    Smull2_v,                         // Instruction 'smull2' {ASIMD}.
4825    Sqabs_v,                          // Instruction 'sqabs' {ASIMD}.
4826    Sqadd_v,                          // Instruction 'sqadd' {ASIMD}.
4827    Sqdmlal_v,                        // Instruction 'sqdmlal' {ASIMD}.
4828    Sqdmlal2_v,                       // Instruction 'sqdmlal2' {ASIMD}.
4829    Sqdmlsl_v,                        // Instruction 'sqdmlsl' {ASIMD}.
4830    Sqdmlsl2_v,                       // Instruction 'sqdmlsl2' {ASIMD}.
4831    Sqdmulh_v,                        // Instruction 'sqdmulh' {ASIMD}.
4832    Sqdmull_v,                        // Instruction 'sqdmull' {ASIMD}.
4833    Sqdmull2_v,                       // Instruction 'sqdmull2' {ASIMD}.
4834    Sqneg_v,                          // Instruction 'sqneg' {ASIMD}.
4835    Sqrdmlah_v,                       // Instruction 'sqrdmlah' {ASIMD}.
4836    Sqrdmlsh_v,                       // Instruction 'sqrdmlsh' {ASIMD}.
4837    Sqrdmulh_v,                       // Instruction 'sqrdmulh' {ASIMD}.
4838    Sqrshl_v,                         // Instruction 'sqrshl' {ASIMD}.
4839    Sqrshrn_v,                        // Instruction 'sqrshrn' {ASIMD}.
4840    Sqrshrn2_v,                       // Instruction 'sqrshrn2' {ASIMD}.
4841    Sqrshrun_v,                       // Instruction 'sqrshrun' {ASIMD}.
4842    Sqrshrun2_v,                      // Instruction 'sqrshrun2' {ASIMD}.
4843    Sqshl_v,                          // Instruction 'sqshl' {ASIMD}.
4844    Sqshlu_v,                         // Instruction 'sqshlu' {ASIMD}.
4845    Sqshrn_v,                         // Instruction 'sqshrn' {ASIMD}.
4846    Sqshrn2_v,                        // Instruction 'sqshrn2' {ASIMD}.
4847    Sqshrun_v,                        // Instruction 'sqshrun' {ASIMD}.
4848    Sqshrun2_v,                       // Instruction 'sqshrun2' {ASIMD}.
4849    Sqsub_v,                          // Instruction 'sqsub' {ASIMD}.
4850    Sqxtn_v,                          // Instruction 'sqxtn' {ASIMD}.
4851    Sqxtn2_v,                         // Instruction 'sqxtn2' {ASIMD}.
4852    Sqxtun_v,                         // Instruction 'sqxtun' {ASIMD}.
4853    Sqxtun2_v,                        // Instruction 'sqxtun2' {ASIMD}.
4854    Srhadd_v,                         // Instruction 'srhadd' {ASIMD}.
4855    Sri_v,                            // Instruction 'sri' {ASIMD}.
4856    Srshl_v,                          // Instruction 'srshl' {ASIMD}.
4857    Srshr_v,                          // Instruction 'srshr' {ASIMD}.
4858    Srsra_v,                          // Instruction 'srsra' {ASIMD}.
4859    Sshl_v,                           // Instruction 'sshl' {ASIMD}.
4860    Sshll_v,                          // Instruction 'sshll' {ASIMD}.
4861    Sshll2_v,                         // Instruction 'sshll2' {ASIMD}.
4862    Sshr_v,                           // Instruction 'sshr' {ASIMD}.
4863    Ssra_v,                           // Instruction 'ssra' {ASIMD}.
4864    Ssubl_v,                          // Instruction 'ssubl' {ASIMD}.
4865    Ssubl2_v,                         // Instruction 'ssubl2' {ASIMD}.
4866    Ssubw_v,                          // Instruction 'ssubw' {ASIMD}.
4867    Ssubw2_v,                         // Instruction 'ssubw2' {ASIMD}.
4868    St1_v,                            // Instruction 'st1' {ASIMD}.
4869    St2_v,                            // Instruction 'st2' {ASIMD}.
4870    St3_v,                            // Instruction 'st3' {ASIMD}.
4871    St4_v,                            // Instruction 'st4' {ASIMD}.
4872    Stnp_v,                           // Instruction 'stnp' {ASIMD}.
4873    Stp_v,                            // Instruction 'stp' {ASIMD}.
4874    Str_v,                            // Instruction 'str' {ASIMD}.
4875    Stur_v,                           // Instruction 'stur' {ASIMD}.
4876    Sub_v,                            // Instruction 'sub' {ASIMD}.
4877    Subhn_v,                          // Instruction 'subhn' {ASIMD}.
4878    Subhn2_v,                         // Instruction 'subhn2' {ASIMD}.
4879    Sudot_v,                          // Instruction 'sudot' {ASIMD}.
4880    Suqadd_v,                         // Instruction 'suqadd' {ASIMD}.
4881    Sxtl_v,                           // Instruction 'sxtl' {ASIMD}.
4882    Sxtl2_v,                          // Instruction 'sxtl2' {ASIMD}.
4883    Tbl_v,                            // Instruction 'tbl' {ASIMD}.
4884    Tbx_v,                            // Instruction 'tbx' {ASIMD}.
4885    Trn1_v,                           // Instruction 'trn1' {ASIMD}.
4886    Trn2_v,                           // Instruction 'trn2' {ASIMD}.
4887    Uaba_v,                           // Instruction 'uaba' {ASIMD}.
4888    Uabal_v,                          // Instruction 'uabal' {ASIMD}.
4889    Uabal2_v,                         // Instruction 'uabal2' {ASIMD}.
4890    Uabd_v,                           // Instruction 'uabd' {ASIMD}.
4891    Uabdl_v,                          // Instruction 'uabdl' {ASIMD}.
4892    Uabdl2_v,                         // Instruction 'uabdl2' {ASIMD}.
4893    Uadalp_v,                         // Instruction 'uadalp' {ASIMD}.
4894    Uaddl_v,                          // Instruction 'uaddl' {ASIMD}.
4895    Uaddl2_v,                         // Instruction 'uaddl2' {ASIMD}.
4896    Uaddlp_v,                         // Instruction 'uaddlp' {ASIMD}.
4897    Uaddlv_v,                         // Instruction 'uaddlv' {ASIMD}.
4898    Uaddw_v,                          // Instruction 'uaddw' {ASIMD}.
4899    Uaddw2_v,                         // Instruction 'uaddw2' {ASIMD}.
4900    Ucvtf_v,                          // Instruction 'ucvtf' {ASIMD}.
4901    Udot_v,                           // Instruction 'udot' {ASIMD}.
4902    Uhadd_v,                          // Instruction 'uhadd' {ASIMD}.
4903    Uhsub_v,                          // Instruction 'uhsub' {ASIMD}.
4904    Umax_v,                           // Instruction 'umax' {ASIMD}.
4905    Umaxp_v,                          // Instruction 'umaxp' {ASIMD}.
4906    Umaxv_v,                          // Instruction 'umaxv' {ASIMD}.
4907    Umin_v,                           // Instruction 'umin' {ASIMD}.
4908    Uminp_v,                          // Instruction 'uminp' {ASIMD}.
4909    Uminv_v,                          // Instruction 'uminv' {ASIMD}.
4910    Umlal_v,                          // Instruction 'umlal' {ASIMD}.
4911    Umlal2_v,                         // Instruction 'umlal2' {ASIMD}.
4912    Umlsl_v,                          // Instruction 'umlsl' {ASIMD}.
4913    Umlsl2_v,                         // Instruction 'umlsl2' {ASIMD}.
4914    Ummla_v,                          // Instruction 'ummla' {ASIMD}.
4915    Umov_v,                           // Instruction 'umov' {ASIMD}.
4916    Umull_v,                          // Instruction 'umull' {ASIMD}.
4917    Umull2_v,                         // Instruction 'umull2' {ASIMD}.
4918    Uqadd_v,                          // Instruction 'uqadd' {ASIMD}.
4919    Uqrshl_v,                         // Instruction 'uqrshl' {ASIMD}.
4920    Uqrshrn_v,                        // Instruction 'uqrshrn' {ASIMD}.
4921    Uqrshrn2_v,                       // Instruction 'uqrshrn2' {ASIMD}.
4922    Uqshl_v,                          // Instruction 'uqshl' {ASIMD}.
4923    Uqshrn_v,                         // Instruction 'uqshrn' {ASIMD}.
4924    Uqshrn2_v,                        // Instruction 'uqshrn2' {ASIMD}.
4925    Uqsub_v,                          // Instruction 'uqsub' {ASIMD}.
4926    Uqxtn_v,                          // Instruction 'uqxtn' {ASIMD}.
4927    Uqxtn2_v,                         // Instruction 'uqxtn2' {ASIMD}.
4928    Urecpe_v,                         // Instruction 'urecpe' {ASIMD}.
4929    Urhadd_v,                         // Instruction 'urhadd' {ASIMD}.
4930    Urshl_v,                          // Instruction 'urshl' {ASIMD}.
4931    Urshr_v,                          // Instruction 'urshr' {ASIMD}.
4932    Ursqrte_v,                        // Instruction 'ursqrte' {ASIMD}.
4933    Ursra_v,                          // Instruction 'ursra' {ASIMD}.
4934    Usdot_v,                          // Instruction 'usdot' {ASIMD}.
4935    Ushl_v,                           // Instruction 'ushl' {ASIMD}.
4936    Ushll_v,                          // Instruction 'ushll' {ASIMD}.
4937    Ushll2_v,                         // Instruction 'ushll2' {ASIMD}.
4938    Ushr_v,                           // Instruction 'ushr' {ASIMD}.
4939    Usmmla_v,                         // Instruction 'usmmla' {ASIMD}.
4940    Usqadd_v,                         // Instruction 'usqadd' {ASIMD}.
4941    Usra_v,                           // Instruction 'usra' {ASIMD}.
4942    Usubl_v,                          // Instruction 'usubl' {ASIMD}.
4943    Usubl2_v,                         // Instruction 'usubl2' {ASIMD}.
4944    Usubw_v,                          // Instruction 'usubw' {ASIMD}.
4945    Usubw2_v,                         // Instruction 'usubw2' {ASIMD}.
4946    Uxtl_v,                           // Instruction 'uxtl' {ASIMD}.
4947    Uxtl2_v,                          // Instruction 'uxtl2' {ASIMD}.
4948    Uzp1_v,                           // Instruction 'uzp1' {ASIMD}.
4949    Uzp2_v,                           // Instruction 'uzp2' {ASIMD}.
4950    Xar_v,                            // Instruction 'xar' {ASIMD}.
4951    Xtn_v,                            // Instruction 'xtn' {ASIMD}.
4952    Xtn2_v,                           // Instruction 'xtn2' {ASIMD}.
4953    Zip1_v,                           // Instruction 'zip1' {ASIMD}.
4954    Zip2_v,                           // Instruction 'zip2' {ASIMD}.
4955    _Count
4956}