1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
//! CPU feature detection helpers for AArch64/ARM64 CPUs.
use paste;
// Enable AES support.
aarch64_feature!;
// Enable BFloat16 Extension.
aarch64_feature!;
// Enable Branch Target Identification.
aarch64_feature!;
// Enable Armv8.0-A CRC-32 checksum instructions.
aarch64_feature!;
// Enable Common Short Sequence Compression (CSSC) instructions.
// DISABLED: Unstable library feature as of 1.96.0
// aarch64_feature!("cssc");
// Enable Armv8.4-A Data Independent Timing instructions.
aarch64_feature!;
// Enable dot product support.
aarch64_feature!;
// Enable Armv8.2-A data Cache Clean to Point of Persistence.
aarch64_feature!;
// Enable Armv8.5-A Cache Clean to Point of Deep Persistence.
aarch64_feature!;
// Enable enhanced counter virtualization extension.
// DISABLED: Unstable library feature as of 1.96.0
// aarch64_feature!("ecv");
// Enable Matrix Multiply FP32 Extension.
aarch64_feature!;
// Enable Matrix Multiply FP64 Extension.
aarch64_feature!;
// Enable FAMIN and FAMAX instructions.
// DISABLED: Unstable library feature as of 1.96.0
// aarch64_feature!("faminmax");
// Enable Armv8.3-A Floating-point complex number support.
aarch64_feature!;
// Enable FP16 FML instructions.
aarch64_feature!;
// Enable Armv8.4-A Flag Manipulation instructions.
aarch64_feature!;
// Enable alternative NZCV format for floating point comparisons.
// DISABLED: Unstable library feature as of 1.96.0
// aarch64_feature!("flagm2");
// Enable half-precision floating-point data processing.
aarch64_feature!;
// Enable FP8 instructions.
// DISABLED: Unstable library feature as of 1.96.0
// aarch64_feature!("fp8");
// Enable FP8 2-way dot instructions.
// DISABLED: Unstable library feature as of 1.96.0
// aarch64_feature!("fp8dot2");
// Enable FP8 4-way dot instructions.
// DISABLED: Unstable library feature as of 1.96.0
// aarch64_feature!("fp8dot4");
// Enable Armv9.5-A FP8 multiply-add instructions.
// DISABLED: Unstable library feature as of 1.96.0
// aarch64_feature!("fp8fma");
// Enable FRInt[32|64][Z|X] instructions that round a floating-point number to an integer (in FP format) forcing it to fit into a 32- or 64-bit int.
aarch64_feature!;
// Enable Armv8.8-A Hinted Conditional Branches Extension.
// DISABLED: Unstable library feature as of 1.96.0
// aarch64_feature!("hbc");
// Enable Matrix Multiply Int8 Extension.
aarch64_feature!;
// Enable Armv8.3-A JavaScript FP conversion instructions.
aarch64_feature!;
// Enable Armv8.1-A Large System Extension (LSE) atomic instructions.
aarch64_feature!;
// Enable Armv9.4-A 128-bit Atomic instructions.
// DISABLED: Unstable library feature as of 1.96.0
// aarch64_feature!("lse128");
// Enable Armv8.4-A Large System Extension 2 (LSE2) atomicity rules.
aarch64_feature!;
// Enable Lookup Table instructions.
// DISABLED: Unstable library feature as of 1.96.0
// aarch64_feature!("lut");
// Enable Armv8.8-A memcpy and memset acceleration instructions.
// DISABLED: Unstable library feature as of 1.96.0
// aarch64_feature!("mops");
// Enable Memory Tagging Extension.
aarch64_feature!;
// Enable Advanced SIMD instructions.
aarch64_feature!;
// Enable Armv8.3-A Pointer Authentication extension.
aarch64_feature!;
// Enable Armv8.3-A Pointer Authentication extension.
aarch64_feature!;
// Enable Armv9.5-A PAC enhancements.
// DISABLED: Unstable library feature as of 1.96.0
// aarch64_feature!("pauth-lr", "pauth_lr");
// Enable Random Number generation instructions.
aarch64_feature!;
// Enable support for RCPC extension.
aarch64_feature!;
// Enable Armv8.4-A RCPC instructions with Immediate Offsets.
aarch64_feature!;
// Enable Armv8.9-A RCPC instructions for A64 and Advanced SIMD and floating-point instruction set.
// DISABLED: Unstable library feature as of 1.96.0
// aarch64_feature!("rcpc3");
// Enable Armv8.1-A Rounding Double Multiply Add/Subtract instructions.
aarch64_feature!;
// Enable Armv8.5-A Speculation Barrier.
aarch64_feature!;
// Enable SHA1 and SHA256 support.
aarch64_feature!;
// Enable SHA512 and SHA3 support.
aarch64_feature!;
// Enable SM3 and SM4 support.
aarch64_feature!;
// Enable Scalable Matrix Extension (SME).
// DISABLED: Unstable library feature as of 1.96.0
// aarch64_feature!("sme");
// Enable SME2.1 ZA-targeting non-widening BFloat16 instructions.
// DISABLED: Unstable library feature as of 1.96.0
// aarch64_feature!("sme-b16b16", "sme_b16b16");
// Enable SME non-widening Float16 instructions.
// DISABLED: Unstable library feature as of 1.96.0
// aarch64_feature!("sme-f16f16", "sme_f16f16");
// Enable Scalable Matrix Extension (SME) F64F64 instructions.
// DISABLED: Unstable library feature as of 1.96.0
// aarch64_feature!("sme-f64f64", "sme_f64f64");
// Enable Scalable Matrix Extension (SME) F8F16 instructions.
// DISABLED: Unstable library feature as of 1.96.0
// aarch64_feature!("sme-f8f16", "sme_f8f16");
// Enable Scalable Matrix Extension (SME) F8F32 instructions.
// DISABLED: Unstable library feature as of 1.96.0
// aarch64_feature!("sme-f8f32", "sme_f8f32");
// Enable the full A64 instruction set in streaming SVE mode.
// DISABLED: Unstable library feature as of 1.96.0
// aarch64_feature!("sme-fa64", "sme_fa64");
// Enable Scalable Matrix Extension (SME) I16I64 instructions.
// DISABLED: Unstable library feature as of 1.96.0
// aarch64_feature!("sme-i16i64", "sme_i16i64");
// Enable Scalable Matrix Extension (SME) LUTv2 instructions.
// DISABLED: Unstable library feature as of 1.96.0
// aarch64_feature!("sme-lutv2", "sme_lutv2");
// Enable Scalable Matrix Extension 2 (SME2) instructions.
// DISABLED: Unstable library feature as of 1.96.0
// aarch64_feature!("sme2");
// Enable Scalable Matrix Extension 2.1 instructions.
// DISABLED: Unstable library feature as of 1.96.0
// aarch64_feature!("sme2p1");
// Enable Speculative Store Bypass Safe bit.
aarch64_feature!;
// Enable SVE2 FP8 2-way dot product instructions.
// DISABLED: Unstable library feature as of 1.96.0
// aarch64_feature!("ssve-fp8dot2", "ssve_fp8dot2");
// Enable SVE2 FP8 4-way dot product instructions.
// DISABLED: Unstable library feature as of 1.96.0
// aarch64_feature!("ssve-fp8dot4", "ssve_fp8dot4");
// Enable SVE2 FP8 multiply-add instructions.
// DISABLED: Unstable library feature as of 1.96.0
// aarch64_feature!("ssve-fp8fma", "ssve_fp8fma");
// Enable Scalable Vector Extension (SVE) instructions.
aarch64_feature!;
// Enable SVE2 non-widening and SME2 Z-targeting non-widening BFloat16 instructions.
// DISABLED: Unstable library feature as of 1.96.0
// aarch64_feature!("sve-b16b16", "sve_b16b16");
// Enable Scalable Vector Extension 2 (SVE2) instructions.
aarch64_feature!;
// Shorthand for +sve2+sve-aes.
aarch64_feature!;
// Shorthand for +sve2+sve-bitperm.
aarch64_feature!;
// Shorthand for +sve2+sve-sha3.
aarch64_feature!;
// Shorthand for +sve2+sve-sm4.
aarch64_feature!;
// Enable Scalable Vector Extension 2.1 instructions.
// DISABLED: Unstable library feature as of 1.96.0
// aarch64_feature!("sve2p1");
// Enable Armv8.7-A WFET and WFIT instruction.
// DISABLED: Unstable library feature as of 1.96.0
// aarch64_feature!("wfxt");