Skip to content

[API Proposal]: Arm64: FEAT_BF16 #94028

Description

@a74nh
namespace System.Runtime.Intrinsics.Arm;

/// VectorT Summary
public abstract partial class SveBf16 : AdvSimd /// Feature: FEAT_BF16
{

  public static unsafe Vector<float> Bfloat16DotProduct(Vector<float> addend, Vector<bfloat16> left, Vector<bfloat16> right); // BFDOT // MOVPRFX

  public static unsafe Vector<float> Bfloat16MatrixMultiplyAccumulate(Vector<float> op1, Vector<bfloat16> op2, Vector<bfloat16> op3); // BFMMLA // MOVPRFX

  public static unsafe Vector<float> Bfloat16MultiplyAddWideningToSinglePrecisionLower(Vector<float> op1, Vector<bfloat16> op2, Vector<bfloat16> op3); // BFMLALB // MOVPRFX

  public static unsafe Vector<float> Bfloat16MultiplyAddWideningToSinglePrecisionLower(Vector<float> op1, Vector<bfloat16> op2, Vector<bfloat16> op3, ulong imm_index); // BFMLALB // MOVPRFX

  public static unsafe Vector<float> Bfloat16MultiplyAddWideningToSinglePrecisionUpper(Vector<float> op1, Vector<bfloat16> op2, Vector<bfloat16> op3); // BFMLALT // MOVPRFX

  public static unsafe Vector<float> Bfloat16MultiplyAddWideningToSinglePrecisionUpper(Vector<float> op1, Vector<bfloat16> op2, Vector<bfloat16> op3, ulong imm_index); // BFMLALT // MOVPRFX

  public static unsafe Vector<bfloat16> ConcatenateEvenInt128FromTwoInputs(Vector<bfloat16> left, Vector<bfloat16> right); // UZP1

  public static unsafe Vector<bfloat16> ConcatenateOddInt128FromTwoInputs(Vector<bfloat16> left, Vector<bfloat16> right); // UZP2

  public static unsafe Vector<bfloat16> ConditionalExtractAfterLastActiveElement(Vector<bfloat16> mask, Vector<bfloat16> defaultValue, Vector<bfloat16> data); // CLASTA // MOVPRFX

  public static unsafe bfloat16 ConditionalExtractAfterLastActiveElement(Vector<bfloat16> mask, bfloat16 defaultValues, Vector<bfloat16> data); // CLASTA // MOVPRFX

  public static unsafe Vector<bfloat16> ConditionalExtractAfterLastActiveElementAndReplicate(Vector<bfloat16> mask, Vector<bfloat16> defaultScalar, Vector<bfloat16> data); // CLASTA // MOVPRFX

  public static unsafe Vector<bfloat16> ConditionalExtractLastActiveElement(Vector<bfloat16> mask, Vector<bfloat16> defaultValue, Vector<bfloat16> data); // CLASTB // MOVPRFX

  public static unsafe bfloat16 ConditionalExtractLastActiveElement(Vector<bfloat16> mask, bfloat16 defaultValues, Vector<bfloat16> data); // CLASTB // MOVPRFX

  public static unsafe Vector<bfloat16> ConditionalExtractLastActiveElementAndReplicate(Vector<bfloat16> mask, Vector<bfloat16> fallback, Vector<bfloat16> data); // CLASTB // MOVPRFX

  public static unsafe Vector<bfloat16> ConditionalSelect(Vector<bfloat16> mask, Vector<bfloat16> left, Vector<bfloat16> right); // SEL

  public static unsafe Vector<bfloat16> ConvertToBFloat16(Vector<float> value); // BFCVT // predicated, MOVPRFX

  public static unsafe Vector<bfloat16> CreateFalseMaskBFloat16(); // PFALSE

  public static unsafe Vector<bfloat16> CreateTrueMaskBFloat16([ConstantExpected] SveMaskPattern pattern = SveMaskPattern.All); // PTRUE

