-
Notifications
You must be signed in to change notification settings - Fork 77
[FMV] Add support for more features #444
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
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -3102,6 +3102,31 @@ The following table lists the architectures feature mapping for AArch64. | |
| | `FEAT_SME2` | sme2 | ```ID_AA64PFR1_EL1.SMEver >= 0b0001``` | | ||
| | `FEAT_MOPS` | mops | ```ID_AA64ISAR2_EL1.MOPS >= 0b0001``` | | ||
| | `FEAT_CSSC` | cssc | ```ID_AA64ISAR2_EL1.CSSC >= 0b0001``` | | ||
| | `FEAT_FP8` | fp8 | ```ID_AA64FPFR0_EL1.F8CVT == 0b1``` | | ||
| | `FEAT_F8F32MM` | f8f32mm | ```ID_AA64FPFR0_EL1.F8MM8 == 0b1``` | | ||
| | `FEAT_FP8DOT4` | fp8dot4 | ```ID_AA64FPFR0_EL1.F8DP4 == 0b1``` | | ||
| | `FEAT_FP8FMA` | fp8fma | ```ID_AA64FPFR0_EL1.F8FMA == 0b1``` | | ||
| | `FEAT_SME_F8F32` | sme-f8f32 | ```ID_AA64SMFR0_EL1.F8F32 == 0b1``` | | ||
| | `FEAT_SSVE_FP8DOT4` | ssve-fp8dot4 | ```ID_AA64SMFR0_EL1.SF8DP4 == 0b1``` | | ||
| | `FEAT_SSVE_FP8FMA` | ssve-fp8fma | ```ID_AA64SMFR0_EL1.SF8FMA == 0b1``` | | ||
| | `FEAT_SSVE_BitPerm` | ssve-bitperm | ```ID_AA64SMFR0_EL1.SBitPerm == 0b1``` | | ||
| | `FEAT_LUT` | lut | ```ID_AA64ISAR2_EL1.LUT >= 0b0001``` | | ||
| | `FEAT_FAMINMAX` | faminmax | ```ID_AA64ISAR3_EL1.FAMINMAX >= 0b0001``` | | ||
| | `FEAT_SME_LUTv2` | sme-lutv2 | ```ID_AA64SMFR0_EL1.LUTv2 == 0b1``` | | ||
| | `FEAT_SME2p1` | sme2p1 | ```ID_AA64PFR1_EL1.SME >= 0b0001 && ID_AA64SMFR0_EL1.SMEver >= 0b0010```| | ||
| | `FEAT_SME2p2` | sme2p2 | ```ID_AA64PFR1_EL1.SME >= 0b0001 && ID_AA64SMFR0_EL1.SMEver >= 0b0011```| | ||
| | `FEAT_SVE2p1` | sve2p1 | ```ID_AA64PFR0_EL1.SVE >= 0b0001 && ID_AA64ZFR0_EL1.SVEver >= 0b0010```| | ||
| | `FEAT_SVE2p2` | sve2p2 | ```ID_AA64PFR0_EL1.SVE >= 0b0001 && ID_AA64ZFR0_EL1.SVEver >= 0b0011```| | ||
| | `FEAT_SME_F16F16` | sme-f16f16 | ```ID_AA64SMFR0_EL1.F16F16 == 0b1``` | | ||
| | `FEAT_GCS` | gcs | ```ID_AA64PFR1_EL1.GCS >= 0b0001``` | | ||
| | `FEAT_D128` | d128 | ```ID_AA64MMFR3_EL1.D128 >= 0b0001``` | | ||
| | `FEAT_FP8DOT2` | fp8dot2 | ```ID_AA64FPFR0_EL1.F8DP2 == 0b1``` | | ||
|
Contributor
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. Do you mind moving this close to FEAT_FP8DOT4 |
||
| | `FEAT_SME_F8F16` | sme-f8f16 | ```ID_AA64SMFR0_EL1.F8F16 == 0b1``` | | ||
| | `FEAT_F8F16MM` | f8f16mm | ```ID_AA64FPFR0_EL1.F8MM4 == 0b1``` | | ||
| | `FEAT_SVE_AES2` | sve-aes2 | ```ID_AA64ZFR0_EL1.AES >= 0b0011``` | | ||
| | `FEAT_SVE_BFSCALE` | sve-bfscale | ```ID_AA64ZFR0_EL1.B16B16 >= 0b0010``` | | ||
| | `FEAT_SVE_F16F32MM` | sve-f16f32mm | ```ID_AA64ZFR0_EL1.F16MM >= 0b0001``` | | ||
| | `FEAT_SME_MOP4` | sme-mop4 | ```ID_AA64SMFR0_EL1.SMOP4 == 0b1``` | | ||
|
|
||
| The tables are sorted by priority, starting from features of lowest priority ending with features of highest priority. | ||
|
|
||
|
|
@@ -3169,6 +3194,31 @@ unless otherwise specified. | |
| | rdma | **202410** | | ||
| | mops | 202410 | | ||
| | cssc | **202520** | | ||
| | fp8 | **202690** | | ||
| | f8f32mm | 202690 | | ||
| | fp8dot4 | 202690 | | ||
| | fp8fma | 202690 | | ||
| | sme-f8f32 | 202690 | | ||
| | ssve-fp8dot4 | 202690 | | ||
| | ssve-fp8fma | 202690 | | ||
| | ssve-bitperm | 202690 | | ||
| | lut | 202690 | | ||
| | faminmax | 202690 | | ||
| | sme-lutv2 | 202690 | | ||
| | sme2p1 | 202690 | | ||
| | sme2p2 | 202690 | | ||
| | sve2p1 | 202690 | | ||
| | sve2p2 | 202690 | | ||
| | sme-f16f16 | 202690 | | ||
| | gcs | 202690 | | ||
| | d128 | 202690 | | ||
| | fp8dot2 | 202690 | | ||
| | sme-f8f16 | 202690 | | ||
| | f8f16mm | 202690 | | ||
| | sve-aes2 | 202690 | | ||
| | sve-bfscale | 202690 | | ||
| | sve-f16f32mm | 202690 | | ||
| | sme-mop4 | 202690 | | ||
|
|
||
| ### Dependencies | ||
|
|
||
|
|
@@ -3214,6 +3264,28 @@ The following table lists the feature dependencies for AArch64. | |
| | sme-f64f64 | sme | | ||
| | sme-i16i64 | sme | | ||
| | sme2 | sme | | ||
| | fp8 | simd | | ||
| | f8f32mm | simd, fp8 | | ||
| | fp8dot4 | fp8 | | ||
| | fp8fma | fp8 | | ||
| | sme-f8f32 | sme2, fp8 | | ||
| | ssve-fp8dot4 | sme2, fp8 | | ||
|
Contributor
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. Why do new need the ssve- features? I would imagine we could still have them generated with +sme2 and the sve feature. Am I missing something?
Contributor
Author
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. Sure we could them generated like that, but that is only true for cores which have both non-ssve and ssve feature. If core supports only ssve variant that function version wouldn't be emitted. |
||
| | ssve-fp8fma | sme2, fp8 | | ||
| | ssve-bitperm | sme2 | | ||
|
Contributor
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. Should this be sme2,sve-bitperm
Contributor
Author
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. We don't have sve-bitperm feature in FMV. We have sve2-bitperm, which enables both sve2 and sve-bitperm feature and is not a dependency of ssve-bitperm. |
||
| | lut | simd | | ||
| | faminmax | simd | | ||
| | sme-lutv2 | sme2 | | ||
| | sme2p1 | sme2 | | ||
| | sme2p2 | sme2p1 | | ||
| | sve2p1 | sve2 | | ||
| | sve2p2 | sve2p1 | | ||
|
Contributor
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. Not a bug, but I do wonder As sve2p2 requires armv9.5 is it worth (for FMV) implying everything thing that armv9.5 implies? That is not something we do for architecture options but it feels like there may be more to loose with FMV as it is more likely to be enabled via
Contributor
Author
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. My main concern with this is that we can have situations where features added as optional from certain version will be moved and added as optional from earlier architecture versions in later releases. |
||
| | sme-f16f16 | sme2 | | ||
| | d128 | lse | | ||
|
Contributor
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. Should this be lse128?
Contributor
Author
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. We don't have lse128 feature in FMV as we internally agreed to add features which introduce new builtins and intrinsics. So I went for indirect dependency here as lse128 requires lse. |
||
| | fp8dot2 | fp8 | | ||
| | sme-f8f16 | sme2, fp8 | | ||
| | f8f16mm | simd, fp8 | | ||
| | sve-f16f32mm | sve | | ||
| | sme-mop4 | sme2 | | ||
|
|
||
| ### Selection | ||
|
|
||
|
|
||
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.
I've noticed that for FP8 the reference informs other system registers, should this be checked as well?
The following fields identify the presence of FEAT_FP8:
• ID_AA64FPFR0_EL1.F8CVT. • ID_AA64FPFR0_EL1.F8E4M3. • ID_AA64FPFR0_EL1.F8E5M2.
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.
That is not necessary imo. Reading the spec for the F8CVT:
To me it means that when the value is 1 FEAT_FP8 is implemented