Skip to content

Commit df1159b

Browse files
mrkajetanpdavidtwco
authored andcommitted
attributes/codegen: update aarch64 features
Update `attributes/codegen.md` to match aarch64 CPU features known to rustc[1]. [1]: https://github.com/rust-lang/rust/blob/afa859f8121bf2985362a2c8414dc71a825ccf2d/compiler/rustc_target/src/target_features.rs#L179-L373
1 parent 3340922 commit df1159b

File tree

1 file changed

+78
-46
lines changed

1 file changed

+78
-46
lines changed

src/attributes/codegen.md

+78-46
Original file line numberDiff line numberDiff line change
@@ -226,52 +226,84 @@ Reference Manual], or elsewhere on [developer.arm.com].
226226
> The following pairs of features should both be marked as enabled or disabled together if used:
227227
> - `paca` and `pacg`, which LLVM currently implements as one feature.
228228
229-
Feature | Implicitly Enables | Feature Name
230-
---------------|--------------------|-------------------
231-
`aes` | `neon` | FEAT_AES & FEAT_PMULL --- Advanced <abbr title="Single Instruction Multiple Data">SIMD</abbr> AES & PMULL instructions
232-
`bf16` | | FEAT_BF16 --- BFloat16 instructions
233-
`bti` | | FEAT_BTI --- Branch Target Identification
234-
`crc` | | FEAT_CRC --- CRC32 checksum instructions
235-
`dit` | | FEAT_DIT --- Data Independent Timing instructions
236-
`dotprod` | | FEAT_DotProd --- Advanced SIMD Int8 dot product instructions
237-
`dpb` | | FEAT_DPB --- Data cache clean to point of persistence
238-
`dpb2` | | FEAT_DPB2 --- Data cache clean to point of deep persistence
239-
`f32mm` | `sve` | FEAT_F32MM --- SVE single-precision FP matrix multiply instruction
240-
`f64mm` | `sve` | FEAT_F64MM --- SVE double-precision FP matrix multiply instruction
241-
`fcma` | `neon` | FEAT_FCMA --- Floating point complex number support
242-
`fhm` | `fp16` | FEAT_FHM --- Half-precision FP FMLAL instructions
243-
`flagm` | | FEAT_FlagM --- Conditional flag manipulation
244-
`fp16` | `neon` | FEAT_FP16 --- Half-precision FP data processing
245-
`frintts` | | FEAT_FRINTTS --- Floating-point to int helper instructions
246-
`i8mm` | | FEAT_I8MM --- Int8 Matrix Multiplication
247-
`jsconv` | `neon` | FEAT_JSCVT --- JavaScript conversion instruction
248-
`lse` | | FEAT_LSE --- Large System Extension
249-
`lor` | | FEAT_LOR --- Limited Ordering Regions extension
250-
`mte` | | FEAT_MTE & FEAT_MTE2 --- Memory Tagging Extension
251-
`neon` | | FEAT_FP & FEAT_AdvSIMD --- Floating Point and Advanced SIMD extension
252-
`pan` | | FEAT_PAN --- Privileged Access-Never extension
253-
`paca` | | FEAT_PAuth --- Pointer Authentication (address authentication)
254-
`pacg` | | FEAT_PAuth --- Pointer Authentication (generic authentication)
255-
`pmuv3` | | FEAT_PMUv3 --- Performance Monitors extension (v3)
256-
`rand` | | FEAT_RNG --- Random Number Generator
257-
`ras` | | FEAT_RAS & FEAT_RASv1p1 --- Reliability, Availability and Serviceability extension
258-
`rcpc` | | FEAT_LRCPC --- Release consistent Processor Consistent
259-
`rcpc2` | `rcpc` | FEAT_LRCPC2 --- RcPc with immediate offsets
260-
`rdm` | | FEAT_RDM --- Rounding Double Multiply accumulate
261-
`sb` | | FEAT_SB --- Speculation Barrier
262-
`sha2` | `neon` | FEAT_SHA1 & FEAT_SHA256 --- Advanced SIMD SHA instructions
263-
`sha3` | `sha2` | FEAT_SHA512 & FEAT_SHA3 --- Advanced SIMD SHA instructions
264-
`sm4` | `neon` | FEAT_SM3 & FEAT_SM4 --- Advanced SIMD SM3/4 instructions
265-
`spe` | | FEAT_SPE --- Statistical Profiling Extension
266-
`ssbs` | | FEAT_SSBS & FEAT_SSBS2 --- Speculative Store Bypass Safe
267-
`sve` | `fp16` | FEAT_SVE --- Scalable Vector Extension
268-
`sve2` | `sve` | FEAT_SVE2 --- Scalable Vector Extension 2
269-
`sve2-aes` | `sve2`, `aes` | FEAT_SVE_AES --- SVE AES instructions
270-
`sve2-sm4` | `sve2`, `sm4` | FEAT_SVE_SM4 --- SVE SM4 instructions
271-
`sve2-sha3` | `sve2`, `sha3` | FEAT_SVE_SHA3 --- SVE SHA3 instructions
272-
`sve2-bitperm` | `sve2` | FEAT_SVE_BitPerm --- SVE Bit Permute
273-
`tme` | | FEAT_TME --- Transactional Memory Extension
274-
`vh` | | FEAT_VHE --- Virtualization Host Extensions
229+
Feature | Stability | Implicity Enables | Feature Name
230+
------- | --------- | ----------------- | ------------
231+
`aes` | Stable | `neon` | FEAT_AES & FEAT_PMULL --- Advanced <abbr title="Single Instruction Multiple Data">SIMD</abbr> AES & PMULL instructions
232+
`bf16` | Stable | | FEAT_BF16 --- BFloat16 instructions
233+
`bti` | Stable | | FEAT_BTI --- Branch Target Identification
234+
`crc` | Stable | | FEAT_CRC --- CRC32 checksum instructions
235+
`cssc` | Unstable (`aarch64_unstable_target_feature`) | | FEAT_CSSC --- Common Short Sequence Compression (CSSC) instructions
236+
`dit` | Stable | | FEAT_DIT --- Data Independent Timing instructions
237+
`dotprod` | Stable | `neon` | FEAT_DotProd --- Advanced SIMD Int8 dot product instructions
238+
`dpb` | Stable | | FEAT_DPB --- Data cache clean to point of persistence
239+
`dpb2` | Stable | `dpb` | FEAT_DPB2 --- Data cache clean to point of deep persistence
240+
`ecv` | Unstable (`aarch64_unstable_target_feature`) | | FEAT_ECV --- Enhanced counter virtualization extension
241+
`f32mm` | Stable | `sve` | FEAT_F32MM --- SVE single-precision FP matrix multiply instruction
242+
`f64mm` | Stable | `sve` | FEAT_F64MM --- SVE double-precision FP matrix multiply instruction
243+
`faminmax` | Unstable (`aarch64_unstable_target_feature`) | | FEAT_FAMINMAX --- Enable FAMIN and FAMAX instructions
244+
`fcma` | Stable | `neon` | FEAT_FCMA --- Floating point complex number support
245+
`fhm` | Stable | `fp16` | FEAT_FHM --- Half-precision FP FMLAL instructions
246+
`flagm` | Stable | | FEAT_FLAGM --- Conditional flag manipulation
247+
`flagm2` | Unstable (`aarch64_unstable_target_feature`) | | FEAT_FLAGM2 --- Enhancements to flag manipulation instructions
248+
`fp16` | Stable | `neon` | FEAT_FP16 --- Half-precision FP data processing
249+
`fp8` | Unstable (`aarch64_unstable_target_feature`) | `faminmax` `lut`, `bf16`, | FEAT_FP8 --- FP8 (F8CVT Instructions)
250+
`fp8dot2` | Unstable (`aarch64_unstable_target_feature`) | `fp8dot4` | FEAT_FP8DOT2 --- FP8 2-way dot product instructions
251+
`fp8dot4` | Unstable (`aarch64_unstable_target_feature`) | `fp8fma` | FEAT_FP8DOT4 --- FP8 4-way dot product instructions
252+
`fp8fma` | Unstable (`aarch64_unstable_target_feature`) | `fp8` | FEAT_FP8FMA --- FP8 multiply-add instructions
253+
`frintts` | Stable | | FEAT_FRINTTS --- Floating-point to int helper instructions
254+
`hbc` | Unstable (`aarch64_unstable_target_feature`) | | FEAT_HBC --- Hinted conditional branches
255+
`i8mm` | Stable | | FEAT_I8MM --- Int8 Matrix Multiplication
256+
`jsconv` | Stable | `neon` | FEAT_JSCVT --- JavaScript conversion instruction
257+
`lor` | Stable | | FEAT_LOR --- Limited Ordering Regions extension
258+
`lse` | Stable | | FEAT_LSE --- Large System Extensions
259+
`lse128` | Unstable (`aarch64_unstable_target_feature`) | `lse` | FEAT_LSE128 --- 128-bit Atomics
260+
`lse2` | Unstable (`aarch64_unstable_target_feature`) | | FEAT_LSE2 --- Large System Extensions version 2
261+
`lut` | Unstable (`aarch64_unstable_target_feature`) | | FEAT_LUT --- Lookup Table instructions
262+
`mops` | Unstable (`aarch64_unstable_target_feature`) | | FEAT_MOPS --- memcpy and memset acceleration instructions
263+
`mte` | Stable | | FEAT_MTE & FEAT_MTE2 --- Memory Tagging Extension
264+
`neon` | Stable | | FEAT_AdvSimd & FEAT_FP --- Floating Point and Advanced SIMD extension
265+
`paca` | Stable | | FEAT_PAUTH --- Pointer Authentication (address authentication)
266+
`pacg` | Stable | | FEAT_PAUTH --- Pointer Authentication (generic authentication)
267+
`pan` | Stable | | FEAT_PAN --- Privileged Access-Never extension
268+
`pauth-lr` | Unstable (`aarch64_unstable_target_feature`) | | FEAT_PAuth_LR --- Pointer authentication instructions that allow signing of LR using SP and PC as diversifiers
269+
`pmuv3` | Stable | | FEAT_PMUv3 --- Performance Monitors extension (v3)
270+
`rand` | Stable | | FEAT_RNG --- Random Number Generator
271+
`ras` | Stable | | FEAT_RAS & FEAT_RASv1p1 --- Reliability, Availability and Serviceability extension
272+
`rcpc` | Stable | | FEAT_LRCPC --- Release consistent Processor Consistent
273+
`rcpc2` | Stable | `rcpc` | FEAT_LRCPC2 --- RcPc with immediate offsets
274+
`rcpc3` | Unstable (`aarch64_unstable_target_feature`) | `rcpc2` | FEAT_LRCPC3 --- RcPc instructions version 3
275+
`rdm` | Stable | `neon` | FEAT_RDM --- Rounding Double Multiply accumulate
276+
`sb` | Stable | | FEAT_SB --- Speculation Barrier
277+
`sha2` | Stable | `neon` | FEAT_SHA1 & FEAT_SHA256 --- Advanced SIMD SHA instructions
278+
`sha3` | Stable | `sha2` | FEAT_SHA512 & FEAT_SHA3 --- Advanced SIMD SHA instructions
279+
`sm4` | Stable | `neon` | FEAT_SM3 & FEAT_SM4 --- Advanced SIMD SM3/4 instructions
280+
`sme` | Unstable (`aarch64_unstable_target_feature`) | `bf16` | FEAT_SME --- Scalable Matrix Extension
281+
`sme-b16b16` | Unstable (`aarch64_unstable_target_feature`) | `bf16` `sme2`, `sve-b16b16`, | FEAT_SME_B16B16 --- Non-widening BFloat16 to BFloat16 SME ZA-targeting arithmetic
282+
`sme-f16f16` | Unstable (`aarch64_unstable_target_feature`) | `sme2` | FEAT_SME_F16F16 --- Non-widening half-precision FP16 to FP16 arithmetic for SME2
283+
`sme-f64f64` | Unstable (`aarch64_unstable_target_feature`) | `sme` | FEAT_SME_F64F64 --- Double-precision floating-point outer product instructions
284+
`sme-f8f16` | Unstable (`aarch64_unstable_target_feature`) | `sme-f8f32` | FEAT_SME_F8F16 --- SME F8F16 instructions
285+
`sme-f8f32` | Unstable (`aarch64_unstable_target_feature`) | `sme2` `fp8`, | FEAT_SME_F8F32 --- SME F8F32 instructions
286+
`sme-fa64` | Unstable (`aarch64_unstable_target_feature`) | `sme` `sve2`, | FEAT_SME_FA64 --- Full A64 instruction set support in Streaming SVE mode
287+
`sme-i16i64` | Unstable (`aarch64_unstable_target_feature`) | `sme` | FEAT_SME_I16I64 --- 16-bit to 64-bit integer widening outer product instructions
288+
`sme-lutv2` | Unstable (`aarch64_unstable_target_feature`) | | FEAT_SME_LUTv2 --- LUTI4 instruction
289+
`sme2` | Unstable (`aarch64_unstable_target_feature`) | `sme` | FEAT_SME2 --- SME Version 2
290+
`sme2p1` | Unstable (`aarch64_unstable_target_feature`) | `sme2` | FEAT_SME2p1 --- SME Version 2.1
291+
`spe` | Stable | | FEAT_SPE --- Statistical Profiling Extension
292+
`ssbs` | Stable | | FEAT_SSBS & FEAT_SSBS2 --- Speculative Store Bypass Safe
293+
`ssve-fp8dot2` | Unstable (`aarch64_unstable_target_feature`) | `ssve-fp8dot4` | FEAT_SSVE_FP8FDOT2 --- SVE FP8 2-way dot product to half-precision instructions in Streaming SVE mode
294+
`ssve-fp8dot4` | Unstable (`aarch64_unstable_target_feature`) | `ssve-fp8fma` | FEAT_SSVE_FP8FDOT4 --- SVE2 FP8 4-way dot product to single-precision instructions in Streaming SVE mode
295+
`ssve-fp8fma` | Unstable (`aarch64_unstable_target_feature`) | `sme2` `fp8`, | FEAT_SSVE_FP8FMA --- SVE2 FP8 multiply-accumulate to half-precision and single-precision instructions in Streaming SVE mode
296+
`sve` | Stable | `neon` | FEAT_SVE --- Scalable Vector Extension
297+
`sve-b16b16` | Unstable (`aarch64_unstable_target_feature`) | `bf16` | FEAT_SVE_B16B16 --- Non-widening BFloat16 to BFloat16 arithmetic for SVE2 and SME2
298+
`sve2` | Stable | `sve` | FEAT_SVE2 --- Scalable Vector Extension 2
299+
`sve2-aes` | Stable | `sve2` `aes`, | FEAT_SVE_AES & FEAT_SVE_PMULL128 --- SVE AES instructions
300+
`sve2-bitperm` | Stable | `sve2` | FEAT_SVE2_BitPerm --- SVE Bit Permute
301+
`sve2-sha3` | Stable | `sve2` `sha3`, | FEAT_SVE2_SHA3 --- SVE SHA3 instructions
302+
`sve2-sm4` | Stable | `sve2` `sm4`, | FEAT_SVE2_SM4 --- SVE SM4 instructions
303+
`sve2p1` | Unstable (`aarch64_unstable_target_feature`) | `sve2` | FEAT_SVE2p1 --- Scalable Vector Extension 2.1
304+
`tme` | Stable | | FEAT_TME --- Transactional Memory Extension
305+
`vh` | Stable | | FEAT_VHE --- Virtualization Host Extensions
306+
`wfxt` | Unstable (`aarch64_unstable_target_feature`) | | FEAT_WFxT --- WFET and WFIT instructions
275307

276308
r[attributes.codegen.target_feature.riscv]
277309
#### `riscv32` or `riscv64`

0 commit comments

Comments
 (0)