  public static unsafe Vector<bfloat16> CreateWhileReadAfterWriteMask(bfloat16* left, bfloat16* right); // WHILERW

  public static unsafe Vector<bfloat16> CreateWhileWriteAfterReadMask(bfloat16* left, bfloat16* right); // WHILEWR

  public static unsafe Vector<float> DotProductBySelectedScalar(Vector<float> addend, Vector<bfloat16> left, Vector<bfloat16> right, [ConstantExpected] byte rightIndex); // BFDOT // MOVPRFX

  public static unsafe Vector<bfloat16> DownConvertNarrowingUpper(Vector<float> value); // BFCVTNT // predicated

  public static unsafe Vector<bfloat16> DuplicateSelectedScalarToVector(Vector<bfloat16> data, [ConstantExpected] byte index); // DUP or TBL

  public static unsafe bfloat16 ExtractAfterLastScalar(Vector<bfloat16> value); // LASTA // predicated

  public static unsafe Vector<bfloat16> ExtractAfterLastVector(Vector<bfloat16> value); // LASTA // predicated

  public static unsafe bfloat16 ExtractLastScalar(Vector<bfloat16> value); // LASTB // predicated

  public static unsafe Vector<bfloat16> ExtractLastVector(Vector<bfloat16> value); // LASTB // predicated

  public static unsafe Vector<bfloat16> ExtractVector(Vector<bfloat16> upper, Vector<bfloat16> lower, [ConstantExpected] byte index); // EXT // MOVPRFX

  public static unsafe ulong GetActiveElementCount(Vector<bfloat16> mask, Vector<bfloat16> from); // CNTP

  public static unsafe Vector<bfloat16> InsertIntoShiftedVector(Vector<bfloat16> left, bfloat16 right); // INSR

  public static unsafe Vector<bfloat16> InterleaveEvenInt128FromTwoInputs(Vector<bfloat16> left, Vector<bfloat16> right); // TRN1

  public static unsafe Vector<bfloat16> InterleaveInt128FromHighHalvesOfTwoInputs(Vector<bfloat16> left, Vector<bfloat16> right); // ZIP2

  public static unsafe Vector<bfloat16> InterleaveInt128FromLowHalvesOfTwoInputs(Vector<bfloat16> left, Vector<bfloat16> right); // ZIP1

  public static unsafe Vector<bfloat16> InterleaveOddInt128FromTwoInputs(Vector<bfloat16> left, Vector<bfloat16> right); // TRN2

  public static unsafe Vector<bfloat16> LoadVector(Vector<bfloat16> mask, bfloat16* address); // LD1H

  public static unsafe Vector<bfloat16> LoadVector128AndReplicateToVector(Vector<bfloat16> mask, bfloat16* address); // LD1RQH

  public static unsafe Vector<bfloat16> LoadVector256AndReplicateToVector(Vector<bfloat16> mask, bfloat16* address); // LD1ROH

  public static unsafe Vector<bfloat16> LoadVectorFirstFaulting(Vector<bfloat16> mask, bfloat16* address); // LDFF1H

  public static unsafe Vector<bfloat16> LoadVectorNonFaulting(bfloat16* address); // LDNF1H // predicated

  public static unsafe Vector<bfloat16> LoadVectorNonTemporal(Vector<bfloat16> mask, bfloat16* address); // LDNT1H

  public static unsafe (Vector<bfloat16>, Vector<bfloat16>) LoadVectorx2(Vector<bfloat16> mask, bfloat16* address); // LD2H

  public static unsafe (Vector<bfloat16>, Vector<bfloat16>, Vector<bfloat16>) LoadVectorx3(Vector<bfloat16> mask, bfloat16* address); // LD3H

  public static unsafe (Vector<bfloat16>, Vector<bfloat16>, Vector<bfloat16>, Vector<bfloat16>) LoadVectorx4(Vector<bfloat16> mask, bfloat16* address); // LD4H

  public static unsafe Vector<ushort> PopCount(Vector<bfloat16> value); // CNT // predicated, MOVPRFX

