@@ -4,35 +4,145 @@ features! {
4
4
@TARGET : aarch64;
5
5
@MACRO_NAME : is_aarch64_feature_detected;
6
6
@MACRO_ATTRS :
7
- /// Checks if `aarch64` feature is enabled.
7
+ /// This macro tests, at runtime, whether an `aarch64` feature is enabled on aarch64 platforms.
8
+ /// Currently most features are only supported on linux-based platforms.
9
+ ///
10
+ /// This macro takes one argument which is a string literal of the feature being tested for.
11
+ /// The feature names are mostly taken from their FEAT_* definitiions in the [ARM Architecture
12
+ /// Reference Manual][docs].
13
+ ///
14
+ /// ## Supported arguments
15
+ ///
16
+ /// * `"asimd"` or "neon" - FEAT_AdvSIMD
17
+ /// * `"pmull"` - FEAT_PMULL
18
+ /// * `"fp"` - FEAT_FP
19
+ /// * `"fp16"` - FEAT_FP16
20
+ /// * `"sve"` - FEAT_SVE
21
+ /// * `"crc"` - FEAT_CRC
22
+ /// * `"crypto"` - Cryptographic Extension (AES + PMULL + SHA1 + SHA2-256)
23
+ /// * `"lse"` - FEAT_LSE
24
+ /// * `"lse2"` - FEAT_LSE2
25
+ /// * `"rdm"` - FEAT_RDM
26
+ /// * `"rcpc"` - FEAT_LRCPC
27
+ /// * `"rcpc2"` - FEAT_LRCPC2
28
+ /// * `"dotprod"` - FEAT_DotProd
29
+ /// * `"tme"` - FEAT_TME
30
+ /// * `"fhm"` - FEAT_FHM
31
+ /// * `"dit"` - FEAT_DIT
32
+ /// * `"flagm"` - FEAT_FLAGM
33
+ /// * `"ssbs"` - FEAT_SSBS
34
+ /// * `"sb"` - FEAT_SB
35
+ /// * `"pauth"` - FEAT_PAuth
36
+ /// * `"dpb"` - FEAT_DPB
37
+ /// * `"dpb2"` - FEAT_DPB2
38
+ /// * `"sve2"` - FEAT_SVE2
39
+ /// * `"sve2-aes"` - FEAT_SVE2_AES
40
+ /// * `"sve2-sm4"` - FEAT_SVE2_SM4
41
+ /// * `"sve2-sha3"` - FEAT_SVE2_SHA3
42
+ /// * `"sve2-bitperm"` - FEAT_SVE2_BitPerm
43
+ /// * `"fptoint"` - FEAT_FRINTTS
44
+ /// * `"i8mm"` - FEAT_I8MM
45
+ /// * `"f32mm"` - FEAT_F32MM
46
+ /// * `"f64mm"` - FEAT_F64MM
47
+ /// * `"bf16"` - FEAT_BF16
48
+ /// * `"rand"` - FEAT_RNG
49
+ /// * `"bti"` - FEAT_BTI
50
+ /// * `"mte"` - FEAT_MTE
51
+ /// * `"jsconv"` - FEAT_JSCVT
52
+ /// * `"fcma"` - FEAT_FCMA
53
+ /// * `"sha2"` - FEAT_SHA1 & FEAT_SHA256
54
+ /// * `"sha3"` - FEAT_SHA512 & FEAT_SHA3
55
+ /// * `"sm4"` - FEAT_SM3 & FEAT_SM4
56
+ ///
57
+ /// [docs]: https://developer.arm.com/documentation/ddi0487/latest
8
58
#[ unstable( feature = "stdsimd" , issue = "27731" ) ]
9
59
@BIND_FEATURE_NAME : "asimd" ; "neon" ;
10
60
@NO_RUNTIME_DETECTION : "ras" ;
11
61
@NO_RUNTIME_DETECTION : "v8.1a" ;
12
62
@NO_RUNTIME_DETECTION : "v8.2a" ;
13
63
@NO_RUNTIME_DETECTION : "v8.3a" ;
64
+ @NO_RUNTIME_DETECTION : "v8.4a" ;
65
+ @NO_RUNTIME_DETECTION : "v8.5a" ;
66
+ @NO_RUNTIME_DETECTION : "v8.6a" ;
67
+ @NO_RUNTIME_DETECTION : "v8.7a" ;
14
68
@FEATURE : #[ unstable( feature = "stdsimd" , issue = "27731" ) ] asimd: "neon" ;
15
- /// ARM Advanced SIMD (ASIMD )
69
+ /// FEAT_AdvSIMD ( Advanced SIMD/NEON )
16
70
@FEATURE : #[ unstable( feature = "stdsimd" , issue = "27731" ) ] pmull: "pmull" ;
17
- /// Polynomial Multiply
71
+ /// FEAT_PMULL ( Polynomial Multiply)
18
72
@FEATURE : #[ unstable( feature = "stdsimd" , issue = "27731" ) ] fp: "fp" ;
19
- /// Floating point support
73
+ /// FEAT_FP ( Floating point support)
20
74
@FEATURE : #[ unstable( feature = "stdsimd" , issue = "27731" ) ] fp16: "fp16" ;
21
- /// Half-float support.
75
+ /// FEAT_FP16 ( Half-float support)
22
76
@FEATURE : #[ unstable( feature = "stdsimd" , issue = "27731" ) ] sve: "sve" ;
23
- /// Scalable Vector Extension (SVE )
77
+ /// FEAT_SVE ( Scalable Vector Extension)
24
78
@FEATURE : #[ unstable( feature = "stdsimd" , issue = "27731" ) ] crc: "crc" ;
25
- /// CRC32 (Cyclic Redundancy Check)
79
+ /// FEAT_CRC32 (Cyclic Redundancy Check)
26
80
@FEATURE : #[ unstable( feature = "stdsimd" , issue = "27731" ) ] crypto: "crypto" ;
27
- /// Crypto: AES + PMULL + SHA1 + SHA2
81
+ /// Cryptographic Extension ( AES + PMULL + SHA1 + SHA2-256)
28
82
@FEATURE : #[ unstable( feature = "stdsimd" , issue = "27731" ) ] lse: "lse" ;
29
- /// Atomics (Large System Extension)
83
+ /// FEAT_LSE (Large System Extension - atomics)
84
+ @FEATURE : #[ unstable( feature = "stdsimd" , issue = "27731" ) ] lse2: "lse2" ;
85
+ /// FEAT_LSE2 (unaligned and register-pair atomics)
30
86
@FEATURE : #[ unstable( feature = "stdsimd" , issue = "27731" ) ] rdm: "rdm" ;
31
- /// Rounding Double Multiply ( ASIMDRDM)
87
+ /// FEAT_RDM ( Rounding Doubling Multiply - ASIMDRDM)
32
88
@FEATURE : #[ unstable( feature = "stdsimd" , issue = "27731" ) ] rcpc: "rcpc" ;
33
- /// Release consistent Processor consistent (RcPc)
89
+ /// FEAT_LRCPC (Release consistent Processor consistent)
90
+ @FEATURE : #[ unstable( feature = "stdsimd" , issue = "27731" ) ] rcpc2: "rcpc2" ;
91
+ /// FEAT_LRCPC2 (RCPC with immediate offsets)
34
92
@FEATURE : #[ unstable( feature = "stdsimd" , issue = "27731" ) ] dotprod: "dotprod" ;
35
- /// Vector Dot-Product ( ASIMDDP)
93
+ /// FEAT_DotProd ( Vector Dot-Product - ASIMDDP)
36
94
@FEATURE : #[ unstable( feature = "stdsimd" , issue = "27731" ) ] tme: "tme" ;
37
- /// Transactional Memory Extensions (TME)
95
+ /// FEAT_TME (Transactional Memory Extensions)
96
+ @FEATURE : #[ unstable( feature = "stdsimd" , issue = "27731" ) ] fhm: "fhm" ;
97
+ /// FEAT_FHM (fp16 multiplication instructions)
98
+ @FEATURE : #[ unstable( feature = "stdsimd" , issue = "27731" ) ] dit: "dit" ;
99
+ /// FEAT_DIT (Data Independent Timing instructions)
100
+ @FEATURE : #[ unstable( feature = "stdsimd" , issue = "27731" ) ] flagm: "flagm" ;
101
+ /// FEAT_FLAGM (flag manipulation instructions)
102
+ @FEATURE : #[ unstable( feature = "stdsimd" , issue = "27731" ) ] ssbs: "ssbs" ;
103
+ /// FEAT_SSBS (speculative store bypass safe)
104
+ @FEATURE : #[ unstable( feature = "stdsimd" , issue = "27731" ) ] sb: "sb" ;
105
+ /// FEAT_SB (speculation barrier)
106
+ @FEATURE : #[ unstable( feature = "stdsimd" , issue = "27731" ) ] pauth: "pauth" ;
107
+ /// FEAT_PAuth (pointer authentication)
108
+ @FEATURE : #[ unstable( feature = "stdsimd" , issue = "27731" ) ] dpb: "dpb" ;
109
+ /// FEAT_DPB (aka dcpop - data cache clean to point of persistance)
110
+ @FEATURE : #[ unstable( feature = "stdsimd" , issue = "27731" ) ] dpb2: "dpb2" ;
111
+ /// FEAT_DPB2 (aka dcpodp - data cache clean to point of deep persistance)
112
+ @FEATURE : #[ unstable( feature = "stdsimd" , issue = "27731" ) ] sve2: "sve2" ;
113
+ /// FEAT_SVE2 (Scalable Vector Extension 2)
114
+ @FEATURE : #[ unstable( feature = "stdsimd" , issue = "27731" ) ] sve2_aes: "sve2-aes" ;
115
+ /// FEAT_SVE_AES (SVE2 AES crypto)
116
+ @FEATURE : #[ unstable( feature = "stdsimd" , issue = "27731" ) ] sve2_sm4: "sve2-sm4" ;
117
+ /// FEAT_SVE_SM4 (SVE2 SM4 crypto)
118
+ @FEATURE : #[ unstable( feature = "stdsimd" , issue = "27731" ) ] sve2_sha3: "sve2-sha3" ;
119
+ /// FEAT_SVE_SHA3 (SVE2 SHA3 crypto)
120
+ @FEATURE : #[ unstable( feature = "stdsimd" , issue = "27731" ) ] sve2_bitperm: "sve2-bitperm" ;
121
+ /// FEAT_SVE_BitPerm (SVE2 bit permutation instructions)
122
+ @FEATURE : #[ unstable( feature = "stdsimd" , issue = "27731" ) ] fptoint: "fptoint" ;
123
+ /// FEAT_FRINTTS (float to integer rounding instructions)
124
+ @FEATURE : #[ unstable( feature = "stdsimd" , issue = "27731" ) ] i8mm: "i8mm" ;
125
+ /// FEAT_I8MM (integer matrix multiplication, plus ASIMD support)
126
+ @FEATURE : #[ unstable( feature = "stdsimd" , issue = "27731" ) ] f32mm: "f32mm" ;
127
+ /// FEAT_F32MM (single-precision matrix multiplication)
128
+ @FEATURE : #[ unstable( feature = "stdsimd" , issue = "27731" ) ] f64mm: "f64mm" ;
129
+ /// FEAT_F64MM (double-precision matrix multiplication)
130
+ @FEATURE : #[ unstable( feature = "stdsimd" , issue = "27731" ) ] bf16: "bf16" ;
131
+ /// FEAT_BF16 (BFloat16 type, plus MM instructions, plus ASIMD support)
132
+ @FEATURE : #[ unstable( feature = "stdsimd" , issue = "27731" ) ] rand: "rand" ;
133
+ /// FEAT_RNG (Random Number Generator)
134
+ @FEATURE : #[ unstable( feature = "stdsimd" , issue = "27731" ) ] bti: "bti" ;
135
+ /// FEAT_BTI (Branch Target Identification)
136
+ @FEATURE : #[ unstable( feature = "stdsimd" , issue = "27731" ) ] mte: "mte" ;
137
+ /// FEAT_MTE (Memory Tagging Extension)
138
+ @FEATURE : #[ unstable( feature = "stdsimd" , issue = "27731" ) ] jsconv: "jsconv" ;
139
+ /// FEAT_JSCVT (JavaScript float conversion instructions)
140
+ @FEATURE : #[ unstable( feature = "stdsimd" , issue = "27731" ) ] fcma: "fcma" ;
141
+ /// FEAT_FCMA (float complex number operations)
142
+ @FEATURE : #[ unstable( feature = "stdsimd" , issue = "27731" ) ] sha2: "sha2" ;
143
+ /// FEAT_SHA1 & FEAT_SHA256 (SHA1 & SHA2-256 instructions)
144
+ @FEATURE : #[ unstable( feature = "stdsimd" , issue = "27731" ) ] sha3: "sha3" ;
145
+ /// FEAT_SHA512 & FEAT_SHA3 (SHA2-512 & SHA3 instructions)
146
+ @FEATURE : #[ unstable( feature = "stdsimd" , issue = "27731" ) ] sm4: "sm4" ;
147
+ /// FEAT_SM3 & FEAT_SM4 (SM3 & SM4 instructions)
38
148
}
0 commit comments