Skip to content

Commit 8e462e9

Browse files
authored
Merge pull request #1102 from adamgemmell/dev/aarch64-target-feature
Document aarch64 `target_feature` options
2 parents 71cdfb9 + 53ebf4f commit 8e462e9

File tree

1 file changed

+65
-0
lines changed

1 file changed

+65
-0
lines changed

src/attributes/codegen.md

+65
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,71 @@ Feature | Implicitly Enables | Description
133133
[`xsaveopt`]: https://www.felixcloutier.com/x86/xsaveopt
134134
[`xsaves`]: https://www.felixcloutier.com/x86/xsaves
135135

136+
#### `aarch64`
137+
138+
This platform requires that `#[target_feature]` is only applied to [`unsafe`
139+
functions][unsafe function].
140+
141+
Further documentation on these features can be found in the [ARM Architecture
142+
Reference Manual], or elsewhere on [developer.arm.com].
143+
144+
[ARM Architecture Reference Manual]: https://developer.arm.com/documentation/ddi0487/latest
145+
[developer.arm.com]: https://developer.arm.com
146+
147+
> ***Note***: The following pairs of features should both be marked as enabled
148+
> or disabled together if used:
149+
> - `fp` and `neon`, in order facilitate inlining in more places, among other reasons.
150+
> - `paca` and `pacg`, which LLVM currently implements as one feature.
151+
152+
153+
Feature | Implicitly Enables | Feature Name
154+
---------------|--------------------|-------------------
155+
`aes` | `neon` | FEAT_AES - Advanced <abbr title="Single Instruction Multiple Data">SIMD</abbr> AES instructions
156+
`bf16` | | FEAT_BF16 - BFloat16 instructions
157+
`bti` | | FEAT_BTI - Branch Target Identification
158+
`crc` | | FEAT_CRC - CRC32 checksum instructions
159+
`dit` | | FEAT_DIT - Data Independent Timing instructions
160+
`dotprod` | | FEAT_DotProd - Advanced SIMD Int8 dot product instructions
161+
`dpb` | | FEAT_DPB - Data cache clean to point of persistence
162+
`dpb2` | | FEAT_DPB2 - Data cache clean to point of deep persistence
163+
`f32mm` | `sve` | FEAT_F32MM - SVE single-precision FP matrix multiply instruction
164+
`f64mm` | `sve` | FEAT_F64MM - SVE double-precision FP matrix multiply instruction
165+
`fcma` | `neon` | FEAT_FCMA - Floating point complex number support
166+
`fhm` | `fp16` | FEAT_FHM - Half-precision FP FMLAL instructions
167+
`flagm` | | FEAT_FlagM - Conditional flag manipulation
168+
`fp` | | FEAT_FP - Floating point extension
169+
`fp16` | `fp`, `neon` | FEAT_FP16 - Half-precision FP data processing
170+
`frintts` | | FEAT_FRINTTS - Floating-point to int helper instructions
171+
`i8mm` | | FEAT_I8MM - Int8 Matrix Multiplication
172+
`jsconv` | `fp`, `neon` | FEAT_JSCVT - JavaScript conversion instruction
173+
`lse` | | FEAT_LSE - Large System Extension
174+
`lor` | | FEAT_LOR - Limited Ordering Regions extension
175+
`mte` | | FEAT_MTE - Memory Tagging Extension
176+
`neon` | `fp` | FEAT_AdvSIMD - Advanced SIMD extension
177+
`pan` | | FEAT_PAN - Privileged Access-Never extension
178+
`paca` | | FEAT_PAuth - Pointer Authentication (address authentication)
179+
`pacg` | | FEAT_PAuth - Pointer Authentication (generic authentication)
180+
`pmuv3` | | FEAT_PMUv3 - Performance Monitors extension (v3)
181+
`rand` | | FEAT_RNG - Random Number Generator
182+
`ras` | | FEAT_RAS - Reliability, Availability and Serviceability extension
183+
`rcpc` | | FEAT_LRCPC - Release consistent Processor Consistent
184+
`rcpc2` | `rcpc` | FEAT_LRCPC2 - RcPc with immediate offsets
185+
`rdm` | | FEAT_RDM - Rounding Double Multiply accumulate
186+
`sb` | | FEAT_SB - Speculation Barrier
187+
`sha2` | `neon` | FEAT_SHA1 & FEAT_SHA256 - Advanced SIMD SHA instructions
188+
`sha3` | `sha2` | FEAT_SHA512 & FEAT_SHA3 - Advanced SIMD SHA instructions
189+
`sm4` | `neon` | FEAT_SM3 & FEAT_SM4 - Advanced SIMD SM3/4 instructions
190+
`spe` | | FEAT_SPE - Statistical Profiling Extension
191+
`ssbs` | | FEAT_SSBS - Speculative Store Bypass Safe
192+
`sve` | `fp16` | FEAT_SVE - Scalable Vector Extension
193+
`sve2` | `sve` | FEAT_SVE2 - Scalable Vector Extension 2
194+
`sve2-aes` | `sve2`, `aes` | FEAT_SVE_AES - SVE AES instructions
195+
`sve2-sm4` | `sve2`, `sm4` | FEAT_SVE_SM4 - SVE SM4 instructions
196+
`sve2-sha3` | `sve2`, `sha3` | FEAT_SVE_SHA3 - SVE SHA3 instructions
197+
`sve2-bitperm` | `sve2` | FEAT_SVE_BitPerm - SVE Bit Permute
198+
`tme` | | FEAT_TME - Transactional Memory Extension
199+
`vh` | | FEAT_VHE - Virtualization Host Extensions
200+
136201
#### `wasm32` or `wasm64`
137202

138203
`#[target_feature]` may be used with both safe and

0 commit comments

Comments
 (0)