-
Notifications
You must be signed in to change notification settings - Fork 74
[FMV] Add support-level table and remove __ARM_ACLE_VERSION #441
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
CarolineConcatto
wants to merge
1
commit into
ARM-software:main
Choose a base branch
from
CarolineConcatto:deprecate_release
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -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. | ||
|
Comment on lines
+3115
to
+3118
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Perhaps worth being explicit and stating a support level includes all the features of earlier support levels unless specifically documented otherwise. |
||
|
|
||
| | **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: | ||
|
|
||
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For all macros that we are keeping we need to maintain their original value. From the new specification's point of view we just want to say __ARM_ACLE is defined when an implementation supports the ACLE, we just no longer say what it is defined to.
Existing implementation will maintain their current value in order to not break existing code. New implementation can choose whether they care about legacy code or not.