  public static unsafe Vector<bfloat16> ReverseElement(Vector<bfloat16> value); // REV

  public static unsafe Vector<bfloat16> Splice(Vector<bfloat16> mask, Vector<bfloat16> left, Vector<bfloat16> right); // SPLICE // MOVPRFX

  public static unsafe void Store(Vector<bfloat16> mask, bfloat16* address, Vector<bfloat16> data); // ST1H

  public static unsafe void Store(Vector<bfloat16> mask, bfloat16* address, (Vector<bfloat16> Value1, Vector<bfloat16> Value2) data); // ST2H

  public static unsafe void Store(Vector<bfloat16> mask, bfloat16* address, (Vector<bfloat16> Value1, Vector<bfloat16> Value2, Vector<bfloat16> Value3) data); // ST3H

  public static unsafe void Store(Vector<bfloat16> mask, bfloat16* address, (Vector<bfloat16> Value1, Vector<bfloat16> Value2, Vector<bfloat16> Value3, Vector<bfloat16> Value4) data); // ST4H

  public static unsafe void StoreNonTemporal(Vector<bfloat16> mask, bfloat16* address, Vector<bfloat16> data); // STNT1H

  public static unsafe Vector<bfloat16> TransposeEven(Vector<bfloat16> left, Vector<bfloat16> right); // TRN1

  public static unsafe Vector<bfloat16> TransposeOdd(Vector<bfloat16> left, Vector<bfloat16> right); // TRN2

  public static unsafe Vector<bfloat16> UnzipEven(Vector<bfloat16> left, Vector<bfloat16> right); // UZP1

  public static unsafe Vector<bfloat16> UnzipOdd(Vector<bfloat16> left, Vector<bfloat16> right); // UZP2

  public static unsafe Vector<bfloat16> VectorTableLookup(Vector<bfloat16> data, Vector<ushort> indices); // TBL

  public static unsafe Vector<bfloat16> VectorTableLookup((Vector<bfloat16> data1, Vector<bfloat16> data2), Vector<ushort> indices); // TBL

  public static unsafe Vector<bfloat16> VectorTableLookupExtension(Vector<bfloat16> fallback, Vector<bfloat16> data, Vector<ushort> indices); // TBX

  public static unsafe Vector<bfloat16> ZipHigh(Vector<bfloat16> left, Vector<bfloat16> right); // ZIP2

  public static unsafe Vector<bfloat16> ZipLow(Vector<bfloat16> left, Vector<bfloat16> right); // ZIP1

  /// total method signatures: 60


  /// Optional Entries:

  public static unsafe Vector<float> Bfloat16DotProduct(Vector<float> addend, Vector<bfloat16> left, bfloat16 right); // BFDOT // MOVPRFX

  public static unsafe Vector<float> Bfloat16MultiplyAddWideningToSinglePrecisionLower(Vector<float> op1, Vector<bfloat16> op2, bfloat16 op3); // BFMLALB // MOVPRFX

  public static unsafe Vector<float> Bfloat16MultiplyAddWideningToSinglePrecisionUpper(Vector<float> op1, Vector<bfloat16> op2, bfloat16 op3); // BFMLALT // MOVPRFX

  public static unsafe bfloat16 ConditionalExtractAfterLastActiveElement(Vector<bfloat16> mask, bfloat16 defaultValue, Vector<bfloat16> data); // CLASTA

  public static unsafe bfloat16 ConditionalExtractAfterLastActiveElementAndReplicate(Vector<bfloat16> mask, bfloat16 defaultScalar, Vector<bfloat16> data); // CLASTA

  public static unsafe bfloat16 ConditionalExtractLastActiveElement(Vector<bfloat16> mask, bfloat16 defaultValue, Vector<bfloat16> data); // CLASTB

  public static unsafe bfloat16 ConditionalExtractLastActiveElementAndReplicate(Vector<bfloat16> mask, bfloat16 fallback, Vector<bfloat16> data); // CLASTB

  /// total optional method signatures: 7

}

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions