@@ -422,6 +422,7 @@ Armv8.4-A [[ARMARMv84]](#ARMARMv84). Support is added for the Dot Product intrin
422
422
* Removed Function Multi Versioning features sve-bf16, sve-ebf16, and sve-i8mm.
423
423
* Removed Function Multi Versioning features ebf16, memtag3, and rpres.
424
424
* Removed Function Multi Versioning feature dgh.
425
+ * Document Function Multi Versioning feature dependencies.
425
426
* Fixed range of operand `o0` (too small) in AArch64 system register designations.
426
427
* Fixed SVE2.1 quadword gather load/scatter store intrinsics.
427
428
* Removed unnecessary Zd argument from `svcvtnb_mf8[_f32_x2]_fpm`.
@@ -2675,8 +2676,6 @@ The following attributes trigger the multi version code generation:
2675
2676
* The `default` version means the version of the function that would
2676
2677
be generated without these attributes.
2677
2678
* `name` is the dependent features from the tables below.
2678
- * If a feature depends on another feature as defined by the Architecture
2679
- Reference Manual then no need to explicitly state in the attribute[^fmv-note-names].
2680
2679
* The dependent features could be joined by the `+` sign.
2681
2680
* None of these attributes will enable the corresponding ACLE feature(s)
2682
2681
associated to the `name` expressed in the attribute.
@@ -2686,9 +2685,6 @@ The following attributes trigger the multi version code generation:
2686
2685
* FMV may be disabled in compile time by a compiler flag. In this
2687
2686
case the `default` version shall be used.
2688
2687
2689
- [^fmv-note-names]: For example the `sve_bf16` feature depends on `sve`
2690
- but it is enough to say `target_version("sve_bf16")` in the code.
2691
-
2692
2688
The attribute `__attribute__((target_version("name")))` expresses the
2693
2689
following:
2694
2690
@@ -2828,6 +2824,50 @@ The following table lists the architectures feature mapping for AArch64
2828
2824
| 580 | `FEAT_SME2` | sme2 | ```ID_AA64PFR1_EL1.SMEver >= 0b0001``` |
2829
2825
| 650 | `FEAT_MOPS` | mops | ```ID_AA64ISAR2_EL1.MOPS >= 0b0001``` |
2830
2826
2827
+ ### Dependencies
2828
+
2829
+ If a feature depends on another feature as defined by the table below then:
2830
+
2831
+ * the depended-on feature *need not* be specified in the attribute,
2832
+ * the depended-on feature *may* be specified in the attribute.
2833
+
2834
+ These dependencies are taken into account transitively when selecting the
2835
+ most appropriate version of a function (see section [Selection](#selection)).
2836
+ The following table lists the feature dependencies for AArch64.
2837
+
2838
+ | **Feature** | **Depends on** |
2839
+ | ---------------- | ----------------- |
2840
+ | flagm2 | flagm |
2841
+ | simd | fp |
2842
+ | dotprod | simd |
2843
+ | sm4 | simd |
2844
+ | rdm | simd |
2845
+ | sha2 | simd |
2846
+ | sha3 | sha2 |
2847
+ | aes | simd |
2848
+ | fp16 | fp |
2849
+ | fp16fml | simd, fp16 |
2850
+ | dpb2 | dpb |
2851
+ | jscvt | fp |
2852
+ | fcma | simd |
2853
+ | rcpc2 | rcpc |
2854
+ | rcpc3 | rcpc2 |
2855
+ | frintts | fp |
2856
+ | i8mm | simd |
2857
+ | bf16 | simd |
2858
+ | sve | fp16 |
2859
+ | f32mm | sve |
2860
+ | f64mm | sve |
2861
+ | sve2 | sve |
2862
+ | sve2-aes | sve2, aes |
2863
+ | sve2-bitperm | sve2 |
2864
+ | sve2-sha3 | sve2, sha3 |
2865
+ | sve2-sm4 | sve2, sm4 |
2866
+ | sme | fp16, bf16 |
2867
+ | sme-f64f64 | sme |
2868
+ | sme-i16i64 | sme |
2869
+ | sme2 | sme |
2870
+
2831
2871
### Selection
2832
2872
2833
2873
The following rules shall be followed by all implementations:
0 commit comments