mirror of https://github.com/dotnet/runtime
Merge 15624f8121
into 02596ba8d9
This commit is contained in:
commit
248ad13d73
|
@ -357,6 +357,8 @@ HARDWARE_INTRINSIC(Sve2, MultiplyBySelectedScalarWideningEvenAndSubtrac
|
|||
HARDWARE_INTRINSIC(Sve2, MultiplyBySelectedScalarWideningOdd, -1, 3, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_sve_smullt, INS_sve_umullt, INS_sve_smullt, INS_sve_umullt, INS_invalid, INS_invalid}, HW_Category_SIMDByIndexedElement, HW_Flag_Scalable|HW_Flag_HasImmediateOperand|HW_Flag_LowVectorOperation)
|
||||
HARDWARE_INTRINSIC(Sve2, MultiplyBySelectedScalarWideningOddAndAdd, -1, 4, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_sve_smlalt, INS_sve_umlalt, INS_sve_smlalt, INS_sve_umlalt, INS_invalid, INS_invalid}, HW_Category_SIMDByIndexedElement, HW_Flag_Scalable|HW_Flag_HasRMWSemantics|HW_Flag_HasImmediateOperand|HW_Flag_LowVectorOperation)
|
||||
HARDWARE_INTRINSIC(Sve2, MultiplyBySelectedScalarWideningOddAndSubtract, -1, 4, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_sve_smlslt, INS_sve_umlslt, INS_sve_smlslt, INS_sve_umlslt, INS_invalid, INS_invalid}, HW_Category_SIMDByIndexedElement, HW_Flag_Scalable|HW_Flag_HasRMWSemantics|HW_Flag_HasImmediateOperand|HW_Flag_LowVectorOperation)
|
||||
HARDWARE_INTRINSIC(Sve2, MultiplyDoublingBySelectedScalarSaturateHigh, -1, 3, {INS_invalid, INS_invalid, INS_sve_sqdmulh, INS_invalid, INS_sve_sqdmulh, INS_invalid, INS_sve_sqdmulh, INS_invalid, INS_invalid, INS_invalid}, HW_Category_SIMDByIndexedElement, HW_Flag_Scalable|HW_Flag_HasImmediateOperand|HW_Flag_LowVectorOperation)
|
||||
HARDWARE_INTRINSIC(Sve2, MultiplyDoublingSaturateHigh, -1, 2, {INS_sve_sqdmulh, INS_invalid, INS_sve_sqdmulh, INS_invalid, INS_sve_sqdmulh, INS_invalid, INS_sve_sqdmulh, INS_invalid, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable)
|
||||
HARDWARE_INTRINSIC(Sve2, MultiplyDoublingWideningAndAddSaturateEven, -1, 3, {INS_invalid, INS_invalid, INS_sve_sqdmlalb, INS_invalid, INS_sve_sqdmlalb, INS_invalid, INS_sve_sqdmlalb, INS_invalid, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_HasRMWSemantics)
|
||||
HARDWARE_INTRINSIC(Sve2, MultiplyDoublingWideningAndAddSaturateEvenOdd, -1, 3, {INS_invalid, INS_invalid, INS_sve_sqdmlalbt, INS_invalid, INS_sve_sqdmlalbt, INS_invalid, INS_sve_sqdmlalbt, INS_invalid, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_HasRMWSemantics)
|
||||
HARDWARE_INTRINSIC(Sve2, MultiplyDoublingWideningAndAddSaturateOdd, -1, 3, {INS_invalid, INS_invalid, INS_sve_sqdmlalt, INS_invalid, INS_sve_sqdmlalt, INS_invalid, INS_sve_sqdmlalt, INS_invalid, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_HasRMWSemantics)
|
||||
|
|
|
@ -2185,6 +2185,7 @@ SingleTypeRegSet LinearScan::getOperandCandidates(GenTreeHWIntrinsic* intrinsicT
|
|||
case NI_Sve2_MultiplyBySelectedScalar:
|
||||
case NI_Sve2_MultiplyBySelectedScalarWideningEven:
|
||||
case NI_Sve2_MultiplyBySelectedScalarWideningOdd:
|
||||
case NI_Sve2_MultiplyDoublingBySelectedScalarSaturateHigh:
|
||||
case NI_Sve2_MultiplyDoublingWideningSaturateEvenBySelectedScalar:
|
||||
case NI_Sve2_MultiplyDoublingWideningSaturateOddBySelectedScalar:
|
||||
case NI_Sve2_MultiplyRoundedDoublingBySelectedScalarSaturateHigh:
|
||||
|
|
|
@ -2007,6 +2007,54 @@ namespace System.Runtime.Intrinsics.Arm
|
|||
public static Vector<ulong> MultiplyBySelectedScalarWideningOddAndSubtract(Vector<ulong> minuend, Vector<uint> left, Vector<uint> right, [ConstantExpected] byte rightIndex) { throw new PlatformNotSupportedException(); }
|
||||
|
||||
|
||||
// Saturating doubling multiply high with index
|
||||
|
||||
/// <summary>
|
||||
/// svint16_t svqdmulh_lane[_s16](svint16_t op1, svint16_t op2, uint64_t imm_index)
|
||||
/// SQDMULH Zresult.H, Zop1.H, Zop2.H[imm_index]
|
||||
/// </summary>
|
||||
public static Vector<short> MultiplyDoublingBySelectedScalarSaturateHigh(Vector<short> left, Vector<short> right, [ConstantExpected] byte rightIndex) { throw new PlatformNotSupportedException(); }
|
||||
|
||||
/// <summary>
|
||||
/// svint32_t svqdmulh_lane[_s32](svint32_t op1, svint32_t op2, uint64_t imm_index)
|
||||
/// SQDMULH Zresult.S, Zop1.S, Zop2.S[imm_index]
|
||||
/// </summary>
|
||||
public static Vector<int> MultiplyDoublingBySelectedScalarSaturateHigh(Vector<int> left, Vector<int> right, [ConstantExpected] byte rightIndex) { throw new PlatformNotSupportedException(); }
|
||||
|
||||
/// <summary>
|
||||
/// svint64_t svqdmulh_lane[_s64](svint64_t op1, svint64_t op2, uint64_t imm_index)
|
||||
/// SQDMULH Zresult.D, Zop1.D, Zop2.D[imm_index]
|
||||
/// </summary>
|
||||
public static Vector<long> MultiplyDoublingBySelectedScalarSaturateHigh(Vector<long> left, Vector<long> right, [ConstantExpected] byte rightIndex) { throw new PlatformNotSupportedException(); }
|
||||
|
||||
|
||||
// Saturating doubling multiply high
|
||||
|
||||
/// <summary>
|
||||
/// svint8_t svqdmulh[_s8](svint8_t op1, svint8_t op2)
|
||||
/// SQDMULH Zresult.B, Zop1.B, Zop2.B
|
||||
/// </summary>
|
||||
public static Vector<sbyte> MultiplyDoublingSaturateHigh(Vector<sbyte> left, Vector<sbyte> right) { throw new PlatformNotSupportedException(); }
|
||||
|
||||
/// <summary>
|
||||
/// svint16_t svqdmulh[_s16](svint16_t op1, svint16_t op2)
|
||||
/// SQDMULH Zresult.H, Zop1.H, Zop2.H
|
||||
/// </summary>
|
||||
public static Vector<short> MultiplyDoublingSaturateHigh(Vector<short> left, Vector<short> right) { throw new PlatformNotSupportedException(); }
|
||||
|
||||
/// <summary>
|
||||
/// svint32_t svqdmulh[_s32](svint32_t op1, svint32_t op2)
|
||||
/// SQDMULH Zresult.S, Zop1.S, Zop2.S
|
||||
/// </summary>
|
||||
public static Vector<int> MultiplyDoublingSaturateHigh(Vector<int> left, Vector<int> right) { throw new PlatformNotSupportedException(); }
|
||||
|
||||
/// <summary>
|
||||
/// svint64_t svqdmulh[_s64](svint64_t op1, svint64_t op2)
|
||||
/// SQDMULH Zresult.D, Zop1.D, Zop2.D
|
||||
/// </summary>
|
||||
public static Vector<long> MultiplyDoublingSaturateHigh(Vector<long> left, Vector<long> right) { throw new PlatformNotSupportedException(); }
|
||||
|
||||
|
||||
// Multiply long (bottom)
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -2030,6 +2030,54 @@ namespace System.Runtime.Intrinsics.Arm
|
|||
public static Vector<ulong> MultiplyBySelectedScalarWideningOddAndSubtract(Vector<ulong> minuend, Vector<uint> left, Vector<uint> right, [ConstantExpected] byte rightIndex) => MultiplyBySelectedScalarWideningOddAndSubtract(minuend, left, right, rightIndex);
|
||||
|
||||
|
||||
// Saturating doubling multiply high with index
|
||||
|
||||
/// <summary>
|
||||
/// svint16_t svqdmulh_lane[_s16](svint16_t op1, svint16_t op2, uint64_t imm_index)
|
||||
/// SQDMULH Zresult.H, Zop1.H, Zop2.H[imm_index]
|
||||
/// </summary>
|
||||
public static Vector<short> MultiplyDoublingBySelectedScalarSaturateHigh(Vector<short> left, Vector<short> right, [ConstantExpected] byte rightIndex) => MultiplyDoublingBySelectedScalarSaturateHigh(left, right, rightIndex);
|
||||
|
||||
/// <summary>
|
||||
/// svint32_t svqdmulh_lane[_s32](svint32_t op1, svint32_t op2, uint64_t imm_index)
|
||||
/// SQDMULH Zresult.S, Zop1.S, Zop2.S[imm_index]
|
||||
/// </summary>
|
||||
public static Vector<int> MultiplyDoublingBySelectedScalarSaturateHigh(Vector<int> left, Vector<int> right, [ConstantExpected] byte rightIndex) => MultiplyDoublingBySelectedScalarSaturateHigh(left, right, rightIndex);
|
||||
|
||||
/// <summary>
|
||||
/// svint64_t svqdmulh_lane[_s64](svint64_t op1, svint64_t op2, uint64_t imm_index)
|
||||
/// SQDMULH Zresult.D, Zop1.D, Zop2.D[imm_index]
|
||||
/// </summary>
|
||||
public static Vector<long> MultiplyDoublingBySelectedScalarSaturateHigh(Vector<long> left, Vector<long> right, [ConstantExpected] byte rightIndex) => MultiplyDoublingBySelectedScalarSaturateHigh(left, right, rightIndex);
|
||||
|
||||
|
||||
// Saturating doubling multiply high
|
||||
|
||||
/// <summary>
|
||||
/// svint8_t svqdmulh[_s8](svint8_t op1, svint8_t op2)
|
||||
/// SQDMULH Zresult.B, Zop1.B, Zop2.B
|
||||
/// </summary>
|
||||
public static Vector<sbyte> MultiplyDoublingSaturateHigh(Vector<sbyte> left, Vector<sbyte> right) => MultiplyDoublingSaturateHigh(left, right);
|
||||
|
||||
/// <summary>
|
||||
/// svint16_t svqdmulh[_s16](svint16_t op1, svint16_t op2)
|
||||
/// SQDMULH Zresult.H, Zop1.H, Zop2.H
|
||||
/// </summary>
|
||||
public static Vector<short> MultiplyDoublingSaturateHigh(Vector<short> left, Vector<short> right) => MultiplyDoublingSaturateHigh(left, right);
|
||||
|
||||
/// <summary>
|
||||
/// svint32_t svqdmulh[_s32](svint32_t op1, svint32_t op2)
|
||||
/// SQDMULH Zresult.S, Zop1.S, Zop2.S
|
||||
/// </summary>
|
||||
public static Vector<int> MultiplyDoublingSaturateHigh(Vector<int> left, Vector<int> right) => MultiplyDoublingSaturateHigh(left, right);
|
||||
|
||||
/// <summary>
|
||||
/// svint64_t svqdmulh[_s64](svint64_t op1, svint64_t op2)
|
||||
/// SQDMULH Zresult.D, Zop1.D, Zop2.D
|
||||
/// </summary>
|
||||
public static Vector<long> MultiplyDoublingSaturateHigh(Vector<long> left, Vector<long> right) => MultiplyDoublingSaturateHigh(left, right);
|
||||
|
||||
|
||||
// Multiply long (bottom)
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -6372,6 +6372,13 @@ namespace System.Runtime.Intrinsics.Arm
|
|||
public static System.Numerics.Vector<long> MultiplyBySelectedScalarWideningOddAndSubtract(System.Numerics.Vector<long> minuend, System.Numerics.Vector<int> left, System.Numerics.Vector<int> right, [ConstantExpected] byte rightIndex) { throw null; }
|
||||
public static System.Numerics.Vector<uint> MultiplyBySelectedScalarWideningOddAndSubtract(System.Numerics.Vector<uint> minuend, System.Numerics.Vector<ushort> left, System.Numerics.Vector<ushort> right, [ConstantExpected] byte rightIndex) { throw null; }
|
||||
public static System.Numerics.Vector<ulong> MultiplyBySelectedScalarWideningOddAndSubtract(System.Numerics.Vector<ulong> minuend, System.Numerics.Vector<uint> left, System.Numerics.Vector<uint> right, [ConstantExpected] byte rightIndex) { throw null; }
|
||||
public static System.Numerics.Vector<short> MultiplyDoublingBySelectedScalarSaturateHigh(System.Numerics.Vector<short> left, System.Numerics.Vector<short> right, [ConstantExpected] byte rightIndex) { throw null; }
|
||||
public static System.Numerics.Vector<int> MultiplyDoublingBySelectedScalarSaturateHigh(System.Numerics.Vector<int> left, System.Numerics.Vector<int> right, [ConstantExpected] byte rightIndex) { throw null; }
|
||||
public static System.Numerics.Vector<long> MultiplyDoublingBySelectedScalarSaturateHigh(System.Numerics.Vector<long> left, System.Numerics.Vector<long> right, [ConstantExpected] byte rightIndex) { throw null; }
|
||||
public static System.Numerics.Vector<sbyte> MultiplyDoublingSaturateHigh(System.Numerics.Vector<sbyte> left, System.Numerics.Vector<sbyte> right) { throw null; }
|
||||
public static System.Numerics.Vector<short> MultiplyDoublingSaturateHigh(System.Numerics.Vector<short> left, System.Numerics.Vector<short> right) { throw null; }
|
||||
public static System.Numerics.Vector<int> MultiplyDoublingSaturateHigh(System.Numerics.Vector<int> left, System.Numerics.Vector<int> right) { throw null; }
|
||||
public static System.Numerics.Vector<long> MultiplyDoublingSaturateHigh(System.Numerics.Vector<long> left, System.Numerics.Vector<long> right) { throw null; }
|
||||
public static System.Numerics.Vector<short> MultiplyDoublingWideningAndAddSaturateEven(System.Numerics.Vector<short> addend, System.Numerics.Vector<sbyte> left, System.Numerics.Vector<sbyte> right) { throw null; }
|
||||
public static System.Numerics.Vector<int> MultiplyDoublingWideningAndAddSaturateEven(System.Numerics.Vector<int> addend, System.Numerics.Vector<short> left, System.Numerics.Vector<short> right) { throw null; }
|
||||
public static System.Numerics.Vector<long> MultiplyDoublingWideningAndAddSaturateEven(System.Numerics.Vector<long> addend, System.Numerics.Vector<int> left, System.Numerics.Vector<int> right) { throw null; }
|
||||
|
|
|
@ -5179,6 +5179,15 @@ const string SecureHashOpTest_ValidationLogic = @"{RetBaseType}[] expectedResult
|
|||
("SveVecImmTernOpTest.template",new Dictionary<string, string> {["TestName"] = "Sve2_MultiplyBySelectedScalarWideningOddAndSubtract_uint_ushort", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "MultiplyBySelectedScalarWideningOddAndSubtract", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt16", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "UInt16",["Op4BaseType"] = "UInt64",["LargestVectorSize"] = "64",["NextValueOp1"] = "TestLibrary.Generator.GetUInt32()",["NextValueOp2"] = "TestLibrary.Generator.GetUInt16()",["NextValueOp3"] = "TestLibrary.Generator.GetUInt16()", ["NextValueMask"] = "Helpers.getMaskUInt32()", ["Imm"] = "6", ["InvalidImm"] = "8", ["ConvertFunc"] = "", ["ValidateIterResult"] = "result[i] != Helpers.MultiplySubtractWidening(firstOp[i], secondOp[2 * i + 1], thirdOp[Imm])", ["GetIterResult"] = "Helpers.MultiplySubtractWidening(firstOp[i], secondOp[2 * i + 1], thirdOp[Imm])"}),
|
||||
("SveVecImmTernOpTest.template",new Dictionary<string, string> {["TestName"] = "Sve2_MultiplyBySelectedScalarWideningOddAndSubtract_ulong_uint", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "MultiplyBySelectedScalarWideningOddAndSubtract", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt64", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt64", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt32", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "UInt32",["Op4BaseType"] = "UInt64",["LargestVectorSize"] = "64",["NextValueOp1"] = "TestLibrary.Generator.GetUInt64()",["NextValueOp2"] = "TestLibrary.Generator.GetUInt32()",["NextValueOp3"] = "TestLibrary.Generator.GetUInt32()", ["NextValueMask"] = "Helpers.getMaskUInt64()", ["Imm"] = "2", ["InvalidImm"] = "4", ["ConvertFunc"] = "", ["ValidateIterResult"] = "result[i] != Helpers.MultiplySubtractWidening(firstOp[i], secondOp[2 * i + 1], thirdOp[Imm])", ["GetIterResult"] = "Helpers.MultiplySubtractWidening(firstOp[i], secondOp[2 * i + 1], thirdOp[Imm])"}),
|
||||
|
||||
("SveVecImmBinOpTest.template", new Dictionary<string, string> {["TestName"] = "Sve2_MultiplyDoublingBySelectedScalarSaturateHigh_short", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "MultiplyDoublingBySelectedScalarSaturateHigh", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int16", ["Op3BaseType"] = "UInt64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt16()", ["NextValueMask"] = "Helpers.getMaskInt16()", ["Imm"] = "6", ["InvalidImm"] = "8", ["ConvertFunc"] = "", ["ValidateIterResult"] = "result[i] != Helpers.MultiplyDoublingSaturateHigh(firstOp[i], secondOp[Imm])", ["GetIterResult"] = "Helpers.MultiplyDoublingSaturateHigh(firstOp[i], secondOp[Imm])"}),
|
||||
("SveVecImmBinOpTest.template", new Dictionary<string, string> {["TestName"] = "Sve2_MultiplyDoublingBySelectedScalarSaturateHigh_int", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "MultiplyDoublingBySelectedScalarSaturateHigh", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int32", ["Op3BaseType"] = "UInt64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt32()", ["NextValueMask"] = "Helpers.getMaskInt16()", ["Imm"] = "2", ["InvalidImm"] = "4", ["ConvertFunc"] = "", ["ValidateIterResult"] = "result[i] != Helpers.MultiplyDoublingSaturateHigh(firstOp[i], secondOp[Imm])", ["GetIterResult"] = "Helpers.MultiplyDoublingSaturateHigh(firstOp[i], secondOp[Imm])"}),
|
||||
("SveVecImmBinOpTest.template", new Dictionary<string, string> {["TestName"] = "Sve2_MultiplyDoublingBySelectedScalarSaturateHigh_long", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "MultiplyDoublingBySelectedScalarSaturateHigh", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int64", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int64", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int64", ["Op3BaseType"] = "UInt64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt64()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt64()", ["NextValueMask"] = "Helpers.getMaskInt16()", ["Imm"] = "1", ["InvalidImm"] = "2", ["ConvertFunc"] = "", ["ValidateIterResult"] = "result[i] != Helpers.MultiplyDoublingSaturateHigh(firstOp[i], secondOp[Imm])", ["GetIterResult"] = "Helpers.MultiplyDoublingSaturateHigh(firstOp[i], secondOp[Imm])"}),
|
||||
|
||||
("SveVecBinOpTest.template", new Dictionary<string, string> {["TestName"] = "Sve2_MultiplyDoublingSaturateHigh_sbyte", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "MultiplyDoublingSaturateHigh", ["RetVectorType"] = "Vector", ["RetBaseType"] = "SByte", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "SByte", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "SByte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetSByte()", ["NextValueOp2"] = "TestLibrary.Generator.GetSByte()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "result[i] != Helpers.MultiplyDoublingSaturateHigh(left[i], right[i])", ["GetIterResult"] = "Helpers.MultiplyDoublingSaturateHigh(leftOp[i], rightOp[i])"}),
|
||||
("SveVecBinOpTest.template", new Dictionary<string, string> {["TestName"] = "Sve2_MultiplyDoublingSaturateHigh_short", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "MultiplyDoublingSaturateHigh", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt16()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "result[i] != Helpers.MultiplyDoublingSaturateHigh(left[i], right[i])", ["GetIterResult"] = "Helpers.MultiplyDoublingSaturateHigh(leftOp[i], rightOp[i])"}),
|
||||
("SveVecBinOpTest.template", new Dictionary<string, string> {["TestName"] = "Sve2_MultiplyDoublingSaturateHigh_int", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "MultiplyDoublingSaturateHigh", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt32()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "result[i] != Helpers.MultiplyDoublingSaturateHigh(left[i], right[i])", ["GetIterResult"] = "Helpers.MultiplyDoublingSaturateHigh(leftOp[i], rightOp[i])"}),
|
||||
("SveVecBinOpTest.template", new Dictionary<string, string> {["TestName"] = "Sve2_MultiplyDoublingSaturateHigh_long", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "MultiplyDoublingSaturateHigh", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int64", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int64", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt64()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt64()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "result[i] != Helpers.MultiplyDoublingSaturateHigh(left[i], right[i])", ["GetIterResult"] = "Helpers.MultiplyDoublingSaturateHigh(leftOp[i], rightOp[i])"}),
|
||||
|
||||
("SveVecBinOpDifferentRetType.template",new Dictionary<string, string> { ["TestName"] = "Sve2_MultiplyWideningEven_short_sbyte", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "MultiplyWideningEven", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "SByte", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "SByte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetSByte()", ["NextValueOp2"] = "TestLibrary.Generator.GetSByte()", ["NextValueMask"] = "Helpers.getMaskInt16()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "result[i] != Helpers.MultiplyWidening(left[2 * i], right[2 * i])", ["GetIterResult"] = "Helpers.MultiplyWidening(leftOp[2 * i], rightOp[2 * i])"}),
|
||||
("SveVecBinOpDifferentRetType.template",new Dictionary<string, string> { ["TestName"] = "Sve2_MultiplyWideningEven_int_short", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "MultiplyWideningEven", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt16()", ["NextValueMask"] = "Helpers.getMaskInt32()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "result[i] != Helpers.MultiplyWidening(left[2 * i], right[2 * i])", ["GetIterResult"] = "Helpers.MultiplyWidening(leftOp[2 * i], rightOp[2 * i])"}),
|
||||
("SveVecBinOpDifferentRetType.template",new Dictionary<string, string> { ["TestName"] = "Sve2_MultiplyWideningEven_long_int", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "MultiplyWideningEven", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int64", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt32()", ["NextValueMask"] = "Helpers.getMaskInt64()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "result[i] != Helpers.MultiplyWidening(left[2 * i], right[2 * i])", ["GetIterResult"] = "Helpers.MultiplyWidening(leftOp[2 * i], rightOp[2 * i])"}),
|
||||
|
|
|
@ -2524,6 +2524,11 @@ namespace JIT.HardwareIntrinsics.Arm
|
|||
|
||||
public static long MultiplyDoublingWideningUpperAndSubtractSaturate(long[] op1, int[] op2, int[] op3, int i) => MultiplyDoublingWideningAndSubtractSaturate(op1[i], op2[i + op2.Length / 2], op3[i + op3.Length / 2]);
|
||||
|
||||
public static long MultiplyDoublingSaturateHigh(long op1, long op2)
|
||||
{
|
||||
return MultiplyDoublingSaturate(op1, op2, rounding: false, 0, subOp: false);
|
||||
}
|
||||
|
||||
public static long MultiplyRoundedDoublingSaturateHigh(long op1, long op2)
|
||||
{
|
||||
return MultiplyDoublingSaturate(op1, op2, rounding: true, 0, subOp: false);
|
||||
|
|
Loading…
Reference in New Issue