Skip to content

[API Proposal]: Arm64: FEAT_SVE_AES #94423

Description

@a74nh

FEAT_SVE_AES provides SVE versions of the Cryptographic Extension instructions provided by FEAT_AES.

APIs already exist for FEAT_AES - see Aes.cs. The SVE instructions match in functionality.

namespace System.Runtime.Intrinsics.Arm

/// VectorT Summary
public abstract class SveAes : AdvSimd /// Feature: FEAT_SVE_AES
{

  public static unsafe Vector<byte> InverseMixColumns(Vector<byte> value); // AESIMC

  public static unsafe Vector<byte> MixColumns(Vector<byte> value); // AESMC

  public static unsafe Vector<byte> Decrypt(Vector<byte> left, Vector<byte> right); // AESD

  public static unsafe Vector<byte> Encrypt(Vector<byte> left, Vector<byte> right); // AESE

  public static unsafe Vector<ulong> PolynomialMultiplyWideningLower(Vector<ulong> left, Vector<ulong> right); // PMULLB

  public static unsafe Vector<ulong> PolynomialMultiplyWideningUpper(Vector<ulong> left, Vector<ulong> right); // PMULLT
}
  /// total method signatures: 6
  /// Optional Entries:
public abstract class SveAes : AdvSimd /// Feature: FEAT_SVE_AES
{
  public static unsafe Vector<ulong> PolynomialMultiplyWideningLower(Vector<ulong> left, ulong right); // PMULLB

  public static unsafe Vector<ulong> PolynomialMultiplyWideningUpper(Vector<ulong> left, ulong right); // PMULLT

  /// total optional method signatures: 2

}
/// Full API
public abstract class SveAes : AdvSimd /// Feature: FEAT_SVE_AES
{
    /// AesInverseMixColumns : AES inverse mix columns

    /// svuint8_t svaesimc[_u8](svuint8_t op) : "AESIMC Ztied.B, Ztied.B"
  public static unsafe Vector<byte> InverseMixColumns(Vector<byte> value);


    /// AesMixColumns : AES mix columns

    /// svuint8_t svaesmc[_u8](svuint8_t op) : "AESMC Ztied.B, Ztied.B"
  public static unsafe Vector<byte> MixColumns(Vector<byte> value);


    /// AesSingleRoundDecryption : AES single round decryption

    /// svuint8_t svaesd[_u8](svuint8_t op1, svuint8_t op2) : "AESD Ztied1.B, Ztied1.B, Zop2.B" or "AESD Ztied2.B, Ztied2.B, Zop1.B"
  public static unsafe Vector<byte> Decrypt(Vector<byte> left, Vector<byte> right);


    /// AesSingleRoundEncryption : AES single round encryption

    /// svuint8_t svaese[_u8](svuint8_t op1, svuint8_t op2) : "AESE Ztied1.B, Ztied1.B, Zop2.B" or "AESE Ztied2.B, Ztied2.B, Zop1.B"
  public static unsafe Vector<byte> Encrypt(Vector<byte> left, Vector<byte> right);


    /// PolynomialMultiplyWideningLower : Polynomial multiply long (bottom)

    /// svuint64_t svpmullb_pair[_u64](svuint64_t op1, svuint64_t op2) : "PMULLB Zresult.Q, Zop1.D, Zop2.D"
  public static unsafe Vector<ulong> PolynomialMultiplyWideningLower(Vector<ulong> left, Vector<ulong> right);


    /// PolynomialMultiplyWideningUpper : Polynomial multiply long (top)

    /// svuint64_t svpmullt_pair[_u64](svuint64_t op1, svuint64_t op2) : "PMULLT Zresult.Q, Zop1.D, Zop2.D"
  public static unsafe Vector<ulong> PolynomialMultiplyWideningUpper(Vector<ulong> left, Vector<ulong> right);


  /// total method signatures: 6
  /// total method names:      6
}

  /// Optional Entries:
  ///   public static unsafe Vector<ulong> PolynomialMultiplyWideningLower(Vector<ulong> left, ulong right); // svpmullb_pair[_n_u64]
  ///   public static unsafe Vector<ulong> PolynomialMultiplyWideningUpper(Vector<ulong> left, ulong right); // svpmullt_pair[_n_u64]
  ///   Total Maybe: 2

  /// Total ACLE covered across API:      8

Metadata

Metadata

Assignees

No one assigned

    Labels

    api-approvedAPI was approved in API review, it can be implementedarch-arm64area-System.Runtime.Intrinsicsarm-sveWork related to arm64 SVE/SVE2 supportin-prThere is an active PR which will close this issue when it is merged

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions