From ddcd1e2a786ff60c2bfec454cd8adacaf5a2526f Mon Sep 17 00:00:00 2001 From: CarolineConcatto Date: Wed, 8 Jul 2026 16:51:42 +0000 Subject: [PATCH] [FMV] Add support-level table and remove __ARM_ACLE_VERSION Remove __ARM_ACLE_VERSION, change __ARM_ACLE to represent when the header is available, and update __FUNCTION_MULTI_VERSIONING_SUPPORT_LEVEL so that it refers to a new Function Multi Versioning feature availability table. For backwards compatibility with previous features, the table lists the support level at which each current FMV target version name became available. It also defines how future FMV feature sets allocate new support levels. --- main/acle.md | 109 ++++++++++++++++++++++++++++++++++----------------- 1 file changed, 74 insertions(+), 35 deletions(-) diff --git a/main/acle.md b/main/acle.md index 08cf03fe..6bb573a5 100644 --- a/main/acle.md +++ b/main/acle.md @@ -1499,32 +1499,8 @@ enclose them in parentheses if they are not simple constants. ## Testing for Arm C Language Extensions -`__ARM_ACLE` is defined as the version of this specification that is -implemented, formatted as `{YEAR}{QUARTER}{PATCH}`. The `YEAR` segment is -composed of 4 digits, the `QUARTER` segment is composed of 1 digit, and -the `PATCH` segment is also composed of 1 digit. - -For example: - - - An implementation based on the version 2023 Q2 of the ACLE with no - further patch releases will define `__ARM_ACLE` as `202320`. - - An implementation based on a hypothetical version 2024 Q3 of the ACLE - with two patch releases will define `__ARM_ACLE` as `202432`. - -NOTE: Previously, the macro followed the previous versioning scheme and -was defined as `100 * major_version + minor_version`, which was the -version of this specification implemented. For instance, an implementation -implementing version 2.1 of the ACLE specification defined `__ARM_ACLE` -as `201`. - -`__ARM_ACLE_VERSION(year, quarter, patch)` is defined to express a given -ACLE version. Returns with the version number in the same format as the -`__ARM_ACLE` does. Checking the minimum required ACLE version could be -written as: - -``` c -#if __ARM_ACLE >= __ARM_ACLE_VERSION(2024, 1, 0) -``` +`__ARM_ACLE` is defined to `1` to indicate that the implementation +supports the Arm C Language Extensions. ## Endianness @@ -2711,7 +2687,7 @@ be found in [[BA]](#BA). |---------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------|-------------| | [`__ARM_32BIT_STATE`](#instruction-set-architecture-a32t32a64) | Code is for AArch32 state | 1 | | [`__ARM_64BIT_STATE`](#instruction-set-architecture-a32t32a64) | Code is for AArch64 state | 1 | -| [`__ARM_ACLE`](#testing-for-arm-c-language-extensions) | Indicates ACLE implemented | 101 | +| [`__ARM_ACLE`](#testing-for-arm-c-language-extensions) | Indicates ACLE implemented | 1 | | [`__ARM_ALIGN_MAX_PWR`](#alignment-of-static-objects) | Log of maximum alignment of static object | 20 | | [`__ARM_ALIGN_MAX_STACK_PWR`](#alignment-of-stack-objects) | Log of maximum alignment of stack object | 3 | | [`__ARM_ARCH`](#arm-architecture-level) | Arm architecture level | 7 | @@ -2998,14 +2974,10 @@ following: versioning mechanism described in this section is supported by the compiler and it is enabled. -`__FUNCTION_MULTI_VERSIONING_SUPPORT_LEVEL` is defined to the currently supported -version of the ACLE. The value and the format are the same as the `__ARM_ACLE`. - -For example, it can be implemented as: - -``` c -#define __FUNCTION_MULTI_VERSIONING_SUPPORT_LEVEL __ARM_ACLE_VERSION(2024, 3, 0) -``` +`__FUNCTION_MULTI_VERSIONING_SUPPORT_LEVEL` is defined to the Function +Multi Versioning support level implemented by the compiler. The value +corresponds to the support levels listed in +[Function Multi Versioning feature availability](#function-multi-versioning-feature-availability). ### Target version strings @@ -3130,6 +3102,73 @@ The following table lists the architectures feature mapping for AArch64. The tables are sorted by priority, starting from features of lowest priority ending with features of highest priority. +### Function Multi Versioning feature availability + +The following table lists the Function Multi Versioning support level at +which each target version name became available. + +A Function Multi Versioning target version name is supported when +`__HAVE_FUNCTION_MULTI_VERSIONING` is defined to `1` and +`__FUNCTION_MULTI_VERSIONING_SUPPORT_LEVEL` is greater than or equal to +the support level listed for that name. + +Each new set of Function Multi Versioning target version names added +is assigned a new support level. The new support level is one greater +than the greatest support level already listed. All target version names +added in the same set use the same support level. + + | **Name** | **Available from support level** | + | ------------- | -------------------------------- | + | default | 202210 | + | sha1 | 202210 | + | aes | 202210 | + | vmull | 202210 | + | rng | 202210 | + | flagm | 202210 | + | flagm2 | 202210 | + | lse | 202210 | + | dotprod | 202210 | + | rdm | 202210 | + | fp16 | 202210 | + | dit | 202210 | + | dpb | 202210 | + | dpb2 | 202210 | + | jscvt | 202210 | + | fcma | 202210 | + | frintts | 202210 | + | sve | 202210 | + | sve2 | 202210 | + | sme | 202210 | + | sb | 202210 | + | ssbs | 202210 | + | bti | 202210 | + | crc | 202240 | + | sha2 | 202240 | + | fp | 202240 | + | simd | 202240 | + | sm4 | 202240 | + | sha3 | 202240 | + | fp16fml | 202240 | + | rcpc | 202240 | + | rcpc2 | 202240 | + | i8mm | 202240 | + | bf16 | 202240 | + | f32mm | 202240 | + | f64mm | 202240 | + | sve2-aes | 202240 | + | sve2-bitperm | 202240 | + | sve2-sha3 | 202240 | + | sve2-sm4 | 202240 | + | memtag | 202240 | + | wfxt | 202240 | + | sme2 | 202240 | + | rcpc3 | 202320 | + | sme-f64f64 | 202320 | + | sme-i16i64 | 202320 | + | rdma | 202410 | + | mops | 202410 | + | cssc | 202520 | + ### Dependencies If a feature depends on another feature as defined by the following table then: