Skip to content

[API Proposal]: Arm64: FEAT_SVE2: gather loads #94019

Open
@a74nh

Description

@a74nh
namespace System.Runtime.Intrinsics.Arm;

/// VectorT Summary
public abstract partial class Sve2 : AdvSimd /// Feature: FEAT_SVE2  Category: gatherloads
{

  /// T: [int, uint], [uint, uint], [long, ulong], [ulong, ulong]
  public static unsafe Vector<T> GatherVectorByteZeroExtendNonTemporal(Vector<T> mask, Vector<T2> addresses); // LDNT1B

  /// T: [int, uint], [uint, uint], [long, long], [ulong, long], [long, ulong], [ulong, ulong]
  public static unsafe Vector<T> GatherVectorByteZeroExtendNonTemporal(Vector<T> mask, byte* address, Vector<T2> offsets); // LDNT1B

  /// T: [int, uint], [uint, uint], [long, ulong], [ulong, ulong]
  public static unsafe Vector<T> GatherVectorInt16SignExtendNonTemporal(Vector<T> mask, Vector<T2> addresses); // LDNT1SH

  /// T: [long, long], [ulong, long], [long, ulong], [ulong, ulong]
  public static unsafe Vector<T> GatherVectorInt16SignExtendNonTemporal(Vector<T> mask, short* address, Vector<T2> indices); // LDNT1SH

  /// T: [int, uint], [uint, uint], [long, long], [ulong, long], [long, ulong], [ulong, ulong]
  public static unsafe Vector<T> GatherVectorInt16WithByteOffsetsSignExtendNonTemporal(Vector<T> mask, short* address, Vector<T2> offsets); // LDNT1SH

  /// T: [long, ulong], [int, uint], [ulong, ulong], [uint, uint]
  public static unsafe Vector<T> GatherVectorInt32SignExtendNonTemporal(Vector<T> mask, Vector<T2> addresses); // LDNT1SW

  /// T: [long, long], [int, int], [ulong, long], [uint, int], [long, ulong], [int, uint], [ulong, ulong], [uint, uint]
  public static unsafe Vector<T> GatherVectorInt32SignExtendNonTemporal(Vector<T> mask, int* address, Vector<T2> indices); // LDNT1SW

  /// T: [long, long], [int, int], [ulong, long], [uint, int], [long, ulong], [int, uint], [ulong, ulong], [uint, uint]
  public static unsafe Vector<T> GatherVectorInt32WithByteOffsetsSignExtendNonTemporal(Vector<T> mask, int* address, Vector<T2> offsets); // LDNT1SW

  /// T: [float, uint], [int, uint], [double, ulong], [long, ulong]
  public static unsafe Vector<T> GatherVectorNonTemporal(Vector<T> mask, Vector<T2> addresses); // LDNT1W or LDNT1D

  /// T: uint, ulong
  public static unsafe Vector<T> GatherVectorNonTemporal(Vector<T> mask, Vector<T> addresses); // LDNT1W or LDNT1D

  /// T: [float, uint], [int, uint], [double, long], [ulong, long], [double, ulong], [long, ulong]
  public static unsafe Vector<T> GatherVectorNonTemporal(Vector<T> mask, T* address, Vector<T2> offsets); // LDNT1W or LDNT1D

  /// T: uint, long, ulong
  public static unsafe Vector<T> GatherVectorNonTemporal(Vector<T> mask, T* address, Vector<T> offsets); // LDNT1W or LDNT1D

  /// T: [double, long], [ulong, long], [double, ulong], [long, ulong]
  public static unsafe Vector<T> GatherVectorNonTemporal(Vector<T> mask, T* address, Vector<T2> indices); // LDNT1D

  /// T: long, ulong
  public static unsafe Vector<T> GatherVectorNonTemporal(Vector<T> mask, T* address, Vector<T> indices); // LDNT1D

  /// T: [int, uint], [uint, uint], [long, ulong], [ulong, ulong]
  public static unsafe Vector<T> GatherVectorSByteSignExtendNonTemporal(Vector<T> mask, Vector<T2> addresses); // LDNT1SB

  /// T: [int, uint], [uint, uint], [long, long], [ulong, long], [long, ulong], [ulong, ulong]
  public static unsafe Vector<T> GatherVectorSByteSignExtendNonTemporal(Vector<T> mask, sbyte* address, Vector<T2> offsets); // LDNT1SB

  /// T: [int, uint], [uint, uint], [long, long], [ulong, long], [long, ulong], [ulong, ulong]
  public static unsafe Vector<T> GatherVectorUInt16WithByteOffsetsZeroExtendNonTemporal(Vector<T> mask, ushort* address, Vector<T2> offsets); // LDNT1H

  /// T: [int, uint], [uint, uint], [long, ulong], [ulong, ulong]
  public static unsafe Vector<T> GatherVectorUInt16ZeroExtendNonTemporal(Vector<T> mask, Vector<T2> addresses); // LDNT1H

  /// T: [long, long], [ulong, long], [long, ulong], [ulong, ulong]
  public static unsafe Vector<T> GatherVectorUInt16ZeroExtendNonTemporal(Vector<T> mask, ushort* address, Vector<T2> indices); // LDNT1H

  /// T: [long, long], [int, int], [ulong, long], [uint, int], [long, ulong], [int, uint], [ulong, ulong], [uint, uint]
  public static unsafe Vector<T> GatherVectorUInt32WithByteOffsetsZeroExtendNonTemporal(Vector<T> mask, uint* address, Vector<T2> offsets); // LDNT1W

  /// T: [long, ulong], [int, uint], [ulong, ulong], [uint, uint]
  public static unsafe Vector<T> GatherVectorUInt32ZeroExtendNonTemporal(Vector<T> mask, Vector<T2> addresses); // LDNT1W

  /// T: [long, long], [int, int], [ulong, long], [uint, int], [long, ulong], [int, uint], [ulong, ulong], [uint, uint]
  public static unsafe Vector<T> GatherVectorUInt32ZeroExtendNonTemporal(Vector<T> mask, uint* address, Vector<T2> indices); // LDNT1W

  /// total method signatures: 22

}

Metadata

Metadata

Assignees

No one assigned

    Labels

    api-ready-for-reviewAPI is ready for review, it is NOT ready for implementationapi-suggestionEarly API idea and discussion, it is NOT ready for implementationarch-arm64area-System.Runtime.Intrinsicsarm-sveWork related to arm64 SVE/SVE2 support

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions