Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 53 additions & 0 deletions main/acle.md
Original file line number Diff line number Diff line change
Expand Up @@ -481,6 +481,8 @@ Armv8.4-A [[ARMARMv84]](#ARMARMv84). Support is added for the Dot Product intrin
support for SVE2.2 (FEAT_SVE2p2)
* Added [**Alpha**](#current-status-and-anticipated-changes)
support for SME2.2 (FEAT_SME2p2).
* Added [**Alpha**](#current-status-and-anticipated-changes) support
for FEAT_SVE_AES2, FEAT_SSVE_AES intrinsics.

### References

Expand Down Expand Up @@ -2174,6 +2176,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_SVE_AES2` is defined to `1` if there is hardware
support for the SVE 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
SVE AES2 (FEAT_SVE_AES2) instructions in Streaming SVE mode (FEAT_SSVE_AES)
and if the associated ACLE intrinsics are available.

The specification for SVE 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
Expand Down Expand Up @@ -2693,6 +2707,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_SVE_AES2`](#aes-extension) | SVE support for the multi-vector AES cryptographic and 128-bit polynomial multiply long extension (FEAT_SVE_AES2) | 1 |
| [`__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 |
| [`__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 |
Expand Down Expand Up @@ -9899,6 +9915,43 @@ 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_SVE_AES2 != 0

svuint8x2_t svaese_lane[_u8_x2] (svuint8x2_t zdn, svuint8_t zm, uint64_t index);
svuint8x4_t svaese_lane[_u8_x4] (svuint8x4_t zdn, svuint8_t zm, uint64_t index);
svuint8x2_t svaesd_lane[_u8_x2] (svuint8x2_t zdn, svuint8_t zm, uint64_t index);
svuint8x4_t svaesd_lane[_u8_x4] (svuint8x4_t zdn, svuint8_t zm, uint64_t index);
svuint8x2_t svaesemc_lane[_u8_x2] (svuint8x2_t zdn, svuint8_t zm, uint64_t index);
svuint8x4_t svaesemc_lane[_u8_x4] (svuint8x4_t zdn, svuint8_t zm, uint64_t index);
svuint8x2_t svaesdimc_lane[_u8_x2] (svuint8x2_t zdn, svuint8_t zm, uint64_t index);
svuint8x4_t svaesdimc_lane[_u8_x4] (svuint8x4_t zdn, svuint8_t zm, uint64_t index);
```

#### PMULL, PMLAL

Multi-vector 128-bit polynomial multiply long instructions.

``` c
// Only if __ARM_FEATURE_SVE_AES2 != 0

svuint64x2_t svpmull_pair[_u64_x2](svuint64_t zn, svuint64_t zm);
svuint64x2_t svpmull_pair[_n_u64_x2](svuint64_t zn, uint64_t zm);

svuint64x2_t svpmlal_pair[_u64_x2](svuint64x2_t zda, svuint64_t zn, svuint64_t zm);
svuint64x2_t svpmlal_pair[_n_u64_x2](svuint64x2_t zda, svuint64_t zn, uint64_t zm);
```

# SME language extensions and intrinsics

The specification for SME is in
Expand Down