Skip to content

[API Proposal]: Arm64: FEAT_BF16 #94028

Open
@a74nh

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

}

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions