-
Notifications
You must be signed in to change notification settings - Fork 5k
[API Proposal]: ARM64 SVE/SVE2 : Unpredicated instructions (part 2) #93460
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Labels
api-suggestion
Early API idea and discussion, it is NOT ready for implementation
area-System.Runtime.Intrinsics
Comments
Tagging subscribers to this area: @dotnet/area-system-runtime-intrinsics Issue DetailsBackground and motivation174 methods (of 1229) This continues the unpredicated SVE methods. For details see part 1: 93459 API Proposalnamespace System.Runtime.Intrinsics.Arm
public class ArmSVE<T>
{
public static unsafe Vector<float> MultiplyAddAddendFirst(Vector<float> op1, Vector<float> op2, Vector<float> op3, ulong imm_index); // svmla_lane[_f32]: FMLA or MOVPRFX+FMLA
public static unsafe Vector<double> MultiplyAddAddendFirst(Vector<double> op1, Vector<double> op2, Vector<double> op3, ulong imm_index); // svmla_lane[_f64]: FMLA or MOVPRFX+FMLA
public static unsafe Vector<short> MultiplyAddAddendFirst(Vector<short> op1, Vector<short> op2, Vector<short> op3, ulong imm_index); // svmla_lane[_s16]: MLA or MOVPRFX+MLA
public static unsafe Vector<int> MultiplyAddAddendFirst(Vector<int> op1, Vector<int> op2, Vector<int> op3, ulong imm_index); // svmla_lane[_s32]: MLA or MOVPRFX+MLA
public static unsafe Vector<long> MultiplyAddAddendFirst(Vector<long> op1, Vector<long> op2, Vector<long> op3, ulong imm_index); // svmla_lane[_s64]: MLA or MOVPRFX+MLA
public static unsafe Vector<ushort> MultiplyAddAddendFirst(Vector<ushort> op1, Vector<ushort> op2, Vector<ushort> op3, ulong imm_index); // svmla_lane[_u16]: MLA or MOVPRFX+MLA
public static unsafe Vector<uint> MultiplyAddAddendFirst(Vector<uint> op1, Vector<uint> op2, Vector<uint> op3, ulong imm_index); // svmla_lane[_u32]: MLA or MOVPRFX+MLA
public static unsafe Vector<ulong> MultiplyAddAddendFirst(Vector<ulong> op1, Vector<ulong> op2, Vector<ulong> op3, ulong imm_index); // svmla_lane[_u64]: MLA or MOVPRFX+MLA
public static unsafe Vector<short> MultiplyAddLongBottom(Vector<short> op1, Vector<sbyte> op2, Vector<sbyte> op3); // svmlalb[_s16]: SMLALB or MOVPRFX+SMLALB
public static unsafe Vector<int> MultiplyAddLongBottom(Vector<int> op1, Vector<short> op2, Vector<short> op3); // svmlalb[_s32]: SMLALB or MOVPRFX+SMLALB
public static unsafe Vector<long> MultiplyAddLongBottom(Vector<long> op1, Vector<int> op2, Vector<int> op3); // svmlalb[_s64]: SMLALB or MOVPRFX+SMLALB
public static unsafe Vector<ushort> MultiplyAddLongBottom(Vector<ushort> op1, Vector<byte> op2, Vector<byte> op3); // svmlalb[_u16]: UMLALB or MOVPRFX+UMLALB
public static unsafe Vector<uint> MultiplyAddLongBottom(Vector<uint> op1, Vector<ushort> op2, Vector<ushort> op3); // svmlalb[_u32]: UMLALB or MOVPRFX+UMLALB
public static unsafe Vector<ulong> MultiplyAddLongBottom(Vector<ulong> op1, Vector<uint> op2, Vector<uint> op3); // svmlalb[_u64]: UMLALB or MOVPRFX+UMLALB
public static unsafe Vector<short> MultiplyAddLongBottom(Vector<short> op1, Vector<sbyte> op2, sbyte op3); // svmlalb[_n_s16]: SMLALB or MOVPRFX+SMLALB
public static unsafe Vector<int> MultiplyAddLongBottom(Vector<int> op1, Vector<short> op2, short op3); // svmlalb[_n_s32]: SMLALB or MOVPRFX+SMLALB
public static unsafe Vector<long> MultiplyAddLongBottom(Vector<long> op1, Vector<int> op2, int op3); // svmlalb[_n_s64]: SMLALB or MOVPRFX+SMLALB
public static unsafe Vector<ushort> MultiplyAddLongBottom(Vector<ushort> op1, Vector<byte> op2, byte op3); // svmlalb[_n_u16]: UMLALB or MOVPRFX+UMLALB
public static unsafe Vector<uint> MultiplyAddLongBottom(Vector<uint> op1, Vector<ushort> op2, ushort op3); // svmlalb[_n_u32]: UMLALB or MOVPRFX+UMLALB
public static unsafe Vector<ulong> MultiplyAddLongBottom(Vector<ulong> op1, Vector<uint> op2, uint op3); // svmlalb[_n_u64]: UMLALB or MOVPRFX+UMLALB
public static unsafe Vector<int> MultiplyAddLongBottom(Vector<int> op1, Vector<short> op2, Vector<short> op3, ulong imm_index); // svmlalb_lane[_s32]: SMLALB or MOVPRFX+SMLALB
public static unsafe Vector<long> MultiplyAddLongBottom(Vector<long> op1, Vector<int> op2, Vector<int> op3, ulong imm_index); // svmlalb_lane[_s64]: SMLALB or MOVPRFX+SMLALB
public static unsafe Vector<uint> MultiplyAddLongBottom(Vector<uint> op1, Vector<ushort> op2, Vector<ushort> op3, ulong imm_index); // svmlalb_lane[_u32]: UMLALB or MOVPRFX+UMLALB
public static unsafe Vector<ulong> MultiplyAddLongBottom(Vector<ulong> op1, Vector<uint> op2, Vector<uint> op3, ulong imm_index); // svmlalb_lane[_u64]: UMLALB or MOVPRFX+UMLALB
public static unsafe Vector<short> MultiplyAddLongTop(Vector<short> op1, Vector<sbyte> op2, Vector<sbyte> op3); // svmlalt[_s16]: SMLALT or MOVPRFX+SMLALT
public static unsafe Vector<int> MultiplyAddLongTop(Vector<int> op1, Vector<short> op2, Vector<short> op3); // svmlalt[_s32]: SMLALT or MOVPRFX+SMLALT
public static unsafe Vector<long> MultiplyAddLongTop(Vector<long> op1, Vector<int> op2, Vector<int> op3); // svmlalt[_s64]: SMLALT or MOVPRFX+SMLALT
public static unsafe Vector<ushort> MultiplyAddLongTop(Vector<ushort> op1, Vector<byte> op2, Vector<byte> op3); // svmlalt[_u16]: UMLALT or MOVPRFX+UMLALT
public static unsafe Vector<uint> MultiplyAddLongTop(Vector<uint> op1, Vector<ushort> op2, Vector<ushort> op3); // svmlalt[_u32]: UMLALT or MOVPRFX+UMLALT
public static unsafe Vector<ulong> MultiplyAddLongTop(Vector<ulong> op1, Vector<uint> op2, Vector<uint> op3); // svmlalt[_u64]: UMLALT or MOVPRFX+UMLALT
public static unsafe Vector<short> MultiplyAddLongTop(Vector<short> op1, Vector<sbyte> op2, sbyte op3); // svmlalt[_n_s16]: SMLALT or MOVPRFX+SMLALT
public static unsafe Vector<int> MultiplyAddLongTop(Vector<int> op1, Vector<short> op2, short op3); // svmlalt[_n_s32]: SMLALT or MOVPRFX+SMLALT
public static unsafe Vector<long> MultiplyAddLongTop(Vector<long> op1, Vector<int> op2, int op3); // svmlalt[_n_s64]: SMLALT or MOVPRFX+SMLALT
public static unsafe Vector<ushort> MultiplyAddLongTop(Vector<ushort> op1, Vector<byte> op2, byte op3); // svmlalt[_n_u16]: UMLALT or MOVPRFX+UMLALT
public static unsafe Vector<uint> MultiplyAddLongTop(Vector<uint> op1, Vector<ushort> op2, ushort op3); // svmlalt[_n_u32]: UMLALT or MOVPRFX+UMLALT
public static unsafe Vector<ulong> MultiplyAddLongTop(Vector<ulong> op1, Vector<uint> op2, uint op3); // svmlalt[_n_u64]: UMLALT or MOVPRFX+UMLALT
public static unsafe Vector<int> MultiplyAddLongTop(Vector<int> op1, Vector<short> op2, Vector<short> op3, ulong imm_index); // svmlalt_lane[_s32]: SMLALT or MOVPRFX+SMLALT
public static unsafe Vector<long> MultiplyAddLongTop(Vector<long> op1, Vector<int> op2, Vector<int> op3, ulong imm_index); // svmlalt_lane[_s64]: SMLALT or MOVPRFX+SMLALT
public static unsafe Vector<uint> MultiplyAddLongTop(Vector<uint> op1, Vector<ushort> op2, Vector<ushort> op3, ulong imm_index); // svmlalt_lane[_u32]: UMLALT or MOVPRFX+UMLALT
public static unsafe Vector<ulong> MultiplyAddLongTop(Vector<ulong> op1, Vector<uint> op2, Vector<uint> op3, ulong imm_index); // svmlalt_lane[_u64]: UMLALT or MOVPRFX+UMLALT
public static unsafe Vector<float> MultiplySubtractMinuendFirst(Vector<float> op1, Vector<float> op2, Vector<float> op3, ulong imm_index); // svmls_lane[_f32]: FMLS or MOVPRFX+FMLS
public static unsafe Vector<double> MultiplySubtractMinuendFirst(Vector<double> op1, Vector<double> op2, Vector<double> op3, ulong imm_index); // svmls_lane[_f64]: FMLS or MOVPRFX+FMLS
public static unsafe Vector<short> MultiplySubtractMinuendFirst(Vector<short> op1, Vector<short> op2, Vector<short> op3, ulong imm_index); // svmls_lane[_s16]: MLS or MOVPRFX+MLS
public static unsafe Vector<int> MultiplySubtractMinuendFirst(Vector<int> op1, Vector<int> op2, Vector<int> op3, ulong imm_index); // svmls_lane[_s32]: MLS or MOVPRFX+MLS
public static unsafe Vector<long> MultiplySubtractMinuendFirst(Vector<long> op1, Vector<long> op2, Vector<long> op3, ulong imm_index); // svmls_lane[_s64]: MLS or MOVPRFX+MLS
public static unsafe Vector<ushort> MultiplySubtractMinuendFirst(Vector<ushort> op1, Vector<ushort> op2, Vector<ushort> op3, ulong imm_index); // svmls_lane[_u16]: MLS or MOVPRFX+MLS
public static unsafe Vector<uint> MultiplySubtractMinuendFirst(Vector<uint> op1, Vector<uint> op2, Vector<uint> op3, ulong imm_index); // svmls_lane[_u32]: MLS or MOVPRFX+MLS
public static unsafe Vector<ulong> MultiplySubtractMinuendFirst(Vector<ulong> op1, Vector<ulong> op2, Vector<ulong> op3, ulong imm_index); // svmls_lane[_u64]: MLS or MOVPRFX+MLS
public static unsafe Vector<short> MultiplySubtractLongBottom(Vector<short> op1, Vector<sbyte> op2, Vector<sbyte> op3); // svmlslb[_s16]: SMLSLB or MOVPRFX+SMLSLB
public static unsafe Vector<int> MultiplySubtractLongBottom(Vector<int> op1, Vector<short> op2, Vector<short> op3); // svmlslb[_s32]: SMLSLB or MOVPRFX+SMLSLB
public static unsafe Vector<long> MultiplySubtractLongBottom(Vector<long> op1, Vector<int> op2, Vector<int> op3); // svmlslb[_s64]: SMLSLB or MOVPRFX+SMLSLB
public static unsafe Vector<ushort> MultiplySubtractLongBottom(Vector<ushort> op1, Vector<byte> op2, Vector<byte> op3); // svmlslb[_u16]: UMLSLB or MOVPRFX+UMLSLB
public static unsafe Vector<uint> MultiplySubtractLongBottom(Vector<uint> op1, Vector<ushort> op2, Vector<ushort> op3); // svmlslb[_u32]: UMLSLB or MOVPRFX+UMLSLB
public static unsafe Vector<ulong> MultiplySubtractLongBottom(Vector<ulong> op1, Vector<uint> op2, Vector<uint> op3); // svmlslb[_u64]: UMLSLB or MOVPRFX+UMLSLB
public static unsafe Vector<short> MultiplySubtractLongBottom(Vector<short> op1, Vector<sbyte> op2, sbyte op3); // svmlslb[_n_s16]: SMLSLB or MOVPRFX+SMLSLB
public static unsafe Vector<int> MultiplySubtractLongBottom(Vector<int> op1, Vector<short> op2, short op3); // svmlslb[_n_s32]: SMLSLB or MOVPRFX+SMLSLB
public static unsafe Vector<long> MultiplySubtractLongBottom(Vector<long> op1, Vector<int> op2, int op3); // svmlslb[_n_s64]: SMLSLB or MOVPRFX+SMLSLB
public static unsafe Vector<ushort> MultiplySubtractLongBottom(Vector<ushort> op1, Vector<byte> op2, byte op3); // svmlslb[_n_u16]: UMLSLB or MOVPRFX+UMLSLB
public static unsafe Vector<uint> MultiplySubtractLongBottom(Vector<uint> op1, Vector<ushort> op2, ushort op3); // svmlslb[_n_u32]: UMLSLB or MOVPRFX+UMLSLB
public static unsafe Vector<ulong> MultiplySubtractLongBottom(Vector<ulong> op1, Vector<uint> op2, uint op3); // svmlslb[_n_u64]: UMLSLB or MOVPRFX+UMLSLB
public static unsafe Vector<int> MultiplySubtractLongBottom(Vector<int> op1, Vector<short> op2, Vector<short> op3, ulong imm_index); // svmlslb_lane[_s32]: SMLSLB or MOVPRFX+SMLSLB
public static unsafe Vector<long> MultiplySubtractLongBottom(Vector<long> op1, Vector<int> op2, Vector<int> op3, ulong imm_index); // svmlslb_lane[_s64]: SMLSLB or MOVPRFX+SMLSLB
public static unsafe Vector<uint> MultiplySubtractLongBottom(Vector<uint> op1, Vector<ushort> op2, Vector<ushort> op3, ulong imm_index); // svmlslb_lane[_u32]: UMLSLB or MOVPRFX+UMLSLB
public static unsafe Vector<ulong> MultiplySubtractLongBottom(Vector<ulong> op1, Vector<uint> op2, Vector<uint> op3, ulong imm_index); // svmlslb_lane[_u64]: UMLSLB or MOVPRFX+UMLSLB
public static unsafe Vector<short> MultiplySubtractLongTop(Vector<short> op1, Vector<sbyte> op2, Vector<sbyte> op3); // svmlslt[_s16]: SMLSLT or MOVPRFX+SMLSLT
public static unsafe Vector<int> MultiplySubtractLongTop(Vector<int> op1, Vector<short> op2, Vector<short> op3); // svmlslt[_s32]: SMLSLT or MOVPRFX+SMLSLT
public static unsafe Vector<long> MultiplySubtractLongTop(Vector<long> op1, Vector<int> op2, Vector<int> op3); // svmlslt[_s64]: SMLSLT or MOVPRFX+SMLSLT
public static unsafe Vector<ushort> MultiplySubtractLongTop(Vector<ushort> op1, Vector<byte> op2, Vector<byte> op3); // svmlslt[_u16]: UMLSLT or MOVPRFX+UMLSLT
public static unsafe Vector<uint> MultiplySubtractLongTop(Vector<uint> op1, Vector<ushort> op2, Vector<ushort> op3); // svmlslt[_u32]: UMLSLT or MOVPRFX+UMLSLT
public static unsafe Vector<ulong> MultiplySubtractLongTop(Vector<ulong> op1, Vector<uint> op2, Vector<uint> op3); // svmlslt[_u64]: UMLSLT or MOVPRFX+UMLSLT
public static unsafe Vector<short> MultiplySubtractLongTop(Vector<short> op1, Vector<sbyte> op2, sbyte op3); // svmlslt[_n_s16]: SMLSLT or MOVPRFX+SMLSLT
public static unsafe Vector<int> MultiplySubtractLongTop(Vector<int> op1, Vector<short> op2, short op3); // svmlslt[_n_s32]: SMLSLT or MOVPRFX+SMLSLT
public static unsafe Vector<long> MultiplySubtractLongTop(Vector<long> op1, Vector<int> op2, int op3); // svmlslt[_n_s64]: SMLSLT or MOVPRFX+SMLSLT
public static unsafe Vector<ushort> MultiplySubtractLongTop(Vector<ushort> op1, Vector<byte> op2, byte op3); // svmlslt[_n_u16]: UMLSLT or MOVPRFX+UMLSLT
public static unsafe Vector<uint> MultiplySubtractLongTop(Vector<uint> op1, Vector<ushort> op2, ushort op3); // svmlslt[_n_u32]: UMLSLT or MOVPRFX+UMLSLT
public static unsafe Vector<ulong> MultiplySubtractLongTop(Vector<ulong> op1, Vector<uint> op2, uint op3); // svmlslt[_n_u64]: UMLSLT or MOVPRFX+UMLSLT
public static unsafe Vector<int> MultiplySubtractLongTop(Vector<int> op1, Vector<short> op2, Vector<short> op3, ulong imm_index); // svmlslt_lane[_s32]: SMLSLT or MOVPRFX+SMLSLT
public static unsafe Vector<long> MultiplySubtractLongTop(Vector<long> op1, Vector<int> op2, Vector<int> op3, ulong imm_index); // svmlslt_lane[_s64]: SMLSLT or MOVPRFX+SMLSLT
public static unsafe Vector<uint> MultiplySubtractLongTop(Vector<uint> op1, Vector<ushort> op2, Vector<ushort> op3, ulong imm_index); // svmlslt_lane[_u32]: UMLSLT or MOVPRFX+UMLSLT
public static unsafe Vector<ulong> MultiplySubtractLongTop(Vector<ulong> op1, Vector<uint> op2, Vector<uint> op3, ulong imm_index); // svmlslt_lane[_u64]: UMLSLT or MOVPRFX+UMLSLT
public static unsafe Vector<int> MatrixMultiplyAccumulate(Vector<int> op1, Vector<sbyte> op2, Vector<sbyte> op3); // svmmla[_s32]: SMMLA or MOVPRFX+SMMLA
public static unsafe Vector<uint> MatrixMultiplyAccumulate(Vector<uint> op1, Vector<byte> op2, Vector<byte> op3); // svmmla[_u32]: UMMLA or MOVPRFX+UMMLA
public static unsafe Vector<float> MatrixMultiplyAccumulate(Vector<float> op1, Vector<float> op2, Vector<float> op3); // svmmla[_f32]: FMMLA or MOVPRFX+FMMLA
public static unsafe Vector<double> MatrixMultiplyAccumulate(Vector<double> op1, Vector<double> op2, Vector<double> op3); // svmmla[_f64]: FMMLA or MOVPRFX+FMMLA
public static unsafe Vector<short> MoveLongBottom(Vector<sbyte> op); // svmovlb[_s16]: SSHLLB
public static unsafe Vector<int> MoveLongBottom(Vector<short> op); // svmovlb[_s32]: SSHLLB
public static unsafe Vector<long> MoveLongBottom(Vector<int> op); // svmovlb[_s64]: SSHLLB
public static unsafe Vector<ushort> MoveLongBottom(Vector<byte> op); // svmovlb[_u16]: USHLLB
public static unsafe Vector<uint> MoveLongBottom(Vector<ushort> op); // svmovlb[_u32]: USHLLB
public static unsafe Vector<ulong> MoveLongBottom(Vector<uint> op); // svmovlb[_u64]: USHLLB
public static unsafe Vector<short> MoveLongTop(Vector<sbyte> op); // svmovlt[_s16]: SSHLLT
public static unsafe Vector<int> MoveLongTop(Vector<short> op); // svmovlt[_s32]: SSHLLT
public static unsafe Vector<long> MoveLongTop(Vector<int> op); // svmovlt[_s64]: SSHLLT
public static unsafe Vector<ushort> MoveLongTop(Vector<byte> op); // svmovlt[_u16]: USHLLT
public static unsafe Vector<uint> MoveLongTop(Vector<ushort> op); // svmovlt[_u32]: USHLLT
public static unsafe Vector<ulong> MoveLongTop(Vector<uint> op); // svmovlt[_u64]: USHLLT
public static unsafe Vector<float> Multiply(Vector<float> op1, Vector<float> op2, ulong imm_index); // svmul_lane[_f32]: FMUL
public static unsafe Vector<double> Multiply(Vector<double> op1, Vector<double> op2, ulong imm_index); // svmul_lane[_f64]: FMUL
public static unsafe Vector<short> Multiply(Vector<short> op1, Vector<short> op2, ulong imm_index); // svmul_lane[_s16]: MUL
public static unsafe Vector<int> Multiply(Vector<int> op1, Vector<int> op2, ulong imm_index); // svmul_lane[_s32]: MUL
public static unsafe Vector<long> Multiply(Vector<long> op1, Vector<long> op2, ulong imm_index); // svmul_lane[_s64]: MUL
public static unsafe Vector<ushort> Multiply(Vector<ushort> op1, Vector<ushort> op2, ulong imm_index); // svmul_lane[_u16]: MUL
public static unsafe Vector<uint> Multiply(Vector<uint> op1, Vector<uint> op2, ulong imm_index); // svmul_lane[_u32]: MUL
public static unsafe Vector<ulong> Multiply(Vector<ulong> op1, Vector<ulong> op2, ulong imm_index); // svmul_lane[_u64]: MUL
public static unsafe Vector<short> MultiplyLongBottom(Vector<sbyte> op1, Vector<sbyte> op2); // svmullb[_s16]: SMULLB
public static unsafe Vector<int> MultiplyLongBottom(Vector<short> op1, Vector<short> op2); // svmullb[_s32]: SMULLB
public static unsafe Vector<long> MultiplyLongBottom(Vector<int> op1, Vector<int> op2); // svmullb[_s64]: SMULLB
public static unsafe Vector<ushort> MultiplyLongBottom(Vector<byte> op1, Vector<byte> op2); // svmullb[_u16]: UMULLB
public static unsafe Vector<uint> MultiplyLongBottom(Vector<ushort> op1, Vector<ushort> op2); // svmullb[_u32]: UMULLB
public static unsafe Vector<ulong> MultiplyLongBottom(Vector<uint> op1, Vector<uint> op2); // svmullb[_u64]: UMULLB
public static unsafe Vector<short> MultiplyLongBottom(Vector<sbyte> op1, sbyte op2); // svmullb[_n_s16]: SMULLB
public static unsafe Vector<int> MultiplyLongBottom(Vector<short> op1, short op2); // svmullb[_n_s32]: SMULLB
public static unsafe Vector<long> MultiplyLongBottom(Vector<int> op1, int op2); // svmullb[_n_s64]: SMULLB
public static unsafe Vector<ushort> MultiplyLongBottom(Vector<byte> op1, byte op2); // svmullb[_n_u16]: UMULLB
public static unsafe Vector<uint> MultiplyLongBottom(Vector<ushort> op1, ushort op2); // svmullb[_n_u32]: UMULLB
public static unsafe Vector<ulong> MultiplyLongBottom(Vector<uint> op1, uint op2); // svmullb[_n_u64]: UMULLB
public static unsafe Vector<int> MultiplyLongBottom(Vector<short> op1, Vector<short> op2, ulong imm_index); // svmullb_lane[_s32]: SMULLB
public static unsafe Vector<long> MultiplyLongBottom(Vector<int> op1, Vector<int> op2, ulong imm_index); // svmullb_lane[_s64]: SMULLB
public static unsafe Vector<uint> MultiplyLongBottom(Vector<ushort> op1, Vector<ushort> op2, ulong imm_index); // svmullb_lane[_u32]: UMULLB
public static unsafe Vector<ulong> MultiplyLongBottom(Vector<uint> op1, Vector<uint> op2, ulong imm_index); // svmullb_lane[_u64]: UMULLB
public static unsafe Vector<short> MultiplyLongTop(Vector<sbyte> op1, Vector<sbyte> op2); // svmullt[_s16]: SMULLT
public static unsafe Vector<int> MultiplyLongTop(Vector<short> op1, Vector<short> op2); // svmullt[_s32]: SMULLT
public static unsafe Vector<long> MultiplyLongTop(Vector<int> op1, Vector<int> op2); // svmullt[_s64]: SMULLT
public static unsafe Vector<ushort> MultiplyLongTop(Vector<byte> op1, Vector<byte> op2); // svmullt[_u16]: UMULLT
public static unsafe Vector<uint> MultiplyLongTop(Vector<ushort> op1, Vector<ushort> op2); // svmullt[_u32]: UMULLT
public static unsafe Vector<ulong> MultiplyLongTop(Vector<uint> op1, Vector<uint> op2); // svmullt[_u64]: UMULLT
public static unsafe Vector<short> MultiplyLongTop(Vector<sbyte> op1, sbyte op2); // svmullt[_n_s16]: SMULLT
public static unsafe Vector<int> MultiplyLongTop(Vector<short> op1, short op2); // svmullt[_n_s32]: SMULLT
public static unsafe Vector<long> MultiplyLongTop(Vector<int> op1, int op2); // svmullt[_n_s64]: SMULLT
public static unsafe Vector<ushort> MultiplyLongTop(Vector<byte> op1, byte op2); // svmullt[_n_u16]: UMULLT
public static unsafe Vector<uint> MultiplyLongTop(Vector<ushort> op1, ushort op2); // svmullt[_n_u32]: UMULLT
public static unsafe Vector<ulong> MultiplyLongTop(Vector<uint> op1, uint op2); // svmullt[_n_u64]: UMULLT
public static unsafe Vector<int> MultiplyLongTop(Vector<short> op1, Vector<short> op2, ulong imm_index); // svmullt_lane[_s32]: SMULLT
public static unsafe Vector<long> MultiplyLongTop(Vector<int> op1, Vector<int> op2, ulong imm_index); // svmullt_lane[_s64]: SMULLT
public static unsafe Vector<uint> MultiplyLongTop(Vector<ushort> op1, Vector<ushort> op2, ulong imm_index); // svmullt_lane[_u32]: UMULLT
public static unsafe Vector<ulong> MultiplyLongTop(Vector<uint> op1, Vector<uint> op2, ulong imm_index); // svmullt_lane[_u64]: UMULLT
public static unsafe Vector<sbyte> BitwiseSelectInverted(Vector<sbyte> op1, Vector<sbyte> op2, Vector<sbyte> op3); // svnbsl[_s8]: NBSL or MOVPRFX+NBSL
public static unsafe Vector<short> BitwiseSelectInverted(Vector<short> op1, Vector<short> op2, Vector<short> op3); // svnbsl[_s16]: NBSL or MOVPRFX+NBSL
public static unsafe Vector<int> BitwiseSelectInverted(Vector<int> op1, Vector<int> op2, Vector<int> op3); // svnbsl[_s32]: NBSL or MOVPRFX+NBSL
public static unsafe Vector<long> BitwiseSelectInverted(Vector<long> op1, Vector<long> op2, Vector<long> op3); // svnbsl[_s64]: NBSL or MOVPRFX+NBSL
public static unsafe Vector<byte> BitwiseSelectInverted(Vector<byte> op1, Vector<byte> op2, Vector<byte> op3); // svnbsl[_u8]: NBSL or MOVPRFX+NBSL
public static unsafe Vector<ushort> BitwiseSelectInverted(Vector<ushort> op1, Vector<ushort> op2, Vector<ushort> op3); // svnbsl[_u16]: NBSL or MOVPRFX+NBSL
public static unsafe Vector<uint> BitwiseSelectInverted(Vector<uint> op1, Vector<uint> op2, Vector<uint> op3); // svnbsl[_u32]: NBSL or MOVPRFX+NBSL
public static unsafe Vector<ulong> BitwiseSelectInverted(Vector<ulong> op1, Vector<ulong> op2, Vector<ulong> op3); // svnbsl[_u64]: NBSL or MOVPRFX+NBSL
public static unsafe Vector<sbyte> BitwiseSelectInverted(Vector<sbyte> op1, Vector<sbyte> op2, sbyte op3); // svnbsl[_n_s8]: NBSL or MOVPRFX+NBSL
public static unsafe Vector<short> BitwiseSelectInverted(Vector<short> op1, Vector<short> op2, short op3); // svnbsl[_n_s16]: NBSL or MOVPRFX+NBSL
public static unsafe Vector<int> BitwiseSelectInverted(Vector<int> op1, Vector<int> op2, int op3); // svnbsl[_n_s32]: NBSL or MOVPRFX+NBSL
public static unsafe Vector<long> BitwiseSelectInverted(Vector<long> op1, Vector<long> op2, long op3); // svnbsl[_n_s64]: NBSL or MOVPRFX+NBSL
public static unsafe Vector<byte> BitwiseSelectInverted(Vector<byte> op1, Vector<byte> op2, byte op3); // svnbsl[_n_u8]: NBSL or MOVPRFX+NBSL
public static unsafe Vector<ushort> BitwiseSelectInverted(Vector<ushort> op1, Vector<ushort> op2, ushort op3); // svnbsl[_n_u16]: NBSL or MOVPRFX+NBSL
public static unsafe Vector<uint> BitwiseSelectInverted(Vector<uint> op1, Vector<uint> op2, uint op3); // svnbsl[_n_u32]: NBSL or MOVPRFX+NBSL
public static unsafe Vector<ulong> BitwiseSelectInverted(Vector<ulong> op1, Vector<ulong> op2, ulong op3); // svnbsl[_n_u64]: NBSL or MOVPRFX+NBSL
public static unsafe Vector<byte> PolynomialMultiply(Vector<byte> op1, Vector<byte> op2); // svpmul[_u8]: PMUL
public static unsafe Vector<byte> PolynomialMultiply(Vector<byte> op1, byte op2); // svpmul[_n_u8]: PMUL
public static unsafe Vector<ushort> PolynomialMultiplyLongBottom(Vector<byte> op1, Vector<byte> op2); // svpmullb[_u16]: PMULLB
public static unsafe Vector<ulong> PolynomialMultiplyLongBottom(Vector<uint> op1, Vector<uint> op2); // svpmullb[_u64]: PMULLB
public static unsafe Vector<ushort> PolynomialMultiplyLongBottom(Vector<byte> op1, byte op2); // svpmullb[_n_u16]: PMULLB
public static unsafe Vector<ulong> PolynomialMultiplyLongBottom(Vector<uint> op1, uint op2); // svpmullb[_n_u64]: PMULLB
public static unsafe Vector<byte> PolynomialMultiplyLongBottom(Vector<byte> op1, Vector<byte> op2); // svpmullb_pair[_u8]: PMULLB
public static unsafe Vector<uint> PolynomialMultiplyLongBottom(Vector<uint> op1, Vector<uint> op2); // svpmullb_pair[_u32]: PMULLB
public static unsafe Vector<byte> PolynomialMultiplyLongBottom(Vector<byte> op1, byte op2); // svpmullb_pair[_n_u8]: PMULLB
public static unsafe Vector<uint> PolynomialMultiplyLongBottom(Vector<uint> op1, uint op2); // svpmullb_pair[_n_u32]: PMULLB
public static unsafe Vector<ulong> PolynomialMultiplyLongBottom(Vector<ulong> op1, Vector<ulong> op2); // svpmullb_pair[_u64]: PMULLB
public static unsafe Vector<ulong> PolynomialMultiplyLongBottom(Vector<ulong> op1, ulong op2); // svpmullb_pair[_n_u64]: PMULLB
public static unsafe Vector<ushort> PolynomialMultiplyLongTop(Vector<byte> op1, Vector<byte> op2); // svpmullt[_u16]: PMULLT
public static unsafe Vector<ulong> PolynomialMultiplyLongTop(Vector<uint> op1, Vector<uint> op2); // svpmullt[_u64]: PMULLT
public static unsafe Vector<ushort> PolynomialMultiplyLongTop(Vector<byte> op1, byte op2); // svpmullt[_n_u16]: PMULLT
public static unsafe Vector<ulong> PolynomialMultiplyLongTop(Vector<uint> op1, uint op2); // svpmullt[_n_u64]: PMULLT
public static unsafe Vector<byte> PolynomialMultiplyLongTop(Vector<byte> op1, Vector<byte> op2); // svpmullt_pair[_u8]: PMULLT
public static unsafe Vector<uint> PolynomialMultiplyLongTop(Vector<uint> op1, Vector<uint> op2); // svpmullt_pair[_u32]: PMULLT
public static unsafe Vector<byte> PolynomialMultiplyLongTop(Vector<byte> op1, byte op2); // svpmullt_pair[_n_u8]: PMULLT
public static unsafe Vector<uint> PolynomialMultiplyLongTop(Vector<uint> op1, uint op2); // svpmullt_pair[_n_u32]: PMULLT
public static unsafe Vector<ulong> PolynomialMultiplyLongTop(Vector<ulong> op1, Vector<ulong> op2); // svpmullt_pair[_u64]: PMULLT
public static unsafe Vector<ulong> PolynomialMultiplyLongTop(Vector<ulong> op1, ulong op2); // svpmullt_pair[_n_u64]: PMULLT
} API UsageSee part 1: 93459 Alternative DesignsNo response RisksNo response
|
Closing this. Replaced by newer issues. |
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Labels
api-suggestion
Early API idea and discussion, it is NOT ready for implementation
area-System.Runtime.Intrinsics
Uh oh!
There was an error while loading. Please reload this page.
Background and motivation
174 methods
This continues the unpredicated SVE methods.
For details see part 1: 93459
API Proposal
API Usage
See part 1: 93459
Alternative Designs
No response
Risks
No response
The text was updated successfully, but these errors were encountered: