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: