From d51acadf8d82fb91d775e5c8acd856b677e4c117 Mon Sep 17 00:00:00 2001 From: Alexandros Lamprineas Date: Wed, 4 Sep 2024 14:55:27 +0100 Subject: [PATCH] [FMV] Unify ls64, ls64_v and ls64_accdata. As originally discussed in #315 and then in #329 we want to unify features that the toolchains cannot support independently. In the case of ls64 I have attempted to split the lumped feature in the compiler (see https://github.com/llvm/llvm-project/pull/101712), but unfortunately this would break backwards compatibility: Mapping 'ls64' to FeatureLS64_ACCDATA would enable all three of {FeatureLS64, FeatureLS64_V, FeatureLS64_ACCDATA} but then using 'nols64' either on the command line or the assembler directive would only disable FeatureLS64_ACCDATA without disabling the other two. For that we would have to map 'ls64' to FeatureLS64, but then it would not enable the other two. As far as I am aware there are no hardware implementations out there which implement ls64 without ls64_v or ls64_accdata, so unifying these features in the specification should not be a regression for feature detection. If any of this changes in the feature we can revisit the specification. --- main/acle.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/main/acle.md b/main/acle.md index 17a30075..7ec4a09b 100644 --- a/main/acle.md +++ b/main/acle.md @@ -402,6 +402,7 @@ Armv8.4-A [[ARMARMv84]](#ARMARMv84). Support is added for the Dot Product intrin a misplaced anchor. * Added `__FUNCTION_MULTI_VERSIONING_SUPPORT_LEVEL` to indicate the support level of the [Function Multi Versioning](#function-multi-versioning). +* Unified Function Multi Versioning features ls64, ls64_v, ls64_accdata. * Added [**Alpha**](#current-status-and-anticipated-changes) support for SME2.1 (FEAT_SME2p1). * Removed requirement to add preprocessor guards for header files. @@ -2756,9 +2757,7 @@ The following table lists the architectures feature mapping for AArch64 | 490 | `FEAT_SSBS` | ssbs | ```ID_AA64PFR1_EL1.SSBS >= 0b0001``` | | 500 | `FEAT_SSBS2` | ssbs2 | ```ID_AA64PFR1_EL1.SSBS >= 0b0010``` | | 510 | `FEAT_BTI` | bti | ```ID_AA64PFR1_EL1.BT >= 0b0001``` | - | 520 | `FEAT_LS64` | ls64 | ```ID_AA64ISAR1_EL1.LS64 >= 0b0001``` | - | 530 | `FEAT_LS64_V` | ls64_v | ```ID_AA64ISAR1_EL1.LS64 >= 0b0010``` | - | 540 | `FEAT_LS64_ACCDATA` | ls64_accdata | ```ID_AA64ISAR1_EL1.LS64 >= 0b0011``` | + | 520 | `FEAT_LS64`,`FEAT_LS64_V`,
`FEAT_LS64_ACCDATA`| ls64 | ```ID_AA64ISAR1_EL1.LS64 >= 0b0011``` | | 550 | `FEAT_WFxT` | wfxt | ```ID_AA64ISAR2_EL1.WFxT >= 0b0010``` | | 560 | `FEAT_SME_F64F64` | sme-f64f64 | ```ID_AA64SMFR0_EL1.F64F64 == 0b1``` | | 570 | `FEAT_SME_I16I64` | sme-i16i64 | ```ID_AA64SMFR0_EL1.I16I64 == 0b1111``` |