Skip to content

Commit 422fee6

Browse files
authored
Add intrinsic support for the SVE multi-vector Advanced Encryption Standard (AES) instructions (#411)
1 parent f8cb3ec commit 422fee6

1 file changed

Lines changed: 53 additions & 0 deletions

File tree

main/acle.md

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -481,6 +481,8 @@ Armv8.4-A [[ARMARMv84]](#ARMARMv84). Support is added for the Dot Product intrin
481481
support for SVE2.2 (FEAT_SVE2p2)
482482
* Added [**Alpha**](#current-status-and-anticipated-changes)
483483
support for SME2.2 (FEAT_SME2p2).
484+
* Added [**Alpha**](#current-status-and-anticipated-changes) support
485+
for FEAT_SVE_AES2, FEAT_SSVE_AES intrinsics.
484486

485487
### References
486488

@@ -2174,6 +2176,18 @@ support for the SVE2 AES (FEAT_SVE_AES) instructions and if the associated
21742176
ACLE intrinsics are available. This implies that `__ARM_FEATURE_AES`
21752177
and `__ARM_FEATURE_SVE2` are both nonzero.
21762178

2179+
In addition, `__ARM_FEATURE_SVE_AES2` is defined to `1` if there is hardware
2180+
support for the SVE AES2 (FEAT_SVE_AES2) instructions and if the associated
2181+
ACLE intrinsics are available.
2182+
2183+
`__ARM_FEATURE_SSVE_AES` is defined to 1 if there is hardware support for
2184+
SVE AES2 (FEAT_SVE_AES2) instructions in Streaming SVE mode (FEAT_SSVE_AES)
2185+
and if the associated ACLE intrinsics are available.
2186+
2187+
The specification for SVE AES2 (FEAT_SVE_AES2, FEAT_SSVE_AES) instructions is in
2188+
[**Alpha** state](#current-status-and-anticipated-changes) and might change or be
2189+
extended in the future.
2190+
21772191
#### SHA2 extension
21782192

21792193
`__ARM_FEATURE_SHA2` is defined to 1 if the SHA1 & SHA2-256 Crypto
@@ -2693,6 +2707,8 @@ be found in [[BA]](#BA).
26932707
| [`__ARM_FEATURE_SVE_VECTOR_OPERATORS`](#scalable-vector-extension-sve) | Level of support for C and C++ operators on SVE predicate types | 1 |
26942708
| [`__ARM_FEATURE_SVE2`](#sve2) | SVE version 2 (FEAT_SVE2) | 1 |
26952709
| [`__ARM_FEATURE_SVE2_AES`](#aes-extension) | SVE2 support for the AES cryptographic extension (FEAT_SVE_AES) | 1 |
2710+
| [`__ARM_FEATURE_SVE_AES2`](#aes-extension) | SVE support for the multi-vector AES cryptographic and 128-bit polynomial multiply long extension (FEAT_SVE_AES2) | 1 |
2711+
| [`__ARM_FEATURE_SSVE_AES`](#aes-extension) | Streaming SVE support for the multi-vector AES cryptographic and 128-bit polynomial multiply long extension (FEAT_SSVE_AES) | 1 |
26962712
| [`__ARM_FEATURE_SVE2_BITPERM`](#bit-permute-extension) | SVE2 bit permute extension | 1 |
26972713
| [`__ARM_FEATURE_SSVE_BITPERM`](#bit-permute-extension) | SVE2 bit permute extension | 1 |
26982714
| [`__ARM_FEATURE_SSVE_FEXPA`](#streaming-sve-fexpa-extension) | Streaming SVE FEXPA extension | 1 |
@@ -9899,6 +9915,43 @@ Lookup table read with 4-bit indices.
98999915
svint16_t svluti4_lane[_s16_x2](svint16x2_t table, svuint8_t indices, uint64_t imm_idx);
99009916
```
99019917

9918+
### SVE2 Multi-vector AES and 128-bit polynomial multiply long instructions
9919+
9920+
The specification for SVE2 Multi-vector AES and 128-bit polynomial multiply long instructions is in
9921+
[**Alpha** state](#current-status-and-anticipated-changes) and might change or be
9922+
extended in the future.
9923+
9924+
#### AESE, AESD, AESEMC, AESDIMC
9925+
9926+
Multi-vector Advanced Encryption Standard instructions.
9927+
9928+
```c
9929+
// Only if __ARM_FEATURE_SVE_AES2 != 0
9930+
9931+
svuint8x2_t svaese_lane[_u8_x2] (svuint8x2_t zdn, svuint8_t zm, uint64_t index);
9932+
svuint8x4_t svaese_lane[_u8_x4] (svuint8x4_t zdn, svuint8_t zm, uint64_t index);
9933+
svuint8x2_t svaesd_lane[_u8_x2] (svuint8x2_t zdn, svuint8_t zm, uint64_t index);
9934+
svuint8x4_t svaesd_lane[_u8_x4] (svuint8x4_t zdn, svuint8_t zm, uint64_t index);
9935+
svuint8x2_t svaesemc_lane[_u8_x2] (svuint8x2_t zdn, svuint8_t zm, uint64_t index);
9936+
svuint8x4_t svaesemc_lane[_u8_x4] (svuint8x4_t zdn, svuint8_t zm, uint64_t index);
9937+
svuint8x2_t svaesdimc_lane[_u8_x2] (svuint8x2_t zdn, svuint8_t zm, uint64_t index);
9938+
svuint8x4_t svaesdimc_lane[_u8_x4] (svuint8x4_t zdn, svuint8_t zm, uint64_t index);
9939+
```
9940+
9941+
#### PMULL, PMLAL
9942+
9943+
Multi-vector 128-bit polynomial multiply long instructions.
9944+
9945+
``` c
9946+
// Only if __ARM_FEATURE_SVE_AES2 != 0
9947+
9948+
svuint64x2_t svpmull_pair[_u64_x2](svuint64_t zn, svuint64_t zm);
9949+
svuint64x2_t svpmull_pair[_n_u64_x2](svuint64_t zn, uint64_t zm);
9950+
9951+
svuint64x2_t svpmlal_pair[_u64_x2](svuint64x2_t zda, svuint64_t zn, svuint64_t zm);
9952+
svuint64x2_t svpmlal_pair[_n_u64_x2](svuint64x2_t zda, svuint64_t zn, uint64_t zm);
9953+
```
9954+
99029955
# SME language extensions and intrinsics
99039956

99049957
The specification for SME is in

0 commit comments

Comments
 (0)