1use super::{aux_t, AuxValue, Sealed};
2
3crate::bitflags! {
4 #[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
5 pub enum Features: usize {
6 FP = 1 << 0,
7 ASIMD = 1 << 1,
8 EVTSTRM = 1 << 2,
9 AES = 1 << 3,
10 PMULL = 1 << 4,
11 SHA1 = 1 << 5,
12 SHA2 = 1 << 6,
13 CRC32 = 1 << 7,
14 ATOMICS = 1 << 8,
15 FPHP = 1 << 9,
16 ASIMDHP = 1 << 10,
17 CPUID = 1 << 11,
18 ASIMDRDM = 1 << 12,
19 JSCVT = 1 << 13,
20 FCMA = 1 << 14,
21 LRCPC = 1 << 15,
22 DCPOP = 1 << 16,
23 SHA3 = 1 << 17,
24 SM3 = 1 << 18,
25 SM4 = 1 << 19,
26 ASIMDDP = 1 << 20,
27 SHA512 = 1 << 21,
28 SVE = 1 << 22,
29 ASIMDFHM = 1 << 23,
30 DIT = 1 << 24,
31 USCAT = 1 << 25,
32 ILRCPC = 1 << 26,
33 FLAGM = 1 << 27,
34 SSBS = 1 << 28,
35 SB = 1 << 29,
36 PACA = 1 << 30,
37 PACG = 1 << 31,
38 }
39
40 impl Sealed for Features {}
41 impl AuxValue for Features {
42 fn from(value: aux_t) -> Self {
43 (value as usize).into()
44 }
45 }
46}
47
48crate::bitflags! {
49 #[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
50 pub enum Features2: usize {
51 DCPODP = 1 << 0,
52 SVE2 = 1 << 1,
53 SVEAES = 1 << 2,
54 SVEPMULL = 1 << 3,
55 SVEBITPERM = 1 << 4,
56 SVESHA3 = 1 << 5,
57 SVESM4 = 1 << 6,
58 FLAGM2 = 1 << 7,
59 FRINT = 1 << 8,
60 SVEI8MM = 1 << 9,
61 SVEF32MM = 1 << 10,
62 SVEF64MM = 1 << 11,
63 SVEBF16 = 1 << 12,
64 I8MM = 1 << 13,
65 BF16 = 1 << 14,
66 DGH = 1 << 15,
67 RNG = 1 << 16,
68 BTI = 1 << 17,
69 MTE = 1 << 18,
70 ECV = 1 << 19,
71 AFP = 1 << 20,
72 RPRES = 1 << 21,
73 MTE3 = 1 << 22,
74 SME = 1 << 23,
75 SME_I16I64 = 1 << 24,
76 SME_F64F64 = 1 << 25,
77 SME_I8I32 = 1 << 26,
78 SME_F16F32 = 1 << 27,
79 SME_B16F32 = 1 << 28,
80 SME_F32F32 = 1 << 29,
81 SME_FA64 = 1 << 30,
82 WFXT = 1 << 31,
83 EBF16 = 1 << 32,
84 SVE_EBF16 = 1 << 33,
85 CSSC = 1 << 34,
86 RPRFM = 1 << 35,
87 SVE2P1 = 1 << 36,
88 SME2 = 1 << 37,
89 SME2P1 = 1 << 38,
90 SME_I16I32 = 1 << 39,
91 SME_BI32I32 = 1 << 40,
92 SME_B16B16 = 1 << 41,
93 SME_F16F16 = 1 << 42,
94 }
95
96 impl Sealed for Features2 {}
97 impl AuxValue for Features2 {
98 fn from(value: aux_t) -> Self {
99 (value as usize).into()
100 }
101 }
102}