-
Notifications
You must be signed in to change notification settings - Fork 66
Add intrinsic support for the SVE multi-vector Advanced Encryption Standard (AES) instructions #411
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 4 commits
e8fb4e7
4505e29
9612674
1a26687
3909c74
91e71c0
cc7d01c
e294d8f
e9d11c2
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 |
|---|---|---|
|
|
@@ -465,6 +465,8 @@ Armv8.4-A [[ARMARMv84]](#ARMARMv84). Support is added for the Dot Product intrin | |
|
|
||
| * Added feature test macro for FEAT_SSVE_FEXPA. | ||
| * Added feature test macro for FEAT_CSSC. | ||
| * Added [**Alpha**](#current-status-and-anticipated-changes) support | ||
| for FEAT_SVE_AES2, FEAT_SSVE_AES intrinsics. | ||
|
|
||
| ### References | ||
|
|
||
|
|
@@ -2147,6 +2149,18 @@ support for the SVE2 AES (FEAT_SVE_AES) instructions and if the associated | |
| ACLE intrinsics are available. This implies that `__ARM_FEATURE_AES` | ||
| and `__ARM_FEATURE_SVE2` are both nonzero. | ||
|
|
||
| In addition, `__ARM_FEATURE_SVE2_AES2` is defined to `1` if there is hardware | ||
amilendra marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| support for the SVE2 AES2 (FEAT_SVE_AES2) instructions and if the associated | ||
|
||
| ACLE intrinsics are available. | ||
|
|
||
| `__ARM_FEATURE_SSVE_AES` is defined to 1 if there is hardware support for | ||
| SVE2 AES2 (FEAT_SVE_AES2) instructions in Streaming SVE mode (FEAT_SSVE_AES) | ||
| and if the associated ACLE intrinsics are available. | ||
|
|
||
| The specification for SVE2 AES2 (FEAT_SVE_AES2, FEAT_SSVE_AES) instructions is in | ||
| [**Alpha** state](#current-status-and-anticipated-changes) and might change or be | ||
| extended in the future. | ||
|
|
||
| #### SHA2 extension | ||
|
|
||
| `__ARM_FEATURE_SHA2` is defined to 1 if the SHA1 & SHA2-256 Crypto | ||
|
|
@@ -2642,6 +2656,8 @@ be found in [[BA]](#BA). | |
| | [`__ARM_FEATURE_SVE_VECTOR_OPERATORS`](#scalable-vector-extension-sve) | Level of support for C and C++ operators on SVE predicate types | 1 | | ||
| | [`__ARM_FEATURE_SVE2`](#sve2) | SVE version 2 (FEAT_SVE2) | 1 | | ||
| | [`__ARM_FEATURE_SVE2_AES`](#aes-extension) | SVE2 support for the AES cryptographic extension (FEAT_SVE_AES) | 1 | | ||
| | [`__ARM_FEATURE_SVE2_AES2`](#aes-extension) | SVE2 support for the multi-vector AES cryptographic and 128-bit polynomial multiply long extension (FEAT_SVE_AES2) | 1 | | ||
| | [`__ARM_FEATURE_SSVE_AES`](#aes-extension) | SVE2 support for the multi-vector AES cryptographic and 128-bit polynomial multiply long extension (FEAT_SSVE_AES) | 1 | | ||
| | [`__ARM_FEATURE_SVE2_BITPERM`](#bit-permute-extension) | SVE2 bit permute extension | 1 | | ||
| | [`__ARM_FEATURE_SSVE_BITPERM`](#bit-permute-extension) | SVE2 bit permute extension | 1 | | ||
| | [`__ARM_FEATURE_SSVE_FEXPA`](#streaming-sve-fexpa-extension) | Streaming SVE FEXPA extension | 1 | | ||
|
|
@@ -9712,6 +9728,42 @@ Lookup table read with 4-bit indices. | |
| svint16_t svluti4_lane[_s16_x2](svint16x2_t table, svuint8_t indices, uint64_t imm_idx); | ||
| ``` | ||
|
|
||
| ### SVE2 Multi-vector AES and 128-bit polynomial multiply long instructions | ||
|
|
||
| The specification for SVE2 Multi-vector AES and 128-bit polynomial multiply long instructions is in | ||
| [**Alpha** state](#current-status-and-anticipated-changes) and might change or be | ||
| extended in the future. | ||
|
|
||
| #### AESE, AESD, AESEMC, AESDIMC | ||
|
|
||
| Multi-vector Advanced Encryption Standard instructions | ||
|
|
||
| ```c | ||
| // Only if __ARM_FEATURE_SVE2_AES2 != 0 or __ARM_FEATURE_SSVE_AES != 0 | ||
amilendra marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
|
||
| svuint8x2_t svaese[_u8_x2] (svuint8x2_t op1, svuint64_t op2, uint64_t index); | ||
amilendra marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| svuint8x4_t svaese[_u8_x4] (svuint8x4_t op1, svuint64_t op2, uint64_t index); | ||
| svuint8x2_t svaesd[_u8_x2] (svuint8x2_t op1, svuint64_t op2, uint64_t index); | ||
| svuint8x4_t svaesd[_u8_x4] (svuint8x4_t op1, svuint64_t op2, uint64_t index); | ||
| svuint8x2_t svaesemc[_u8_x2] (svuint8x2_t op1, svuint64_t op2, uint64_t index); | ||
| svuint8x4_t svaesemc[_u8_x4] (svuint8x4_t op1, svuint64_t op2, uint64_t index); | ||
| svuint8x2_t svaesdimc[_u8_x2] (svuint8x2_t op1, svuint64_t op2, uint64_t index); | ||
| svuint8x4_t svaesdimc[_u8_x4] (svuint8x4_t op1, svuint64_t op2, uint64_t index); | ||
| ``` | ||
|
|
||
| #### PMULL, PMLAL | ||
|
|
||
| Multi-vector 128-bit polynomial multiply long instructions | ||
|
|
||
| ``` c | ||
| // Only if __ARM_FEATURE_SVE2_AES2 != 0 or __ARM_FEATURE_SSVE_AES != 0 | ||
|
|
||
| // Variants are also available for: | ||
| // _s64x2, _f64x2 | ||
| svuint64x2_t svpmull[_u64x2](svuint64_t zn, svuint64_t zm); | ||
|
||
| svuint64x2_t svpmlal[_u64x2](svuint64x2_t zda, svuint64_t zn, svuint64_t zm); | ||
| ``` | ||
|
|
||
| # SME language extensions and intrinsics | ||
|
|
||
| The specification for SME is in | ||
|
|
||
Uh oh!
There was an error while loading. Please reload this page.