From 55945c6e4377c944f452d240f4e1ad3495c90eb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20K=C3=B6plinger?= Date: Wed, 4 Oct 2023 14:29:02 +0200 Subject: [PATCH 01/21] Fix duplicate file name generated by GenerateHWIntrinsicTests_General.cs (#92954) When building the runtime tests we get a lot of warnings like this: > CSC : warning CS2002: Source file '/__w/1/s/artifacts/tests/coreclr/obj/AnyOS.x64.Checked/Managed/JIT/HardwareIntrinsics/General/Vector256_1/Vector256_1_ro/Vector256_1_ro/gen/op_LeftShift.Byte.cs' specified multiple times [/__w/1/s/src/tests/JIT/HardwareIntrinsics/General/Vector256_1/Vector256_1_ro.csproj] [/__w/1/s/src/tests/build.proj] It turns out that we were generating the same file name for multiple test cases (specifically when using VectorImmBinaryOperatorTest.template), added some validation to the test generator so we throw an error in this case. A few test cases also needed fixing so they compiled due to a missing closing parenthesis. --- .../GenerateHWIntrinsicTests_General.cs | 43 +++++++++++-------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/src/tests/Common/GenerateHWIntrinsicTests/GenerateHWIntrinsicTests_General.cs b/src/tests/Common/GenerateHWIntrinsicTests/GenerateHWIntrinsicTests_General.cs index 6b9e59e4e7ec3c..9fa0ffd13c6585 100644 --- a/src/tests/Common/GenerateHWIntrinsicTests/GenerateHWIntrinsicTests_General.cs +++ b/src/tests/Common/GenerateHWIntrinsicTests/GenerateHWIntrinsicTests_General.cs @@ -599,7 +599,7 @@ ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector64", ["Method"] = "op_LeftShift", ["Opcode"] = "<<", ["RetVectorType"] = "Vector64", ["RetBaseType"] = "Byte", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "Byte", ["Imm"] = "8", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetByte()", ["ValidateFirstResult"] = "result[0] != left[0]", ["ValidateRemainingResults"] = "result[i] != left[i]"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector64", ["Method"] = "op_LeftShift", ["Opcode"] = "<<", ["RetVectorType"] = "Vector64", ["RetBaseType"] = "Double", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "Double", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetDouble()", ["ValidateFirstResult"] = "BitConverter.DoubleToInt64Bits(result[0]) != (BitConverter.DoubleToInt64Bits(left[0]) << 1)", ["ValidateRemainingResults"] = "BitConverter.DoubleToInt64Bits(result[i]) != (BitConverter.DoubleToInt64Bits(left[i]) << 1)"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector64", ["Method"] = "op_LeftShift", ["Opcode"] = "<<", ["RetVectorType"] = "Vector64", ["RetBaseType"] = "Double", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "Double", ["Imm"] = "64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetDouble()", ["ValidateFirstResult"] = "BitConverter.DoubleToInt64Bits(result[0]) != BitConverter.DoubleToInt64Bits(left[0])", ["ValidateRemainingResults"] = "BitConverter.DoubleToInt64Bits(result[i]) != BitConverter.DoubleToInt64Bits(left[i])"}), - ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector64", ["Method"] = "op_LeftShift", ["Opcode"] = "<<", ["RetVectorType"] = "Vector64", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "Int16", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["ValidateFirstResult"] = "result[0] != (short)(left[0] << 1", ["ValidateRemainingResults"] = "result[i] != (short)(left[i] << 1"}), + ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector64", ["Method"] = "op_LeftShift", ["Opcode"] = "<<", ["RetVectorType"] = "Vector64", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "Int16", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["ValidateFirstResult"] = "result[0] != (short)(left[0] << 1)", ["ValidateRemainingResults"] = "result[i] != (short)(left[i] << 1)"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector64", ["Method"] = "op_LeftShift", ["Opcode"] = "<<", ["RetVectorType"] = "Vector64", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "Int16", ["Imm"] = "16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["ValidateFirstResult"] = "result[0] != left[0]", ["ValidateRemainingResults"] = "result[i] != left[i]"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector64", ["Method"] = "op_LeftShift", ["Opcode"] = "<<", ["RetVectorType"] = "Vector64", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "Int32", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["ValidateFirstResult"] = "result[0] != (int)(left[0] << 1)", ["ValidateRemainingResults"] = "result[i] != (int)(left[i] << 1)"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector64", ["Method"] = "op_LeftShift", ["Opcode"] = "<<", ["RetVectorType"] = "Vector64", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "Int32", ["Imm"] = "32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["ValidateFirstResult"] = "result[0] != left[0]", ["ValidateRemainingResults"] = "result[i] != left[i]"}), @@ -642,7 +642,7 @@ ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector64", ["Method"] = "op_RightShift", ["Opcode"] = ">>", ["RetVectorType"] = "Vector64", ["RetBaseType"] = "Byte", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "Byte", ["Imm"] = "8", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetByte()", ["ValidateFirstResult"] = "result[0] != left[0]", ["ValidateRemainingResults"] = "result[i] != left[i]"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector64", ["Method"] = "op_RightShift", ["Opcode"] = ">>", ["RetVectorType"] = "Vector64", ["RetBaseType"] = "Double", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "Double", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetDouble()", ["ValidateFirstResult"] = "BitConverter.DoubleToInt64Bits(result[0]) != (BitConverter.DoubleToInt64Bits(left[0]) >> 1)", ["ValidateRemainingResults"] = "BitConverter.DoubleToInt64Bits(result[i]) != (BitConverter.DoubleToInt64Bits(left[i]) >> 1)"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector64", ["Method"] = "op_RightShift", ["Opcode"] = ">>", ["RetVectorType"] = "Vector64", ["RetBaseType"] = "Double", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "Double", ["Imm"] = "64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetDouble()", ["ValidateFirstResult"] = "BitConverter.DoubleToInt64Bits(result[0]) != BitConverter.DoubleToInt64Bits(left[0])", ["ValidateRemainingResults"] = "BitConverter.DoubleToInt64Bits(result[i]) != BitConverter.DoubleToInt64Bits(left[i])"}), - ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector64", ["Method"] = "op_RightShift", ["Opcode"] = ">>", ["RetVectorType"] = "Vector64", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "Int16", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["ValidateFirstResult"] = "result[0] != (short)(left[0] >> 1", ["ValidateRemainingResults"] = "result[i] != (short)(left[i] >> 1"}), + ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector64", ["Method"] = "op_RightShift", ["Opcode"] = ">>", ["RetVectorType"] = "Vector64", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "Int16", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["ValidateFirstResult"] = "result[0] != (short)(left[0] >> 1)", ["ValidateRemainingResults"] = "result[i] != (short)(left[i] >> 1)"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector64", ["Method"] = "op_RightShift", ["Opcode"] = ">>", ["RetVectorType"] = "Vector64", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "Int16", ["Imm"] = "16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["ValidateFirstResult"] = "result[0] != left[0]", ["ValidateRemainingResults"] = "result[i] != left[i]"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector64", ["Method"] = "op_RightShift", ["Opcode"] = ">>", ["RetVectorType"] = "Vector64", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "Int32", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["ValidateFirstResult"] = "result[0] != (int)(left[0] >> 1)", ["ValidateRemainingResults"] = "result[i] != (int)(left[i] >> 1)"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector64", ["Method"] = "op_RightShift", ["Opcode"] = ">>", ["RetVectorType"] = "Vector64", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "Int32", ["Imm"] = "32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["ValidateFirstResult"] = "result[0] != left[0]", ["ValidateRemainingResults"] = "result[i] != left[i]"}), @@ -696,7 +696,7 @@ ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector64", ["Method"] = "op_UnsignedRightShift", ["Opcode"] = ">>>", ["RetVectorType"] = "Vector64", ["RetBaseType"] = "Byte", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "Byte", ["Imm"] = "8", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetByte()", ["ValidateFirstResult"] = "result[0] != left[0]", ["ValidateRemainingResults"] = "result[i] != left[i]"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector64", ["Method"] = "op_UnsignedRightShift", ["Opcode"] = ">>>", ["RetVectorType"] = "Vector64", ["RetBaseType"] = "Double", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "Double", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetDouble()", ["ValidateFirstResult"] = "BitConverter.DoubleToInt64Bits(result[0]) != (BitConverter.DoubleToInt64Bits(left[0]) >>> 1)", ["ValidateRemainingResults"] = "BitConverter.DoubleToInt64Bits(result[i]) != (BitConverter.DoubleToInt64Bits(left[i]) >>> 1)"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector64", ["Method"] = "op_UnsignedRightShift", ["Opcode"] = ">>>", ["RetVectorType"] = "Vector64", ["RetBaseType"] = "Double", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "Double", ["Imm"] = "64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetDouble()", ["ValidateFirstResult"] = "BitConverter.DoubleToInt64Bits(result[0]) != BitConverter.DoubleToInt64Bits(left[0])", ["ValidateRemainingResults"] = "BitConverter.DoubleToInt64Bits(result[i]) != BitConverter.DoubleToInt64Bits(left[i])"}), - ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector64", ["Method"] = "op_UnsignedRightShift", ["Opcode"] = ">>>", ["RetVectorType"] = "Vector64", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "Int16", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["ValidateFirstResult"] = "result[0] != (short)(left[0] >>> 1", ["ValidateRemainingResults"] = "result[i] != (short)(left[i] >>> 1"}), + ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector64", ["Method"] = "op_UnsignedRightShift", ["Opcode"] = ">>>", ["RetVectorType"] = "Vector64", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "Int16", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["ValidateFirstResult"] = "result[0] != (short)(left[0] >>> 1)", ["ValidateRemainingResults"] = "result[i] != (short)(left[i] >>> 1)"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector64", ["Method"] = "op_UnsignedRightShift", ["Opcode"] = ">>>", ["RetVectorType"] = "Vector64", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "Int16", ["Imm"] = "16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["ValidateFirstResult"] = "result[0] != left[0]", ["ValidateRemainingResults"] = "result[i] != left[i]"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector64", ["Method"] = "op_UnsignedRightShift", ["Opcode"] = ">>>", ["RetVectorType"] = "Vector64", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "Int32", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["ValidateFirstResult"] = "result[0] != (int)(left[0] >>> 1)", ["ValidateRemainingResults"] = "result[i] != (int)(left[i] >>> 1)"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector64", ["Method"] = "op_UnsignedRightShift", ["Opcode"] = ">>>", ["RetVectorType"] = "Vector64", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "Int32", ["Imm"] = "32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["ValidateFirstResult"] = "result[0] != left[0]", ["ValidateRemainingResults"] = "result[i] != left[i]"}), @@ -1345,7 +1345,7 @@ ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector128", ["Method"] = "op_LeftShift", ["Opcode"] = "<<", ["RetVectorType"] = "Vector128", ["RetBaseType"] = "Byte", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Byte", ["Imm"] = "8", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetByte()", ["ValidateFirstResult"] = "result[0] != left[0]", ["ValidateRemainingResults"] = "result[i] != left[i]"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector128", ["Method"] = "op_LeftShift", ["Opcode"] = "<<", ["RetVectorType"] = "Vector128", ["RetBaseType"] = "Double", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Double", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetDouble()", ["ValidateFirstResult"] = "BitConverter.DoubleToInt64Bits(result[0]) != (BitConverter.DoubleToInt64Bits(left[0]) << 1)", ["ValidateRemainingResults"] = "BitConverter.DoubleToInt64Bits(result[i]) != (BitConverter.DoubleToInt64Bits(left[i]) << 1)"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector128", ["Method"] = "op_LeftShift", ["Opcode"] = "<<", ["RetVectorType"] = "Vector128", ["RetBaseType"] = "Double", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Double", ["Imm"] = "64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetDouble()", ["ValidateFirstResult"] = "BitConverter.DoubleToInt64Bits(result[0]) != BitConverter.DoubleToInt64Bits(left[0])", ["ValidateRemainingResults"] = "BitConverter.DoubleToInt64Bits(result[i]) != BitConverter.DoubleToInt64Bits(left[i])"}), - ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector128", ["Method"] = "op_LeftShift", ["Opcode"] = "<<", ["RetVectorType"] = "Vector128", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Int16", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["ValidateFirstResult"] = "result[0] != (short)(left[0] << 1", ["ValidateRemainingResults"] = "result[i] != (short)(left[i] << 1"}), + ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector128", ["Method"] = "op_LeftShift", ["Opcode"] = "<<", ["RetVectorType"] = "Vector128", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Int16", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["ValidateFirstResult"] = "result[0] != (short)(left[0] << 1)", ["ValidateRemainingResults"] = "result[i] != (short)(left[i] << 1)"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector128", ["Method"] = "op_LeftShift", ["Opcode"] = "<<", ["RetVectorType"] = "Vector128", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Int16", ["Imm"] = "16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["ValidateFirstResult"] = "result[0] != left[0]", ["ValidateRemainingResults"] = "result[i] != left[i]"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector128", ["Method"] = "op_LeftShift", ["Opcode"] = "<<", ["RetVectorType"] = "Vector128", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Int32", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["ValidateFirstResult"] = "result[0] != (int)(left[0] << 1)", ["ValidateRemainingResults"] = "result[i] != (int)(left[i] << 1)"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector128", ["Method"] = "op_LeftShift", ["Opcode"] = "<<", ["RetVectorType"] = "Vector128", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Int32", ["Imm"] = "32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["ValidateFirstResult"] = "result[0] != left[0]", ["ValidateRemainingResults"] = "result[i] != left[i]"}), @@ -1388,7 +1388,7 @@ ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector128", ["Method"] = "op_RightShift", ["Opcode"] = ">>", ["RetVectorType"] = "Vector128", ["RetBaseType"] = "Byte", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Byte", ["Imm"] = "8", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetByte()", ["ValidateFirstResult"] = "result[0] != left[0]", ["ValidateRemainingResults"] = "result[i] != left[i]"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector128", ["Method"] = "op_RightShift", ["Opcode"] = ">>", ["RetVectorType"] = "Vector128", ["RetBaseType"] = "Double", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Double", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetDouble()", ["ValidateFirstResult"] = "BitConverter.DoubleToInt64Bits(result[0]) != (BitConverter.DoubleToInt64Bits(left[0]) >> 1)", ["ValidateRemainingResults"] = "BitConverter.DoubleToInt64Bits(result[i]) != (BitConverter.DoubleToInt64Bits(left[i]) >> 1)"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector128", ["Method"] = "op_RightShift", ["Opcode"] = ">>", ["RetVectorType"] = "Vector128", ["RetBaseType"] = "Double", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Double", ["Imm"] = "64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetDouble()", ["ValidateFirstResult"] = "BitConverter.DoubleToInt64Bits(result[0]) != BitConverter.DoubleToInt64Bits(left[0])", ["ValidateRemainingResults"] = "BitConverter.DoubleToInt64Bits(result[i]) != BitConverter.DoubleToInt64Bits(left[i])"}), - ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector128", ["Method"] = "op_RightShift", ["Opcode"] = ">>", ["RetVectorType"] = "Vector128", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Int16", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["ValidateFirstResult"] = "result[0] != (short)(left[0] >> 1", ["ValidateRemainingResults"] = "result[i] != (short)(left[i] >> 1"}), + ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector128", ["Method"] = "op_RightShift", ["Opcode"] = ">>", ["RetVectorType"] = "Vector128", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Int16", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["ValidateFirstResult"] = "result[0] != (short)(left[0] >> 1)", ["ValidateRemainingResults"] = "result[i] != (short)(left[i] >> 1)"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector128", ["Method"] = "op_RightShift", ["Opcode"] = ">>", ["RetVectorType"] = "Vector128", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Int16", ["Imm"] = "16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["ValidateFirstResult"] = "result[0] != left[0]", ["ValidateRemainingResults"] = "result[i] != left[i]"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector128", ["Method"] = "op_RightShift", ["Opcode"] = ">>", ["RetVectorType"] = "Vector128", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Int32", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["ValidateFirstResult"] = "result[0] != (int)(left[0] >> 1)", ["ValidateRemainingResults"] = "result[i] != (int)(left[i] >> 1)"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector128", ["Method"] = "op_RightShift", ["Opcode"] = ">>", ["RetVectorType"] = "Vector128", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Int32", ["Imm"] = "32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["ValidateFirstResult"] = "result[0] != left[0]", ["ValidateRemainingResults"] = "result[i] != left[i]"}), @@ -1442,7 +1442,7 @@ ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector128", ["Method"] = "op_UnsignedRightShift", ["Opcode"] = ">>>", ["RetVectorType"] = "Vector128", ["RetBaseType"] = "Byte", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Byte", ["Imm"] = "8", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetByte()", ["ValidateFirstResult"] = "result[0] != left[0]", ["ValidateRemainingResults"] = "result[i] != left[i]"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector128", ["Method"] = "op_UnsignedRightShift", ["Opcode"] = ">>>", ["RetVectorType"] = "Vector128", ["RetBaseType"] = "Double", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Double", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetDouble()", ["ValidateFirstResult"] = "BitConverter.DoubleToInt64Bits(result[0]) != (BitConverter.DoubleToInt64Bits(left[0]) >>> 1)", ["ValidateRemainingResults"] = "BitConverter.DoubleToInt64Bits(result[i]) != (BitConverter.DoubleToInt64Bits(left[i]) >>> 1)"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector128", ["Method"] = "op_UnsignedRightShift", ["Opcode"] = ">>>", ["RetVectorType"] = "Vector128", ["RetBaseType"] = "Double", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Double", ["Imm"] = "64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetDouble()", ["ValidateFirstResult"] = "BitConverter.DoubleToInt64Bits(result[0]) != BitConverter.DoubleToInt64Bits(left[0])", ["ValidateRemainingResults"] = "BitConverter.DoubleToInt64Bits(result[i]) != BitConverter.DoubleToInt64Bits(left[i])"}), - ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector128", ["Method"] = "op_UnsignedRightShift", ["Opcode"] = ">>>", ["RetVectorType"] = "Vector128", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Int16", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["ValidateFirstResult"] = "result[0] != (short)(left[0] >>> 1", ["ValidateRemainingResults"] = "result[i] != (short)(left[i] >>> 1"}), + ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector128", ["Method"] = "op_UnsignedRightShift", ["Opcode"] = ">>>", ["RetVectorType"] = "Vector128", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Int16", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["ValidateFirstResult"] = "result[0] != (short)(left[0] >>> 1)", ["ValidateRemainingResults"] = "result[i] != (short)(left[i] >>> 1)"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector128", ["Method"] = "op_UnsignedRightShift", ["Opcode"] = ">>>", ["RetVectorType"] = "Vector128", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Int16", ["Imm"] = "16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["ValidateFirstResult"] = "result[0] != left[0]", ["ValidateRemainingResults"] = "result[i] != left[i]"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector128", ["Method"] = "op_UnsignedRightShift", ["Opcode"] = ">>>", ["RetVectorType"] = "Vector128", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Int32", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["ValidateFirstResult"] = "result[0] != (int)(left[0] >>> 1)", ["ValidateRemainingResults"] = "result[i] != (int)(left[i] >>> 1)"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector128", ["Method"] = "op_UnsignedRightShift", ["Opcode"] = ">>>", ["RetVectorType"] = "Vector128", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Int32", ["Imm"] = "32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["ValidateFirstResult"] = "result[0] != left[0]", ["ValidateRemainingResults"] = "result[i] != left[i]"}), @@ -2087,7 +2087,7 @@ ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector256", ["Method"] = "op_LeftShift", ["Opcode"] = "<<", ["RetVectorType"] = "Vector256", ["RetBaseType"] = "Byte", ["Op1VectorType"] = "Vector256", ["Op1BaseType"] = "Byte", ["Imm"] = "8", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetByte()", ["ValidateFirstResult"] = "result[0] != left[0]", ["ValidateRemainingResults"] = "result[i] != left[i]"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector256", ["Method"] = "op_LeftShift", ["Opcode"] = "<<", ["RetVectorType"] = "Vector256", ["RetBaseType"] = "Double", ["Op1VectorType"] = "Vector256", ["Op1BaseType"] = "Double", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetDouble()", ["ValidateFirstResult"] = "BitConverter.DoubleToInt64Bits(result[0]) != (BitConverter.DoubleToInt64Bits(left[0]) << 1)", ["ValidateRemainingResults"] = "BitConverter.DoubleToInt64Bits(result[i]) != (BitConverter.DoubleToInt64Bits(left[i]) << 1)"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector256", ["Method"] = "op_LeftShift", ["Opcode"] = "<<", ["RetVectorType"] = "Vector256", ["RetBaseType"] = "Double", ["Op1VectorType"] = "Vector256", ["Op1BaseType"] = "Double", ["Imm"] = "64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetDouble()", ["ValidateFirstResult"] = "BitConverter.DoubleToInt64Bits(result[0]) != BitConverter.DoubleToInt64Bits(left[0])", ["ValidateRemainingResults"] = "BitConverter.DoubleToInt64Bits(result[i]) != BitConverter.DoubleToInt64Bits(left[i])"}), - ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector256", ["Method"] = "op_LeftShift", ["Opcode"] = "<<", ["RetVectorType"] = "Vector256", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector256", ["Op1BaseType"] = "Int16", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["ValidateFirstResult"] = "result[0] != (short)(left[0] << 1", ["ValidateRemainingResults"] = "result[i] != (short)(left[i] << 1"}), + ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector256", ["Method"] = "op_LeftShift", ["Opcode"] = "<<", ["RetVectorType"] = "Vector256", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector256", ["Op1BaseType"] = "Int16", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["ValidateFirstResult"] = "result[0] != (short)(left[0] << 1)", ["ValidateRemainingResults"] = "result[i] != (short)(left[i] << 1)"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector256", ["Method"] = "op_LeftShift", ["Opcode"] = "<<", ["RetVectorType"] = "Vector256", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector256", ["Op1BaseType"] = "Int16", ["Imm"] = "16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["ValidateFirstResult"] = "result[0] != left[0]", ["ValidateRemainingResults"] = "result[i] != left[i]"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector256", ["Method"] = "op_LeftShift", ["Opcode"] = "<<", ["RetVectorType"] = "Vector256", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector256", ["Op1BaseType"] = "Int32", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["ValidateFirstResult"] = "result[0] != (int)(left[0] << 1)", ["ValidateRemainingResults"] = "result[i] != (int)(left[i] << 1)"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector256", ["Method"] = "op_LeftShift", ["Opcode"] = "<<", ["RetVectorType"] = "Vector256", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector256", ["Op1BaseType"] = "Int32", ["Imm"] = "32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["ValidateFirstResult"] = "result[0] != left[0]", ["ValidateRemainingResults"] = "result[i] != left[i]"}), @@ -2130,7 +2130,7 @@ ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector256", ["Method"] = "op_RightShift", ["Opcode"] = ">>", ["RetVectorType"] = "Vector256", ["RetBaseType"] = "Byte", ["Op1VectorType"] = "Vector256", ["Op1BaseType"] = "Byte", ["Imm"] = "8", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetByte()", ["ValidateFirstResult"] = "result[0] != left[0]", ["ValidateRemainingResults"] = "result[i] != left[i]"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector256", ["Method"] = "op_RightShift", ["Opcode"] = ">>", ["RetVectorType"] = "Vector256", ["RetBaseType"] = "Double", ["Op1VectorType"] = "Vector256", ["Op1BaseType"] = "Double", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetDouble()", ["ValidateFirstResult"] = "BitConverter.DoubleToInt64Bits(result[0]) != (BitConverter.DoubleToInt64Bits(left[0]) >> 1)", ["ValidateRemainingResults"] = "BitConverter.DoubleToInt64Bits(result[i]) != (BitConverter.DoubleToInt64Bits(left[i]) >> 1)"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector256", ["Method"] = "op_RightShift", ["Opcode"] = ">>", ["RetVectorType"] = "Vector256", ["RetBaseType"] = "Double", ["Op1VectorType"] = "Vector256", ["Op1BaseType"] = "Double", ["Imm"] = "64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetDouble()", ["ValidateFirstResult"] = "BitConverter.DoubleToInt64Bits(result[0]) != BitConverter.DoubleToInt64Bits(left[0])", ["ValidateRemainingResults"] = "BitConverter.DoubleToInt64Bits(result[i]) != BitConverter.DoubleToInt64Bits(left[i])"}), - ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector256", ["Method"] = "op_RightShift", ["Opcode"] = ">>", ["RetVectorType"] = "Vector256", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector256", ["Op1BaseType"] = "Int16", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["ValidateFirstResult"] = "result[0] != (short)(left[0] >> 1", ["ValidateRemainingResults"] = "result[i] != (short)(left[i] >> 1"}), + ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector256", ["Method"] = "op_RightShift", ["Opcode"] = ">>", ["RetVectorType"] = "Vector256", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector256", ["Op1BaseType"] = "Int16", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["ValidateFirstResult"] = "result[0] != (short)(left[0] >> 1)", ["ValidateRemainingResults"] = "result[i] != (short)(left[i] >> 1)"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector256", ["Method"] = "op_RightShift", ["Opcode"] = ">>", ["RetVectorType"] = "Vector256", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector256", ["Op1BaseType"] = "Int16", ["Imm"] = "16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["ValidateFirstResult"] = "result[0] != left[0]", ["ValidateRemainingResults"] = "result[i] != left[i]"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector256", ["Method"] = "op_RightShift", ["Opcode"] = ">>", ["RetVectorType"] = "Vector256", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector256", ["Op1BaseType"] = "Int32", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["ValidateFirstResult"] = "result[0] != (int)(left[0] >> 1)", ["ValidateRemainingResults"] = "result[i] != (int)(left[i] >> 1)"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector256", ["Method"] = "op_RightShift", ["Opcode"] = ">>", ["RetVectorType"] = "Vector256", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector256", ["Op1BaseType"] = "Int32", ["Imm"] = "32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["ValidateFirstResult"] = "result[0] != left[0]", ["ValidateRemainingResults"] = "result[i] != left[i]"}), @@ -2184,7 +2184,7 @@ ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector256", ["Method"] = "op_UnsignedRightShift", ["Opcode"] = ">>>", ["RetVectorType"] = "Vector256", ["RetBaseType"] = "Byte", ["Op1VectorType"] = "Vector256", ["Op1BaseType"] = "Byte", ["Imm"] = "8", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetByte()", ["ValidateFirstResult"] = "result[0] != left[0]", ["ValidateRemainingResults"] = "result[i] != left[i]"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector256", ["Method"] = "op_UnsignedRightShift", ["Opcode"] = ">>>", ["RetVectorType"] = "Vector256", ["RetBaseType"] = "Double", ["Op1VectorType"] = "Vector256", ["Op1BaseType"] = "Double", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetDouble()", ["ValidateFirstResult"] = "BitConverter.DoubleToInt64Bits(result[0]) != (BitConverter.DoubleToInt64Bits(left[0]) >>> 1)", ["ValidateRemainingResults"] = "BitConverter.DoubleToInt64Bits(result[i]) != (BitConverter.DoubleToInt64Bits(left[i]) >>> 1)"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector256", ["Method"] = "op_UnsignedRightShift", ["Opcode"] = ">>>", ["RetVectorType"] = "Vector256", ["RetBaseType"] = "Double", ["Op1VectorType"] = "Vector256", ["Op1BaseType"] = "Double", ["Imm"] = "64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetDouble()", ["ValidateFirstResult"] = "BitConverter.DoubleToInt64Bits(result[0]) != BitConverter.DoubleToInt64Bits(left[0])", ["ValidateRemainingResults"] = "BitConverter.DoubleToInt64Bits(result[i]) != BitConverter.DoubleToInt64Bits(left[i])"}), - ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector256", ["Method"] = "op_UnsignedRightShift", ["Opcode"] = ">>>", ["RetVectorType"] = "Vector256", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector256", ["Op1BaseType"] = "Int16", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["ValidateFirstResult"] = "result[0] != (short)(left[0] >>> 1", ["ValidateRemainingResults"] = "result[i] != (short)(left[i] >>> 1"}), + ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector256", ["Method"] = "op_UnsignedRightShift", ["Opcode"] = ">>>", ["RetVectorType"] = "Vector256", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector256", ["Op1BaseType"] = "Int16", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["ValidateFirstResult"] = "result[0] != (short)(left[0] >>> 1)", ["ValidateRemainingResults"] = "result[i] != (short)(left[i] >>> 1)"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector256", ["Method"] = "op_UnsignedRightShift", ["Opcode"] = ">>>", ["RetVectorType"] = "Vector256", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector256", ["Op1BaseType"] = "Int16", ["Imm"] = "16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["ValidateFirstResult"] = "result[0] != left[0]", ["ValidateRemainingResults"] = "result[i] != left[i]"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector256", ["Method"] = "op_UnsignedRightShift", ["Opcode"] = ">>>", ["RetVectorType"] = "Vector256", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector256", ["Op1BaseType"] = "Int32", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["ValidateFirstResult"] = "result[0] != (int)(left[0] >>> 1)", ["ValidateRemainingResults"] = "result[i] != (int)(left[i] >>> 1)"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector256", ["Method"] = "op_UnsignedRightShift", ["Opcode"] = ">>>", ["RetVectorType"] = "Vector256", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector256", ["Op1BaseType"] = "Int32", ["Imm"] = "32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["ValidateFirstResult"] = "result[0] != left[0]", ["ValidateRemainingResults"] = "result[i] != left[i]"}), @@ -2829,7 +2829,7 @@ ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector512", ["Method"] = "op_LeftShift", ["Opcode"] = "<<", ["RetVectorType"] = "Vector512", ["RetBaseType"] = "Byte", ["Op1VectorType"] = "Vector512", ["Op1BaseType"] = "Byte", ["Imm"] = "8", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetByte()", ["ValidateFirstResult"] = "result[0] != left[0]", ["ValidateRemainingResults"] = "result[i] != left[i]"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector512", ["Method"] = "op_LeftShift", ["Opcode"] = "<<", ["RetVectorType"] = "Vector512", ["RetBaseType"] = "Double", ["Op1VectorType"] = "Vector512", ["Op1BaseType"] = "Double", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetDouble()", ["ValidateFirstResult"] = "BitConverter.DoubleToInt64Bits(result[0]) != (BitConverter.DoubleToInt64Bits(left[0]) << 1)", ["ValidateRemainingResults"] = "BitConverter.DoubleToInt64Bits(result[i]) != (BitConverter.DoubleToInt64Bits(left[i]) << 1)"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector512", ["Method"] = "op_LeftShift", ["Opcode"] = "<<", ["RetVectorType"] = "Vector512", ["RetBaseType"] = "Double", ["Op1VectorType"] = "Vector512", ["Op1BaseType"] = "Double", ["Imm"] = "64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetDouble()", ["ValidateFirstResult"] = "BitConverter.DoubleToInt64Bits(result[0]) != BitConverter.DoubleToInt64Bits(left[0])", ["ValidateRemainingResults"] = "BitConverter.DoubleToInt64Bits(result[i]) != BitConverter.DoubleToInt64Bits(left[i])"}), - ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector512", ["Method"] = "op_LeftShift", ["Opcode"] = "<<", ["RetVectorType"] = "Vector512", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector512", ["Op1BaseType"] = "Int16", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["ValidateFirstResult"] = "result[0] != (short)(left[0] << 1", ["ValidateRemainingResults"] = "result[i] != (short)(left[i] << 1"}), + ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector512", ["Method"] = "op_LeftShift", ["Opcode"] = "<<", ["RetVectorType"] = "Vector512", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector512", ["Op1BaseType"] = "Int16", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["ValidateFirstResult"] = "result[0] != (short)(left[0] << 1)", ["ValidateRemainingResults"] = "result[i] != (short)(left[i] << 1)"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector512", ["Method"] = "op_LeftShift", ["Opcode"] = "<<", ["RetVectorType"] = "Vector512", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector512", ["Op1BaseType"] = "Int16", ["Imm"] = "16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["ValidateFirstResult"] = "result[0] != left[0]", ["ValidateRemainingResults"] = "result[i] != left[i]"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector512", ["Method"] = "op_LeftShift", ["Opcode"] = "<<", ["RetVectorType"] = "Vector512", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector512", ["Op1BaseType"] = "Int32", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["ValidateFirstResult"] = "result[0] != (int)(left[0] << 1)", ["ValidateRemainingResults"] = "result[i] != (int)(left[i] << 1)"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector512", ["Method"] = "op_LeftShift", ["Opcode"] = "<<", ["RetVectorType"] = "Vector512", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector512", ["Op1BaseType"] = "Int32", ["Imm"] = "32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["ValidateFirstResult"] = "result[0] != left[0]", ["ValidateRemainingResults"] = "result[i] != left[i]"}), @@ -2872,7 +2872,7 @@ ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector512", ["Method"] = "op_RightShift", ["Opcode"] = ">>", ["RetVectorType"] = "Vector512", ["RetBaseType"] = "Byte", ["Op1VectorType"] = "Vector512", ["Op1BaseType"] = "Byte", ["Imm"] = "8", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetByte()", ["ValidateFirstResult"] = "result[0] != left[0]", ["ValidateRemainingResults"] = "result[i] != left[i]"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector512", ["Method"] = "op_RightShift", ["Opcode"] = ">>", ["RetVectorType"] = "Vector512", ["RetBaseType"] = "Double", ["Op1VectorType"] = "Vector512", ["Op1BaseType"] = "Double", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetDouble()", ["ValidateFirstResult"] = "BitConverter.DoubleToInt64Bits(result[0]) != (BitConverter.DoubleToInt64Bits(left[0]) >> 1)", ["ValidateRemainingResults"] = "BitConverter.DoubleToInt64Bits(result[i]) != (BitConverter.DoubleToInt64Bits(left[i]) >> 1)"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector512", ["Method"] = "op_RightShift", ["Opcode"] = ">>", ["RetVectorType"] = "Vector512", ["RetBaseType"] = "Double", ["Op1VectorType"] = "Vector512", ["Op1BaseType"] = "Double", ["Imm"] = "64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetDouble()", ["ValidateFirstResult"] = "BitConverter.DoubleToInt64Bits(result[0]) != BitConverter.DoubleToInt64Bits(left[0])", ["ValidateRemainingResults"] = "BitConverter.DoubleToInt64Bits(result[i]) != BitConverter.DoubleToInt64Bits(left[i])"}), - ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector512", ["Method"] = "op_RightShift", ["Opcode"] = ">>", ["RetVectorType"] = "Vector512", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector512", ["Op1BaseType"] = "Int16", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["ValidateFirstResult"] = "result[0] != (short)(left[0] >> 1", ["ValidateRemainingResults"] = "result[i] != (short)(left[i] >> 1"}), + ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector512", ["Method"] = "op_RightShift", ["Opcode"] = ">>", ["RetVectorType"] = "Vector512", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector512", ["Op1BaseType"] = "Int16", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["ValidateFirstResult"] = "result[0] != (short)(left[0] >> 1)", ["ValidateRemainingResults"] = "result[i] != (short)(left[i] >> 1)"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector512", ["Method"] = "op_RightShift", ["Opcode"] = ">>", ["RetVectorType"] = "Vector512", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector512", ["Op1BaseType"] = "Int16", ["Imm"] = "16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["ValidateFirstResult"] = "result[0] != left[0]", ["ValidateRemainingResults"] = "result[i] != left[i]"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector512", ["Method"] = "op_RightShift", ["Opcode"] = ">>", ["RetVectorType"] = "Vector512", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector512", ["Op1BaseType"] = "Int32", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["ValidateFirstResult"] = "result[0] != (int)(left[0] >> 1)", ["ValidateRemainingResults"] = "result[i] != (int)(left[i] >> 1)"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector512", ["Method"] = "op_RightShift", ["Opcode"] = ">>", ["RetVectorType"] = "Vector512", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector512", ["Op1BaseType"] = "Int32", ["Imm"] = "32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["ValidateFirstResult"] = "result[0] != left[0]", ["ValidateRemainingResults"] = "result[i] != left[i]"}), @@ -2926,7 +2926,7 @@ ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector512", ["Method"] = "op_UnsignedRightShift", ["Opcode"] = ">>>", ["RetVectorType"] = "Vector512", ["RetBaseType"] = "Byte", ["Op1VectorType"] = "Vector512", ["Op1BaseType"] = "Byte", ["Imm"] = "8", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetByte()", ["ValidateFirstResult"] = "result[0] != left[0]", ["ValidateRemainingResults"] = "result[i] != left[i]"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector512", ["Method"] = "op_UnsignedRightShift", ["Opcode"] = ">>>", ["RetVectorType"] = "Vector512", ["RetBaseType"] = "Double", ["Op1VectorType"] = "Vector512", ["Op1BaseType"] = "Double", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetDouble()", ["ValidateFirstResult"] = "BitConverter.DoubleToInt64Bits(result[0]) != (BitConverter.DoubleToInt64Bits(left[0]) >>> 1)", ["ValidateRemainingResults"] = "BitConverter.DoubleToInt64Bits(result[i]) != (BitConverter.DoubleToInt64Bits(left[i]) >>> 1)"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector512", ["Method"] = "op_UnsignedRightShift", ["Opcode"] = ">>>", ["RetVectorType"] = "Vector512", ["RetBaseType"] = "Double", ["Op1VectorType"] = "Vector512", ["Op1BaseType"] = "Double", ["Imm"] = "64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetDouble()", ["ValidateFirstResult"] = "BitConverter.DoubleToInt64Bits(result[0]) != BitConverter.DoubleToInt64Bits(left[0])", ["ValidateRemainingResults"] = "BitConverter.DoubleToInt64Bits(result[i]) != BitConverter.DoubleToInt64Bits(left[i])"}), - ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector512", ["Method"] = "op_UnsignedRightShift", ["Opcode"] = ">>>", ["RetVectorType"] = "Vector512", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector512", ["Op1BaseType"] = "Int16", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["ValidateFirstResult"] = "result[0] != (short)(left[0] >>> 1", ["ValidateRemainingResults"] = "result[i] != (short)(left[i] >>> 1"}), + ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector512", ["Method"] = "op_UnsignedRightShift", ["Opcode"] = ">>>", ["RetVectorType"] = "Vector512", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector512", ["Op1BaseType"] = "Int16", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["ValidateFirstResult"] = "result[0] != (short)(left[0] >>> 1)", ["ValidateRemainingResults"] = "result[i] != (short)(left[i] >>> 1)"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector512", ["Method"] = "op_UnsignedRightShift", ["Opcode"] = ">>>", ["RetVectorType"] = "Vector512", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector512", ["Op1BaseType"] = "Int16", ["Imm"] = "16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["ValidateFirstResult"] = "result[0] != left[0]", ["ValidateRemainingResults"] = "result[i] != left[i]"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector512", ["Method"] = "op_UnsignedRightShift", ["Opcode"] = ">>>", ["RetVectorType"] = "Vector512", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector512", ["Op1BaseType"] = "Int32", ["Imm"] = "1", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["ValidateFirstResult"] = "result[0] != (int)(left[0] >>> 1)", ["ValidateRemainingResults"] = "result[i] != (int)(left[i] >>> 1)"}), ("VectorImmBinaryOperatorTest.template", new Dictionary { ["Isa"] = "Vector512", ["Method"] = "op_UnsignedRightShift", ["Opcode"] = ">>>", ["RetVectorType"] = "Vector512", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector512", ["Op1BaseType"] = "Int32", ["Imm"] = "32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["ValidateFirstResult"] = "result[0] != left[0]", ["ValidateRemainingResults"] = "result[i] != left[i]"}), @@ -3155,16 +3155,21 @@ void ProcessInputs(string groupName, (string templateFileName, Dictionary(); + + foreach (var input in inputs) { - foreach (var input in inputs) + string fileName = ProcessInput(groupName, input); + if (!testList.Add(fileName)) { - ProcessInput(testListFile, groupName, input); + throw new InvalidOperationException($"Duplicate test file name: {fileName}"); } } + + File.WriteAllLines(testListFileName, testList); } -void ProcessInput(StreamWriter testListFile, string groupName, (string templateFileName, Dictionary templateData) input) +string ProcessInput(string groupName, (string templateFileName, Dictionary templateData) input) { var testName = ""; @@ -3193,6 +3198,10 @@ void ProcessInput(StreamWriter testListFile, string groupName, (string templateF { testName = $"{input.templateData["Method"]}.{input.templateData["Op1BaseType"]}"; } + else if ((input.templateFileName == "VectorImmBinaryOperatorTest.template")) + { + testName = $"{input.templateData["Method"]}.{input.templateData["RetBaseType"]}.Imm{input.templateData["Imm"]}"; + } else { testName = $"{input.templateData["Method"]}.{input.templateData["RetBaseType"]}"; @@ -3209,6 +3218,6 @@ void ProcessInput(StreamWriter testListFile, string groupName, (string templateF } template = template.Replace("namespace JIT.HardwareIntrinsics.General", $"namespace JIT.HardwareIntrinsics.General._{groupName}"); - testListFile.WriteLine(fileName); File.WriteAllText(fileName, template); + return fileName; } From 64862501b238512db10eff9ed4b05ba94412974d Mon Sep 17 00:00:00 2001 From: Jan Dupej <109523496+jandupej@users.noreply.github.com> Date: Wed, 4 Oct 2023 14:49:41 +0200 Subject: [PATCH 02/21] [mono][jit] Fuse SIMD extract and insert on arm64 (#92714) * Fuse extract and insert into arm64 ins. * Extending to vector4. * Ins index is now a function. Removed newline. * Refactoring. * SIMD extract ops have no side offects (to facilitate their elimination). Fixed bug. * Fixed arm32 build. --- src/mono/mono/mini/method-to-ir.c | 8 ++++ src/mono/mono/mini/mini-arm64.c | 8 ++-- src/mono/mono/mini/simd-intrinsics.c | 64 ++++++++++++++++++---------- 3 files changed, 54 insertions(+), 26 deletions(-) diff --git a/src/mono/mono/mini/method-to-ir.c b/src/mono/mono/mini/method-to-ir.c index ba9dd8f442c7fd..fd8a31e1e4360e 100644 --- a/src/mono/mono/mini/method-to-ir.c +++ b/src/mono/mono/mini/method-to-ir.c @@ -12746,6 +12746,14 @@ mono_op_no_side_effects (int opcode) case OP_NOT_NULL: case OP_IL_SEQ_POINT: case OP_RTTYPE: +#if defined(TARGET_X86) || defined(TARGET_AMD64) || defined(TARGET_WASM) || defined(TARGET_ARM64) + case OP_EXTRACT_I1: + case OP_EXTRACT_I2: + case OP_EXTRACT_I4: + case OP_EXTRACT_I8: + case OP_EXTRACT_R4: + case OP_EXTRACT_R8: +#endif return TRUE; default: return FALSE; diff --git a/src/mono/mono/mini/mini-arm64.c b/src/mono/mono/mini/mini-arm64.c index 481f88df71d4ac..2fac9738f61c25 100644 --- a/src/mono/mono/mini/mini-arm64.c +++ b/src/mono/mono/mini/mini-arm64.c @@ -4061,18 +4061,20 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb) break; } + int idx_to = GTMREG_TO_UINT32 (ins->inst_c0) & 0xff; + int idx_from = GTMREG_TO_UINT32 (ins->inst_c0) >> 8; if (dreg != sreg1) { if (dreg != sreg2) { arm_neon_mov (code, dreg, sreg1); - arm_neon_ins_e(code, t, dreg, sreg2, GTMREG_TO_UINT32 (ins->inst_c0), 0); + arm_neon_ins_e(code, t, dreg, sreg2, idx_to, idx_from); } else { arm_neon_mov (code, NEON_TMP_REG, sreg1); - arm_neon_ins_e(code, t, NEON_TMP_REG, sreg2, GTMREG_TO_UINT32 (ins->inst_c0), 0); + arm_neon_ins_e(code, t, NEON_TMP_REG, sreg2, idx_to, idx_from); arm_neon_mov (code, dreg, NEON_TMP_REG); } } else { g_assert (dreg != sreg2); - arm_neon_ins_e(code, t, dreg, sreg2, GTMREG_TO_UINT32 (ins->inst_c0), 0); + arm_neon_ins_e(code, t, dreg, sreg2, idx_to, idx_from); } break; } diff --git a/src/mono/mono/mini/simd-intrinsics.c b/src/mono/mono/mini/simd-intrinsics.c index 64da14a1612e4f..9d23d40f73506a 100644 --- a/src/mono/mono/mini/simd-intrinsics.c +++ b/src/mono/mono/mini/simd-intrinsics.c @@ -1068,21 +1068,42 @@ emit_hardware_intrinsics ( return custom_emit (cfg, fsig, args, klass, intrin_group, info, id, arg0_type, is_64bit); } +static MonoInst* +emit_vector_insert_element ( + MonoCompile* cfg, MonoClass* vklass, MonoInst* ins, MonoTypeEnum type, MonoInst* element, + int index, gboolean is_zero_inited) +{ + int op = type_to_insert_op (type); + + if (is_zero_inited && is_zero_const (element)) { + // element already set to zero +#ifdef TARGET_ARM64 + } else if (!COMPILE_LLVM (cfg) && element->opcode == type_to_extract_op (type) && + (type == MONO_TYPE_R4 || type == MONO_TYPE_R8)) { + // OP_INSERT_Ix inserts from GP reg, not SIMD. Cannot optimize for int types. + ins = emit_simd_ins (cfg, vklass, op, ins->dreg, element->sreg1); + ins->inst_c0 = index | ((element->inst_c0) << 8); + ins->inst_c1 = type; +#endif + } else { + ins = emit_simd_ins (cfg, vklass, op, ins->dreg, element->dreg); + ins->inst_c0 = index; + ins->inst_c1 = type; + } + + return ins; +} + static MonoInst * emit_vector_create_elementwise ( MonoCompile *cfg, MonoMethodSignature *fsig, MonoType *vtype, MonoTypeEnum type, MonoInst **args) { - int op = type_to_insert_op (type); MonoClass *vklass = mono_class_from_mono_type_internal (vtype); MonoInst *ins = emit_xzero (cfg, vklass); - for (int i = 0; i < fsig->param_count; ++i) { - if (!is_zero_const (args [i])) { - ins = emit_simd_ins (cfg, vklass, op, ins->dreg, args [i]->dreg); - ins->inst_c0 = i; - ins->inst_c1 = type; - } - } + for (int i = 0; i < fsig->param_count; ++i) + ins = emit_vector_insert_element (cfg, vklass, ins, type, args[i], i, TRUE); + return ins; } @@ -2282,17 +2303,12 @@ emit_sri_vector (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSignature *fsi if (args [1]->opcode == OP_ICONST) { // If the index is provably a constant, we can generate vastly better code. int index = GTMREG_TO_INT (args[1]->inst_c0); - if (index < 0 || index >= elems) { MONO_EMIT_NEW_BIALU_IMM (cfg, OP_COMPARE_IMM, -1, args [1]->dreg, elems); MONO_EMIT_NEW_COND_EXC (cfg, GE_UN, "ArgumentOutOfRangeException"); } - int insert_op = type_to_insert_op (arg0_type); - MonoInst *ins = emit_simd_ins (cfg, klass, insert_op, args [0]->dreg, args [2]->dreg); - ins->inst_c0 = index; - ins->inst_c1 = arg0_type; - return ins; + return emit_vector_insert_element (cfg, klass, args [0], arg0_type, args [2], index, FALSE); } if (!COMPILE_LLVM (cfg) && fsig->params [0]->type != MONO_TYPE_GENERICINST) @@ -2690,11 +2706,9 @@ emit_vector_2_3_4 (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSignature *f ins->dreg = dreg; ins->inst_c1 = MONO_TYPE_R4; - for (int i = 1; i < fsig->param_count; ++i) { - ins = emit_simd_ins (cfg, klass, OP_INSERT_R4, ins->dreg, args [i + 1]->dreg); - ins->inst_c0 = i; - ins->inst_c1 = MONO_TYPE_R4; - } + for (int i = 1; i < fsig->param_count; ++i) + ins = emit_vector_insert_element (cfg, klass, ins, MONO_TYPE_R4, args [i + 1], i, FALSE); + ins->dreg = dreg; if (indirect) { @@ -2835,10 +2849,14 @@ emit_vector_2_3_4 (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSignature *f MONO_EMIT_NEW_COND_EXC (cfg, GE_UN, "ArgumentOutOfRangeException"); } - ins = emit_simd_ins (cfg, klass, OP_INSERT_R4, dreg, args [2]->dreg); - ins->inst_c0 = index; - ins->inst_c1 = MONO_TYPE_R4; - ins->dreg = dreg; + if (args [0]->dreg == dreg) { + ins = emit_vector_insert_element (cfg, klass, args [0], MONO_TYPE_R4, args [2], index, FALSE); + } else { + ins = emit_simd_ins (cfg, klass, OP_INSERT_R4, dreg, args [2]->dreg); + ins->inst_c0 = index; + ins->inst_c1 = MONO_TYPE_R4; + ins->dreg = dreg; + } if (indirect) { EMIT_NEW_STORE_MEMBASE (cfg, ins, OP_STOREX_MEMBASE, args [0]->dreg, 0, dreg); From aa2d13ab1789892c9fe7c2dbcd57fea035b1c0e0 Mon Sep 17 00:00:00 2001 From: Jakob Botsch Nielsen Date: Wed, 4 Oct 2023 17:11:05 +0200 Subject: [PATCH 03/21] SPMI: Fix superpmi.py result assert (#92997) The string is actually "Error", not "Failure" --- src/coreclr/scripts/superpmi.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/coreclr/scripts/superpmi.py b/src/coreclr/scripts/superpmi.py index 4113c97108b865..5fd07b264c1bc2 100644 --- a/src/coreclr/scripts/superpmi.py +++ b/src/coreclr/scripts/superpmi.py @@ -1663,7 +1663,7 @@ def aggregate_replay_metrics(self, details): elif result == "Miss": num_misses += 1 else: - assert(result == "Failure") + assert(result == "Error") num_failures += 1 return {"Overall": {"Successful compiles": num_successes, "Missing compiles": num_misses, "Failing compiles": num_failures}} @@ -1780,7 +1780,7 @@ def aggregate_diff_metrics(details): elif base_result == "Miss": base_dict["Missing compiles"] += 1 else: - assert(base_result == "Failure") + assert(base_result == "Error") base_dict["Failing compiles"] += 1 diff_result = row["Diff result"] @@ -1789,7 +1789,7 @@ def aggregate_diff_metrics(details): elif diff_result == "Miss": diff_dict["Missing compiles"] += 1 else: - assert(diff_result == "Failure") + assert(diff_result == "Error") diff_dict["Failing compiles"] += 1 if base_result == "Success" and diff_result == "Success": From 2702df328c065060003ad73100155e34af0233fa Mon Sep 17 00:00:00 2001 From: Parker Bibus Date: Wed, 4 Oct 2023 10:41:37 -0700 Subject: [PATCH 04/21] Cleanup iOS scenarios post HybridGlobalization scenario addition (#92904) * Move iOS Mono and NativeAOT runs to their own build+run file for cleanliness. Also fix the format of the weekly iOS HybridGlobalization build runs so all artifacts are built. --- eng/pipelines/coreclr/perf-non-wasm-jobs.yml | 308 +----------------- .../build-and-run-perf-ios-scenarios.yml | 159 +++++++++ 2 files changed, 167 insertions(+), 300 deletions(-) create mode 100644 eng/pipelines/coreclr/templates/build-and-run-perf-ios-scenarios.yml diff --git a/eng/pipelines/coreclr/perf-non-wasm-jobs.yml b/eng/pipelines/coreclr/perf-non-wasm-jobs.yml index 738db29021c5fa..ce5321e60aa293 100644 --- a/eng/pipelines/coreclr/perf-non-wasm-jobs.yml +++ b/eng/pipelines/coreclr/perf-non-wasm-jobs.yml @@ -2,159 +2,10 @@ jobs: - ${{ if and(ne(variables['System.TeamProject'], 'public'), in(variables['Build.Reason'], 'Schedule')) }}: - # build mono iOS scenarios HybridGlobalization - - template: /eng/pipelines/common/platform-matrix.yml + # Build and run iOS Mono and NativeAOT scenarios with HybridGlobalization + - template: /eng/pipelines/coreclr/templates/build-and-run-perf-ios-scenarios.yml parameters: - jobTemplate: /eng/pipelines/common/global-build-job.yml - buildConfig: release - runtimeFlavor: mono - platforms: - - ios_arm64 - jobParameters: - buildArgs: -s mono+libs+host+packs -c $(_BuildConfig) - nameSuffix: iOSMono - isOfficialBuild: false - extraStepsTemplate: /eng/pipelines/coreclr/templates/build-perf-sample-apps.yml - extraStepsParameters: - rootFolder: '$(Build.SourcesDirectory)/artifacts/' - includeRootFolder: true - displayName: iOS Mono Artifacts - artifactName: iOSMonoarm64 - archiveExtension: '.tar.gz' - archiveType: tar - tarCompression: gz - hybridGlobalization: True - - # build NativeAOT iOS scenarios HybridGlobalization - - template: /eng/pipelines/common/platform-matrix.yml - parameters: - jobTemplate: /eng/pipelines/common/global-build-job.yml - buildConfig: release - runtimeFlavor: coreclr - platforms: - - ios_arm64 - jobParameters: - buildArgs: --cross -s clr.alljits+clr.tools+clr.nativeaotruntime+clr.nativeaotlibs+libs -c $(_BuildConfig) - nameSuffix: iOSNativeAOT - isOfficialBuild: false - extraStepsTemplate: /eng/pipelines/coreclr/templates/build-perf-sample-apps.yml - extraStepsParameters: - rootFolder: '$(Build.SourcesDirectory)/artifacts/' - includeRootFolder: true - displayName: iOS NativeAOT Artifacts - artifactName: iOSNativeAOTarm64 - archiveExtension: '.tar.gz' - archiveType: tar - tarCompression: gz - hybridGlobalization: True - - # run mono iOS scenarios scenarios HybridGlobalization - - template: /eng/pipelines/common/platform-matrix.yml - parameters: - jobTemplate: /eng/pipelines/coreclr/templates/perf-job.yml - buildConfig: release - runtimeFlavor: mono - platforms: - - osx_x64 - jobParameters: - testGroup: perf - runtimeType: iOSMono - projectFile: ios_scenarios.proj - runKind: ios_scenarios - runJobTemplate: /eng/pipelines/coreclr/templates/run-scenarios-job.yml - logicalmachine: 'perfiphone12mini' - iOSLlvmBuild: False - iOSStripSymbols: False - hybridGlobalization: True - - - template: /eng/pipelines/common/platform-matrix.yml - parameters: - jobTemplate: /eng/pipelines/coreclr/templates/perf-job.yml - buildConfig: release - runtimeFlavor: mono - platforms: - - osx_x64 - jobParameters: - testGroup: perf - runtimeType: iOSMono - projectFile: ios_scenarios.proj - runKind: ios_scenarios - runJobTemplate: /eng/pipelines/coreclr/templates/run-scenarios-job.yml - logicalmachine: 'perfiphone12mini' - iOSLlvmBuild: False - iOSStripSymbols: True - hybridGlobalization: True - - - template: /eng/pipelines/common/platform-matrix.yml - parameters: - jobTemplate: /eng/pipelines/coreclr/templates/perf-job.yml - buildConfig: release - runtimeFlavor: mono - platforms: - - osx_x64 - jobParameters: - testGroup: perf - runtimeType: iOSMono - projectFile: ios_scenarios.proj - runKind: ios_scenarios - runJobTemplate: /eng/pipelines/coreclr/templates/run-scenarios-job.yml - logicalmachine: 'perfiphone12mini' - iOSLlvmBuild: True - iOSStripSymbols: False - hybridGlobalization: True - - - template: /eng/pipelines/common/platform-matrix.yml - parameters: - jobTemplate: /eng/pipelines/coreclr/templates/perf-job.yml - buildConfig: release - runtimeFlavor: mono - platforms: - - osx_x64 - jobParameters: - testGroup: perf - runtimeType: iOSMono - projectFile: ios_scenarios.proj - runKind: ios_scenarios - runJobTemplate: /eng/pipelines/coreclr/templates/run-scenarios-job.yml - logicalmachine: 'perfiphone12mini' - iOSLlvmBuild: True - iOSStripSymbols: True - hybridGlobalization: True - - # run NativeAOT iOS scenarios HybridGlobalization - - template: /eng/pipelines/common/platform-matrix.yml - parameters: - jobTemplate: /eng/pipelines/coreclr/templates/perf-job.yml - buildConfig: release - runtimeFlavor: coreclr - platforms: - - osx_x64 - jobParameters: - testGroup: perf - runtimeType: iOSNativeAOT - projectFile: ios_scenarios.proj - runKind: ios_scenarios - runJobTemplate: /eng/pipelines/coreclr/templates/run-scenarios-job.yml - logicalmachine: 'perfiphone12mini' - iOSStripSymbols: False - hybridGlobalization: True - - - template: /eng/pipelines/common/platform-matrix.yml - parameters: - jobTemplate: /eng/pipelines/coreclr/templates/perf-job.yml - buildConfig: release - runtimeFlavor: coreclr - platforms: - - osx_x64 - jobParameters: - testGroup: perf - runtimeType: iOSNativeAOT - projectFile: ios_scenarios.proj - runKind: ios_scenarios - runJobTemplate: /eng/pipelines/coreclr/templates/run-scenarios-job.yml - logicalmachine: 'perfiphone12mini' - iOSStripSymbols: True - hybridGlobalization: True + hybridGlobalization: True - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'Schedule')) }}: @@ -217,52 +68,6 @@ jobs: archiveType: tar tarCompression: gz - # build mono iOS scenarios - - template: /eng/pipelines/common/platform-matrix.yml - parameters: - jobTemplate: /eng/pipelines/common/global-build-job.yml - buildConfig: release - runtimeFlavor: mono - platforms: - - ios_arm64 - jobParameters: - buildArgs: -s mono+libs+host+packs -c $(_BuildConfig) - nameSuffix: iOSMono - isOfficialBuild: false - postBuildSteps: - - template: /eng/pipelines/coreclr/templates/build-perf-sample-apps.yml - parameters: - rootFolder: '$(Build.SourcesDirectory)/artifacts/' - includeRootFolder: true - displayName: iOS Mono Artifacts - artifactName: iOSMonoarm64 - archiveExtension: '.tar.gz' - archiveType: tar - tarCompression: gz - - # build NativeAOT iOS scenarios - - template: /eng/pipelines/common/platform-matrix.yml - parameters: - jobTemplate: /eng/pipelines/common/global-build-job.yml - buildConfig: release - runtimeFlavor: coreclr - platforms: - - ios_arm64 - jobParameters: - buildArgs: --cross -s clr.alljits+clr.tools+clr.nativeaotruntime+clr.nativeaotlibs+libs -c $(_BuildConfig) - nameSuffix: iOSNativeAOT - isOfficialBuild: false - postBuildSteps: - - template: /eng/pipelines/coreclr/templates/build-perf-sample-apps.yml - parameters: - rootFolder: '$(Build.SourcesDirectory)/artifacts/' - includeRootFolder: true - displayName: iOS NativeAOT Artifacts - artifactName: iOSNativeAOTarm64 - archiveExtension: '.tar.gz' - archiveType: tar - tarCompression: gz - # build mono - template: /eng/pipelines/common/platform-matrix.yml parameters: @@ -272,6 +77,11 @@ jobs: platforms: - linux_x64 + # Build and run iOS Mono and NativeAOT scenarios without HybridGlobalization + - template: /eng/pipelines/coreclr/templates/build-and-run-perf-ios-scenarios.yml + parameters: + hybridGlobalization: False + # run android scenarios - template: /eng/pipelines/common/platform-matrix.yml parameters: @@ -288,108 +98,6 @@ jobs: runJobTemplate: /eng/pipelines/coreclr/templates/run-scenarios-job.yml logicalmachine: 'perfpixel4a' - # run mono iOS scenarios scenarios - - template: /eng/pipelines/common/platform-matrix.yml - parameters: - jobTemplate: /eng/pipelines/coreclr/templates/perf-job.yml - buildConfig: release - runtimeFlavor: mono - platforms: - - osx_x64 - jobParameters: - testGroup: perf - runtimeType: iOSMono - projectFile: ios_scenarios.proj - runKind: ios_scenarios - runJobTemplate: /eng/pipelines/coreclr/templates/run-scenarios-job.yml - logicalmachine: 'perfiphone12mini' - iOSLlvmBuild: False - iOSStripSymbols: False - - - template: /eng/pipelines/common/platform-matrix.yml - parameters: - jobTemplate: /eng/pipelines/coreclr/templates/perf-job.yml - buildConfig: release - runtimeFlavor: mono - platforms: - - osx_x64 - jobParameters: - testGroup: perf - runtimeType: iOSMono - projectFile: ios_scenarios.proj - runKind: ios_scenarios - runJobTemplate: /eng/pipelines/coreclr/templates/run-scenarios-job.yml - logicalmachine: 'perfiphone12mini' - iOSLlvmBuild: False - iOSStripSymbols: True - - - template: /eng/pipelines/common/platform-matrix.yml - parameters: - jobTemplate: /eng/pipelines/coreclr/templates/perf-job.yml - buildConfig: release - runtimeFlavor: mono - platforms: - - osx_x64 - jobParameters: - testGroup: perf - runtimeType: iOSMono - projectFile: ios_scenarios.proj - runKind: ios_scenarios - runJobTemplate: /eng/pipelines/coreclr/templates/run-scenarios-job.yml - logicalmachine: 'perfiphone12mini' - iOSLlvmBuild: True - iOSStripSymbols: False - - - template: /eng/pipelines/common/platform-matrix.yml - parameters: - jobTemplate: /eng/pipelines/coreclr/templates/perf-job.yml - buildConfig: release - runtimeFlavor: mono - platforms: - - osx_x64 - jobParameters: - testGroup: perf - runtimeType: iOSMono - projectFile: ios_scenarios.proj - runKind: ios_scenarios - runJobTemplate: /eng/pipelines/coreclr/templates/run-scenarios-job.yml - logicalmachine: 'perfiphone12mini' - iOSLlvmBuild: True - iOSStripSymbols: True - - # run NativeAOT iOS scenarios - - template: /eng/pipelines/common/platform-matrix.yml - parameters: - jobTemplate: /eng/pipelines/coreclr/templates/perf-job.yml - buildConfig: release - runtimeFlavor: coreclr - platforms: - - osx_x64 - jobParameters: - testGroup: perf - runtimeType: iOSNativeAOT - projectFile: ios_scenarios.proj - runKind: ios_scenarios - runJobTemplate: /eng/pipelines/coreclr/templates/run-scenarios-job.yml - logicalmachine: 'perfiphone12mini' - iOSStripSymbols: False - - - template: /eng/pipelines/common/platform-matrix.yml - parameters: - jobTemplate: /eng/pipelines/coreclr/templates/perf-job.yml - buildConfig: release - runtimeFlavor: coreclr - platforms: - - osx_x64 - jobParameters: - testGroup: perf - runtimeType: iOSNativeAOT - projectFile: ios_scenarios.proj - runKind: ios_scenarios - runJobTemplate: /eng/pipelines/coreclr/templates/run-scenarios-job.yml - logicalmachine: 'perfiphone12mini' - iOSStripSymbols: True - # run mono microbenchmarks perf job - template: /eng/pipelines/common/platform-matrix.yml parameters: diff --git a/eng/pipelines/coreclr/templates/build-and-run-perf-ios-scenarios.yml b/eng/pipelines/coreclr/templates/build-and-run-perf-ios-scenarios.yml new file mode 100644 index 00000000000000..045c0b1228b74c --- /dev/null +++ b/eng/pipelines/coreclr/templates/build-and-run-perf-ios-scenarios.yml @@ -0,0 +1,159 @@ +parameters: + hybridGlobalization: False + +jobs: + # build mono iOS scenarios HybridGlobalization + - template: /eng/pipelines/common/platform-matrix.yml + parameters: + jobTemplate: /eng/pipelines/common/global-build-job.yml + buildConfig: release + runtimeFlavor: mono + platforms: + - ios_arm64 + jobParameters: + buildArgs: -s mono+libs+host+packs -c $(_BuildConfig) + nameSuffix: iOSMono + isOfficialBuild: false + postBuildSteps: + - template: /eng/pipelines/coreclr/templates/build-perf-sample-apps.yml + parameters: + rootFolder: '$(Build.SourcesDirectory)/artifacts/' + includeRootFolder: true + displayName: iOS Mono Artifacts + artifactName: iOSMonoarm64 + archiveExtension: '.tar.gz' + archiveType: tar + tarCompression: gz + hybridGlobalization: ${{ parameters.hybridGlobalization }} + + # build NativeAOT iOS scenarios HybridGlobalization + - template: /eng/pipelines/common/platform-matrix.yml + parameters: + jobTemplate: /eng/pipelines/common/global-build-job.yml + buildConfig: release + runtimeFlavor: coreclr + platforms: + - ios_arm64 + jobParameters: + buildArgs: --cross -s clr.alljits+clr.tools+clr.nativeaotruntime+clr.nativeaotlibs+libs -c $(_BuildConfig) + nameSuffix: iOSNativeAOT + isOfficialBuild: false + postBuildSteps: + - template: /eng/pipelines/coreclr/templates/build-perf-sample-apps.yml + parameters: + rootFolder: '$(Build.SourcesDirectory)/artifacts/' + includeRootFolder: true + displayName: iOS NativeAOT Artifacts + artifactName: iOSNativeAOTarm64 + archiveExtension: '.tar.gz' + archiveType: tar + tarCompression: gz + hybridGlobalization: ${{ parameters.hybridGlobalization }} + + # run mono iOS scenarios scenarios HybridGlobalization + - template: /eng/pipelines/common/platform-matrix.yml + parameters: + jobTemplate: /eng/pipelines/coreclr/templates/perf-job.yml + buildConfig: release + runtimeFlavor: mono + platforms: + - osx_x64 + jobParameters: + testGroup: perf + runtimeType: iOSMono + projectFile: ios_scenarios.proj + runKind: ios_scenarios + runJobTemplate: /eng/pipelines/coreclr/templates/run-scenarios-job.yml + logicalmachine: 'perfiphone12mini' + iOSLlvmBuild: False + iOSStripSymbols: False + hybridGlobalization: ${{ parameters.hybridGlobalization }} + + - template: /eng/pipelines/common/platform-matrix.yml + parameters: + jobTemplate: /eng/pipelines/coreclr/templates/perf-job.yml + buildConfig: release + runtimeFlavor: mono + platforms: + - osx_x64 + jobParameters: + testGroup: perf + runtimeType: iOSMono + projectFile: ios_scenarios.proj + runKind: ios_scenarios + runJobTemplate: /eng/pipelines/coreclr/templates/run-scenarios-job.yml + logicalmachine: 'perfiphone12mini' + iOSLlvmBuild: False + iOSStripSymbols: True + hybridGlobalization: ${{ parameters.hybridGlobalization }} + + - template: /eng/pipelines/common/platform-matrix.yml + parameters: + jobTemplate: /eng/pipelines/coreclr/templates/perf-job.yml + buildConfig: release + runtimeFlavor: mono + platforms: + - osx_x64 + jobParameters: + testGroup: perf + runtimeType: iOSMono + projectFile: ios_scenarios.proj + runKind: ios_scenarios + runJobTemplate: /eng/pipelines/coreclr/templates/run-scenarios-job.yml + logicalmachine: 'perfiphone12mini' + iOSLlvmBuild: True + iOSStripSymbols: False + hybridGlobalization: ${{ parameters.hybridGlobalization }} + + - template: /eng/pipelines/common/platform-matrix.yml + parameters: + jobTemplate: /eng/pipelines/coreclr/templates/perf-job.yml + buildConfig: release + runtimeFlavor: mono + platforms: + - osx_x64 + jobParameters: + testGroup: perf + runtimeType: iOSMono + projectFile: ios_scenarios.proj + runKind: ios_scenarios + runJobTemplate: /eng/pipelines/coreclr/templates/run-scenarios-job.yml + logicalmachine: 'perfiphone12mini' + iOSLlvmBuild: True + iOSStripSymbols: True + hybridGlobalization: ${{ parameters.hybridGlobalization }} + + # run NativeAOT iOS scenarios HybridGlobalization + - template: /eng/pipelines/common/platform-matrix.yml + parameters: + jobTemplate: /eng/pipelines/coreclr/templates/perf-job.yml + buildConfig: release + runtimeFlavor: coreclr + platforms: + - osx_x64 + jobParameters: + testGroup: perf + runtimeType: iOSNativeAOT + projectFile: ios_scenarios.proj + runKind: ios_scenarios + runJobTemplate: /eng/pipelines/coreclr/templates/run-scenarios-job.yml + logicalmachine: 'perfiphone12mini' + iOSStripSymbols: False + hybridGlobalization: ${{ parameters.hybridGlobalization }} + + - template: /eng/pipelines/common/platform-matrix.yml + parameters: + jobTemplate: /eng/pipelines/coreclr/templates/perf-job.yml + buildConfig: release + runtimeFlavor: coreclr + platforms: + - osx_x64 + jobParameters: + testGroup: perf + runtimeType: iOSNativeAOT + projectFile: ios_scenarios.proj + runKind: ios_scenarios + runJobTemplate: /eng/pipelines/coreclr/templates/run-scenarios-job.yml + logicalmachine: 'perfiphone12mini' + iOSStripSymbols: True + hybridGlobalization: ${{ parameters.hybridGlobalization }} From 5a68b1e2246b49701d654ea0058c8a346127062e Mon Sep 17 00:00:00 2001 From: Stephen Toub Date: Wed, 4 Oct 2023 14:12:53 -0400 Subject: [PATCH 05/21] Consolidate some TensorPrimitivesTests logic around special values (#92982) --- .../tests/TensorPrimitivesTests.cs | 158 ++++++++---------- 1 file changed, 66 insertions(+), 92 deletions(-) diff --git a/src/libraries/System.Numerics.Tensors/tests/TensorPrimitivesTests.cs b/src/libraries/System.Numerics.Tensors/tests/TensorPrimitivesTests.cs index 256ece4283b3ec..652fb07d3fa385 100644 --- a/src/libraries/System.Numerics.Tensors/tests/TensorPrimitivesTests.cs +++ b/src/libraries/System.Numerics.Tensors/tests/TensorPrimitivesTests.cs @@ -57,6 +57,66 @@ private static unsafe float MathFMinMagnitude(float x, float y) float ax = MathF.Abs(x), ay = MathF.Abs(y); return (ax < ay) || float.IsNaN(ax) || (ax == ay && *(int*)&x < 0) ? x : y; } + + private static unsafe int SingleToInt32(float f) => *(int*)&f; + + private static unsafe float Int32ToSingle(int i) => *(float*)&i; + + private static float AnotherSingleNaN = Int32ToSingle(-8388607); + + /// Loads a variety of special values (e.g. NaN) into random positions in . + private static void SetSpecialValues(Span x) + { + // NaN + x[s_random.Next(x.Length)] = float.NaN; + x[s_random.Next(x.Length)] = AnotherSingleNaN; + + // +Infinity, -Infinity + x[s_random.Next(x.Length)] = float.PositiveInfinity; + x[s_random.Next(x.Length)] = float.NegativeInfinity; + + // +Zero, -Zero + x[s_random.Next(x.Length)] = +0.0f; + x[s_random.Next(x.Length)] = -0.0f; + + // +Epsilon, -Epsilon + x[s_random.Next(x.Length)] = +float.Epsilon; + x[s_random.Next(x.Length)] = -float.Epsilon; + } + + /// + /// Loads a variety of special values (e.g. NaN) into random positions in + /// and related values into the corresponding positions in . + /// + private static void SetSpecialValues(Span x, Span y) + { + int pos; + + // NaNs + pos = s_random.Next(x.Length); + x[pos] = float.NaN; + y[pos] = AnotherSingleNaN; + + // +Infinity, -Infinity + pos = s_random.Next(x.Length); + x[pos] = float.PositiveInfinity; + y[pos] = float.NegativeInfinity; + + // +Zero, -Zero + pos = s_random.Next(x.Length); + x[pos] = +0.0f; + y[pos] = -0.0f; + + // +Epsilon, -Epsilon + pos = s_random.Next(x.Length); + x[pos] = +float.Epsilon; + y[pos] = -float.Epsilon; + + // Same magnitude, opposite sign + pos = s_random.Next(x.Length); + x[pos] = +5.0f; + y[pos] = -5.0f; + } #endregion #region Abs @@ -1013,26 +1073,7 @@ public static void Log_SpecialValues(int tensorLength) using BoundedMemory x = CreateAndFillTensor(tensorLength); using BoundedMemory destination = CreateTensor(tensorLength); - // NaN - x[s_random.Next(x.Length)] = float.NaN; - - // +Infinity - x[s_random.Next(x.Length)] = float.PositiveInfinity; - - // -Infinity - x[s_random.Next(x.Length)] = float.NegativeInfinity; - - // +Zero - x[s_random.Next(x.Length)] = +0.0f; - - // -Zero - x[s_random.Next(x.Length)] = -0.0f; - - // +Epsilon - x[s_random.Next(x.Length)] = +float.Epsilon; - - // -Epsilon - x[s_random.Next(x.Length)] = -float.Epsilon; + SetSpecialValues(x); TensorPrimitives.Log(x, destination); for (int i = 0; i < tensorLength; i++) @@ -1098,26 +1139,7 @@ public static void Log2_SpecialValues(int tensorLength) using BoundedMemory x = CreateAndFillTensor(tensorLength); using BoundedMemory destination = CreateTensor(tensorLength); - // NaN - x[s_random.Next(x.Length)] = float.NaN; - - // +Infinity - x[s_random.Next(x.Length)] = float.PositiveInfinity; - - // -Infinity - x[s_random.Next(x.Length)] = float.NegativeInfinity; - - // +Zero - x[s_random.Next(x.Length)] = +0.0f; - - // -Zero - x[s_random.Next(x.Length)] = -0.0f; - - // +Epsilon - x[s_random.Next(x.Length)] = +float.Epsilon; - - // -Epsilon - x[s_random.Next(x.Length)] = -float.Epsilon; + SetSpecialValues(x); TensorPrimitives.Log2(x, destination); for (int i = 0; i < tensorLength; i++) @@ -1240,19 +1262,7 @@ public static void Max_TwoTensors_SpecialValues(int tensorLength) using BoundedMemory y = CreateAndFillTensor(tensorLength); using BoundedMemory destination = CreateTensor(tensorLength); - // NaNs - x[s_random.Next(x.Length)] = float.NaN; - y[s_random.Next(y.Length)] = float.NaN; - - // Same magnitude, opposite sign - int pos = s_random.Next(x.Length); - x[pos] = -5f; - y[pos] = 5f; - - // Positive and negative 0s - pos = s_random.Next(x.Length); - x[pos] = 0f; - y[pos] = -0f; + SetSpecialValues(x, y); TensorPrimitives.Max(x, y, destination); for (int i = 0; i < tensorLength; i++) @@ -1397,19 +1407,7 @@ public static void MaxMagnitude_TwoTensors_SpecialValues(int tensorLength) using BoundedMemory y = CreateAndFillTensor(tensorLength); using BoundedMemory destination = CreateTensor(tensorLength); - // NaNs - x[s_random.Next(x.Length)] = float.NaN; - y[s_random.Next(y.Length)] = float.NaN; - - // Same magnitude, opposite sign - int pos = s_random.Next(x.Length); - x[pos] = -5f; - y[pos] = 5f; - - // Positive and negative 0s - pos = s_random.Next(x.Length); - x[pos] = 0f; - y[pos] = -0f; + SetSpecialValues(x, y); TensorPrimitives.MaxMagnitude(x, y, destination); for (int i = 0; i < tensorLength; i++) @@ -1553,19 +1551,7 @@ public static void Min_TwoTensors_SpecialValues(int tensorLength) using BoundedMemory y = CreateAndFillTensor(tensorLength); using BoundedMemory destination = CreateTensor(tensorLength); - // NaNs - x[s_random.Next(x.Length)] = float.NaN; - y[s_random.Next(y.Length)] = float.NaN; - - // Same magnitude, opposite sign - int pos = s_random.Next(x.Length); - x[pos] = -5f; - y[pos] = 5f; - - // Positive and negative 0s - pos = s_random.Next(x.Length); - x[pos] = 0f; - y[pos] = -0f; + SetSpecialValues(x, y); TensorPrimitives.Min(x, y, destination); for (int i = 0; i < tensorLength; i++) @@ -1708,19 +1694,7 @@ public static void MinMagnitude_TwoTensors_SpecialValues(int tensorLength) using BoundedMemory y = CreateAndFillTensor(tensorLength); using BoundedMemory destination = CreateTensor(tensorLength); - // NaNs - x[s_random.Next(x.Length)] = float.NaN; - y[s_random.Next(y.Length)] = float.NaN; - - // Same magnitude, opposite sign - int pos = s_random.Next(x.Length); - x[pos] = -5f; - y[pos] = 5f; - - // Positive and negative 0s - pos = s_random.Next(x.Length); - x[pos] = 0f; - y[pos] = -0f; + SetSpecialValues(x, y); TensorPrimitives.MinMagnitude(x, y, destination); for (int i = 0; i < tensorLength; i++) From 782c9d340dd2b69600049adbac714366a1634547 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Wed, 4 Oct 2023 11:17:44 -0700 Subject: [PATCH 06/21] Fix the path for crossgen2 for the outerloop cg2 legs (#92971) --- .../coreclr/templates/crossgen2-comparison-build-job.yml | 4 ++-- src/tests/build.proj | 5 ++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/eng/pipelines/coreclr/templates/crossgen2-comparison-build-job.yml b/eng/pipelines/coreclr/templates/crossgen2-comparison-build-job.yml index 9a2117bd51c581..3ca668998b133e 100644 --- a/eng/pipelines/coreclr/templates/crossgen2-comparison-build-job.yml +++ b/eng/pipelines/coreclr/templates/crossgen2-comparison-build-job.yml @@ -74,9 +74,9 @@ jobs: value: $(productDirectory)$(dir)$(targetFlavor)$(dir)crossgen2$(dir)crossgen2.dll - ${{ if ne(parameters.archType, 'x64') }}: - name: crossgen2location - value: $(productDirectory)$(dir)$(targetFlavor)$(dir)x64$(dir)crossgen2$(dir)crossgen2.dll + value: $(productDirectory)$(dir)$(targetFlavor)$(dir)x64$(dir)crossgen2$(dir)tools$(dir)crossgen2.dll - name: librariesProductDllDir - value: $(Build.SourcesDirectory)$(dir)artifacts$(dir)bin$(dir)runtime$(dir)net8.0-$(osGroup)$(osSubgroup)-$(buildConfig)-$(archType) + value: $(Build.SourcesDirectory)$(dir)artifacts$(dir)bin$(dir)runtime$(dir)net9.0-$(osGroup)$(osSubgroup)-$(buildConfig)-$(archType) - ${{ parameters.variables }} diff --git a/src/tests/build.proj b/src/tests/build.proj index e49ddc0b51b2f8..5bbe4b6d828532 100644 --- a/src/tests/build.proj +++ b/src/tests/build.proj @@ -633,8 +633,7 @@ Condition="'$(__BuildTestWrappersOnly)' != '1' and '$(__CopyNativeTestBinaries)' != '1' and '$(__TestBuildMode)' == 'crossgen2' and !$(MonoAot) and !$(MonoFullAot)" > - $(__BinDir) - $(CrossgenDir)\$(BuildArchitecture) + $(__BinDir)\$(BuildArchitecture) $(__TestIntermediatesDir)\crossgen.out @@ -655,7 +654,7 @@ $(CrossgenCmd) --crossgen2-parallelism 1 $(CrossgenCmd) --verify-type-and-field-layout - $(CrossgenCmd) --crossgen2-path "$(CrossgenDir)\crossgen2\crossgen2.dll" + $(CrossgenCmd) --crossgen2-path "$(CrossgenDir)\crossgen2\tools\crossgen2.dll" From b4bb1552b7a63a182c6407bcb8dacd86c351d76b Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Wed, 4 Oct 2023 15:13:55 -0400 Subject: [PATCH 07/21] [main] Update dependencies from dotnet/installer (#93001) Microsoft.Dotnet.Sdk.Internal From Version 9.0.100-alpha.1.23502.7 -> To Version 9.0.100-alpha.1.23503.1 Co-authored-by: dotnet-maestro[bot] --- eng/Version.Details.xml | 4 ++-- eng/Versions.props | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 0cefc2d3a21690..feb9e1d1ff7a91 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -402,9 +402,9 @@ https://github.com/NuGet/NuGet.Client 8fef55f5a55a3b4f2c96cd1a9b5ddc51d4b927f8 - + https://github.com/dotnet/installer - ee7ccfc83a91c0acc385a45d15460efd1c1f44c1 + b1a461bdca599a57ee454502015263c9896c8970 diff --git a/eng/Versions.props b/eng/Versions.props index 3de78378cf4b6a..39b4d475f59283 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -253,7 +253,7 @@ 3.1.7 1.0.406601 - 9.0.100-alpha.1.23502.7 + 9.0.100-alpha.1.23503.1 $(MicrosoftDotnetSdkInternalVersion) From bdd7b7aa80ee8e8904172ac3da95bff46cc5ba42 Mon Sep 17 00:00:00 2001 From: Tanner Gooding Date: Wed, 4 Oct 2023 12:54:57 -0700 Subject: [PATCH 08/21] Vectorize TensorPrimitives.Exp (#93018) * Vectorize TensorPrimitives.Exp * Update src/libraries/System.Numerics.Tensors/src/System/Numerics/Tensors/TensorPrimitives.netstandard.cs --- .../Numerics/Tensors/TensorPrimitives.cs | 16 +- .../Tensors/TensorPrimitives.netcore.cs | 280 ++++++++++++++++++ .../Tensors/TensorPrimitives.netstandard.cs | 13 + 3 files changed, 295 insertions(+), 14 deletions(-) diff --git a/src/libraries/System.Numerics.Tensors/src/System/Numerics/Tensors/TensorPrimitives.cs b/src/libraries/System.Numerics.Tensors/src/System/Numerics/Tensors/TensorPrimitives.cs index b1b96e55bb44f1..acc311df6e4cb0 100644 --- a/src/libraries/System.Numerics.Tensors/src/System/Numerics/Tensors/TensorPrimitives.cs +++ b/src/libraries/System.Numerics.Tensors/src/System/Numerics/Tensors/TensorPrimitives.cs @@ -322,20 +322,8 @@ public static float Dot(ReadOnlySpan x, ReadOnlySpan y) /// operating systems or architectures. /// /// - public static void Exp(ReadOnlySpan x, Span destination) - { - if (x.Length > destination.Length) - { - ThrowHelper.ThrowArgument_DestinationTooShort(); - } - - ValidateInputOutputSpanNonOverlapping(x, destination); - - for (int i = 0; i < x.Length; i++) - { - destination[i] = MathF.Exp(x[i]); - } - } + public static void Exp(ReadOnlySpan x, Span destination) => + InvokeSpanIntoSpan(x, destination); /// Searches for the index of the largest single-precision floating-point number in the specified tensor. /// The tensor, represented as a span. diff --git a/src/libraries/System.Numerics.Tensors/src/System/Numerics/Tensors/TensorPrimitives.netcore.cs b/src/libraries/System.Numerics.Tensors/src/System/Numerics/Tensors/TensorPrimitives.netcore.cs index 7e13b54148e4e0..aa306db678d77f 100644 --- a/src/libraries/System.Numerics.Tensors/src/System/Numerics/Tensors/TensorPrimitives.netcore.cs +++ b/src/libraries/System.Numerics.Tensors/src/System/Numerics/Tensors/TensorPrimitives.netcore.cs @@ -2579,6 +2579,286 @@ public static Vector512 Invoke(Vector512 x, Vector512 y) #endif } + private readonly struct ExpOperator : IUnaryOperator + { + // This code is based on `vrs4_expf` from amd/aocl-libm-ose + // Copyright (C) 2019-2022 Advanced Micro Devices, Inc. All rights reserved. + // + // Licensed under the BSD 3-Clause "New" or "Revised" License + // See THIRD-PARTY-NOTICES.TXT for the full license text + + // Implementation Notes: + // 1. Argument Reduction: + // e^x = 2^(x/ln2) --- (1) + // + // Let x/ln(2) = z --- (2) + // + // Let z = n + r , where n is an integer --- (3) + // |r| <= 1/2 + // + // From (1), (2) and (3), + // e^x = 2^z + // = 2^(N+r) + // = (2^N)*(2^r) --- (4) + // + // 2. Polynomial Evaluation + // From (4), + // r = z - N + // 2^r = C1 + C2*r + C3*r^2 + C4*r^3 + C5 *r^4 + C6*r^5 + // + // 4. Reconstruction + // Thus, + // e^x = (2^N) * (2^r) + + private const uint V_ARG_MAX = 0x42AE0000; + private const uint V_MASK = 0x7FFFFFFF; + + private const float V_EXPF_MIN = -103.97208f; + private const float V_EXPF_MAX = 88.72284f; + + private const double V_EXPF_HUGE = 6755399441055744; + private const double V_TBL_LN2 = 1.4426950408889634; + + private const double C1 = 1.0000000754895704; + private const double C2 = 0.6931472254087585; + private const double C3 = 0.2402210737432219; + private const double C4 = 0.05550297297702539; + private const double C5 = 0.009676036358193323; + private const double C6 = 0.001341000536524434; + + public static float Invoke(float x) => MathF.Exp(x); + + public static Vector128 Invoke(Vector128 x) + { + // Convert x to double precision + (Vector128 xl, Vector128 xu) = Vector128.Widen(x); + + // x * (64.0 / ln(2)) + Vector128 v_tbl_ln2 = Vector128.Create(V_TBL_LN2); + + Vector128 zl = xl * v_tbl_ln2; + Vector128 zu = xu * v_tbl_ln2; + + Vector128 v_expf_huge = Vector128.Create(V_EXPF_HUGE); + + Vector128 dnl = zl + v_expf_huge; + Vector128 dnu = zu + v_expf_huge; + + // n = int (z) + Vector128 nl = dnl.AsUInt64(); + Vector128 nu = dnu.AsUInt64(); + + // dn = double(n) + dnl -= v_expf_huge; + dnu -= v_expf_huge; + + // r = z - dn + Vector128 c1 = Vector128.Create(C1); + Vector128 c2 = Vector128.Create(C2); + Vector128 c3 = Vector128.Create(C3); + Vector128 c4 = Vector128.Create(C4); + Vector128 c5 = Vector128.Create(C5); + Vector128 c6 = Vector128.Create(C6); + + Vector128 rl = zl - dnl; + + Vector128 rl2 = rl * rl; + Vector128 rl4 = rl2 * rl2; + + Vector128 polyl = (c4 * rl + c3) * rl2 + + ((c6 * rl + c5) * rl4 + + (c2 * rl + c1)); + + + Vector128 ru = zu - dnu; + + Vector128 ru2 = ru * ru; + Vector128 ru4 = ru2 * ru2; + + Vector128 polyu = (c4 * ru + c3) * ru2 + + ((c6 * ru + c5) * ru4 + + (c2 * ru + c1)); + + // result = (float)[poly + (n << 52)] + Vector128 ret = Vector128.Narrow( + (polyl.AsUInt64() + Vector128.ShiftLeft(nl, 52)).AsDouble(), + (polyu.AsUInt64() + Vector128.ShiftLeft(nu, 52)).AsDouble() + ); + + // Check if -103 < |x| < 88 + if (Vector128.GreaterThanAny(x.AsUInt32() & Vector128.Create(V_MASK), Vector128.Create(V_ARG_MAX))) + { + // (x > V_EXPF_MAX) ? float.PositiveInfinity : x + Vector128 infinityMask = Vector128.GreaterThan(x, Vector128.Create(V_EXPF_MAX)); + + ret = Vector128.ConditionalSelect( + infinityMask, + Vector128.Create(float.PositiveInfinity), + ret + ); + + // (x < V_EXPF_MIN) ? 0 : x + ret = Vector128.AndNot(ret, Vector128.LessThan(x, Vector128.Create(V_EXPF_MIN))); + } + + return ret; + } + + public static Vector256 Invoke(Vector256 x) + { + // Convert x to double precision + (Vector256 xl, Vector256 xu) = Vector256.Widen(x); + + // x * (64.0 / ln(2)) + Vector256 v_tbl_ln2 = Vector256.Create(V_TBL_LN2); + + Vector256 zl = xl * v_tbl_ln2; + Vector256 zu = xu * v_tbl_ln2; + + Vector256 v_expf_huge = Vector256.Create(V_EXPF_HUGE); + + Vector256 dnl = zl + v_expf_huge; + Vector256 dnu = zu + v_expf_huge; + + // n = int (z) + Vector256 nl = dnl.AsUInt64(); + Vector256 nu = dnu.AsUInt64(); + + // dn = double(n) + dnl -= v_expf_huge; + dnu -= v_expf_huge; + + // r = z - dn + Vector256 c1 = Vector256.Create(C1); + Vector256 c2 = Vector256.Create(C2); + Vector256 c3 = Vector256.Create(C3); + Vector256 c4 = Vector256.Create(C4); + Vector256 c5 = Vector256.Create(C5); + Vector256 c6 = Vector256.Create(C6); + + Vector256 rl = zl - dnl; + + Vector256 rl2 = rl * rl; + Vector256 rl4 = rl2 * rl2; + + Vector256 polyl = (c4 * rl + c3) * rl2 + + ((c6 * rl + c5) * rl4 + + (c2 * rl + c1)); + + + Vector256 ru = zu - dnu; + + Vector256 ru2 = ru * ru; + Vector256 ru4 = ru2 * ru2; + + Vector256 polyu = (c4 * ru + c3) * ru2 + + ((c6 * ru + c5) * ru4 + + (c2 * ru + c1)); + + // result = (float)[poly + (n << 52)] + Vector256 ret = Vector256.Narrow( + (polyl.AsUInt64() + Vector256.ShiftLeft(nl, 52)).AsDouble(), + (polyu.AsUInt64() + Vector256.ShiftLeft(nu, 52)).AsDouble() + ); + + // Check if -103 < |x| < 88 + if (Vector256.GreaterThanAny(x.AsUInt32() & Vector256.Create(V_MASK), Vector256.Create(V_ARG_MAX))) + { + // (x > V_EXPF_MAX) ? float.PositiveInfinity : x + Vector256 infinityMask = Vector256.GreaterThan(x, Vector256.Create(V_EXPF_MAX)); + + ret = Vector256.ConditionalSelect( + infinityMask, + Vector256.Create(float.PositiveInfinity), + ret + ); + + // (x < V_EXPF_MIN) ? 0 : x + ret = Vector256.AndNot(ret, Vector256.LessThan(x, Vector256.Create(V_EXPF_MIN))); + } + + return ret; + } + +#if NET8_0_OR_GREATER + public static Vector512 Invoke(Vector512 x) + { + // Convert x to double precision + (Vector512 xl, Vector512 xu) = Vector512.Widen(x); + + // x * (64.0 / ln(2)) + Vector512 v_tbl_ln2 = Vector512.Create(V_TBL_LN2); + + Vector512 zl = xl * v_tbl_ln2; + Vector512 zu = xu * v_tbl_ln2; + + Vector512 v_expf_huge = Vector512.Create(V_EXPF_HUGE); + + Vector512 dnl = zl + v_expf_huge; + Vector512 dnu = zu + v_expf_huge; + + // n = int (z) + Vector512 nl = dnl.AsUInt64(); + Vector512 nu = dnu.AsUInt64(); + + // dn = double(n) + dnl -= v_expf_huge; + dnu -= v_expf_huge; + + // r = z - dn + Vector512 c1 = Vector512.Create(C1); + Vector512 c2 = Vector512.Create(C2); + Vector512 c3 = Vector512.Create(C3); + Vector512 c4 = Vector512.Create(C4); + Vector512 c5 = Vector512.Create(C5); + Vector512 c6 = Vector512.Create(C6); + + Vector512 rl = zl - dnl; + + Vector512 rl2 = rl * rl; + Vector512 rl4 = rl2 * rl2; + + Vector512 polyl = (c4 * rl + c3) * rl2 + + ((c6 * rl + c5) * rl4 + + (c2 * rl + c1)); + + + Vector512 ru = zu - dnu; + + Vector512 ru2 = ru * ru; + Vector512 ru4 = ru2 * ru2; + + Vector512 polyu = (c4 * ru + c3) * ru2 + + ((c6 * ru + c5) * ru4 + + (c2 * ru + c1)); + + // result = (float)[poly + (n << 52)] + Vector512 ret = Vector512.Narrow( + (polyl.AsUInt64() + Vector512.ShiftLeft(nl, 52)).AsDouble(), + (polyu.AsUInt64() + Vector512.ShiftLeft(nu, 52)).AsDouble() + ); + + // Check if -103 < |x| < 88 + if (Vector512.GreaterThanAny(x.AsUInt32() & Vector512.Create(V_MASK), Vector512.Create(V_ARG_MAX))) + { + // (x > V_EXPF_MAX) ? float.PositiveInfinity : x + Vector512 infinityMask = Vector512.GreaterThan(x, Vector512.Create(V_EXPF_MAX)); + + ret = Vector512.ConditionalSelect( + infinityMask, + Vector512.Create(float.PositiveInfinity), + ret + ); + + // (x < V_EXPF_MIN) ? 0 : x + ret = Vector512.AndNot(ret, Vector512.LessThan(x, Vector512.Create(V_EXPF_MIN))); + } + + return ret; + } +#endif + } + private readonly struct LogOperator : IUnaryOperator { // This code is based on `vrs4_logf` from amd/aocl-libm-ose diff --git a/src/libraries/System.Numerics.Tensors/src/System/Numerics/Tensors/TensorPrimitives.netstandard.cs b/src/libraries/System.Numerics.Tensors/src/System/Numerics/Tensors/TensorPrimitives.netstandard.cs index b9c1e128aaeded..ae72988bbe00eb 100644 --- a/src/libraries/System.Numerics.Tensors/src/System/Numerics/Tensors/TensorPrimitives.netstandard.cs +++ b/src/libraries/System.Numerics.Tensors/src/System/Numerics/Tensors/TensorPrimitives.netstandard.cs @@ -923,6 +923,19 @@ public Vector Invoke(Vector x, Vector y) public Vector Invoke(Vector x) => Vector.Abs(x); } + private readonly struct ExpOperator : IUnaryOperator + { + public bool CanVectorize => false; + + public float Invoke(float x) => MathF.Exp(x); + + public Vector Invoke(Vector x) + { + // Vectorizing requires shift left support, which is .NET 7 or later + throw new NotImplementedException(); + } + } + private readonly struct LogOperator : IUnaryOperator { public bool CanVectorize => false; From 65dbd3337ce264e6dd7300859f69e3e174e3ae24 Mon Sep 17 00:00:00 2001 From: Badre BSAILA <54767641+pedrobsaila@users.noreply.github.com> Date: Wed, 4 Oct 2023 22:28:23 +0200 Subject: [PATCH 09/21] IndentedTextWriter doesn't use indentation on the first line (#92791) * IndentedTextWriter doesn't use indentation on the first line * fix build 1 --- .../CodeDom/Compiler/CodeGeneratorTests.cs | 6 ++-- .../System.IO/tests/IndentedTextWriter.cs | 30 +++++++++---------- .../CodeDom/Compiler/IndentedTextWriter.cs | 1 + 3 files changed, 19 insertions(+), 18 deletions(-) diff --git a/src/libraries/System.CodeDom/tests/System/CodeDom/Compiler/CodeGeneratorTests.cs b/src/libraries/System.CodeDom/tests/System/CodeDom/Compiler/CodeGeneratorTests.cs index 8bf6d2be9d86e0..9a329ec13d28d7 100644 --- a/src/libraries/System.CodeDom/tests/System/CodeDom/Compiler/CodeGeneratorTests.cs +++ b/src/libraries/System.CodeDom/tests/System/CodeDom/Compiler/CodeGeneratorTests.cs @@ -3286,7 +3286,7 @@ public static IEnumerable OutputParameter_TestData() yield return new object[] { new CodeParameterDeclarationExpression[] { new CodeParameterDeclarationExpression("type1", "name1"), new CodeParameterDeclarationExpression("type2", "name2") }, "Type name1, Type name2" }; yield return new object[] { - new CodeParameterDeclarationExpression[] + new CodeParameterDeclarationExpression[] { new CodeParameterDeclarationExpression(), new CodeParameterDeclarationExpression(), new CodeParameterDeclarationExpression(), new CodeParameterDeclarationExpression(), new CodeParameterDeclarationExpression(), new CodeParameterDeclarationExpression(), new CodeParameterDeclarationExpression(), new CodeParameterDeclarationExpression(), @@ -3297,14 +3297,14 @@ public static IEnumerable OutputParameter_TestData() }; yield return new object[] { - new CodeParameterDeclarationExpression[] + new CodeParameterDeclarationExpression[] { new CodeParameterDeclarationExpression(), new CodeParameterDeclarationExpression(), new CodeParameterDeclarationExpression(), new CodeParameterDeclarationExpression(), new CodeParameterDeclarationExpression(), new CodeParameterDeclarationExpression(), new CodeParameterDeclarationExpression(), new CodeParameterDeclarationExpression(), new CodeParameterDeclarationExpression(), new CodeParameterDeclarationExpression(), new CodeParameterDeclarationExpression(), new CodeParameterDeclarationExpression(), new CodeParameterDeclarationExpression(), new CodeParameterDeclarationExpression(), new CodeParameterDeclarationExpression(), new CodeParameterDeclarationExpression() }, - $"{Environment.NewLine}Type , {Environment.NewLine}Type , {Environment.NewLine}Type , {Environment.NewLine}Type , {Environment.NewLine}Type , {Environment.NewLine}Type , {Environment.NewLine}Type , {Environment.NewLine}Type , {Environment.NewLine}Type , {Environment.NewLine}Type , {Environment.NewLine}Type , {Environment.NewLine}Type , {Environment.NewLine}Type , {Environment.NewLine}Type , {Environment.NewLine}Type , {Environment.NewLine}Type " + string.Concat(PlatformDetection.IsNetFramework ? string.Empty : $" ", $"{Environment.NewLine}Type , {Environment.NewLine}Type , {Environment.NewLine}Type , {Environment.NewLine}Type , {Environment.NewLine}Type , {Environment.NewLine}Type , {Environment.NewLine}Type , {Environment.NewLine}Type , {Environment.NewLine}Type , {Environment.NewLine}Type , {Environment.NewLine}Type , {Environment.NewLine}Type , {Environment.NewLine}Type , {Environment.NewLine}Type , {Environment.NewLine}Type , {Environment.NewLine}Type ") }; } diff --git a/src/libraries/System.IO/tests/IndentedTextWriter.cs b/src/libraries/System.IO/tests/IndentedTextWriter.cs index 67b4538aca768b..0de5d90f77bbdb 100644 --- a/src/libraries/System.IO/tests/IndentedTextWriter.cs +++ b/src/libraries/System.IO/tests/IndentedTextWriter.cs @@ -355,7 +355,7 @@ public static void Indent_RoundtripsAndAffectsOutput(int indent) string expectedTab = string.Concat(Enumerable.Repeat(TabString, itw.Indent)); Assert.Equal( - "first" + Environment.NewLine + + expectedTab + "first" + Environment.NewLine + expectedTab + "second" + Environment.NewLine + expectedTab + "third" + Environment.NewLine, sb.ToString()); @@ -382,7 +382,7 @@ public static void TabString_UsesProvidedString(string tabString) itw.WriteLine("Should be indented"); itw.Flush(); - Assert.Equal(itw.NewLine + tabString + "Should be indented" + itw.NewLine, sb.ToString()); + Assert.Equal(tabString + itw.NewLine + tabString + "Should be indented" + itw.NewLine, sb.ToString()); itw.Close(); } } @@ -449,7 +449,7 @@ public static async Task Writes_ProducesExpectedOutput(string newline) itw.WriteLineNoTabs("notabs"); Assert.Equal( - "" + newline + + "t" + newline + "tTrueabcde45.66.789101112131415 1615 16 1715 16 17 18True" + newline + "ta" + newline + "tbc" + newline + @@ -596,7 +596,7 @@ public async Task WriteAsync_WithIndents_WritesTabsAfterWriteLineAsync(Func callWriteLineAsync, string expected) + public async Task WriteLineAsync_WithIndents(Func callWriteLineAsync, string expected) { var indicator = new IndicatingTextWriter(); var itw = new IndentedTextWriter(indicator, TabString); @@ -640,7 +640,7 @@ public async Task WriteLineAsync_WithIndents_FirstLine_IsNotIndented(Func call [Theory] [MemberData(nameof(Write_MemberData))] - public void Write_WithIndents_FirstLine_IsNotIndented(Action callWrite, string expected) + public void Write_WithIndents_FirstLine_IsIndented(Action callWrite, string expected) { var indicator = new IndicatingTextWriter(); var itw = new IndentedTextWriter(indicator, TabString); @@ -704,12 +704,12 @@ public void Write_WithIndents_FirstLine_IsNotIndented(Action callWrite(itw); Assert.Equal(nameof(IndentedTextWriter.Write), indicator.LastCalledMethod); - Assert.Equal(expected, indicator.GetStringBuilder().ToString()); + Assert.Equal($"{TabString}{expected}", indicator.GetStringBuilder().ToString()); } [Theory] [MemberData(nameof(Write_MemberData))] - public void Write_IsIndented_AfterWriteLine(Action callWrite, string expected) + public void Write_IsIndented(Action callWrite, string expected) { var indicator = new IndicatingTextWriter(); var itw = new IndentedTextWriter(indicator, TabString); @@ -721,7 +721,7 @@ public void Write_IsIndented_AfterWriteLine(Action callWrite callWrite(itw); Assert.Equal(nameof(IndentedTextWriter.Write), indicator.LastCalledMethod); - Assert.Equal($"{prefix}{NewLine}{TabString}{expected}", indicator.GetStringBuilder().ToString()); + Assert.Equal($"{TabString}{prefix}{NewLine}{TabString}{expected}", indicator.GetStringBuilder().ToString()); } [Theory] @@ -750,12 +750,12 @@ public void WriteLine_FirstLine_IsNotIndented(Action callWri callWriteLine(itw); Assert.Equal(nameof(IndentedTextWriter.WriteLine), indicator.LastCalledMethod); - Assert.Equal(expected, indicator.GetStringBuilder().ToString()); + Assert.Equal($"{TabString}{expected}", indicator.GetStringBuilder().ToString()); } [Theory] [MemberData(nameof(WriteLine_MemberData))] - public void WriteLine_IsIndented_AfterWriteLine(Action callWriteLine, string expected) + public void WriteLine_IsIndented(Action callWriteLine, string expected) { var indicator = new IndicatingTextWriter(); var itw = new IndentedTextWriter(indicator, TabString); @@ -767,7 +767,7 @@ public void WriteLine_IsIndented_AfterWriteLine(Action callW callWriteLine(itw); Assert.Equal(nameof(IndentedTextWriter.WriteLine), indicator.LastCalledMethod); - Assert.Equal($"{prefix}{NewLine}{TabString}{expected}", indicator.GetStringBuilder().ToString()); + Assert.Equal($"{TabString}{prefix}{NewLine}{TabString}{expected}", indicator.GetStringBuilder().ToString()); } [Fact] diff --git a/src/libraries/System.Private.CoreLib/src/System/CodeDom/Compiler/IndentedTextWriter.cs b/src/libraries/System.Private.CoreLib/src/System/CodeDom/Compiler/IndentedTextWriter.cs index 0778294c8f1e94..22ee77a8cc6e64 100644 --- a/src/libraries/System.Private.CoreLib/src/System/CodeDom/Compiler/IndentedTextWriter.cs +++ b/src/libraries/System.Private.CoreLib/src/System/CodeDom/Compiler/IndentedTextWriter.cs @@ -27,6 +27,7 @@ public IndentedTextWriter(TextWriter writer, string tabString) : base(CultureInf _writer = writer; _tabString = tabString; + _tabsPending = true; } public override Encoding Encoding => _writer.Encoding; From a166bb71dea362129a25822852c23dbea1d802ed Mon Sep 17 00:00:00 2001 From: Ivan Diaz Sanchez Date: Wed, 4 Oct 2023 14:06:29 -0700 Subject: [PATCH 10/21] Replaced the '_obj' CMake objects and their INTERFACE's, with just the (#92966) regular objects, as with CMake 3.20, we no longer need to go through the full interfaces path. --- src/coreclr/binder/CMakeLists.txt | 9 ++---- .../classlibnative/bcltype/CMakeLists.txt | 10 ++----- .../classlibnative/float/CMakeLists.txt | 11 ++----- src/coreclr/debug/debug-pal/CMakeLists.txt | 4 +-- src/coreclr/debug/ee/wks/CMakeLists.txt | 24 +++++++-------- src/coreclr/dlls/mscorrc/CMakeLists.txt | 8 ++--- src/coreclr/gcinfo/CMakeLists.txt | 12 ++------ src/coreclr/inc/CMakeLists.txt | 4 +-- src/coreclr/interop/CMakeLists.txt | 8 +---- src/coreclr/jit/static/CMakeLists.txt | 11 +++---- src/coreclr/md/ceefilegen/CMakeLists.txt | 10 ++----- src/coreclr/md/compiler/CMakeLists.txt | 8 ++--- src/coreclr/md/enc/CMakeLists.txt | 8 ++--- src/coreclr/md/runtime/CMakeLists.txt | 8 ++--- src/coreclr/pal/src/CMakeLists.txt | 7 +---- src/coreclr/unwinder/CMakeLists.txt | 6 ++-- src/coreclr/utilcode/CMakeLists.txt | 10 +++---- src/coreclr/vm/wks/CMakeLists.txt | 30 ++++++++----------- 18 files changed, 59 insertions(+), 129 deletions(-) diff --git a/src/coreclr/binder/CMakeLists.txt b/src/coreclr/binder/CMakeLists.txt index 28797e0c682a05..f52dcb6bb44ef7 100644 --- a/src/coreclr/binder/CMakeLists.txt +++ b/src/coreclr/binder/CMakeLists.txt @@ -56,10 +56,5 @@ endif(CLR_CMAKE_TARGET_WIN32) convert_to_absolute_path(BINDER_SOURCES ${BINDER_SOURCES}) -add_library_clr(v3binder_obj - OBJECT - ${BINDER_SOURCES} -) -add_dependencies(v3binder_obj eventing_headers) -add_library(v3binder INTERFACE) -target_sources(v3binder INTERFACE $) +add_library_clr(v3binder OBJECT ${BINDER_SOURCES}) +add_dependencies(v3binder eventing_headers) diff --git a/src/coreclr/classlibnative/bcltype/CMakeLists.txt b/src/coreclr/classlibnative/bcltype/CMakeLists.txt index fdcf344c16ac56..265be7e1cf17f2 100644 --- a/src/coreclr/classlibnative/bcltype/CMakeLists.txt +++ b/src/coreclr/classlibnative/bcltype/CMakeLists.txt @@ -10,11 +10,5 @@ set(BCLTYPE_SOURCES variant.cpp ) -add_library_clr(bcltype_obj - OBJECT - ${BCLTYPE_SOURCES} -) - -add_dependencies(bcltype_obj eventing_headers) -add_library(bcltype INTERFACE) -target_sources(bcltype INTERFACE $) +add_library_clr(bcltype OBJECT ${BCLTYPE_SOURCES}) +add_dependencies(bcltype eventing_headers) diff --git a/src/coreclr/classlibnative/float/CMakeLists.txt b/src/coreclr/classlibnative/float/CMakeLists.txt index b2c47ea39b65ea..a3032c4887c4ba 100644 --- a/src/coreclr/classlibnative/float/CMakeLists.txt +++ b/src/coreclr/classlibnative/float/CMakeLists.txt @@ -7,12 +7,5 @@ set(FLOAT_SOURCES floatsingle.cpp ) -add_library_clr(comfloat_wks_obj - OBJECT - ${FLOAT_SOURCES} -) - -add_dependencies(comfloat_wks_obj eventing_headers) - -add_library(comfloat_wks INTERFACE) -target_sources(comfloat_wks INTERFACE $) \ No newline at end of file +add_library_clr(comfloat_wks OBJECT ${FLOAT_SOURCES}) +add_dependencies(comfloat_wks eventing_headers) diff --git a/src/coreclr/debug/debug-pal/CMakeLists.txt b/src/coreclr/debug/debug-pal/CMakeLists.txt index 2836dcd58710fa..baa11c163dffe3 100644 --- a/src/coreclr/debug/debug-pal/CMakeLists.txt +++ b/src/coreclr/debug/debug-pal/CMakeLists.txt @@ -46,6 +46,4 @@ if(CLR_CMAKE_HOST_UNIX) endif(CLR_CMAKE_HOST_UNIX) -add_library_clr(debug-pal_obj OBJECT ${TWO_WAY_PIPE_SOURCES}) -add_library(debug-pal INTERFACE) -target_sources(debug-pal INTERFACE $) +add_library_clr(debug-pal OBJECT ${TWO_WAY_PIPE_SOURCES}) diff --git a/src/coreclr/debug/ee/wks/CMakeLists.txt b/src/coreclr/debug/ee/wks/CMakeLists.txt index f50bc8f6fb6d59..7702a397489769 100644 --- a/src/coreclr/debug/ee/wks/CMakeLists.txt +++ b/src/coreclr/debug/ee/wks/CMakeLists.txt @@ -1,5 +1,4 @@ if (CLR_CMAKE_TARGET_WIN32) - list(APPEND CORDBEE_SOURCES_WKS ${CORDBEE_HEADERS_WKS}) get_include_directories(ASM_INCLUDE_DIRECTORIES) @@ -8,16 +7,15 @@ if (CLR_CMAKE_TARGET_WIN32) set(ASM_FILE ${CORDBEE_DIR}/${ARCH_SOURCES_DIR}/dbghelpers.asm) if(CLR_CMAKE_HOST_ARCH_ARM OR CLR_CMAKE_HOST_ARCH_ARM64 OR CLR_CMAKE_HOST_ARCH_LOONGARCH64) - preprocess_files(ASM_FILE ${ASM_FILE}) + if (CMAKE_GENERATOR MATCHES "Visual Studio") - compile_asm(TARGET cordbee_wks_obj ASM_FILES ${ASM_FILE} OUTPUT_OBJECTS ASM_OBJECTS) + compile_asm(TARGET cordbee_wks ASM_FILES ${ASM_FILE} OUTPUT_OBJECTS ASM_OBJECTS) endif() - add_library_clr(cordbee_wks_obj OBJECT ${CORDBEE_SOURCES_WKS} ${ASM_FILE} ${ASM_OBJECTS}) + add_library_clr(cordbee_wks OBJECT ${CORDBEE_SOURCES_WKS} ${ASM_FILE} ${ASM_OBJECTS}) else () - set(ASM_OPTIONS /c /Zi /W3 /errorReport:prompt) if (CLR_CMAKE_HOST_ARCH_I386) @@ -25,18 +23,18 @@ if (CLR_CMAKE_TARGET_WIN32) endif (CLR_CMAKE_HOST_ARCH_I386) set_source_files_properties(${ASM_FILE} PROPERTIES COMPILE_OPTIONS "${ASM_OPTIONS}") - - add_library_clr(cordbee_wks_obj OBJECT ${CORDBEE_SOURCES_WKS} ${ASM_FILE}) + add_library_clr(cordbee_wks OBJECT ${CORDBEE_SOURCES_WKS} ${ASM_FILE}) endif() else () - - add_library_clr(cordbee_wks_obj OBJECT ${CORDBEE_SOURCES_WKS} ../${ARCH_SOURCES_DIR}/dbghelpers.S) + add_library_clr(cordbee_wks + OBJECT + ${CORDBEE_SOURCES_WKS} + ../${ARCH_SOURCES_DIR}/dbghelpers.S + ) endif (CLR_CMAKE_TARGET_WIN32) -target_precompile_headers(cordbee_wks_obj PRIVATE [["stdafx.h"]]) -add_dependencies(cordbee_wks_obj eventing_headers) -add_library(cordbee_wks INTERFACE) -target_sources(cordbee_wks INTERFACE $) +target_precompile_headers(cordbee_wks PRIVATE [["stdafx.h"]]) +add_dependencies(cordbee_wks eventing_headers) diff --git a/src/coreclr/dlls/mscorrc/CMakeLists.txt b/src/coreclr/dlls/mscorrc/CMakeLists.txt index 30b2bf1eda69da..a8a363b1cc34db 100644 --- a/src/coreclr/dlls/mscorrc/CMakeLists.txt +++ b/src/coreclr/dlls/mscorrc/CMakeLists.txt @@ -19,14 +19,10 @@ if(CLR_CMAKE_HOST_WIN32) add_library_clr(mscorrc SHARED include.rc ) - install_clr(TARGETS mscorrc DESTINATIONS . sharedFramework COMPONENT runtime) + else() build_resources(${CMAKE_CURRENT_SOURCE_DIR}/include.rc mscorrc TARGET_CPP_FILE) + add_library_clr(mscorrc OBJECT ${TARGET_CPP_FILE}) - add_library_clr(mscorrc_obj OBJECT - ${TARGET_CPP_FILE} - ) - add_library(mscorrc INTERFACE) - target_sources(mscorrc INTERFACE $) endif(CLR_CMAKE_HOST_WIN32) diff --git a/src/coreclr/gcinfo/CMakeLists.txt b/src/coreclr/gcinfo/CMakeLists.txt index c66a334be7dee4..3885cc14a0a4c3 100644 --- a/src/coreclr/gcinfo/CMakeLists.txt +++ b/src/coreclr/gcinfo/CMakeLists.txt @@ -1,12 +1,12 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON) -set( GCINFO_ALLARCH_SOURCES +set(GCINFO_ALLARCH_SOURCES arraylist.cpp gcinfoencoder.cpp simplerhash.cpp ) -set( GCINFO_I386_SOURCES +set(GCINFO_I386_SOURCES ../gcdump/gcdump.cpp ../gcdump/i386/gcdumpx86.cpp ) @@ -24,13 +24,7 @@ if(CLR_CMAKE_TARGET_ARCH_I386) endif(CLR_CMAKE_TARGET_ARCH_I386) -add_library_clr(gcinfo_obj - OBJECT - ${GCINFO_SOURCES} -) - -add_library(gcinfo INTERFACE) -target_sources(gcinfo INTERFACE $) +add_library_clr(gcinfo OBJECT ${GCINFO_SOURCES}) install (FILES gcinfoencoder.cpp DESTINATION gcinfo) diff --git a/src/coreclr/inc/CMakeLists.txt b/src/coreclr/inc/CMakeLists.txt index cae1e5c07b7565..f6724ee385f673 100644 --- a/src/coreclr/inc/CMakeLists.txt +++ b/src/coreclr/inc/CMakeLists.txt @@ -56,9 +56,7 @@ if(FEATURE_JIT_PITCHING) endif(FEATURE_JIT_PITCHING) # Compile *_i.cpp to lib -add_library_clr(corguids_obj OBJECT ${CORGUIDS_SOURCES}) -add_library(corguids INTERFACE) -target_sources(corguids INTERFACE $) +add_library_clr(corguids OBJECT ${CORGUIDS_SOURCES}) # Binplace the inc files for packaging later. diff --git a/src/coreclr/interop/CMakeLists.txt b/src/coreclr/interop/CMakeLists.txt index 942071587810d9..d591616f1eb281 100644 --- a/src/coreclr/interop/CMakeLists.txt +++ b/src/coreclr/interop/CMakeLists.txt @@ -30,10 +30,4 @@ endif(FEATURE_COMWRAPPERS) convert_to_absolute_path(INTEROP_SOURCES ${INTEROP_SOURCES}) -add_library_clr(interop_obj - OBJECT - ${INTEROP_SOURCES} -) - -add_library(interop INTERFACE) -target_sources(interop INTERFACE $) \ No newline at end of file +add_library_clr(interop OBJECT ${INTEROP_SOURCES}) diff --git a/src/coreclr/jit/static/CMakeLists.txt b/src/coreclr/jit/static/CMakeLists.txt index 99ae15963b506c..89dd2bc72e8a89 100644 --- a/src/coreclr/jit/static/CMakeLists.txt +++ b/src/coreclr/jit/static/CMakeLists.txt @@ -2,18 +2,15 @@ project(ClrJit) set_source_files_properties(${JIT_EXPORTS_FILE} PROPERTIES GENERATED TRUE) -add_library_clr(clrjit_obj +add_library_clr(clrjit_static OBJECT ${JIT_SOURCES} ${JIT_ARCH_SOURCES} ) if(CLR_CMAKE_HOST_UNIX) - add_dependencies(clrjit_obj coreclrpal gcinfo) + add_dependencies(clrjit_static coreclrpal gcinfo) endif(CLR_CMAKE_HOST_UNIX) -target_include_directories(clrjit_obj PRIVATE ${JIT_SOURCE_DIR}) -target_precompile_headers(clrjit_obj PRIVATE [["jitpch.h"]]) - -add_library(clrjit_static INTERFACE) -target_sources(clrjit_static INTERFACE $) +target_include_directories(clrjit_static PRIVATE ${JIT_SOURCE_DIR}) +target_precompile_headers(clrjit_static PRIVATE [["jitpch.h"]]) diff --git a/src/coreclr/md/ceefilegen/CMakeLists.txt b/src/coreclr/md/ceefilegen/CMakeLists.txt index aaae88889080e4..24c55715a9ee13 100644 --- a/src/coreclr/md/ceefilegen/CMakeLists.txt +++ b/src/coreclr/md/ceefilegen/CMakeLists.txt @@ -25,11 +25,5 @@ if (CLR_CMAKE_TARGET_WIN32) list(APPEND CEEFILEGEN_SOURCES ${CEEFILEGEN_HEADERS}) endif (CLR_CMAKE_TARGET_WIN32) -add_library_clr(ceefgen_obj - OBJECT - ${CEEFILEGEN_SOURCES} -) -target_precompile_headers(ceefgen_obj PRIVATE stdafx.h) - -add_library(ceefgen INTERFACE) -target_sources(ceefgen INTERFACE $) +add_library_clr(ceefgen OBJECT ${CEEFILEGEN_SOURCES}) +target_precompile_headers(ceefgen PRIVATE stdafx.h) diff --git a/src/coreclr/md/compiler/CMakeLists.txt b/src/coreclr/md/compiler/CMakeLists.txt index 2182d0ebf4cd92..2adf73ebc46a74 100644 --- a/src/coreclr/md/compiler/CMakeLists.txt +++ b/src/coreclr/md/compiler/CMakeLists.txt @@ -65,11 +65,9 @@ add_library_clr(mdcompiler_dac ${MDCOMPILER_SOURCES}) set_target_properties(mdcompiler_dac PROPERTIES DAC_COMPONENT TRUE) target_precompile_headers(mdcompiler_dac PRIVATE stdafx.h) -add_library_clr(mdcompiler_wks_obj OBJECT ${MDCOMPILER_WKS_SOURCES}) -target_compile_definitions(mdcompiler_wks_obj PRIVATE FEATURE_METADATA_EMIT_ALL) -target_precompile_headers(mdcompiler_wks_obj PRIVATE stdafx.h) -add_library(mdcompiler_wks INTERFACE) -target_sources(mdcompiler_wks INTERFACE $) +add_library_clr(mdcompiler_wks OBJECT ${MDCOMPILER_WKS_SOURCES}) +target_compile_definitions(mdcompiler_wks PRIVATE FEATURE_METADATA_EMIT_ALL) +target_precompile_headers(mdcompiler_wks PRIVATE stdafx.h) add_library_clr(mdcompiler-dbi ${MDCOMPILER_SOURCES}) set_target_properties(mdcompiler-dbi PROPERTIES DBI_COMPONENT TRUE) diff --git a/src/coreclr/md/enc/CMakeLists.txt b/src/coreclr/md/enc/CMakeLists.txt index 89eae322ad00be..5b96ed8d87c976 100644 --- a/src/coreclr/md/enc/CMakeLists.txt +++ b/src/coreclr/md/enc/CMakeLists.txt @@ -51,11 +51,9 @@ add_library_clr(mdruntimerw_dac ${MDRUNTIMERW_SOURCES}) set_target_properties(mdruntimerw_dac PROPERTIES DAC_COMPONENT TRUE) target_precompile_headers(mdruntimerw_dac PRIVATE stdafx.h) -add_library_clr(mdruntimerw_wks_obj OBJECT ${MDRUNTIMERW_SOURCES}) -target_compile_definitions(mdruntimerw_wks_obj PRIVATE FEATURE_METADATA_EMIT_ALL) -target_precompile_headers(mdruntimerw_wks_obj PRIVATE stdafx.h) -add_library(mdruntimerw_wks INTERFACE) -target_sources(mdruntimerw_wks INTERFACE $) +add_library_clr(mdruntimerw_wks OBJECT ${MDRUNTIMERW_SOURCES}) +target_compile_definitions(mdruntimerw_wks PRIVATE FEATURE_METADATA_EMIT_ALL) +target_precompile_headers(mdruntimerw_wks PRIVATE stdafx.h) add_library_clr(mdruntimerw-dbi ${MDRUNTIMERW_SOURCES}) set_target_properties(mdruntimerw-dbi PROPERTIES DBI_COMPONENT TRUE) diff --git a/src/coreclr/md/runtime/CMakeLists.txt b/src/coreclr/md/runtime/CMakeLists.txt index 579451ef6d6b35..293de03ee8bc4a 100644 --- a/src/coreclr/md/runtime/CMakeLists.txt +++ b/src/coreclr/md/runtime/CMakeLists.txt @@ -47,11 +47,9 @@ add_library_clr(mdruntime_dac ${MDRUNTIME_SOURCES}) set_target_properties(mdruntime_dac PROPERTIES DAC_COMPONENT TRUE) target_precompile_headers(mdruntime_dac PRIVATE stdafx.h) -add_library_clr(mdruntime_wks_obj OBJECT ${MDRUNTIME_SOURCES}) -target_compile_definitions(mdruntime_wks_obj PRIVATE FEATURE_METADATA_EMIT_ALL) -target_precompile_headers(mdruntime_wks_obj PRIVATE stdafx.h) -add_library(mdruntime_wks INTERFACE) -target_sources(mdruntime_wks INTERFACE $) +add_library_clr(mdruntime_wks OBJECT ${MDRUNTIME_SOURCES}) +target_compile_definitions(mdruntime_wks PRIVATE FEATURE_METADATA_EMIT_ALL) +target_precompile_headers(mdruntime_wks PRIVATE stdafx.h) add_library_clr(mdruntime-dbi ${MDRUNTIME_SOURCES}) set_target_properties(mdruntime-dbi PROPERTIES DBI_COMPONENT TRUE) diff --git a/src/coreclr/pal/src/CMakeLists.txt b/src/coreclr/pal/src/CMakeLists.txt index 0fe6c0f04e590a..32895b2f4def58 100644 --- a/src/coreclr/pal/src/CMakeLists.txt +++ b/src/coreclr/pal/src/CMakeLists.txt @@ -255,12 +255,7 @@ endif(NOT FEATURE_CROSSBITNESS) # > warning for library: libtracepointprovider.a the table of contents is empty (no object file members in the library define global symbols) # if(CLR_CMAKE_TARGET_LINUX) - add_library(tracepointprovider_obj - OBJECT - misc/tracepointprovider.cpp - ) - add_library(tracepointprovider INTERFACE) - target_sources(tracepointprovider INTERFACE $) + add_library(tracepointprovider OBJECT misc/tracepointprovider.cpp) endif(CLR_CMAKE_TARGET_LINUX) if(CLR_CMAKE_TARGET_OSX) diff --git a/src/coreclr/unwinder/CMakeLists.txt b/src/coreclr/unwinder/CMakeLists.txt index 10b2d7c4088d2a..c63712c500e695 100644 --- a/src/coreclr/unwinder/CMakeLists.txt +++ b/src/coreclr/unwinder/CMakeLists.txt @@ -20,10 +20,8 @@ list(APPEND UNWINDER_SOURCES convert_to_absolute_path(UNWINDER_SOURCES ${UNWINDER_SOURCES}) if(CLR_CMAKE_HOST_UNIX) - add_library_clr(unwinder_wks_obj OBJECT ${UNWINDER_SOURCES}) - add_dependencies(unwinder_wks_obj eventing_headers) - add_library(unwinder_wks INTERFACE) - target_sources(unwinder_wks INTERFACE $) + add_library_clr(unwinder_wks OBJECT ${UNWINDER_SOURCES}) + add_dependencies(unwinder_wks eventing_headers) endif(CLR_CMAKE_HOST_UNIX) add_library_clr(unwinder_dac ${UNWINDER_SOURCES}) diff --git a/src/coreclr/utilcode/CMakeLists.txt b/src/coreclr/utilcode/CMakeLists.txt index b9ec88816b54e7..ec543e707d7185 100644 --- a/src/coreclr/utilcode/CMakeLists.txt +++ b/src/coreclr/utilcode/CMakeLists.txt @@ -86,9 +86,7 @@ convert_to_absolute_path(UTILCODE_DAC_SOURCES ${UTILCODE_DAC_SOURCES}) convert_to_absolute_path(UTILCODE_STATICNOHOST_SOURCES ${UTILCODE_STATICNOHOST_SOURCES}) add_library_clr(utilcode_dac STATIC ${UTILCODE_DAC_SOURCES}) -add_library_clr(utilcode_obj OBJECT ${UTILCODE_SOURCES}) -add_library(utilcode INTERFACE) -target_sources(utilcode INTERFACE $) +add_library_clr(utilcode OBJECT ${UTILCODE_SOURCES}) add_library_clr(utilcodestaticnohost STATIC ${UTILCODE_STATICNOHOST_SOURCES}) target_link_libraries(utilcodestaticnohost PUBLIC coreclrminipal) @@ -98,7 +96,7 @@ if(CLR_CMAKE_HOST_UNIX) target_link_libraries(utilcode_dac PUBLIC nativeresourcestring) target_link_libraries(utilcode INTERFACE nativeresourcestring) add_dependencies(utilcode_dac coreclrpal) - add_dependencies(utilcode_obj coreclrpal) + add_dependencies(utilcode coreclrpal) endif(CLR_CMAKE_HOST_UNIX) @@ -114,8 +112,8 @@ set_target_properties(utilcode_dac PROPERTIES DAC_COMPONENT TRUE) target_compile_definitions(utilcode_dac PRIVATE SELF_NO_HOST) target_compile_definitions(utilcodestaticnohost PRIVATE SELF_NO_HOST) add_dependencies(utilcode_dac ${UTILCODE_DEPENDENCIES}) -add_dependencies(utilcode_obj ${UTILCODE_DEPENDENCIES}) +add_dependencies(utilcode ${UTILCODE_DEPENDENCIES}) add_dependencies(utilcodestaticnohost ${UTILCODE_DEPENDENCIES}) target_precompile_headers(utilcode_dac PRIVATE [["stdafx.h"]]) -target_precompile_headers(utilcode_obj PRIVATE [["stdafx.h"]]) +target_precompile_headers(utilcode PRIVATE [["stdafx.h"]]) target_precompile_headers(utilcodestaticnohost PRIVATE [["stdafx.h"]]) diff --git a/src/coreclr/vm/wks/CMakeLists.txt b/src/coreclr/vm/wks/CMakeLists.txt index b8c5b2a3698c32..e519458d736e2e 100644 --- a/src/coreclr/vm/wks/CMakeLists.txt +++ b/src/coreclr/vm/wks/CMakeLists.txt @@ -8,12 +8,12 @@ if (CLR_CMAKE_TARGET_WIN32) endif (CLR_CMAKE_TARGET_WIN32) add_library_clr(cee_wks_core OBJECT ${VM_SOURCES_WKS} ${VM_SOURCES_WKS_ARCH_ASM}) -add_library_clr(cee_wks_obj OBJECT ${VM_SOURCES_WKS_SPECIAL}) -add_library_clr(cee_wks_mergeable_obj OBJECT ${VM_SOURCES_WKS_SPECIAL}) +add_library_clr(cee_wks OBJECT ${VM_SOURCES_WKS_SPECIAL}) +add_library_clr(cee_wks_mergeable OBJECT ${VM_SOURCES_WKS_SPECIAL}) target_precompile_headers(cee_wks_core PRIVATE [["common.h"]]) -target_precompile_headers(cee_wks_obj PRIVATE [["common.h"]]) -target_precompile_headers(cee_wks_mergeable_obj PRIVATE [["common.h"]]) +target_precompile_headers(cee_wks PRIVATE [["common.h"]]) +target_precompile_headers(cee_wks_mergeable PRIVATE [["common.h"]]) if (MSVC) # corelib.cpp does not compile with precompiled header file @@ -21,8 +21,8 @@ if (MSVC) endif() add_dependencies(cee_wks_core eventing_headers) -add_dependencies(cee_wks_obj eventing_headers) -add_dependencies(cee_wks_mergeable_obj eventing_headers) +add_dependencies(cee_wks eventing_headers) +add_dependencies(cee_wks_mergeable eventing_headers) if (CLR_CMAKE_TARGET_WIN32) if(NOT CLR_CMAKE_HOST_ARCH_ARM AND NOT CLR_CMAKE_HOST_ARCH_ARM64) @@ -38,25 +38,19 @@ if (CLR_CMAKE_TARGET_WIN32) add_custom_target(asmconstants_inc DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/AsmConstants.inc) add_dependencies(cee_wks_core asmconstants_inc) - add_dependencies(cee_wks_obj asmconstants_inc) - add_dependencies(cee_wks_mergeable_obj asmconstants_inc) + add_dependencies(cee_wks asmconstants_inc) + add_dependencies(cee_wks_mergeable asmconstants_inc) endif(NOT CLR_CMAKE_HOST_ARCH_ARM AND NOT CLR_CMAKE_HOST_ARCH_ARM64) endif (CLR_CMAKE_TARGET_WIN32) add_custom_target(precompiled_asm DEPENDS ${VM_WKS_ARCH_ASM_OBJECTS}) add_dependencies(cee_wks_core precompiled_asm) -add_dependencies(cee_wks_obj precompiled_asm) -add_dependencies(cee_wks_mergeable_obj precompiled_asm) +add_dependencies(cee_wks precompiled_asm) +add_dependencies(cee_wks_mergeable precompiled_asm) - -target_compile_definitions(cee_wks_mergeable_obj PUBLIC FEATURE_MERGE_JIT_AND_ENGINE) -target_compile_definitions(cee_wks_mergeable_obj PUBLIC CORECLR_EMBEDDED) - -add_library(cee_wks INTERFACE) -target_sources(cee_wks INTERFACE $ $ ${VM_WKS_ARCH_ASM_OBJECTS}) -add_library(cee_wks_mergeable INTERFACE) -target_sources(cee_wks_mergeable INTERFACE $ $ ${VM_WKS_ARCH_ASM_OBJECTS}) +target_compile_definitions(cee_wks_mergeable PUBLIC FEATURE_MERGE_JIT_AND_ENGINE) +target_compile_definitions(cee_wks_mergeable PUBLIC CORECLR_EMBEDDED) if (CLR_CMAKE_HOST_WIN32) link_natvis_sources_for_target(cee_wks INTERFACE ../vm.natvis) From dc203909b6ef6f078e939e0ec3587d0eafa40273 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Wed, 4 Oct 2023 15:43:01 -0700 Subject: [PATCH 11/21] Merge CoreCLR-based official builds legs into one leg per platform (#92901) --- eng/pipelines/common/global-build-job.yml | 9 +- .../common/templates/global-build-step.yml | 12 + .../common/templates/runtimes/xplat-job.yml | 9 - eng/pipelines/common/xplat-setup.yml | 9 + eng/pipelines/coreclr/templates/build-job.yml | 21 -- .../coreclr/templates/crossdac-build.yml | 80 ---- .../coreclr/templates/crossdac-hostarch.yml | 9 + .../coreclr/templates/crossdac-pack.yml | 75 ---- .../coreclr/templates/xplat-pipeline-job.yml | 6 - eng/pipelines/installer/jobs/build-job.yml | 29 +- .../jobs/steps/build-linux-package.yml | 2 + eng/pipelines/runtime-official.yml | 345 +++++++++++++----- eng/pipelines/runtime.yml | 23 +- src/coreclr/build-runtime.cmd | 9 +- 14 files changed, 317 insertions(+), 321 deletions(-) create mode 100644 eng/pipelines/common/templates/global-build-step.yml delete mode 100644 eng/pipelines/coreclr/templates/crossdac-build.yml create mode 100644 eng/pipelines/coreclr/templates/crossdac-hostarch.yml delete mode 100644 eng/pipelines/coreclr/templates/crossdac-pack.yml diff --git a/eng/pipelines/common/global-build-job.yml b/eng/pipelines/common/global-build-job.yml index cdda8c99dc519c..4b06818b1408c5 100644 --- a/eng/pipelines/common/global-build-job.yml +++ b/eng/pipelines/common/global-build-job.yml @@ -237,10 +237,11 @@ jobs: - task: CodeQL3000Init@0 displayName: Initialize CodeQL (manually-injected) - - script: $(Build.SourcesDirectory)$(dir)build$(scriptExt) -ci $(_archParameter) $(_osParameter) $(crossArg) ${{ parameters.buildArgs }} $(_officialBuildParameter) $(_buildDarwinFrameworksParameter) $(_overrideTestScriptWindowsCmdParameter) - displayName: Build product - ${{ if eq(parameters.useContinueOnErrorDuringBuild, true) }}: - continueOnError: ${{ parameters.shouldContinueOnError }} + - template: /eng/pipelines/common/templates/global-build-step.yml + parameters: + buildArgs: ${{ parameters.buildArgs }} + useContinueOnErrorDuringBuild: ${{ parameters.useContinueOnErrorDuringBuild }} + shouldContinueOnError: ${{ parameters.shouldContinueOnError }} - ${{ if eq(parameters.isManualCodeQLBuild, true) }}: - task: CodeQL3000Finalize@0 diff --git a/eng/pipelines/common/templates/global-build-step.yml b/eng/pipelines/common/templates/global-build-step.yml new file mode 100644 index 00000000000000..7f38a9fd118405 --- /dev/null +++ b/eng/pipelines/common/templates/global-build-step.yml @@ -0,0 +1,12 @@ +parameters: + buildArgs: '' + useContinueOnErrorDuringBuild: false + shouldContinueOnError: false + archParameter: $(_archParameter) + displayName: Build product + +steps: + - script: $(Build.SourcesDirectory)$(dir)build$(scriptExt) -ci ${{ parameters.archParameter }} $(_osParameter) $(crossArg) ${{ parameters.buildArgs }} $(_officialBuildParameter) $(_buildDarwinFrameworksParameter) $(_overrideTestScriptWindowsCmdParameter) + displayName: ${{ parameters.displayName }} + ${{ if eq(parameters.useContinueOnErrorDuringBuild, true) }}: + continueOnError: ${{ parameters.shouldContinueOnError }} diff --git a/eng/pipelines/common/templates/runtimes/xplat-job.yml b/eng/pipelines/common/templates/runtimes/xplat-job.yml index f4ac7e82957123..23e74c70e57ace 100644 --- a/eng/pipelines/common/templates/runtimes/xplat-job.yml +++ b/eng/pipelines/common/templates/runtimes/xplat-job.yml @@ -77,15 +77,6 @@ jobs: - name: buildConfig value: ${{ parameters.buildConfig }} - - name: archType - value: ${{ parameters.archType }} - - - name: osGroup - value: ${{ parameters.osGroup }} - - - name: osSubgroup - value: ${{ parameters.osSubgroup }} - - ${{ if and(eq(variables['System.TeamProject'], 'internal'), ne(variables['Build.Reason'], 'PullRequest')) }}: - name: _HelixSource value: official/dotnet/runtime/$(Build.SourceBranch) diff --git a/eng/pipelines/common/xplat-setup.yml b/eng/pipelines/common/xplat-setup.yml index a09e428e765cd2..fbec96ceb160bc 100644 --- a/eng/pipelines/common/xplat-setup.yml +++ b/eng/pipelines/common/xplat-setup.yml @@ -45,6 +45,15 @@ jobs: - name: _BuildConfig value: $(buildConfigUpper) + + - name: archType + value: ${{ parameters.archType }} + + - name: osGroup + value: ${{ parameters.osGroup }} + + - name: osSubgroup + value: ${{ parameters.osSubgroup }} - name: _runSmokeTestsOnlyArg value: '/p:RunSmokeTestsOnly=$(isRunSmokeTestsOnly)' diff --git a/eng/pipelines/coreclr/templates/build-job.yml b/eng/pipelines/coreclr/templates/build-job.yml index 655de0091457c2..99cf517dd3f4d5 100644 --- a/eng/pipelines/coreclr/templates/build-job.yml +++ b/eng/pipelines/coreclr/templates/build-job.yml @@ -229,27 +229,6 @@ jobs: artifactName: $(buildProductArtifactName) displayName: 'product build' - - ${{ if and(in(parameters.osGroup, 'windows', 'linux'), ne(parameters.archType, 'x86')) }}: - - template: /eng/pipelines/coreclr/templates/crossdac-build.yml - parameters: - archType: ${{ parameters.archType }} - osGroup: ${{ parameters.osGroup }} - osSubgroup: ${{ parameters.osSubgroup }} - isOfficialBuild: ${{ parameters.signBinaries }} - ${{ if eq(parameters.archType, 'arm') }}: - hostArchType: x86 - ${{ else }}: - hostArchType: x64 - - - ${{ if and(in(parameters.osGroup, 'windows'), eq(parameters.archType, 'x86')) }}: - - template: /eng/pipelines/coreclr/templates/crossdac-build.yml - parameters: - archType: arm - osGroup: ${{ parameters.osGroup }} - osSubgroup: ${{ parameters.osSubgroup }} - isOfficialBuild: ${{ parameters.signBinaries }} - hostArchType: x86 - - ${{ if and(ne(parameters.testGroup, ''), ne(parameters.disableClrTest, true)) }}: # Publish test native components for consumption by test execution. - ${{ if ne(parameters.isOfficialBuild, true) }}: diff --git a/eng/pipelines/coreclr/templates/crossdac-build.yml b/eng/pipelines/coreclr/templates/crossdac-build.yml deleted file mode 100644 index a8accb9d2e3d28..00000000000000 --- a/eng/pipelines/coreclr/templates/crossdac-build.yml +++ /dev/null @@ -1,80 +0,0 @@ -parameters: - archType: '' - isOfficialBuild: false - osGroup: '' - osSubgroup: '' - hostArchType: '' - -steps: - # Always build the crossdac, that way we know in CI/PR if things break to build. - - ${{ if and(eq(parameters.osGroup, 'windows'), notin(parameters.archType, 'x86')) }}: - - script: $(Build.SourcesDirectory)/src/coreclr/build-runtime$(scriptExt) $(buildConfig) ${{ parameters.archType }} -hostarch ${{ parameters.hostArchType }} -ci -os linux -cmakeargs "-DCLR_CROSS_COMPONENTS_BUILD=1" -ninja $(officialBuildIdArg) -component crosscomponents - displayName: Build Cross OS Linux DAC for Windows - - - script: $(Build.SourcesDirectory)/src/coreclr/build-runtime$(scriptExt) $(buildConfig) ${{ parameters.archType }} -hostarch ${{ parameters.hostArchType }} -ci -os alpine -cmakeargs "-DCLR_CROSS_COMPONENTS_BUILD=1" -ninja $(officialBuildIdArg) -component crosscomponents - displayName: Build Cross OS Linux-musl DAC for Windows - - - powershell: | - function CopyAndVerifyCrossOsAssets { - [CmdletBinding()] - param ( - [Parameter(Mandatory)][string]$crossDacDir, - [Parameter(Mandatory)][string]$targetDir - ) - - $crossDacDir = Join-Path $crossDacDir -ChildPath '${{ parameters.hostArchType }}' - - $availableFiles = ls -File $crossDacDir - - Write-Host "Probed for files in ""$crossDacDir"", found:" - $availableFiles | fl - - if (-not ("mscordaccore.dll" -in $availableFiles.Name ` - -and "mscordaccore.pdb" -in $availableFiles.Name ` - -and "mscordbi.dll" -in $availableFiles.Name ` - -and "mscordbi.pdb" -in $availableFiles.Name` - )) - { - Write-Error "Couldn't find one of the expected crossdac files." - } - - New-Item $targetDir -ItemType 'Directory' -Force -ea 0 - $availableFiles | %{ cp $_.FullName $targetDir -v } - } - - $buildMuslDacRootFolderPath = "$(Build.SourcesDirectory)/artifacts/bin/coreclr/alpine.${{ parameters.archType }}.$(buildConfigUpper)" - $buildMuslStagingPath = "$(crossDacArtifactPath)/Linux_musl.${{ parameters.archType }}.$(buildConfigUpper)/${{ parameters.hostArchType }}" - - $buildLinuxDacRootFolderPath = "$(Build.SourcesDirectory)/artifacts/bin/coreclr/Linux.${{ parameters.archType }}.$(buildConfigUpper)" - $buildLinuxDacStagingPath = "$(crossDacArtifactPath)/Linux.${{ parameters.archType }}.$(buildConfigUpper)/${{ parameters.hostArchType }}" - - - CopyAndVerifyCrossOsAssets -CrossDacDir $buildMuslDacRootFolderPath -TargetDir $buildMuslStagingPath - CopyAndVerifyCrossOsAssets -CrossDacDir $buildLinuxDacRootFolderPath -TargetDir $buildLinuxDacStagingPath - - Write-Host "Final directory contents:" - ls -R $(crossDacArtifactPath) - - displayName: Gather CrossDac Artifacts - - - template: /eng/pipelines/coreclr/templates/sign-diagnostic-files.yml - parameters: - basePath: $(crossDacArtifactPath) - isOfficialBuild: ${{ parameters.isOfficialBuild }} - timeoutInMinutes: 30 - - - ${{ if eq(parameters.osGroup, 'linux') }}: - - task: CopyFiles@2 - displayName: Gather runtime for CrossDac - inputs: - SourceFolder: $(coreClrProductRootFolderPath) - Contents: libcoreclr.so - TargetFolder: '$(crossDacArtifactPath)/${{ parameters.osGroup }}${{ parameters.osSubgroup }}.$(archType).$(buildConfigUpper)/${{ parameters.hostArchType }}' - - # Make the assets available in a single container for the packaging job. - - task: PublishBuildArtifacts@1 - displayName: Publish runtime for CrossDac - inputs: - pathtoPublish: $(crossDacArtifactPath) - PublishLocation: Container - artifactName: $(buildCrossDacArtifactName) diff --git a/eng/pipelines/coreclr/templates/crossdac-hostarch.yml b/eng/pipelines/coreclr/templates/crossdac-hostarch.yml new file mode 100644 index 00000000000000..e100217a48151a --- /dev/null +++ b/eng/pipelines/coreclr/templates/crossdac-hostarch.yml @@ -0,0 +1,9 @@ +parameters: + archType: '' + +variables: + - name: crossDacHostArch + value: x64 + - ${{ if eq(parameters.archType, 'arm') }}: + - name: crossDacHostArch + value: x86 \ No newline at end of file diff --git a/eng/pipelines/coreclr/templates/crossdac-pack.yml b/eng/pipelines/coreclr/templates/crossdac-pack.yml deleted file mode 100644 index 520eb65fb337e6..00000000000000 --- a/eng/pipelines/coreclr/templates/crossdac-pack.yml +++ /dev/null @@ -1,75 +0,0 @@ -parameters: - archType: '' - buildConfig: '' - container: '' - crossDacPlatforms: {} - dependOnEvaluatePaths: false - isOfficialBuild: false - osGroup: '' - osSubgroup: '' - platform: '' - pool: '' - runtimeVariant: '' - testGroup: '' - timeoutInMinutes: '' - variables: {} - -jobs: -- template: xplat-pipeline-job.yml - parameters: - archType: ${{ parameters.archType }} - buildConfig: ${{ parameters.buildConfig }} - container: ${{ parameters.container }} - condition: ${{ parameters.isOfficialBuild }} - helixType: 'build/product/' - osGroup: ${{ parameters.osGroup }} - osSubgroup: ${{ parameters.osSubgroup }} - pool: ${{ parameters.pool }} - runtimeVariant: ${{ parameters.runtimeVariant }} - timeoutInMinutes: ${{ parameters.timeoutInMinutes }} - dependOnEvaluatePaths: ${{ parameters.dependOnEvaluatePaths }} - - name: crossdacpack - displayName: CrossDac Packaging - - variables: - - name: officialBuildIdArg - value: '' - - name: crossDacArgs - value: '/p:CrossDacArtifactsDir=$(crossDacArtifactPath)/$(buildCrossDacArtifactName)' - - ${{ if and(eq(variables['System.TeamProject'], 'internal'), ne(variables['Build.Reason'], 'PullRequest')) }}: - - name: officialBuildIdArg - value: '/p:OfficialBuildId=$(Build.BuildNumber)' - - name: SignType - value: $[ coalesce(variables.OfficialSignType, 'real') ] - - ${{ parameters.variables }} - - dependsOn: - - ${{ if ne(parameters.crossDacPlatforms, '') }}: - - ${{ each platform in parameters.crossDacPlatforms }}: - - ${{ parameters.runtimeFlavor }}_${{ parameters.runtimeVariant }}_product_build_${{ platform }}_${{ parameters.buildConfig }} - - steps: - - task: DownloadBuildArtifacts@0 - displayName: Download CrossDac artifacts - inputs: - artifactName: $(buildCrossDacArtifactName) - downloadPath: $(crossDacArtifactPath) - checkDownloadedFiles: true - - - script: $(Build.SourcesDirectory)$(dir)build$(scriptExt) -subset crossdacpack -arch $(archType) $(osArg) -c $(buildConfig) $(officialBuildIdArg) $(crossDacArgs) -ci - displayName: Build crossdac packaging - - # Save packages using the prepare-signed-artifacts format. - - template: /eng/pipelines/common/upload-intermediate-artifacts-step.yml - parameters: - name: ${{ parameters.platform }} - - # Upload to artifacts to be signed - - task: PublishPipelineArtifact@1 - displayName: Publish Logs - inputs: - targetPath: $(Build.SourcesDirectory)/artifacts/log - artifactName: 'CrossDacPackagingLogs_Attempt$(System.JobAttempt)' - continueOnError: true - condition: always() diff --git a/eng/pipelines/coreclr/templates/xplat-pipeline-job.yml b/eng/pipelines/coreclr/templates/xplat-pipeline-job.yml index 162f5e9f0ed1c8..b6c57be0c7fbae 100644 --- a/eng/pipelines/coreclr/templates/xplat-pipeline-job.yml +++ b/eng/pipelines/coreclr/templates/xplat-pipeline-job.yml @@ -69,12 +69,6 @@ jobs: - name: buildProductRootFolderPath value: '$(Build.SourcesDirectory)/artifacts/bin/coreclr/$(osGroup).$(archType).$(buildConfigUpper)' - - name: buildCrossDacArtifactName - value: CoreCLRCrossDacArtifacts - - - name: crossDacArtifactPath - value: $(Build.SourcesDirectory)/artifacts/$(buildCrossDacArtifactName) - # We need this because both mono and coreclr build currently depends on CoreClr - name: coreClrProductArtifactName value: 'CoreCLRProduct_${{ parameters.runtimeVariant }}_$(osGroup)$(osSubgroup)_$(archType)_$(buildConfig)' diff --git a/eng/pipelines/installer/jobs/build-job.yml b/eng/pipelines/installer/jobs/build-job.yml index 70f7656e611a18..43f19c69ccacfc 100644 --- a/eng/pipelines/installer/jobs/build-job.yml +++ b/eng/pipelines/installer/jobs/build-job.yml @@ -339,32 +339,9 @@ jobs: df -h displayName: Disk Usage before Build - # Build the default subset non-MacOS platforms - - ${{ if ne(parameters.osGroup, 'osx') }}: - - script: $(BaseJobBuildCommand) - displayName: Build - continueOnError: ${{ and(eq(variables.SkipTests, false), eq(parameters.shouldContinueOnError, true)) }} - - # Build corehost, sign and add entitlements to MacOS binaries - - ${{ if eq(parameters.osGroup, 'osx') }}: - - script: $(BaseJobBuildCommand) -subset host.native - displayName: Build CoreHost - continueOnError: ${{ and(eq(variables.SkipTests, false), eq(parameters.shouldContinueOnError, true)) }} - - - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - template: /eng/pipelines/common/macos-sign-with-entitlements.yml - parameters: - filesToSign: - - name: dotnet - path: $(Build.SourcesDirectory)/artifacts/bin/osx-${{ parameters.archType }}.$(_BuildConfig)/corehost - entitlementsFile: $(Build.SourcesDirectory)/eng/pipelines/common/entitlements.plist - - name: apphost - path: $(Build.SourcesDirectory)/artifacts/bin/osx-${{ parameters.archType }}.$(_BuildConfig)/corehost - entitlementsFile: $(Build.SourcesDirectory)/eng/pipelines/common/entitlements.plist - - - script: $(BaseJobBuildCommand) -subset host.pkg+host.tools+host.pretest+host.tests+packs - displayName: Build and Package - continueOnError: ${{ and(eq(variables.SkipTests, false), eq(parameters.shouldContinueOnError, true)) }} + - script: $(BaseJobBuildCommand) + displayName: Build + continueOnError: ${{ and(eq(variables.SkipTests, false), eq(parameters.shouldContinueOnError, true)) }} - ${{ if and(eq(parameters.isOfficialBuild, true), eq(parameters.osGroup, 'windows')) }}: - powershell: ./eng/collect_vsinfo.ps1 -ArchiveRunName postbuild_log diff --git a/eng/pipelines/installer/jobs/steps/build-linux-package.yml b/eng/pipelines/installer/jobs/steps/build-linux-package.yml index 645b3edefa7ef5..76ede3ee0474f3 100644 --- a/eng/pipelines/installer/jobs/steps/build-linux-package.yml +++ b/eng/pipelines/installer/jobs/steps/build-linux-package.yml @@ -4,6 +4,7 @@ parameters: packageStepDescription: null packagingArgs: '' subsetArg: '' + condition: succeeded() steps: ## Run NuGet Authentication for each of the side containers @@ -20,6 +21,7 @@ steps: /bl:artifacts/log/$(_BuildConfig)/msbuild.${{ parameters.packageType }}.installers.binlog displayName: Package ${{ parameters.packageStepDescription }} - ${{ parameters.packageType }} target: ${{ parameters.target }} + condition: ${{ parameters.condition }} # Broken symbolic links break the SBOM processing # We make some symlinks during the installer generation process, # but they aren't always valid on disk afterwards. Some of our tooling, diff --git a/eng/pipelines/runtime-official.yml b/eng/pipelines/runtime-official.yml index d8fd9bacc23df1..34053b98a2dd14 100644 --- a/eng/pipelines/runtime-official.yml +++ b/eng/pipelines/runtime-official.yml @@ -58,47 +58,246 @@ extends: sourceIndexBuildCommand: build.cmd -subset libs.sfx+libs.oob -binarylog -os linux -ci /p:SkipLibrariesNativeRuntimePackages=true # - # Build CoreCLR + # Build CoreCLR runtime packs + # Windows x64/arm64 + # Sign diagnostic files after native build # - template: /eng/pipelines/common/platform-matrix.yml parameters: - jobTemplate: /eng/pipelines/coreclr/templates/build-job.yml + jobTemplate: /eng/pipelines/common/global-build-job.yml + buildConfig: release + platforms: + - windows_x64 + - windows_arm64 + jobParameters: + buildArgs: -s clr.runtime+clr.alljits+clr.nativeaotruntime -c $(_BuildConfig) /bl:$(Build.SourcesDirectory)/artifacts/logs/$(_BuildConfig)/CoreClrNativeBuild.binlog + nameSuffix: CoreCLR + isOfficialBuild: ${{ variables.isOfficialBuild }} + timeoutInMinutes: 120 + postBuildSteps: + - template: /eng/pipelines/coreclr/templates/sign-diagnostic-files.yml + parameters: + basePath: $(Build.SourcesDirectory)/artifacts/bin/coreclr + isOfficialBuild: ${{ variables.isOfficialBuild }} + timeoutInMinutes: 30 + # Now that we've signed the diagnostic files, do the rest of the build. + - template: /eng/pipelines/common/templates/global-build-step.yml + parameters: + buildArgs: -s clr.corelib+clr.nativecorelib+clr.nativeaotlibs+clr.tools+clr.packages+libs+host+packs -c $(_BuildConfig) + displayName: Build managed CoreCLR components, all libraries, hosts, and packs + + # Upload the results. + - template: /eng/pipelines/common/upload-intermediate-artifacts-step.yml + parameters: + name: $(osGroup)$(osSubgroup)_$(archType) + + + # + # Build CoreCLR runtime packs + # Windows x86 + # No NativeAOT as NativeAOT is not supported on x86 + # Sign diagnostic files after native build + # + - template: /eng/pipelines/common/platform-matrix.yml + parameters: + jobTemplate: /eng/pipelines/common/global-build-job.yml + buildConfig: release + platforms: + - windows_x86 + jobParameters: + buildArgs: -s clr.runtime+clr.alljits -c $(_BuildConfig) /bl:$(Build.SourcesDirectory)/artifacts/logs/$(_BuildConfig)/CoreClrNativeBuild.binlog + nameSuffix: CoreCLR + isOfficialBuild: ${{ variables.isOfficialBuild }} + timeoutInMinutes: 120 + postBuildSteps: + - template: /eng/pipelines/coreclr/templates/sign-diagnostic-files.yml + parameters: + basePath: $(Build.SourcesDirectory)/artifacts/bin/coreclr + isOfficialBuild: ${{ variables.isOfficialBuild }} + timeoutInMinutes: 30 + # Now that we've signed the diagnostic files, do the rest of the build. + - template: /eng/pipelines/common/templates/global-build-step.yml + parameters: + buildArgs: -s clr.corelib+clr.nativecorelib+clr.tools+clr.packages+libs+host+packs -c $(_BuildConfig) + displayName: Build managed CoreCLR components, all libraries, hosts, and packs + + # Upload the results. + - template: /eng/pipelines/common/upload-intermediate-artifacts-step.yml + parameters: + name: $(osGroup)$(osSubgroup)_$(archType) + # + # Build CoreCLR runtime packs + # Mac x64/arm64 + # Sign and entitle createdump and corerun after native build. + # + - template: /eng/pipelines/common/platform-matrix.yml + parameters: + jobTemplate: /eng/pipelines/common/global-build-job.yml buildConfig: release platforms: - osx_arm64 - osx_x64 + jobParameters: + buildArgs: -s clr.runtime+clr.alljits+clr.nativeaotruntime+host.native -c $(_BuildConfig) /bl:$(Build.SourcesDirectory)/artifacts/logs/$(_BuildConfig)/CoreClrNativeBuild.binlog + nameSuffix: CoreCLR + isOfficialBuild: ${{ variables.isOfficialBuild }} + timeoutInMinutes: 120 + postBuildSteps: + - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + - template: /eng/pipelines/common/macos-sign-with-entitlements.yml + parameters: + filesToSign: + - name: createdump + path: $(Build.SourcesDirectory)/artifacts/bin/coreclr/$(osGroup).$(archType).$(_BuildConfig) + entitlementsFile: $(Build.SourcesDirectory)/eng/pipelines/common/createdump-entitlements.plist + - name: corerun + path: $(Build.SourcesDirectory)/artifacts/bin/coreclr/$(osGroup).$(archType).$(_BuildConfig) + entitlementsFile: $(Build.SourcesDirectory)/eng/pipelines/common/entitlements.plist + - name: dotnet + path: $(Build.SourcesDirectory)/artifacts/bin/$(osGroup)-$(archType).$(_BuildConfig)/corehost + entitlementsFile: $(Build.SourcesDirectory)/eng/pipelines/common/entitlements.plist + - name: apphost + path: $(Build.SourcesDirectory)/artifacts/bin/$(osGroup)-$(archType).$(_BuildConfig)/corehost + entitlementsFile: $(Build.SourcesDirectory)/eng/pipelines/common/entitlements.plist + + - task: CopyFiles@2 + displayName: 'Copy signed createdump to sharedFramework' + inputs: + contents: createdump + sourceFolder: $(Build.SourcesDirectory)/artifacts/bin/coreclr/$(osGroup).$(archType).$(_BuildConfig) + targetFolder: $(Build.SourcesDirectory)/artifacts/bin/coreclr/$(osGroup).$(archType).$(_BuildConfig)/sharedFramework + overWrite: true + + # Now that we've entitled and signed createdump, we can build the rest. + - template: /eng/pipelines/common/templates/global-build-step.yml + parameters: + buildArgs: -s clr.corelib+clr.nativecorelib+clr.nativeaotlibs+clr.tools+clr.packages+libs+host.tools+host.pkg+packs -c $(_BuildConfig) + displayName: Build managed CoreCLR and host components, all libraries, and packs + + # Upload the results. + - template: /eng/pipelines/common/upload-intermediate-artifacts-step.yml + parameters: + name: $(osGroup)$(osSubgroup)_$(archType) + + # + # Build CoreCLR runtime packs + # Linux and Linux_musl + # CoreCLR runtime for CrossDac packaging + # Create Linux installers + # + - template: /eng/pipelines/common/platform-matrix.yml + parameters: + jobTemplate: /eng/pipelines/common/global-build-job.yml + buildConfig: release + platforms: - linux_x64 - linux_arm - linux_arm64 - linux_musl_x64 - linux_musl_arm - linux_musl_arm64 - - windows_x86 - - windows_x64 - - windows_arm64 jobParameters: + buildArgs: -s clr.runtime+clr.alljits+clr.corelib+clr.nativecorelib+clr.tools+clr.aot+clr.packages+libs+host+packs -c $(_BuildConfig) + nameSuffix: CoreCLR isOfficialBuild: ${{ variables.isOfficialBuild }} - signBinaries: ${{ variables.isOfficialBuild }} timeoutInMinutes: 120 + postBuildSteps: + # Upload libcoreclr.so for CrossDac packaging + - task: CopyFiles@2 + displayName: Gather runtime for CrossDac + inputs: + SourceFolder: $(Build.SourcesDirectory)/artifacts/bin/coreclr/$(osGroup).$(archType).$(_BuildConfig) + Contents: libcoreclr.so + TargetFolder: $(Build.SourcesDirectory)/artifacts/CoreCLRCrossDacArtifacts/$(osGroup)$(osSubgroup).$(archType).$(_BuildConfig)/$(crossDacHostArch) + - task: PublishBuildArtifacts@1 + displayName: Publish runtime for CrossDac + inputs: + pathToPublish: $(Build.SourcesDirectory)/artifacts/CoreCLRCrossDacArtifacts + PublishLocation: Container + artifactName: CoreCLRCrossDacArtifacts + # Create RPMs and DEBs + - template: /eng/pipelines/installer/jobs/steps/build-linux-package.yml + parameters: + packageType: deb + target: debpkg + packageStepDescription: Runtime Deps, Runtime, Framework Packs Deb installers + subsetArg: -s packs.installers + packagingArgs: -c $(_BuildConfig) --arch $(archType) --os $(osGroup) --ci /p:OfficialBuildId=$(Build.BuildNumber) /p:BuildDebPackage=true + condition: and(succeeded(), eq(variables.osSubgroup, ''), eq(variables.archType, 'x64')) + - template: /eng/pipelines/installer/jobs/steps/build-linux-package.yml + parameters: + packageType: rpm + target: rpmpkg + packageStepDescription: Runtime Deps, Runtime, Framework Packs RPM installers + subsetArg: -s packs.installers + packagingArgs: -c $(_BuildConfig) --arch $(archType) --os $(osGroup) --ci /p:OfficialBuildId=$(Build.BuildNumber) /p:BuildRpmPackage=true + condition: and(succeeded(), eq(variables.osSubgroup, ''), in(variables.archType, 'x64', 'arm64')) + # Upload the results. + - template: /eng/pipelines/common/upload-intermediate-artifacts-step.yml + parameters: + name: $(osGroup)$(osSubgroup)_$(archType) + extraVariablesTemplates: + - template: /eng/pipelines/coreclr/templates/crossdac-hostarch.yml + + # + # Build and Pack CrossDac + # - template: /eng/pipelines/common/platform-matrix.yml parameters: - jobTemplate: /eng/pipelines/coreclr/templates/crossdac-pack.yml + jobTemplate: /eng/pipelines/common/global-build-job.yml buildConfig: release platforms: - windows_x64 jobParameters: + buildArgs: -s crossdacpack -c $(_BuildConfig) /p:CrossDacArtifactsDir=$(crossDacArtifactsPath) + nameSuffix: CrossDac isOfficialBuild: ${{ variables.isOfficialBuild }} timeoutInMinutes: 120 - crossDacPlatforms: - - linux_x64 - - linux_arm - - linux_arm64 - - linux_musl_x64 - - linux_musl_arm - - linux_musl_arm64 - - windows_x64 - - windows_arm64 + preBuildSteps: + - task: DownloadBuildArtifacts@0 + displayName: Download Runtimes for CrossDac packaging + inputs: + artifactName: $(crossDacArtifactsContainer) + downloadPath: $(crossDacArtifactsBasePath) + checkDownloadedFiles: true + - template: /eng/pipelines/common/templates/global-build-step.yml + parameters: + buildArgs: -s linuxdac+alpinedac -c $(_BuildConfig) + archParameter: -arch x64,x86,arm,arm64 + - task: CopyFiles@2 + displayName: Gather CrossDacs + inputs: + SourceFolder: $(Build.SourcesDirectory)/artifacts/bin/coreclr + Contents: | + ** + !**\sharedFramework\** + TargetFolder: $(crossDacArtifactsPath) + - template: /eng/pipelines/coreclr/templates/sign-diagnostic-files.yml + parameters: + basePath: $(crossDacArtifactsPath) + isOfficialBuild: ${{ variables.isOfficialBuild }} + timeoutInMinutes: 30 + postBuildSteps: + # Save packages using the prepare-signed-artifacts format. + # CrossDac packages are expected to be in the windows_x64 folder. + - template: /eng/pipelines/common/upload-intermediate-artifacts-step.yml + parameters: + name: windows_x64 + dependsOn: + - build_linux_x64_release_CoreCLR + - build_linux_arm_release_CoreCLR + - build_linux_arm64_release_CoreCLR + - build_linux_musl_x64_release_CoreCLR + - build_linux_musl_arm_release_CoreCLR + - build_linux_musl_arm64_release_CoreCLR + variables: + - name: crossDacArtifactsContainer + value: CoreCLRCrossDacArtifacts + - name: crossDacArtifactsBasePath + value: $(Build.StagingDirectory)/CrossDac + - name: crossDacArtifactsPath + value: $(crossDacArtifactsBasePath)/$(crossDacArtifactsContainer) # # Build NativeAOT runtime packs @@ -122,7 +321,7 @@ extends: - linux_bionic_x64 jobParameters: buildArgs: -s clr.nativeaotlibs+clr.nativeaotruntime+libs+packs -c $(_BuildConfig) /p:BuildNativeAOTRuntimePack=true /p:SkipLibrariesNativeRuntimePackages=true - nameSuffix: AllSubsets_NativeAOT + nameSuffix: NativeAOT isOfficialBuild: ${{ variables.isOfficialBuild }} postBuildSteps: - template: /eng/pipelines/common/upload-intermediate-artifacts-step.yml @@ -165,7 +364,7 @@ extends: # - windows_arm64 jobParameters: buildArgs: -s mono+libs+host+packs -c $(_BuildConfig) /p:BuildMonoAOTCrossCompiler=false - nameSuffix: AllSubsets_Mono + nameSuffix: Mono isOfficialBuild: ${{ variables.isOfficialBuild }} postBuildSteps: - template: /eng/pipelines/common/upload-intermediate-artifacts-step.yml @@ -182,7 +381,7 @@ extends: - wasi_wasm jobParameters: buildArgs: -s mono+libs+host+packs -c $(_BuildConfig) /p:AotHostArchitecture=x64 /p:AotHostOS=$(_hostedOS) - nameSuffix: AllSubsets_Mono + nameSuffix: Mono isOfficialBuild: ${{ variables.isOfficialBuild }} postBuildSteps: - template: /eng/pipelines/common/upload-intermediate-artifacts-step.yml @@ -198,7 +397,7 @@ extends: - browser_wasm jobParameters: buildArgs: -s mono+libs+host+packs -c $(_BuildConfig) /p:MonoWasmBuildVariant=multithread /p:AotHostArchitecture=x64 /p:AotHostOS=$(_hostedOS) - nameSuffix: AllSubsets_Mono_multithread + nameSuffix: Mono_multithread isOfficialBuild: ${{ variables.isOfficialBuild }} runtimeVariant: multithread postBuildSteps: @@ -329,7 +528,7 @@ extends: jobParameters: buildArgs: -s mono+libs+host+packs -c $(_BuildConfig) /p:MonoEnableLLVM=true /p:MonoBundleLLVMOptimizer=false - nameSuffix: AllSubsets_Mono_LLVMJIT + nameSuffix: Mono_LLVMJIT runtimeVariant: LLVMJIT isOfficialBuild: ${{ variables.isOfficialBuild }} postBuildSteps: @@ -343,7 +542,7 @@ extends: jobParameters: buildArgs: -s mono+libs+host+packs -c $(_BuildConfig) /p:MonoEnableLLVM=true /p:MonoAOTEnableLLVM=true /p:MonoBundleLLVMOptimizer=true - nameSuffix: AllSubsets_Mono_LLVMAOT + nameSuffix: Mono_LLVMAOT runtimeVariant: LLVMAOT isOfficialBuild: ${{ variables.isOfficialBuild }} postBuildSteps: @@ -352,49 +551,25 @@ extends: name: MonoRuntimePacks # - # Build libraries using live CoreLib from CoreCLR + # Build libraries AllConfigurations for packages # - template: /eng/pipelines/common/platform-matrix.yml parameters: - jobTemplate: /eng/pipelines/libraries/build-job.yml + jobTemplate: /eng/pipelines/common/global-build-job.yml buildConfig: Release platforms: - - osx_arm64 - - osx_x64 - - linux_x64 - - linux_arm - - linux_arm64 - - linux_musl_x64 - - linux_musl_arm - - linux_musl_arm64 - - windows_x86 - windows_x64 - - windows_arm64 jobParameters: - isOfficialBuild: ${{ variables.isOfficialBuild }} - liveRuntimeBuildConfig: release - # Official builds don't run tests, locally or on Helix - runTests: false - useHelix: false - + buildArgs: -s tools+libs -allConfigurations -c $(_BuildConfig) /p:TestAssemblies=false /p:TestPackages=true + nameSuffix: Libraries_AllConfigurations + postBuildSteps: + - template: /eng/pipelines/common/upload-intermediate-artifacts-step.yml + parameters: + name: Libraries_AllConfigurations + timeoutInMinutes: 95 # - # Build libraries AllConfigurations for packages + # Build SourceBuild packages # - - template: /eng/pipelines/common/platform-matrix.yml - parameters: - jobTemplate: /eng/pipelines/libraries/build-job.yml - buildConfig: Release - platforms: - - windows_x64 - jobParameters: - framework: allConfigurations - isOfficialBuild: ${{ variables.isOfficialBuild }} - isOfficialAllConfigurations: true - liveRuntimeBuildConfig: release - # Official builds don't run tests, locally or on Helix - runTests: false - useHelix: false - - template: /eng/pipelines/common/platform-matrix.yml parameters: jobTemplate: /eng/pipelines/common/global-build-job.yml @@ -410,30 +585,6 @@ extends: name: SourceBuildPackages timeoutInMinutes: 95 - # - # Installer Build - # - - template: /eng/pipelines/common/platform-matrix.yml - parameters: - jobTemplate: /eng/pipelines/installer/jobs/build-job.yml - buildConfig: Release - jobParameters: - liveRuntimeBuildConfig: release - liveLibrariesBuildConfig: Release - isOfficialBuild: ${{ variables.isOfficialBuild }} - platforms: - - osx_arm64 - - osx_x64 - - linux_x64 - - linux_arm - - linux_arm64 - - linux_musl_x64 - - linux_musl_arm - - linux_musl_arm64 - - windows_x86 - - windows_x64 - - windows_arm64 - # # Build PGO Instrumented CoreCLR Release # @@ -471,24 +622,24 @@ extends: isOfficialBuild: ${{ variables.isOfficialBuild }} timeoutInMinutes: 120 dependsOn: - - Build_android_arm_release_AllSubsets_Mono - - Build_android_arm64_release_AllSubsets_Mono - - Build_android_x86_release_AllSubsets_Mono - - Build_android_x64_release_AllSubsets_Mono - - Build_browser_wasm_Linux_release_AllSubsets_Mono - - Build_wasi_wasm_linux_release_AllSubsets_Mono - - Build_ios_arm64_release_AllSubsets_Mono - - Build_iossimulator_x64_release_AllSubsets_Mono - - Build_iossimulator_arm64_release_AllSubsets_Mono - - Build_maccatalyst_arm64_release_AllSubsets_Mono - - Build_maccatalyst_x64_release_AllSubsets_Mono - - Build_tvos_arm64_release_AllSubsets_Mono - - Build_tvossimulator_arm64_release_AllSubsets_Mono - - Build_tvossimulator_x64_release_AllSubsets_Mono + - Build_android_arm_release_Mono + - Build_android_arm64_release_Mono + - Build_android_x86_release_Mono + - Build_android_x64_release_Mono + - Build_browser_wasm_Linux_release_Mono + - Build_wasi_wasm_linux_release_Mono + - Build_ios_arm64_release_Mono + - Build_iossimulator_x64_release_Mono + - Build_iossimulator_arm64_release_Mono + - Build_maccatalyst_arm64_release_Mono + - Build_maccatalyst_x64_release_Mono + - Build_tvos_arm64_release_Mono + - Build_tvossimulator_arm64_release_Mono + - Build_tvossimulator_x64_release_Mono - Build_windows_x64_release_CrossAOT_Mono - - installer_coreclr__windows_x64_Release_ - - installer_coreclr__windows_x86_Release_ - - installer_coreclr__windows_arm64_Release_ + - Build_windows_x64_release_CoreCLR + - Build_windows_x86_release_CoreCLR + - Build_windows_arm64_release_CoreCLR - ${{ if eq(variables.isOfficialBuild, true) }}: - template: /eng/pipelines/official/stages/publish.yml diff --git a/eng/pipelines/runtime.yml b/eng/pipelines/runtime.yml index 22f4ceab01136d..f9ccbdf8dc8e86 100644 --- a/eng/pipelines/runtime.yml +++ b/eng/pipelines/runtime.yml @@ -405,6 +405,27 @@ extends: eq(dependencies.evaluate_paths.outputs['SetPathVars_coreclr.containsChange'], true), eq(dependencies.evaluate_paths.outputs['SetPathVars_tools_illink.containsChange'], true), eq(variables['isRollingBuild'], true)) + # + # Build CrossDacs + # + - template: /eng/pipelines/common/platform-matrix.yml + parameters: + jobTemplate: /eng/pipelines/common/global-build-job.yml + buildConfig: release + platforms: + - windows_x64 + variables: + - name: _archParameter + value: -arch x64,x86,arm,arm64 + jobParameters: + buildArgs: -s linuxdac+alpinedac -c Checked,$(_BuildConfig) + nameSuffix: CrossDac + isOfficialBuild: false + timeoutInMinutes: 60 + postBuildSteps: + - publish: $(Build.SourcesDirectory)/artifacts/bin/coreclr + displayName: Publish CrossDacs for diagnostics + artifact: CoreCLRCrossDacArtifacts # Build Mono AOT offset headers once, for consumption elsewhere # Only when mono changed @@ -420,7 +441,7 @@ extends: - ios_arm64 - maccatalyst_x64 jobParameters: - isOfficialBuild: ${{ variables.isOfficialBuild }} + isOfficialBuild: false # needed by crossaot condition: >- or( diff --git a/src/coreclr/build-runtime.cmd b/src/coreclr/build-runtime.cmd index 52910be7f1da29..71ab99aaccf248 100644 --- a/src/coreclr/build-runtime.cmd +++ b/src/coreclr/build-runtime.cmd @@ -211,8 +211,13 @@ if NOT "%__BuildType%"=="Release" ( set __PgoOptimize=0 ) -set "__BinDir=%__RootBinDir%\bin\coreclr\%__TargetOS%.%__TargetArch%.%__BuildType%" -set "__IntermediatesDir=%__RootBinDir%\obj\coreclr\%__TargetOS%.%__TargetArch%.%__BuildType%" +set __TargetOSDirName=%__TargetOS% +if "%__TargetOS%"=="alpine" ( + set __TargetOSDirName=linux_musl +) + +set "__BinDir=%__RootBinDir%\bin\coreclr\%__TargetOSDirName%.%__TargetArch%.%__BuildType%" +set "__IntermediatesDir=%__RootBinDir%\obj\coreclr\%__TargetOSDirName%.%__TargetArch%.%__BuildType%" set "__LogsDir=%__RootBinDir%\log\!__BuildType!" set "__MsbuildDebugLogsDir=%__LogsDir%\MsbuildDebugLogs" set "__ArtifactsIntermediatesDir=%__RepoRootDir%\artifacts\obj\coreclr\" From e66bc8a4cc46c4575cf1559b0ff6aba18e1073dc Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Wed, 4 Oct 2023 19:54:21 -0700 Subject: [PATCH 12/21] Remove the MarshallingGeneratorFactoryKey type and construct the generator factory during the 'source emit' stage. (#93034) --- .../JSImportGenerator/JSExportGenerator.cs | 25 +++------------ .../JSImportGenerator/JSGeneratorOptions.cs | 30 ----------------- .../JSImportGenerator/JSImportGenerator.cs | 29 ++++------------- ...omImportToGeneratedComInterfaceAnalyzer.cs | 8 ++--- .../ComInterfaceGenerator.cs | 6 ++-- .../ComInterfaceGeneratorHelpers.cs | 25 ++++++++++++--- .../ComInterfaceGenerator/ComMethodContext.cs | 4 +-- .../IncrementalMethodStubGenerationContext.cs | 5 +-- .../VirtualMethodPointerStubGenerator.cs | 23 ++++++++----- .../VtableIndexStubGenerator.cs | 9 +++--- .../VtableIndexStubGeneratorHelpers.cs | 25 ++++++++++++--- .../ConvertToLibraryImportAnalyzer.cs | 4 +-- .../LibraryImportGenerator.cs | 14 +++++--- .../LibraryImportGeneratorHelpers.cs | 10 +++--- .../IMarshallingGeneratorFactory.cs | 32 ------------------- 15 files changed, 96 insertions(+), 153 deletions(-) delete mode 100644 src/libraries/System.Runtime.InteropServices.JavaScript/gen/JSImportGenerator/JSGeneratorOptions.cs diff --git a/src/libraries/System.Runtime.InteropServices.JavaScript/gen/JSImportGenerator/JSExportGenerator.cs b/src/libraries/System.Runtime.InteropServices.JavaScript/gen/JSImportGenerator/JSExportGenerator.cs index 03e22cc2f38926..8db3bc343edb04 100644 --- a/src/libraries/System.Runtime.InteropServices.JavaScript/gen/JSImportGenerator/JSExportGenerator.cs +++ b/src/libraries/System.Runtime.InteropServices.JavaScript/gen/JSImportGenerator/JSExportGenerator.cs @@ -24,7 +24,6 @@ internal sealed record IncrementalStubGenerationContext( ContainingSyntax StubMethodSyntaxTemplate, MethodSignatureDiagnosticLocations DiagnosticLocation, JSExportData JSExportData, - MarshallingGeneratorFactoryKey GeneratorFactoryKey, SequenceEqualImmutableArray Diagnostics); public static class StepNames @@ -57,10 +56,6 @@ public void Initialize(IncrementalGeneratorInitializationContext context) context.ReportDiagnostic(invalidMethod.Diagnostic); }); - // Compute generator options - IncrementalValueProvider stubOptions = context.AnalyzerConfigOptionsProvider - .Select(static (options, ct) => new JSGeneratorOptions(options.GlobalOptions)); - IncrementalValueProvider stubEnvironment = context.CreateStubEnvironmentProvider(); // Validate environment that is being used to generate stubs. @@ -77,16 +72,14 @@ public void Initialize(IncrementalGeneratorInitializationContext context) IncrementalValuesProvider<(MemberDeclarationSyntax, StatementSyntax, AttributeListSyntax, ImmutableArray)> generateSingleStub = methodsToGenerate .Combine(stubEnvironment) - .Combine(stubOptions) .Select(static (data, ct) => new { - data.Left.Left.Syntax, - data.Left.Left.Symbol, - Environment = data.Left.Right, - Options = data.Right + data.Left.Syntax, + data.Left.Symbol, + Environment = data.Right, }) .Select( - static (data, ct) => CalculateStubInformation(data.Syntax, data.Symbol, data.Environment, data.Options, ct) + static (data, ct) => CalculateStubInformation(data.Syntax, data.Symbol, data.Environment, ct) ) .WithTrackingName(StepNames.CalculateStubInformation) .Select( @@ -172,7 +165,6 @@ private static IncrementalStubGenerationContext CalculateStubInformation( MethodDeclarationSyntax originalSyntax, IMethodSymbol symbol, StubEnvironment environment, - JSGeneratorOptions options, CancellationToken ct) { ct.ThrowIfCancellationRequested(); @@ -214,16 +206,9 @@ private static IncrementalStubGenerationContext CalculateStubInformation( methodSyntaxTemplate, locations, jsExportData, - CreateGeneratorFactory(options), new SequenceEqualImmutableArray(generatorDiagnostics.Diagnostics.ToImmutableArray())); } - private static MarshallingGeneratorFactoryKey CreateGeneratorFactory(JSGeneratorOptions options) - { - JSGeneratorFactory jsGeneratorFactory = new JSGeneratorFactory(); - return MarshallingGeneratorFactoryKey.Create(options, jsGeneratorFactory); - } - private static NamespaceDeclarationSyntax GenerateRegSource( ImmutableArray<(StatementSyntax Registration, AttributeListSyntax Attribute)> methods) { @@ -298,7 +283,7 @@ private static (MemberDeclarationSyntax, StatementSyntax, AttributeListSyntax, I incrementalContext.JSExportData, incrementalContext.SignatureContext, diagnostics, - incrementalContext.GeneratorFactoryKey.GeneratorFactory); + new JSGeneratorFactory()); var wrapperName = "__Wrapper_" + incrementalContext.StubMethodSyntaxTemplate.Identifier + "_" + incrementalContext.SignatureContext.TypesHash; diff --git a/src/libraries/System.Runtime.InteropServices.JavaScript/gen/JSImportGenerator/JSGeneratorOptions.cs b/src/libraries/System.Runtime.InteropServices.JavaScript/gen/JSImportGenerator/JSGeneratorOptions.cs deleted file mode 100644 index 9d02fb2b0c7632..00000000000000 --- a/src/libraries/System.Runtime.InteropServices.JavaScript/gen/JSImportGenerator/JSGeneratorOptions.cs +++ /dev/null @@ -1,30 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using Microsoft.CodeAnalysis.Diagnostics; - -namespace Microsoft.Interop.JavaScript -{ - internal sealed record JSGeneratorOptions(bool EnableJSImport, bool EnableJSExport) - { - public JSGeneratorOptions(AnalyzerConfigOptions options) - : this(options.EnableJSImport(), options.EnableJSExport()) - { - } - } - - public static class OptionsHelper - { - public const string EnableJSImportOption = "build_property.JSImportGenerator_EnableJSImport"; - public const string EnableJSExportOption = "build_property.JSImportGenerator_EnableJSExport"; - private static bool GetBoolOption(this AnalyzerConfigOptions options, string key) - { - return options.TryGetValue(key, out string? value) - && bool.TryParse(value, out bool result) - && result; - } - - internal static bool EnableJSImport(this AnalyzerConfigOptions options) => options.GetBoolOption(EnableJSImportOption); - internal static bool EnableJSExport(this AnalyzerConfigOptions options) => options.GetBoolOption(EnableJSExportOption); - } -} diff --git a/src/libraries/System.Runtime.InteropServices.JavaScript/gen/JSImportGenerator/JSImportGenerator.cs b/src/libraries/System.Runtime.InteropServices.JavaScript/gen/JSImportGenerator/JSImportGenerator.cs index 06f023413a5c37..39b0e5c8d9dd42 100644 --- a/src/libraries/System.Runtime.InteropServices.JavaScript/gen/JSImportGenerator/JSImportGenerator.cs +++ b/src/libraries/System.Runtime.InteropServices.JavaScript/gen/JSImportGenerator/JSImportGenerator.cs @@ -24,7 +24,6 @@ internal sealed record IncrementalStubGenerationContext( ContainingSyntax StubMethodSyntaxTemplate, MethodSignatureDiagnosticLocations DiagnosticLocation, JSImportData JSImportData, - MarshallingGeneratorFactoryKey GeneratorFactoryKey, SequenceEqualImmutableArray Diagnostics); public static class StepNames @@ -57,10 +56,6 @@ public void Initialize(IncrementalGeneratorInitializationContext context) context.ReportDiagnostic(invalidMethod.Diagnostic); }); - // Compute generator options - IncrementalValueProvider stubOptions = context.AnalyzerConfigOptionsProvider - .Select(static (options, ct) => new JSGeneratorOptions(options.GlobalOptions)); - IncrementalValueProvider stubEnvironment = context.CreateStubEnvironmentProvider(); // Validate environment that is being used to generate stubs. @@ -77,21 +72,18 @@ public void Initialize(IncrementalGeneratorInitializationContext context) IncrementalValuesProvider<(MemberDeclarationSyntax, ImmutableArray)> generateSingleStub = methodsToGenerate .Combine(stubEnvironment) - .Combine(stubOptions) .Select(static (data, ct) => new { - data.Left.Left.Syntax, - data.Left.Left.Symbol, - Environment = data.Left.Right, - Options = data.Right + data.Left.Syntax, + data.Left.Symbol, + Environment = data.Right, }) .Select( - static (data, ct) => CalculateStubInformation(data.Syntax, data.Symbol, data.Environment, data.Options, ct) + static (data, ct) => CalculateStubInformation(data.Syntax, data.Symbol, data.Environment, ct) ) .WithTrackingName(StepNames.CalculateStubInformation) - .Combine(stubOptions) .Select( - static (data, ct) => GenerateSource(data.Left) + static (data, ct) => GenerateSource(data) ) .WithComparer(Comparers.GeneratedSyntax) .WithTrackingName(StepNames.GenerateSingleStub); @@ -160,7 +152,6 @@ private static IncrementalStubGenerationContext CalculateStubInformation( MethodDeclarationSyntax originalSyntax, IMethodSymbol symbol, StubEnvironment environment, - JSGeneratorOptions options, CancellationToken ct) { ct.ThrowIfCancellationRequested(); @@ -201,17 +192,9 @@ private static IncrementalStubGenerationContext CalculateStubInformation( methodSyntaxTemplate, locations, jsImportData, - CreateGeneratorFactory(options), new SequenceEqualImmutableArray(generatorDiagnostics.Diagnostics.ToImmutableArray())); } - private static MarshallingGeneratorFactoryKey CreateGeneratorFactory(JSGeneratorOptions options) - { - JSGeneratorFactory jsGeneratorFactory = new JSGeneratorFactory(); - - return MarshallingGeneratorFactoryKey.Create(options, jsGeneratorFactory); - } - private static (MemberDeclarationSyntax, ImmutableArray) GenerateSource( IncrementalStubGenerationContext incrementalContext) { @@ -223,7 +206,7 @@ private static (MemberDeclarationSyntax, ImmutableArray) Generat incrementalContext.JSImportData, incrementalContext.SignatureContext, diagnostics, - incrementalContext.GeneratorFactoryKey.GeneratorFactory); + new JSGeneratorFactory()); BlockSyntax code = stubGenerator.GenerateJSImportBody(); diff --git a/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/Analyzers/ConvertComImportToGeneratedComInterfaceAnalyzer.cs b/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/Analyzers/ConvertComImportToGeneratedComInterfaceAnalyzer.cs index e30423b4dc6203..0006f43d370159 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/Analyzers/ConvertComImportToGeneratedComInterfaceAnalyzer.cs +++ b/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/Analyzers/ConvertComImportToGeneratedComInterfaceAnalyzer.cs @@ -81,8 +81,8 @@ public override void Initialize(AnalysisContext context) new CodeEmitOptions(SkipInit: true), typeof(ConvertComImportToGeneratedComInterfaceAnalyzer).Assembly); - var managedToUnmanagedFactory = ComInterfaceGeneratorHelpers.CreateGeneratorFactory(env, MarshalDirection.ManagedToUnmanaged); - var unmanagedToManagedFactory = ComInterfaceGeneratorHelpers.CreateGeneratorFactory(env, MarshalDirection.UnmanagedToManaged); + var managedToUnmanagedFactory = ComInterfaceGeneratorHelpers.GetGeneratorFactory(env.EnvironmentFlags, MarshalDirection.ManagedToUnmanaged); + var unmanagedToManagedFactory = ComInterfaceGeneratorHelpers.GetGeneratorFactory(env.EnvironmentFlags, MarshalDirection.UnmanagedToManaged); mayRequireAdditionalWork = diagnostics.Diagnostics.Any(); bool anyExplicitlyUnsupportedInfo = false; @@ -118,8 +118,8 @@ public override void Initialize(AnalysisContext context) info = info with { MarshallingAttributeInfo = inner }; } // Run both factories and collect any binding failures. - ResolvedGenerator unmanagedToManagedGenerator = unmanagedToManagedFactory.GeneratorFactory.Create(info, nativeToManagedStubCodeContext); - ResolvedGenerator managedToUnmanagedGenerator = managedToUnmanagedFactory.GeneratorFactory.Create(info, managedToNativeStubCodeContext); + ResolvedGenerator unmanagedToManagedGenerator = unmanagedToManagedFactory.Create(info, nativeToManagedStubCodeContext); + ResolvedGenerator managedToUnmanagedGenerator = managedToUnmanagedFactory.Create(info, managedToNativeStubCodeContext); return managedToUnmanagedGenerator with { Diagnostics = managedToUnmanagedGenerator.Diagnostics.AddRange(unmanagedToManagedGenerator.Diagnostics) diff --git a/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/ComInterfaceGenerator.cs b/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/ComInterfaceGenerator.cs index af2aa0205e568e..540b6089c5b387 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/ComInterfaceGenerator.cs +++ b/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/ComInterfaceGenerator.cs @@ -372,8 +372,7 @@ private static IncrementalMethodStubGenerationContext CalculateStubInformation(M callConv.ToSequenceEqualImmutableArray(SyntaxEquivalentComparer.Instance), virtualMethodIndexData, new ComExceptionMarshalling(), - ComInterfaceGeneratorHelpers.CreateGeneratorFactory(environment, MarshalDirection.ManagedToUnmanaged), - ComInterfaceGeneratorHelpers.CreateGeneratorFactory(environment, MarshalDirection.UnmanagedToManaged), + environment.EnvironmentFlags, owningInterface, declaringType, generatorDiagnostics.Diagnostics.ToSequenceEqualImmutableArray(), @@ -569,7 +568,8 @@ private static InterfaceDeclarationSyntax GenerateImplementationVTable(ComInterf interfaceMethods.DeclaredMethods .Where(context => context.UnmanagedToManagedStub.Diagnostics.All(diag => diag.Descriptor.DefaultSeverity != DiagnosticSeverity.Error)) .Select(context => context.GenerationContext), - vtableLocalName); + vtableLocalName, + ComInterfaceGeneratorHelpers.GetGeneratorFactory); return ImplementationInterfaceTemplate .AddMembers( diff --git a/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/ComInterfaceGeneratorHelpers.cs b/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/ComInterfaceGeneratorHelpers.cs index 79f522d5c54144..c5fd203db2a0f0 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/ComInterfaceGeneratorHelpers.cs +++ b/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/ComInterfaceGeneratorHelpers.cs @@ -9,7 +9,12 @@ namespace Microsoft.Interop { internal static class ComInterfaceGeneratorHelpers { - public static MarshallingGeneratorFactoryKey CreateGeneratorFactory(StubEnvironment env, MarshalDirection direction) + private static readonly IMarshallingGeneratorFactory s_managedToUnmanagedDisabledMarshallingGeneratorFactory = CreateGeneratorFactory(EnvironmentFlags.DisableRuntimeMarshalling, MarshalDirection.ManagedToUnmanaged); + private static readonly IMarshallingGeneratorFactory s_unmanagedToManagedDisabledMarshallingGeneratorFactory = CreateGeneratorFactory(EnvironmentFlags.DisableRuntimeMarshalling, MarshalDirection.UnmanagedToManaged); + private static readonly IMarshallingGeneratorFactory s_managedToUnmanagedEnabledMarshallingGeneratorFactory = CreateGeneratorFactory(EnvironmentFlags.None, MarshalDirection.ManagedToUnmanaged); + private static readonly IMarshallingGeneratorFactory s_unmanagedToManagedEnabledMarshallingGeneratorFactory = CreateGeneratorFactory(EnvironmentFlags.None, MarshalDirection.UnmanagedToManaged); + + private static IMarshallingGeneratorFactory CreateGeneratorFactory(EnvironmentFlags env, MarshalDirection direction) { IMarshallingGeneratorFactory generatorFactory; @@ -20,7 +25,7 @@ public static MarshallingGeneratorFactoryKey CreateGeneratorFactory( // Since the char type can go into the P/Invoke signature here, we can only use it when // runtime marshalling is disabled. - generatorFactory = new CharMarshallingGeneratorFactory(generatorFactory, useBlittableMarshallerForUtf16: env.EnvironmentFlags.HasFlag(EnvironmentFlags.DisableRuntimeMarshalling), TypeNames.GeneratedComInterfaceAttribute_ShortName); + generatorFactory = new CharMarshallingGeneratorFactory(generatorFactory, useBlittableMarshallerForUtf16: env.HasFlag(EnvironmentFlags.DisableRuntimeMarshalling), TypeNames.GeneratedComInterfaceAttribute_ShortName); InteropGenerationOptions interopGenerationOptions = new(UseMarshalType: true); generatorFactory = new MarshalAsMarshallingGeneratorFactory(interopGenerationOptions, generatorFactory); @@ -31,14 +36,14 @@ public static MarshallingGeneratorFactoryKey CreateGeneratorFactory( // Since the char type in an array will not be part of the P/Invoke signature, we can // use the regular blittable marshaller in all cases. new CharMarshallingGeneratorFactory(generatorFactory, useBlittableMarshallerForUtf16: true, TypeNames.GeneratedComInterfaceAttribute_ShortName), - new AttributedMarshallingModelOptions(env.EnvironmentFlags.HasFlag(EnvironmentFlags.DisableRuntimeMarshalling), MarshalMode.ElementIn, MarshalMode.ElementRef, MarshalMode.ElementOut)); + new AttributedMarshallingModelOptions(env.HasFlag(EnvironmentFlags.DisableRuntimeMarshalling), MarshalMode.ElementIn, MarshalMode.ElementRef, MarshalMode.ElementOut)); // We don't need to include the later generator factories for collection elements // as the later generator factories only apply to parameters. generatorFactory = new AttributedMarshallingModelGeneratorFactory( generatorFactory, elementFactory, new AttributedMarshallingModelOptions( - env.EnvironmentFlags.HasFlag(EnvironmentFlags.DisableRuntimeMarshalling), + env.HasFlag(EnvironmentFlags.DisableRuntimeMarshalling), direction == MarshalDirection.ManagedToUnmanaged ? MarshalMode.ManagedToUnmanagedIn : MarshalMode.UnmanagedToManagedOut, @@ -55,7 +60,17 @@ public static MarshallingGeneratorFactoryKey CreateGeneratorFactory( generatorFactory = new ByValueContentsMarshalKindValidator(generatorFactory); - return MarshallingGeneratorFactoryKey.Create(new FactoryKey(env.EnvironmentFlags.HasFlag(EnvironmentFlags.DisableRuntimeMarshalling)), generatorFactory); + return generatorFactory; } + + public static IMarshallingGeneratorFactory GetGeneratorFactory(EnvironmentFlags env, MarshalDirection direction) + => (env.HasFlag(EnvironmentFlags.DisableRuntimeMarshalling), direction) switch + { + (true, MarshalDirection.ManagedToUnmanaged) => s_managedToUnmanagedDisabledMarshallingGeneratorFactory, + (true, MarshalDirection.UnmanagedToManaged) => s_unmanagedToManagedDisabledMarshallingGeneratorFactory, + (false, MarshalDirection.ManagedToUnmanaged) => s_managedToUnmanagedEnabledMarshallingGeneratorFactory, + (false, MarshalDirection.UnmanagedToManaged) => s_unmanagedToManagedEnabledMarshallingGeneratorFactory, + _ => throw new UnreachableException(), + }; } } diff --git a/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/ComMethodContext.cs b/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/ComMethodContext.cs index c5f8692eade7d9..f849757acdd6e3 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/ComMethodContext.cs +++ b/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/ComMethodContext.cs @@ -79,7 +79,7 @@ private GeneratedMethodContextBase CreateManagedToUnmanagedStub() { return new SkippedStubContext(OriginalDeclaringInterface.Info.Type); } - var (methodStub, diagnostics) = VirtualMethodPointerStubGenerator.GenerateManagedToNativeStub(GenerationContext); + var (methodStub, diagnostics) = VirtualMethodPointerStubGenerator.GenerateManagedToNativeStub(GenerationContext, ComInterfaceGeneratorHelpers.GetGeneratorFactory); return new GeneratedStubCodeContext(GenerationContext.TypeKeyOwner, GenerationContext.ContainingSyntaxContext, new(methodStub), new(diagnostics)); } @@ -93,7 +93,7 @@ private GeneratedMethodContextBase CreateUnmanagedToManagedStub() { return new SkippedStubContext(GenerationContext.OriginalDefiningType); } - var (methodStub, diagnostics) = VirtualMethodPointerStubGenerator.GenerateNativeToManagedStub(GenerationContext); + var (methodStub, diagnostics) = VirtualMethodPointerStubGenerator.GenerateNativeToManagedStub(GenerationContext, ComInterfaceGeneratorHelpers.GetGeneratorFactory); return new GeneratedStubCodeContext(GenerationContext.OriginalDefiningType, GenerationContext.ContainingSyntaxContext, new(methodStub), new(diagnostics)); } diff --git a/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/IncrementalMethodStubGenerationContext.cs b/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/IncrementalMethodStubGenerationContext.cs index 8117f3db866588..06ece904e3f2ef 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/IncrementalMethodStubGenerationContext.cs +++ b/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/IncrementalMethodStubGenerationContext.cs @@ -7,8 +7,6 @@ namespace Microsoft.Interop { - internal record struct FactoryKey(bool RuntimeMarshallingDisabled); - internal abstract record GeneratedMethodContextBase(ManagedTypeInfo OriginalDefiningType, SequenceEqualImmutableArray Diagnostics); internal sealed record IncrementalMethodStubGenerationContext( @@ -19,8 +17,7 @@ internal sealed record IncrementalMethodStubGenerationContext( SequenceEqualImmutableArray CallingConvention, VirtualMethodIndexData VtableIndexData, MarshallingInfo ExceptionMarshallingInfo, - MarshallingGeneratorFactoryKey ManagedToUnmanagedGeneratorFactory, - MarshallingGeneratorFactoryKey UnmanagedToManagedGeneratorFactory, + EnvironmentFlags EnvironmentFlags, ManagedTypeInfo TypeKeyOwner, ManagedTypeInfo DeclaringType, SequenceEqualImmutableArray Diagnostics, diff --git a/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/VirtualMethodPointerStubGenerator.cs b/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/VirtualMethodPointerStubGenerator.cs index 44efabc76d6923..e0fb5046630d19 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/VirtualMethodPointerStubGenerator.cs +++ b/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/VirtualMethodPointerStubGenerator.cs @@ -16,7 +16,8 @@ namespace Microsoft.Interop internal static class VirtualMethodPointerStubGenerator { public static (MethodDeclarationSyntax, ImmutableArray) GenerateManagedToNativeStub( - IncrementalMethodStubGenerationContext methodStub) + IncrementalMethodStubGenerationContext methodStub, + Func generatorFactoryCreator) { var diagnostics = new GeneratorDiagnosticsBag(new DiagnosticDescriptorProvider(), methodStub.DiagnosticLocation, SR.ResourceManager, typeof(FxResources.Microsoft.Interop.ComInterfaceGenerator.SR)); @@ -26,7 +27,7 @@ public static (MethodDeclarationSyntax, ImmutableArray) Generate methodStub.VtableIndexData.SetLastError, methodStub.VtableIndexData.ImplicitThisParameter, diagnostics, - methodStub.ManagedToUnmanagedGeneratorFactory.GeneratorFactory); + generatorFactoryCreator(methodStub.EnvironmentFlags, MarshalDirection.ManagedToUnmanaged)); BlockSyntax code = stubGenerator.GenerateStubBody( methodStub.VtableIndexData.Index, @@ -61,7 +62,8 @@ private static MethodDeclarationSyntax PrintGeneratedSource( private const string ThisParameterIdentifier = "@this"; public static (MethodDeclarationSyntax, ImmutableArray) GenerateNativeToManagedStub( - IncrementalMethodStubGenerationContext methodStub) + IncrementalMethodStubGenerationContext methodStub, + Func generatorFactoryCreator) { var diagnostics = new GeneratorDiagnosticsBag(new DiagnosticDescriptorProvider(), methodStub.DiagnosticLocation, SR.ResourceManager, typeof(FxResources.Microsoft.Interop.ComInterfaceGenerator.SR)); @@ -71,7 +73,7 @@ public static (MethodDeclarationSyntax, ImmutableArray) Generate var stubGenerator = new UnmanagedToManagedStubGenerator( elements, diagnostics, - methodStub.UnmanagedToManagedGeneratorFactory.GeneratorFactory); + generatorFactoryCreator(methodStub.EnvironmentFlags, MarshalDirection.UnmanagedToManaged)); BlockSyntax code = stubGenerator.GenerateStubBody( MemberAccessExpression(SyntaxKind.SimpleMemberAccessExpression, @@ -140,12 +142,15 @@ private static ImmutableArray AddImplicitElementInfos(Incremen return elements.ToImmutable(); } - public static BlockSyntax GenerateVirtualMethodTableSlotAssignments(IEnumerable vtableMethods, string vtableIdentifier) + public static BlockSyntax GenerateVirtualMethodTableSlotAssignments( + IEnumerable vtableMethods, + string vtableIdentifier, + Func generatorFactoryCreator) { List statements = new(); foreach (var method in vtableMethods) { - FunctionPointerTypeSyntax functionPointerType = GenerateUnmanagedFunctionPointerTypeForMethod(method); + FunctionPointerTypeSyntax functionPointerType = GenerateUnmanagedFunctionPointerTypeForMethod(method, generatorFactoryCreator); // [] = (void*)()&ABI_; statements.Add( @@ -163,14 +168,16 @@ public static BlockSyntax GenerateVirtualMethodTableSlotAssignments(IEnumerable< return Block(statements); } - private static FunctionPointerTypeSyntax GenerateUnmanagedFunctionPointerTypeForMethod(IncrementalMethodStubGenerationContext method) + private static FunctionPointerTypeSyntax GenerateUnmanagedFunctionPointerTypeForMethod( + IncrementalMethodStubGenerationContext method, + Func generatorFactoryCreator) { var diagnostics = new GeneratorDiagnosticsBag(new DiagnosticDescriptorProvider(), method.DiagnosticLocation, SR.ResourceManager, typeof(FxResources.Microsoft.Interop.ComInterfaceGenerator.SR)); var stubGenerator = new UnmanagedToManagedStubGenerator( AddImplicitElementInfos(method), diagnostics, - method.UnmanagedToManagedGeneratorFactory.GeneratorFactory); + generatorFactoryCreator(method.EnvironmentFlags, MarshalDirection.UnmanagedToManaged)); List functionPointerParameters = new(); var (paramList, retType, _) = stubGenerator.GenerateAbiMethodSignatureData(); diff --git a/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/VtableIndexStubGenerator.cs b/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/VtableIndexStubGenerator.cs index bd15eab32a9541..ab0c984b08b1b9 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/VtableIndexStubGenerator.cs +++ b/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/VtableIndexStubGenerator.cs @@ -314,8 +314,7 @@ private static IncrementalMethodStubGenerationContext CalculateStubInformation(M new SequenceEqualImmutableArray(callConv, SyntaxEquivalentComparer.Instance), VirtualMethodIndexData.From(virtualMethodIndexData), exceptionMarshallingInfo, - VtableIndexStubGeneratorHelpers.CreateGeneratorFactory(environment, MarshalDirection.ManagedToUnmanaged), - VtableIndexStubGeneratorHelpers.CreateGeneratorFactory(environment, MarshalDirection.UnmanagedToManaged), + environment.EnvironmentFlags, interfaceType, interfaceType, new SequenceEqualImmutableArray(generatorDiagnostics.Diagnostics.ToImmutableArray()), @@ -366,7 +365,7 @@ private static MarshallingInfo CreateExceptionMarshallingInfo(AttributeData virt private static (MemberDeclarationSyntax, ImmutableArray) GenerateManagedToNativeStub( IncrementalMethodStubGenerationContext methodStub) { - var (stub, diagnostics) = VirtualMethodPointerStubGenerator.GenerateManagedToNativeStub(methodStub); + var (stub, diagnostics) = VirtualMethodPointerStubGenerator.GenerateManagedToNativeStub(methodStub, VtableIndexStubGeneratorHelpers.GetGeneratorFactory); return ( methodStub.ContainingSyntaxContext.AddContainingSyntax( @@ -379,7 +378,7 @@ private static (MemberDeclarationSyntax, ImmutableArray) Generat private static (MemberDeclarationSyntax, ImmutableArray) GenerateNativeToManagedStub( IncrementalMethodStubGenerationContext methodStub) { - var (stub, diagnostics) = VirtualMethodPointerStubGenerator.GenerateNativeToManagedStub(methodStub); + var (stub, diagnostics) = VirtualMethodPointerStubGenerator.GenerateNativeToManagedStub(methodStub, VtableIndexStubGeneratorHelpers.GetGeneratorFactory); return ( methodStub.ContainingSyntaxContext.AddContainingSyntax( @@ -447,7 +446,7 @@ private static MemberDeclarationSyntax GeneratePopulateVTableMethod(IGrouping CreateGeneratorFactory(StubEnvironment env, MarshalDirection direction) + private static readonly IMarshallingGeneratorFactory s_managedToUnmanagedDisabledMarshallingGeneratorFactory = CreateGeneratorFactory(EnvironmentFlags.DisableRuntimeMarshalling, MarshalDirection.ManagedToUnmanaged); + private static readonly IMarshallingGeneratorFactory s_unmanagedToManagedDisabledMarshallingGeneratorFactory = CreateGeneratorFactory(EnvironmentFlags.DisableRuntimeMarshalling, MarshalDirection.UnmanagedToManaged); + private static readonly IMarshallingGeneratorFactory s_managedToUnmanagedEnabledMarshallingGeneratorFactory = CreateGeneratorFactory(EnvironmentFlags.None, MarshalDirection.ManagedToUnmanaged); + private static readonly IMarshallingGeneratorFactory s_unmanagedToManagedEnabledMarshallingGeneratorFactory = CreateGeneratorFactory(EnvironmentFlags.None, MarshalDirection.UnmanagedToManaged); + + private static IMarshallingGeneratorFactory CreateGeneratorFactory(EnvironmentFlags env, MarshalDirection direction) { IMarshallingGeneratorFactory generatorFactory; @@ -20,7 +25,7 @@ public static MarshallingGeneratorFactoryKey CreateGeneratorFactory( // Since the char type can go into the P/Invoke signature here, we can only use it when // runtime marshalling is disabled. - generatorFactory = new CharMarshallingGeneratorFactory(generatorFactory, useBlittableMarshallerForUtf16: env.EnvironmentFlags.HasFlag(EnvironmentFlags.DisableRuntimeMarshalling), TypeNames.VirtualMethodIndexAttribute_ShortName); + generatorFactory = new CharMarshallingGeneratorFactory(generatorFactory, useBlittableMarshallerForUtf16: env.HasFlag(EnvironmentFlags.DisableRuntimeMarshalling), TypeNames.VirtualMethodIndexAttribute_ShortName); InteropGenerationOptions interopGenerationOptions = new(UseMarshalType: true); generatorFactory = new MarshalAsMarshallingGeneratorFactory(interopGenerationOptions, generatorFactory); @@ -29,14 +34,14 @@ public static MarshallingGeneratorFactoryKey CreateGeneratorFactory( // Since the char type in an array will not be part of the P/Invoke signature, we can // use the regular blittable marshaller in all cases. new CharMarshallingGeneratorFactory(generatorFactory, useBlittableMarshallerForUtf16: true, TypeNames.VirtualMethodIndexAttribute_ShortName), - new AttributedMarshallingModelOptions(env.EnvironmentFlags.HasFlag(EnvironmentFlags.DisableRuntimeMarshalling), MarshalMode.ElementIn, MarshalMode.ElementRef, MarshalMode.ElementOut)); + new AttributedMarshallingModelOptions(env.HasFlag(EnvironmentFlags.DisableRuntimeMarshalling), MarshalMode.ElementIn, MarshalMode.ElementRef, MarshalMode.ElementOut)); // We don't need to include the later generator factories for collection elements // as the later generator factories only apply to parameters. generatorFactory = new AttributedMarshallingModelGeneratorFactory( generatorFactory, elementFactory, new AttributedMarshallingModelOptions( - env.EnvironmentFlags.HasFlag(EnvironmentFlags.DisableRuntimeMarshalling), + env.HasFlag(EnvironmentFlags.DisableRuntimeMarshalling), direction == MarshalDirection.ManagedToUnmanaged ? MarshalMode.ManagedToUnmanagedIn : MarshalMode.UnmanagedToManagedOut, @@ -51,7 +56,17 @@ public static MarshallingGeneratorFactoryKey CreateGeneratorFactory( generatorFactory = new ByValueContentsMarshalKindValidator(generatorFactory); - return MarshallingGeneratorFactoryKey.Create(new FactoryKey(env.EnvironmentFlags.HasFlag(EnvironmentFlags.DisableRuntimeMarshalling)), generatorFactory); + return generatorFactory; } + + public static IMarshallingGeneratorFactory GetGeneratorFactory(EnvironmentFlags env, MarshalDirection direction) + => (env.HasFlag(EnvironmentFlags.DisableRuntimeMarshalling), direction) switch + { + (true, MarshalDirection.ManagedToUnmanaged) => s_managedToUnmanagedDisabledMarshallingGeneratorFactory, + (true, MarshalDirection.UnmanagedToManaged) => s_unmanagedToManagedDisabledMarshallingGeneratorFactory, + (false, MarshalDirection.ManagedToUnmanaged) => s_managedToUnmanagedEnabledMarshallingGeneratorFactory, + (false, MarshalDirection.UnmanagedToManaged) => s_unmanagedToManagedEnabledMarshallingGeneratorFactory, + _ => throw new UnreachableException(), + }; } } diff --git a/src/libraries/System.Runtime.InteropServices/gen/LibraryImportGenerator/Analyzers/ConvertToLibraryImportAnalyzer.cs b/src/libraries/System.Runtime.InteropServices/gen/LibraryImportGenerator/Analyzers/ConvertToLibraryImportAnalyzer.cs index 751d8683fcd8ca..b2c758d8401087 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/LibraryImportGenerator/Analyzers/ConvertToLibraryImportAnalyzer.cs +++ b/src/libraries/System.Runtime.InteropServices/gen/LibraryImportGenerator/Analyzers/ConvertToLibraryImportAnalyzer.cs @@ -119,7 +119,7 @@ private static void AnalyzeSymbol(SymbolAnalysisContext context, INamedTypeSymbo new CodeEmitOptions(SkipInit: tf.TargetFramework == TargetFramework.Net), typeof(ConvertToLibraryImportAnalyzer).Assembly); - var generatorFactoryKey = LibraryImportGeneratorHelpers.CreateGeneratorFactory(env, tf, new LibraryImportGeneratorOptions(context.Options.AnalyzerConfigOptionsProvider.GlobalOptions)); + var factory = LibraryImportGeneratorHelpers.CreateGeneratorFactory(tf, new LibraryImportGeneratorOptions(context.Options.AnalyzerConfigOptionsProvider.GlobalOptions), env.EnvironmentFlags); bool mayRequireAdditionalWork = diagnostics.Diagnostics.Any(); bool anyExplicitlyUnsupportedInfo = false; @@ -140,7 +140,7 @@ private static void AnalyzeSymbol(SymbolAnalysisContext context, INamedTypeSymbo anyExplicitlyUnsupportedInfo = true; return ResolvedGenerator.Resolved(forwarder); } - return generatorFactoryKey.GeneratorFactory.Create(info, stubCodeContext); + return factory.Create(info, stubCodeContext); }), stubCodeContext, forwarder, out var bindingFailures); mayRequireAdditionalWork |= bindingFailures.Any(d => d.IsFatal); diff --git a/src/libraries/System.Runtime.InteropServices/gen/LibraryImportGenerator/LibraryImportGenerator.cs b/src/libraries/System.Runtime.InteropServices/gen/LibraryImportGenerator/LibraryImportGenerator.cs index 4e7ffc30181dc3..8af8ebb7827d32 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/LibraryImportGenerator/LibraryImportGenerator.cs +++ b/src/libraries/System.Runtime.InteropServices/gen/LibraryImportGenerator/LibraryImportGenerator.cs @@ -27,7 +27,9 @@ internal sealed record IncrementalStubGenerationContext( MethodSignatureDiagnosticLocations DiagnosticLocation, SequenceEqualImmutableArray ForwardedAttributes, LibraryImportData LibraryImportData, - MarshallingGeneratorFactoryKey<(TargetFrameworkSettings TargetFramework, LibraryImportGeneratorOptions Options)> GeneratorFactoryKey, + TargetFrameworkSettings TargetFramework, + LibraryImportGeneratorOptions Options, + EnvironmentFlags EnvironmentFlags, SequenceEqualImmutableArray Diagnostics); public static class StepNames @@ -307,7 +309,9 @@ private static IncrementalStubGenerationContext CalculateStubInformation( locations, new SequenceEqualImmutableArray(additionalAttributes.ToImmutableArray(), SyntaxEquivalentComparer.Instance), LibraryImportData.From(libraryImportData), - LibraryImportGeneratorHelpers.CreateGeneratorFactory(environment, targetFramework, options), + targetFramework, + options, + environment.EnvironmentFlags, new SequenceEqualImmutableArray(generatorDiagnostics.Diagnostics.ToImmutableArray()) ); } @@ -324,7 +328,7 @@ private static (MemberDeclarationSyntax, ImmutableArray) Generat bool supportsTargetFramework = !pinvokeStub.LibraryImportData.SetLastError || options.GenerateForwarders - || (pinvokeStub.GeneratorFactoryKey.Key.TargetFramework is (TargetFramework.Net, { Major: >= 6 })); + || (pinvokeStub.TargetFramework is (TargetFramework.Net, { Major: >= 6 })); foreach (TypePositionInfo typeInfo in pinvokeStub.SignatureContext.ElementTypeInformation) { @@ -340,8 +344,8 @@ private static (MemberDeclarationSyntax, ImmutableArray) Generat pinvokeStub.SignatureContext.ElementTypeInformation, pinvokeStub.LibraryImportData.SetLastError && !options.GenerateForwarders, diagnostics, - pinvokeStub.GeneratorFactoryKey.GeneratorFactory, - new CodeEmitOptions(SkipInit: pinvokeStub.GeneratorFactoryKey.Key.TargetFramework is (TargetFramework.Net, _))); + LibraryImportGeneratorHelpers.CreateGeneratorFactory(pinvokeStub.TargetFramework, pinvokeStub.Options, pinvokeStub.EnvironmentFlags), + new CodeEmitOptions(SkipInit: pinvokeStub.TargetFramework is (TargetFramework.Net, _))); // Check if the generator should produce a forwarder stub - regular DllImport. // This is done if the signature is blittable or the target framework is not supported. diff --git a/src/libraries/System.Runtime.InteropServices/gen/LibraryImportGenerator/LibraryImportGeneratorHelpers.cs b/src/libraries/System.Runtime.InteropServices/gen/LibraryImportGenerator/LibraryImportGeneratorHelpers.cs index fe52f028606f36..367d704e3735a8 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/LibraryImportGenerator/LibraryImportGeneratorHelpers.cs +++ b/src/libraries/System.Runtime.InteropServices/gen/LibraryImportGenerator/LibraryImportGeneratorHelpers.cs @@ -11,7 +11,7 @@ namespace Microsoft.Interop { internal static class LibraryImportGeneratorHelpers { - public static MarshallingGeneratorFactoryKey<(TargetFrameworkSettings, LibraryImportGeneratorOptions)> CreateGeneratorFactory(StubEnvironment env, TargetFrameworkSettings tf, LibraryImportGeneratorOptions options) + public static IMarshallingGeneratorFactory CreateGeneratorFactory(TargetFrameworkSettings tf, LibraryImportGeneratorOptions options, EnvironmentFlags env) { IMarshallingGeneratorFactory generatorFactory; @@ -36,7 +36,7 @@ internal static class LibraryImportGeneratorHelpers // Since the char type can go into the P/Invoke signature here, we can only use it when // runtime marshalling is disabled. - generatorFactory = new CharMarshallingGeneratorFactory(generatorFactory, useBlittableMarshallerForUtf16: env.EnvironmentFlags.HasFlag(EnvironmentFlags.DisableRuntimeMarshalling), TypeNames.LibraryImportAttribute_ShortName); + generatorFactory = new CharMarshallingGeneratorFactory(generatorFactory, useBlittableMarshallerForUtf16: env.HasFlag(EnvironmentFlags.DisableRuntimeMarshalling), TypeNames.LibraryImportAttribute_ShortName); InteropGenerationOptions interopGenerationOptions = new(options.UseMarshalType); generatorFactory = new MarshalAsMarshallingGeneratorFactory(interopGenerationOptions, generatorFactory); @@ -47,19 +47,19 @@ internal static class LibraryImportGeneratorHelpers // Since the char type in an array will not be part of the P/Invoke signature, we can // use the regular blittable marshaller in all cases. new CharMarshallingGeneratorFactory(generatorFactory, useBlittableMarshallerForUtf16: true, TypeNames.LibraryImportAttribute_ShortName), - new AttributedMarshallingModelOptions(env.EnvironmentFlags.HasFlag(EnvironmentFlags.DisableRuntimeMarshalling), MarshalMode.ElementIn, MarshalMode.ElementRef, MarshalMode.ElementOut)); + new AttributedMarshallingModelOptions(env.HasFlag(EnvironmentFlags.DisableRuntimeMarshalling), MarshalMode.ElementIn, MarshalMode.ElementRef, MarshalMode.ElementOut)); // We don't need to include the later generator factories for collection elements // as the later generator factories only apply to parameters. generatorFactory = new AttributedMarshallingModelGeneratorFactory( generatorFactory, elementFactory, - new AttributedMarshallingModelOptions(env.EnvironmentFlags.HasFlag(EnvironmentFlags.DisableRuntimeMarshalling), MarshalMode.ManagedToUnmanagedIn, MarshalMode.ManagedToUnmanagedRef, MarshalMode.ManagedToUnmanagedOut)); + new AttributedMarshallingModelOptions(env.HasFlag(EnvironmentFlags.DisableRuntimeMarshalling), MarshalMode.ManagedToUnmanagedIn, MarshalMode.ManagedToUnmanagedRef, MarshalMode.ManagedToUnmanagedOut)); } generatorFactory = new ByValueContentsMarshalKindValidator(generatorFactory); } - return MarshallingGeneratorFactoryKey.Create((tf, options), generatorFactory); + return generatorFactory; } } } diff --git a/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/IMarshallingGeneratorFactory.cs b/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/IMarshallingGeneratorFactory.cs index fd662445785aa8..53e6b5d7c05a1e 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/IMarshallingGeneratorFactory.cs +++ b/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/IMarshallingGeneratorFactory.cs @@ -17,36 +17,4 @@ public ResolvedGenerator Create( TypePositionInfo info, StubCodeContext context); } - - /// - /// A structure that wraps an with a key for comparison. - /// This value of this key should encompass all inputs that determine how the IMarshallingGeneratorFactory was created - /// for a given source generator. This structure allows us to pass instances - /// between different stages in an incremental source generator. - /// - /// The type of key. - public struct MarshallingGeneratorFactoryKey : IEquatable> - where T : IEquatable - { - public T Key { get; init; } - public IMarshallingGeneratorFactory GeneratorFactory { get; init; } - - public bool Equals(MarshallingGeneratorFactoryKey other) => Key.Equals(other.Key); - - public override bool Equals(object obj) => obj is MarshallingGeneratorFactoryKey other && Equals(other); - - public override int GetHashCode() => Key.GetHashCode(); - } - - public static class MarshallingGeneratorFactoryKey - { - public static MarshallingGeneratorFactoryKey Create(T key, IMarshallingGeneratorFactory factory) where T : IEquatable - { - return new MarshallingGeneratorFactoryKey - { - Key = key, - GeneratorFactory = factory - }; - } - } } From 55be11c706a5c708c06af51b88bf1c2683b5c420 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Wed, 4 Oct 2023 19:54:35 -0700 Subject: [PATCH 13/21] Split the MarshalAsParser into two classes (#93038) --- ...omImportToGeneratedComInterfaceAnalyzer.cs | 4 +- .../Common/DefaultMarshallingInfoParser.cs | 4 +- ...sAttributeParser.cs => MarshalAsParser.cs} | 98 +++------------ .../MarshalAsWithCustomMarshallersParser.cs | 119 ++++++++++++++++++ 4 files changed, 138 insertions(+), 87 deletions(-) rename src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/{MarshalAsAttributeParser.cs => MarshalAsParser.cs} (56%) create mode 100644 src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/MarshalAsWithCustomMarshallersParser.cs diff --git a/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/Analyzers/ConvertComImportToGeneratedComInterfaceAnalyzer.cs b/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/Analyzers/ConvertComImportToGeneratedComInterfaceAnalyzer.cs index 0006f43d370159..9c0e81dd48095f 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/Analyzers/ConvertComImportToGeneratedComInterfaceAnalyzer.cs +++ b/src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/Analyzers/ConvertComImportToGeneratedComInterfaceAnalyzer.cs @@ -151,7 +151,7 @@ private static MarshallingInfoParser CreateComImportMarshallingInfoParser(StubEn var defaultInfo = new DefaultMarshallingInfo(CharEncoding.Utf16, null); var useSiteAttributeParsers = ImmutableArray.Create( - new MarshalAsAttributeParser(env.Compilation, diagnostics, defaultInfo), + new MarshalAsAttributeParser(diagnostics, defaultInfo), new MarshalUsingAttributeParser(env.Compilation, diagnostics)); return new MarshallingInfoParser( @@ -159,7 +159,7 @@ private static MarshallingInfoParser CreateComImportMarshallingInfoParser(StubEn new MethodSignatureElementInfoProvider(env.Compilation, diagnostics, method, useSiteAttributeParsers), useSiteAttributeParsers, ImmutableArray.Create( - new MarshalAsAttributeParser(env.Compilation, diagnostics, defaultInfo), + new MarshalAsWithCustomMarshallersParser(env.Compilation, diagnostics, new MarshalAsAttributeParser(diagnostics, defaultInfo)), new MarshalUsingAttributeParser(env.Compilation, diagnostics), new NativeMarshallingAttributeParser(env.Compilation, diagnostics), new ComInterfaceMarshallingInfoProvider(env.Compilation)), diff --git a/src/libraries/System.Runtime.InteropServices/gen/Common/DefaultMarshallingInfoParser.cs b/src/libraries/System.Runtime.InteropServices/gen/Common/DefaultMarshallingInfoParser.cs index d69a8d3b860a72..83da7a8ff4db8d 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/Common/DefaultMarshallingInfoParser.cs +++ b/src/libraries/System.Runtime.InteropServices/gen/Common/DefaultMarshallingInfoParser.cs @@ -31,7 +31,7 @@ public static MarshallingInfoParser Create(StubEnvironment env, GeneratorDiagnos var defaultInfo = new DefaultMarshallingInfo(defaultEncoding, interopAttributeData.StringMarshallingCustomType); var useSiteAttributeParsers = ImmutableArray.Create( - new MarshalAsAttributeParser(env.Compilation, diagnostics, defaultInfo), + new MarshalAsAttributeParser(diagnostics, defaultInfo), new MarshalUsingAttributeParser(env.Compilation, diagnostics)); return new MarshallingInfoParser( @@ -39,7 +39,7 @@ public static MarshallingInfoParser Create(StubEnvironment env, GeneratorDiagnos new MethodSignatureElementInfoProvider(env.Compilation, diagnostics, method, useSiteAttributeParsers), useSiteAttributeParsers, ImmutableArray.Create( - new MarshalAsAttributeParser(env.Compilation, diagnostics, defaultInfo), + new MarshalAsWithCustomMarshallersParser(env.Compilation, diagnostics, new MarshalAsAttributeParser(diagnostics, defaultInfo)), new MarshalUsingAttributeParser(env.Compilation, diagnostics), new NativeMarshallingAttributeParser(env.Compilation, diagnostics), new ComInterfaceMarshallingInfoProvider(env.Compilation)), diff --git a/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/MarshalAsAttributeParser.cs b/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/MarshalAsParser.cs similarity index 56% rename from src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/MarshalAsAttributeParser.cs rename to src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/MarshalAsParser.cs index 476c1c6d17f756..1e5326ed184937 100644 --- a/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/MarshalAsAttributeParser.cs +++ b/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/MarshalAsParser.cs @@ -12,7 +12,7 @@ namespace Microsoft.Interop /// /// Simple User-application of System.Runtime.InteropServices.MarshalAsAttribute /// - public sealed record MarshalAsInfo( + public abstract record MarshalAsInfo( UnmanagedType UnmanagedType, CharEncoding CharEncoding) : MarshallingInfoStringSupport(CharEncoding) { @@ -21,18 +21,25 @@ public sealed record MarshalAsInfo( internal const UnmanagedType UnmanagedType_LPUTF8Str = (UnmanagedType)0x30; } + public sealed record MarshalAsScalarInfo( + UnmanagedType UnmanagedType, + CharEncoding CharEncoding) : MarshalAsInfo(UnmanagedType, CharEncoding); + + public sealed record MarshalAsArrayInfo( + UnmanagedType UnmanagedType, + CharEncoding CharEncoding, + UnmanagedType ArraySubType): MarshalAsInfo(UnmanagedType, CharEncoding); + /// - /// This class suppports parsing a System.Runtime.InteropServices.MarshalAsAttribute. + /// This class suppports parsing a System.Runtime.InteropServices.MarshalAsAttribute into a . /// public sealed class MarshalAsAttributeParser : IMarshallingInfoAttributeParser, IUseSiteAttributeParser { - private readonly Compilation _compilation; private readonly GeneratorDiagnosticsBag _diagnostics; private readonly DefaultMarshallingInfo _defaultInfo; - public MarshalAsAttributeParser(Compilation compilation, GeneratorDiagnosticsBag diagnostics, DefaultMarshallingInfo defaultInfo) + public MarshalAsAttributeParser(GeneratorDiagnosticsBag diagnostics, DefaultMarshallingInfo defaultInfo) { - _compilation = compilation; _diagnostics = diagnostics; _defaultInfo = defaultInfo; } @@ -97,84 +104,9 @@ UseSiteAttributeData IUseSiteAttributeParser.ParseAttribute(AttributeData attrib } } - // We'll support the UnmanagedType.Interface option, but we'll explicitly - // exclude ComImport types as they will not work as expected - // unless they are migrated to [GeneratedComInterface]. - if (unmanagedType == UnmanagedType.Interface) - { - if (type is INamedTypeSymbol { IsComImport: true }) - { - return new MarshalAsInfo(unmanagedType, _defaultInfo.CharEncoding); - } - return ComInterfaceMarshallingInfoProvider.CreateComInterfaceMarshallingInfo(_compilation, type); - } - - if (isArrayType) - { - if (type is not IArrayTypeSymbol { ElementType: ITypeSymbol elementType }) - { - _diagnostics.ReportConfigurationNotSupported(attributeData, nameof(UnmanagedType), unmanagedType.ToString()); - return NoMarshallingInfo.Instance; - } - - MarshallingInfo elementMarshallingInfo = NoMarshallingInfo.Instance; - if (elementUnmanagedType != (UnmanagedType)SizeAndParamIndexInfo.UnspecifiedConstSize) - { - if (elementType.SpecialType == SpecialType.System_String) - { - elementMarshallingInfo = CreateStringMarshallingInfo(elementType, elementUnmanagedType); - } - else if (elementUnmanagedType == UnmanagedType.Interface && elementType is not INamedTypeSymbol { IsComImport: true }) - { - elementMarshallingInfo = ComInterfaceMarshallingInfoProvider.CreateComInterfaceMarshallingInfo(_compilation, elementType); - } - else - { - elementMarshallingInfo = new MarshalAsInfo(elementUnmanagedType, _defaultInfo.CharEncoding); - } - } - else - { - elementMarshallingInfo = marshallingInfoCallback(elementType, useSiteAttributes, indirectionDepth + 1); - } - - CountInfo countInfo = NoCountInfo.Instance; - - if (useSiteAttributes.TryGetUseSiteAttributeInfo(indirectionDepth, out UseSiteAttributeData useSiteAttributeData)) - { - countInfo = useSiteAttributeData.CountInfo; - } - - return ArrayMarshallingInfoProvider.CreateArrayMarshallingInfo(_compilation, type, elementType, countInfo, elementMarshallingInfo); - } - - if (type.SpecialType == SpecialType.System_String) - { - return CreateStringMarshallingInfo(type, unmanagedType); - } - - return new MarshalAsInfo(unmanagedType, _defaultInfo.CharEncoding); - } - - private MarshallingInfo CreateStringMarshallingInfo( - ITypeSymbol type, - UnmanagedType unmanagedType) - { - string? marshallerName = unmanagedType switch - { - UnmanagedType.BStr => TypeNames.BStrStringMarshaller, - UnmanagedType.LPStr => TypeNames.AnsiStringMarshaller, - UnmanagedType.LPTStr or UnmanagedType.LPWStr => TypeNames.Utf16StringMarshaller, - MarshalAsInfo.UnmanagedType_LPUTF8Str => TypeNames.Utf8StringMarshaller, - _ => null - }; - - if (marshallerName is null) - { - return new MarshalAsInfo(unmanagedType, _defaultInfo.CharEncoding); - } - - return StringMarshallingInfoProvider.CreateStringMarshallingInfo(_compilation, type, marshallerName); + return isArrayType + ? new MarshalAsArrayInfo(unmanagedType, _defaultInfo.CharEncoding, elementUnmanagedType) + : new MarshalAsScalarInfo(unmanagedType, _defaultInfo.CharEncoding); } } } diff --git a/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/MarshalAsWithCustomMarshallersParser.cs b/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/MarshalAsWithCustomMarshallersParser.cs new file mode 100644 index 00000000000000..17933bafb55afe --- /dev/null +++ b/src/libraries/System.Runtime.InteropServices/gen/Microsoft.Interop.SourceGeneration/MarshalAsWithCustomMarshallersParser.cs @@ -0,0 +1,119 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Runtime.InteropServices; +using Microsoft.CodeAnalysis; + +namespace Microsoft.Interop +{ + /// + /// This class suppports parsing a System.Runtime.InteropServices.MarshalAsAttribute into either a or a + /// if the marshalling is implemented with a custom marshaller in the framework. + /// + public sealed class MarshalAsWithCustomMarshallersParser : IMarshallingInfoAttributeParser + { + private readonly Compilation _compilation; + private readonly GeneratorDiagnosticsBag _diagnostics; + private readonly IMarshallingInfoAttributeParser _marshalAsAttributeParser; + + /// + /// Create a new instance of . + /// + /// The compilation that the attributes are defined within. + /// The diagnostics bag to which to report diagnostics. + /// The parser that will do basic parsing of a MarshalAsAttribute into a element. + public MarshalAsWithCustomMarshallersParser(Compilation compilation, GeneratorDiagnosticsBag diagnostics, IMarshallingInfoAttributeParser marshalAsAttributeParser) + { + _compilation = compilation; + _diagnostics = diagnostics; + _marshalAsAttributeParser = marshalAsAttributeParser; + } + + public bool CanParseAttributeType(INamedTypeSymbol attributeType) => attributeType.ToDisplayString() == TypeNames.System_Runtime_InteropServices_MarshalAsAttribute; + + MarshallingInfo? IMarshallingInfoAttributeParser.ParseAttribute(AttributeData attributeData, ITypeSymbol type, int indirectionDepth, UseSiteAttributeProvider useSiteAttributes, GetMarshallingInfoCallback marshallingInfoCallback) + { + var marshalAsInfo = (MarshalAsInfo)_marshalAsAttributeParser.ParseAttribute(attributeData, type, indirectionDepth, useSiteAttributes, marshallingInfoCallback); + + // We'll support the UnmanagedType.Interface option, but we'll explicitly + // leave ComImport types with the MarshalAs info instead of the custom marshaller + // as they will not work as expected unless they are migrated to [GeneratedComInterface]. + if (marshalAsInfo.UnmanagedType == UnmanagedType.Interface) + { + return type is INamedTypeSymbol { IsComImport: true } + ? marshalAsInfo + : ComInterfaceMarshallingInfoProvider.CreateComInterfaceMarshallingInfo(_compilation, type); + } + + if (marshalAsInfo is MarshalAsArrayInfo arrayInfo) + { + if (type is not IArrayTypeSymbol { ElementType: ITypeSymbol elementType }) + { + _diagnostics.ReportConfigurationNotSupported(attributeData, nameof(UnmanagedType), arrayInfo.UnmanagedType.ToString()); + return NoMarshallingInfo.Instance; + } + + MarshallingInfo elementMarshallingInfo = NoMarshallingInfo.Instance; + if (arrayInfo.ArraySubType != (UnmanagedType)SizeAndParamIndexInfo.UnspecifiedConstSize) + { + if (elementType.SpecialType == SpecialType.System_String) + { + elementMarshallingInfo = CreateStringMarshallingInfo(elementType, new MarshalAsScalarInfo(arrayInfo.ArraySubType, arrayInfo.CharEncoding)); + } + else if (arrayInfo.ArraySubType == UnmanagedType.Interface && elementType is not INamedTypeSymbol { IsComImport: true }) + { + elementMarshallingInfo = ComInterfaceMarshallingInfoProvider.CreateComInterfaceMarshallingInfo(_compilation, elementType); + } + else + { + elementMarshallingInfo = new MarshalAsScalarInfo(arrayInfo.ArraySubType, arrayInfo.CharEncoding); + } + } + else + { + elementMarshallingInfo = marshallingInfoCallback(elementType, useSiteAttributes, indirectionDepth + 1); + } + + CountInfo countInfo = NoCountInfo.Instance; + + if (useSiteAttributes.TryGetUseSiteAttributeInfo(indirectionDepth, out UseSiteAttributeData useSiteAttributeData)) + { + countInfo = useSiteAttributeData.CountInfo; + } + + return ArrayMarshallingInfoProvider.CreateArrayMarshallingInfo(_compilation, type, elementType, countInfo, elementMarshallingInfo); + } + + if (type.SpecialType == SpecialType.System_String) + { + return CreateStringMarshallingInfo(type, marshalAsInfo); + } + + return marshalAsInfo; + } + + private MarshallingInfo CreateStringMarshallingInfo( + ITypeSymbol type, + MarshalAsInfo marshalAsInfo) + { + string? marshallerName = marshalAsInfo.UnmanagedType switch + { + UnmanagedType.BStr => TypeNames.BStrStringMarshaller, + UnmanagedType.LPStr => TypeNames.AnsiStringMarshaller, + UnmanagedType.LPTStr or UnmanagedType.LPWStr => TypeNames.Utf16StringMarshaller, + MarshalAsInfo.UnmanagedType_LPUTF8Str => TypeNames.Utf8StringMarshaller, + _ => null + }; + + if (marshallerName is null) + { + return marshalAsInfo; + } + + return StringMarshallingInfoProvider.CreateStringMarshallingInfo(_compilation, type, marshallerName); + } + } +} From 0e8523e37bc3b8c690bf2d52a459380a20e85570 Mon Sep 17 00:00:00 2001 From: Giulio Benetti Date: Thu, 5 Oct 2023 05:25:46 +0200 Subject: [PATCH 14/21] Add -skipcrossarchnative and -verbose options (#90554) * Add CoreclrVerbose=true when --verbose is passed as option to build.sh Sponsored by: Tekvox Inc. Cc: Jim Reinhart Cc: James Autry Cc: Matthew Maron Signed-off-by: Giulio Benetti * Remove leftover comment about -skipcrossarchnative During commit 7d562f9d2a4285881ae1c412aecb164dc9370013 comment about -skipcrossarchnative has been forgotten, so let's remove it since that flag is not available anymore. Signed-off-by: Giulio Benetti * Correct shift value --------- Signed-off-by: Giulio Benetti Co-authored-by: Giulio Benetti Co-authored-by: Juan Hoyos <19413848+hoyosjs@users.noreply.github.com> --- eng/build.sh | 5 +++++ src/coreclr/build-runtime.sh | 1 - src/coreclr/runtime.proj | 1 + 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/eng/build.sh b/eng/build.sh index c68a742ffbebc8..8ab3bf67e00684 100755 --- a/eng/build.sh +++ b/eng/build.sh @@ -524,6 +524,11 @@ while [[ $# > 0 ]]; do shift 2 ;; + -verbose) + arguments="$arguments /p:CoreclrVerbose=true" + shift 1 + ;; + *) extraargs="$extraargs $1" shift 1 diff --git a/src/coreclr/build-runtime.sh b/src/coreclr/build-runtime.sh index 06f79ec34b420b..58d1d2eb00ab0b 100755 --- a/src/coreclr/build-runtime.sh +++ b/src/coreclr/build-runtime.sh @@ -20,7 +20,6 @@ export PYTHON usage_list+=("-pgodatapath: path to profile guided optimization data.") usage_list+=("-pgoinstrument: generate instrumented code for profile guided optimization enabled binaries.") -usage_list+=("-skipcrossarchnative: Skip building cross-architecture native binaries.") usage_list+=("-staticanalyzer: use scan_build static analyzer.") usage_list+=("-component: Build individual components instead of the full project. Available options are 'hosts', 'jit', 'runtime', 'paltests', 'alljits', 'iltools', 'nativeaot', and 'spmi'. Can be specified multiple times.") usage_list+=("-subdir: Append a directory with the provided name to the obj and bin paths.") diff --git a/src/coreclr/runtime.proj b/src/coreclr/runtime.proj index 4164484606c1ba..a6442c16173edf 100644 --- a/src/coreclr/runtime.proj +++ b/src/coreclr/runtime.proj @@ -33,6 +33,7 @@ <_CoreClrBuildArg Condition="'$(PortableBuild)' != 'true'" Include="-portablebuild=false" /> <_CoreClrBuildArg Condition="'$(KeepNativeSymbols)' != 'false'" Include="-keepnativesymbols" /> <_CoreClrBuildArg Include="-os $(_BuildNativeTargetOS)" /> + <_CoreClrBuildArg Condition="'$(CoreclrVerbose)' == 'true'" Include="-verbose" /> <_CoreClrBuildArg Condition="$([MSBuild]::IsOsPlatform(Windows)) and ('$(TargetArchitecture)' == 'x86' or '$(TargetArchitecture)' == 'x64') and From b17fa8f5df7810dd399c6b3dc4a97423b969105a Mon Sep 17 00:00:00 2001 From: Kunal Pathak Date: Wed, 4 Oct 2023 21:37:42 -0700 Subject: [PATCH 15/21] Arm64: Implement LoadVector64x* and LoadVector128x* APIs (#92855) * Add APIs for LoadVector*x2 * Add implementation for LoadVector*x2 * Add APIs for LoadVector*x3 * Add implementation for LoadVector*x3 * Add APIs for LoadVector*x4 * Add implementation for LoadVector*x4 * Add test cases for LoadVectorx2, LoadVectorx3, LoadVectorx4 * minor rename * REVERT: Add Debug.Assert(false) to make sure test runs * Retain gtOtherReg rather than making it an array * Revert "REVERT: Add Debug.Assert(false) to make sure test runs" This reverts commit 92fb2795723629873244a8deb8a5245cd20b8146. * fix the test template * fix the LoadVectorx4 template * address review comment * fix one more error in LoadVectorx4Test.template * feedback by Bruce * Rename the test case name * Disable test for mono --- src/coreclr/jit/gentree.cpp | 30 +- src/coreclr/jit/gentree.h | 67 +- src/coreclr/jit/hwintrinsic.h | 10 + src/coreclr/jit/hwintrinsicarm64.cpp | 8 + src/coreclr/jit/hwintrinsiccodegenarm64.cpp | 5 +- src/coreclr/jit/hwintrinsiclistarm64.h | 6 + src/coreclr/jit/lsra.cpp | 4 +- src/coreclr/jit/lsra.h | 1 + src/coreclr/jit/lsraarm64.cpp | 74 +- .../Arm/AdvSimd.PlatformNotSupported.cs | 255 ++++ .../System/Runtime/Intrinsics/Arm/AdvSimd.cs | 255 ++++ .../ref/System.Runtime.Intrinsics.cs | 1117 +++++++++-------- .../GenerateHWIntrinsicTests_Arm.cs | 55 +- .../Arm/Shared/LoadVectorx2Test.template | 280 +++++ .../Arm/Shared/LoadVectorx3Test.template | 297 +++++ .../Arm/Shared/LoadVectorx4Test.template | 314 +++++ 16 files changed, 2224 insertions(+), 554 deletions(-) create mode 100644 src/tests/JIT/HardwareIntrinsics/Arm/Shared/LoadVectorx2Test.template create mode 100644 src/tests/JIT/HardwareIntrinsics/Arm/Shared/LoadVectorx3Test.template create mode 100644 src/tests/JIT/HardwareIntrinsics/Arm/Shared/LoadVectorx4Test.template diff --git a/src/coreclr/jit/gentree.cpp b/src/coreclr/jit/gentree.cpp index f0ffca4a5ef081..3d708d23dfd08b 100644 --- a/src/coreclr/jit/gentree.cpp +++ b/src/coreclr/jit/gentree.cpp @@ -1033,6 +1033,19 @@ unsigned GenTree::GetMultiRegCount(Compiler* comp) const return 1; } +#ifdef TARGET_ARM64 +//----------------------------------------------------------------------------------- +// NeedsConsecutiveRegisters: Checks if this tree node needs consecutive registers +// +// Return Value: +// Returns if the tree needs consecutive registers. +// +bool GenTree::NeedsConsecutiveRegisters() const +{ + return HWIntrinsicInfo::NeedsConsecutiveRegisters(AsHWIntrinsic()->GetHWIntrinsicId()); +} +#endif + //--------------------------------------------------------------- // gtGetContainedRegMask: Get the reg mask of the node including // contained nodes (recursive). @@ -3438,7 +3451,7 @@ unsigned Compiler::gtHashValue(GenTree* tree) hash += tree->AsHWIntrinsic()->GetSimdBaseType(); hash += tree->AsHWIntrinsic()->GetSimdSize(); hash += tree->AsHWIntrinsic()->GetAuxiliaryType(); - hash += tree->AsHWIntrinsic()->GetOtherReg(); + hash += tree->AsHWIntrinsic()->GetRegByIndex(1); break; #endif // FEATURE_HW_INTRINSICS @@ -25538,11 +25551,24 @@ ClassLayout* GenTreeHWIntrinsic::GetLayout(Compiler* compiler) const case NI_AdvSimd_Arm64_LoadPairScalarVector64NonTemporal: case NI_AdvSimd_Arm64_LoadPairVector64: case NI_AdvSimd_Arm64_LoadPairVector64NonTemporal: + case NI_AdvSimd_LoadVector64x2: return compiler->typGetBlkLayout(16); case NI_AdvSimd_Arm64_LoadPairVector128: case NI_AdvSimd_Arm64_LoadPairVector128NonTemporal: + case NI_AdvSimd_Arm64_LoadVector128x2: + case NI_AdvSimd_LoadVector64x4: return compiler->typGetBlkLayout(32); + + case NI_AdvSimd_LoadVector64x3: + return compiler->typGetBlkLayout(24); + + case NI_AdvSimd_Arm64_LoadVector128x3: + return compiler->typGetBlkLayout(48); + + case NI_AdvSimd_Arm64_LoadVector128x4: + return compiler->typGetBlkLayout(64); + #endif // TARGET_ARM64 default: @@ -25579,7 +25605,7 @@ void GenTreeHWIntrinsic::SetHWIntrinsicId(NamedIntrinsic intrinsicId) { return (op1->TypeGet() == op2->TypeGet()) && (op1->GetHWIntrinsicId() == op2->GetHWIntrinsicId()) && (op1->GetSimdBaseType() == op2->GetSimdBaseType()) && (op1->GetSimdSize() == op2->GetSimdSize()) && - (op1->GetAuxiliaryType() == op2->GetAuxiliaryType()) && (op1->GetOtherReg() == op2->GetOtherReg()) && + (op1->GetAuxiliaryType() == op2->GetAuxiliaryType()) && (op1->GetRegByIndex(1) == op2->GetRegByIndex(1)) && OperandsAreEqual(op1, op2); } diff --git a/src/coreclr/jit/gentree.h b/src/coreclr/jit/gentree.h index 525d55d94ecf47..635e97e7072a22 100644 --- a/src/coreclr/jit/gentree.h +++ b/src/coreclr/jit/gentree.h @@ -1836,6 +1836,10 @@ struct GenTree // Sets the GTF flag equivalent for the regIndex'th register of a multi-reg node. void SetRegSpillFlagByIdx(GenTreeFlags flags, int regIndex); +#ifdef TARGET_ARM64 + bool NeedsConsecutiveRegisters() const; +#endif + // Last-use information for either GenTreeLclVar or GenTreeCopyOrReload nodes. private: GenTreeFlags GetLastUseBit(int regIndex) const; @@ -3646,7 +3650,7 @@ struct GenTreeLclVar : public GenTreeLclVarCommon } else { - gtOtherReg[regIndex - 1] = regNumberSmall(reg); + gtOtherReg[regIndex - 1] = (regNumberSmall)reg; } } @@ -6085,15 +6089,66 @@ struct GenTreeJitIntrinsic : public GenTreeMultiOp NamedIntrinsic gtHWIntrinsicId; public: - regNumber GetOtherReg() const + //----------------------------------------------------------- + // GetRegNumByIdx: Get regNumber of i'th position. + // + // Arguments: + // idx - register position. + // + // Return Value: + // Returns regNumber assigned to i'th position. + // + regNumber GetRegNumByIdx(unsigned idx) const { +#ifdef TARGET_ARM64 + assert(idx < MAX_MULTIREG_COUNT); + + if (idx == 0) + { + return GetRegNum(); + } + + if (NeedsConsecutiveRegisters()) + { + assert(IsMultiRegNode()); + return (regNumber)(GetRegNum() + idx); + } +#endif + // should only be used to get otherReg + assert(idx == 1); return (regNumber)gtOtherReg; } - void SetOtherReg(regNumber reg) + //----------------------------------------------------------- + // SetRegNumByIdx: Set the regNumber for i'th position. + // + // Arguments: + // reg - reg number + // idx - register position. + // + // Return Value: + // None. + // + void SetRegNumByIdx(regNumber reg, unsigned idx) { +#ifdef TARGET_ARM64 + assert(idx < MAX_MULTIREG_COUNT); + + if (idx == 0) + { + SetRegNum(reg); + return; + } + if (NeedsConsecutiveRegisters()) + { + assert(IsMultiRegNode()); + assert(reg == (regNumber)(GetRegNum() + idx)); + return; + } +#endif + // should only be used to set otherReg + assert(idx == 1); gtOtherReg = (regNumberSmall)reg; - assert(gtOtherReg == reg); } GenTreeFlags GetRegSpillFlagByIdx(unsigned idx) const @@ -9323,9 +9378,7 @@ inline regNumber GenTree::GetRegByIndex(int regIndex) const #ifdef FEATURE_HW_INTRINSICS if (OperIs(GT_HWINTRINSIC)) { - assert(regIndex == 1); - // TODO-ARM64-NYI: Support hardware intrinsics operating on multiple contiguous registers. - return AsHWIntrinsic()->GetOtherReg(); + return AsHWIntrinsic()->GetRegNumByIdx(regIndex); } #endif // FEATURE_HW_INTRINSICS diff --git a/src/coreclr/jit/hwintrinsic.h b/src/coreclr/jit/hwintrinsic.h index 11e8c376a1a73f..6ae651c7987b6d 100644 --- a/src/coreclr/jit/hwintrinsic.h +++ b/src/coreclr/jit/hwintrinsic.h @@ -769,7 +769,17 @@ struct HWIntrinsicInfo case NI_AdvSimd_Arm64_LoadPairVector64NonTemporal: case NI_AdvSimd_Arm64_LoadPairVector128: case NI_AdvSimd_Arm64_LoadPairVector128NonTemporal: + case NI_AdvSimd_LoadVector64x2: + case NI_AdvSimd_Arm64_LoadVector128x2: return 2; + + case NI_AdvSimd_LoadVector64x3: + case NI_AdvSimd_Arm64_LoadVector128x3: + return 3; + + case NI_AdvSimd_LoadVector64x4: + case NI_AdvSimd_Arm64_LoadVector128x4: + return 4; #endif #ifdef TARGET_XARCH diff --git a/src/coreclr/jit/hwintrinsicarm64.cpp b/src/coreclr/jit/hwintrinsicarm64.cpp index 0234f4ed23cfaa..13cf5ae5dee8fe 100644 --- a/src/coreclr/jit/hwintrinsicarm64.cpp +++ b/src/coreclr/jit/hwintrinsicarm64.cpp @@ -1877,6 +1877,14 @@ GenTree* Compiler::impSpecialIntrinsic(NamedIntrinsic intrinsic, break; } + case NI_AdvSimd_LoadVector64x2: + case NI_AdvSimd_LoadVector64x3: + case NI_AdvSimd_LoadVector64x4: + case NI_AdvSimd_Arm64_LoadVector128x2: + case NI_AdvSimd_Arm64_LoadVector128x3: + case NI_AdvSimd_Arm64_LoadVector128x4: + info.compNeedsConsecutiveRegisters = true; + FALLTHROUGH; case NI_AdvSimd_Arm64_LoadPairScalarVector64: case NI_AdvSimd_Arm64_LoadPairScalarVector64NonTemporal: case NI_AdvSimd_Arm64_LoadPairVector128: diff --git a/src/coreclr/jit/hwintrinsiccodegenarm64.cpp b/src/coreclr/jit/hwintrinsiccodegenarm64.cpp index 2e2254faa19bf5..4a013ca084cd5a 100644 --- a/src/coreclr/jit/hwintrinsiccodegenarm64.cpp +++ b/src/coreclr/jit/hwintrinsiccodegenarm64.cpp @@ -732,12 +732,13 @@ void CodeGen::genHWIntrinsic(GenTreeHWIntrinsic* node) case NI_AdvSimd_Arm64_LoadPairVector128NonTemporal: case NI_AdvSimd_Arm64_LoadPairVector64: case NI_AdvSimd_Arm64_LoadPairVector64NonTemporal: - GetEmitter()->emitIns_R_R_R(ins, emitSize, targetReg, node->GetOtherReg(), op1Reg); + GetEmitter()->emitIns_R_R_R(ins, emitSize, targetReg, node->GetRegByIndex(1), op1Reg); break; case NI_AdvSimd_Arm64_LoadPairScalarVector64: case NI_AdvSimd_Arm64_LoadPairScalarVector64NonTemporal: - GetEmitter()->emitIns_R_R_R(ins, emitTypeSize(intrin.baseType), targetReg, node->GetOtherReg(), op1Reg); + GetEmitter()->emitIns_R_R_R(ins, emitTypeSize(intrin.baseType), targetReg, node->GetRegByIndex(1), + op1Reg); break; case NI_AdvSimd_StoreSelectedScalar: diff --git a/src/coreclr/jit/hwintrinsiclistarm64.h b/src/coreclr/jit/hwintrinsiclistarm64.h index d0fdc1be6da7a1..da77e3fdfabd54 100644 --- a/src/coreclr/jit/hwintrinsiclistarm64.h +++ b/src/coreclr/jit/hwintrinsiclistarm64.h @@ -320,6 +320,9 @@ HARDWARE_INTRINSIC(AdvSimd, LoadAndReplicateToVector64, HARDWARE_INTRINSIC(AdvSimd, LoadAndReplicateToVector128, 16, 1, true, {INS_ld1r, INS_ld1r, INS_ld1r, INS_ld1r, INS_ld1r, INS_ld1r, INS_invalid, INS_invalid, INS_ld1r, INS_invalid}, HW_Category_MemoryLoad, HW_Flag_NoFlag) HARDWARE_INTRINSIC(AdvSimd, LoadVector64, 8, 1, true, {INS_ld1, INS_ld1, INS_ld1, INS_ld1, INS_ld1, INS_ld1, INS_ld1, INS_ld1, INS_ld1, INS_ld1}, HW_Category_Helper, HW_Flag_SpecialImport|HW_Flag_NoCodeGen) HARDWARE_INTRINSIC(AdvSimd, LoadVector128, 16, 1, true, {INS_ld1, INS_ld1, INS_ld1, INS_ld1, INS_ld1, INS_ld1, INS_ld1, INS_ld1, INS_ld1, INS_ld1}, HW_Category_Helper, HW_Flag_SpecialImport|HW_Flag_NoCodeGen) +HARDWARE_INTRINSIC(AdvSimd, LoadVector64x2, 8, 1, true, {INS_ld2, INS_ld2, INS_ld2, INS_ld2, INS_ld2, INS_ld2, INS_invalid, INS_invalid, INS_ld2, INS_invalid}, HW_Category_MemoryLoad, HW_Flag_BaseTypeFromFirstArg|HW_Flag_SpecialImport|HW_Flag_MultiReg|HW_Flag_NeedsConsecutiveRegisters) +HARDWARE_INTRINSIC(AdvSimd, LoadVector64x3, 8, 1, true, {INS_ld3, INS_ld3, INS_ld3, INS_ld3, INS_ld3, INS_ld3, INS_invalid, INS_invalid, INS_ld3, INS_invalid}, HW_Category_MemoryLoad, HW_Flag_BaseTypeFromFirstArg|HW_Flag_SpecialImport|HW_Flag_MultiReg|HW_Flag_NeedsConsecutiveRegisters) +HARDWARE_INTRINSIC(AdvSimd, LoadVector64x4, 8, 1, true, {INS_ld4, INS_ld4, INS_ld4, INS_ld4, INS_ld4, INS_ld4, INS_invalid, INS_invalid, INS_ld4, INS_invalid}, HW_Category_MemoryLoad, HW_Flag_BaseTypeFromFirstArg|HW_Flag_SpecialImport|HW_Flag_MultiReg|HW_Flag_NeedsConsecutiveRegisters) HARDWARE_INTRINSIC(AdvSimd, Max, -1, 2, true, {INS_smax, INS_umax, INS_smax, INS_umax, INS_smax, INS_umax, INS_invalid, INS_invalid, INS_fmax, INS_invalid}, HW_Category_SIMD, HW_Flag_Commutative) HARDWARE_INTRINSIC(AdvSimd, MaxNumber, -1, 2, false, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_fmaxnm, INS_invalid}, HW_Category_SIMD, HW_Flag_Commutative) HARDWARE_INTRINSIC(AdvSimd, MaxNumberScalar, 8, 2, true, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_fmaxnm, INS_fmaxnm}, HW_Category_SIMD, HW_Flag_Commutative|HW_Flag_SIMDScalar) @@ -573,6 +576,9 @@ HARDWARE_INTRINSIC(AdvSimd_Arm64, LoadPairVector64, HARDWARE_INTRINSIC(AdvSimd_Arm64, LoadPairVector64NonTemporal, 8, 1, true, {INS_ldnp, INS_ldnp, INS_ldnp, INS_ldnp, INS_ldnp, INS_ldnp, INS_ldnp, INS_ldnp, INS_ldnp, INS_ldnp}, HW_Category_MemoryLoad, HW_Flag_BaseTypeFromFirstArg|HW_Flag_MultiReg|HW_Flag_SpecialCodeGen|HW_Flag_SpecialImport) HARDWARE_INTRINSIC(AdvSimd_Arm64, LoadPairVector128, 16, 1, true, {INS_ldp, INS_ldp, INS_ldp, INS_ldp, INS_ldp, INS_ldp, INS_ldp, INS_ldp, INS_ldp, INS_ldp}, HW_Category_MemoryLoad, HW_Flag_BaseTypeFromFirstArg|HW_Flag_MultiReg|HW_Flag_SpecialCodeGen|HW_Flag_SpecialImport) HARDWARE_INTRINSIC(AdvSimd_Arm64, LoadPairVector128NonTemporal, 16, 1, true, {INS_ldnp, INS_ldnp, INS_ldnp, INS_ldnp, INS_ldnp, INS_ldnp, INS_ldnp, INS_ldnp, INS_ldnp, INS_ldnp}, HW_Category_MemoryLoad, HW_Flag_BaseTypeFromFirstArg|HW_Flag_MultiReg|HW_Flag_SpecialCodeGen|HW_Flag_SpecialImport) +HARDWARE_INTRINSIC(AdvSimd_Arm64, LoadVector128x2, 16, 1, true, {INS_ld2, INS_ld2, INS_ld2, INS_ld2, INS_ld2, INS_ld2, INS_ld2, INS_ld2, INS_ld2, INS_ld2}, HW_Category_MemoryLoad, HW_Flag_BaseTypeFromFirstArg|HW_Flag_SpecialImport|HW_Flag_MultiReg|HW_Flag_NeedsConsecutiveRegisters) +HARDWARE_INTRINSIC(AdvSimd_Arm64, LoadVector128x3, 16, 1, true, {INS_ld3, INS_ld3, INS_ld3, INS_ld3, INS_ld3, INS_ld3, INS_ld3, INS_ld3, INS_ld3, INS_ld3}, HW_Category_MemoryLoad, HW_Flag_BaseTypeFromFirstArg|HW_Flag_SpecialImport|HW_Flag_MultiReg|HW_Flag_NeedsConsecutiveRegisters) +HARDWARE_INTRINSIC(AdvSimd_Arm64, LoadVector128x4, 16, 1, true, {INS_ld4, INS_ld4, INS_ld4, INS_ld4, INS_ld4, INS_ld4, INS_ld4, INS_ld4, INS_ld4, INS_ld4}, HW_Category_MemoryLoad, HW_Flag_BaseTypeFromFirstArg|HW_Flag_SpecialImport|HW_Flag_MultiReg|HW_Flag_NeedsConsecutiveRegisters) HARDWARE_INTRINSIC(AdvSimd_Arm64, Max, 16, 2, false, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_fmax}, HW_Category_SIMD, HW_Flag_Commutative) HARDWARE_INTRINSIC(AdvSimd_Arm64, MaxAcross, -1, 1, true, {INS_smaxv, INS_umaxv, INS_smaxv, INS_umaxv, INS_smaxv, INS_umaxv, INS_invalid, INS_invalid, INS_fmaxv, INS_invalid}, HW_Category_SIMD, HW_Flag_BaseTypeFromFirstArg) HARDWARE_INTRINSIC(AdvSimd_Arm64, MaxNumber, 16, 2, false, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_fmaxnm}, HW_Category_SIMD, HW_Flag_Commutative) diff --git a/src/coreclr/jit/lsra.cpp b/src/coreclr/jit/lsra.cpp index 88af18d880898e..338c541ce2ebb6 100644 --- a/src/coreclr/jit/lsra.cpp +++ b/src/coreclr/jit/lsra.cpp @@ -155,9 +155,7 @@ void lsraAssignRegToTree(GenTree* tree, regNumber reg, unsigned regIdx) #ifdef FEATURE_HW_INTRINSICS else if (tree->OperIs(GT_HWINTRINSIC)) { - assert(regIdx == 1); - // TODO-ARM64-NYI: Support hardware intrinsics operating on multiple contiguous registers. - tree->AsHWIntrinsic()->SetOtherReg(reg); + tree->AsHWIntrinsic()->SetRegNumByIdx(reg, regIdx); } #endif // FEATURE_HW_INTRINSICS else if (tree->OperIs(GT_LCL_VAR, GT_STORE_LCL_VAR)) diff --git a/src/coreclr/jit/lsra.h b/src/coreclr/jit/lsra.h index 41fcc7e5d09b2d..d0f7aeb8369695 100644 --- a/src/coreclr/jit/lsra.h +++ b/src/coreclr/jit/lsra.h @@ -2011,6 +2011,7 @@ class LinearScan : public LinearScanInterface int BuildHWIntrinsic(GenTreeHWIntrinsic* intrinsicTree, int* pDstCount); #ifdef TARGET_ARM64 int BuildConsecutiveRegistersForUse(GenTree* treeNode, GenTree* rmwNode = nullptr); + void BuildConsecutiveRegistersForDef(GenTree* treeNode, int fieldCount); #endif // TARGET_ARM64 #endif // FEATURE_HW_INTRINSICS diff --git a/src/coreclr/jit/lsraarm64.cpp b/src/coreclr/jit/lsraarm64.cpp index 33dfe726407bf2..2b94d8ca1ce6b9 100644 --- a/src/coreclr/jit/lsraarm64.cpp +++ b/src/coreclr/jit/lsraarm64.cpp @@ -102,7 +102,7 @@ void LinearScan::assignConsecutiveRegisters(RefPosition* firstRefPosition, regNu } #endif // FEATURE_PARTIAL_SIMD_CALLEE_SAVE INDEBUG(refPosCount++); - assert(consecutiveRefPosition->refType == RefTypeUse); + assert((consecutiveRefPosition->refType == RefTypeDef) || (consecutiveRefPosition->refType == RefTypeUse)); consecutiveRefPosition->registerAssignment = genRegMask(regToAssign); consecutiveRefPosition = getNextConsecutiveRefPosition(consecutiveRefPosition); regToAssign = regToAssign == REG_FP_LAST ? REG_FP_FIRST : REG_NEXT(regToAssign); @@ -1586,6 +1586,18 @@ int LinearScan::BuildHWIntrinsic(GenTreeHWIntrinsic* intrinsicTree, int* pDstCou buildInternalRegisterUses(); *pDstCount = 0; break; + case NI_AdvSimd_LoadVector64x2: + case NI_AdvSimd_LoadVector64x3: + case NI_AdvSimd_LoadVector64x4: + case NI_AdvSimd_Arm64_LoadVector128x2: + case NI_AdvSimd_Arm64_LoadVector128x3: + case NI_AdvSimd_Arm64_LoadVector128x4: + { + assert(intrin.op1 != nullptr); + BuildConsecutiveRegistersForDef(intrinsicTree, dstCount); + *pDstCount = dstCount; + break; + } default: noway_assert(!"Not a supported as multiple consecutive register intrinsic"); } @@ -1689,7 +1701,7 @@ int LinearScan::BuildConsecutiveRegistersForUse(GenTree* treeNode, GenTree* rmwN int srcCount = 0; Interval* rmwInterval = nullptr; bool rmwIsLastUse = false; - if ((rmwNode != nullptr)) + if (rmwNode != nullptr) { if (isCandidateLocalRef(rmwNode)) { @@ -1711,9 +1723,10 @@ int LinearScan::BuildConsecutiveRegistersForUse(GenTree* treeNode, GenTree* rmwN { RefPosition* restoreRefPos = nullptr; RefPositionIterator prevRefPos = refPositions.backPosition(); - currRefPos = BuildUse(use.GetNode(), RBM_NONE, 0); - // Check if restore Refpositions were created + currRefPos = BuildUse(use.GetNode(), RBM_NONE, 0); + + // Check if restore RefPositions were created RefPositionIterator tailRefPos = refPositions.backPosition(); assert(tailRefPos == currRefPos); prevRefPos++; @@ -1801,7 +1814,7 @@ int LinearScan::BuildConsecutiveRegistersForUse(GenTree* treeNode, GenTree* rmwN if (rmwNode != nullptr) { - // Check all the newly created Refpositions for delay free + // Check all the newly created RefPositions for delay free RefPositionIterator iter = refPositionMark; for (iter++; iter != refPositions.end(); iter++) @@ -1822,6 +1835,57 @@ int LinearScan::BuildConsecutiveRegistersForUse(GenTree* treeNode, GenTree* rmwN return srcCount; } +//------------------------------------------------------------------------ +// BuildConsecutiveRegistersForDef: Build RefTypeDef ref position(s) for +// `treeNode` that produces `registerCount` consecutive registers. +// +// For the first RefPosition of the series, it sets the `regCount` field equal to +// the total number of RefPositions (including the first one) involved for this +// treeNode. For the subsequent RefPositions, it sets the `regCount` to 0. For all +// the RefPositions created, it sets the `needsConsecutive` flag so it can be used to +// identify these RefPositions during allocation. +// +// It also populates a `RefPositionMap` to access the subsequent RefPositions from +// a given RefPosition. This was preferred rather than adding a field in RefPosition +// for this purpose. +// +// Arguments: +// treeNode - The GT_HWINTRINSIC node of interest +// registerCount - Number of registers the treeNode produces +// +void LinearScan::BuildConsecutiveRegistersForDef(GenTree* treeNode, int registerCount) +{ + assert(registerCount > 1); + assert(compiler->info.compNeedsConsecutiveRegisters); + + RefPosition* currRefPos = nullptr; + RefPosition* lastRefPos = nullptr; + + NextConsecutiveRefPositionsMap* refPositionMap = getNextConsecutiveRefPositionsMap(); + for (int fieldIdx = 0; fieldIdx < registerCount; fieldIdx++) + { + currRefPos = BuildDef(treeNode, RBM_NONE, fieldIdx); + currRefPos->needsConsecutive = true; + currRefPos->regCount = 0; +#ifdef DEBUG + // Set the minimum register candidates needed for stress to work. + currRefPos->minRegCandidateCount = registerCount; +#endif + if (fieldIdx == 0) + { + // Set `regCount` to actual consecutive registers count for first ref-position. + // For others, set 0 so we can identify that this is non-first RefPosition. + + currRefPos->regCount = registerCount; + } + + refPositionMap->Set(lastRefPos, currRefPos, LinearScan::NextConsecutiveRefPositionsMap::Overwrite); + refPositionMap->Set(currRefPos, nullptr); + + lastRefPos = currRefPos; + } +} + #ifdef DEBUG //------------------------------------------------------------------------ // isLiveAtConsecutiveRegistersLoc: Check if the refPosition is live at the location diff --git a/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Arm/AdvSimd.PlatformNotSupported.cs b/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Arm/AdvSimd.PlatformNotSupported.cs index 2eb823f56d97de..a5cbc8ac08bf16 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Arm/AdvSimd.PlatformNotSupported.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Arm/AdvSimd.PlatformNotSupported.cs @@ -1798,6 +1798,156 @@ internal Arm64() { } /// public static unsafe (Vector128 Value1, Vector128 Value2) LoadPairVector128NonTemporal(ulong* address) { throw new PlatformNotSupportedException(); } + /// + /// A64: LD2 { Vn.16B, Vn+1.16B }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadVector128x2(byte* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD2 { Vn.16B, Vn+1.16B }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadVector128x2(sbyte* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD2 { Vn.8H, Vn+1.8H }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadVector128x2(short* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD2 { Vn.8H, Vn+1.8H }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadVector128x2(ushort* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD2 { Vn.4S, Vn+1.4S }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadVector128x2(int* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD2 { Vn.4S, Vn+1.4S }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadVector128x2(uint* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD2 { Vn.2D, Vn+1.2D }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadVector128x2(long* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD2 { Vn.2D, Vn+1.2D }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadVector128x2(ulong* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD2 { Vn.4S, Vn+1.4S }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadVector128x2(float* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD2 { Vn.2D, Vn+1.2D }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadVector128x2(double* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD3 { Vn.16B, Vn+1.16B, Vn+2.16B }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3) LoadVector128x3(byte* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD3 { Vn.16B, Vn+1.16B, Vn+2.16B }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3) LoadVector128x3(sbyte* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD3 { Vn.8H, Vn+1.8H, Vn+2.8H }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3) LoadVector128x3(short* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD3 { Vn.8H, Vn+1.8H, Vn+2.8H }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3) LoadVector128x3(ushort* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD3 { Vn.4S, Vn+1.4S, Vn+2.4S }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3) LoadVector128x3(int* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD3 { Vn.4S, Vn+1.4S, Vn+2.4S }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3) LoadVector128x3(uint* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD3 { Vn.2D, Vn+1.2D, Vn+2.2D }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3) LoadVector128x3(long* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD3 { Vn.2D, Vn+1.2D, Vn+2.2D }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3) LoadVector128x3(ulong* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD3 { Vn.4S, Vn+1.4S, Vn+2.4S }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3) LoadVector128x3(float* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD3 { Vn.2D, Vn+1.2D, Vn+2.2D }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3) LoadVector128x3(double* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD4 { Vn.16B, Vn+1.16B, Vn+2.16B, Vn+3.16B }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3, System.Runtime.Intrinsics.Vector128 Value4) LoadVector128x4(byte* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD4 { Vn.16B, Vn+1.16B, Vn+2.16B, Vn+3.16B }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3, System.Runtime.Intrinsics.Vector128 Value4) LoadVector128x4(sbyte* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD4 { Vn.8H, Vn+1.8H, Vn+2.8H, Vn+3.8H }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3, System.Runtime.Intrinsics.Vector128 Value4) LoadVector128x4(short* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD4 { Vn.8H, Vn+1.8H, Vn+2.8H, Vn+3.8H }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3, System.Runtime.Intrinsics.Vector128 Value4) LoadVector128x4(ushort* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD4 { Vn.4S, Vn+1.4S, Vn+2.4S, Vn+3.4S }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3, System.Runtime.Intrinsics.Vector128 Value4) LoadVector128x4(int* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD4 { Vn.4S, Vn+1.4S, Vn+2.4S, Vn+3.4S }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3, System.Runtime.Intrinsics.Vector128 Value4) LoadVector128x4(uint* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD4 { Vn.2D, Vn+1.2D, Vn+2.2D, Vn+3.2D }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3, System.Runtime.Intrinsics.Vector128 Value4) LoadVector128x4(long* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD4 { Vn.2D, Vn+1.2D, Vn+2.2D, Vn+3.2D}, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3, System.Runtime.Intrinsics.Vector128 Value4) LoadVector128x4(ulong* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD4 { Vn.4S, Vn+1.4S, Vn+2.4S, Vn+3.4S }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3, System.Runtime.Intrinsics.Vector128 Value4) LoadVector128x4(float* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD4 { Vn.2D, Vn+1.2D, Vn+2.2D, Vn+3.2D }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3, System.Runtime.Intrinsics.Vector128 Value4) LoadVector128x4(double* address) { throw new PlatformNotSupportedException(); } + /// /// float64x2_t vmaxq_f64 (float64x2_t a, float64x2_t b) /// A64: FMAX Vd.2D, Vn.2D, Vm.2D @@ -8377,6 +8527,111 @@ internal Arm64() { } /// public static unsafe Vector128 LoadVector128(ulong* address) { throw new PlatformNotSupportedException(); } + /// + /// A64: LD2 { Vn.16B, Vn+1.16B }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadVector64x2(byte* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD2 { Vn.16B, Vn+1.16B }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadVector64x2(sbyte* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD2 { Vn.8H, Vn+1.8H }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadVector64x2(short* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD2 { Vn.8H, Vn+1.8H }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadVector64x2(ushort* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD2 { Vn.4S, Vn+1.4S }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadVector64x2(int* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD2 { Vn.4S, Vn+1.4S }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadVector64x2(uint* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD2 { Vn.4S, Vn+1.4S }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadVector64x2(float* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD3 { Vn.16B, Vn+1.16B, Vn+2.16B }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2, System.Runtime.Intrinsics.Vector64 Value3) LoadVector64x3(byte* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD3 { Vn.16B, Vn+1.16B, Vn+2.16B }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2, System.Runtime.Intrinsics.Vector64 Value3) LoadVector64x3(sbyte* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD3 { Vn.8H, Vn+1.8H, Vn+2.8H }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2, System.Runtime.Intrinsics.Vector64 Value3) LoadVector64x3(short* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD3 { Vn.8H, Vn+1.8H, Vn+2.8H }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2, System.Runtime.Intrinsics.Vector64 Value3) LoadVector64x3(ushort* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD3 { Vn.4S, Vn+1.4S, Vn+2.4S }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2, System.Runtime.Intrinsics.Vector64 Value3) LoadVector64x3(int* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD3 { Vn.4S, Vn+1.4S, Vn+2.4S }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2, System.Runtime.Intrinsics.Vector64 Value3) LoadVector64x3(uint* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD3 { Vn.4S, Vn+1.4S, Vn+2.4S }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2, System.Runtime.Intrinsics.Vector64 Value3) LoadVector64x3(float* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD4 { Vn.16B, Vn+1.16B, Vn+2.16B, Vn+3.16B }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2, System.Runtime.Intrinsics.Vector64 Value3, System.Runtime.Intrinsics.Vector64 Value4) LoadVector64x4(byte* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD4 { Vn.16B, Vn+1.16B, Vn+2.16B, Vn+3.16B }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2, System.Runtime.Intrinsics.Vector64 Value3, System.Runtime.Intrinsics.Vector64 Value4) LoadVector64x4(sbyte* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD4 { Vn.8H, Vn+1.8H, Vn+2.8H, Vn+3.8H }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2, System.Runtime.Intrinsics.Vector64 Value3, System.Runtime.Intrinsics.Vector64 Value4) LoadVector64x4(short* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD4 { Vn.8H, Vn+1.8H, Vn+2.8H, Vn+3.8H }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2, System.Runtime.Intrinsics.Vector64 Value3, System.Runtime.Intrinsics.Vector64 Value4) LoadVector64x4(ushort* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD4 { Vn.4S, Vn+1.4S, Vn+2.4S, Vn+3.4S }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2, System.Runtime.Intrinsics.Vector64 Value3, System.Runtime.Intrinsics.Vector64 Value4) LoadVector64x4(int* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD4 { Vn.4S, Vn+1.4S, Vn+2.4S, Vn+3.4S }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2, System.Runtime.Intrinsics.Vector64 Value3, System.Runtime.Intrinsics.Vector64 Value4) LoadVector64x4(uint* address) { throw new PlatformNotSupportedException(); } + + /// + /// A64: LD4 { Vn.4S, Vn+1.4S, Vn+2.4S, Vn+3.4S }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2, System.Runtime.Intrinsics.Vector64 Value3, System.Runtime.Intrinsics.Vector64 Value4) LoadVector64x4(float* address) { throw new PlatformNotSupportedException(); } + /// /// uint8x8_t vmax_u8 (uint8x8_t a, uint8x8_t b) /// A32: VMAX.U8 Dd, Dn, Dm diff --git a/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Arm/AdvSimd.cs b/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Arm/AdvSimd.cs index 5d22812bcd9ffd..60c0f00289291c 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Arm/AdvSimd.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Arm/AdvSimd.cs @@ -1796,6 +1796,156 @@ internal Arm64() { } /// public static unsafe (Vector128 Value1, Vector128 Value2) LoadPairVector128NonTemporal(ulong* address) => LoadPairVector128NonTemporal(address); + /// + /// A64: LD2 { Vn.16B, Vn+1.16B }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadVector128x2(byte* address) => LoadVector128x2(address); + + /// + /// A64: LD2 { Vn.16B, Vn+1.16B }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadVector128x2(sbyte* address) => LoadVector128x2(address); + + /// + /// A64: LD2 { Vn.8H, Vn+1.8H }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadVector128x2(short* address) => LoadVector128x2(address); + + /// + /// A64: LD2 { Vn.8H, Vn+1.8H }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadVector128x2(ushort* address) => LoadVector128x2(address); + + /// + /// A64: LD2 { Vn.4S, Vn+1.4S }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadVector128x2(int* address) => LoadVector128x2(address); + + /// + /// A64: LD2 { Vn.4S, Vn+1.4S }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadVector128x2(uint* address) => LoadVector128x2(address); + + /// + /// A64: LD2 { Vn.2D, Vn+1.2D }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadVector128x2(long* address) => LoadVector128x2(address); + + /// + /// A64: LD2 { Vn.2D, Vn+1.2D }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadVector128x2(ulong* address) => LoadVector128x2(address); + + /// + /// A64: LD2 { Vn.4S, Vn+1.4S }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadVector128x2(float* address) => LoadVector128x2(address); + + /// + /// A64: LD2 { Vn.2D, Vn+1.2D }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadVector128x2(double* address) => LoadVector128x2(address); + + /// + /// A64: LD3 { Vn.16B, Vn+1.16B, Vn+2.16B }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3) LoadVector128x3(byte* address) => LoadVector128x3(address); + + /// + /// A64: LD3 { Vn.16B, Vn+1.16B, Vn+2.16B }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3) LoadVector128x3(sbyte* address) => LoadVector128x3(address); + + /// + /// A64: LD3 { Vn.8H, Vn+1.8H, Vn+2.8H }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3) LoadVector128x3(short* address) => LoadVector128x3(address); + + /// + /// A64: LD3 { Vn.8H, Vn+1.8H, Vn+2.8H }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3) LoadVector128x3(ushort* address) => LoadVector128x3(address); + + /// + /// A64: LD3 { Vn.4S, Vn+1.4S, Vn+2.4S }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3) LoadVector128x3(int* address) => LoadVector128x3(address); + + /// + /// A64: LD3 { Vn.4S, Vn+1.4S, Vn+2.4S }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3) LoadVector128x3(uint* address) => LoadVector128x3(address); + + /// + /// A64: LD3 { Vn.2D, Vn+1.2D, Vn+2.2D }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3) LoadVector128x3(long* address) => LoadVector128x3(address); + + /// + /// A64: LD3 { Vn.2D, Vn+1.2D, Vn+2.2D }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3) LoadVector128x3(ulong* address) => LoadVector128x3(address); + + /// + /// A64: LD3 { Vn.4S, Vn+1.4S, Vn+2.4S }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3) LoadVector128x3(float* address) => LoadVector128x3(address); + + /// + /// A64: LD3 { Vn.2D, Vn+1.2D, Vn+2.2D }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3) LoadVector128x3(double* address) => LoadVector128x3(address); + + /// + /// A64: LD4 { Vn.16B, Vn+1.16B, Vn+2.16B, Vn+3.16B }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3, System.Runtime.Intrinsics.Vector128 Value4) LoadVector128x4(byte* address) => LoadVector128x4(address); + + /// + /// A64: LD4 { Vn.16B, Vn+1.16B, Vn+2.16B, Vn+3.16B }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3, System.Runtime.Intrinsics.Vector128 Value4) LoadVector128x4(sbyte* address) => LoadVector128x4(address); + + /// + /// A64: LD4 { Vn.8H, Vn+1.8H, Vn+2.8H, Vn+3.8H }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3, System.Runtime.Intrinsics.Vector128 Value4) LoadVector128x4(short* address) => LoadVector128x4(address); + + /// + /// A64: LD4 { Vn.8H, Vn+1.8H, Vn+2.8H, Vn+3.8H }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3, System.Runtime.Intrinsics.Vector128 Value4) LoadVector128x4(ushort* address) => LoadVector128x4(address); + + /// + /// A64: LD4 { Vn.4S, Vn+1.4S, Vn+2.4S, Vn+3.4S }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3, System.Runtime.Intrinsics.Vector128 Value4) LoadVector128x4(int* address) => LoadVector128x4(address); + + /// + /// A64: LD4 { Vn.4S, Vn+1.4S, Vn+2.4S, Vn+3.4S }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3, System.Runtime.Intrinsics.Vector128 Value4) LoadVector128x4(uint* address) => LoadVector128x4(address); + + /// + /// A64: LD4 { Vn.2D, Vn+1.2D, Vn+2.2D, Vn+3.2D }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3, System.Runtime.Intrinsics.Vector128 Value4) LoadVector128x4(long* address) => LoadVector128x4(address); + + /// + /// A64: LD4 { Vn.2D, Vn+1.2D, Vn+2.2D, Vn+3.2D}, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3, System.Runtime.Intrinsics.Vector128 Value4) LoadVector128x4(ulong* address) => LoadVector128x4(address); + + /// + /// A64: LD4 { Vn.4S, Vn+1.4S, Vn+2.4S, Vn+3.4S }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3, System.Runtime.Intrinsics.Vector128 Value4) LoadVector128x4(float* address) => LoadVector128x4(address); + + /// + /// A64: LD4 { Vn.2D, Vn+1.2D, Vn+2.2D, Vn+3.2D }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3, System.Runtime.Intrinsics.Vector128 Value4) LoadVector128x4(double* address) => LoadVector128x4(address); + /// /// float64x2_t vmaxq_f64 (float64x2_t a, float64x2_t b) /// A64: FMAX Vd.2D, Vn.2D, Vm.2D @@ -8374,6 +8524,111 @@ internal Arm64() { } /// public static unsafe Vector128 LoadVector128(ulong* address) => LoadVector128(address); + /// + /// A64: LD2 { Vn.16B, Vn+1.16B }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadVector64x2(byte* address) => LoadVector64x2(address); + + /// + /// A64: LD2 { Vn.16B, Vn+1.16B }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadVector64x2(sbyte* address) => LoadVector64x2(address); + + /// + /// A64: LD2 { Vn.8H, Vn+1.8H }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadVector64x2(short* address) => LoadVector64x2(address); + + /// + /// A64: LD2 { Vn.8H, Vn+1.8H }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadVector64x2(ushort* address) => LoadVector64x2(address); + + /// + /// A64: LD2 { Vn.4S, Vn+1.4S }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadVector64x2(int* address) => LoadVector64x2(address); + + /// + /// A64: LD2 { Vn.4S, Vn+1.4S }, [Xn]128x4 + /// + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadVector64x2(uint* address) => LoadVector64x2(address); + + /// + /// A64: LD2 { Vn.4S, Vn+1.4S }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadVector64x2(float* address) => LoadVector64x2(address); + + /// + /// A64: LD3 { Vn.16B, Vn+1.16B, Vn+2.16B }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2, System.Runtime.Intrinsics.Vector64 Value3) LoadVector64x3(byte* address) => LoadVector64x3(address); + + /// + /// A64: LD3 { Vn.16B, Vn+1.16B, Vn+2.16B }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2, System.Runtime.Intrinsics.Vector64 Value3) LoadVector64x3(sbyte* address) => LoadVector64x3(address); + + /// + /// A64: LD3 { Vn.8H, Vn+1.8H, Vn+2.8H }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2, System.Runtime.Intrinsics.Vector64 Value3) LoadVector64x3(short* address) => LoadVector64x3(address); + + /// + /// A64: LD3 { Vn.8H, Vn+1.8H, Vn+2.8H }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2, System.Runtime.Intrinsics.Vector64 Value3) LoadVector64x3(ushort* address) => LoadVector64x3(address); + + /// + /// A64: LD3 { Vn.4S, Vn+1.4S, Vn+2.4S }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2, System.Runtime.Intrinsics.Vector64 Value3) LoadVector64x3(int* address) => LoadVector64x3(address); + + /// + /// A64: LD3 { Vn.4S, Vn+1.4S, Vn+2.4S }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2, System.Runtime.Intrinsics.Vector64 Value3) LoadVector64x3(uint* address) => LoadVector64x3(address); + + /// + /// A64: LD3 { Vn.4S, Vn+1.4S, Vn+2.4S }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2, System.Runtime.Intrinsics.Vector64 Value3) LoadVector64x3(float* address) => LoadVector64x3(address); + + /// + /// A64: LD4 { Vn.16B, Vn+1.16B, Vn+2.16B, Vn+3.16B }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2, System.Runtime.Intrinsics.Vector64 Value3, System.Runtime.Intrinsics.Vector64 Value4) LoadVector64x4(byte* address) => LoadVector64x4(address); + + /// + /// A64: LD4 { Vn.16B, Vn+1.16B, Vn+2.16B, Vn+3.16B }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2, System.Runtime.Intrinsics.Vector64 Value3, System.Runtime.Intrinsics.Vector64 Value4) LoadVector64x4(sbyte* address) => LoadVector64x4(address); + + /// + /// A64: LD4 { Vn.8H, Vn+1.8H, Vn+2.8H, Vn+3.8H }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2, System.Runtime.Intrinsics.Vector64 Value3, System.Runtime.Intrinsics.Vector64 Value4) LoadVector64x4(short* address) => LoadVector64x4(address); + + /// + /// A64: LD4 { Vn.8H, Vn+1.8H, Vn+2.8H, Vn+3.8H }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2, System.Runtime.Intrinsics.Vector64 Value3, System.Runtime.Intrinsics.Vector64 Value4) LoadVector64x4(ushort* address) => LoadVector64x4(address); + + /// + /// A64: LD4 { Vn.4S, Vn+1.4S, Vn+2.4S, Vn+3.4S }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2, System.Runtime.Intrinsics.Vector64 Value3, System.Runtime.Intrinsics.Vector64 Value4) LoadVector64x4(int* address) => LoadVector64x4(address); + + /// + /// A64: LD4 { Vn.4S, Vn+1.4S, Vn+2.4S, Vn+3.4S }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2, System.Runtime.Intrinsics.Vector64 Value3, System.Runtime.Intrinsics.Vector64 Value4) LoadVector64x4(uint* address) => LoadVector64x4(address); + + /// + /// A64: LD4 { Vn.4S, Vn+1.4S, Vn+2.4S, Vn+3.4S }, [Xn] + /// + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2, System.Runtime.Intrinsics.Vector64 Value3, System.Runtime.Intrinsics.Vector64 Value4) LoadVector64x4(float* address) => LoadVector64x4(address); + /// /// uint8x8_t vmax_u8 (uint8x8_t a, uint8x8_t b) /// A32: VMAX.U8 Dd, Dn, Dm diff --git a/src/libraries/System.Runtime.Intrinsics/ref/System.Runtime.Intrinsics.cs b/src/libraries/System.Runtime.Intrinsics/ref/System.Runtime.Intrinsics.cs index cf68330357b7a2..51a2375fd6b1cb 100644 --- a/src/libraries/System.Runtime.Intrinsics/ref/System.Runtime.Intrinsics.cs +++ b/src/libraries/System.Runtime.Intrinsics/ref/System.Runtime.Intrinsics.cs @@ -1867,57 +1867,78 @@ internal AdvSimd() { } public static System.Runtime.Intrinsics.Vector64 LeadingZeroCount(System.Runtime.Intrinsics.Vector64 value) { throw null; } public static System.Runtime.Intrinsics.Vector64 LeadingZeroCount(System.Runtime.Intrinsics.Vector64 value) { throw null; } public static System.Runtime.Intrinsics.Vector64 LeadingZeroCount(System.Runtime.Intrinsics.Vector64 value) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadAndInsertScalar(System.Runtime.Intrinsics.Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(15))] byte index, byte* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadAndInsertScalar(System.Runtime.Intrinsics.Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(1))] byte index, double* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadAndInsertScalar(System.Runtime.Intrinsics.Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(7))] byte index, short* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadAndInsertScalar(System.Runtime.Intrinsics.Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(3))] byte index, int* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadAndInsertScalar(System.Runtime.Intrinsics.Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(1))] byte index, long* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadAndInsertScalar(System.Runtime.Intrinsics.Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(15))] byte index, sbyte* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadAndInsertScalar(System.Runtime.Intrinsics.Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(3))] byte index, float* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadAndInsertScalar(System.Runtime.Intrinsics.Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(7))] byte index, ushort* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadAndInsertScalar(System.Runtime.Intrinsics.Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(3))] byte index, uint* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadAndInsertScalar(System.Runtime.Intrinsics.Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(1))] byte index, ulong* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector64 LoadAndInsertScalar(System.Runtime.Intrinsics.Vector64 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(7))] byte index, byte* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector64 LoadAndInsertScalar(System.Runtime.Intrinsics.Vector64 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(3))] byte index, short* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector64 LoadAndInsertScalar(System.Runtime.Intrinsics.Vector64 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(1))] byte index, int* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector64 LoadAndInsertScalar(System.Runtime.Intrinsics.Vector64 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(7))] byte index, sbyte* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector64 LoadAndInsertScalar(System.Runtime.Intrinsics.Vector64 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(1))] byte index, float* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector64 LoadAndInsertScalar(System.Runtime.Intrinsics.Vector64 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(3))] byte index, ushort* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector64 LoadAndInsertScalar(System.Runtime.Intrinsics.Vector64 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(1))] byte index, uint* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadAndReplicateToVector128(byte* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadAndReplicateToVector128(short* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadAndReplicateToVector128(int* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadAndReplicateToVector128(sbyte* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadAndReplicateToVector128(float* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadAndReplicateToVector128(ushort* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadAndReplicateToVector128(uint* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector64 LoadAndReplicateToVector64(byte* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector64 LoadAndReplicateToVector64(short* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector64 LoadAndReplicateToVector64(int* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector64 LoadAndReplicateToVector64(sbyte* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector64 LoadAndReplicateToVector64(float* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector64 LoadAndReplicateToVector64(ushort* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector64 LoadAndReplicateToVector64(uint* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadVector128(byte* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadVector128(double* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadVector128(short* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadVector128(int* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadVector128(long* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadVector128(sbyte* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadVector128(float* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadVector128(ushort* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadVector128(uint* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadVector128(ulong* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector64 LoadVector64(byte* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector64 LoadVector64(double* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector64 LoadVector64(short* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector64 LoadVector64(int* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector64 LoadVector64(long* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector64 LoadVector64(sbyte* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector64 LoadVector64(float* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector64 LoadVector64(ushort* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector64 LoadVector64(uint* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector64 LoadVector64(ulong* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadAndInsertScalar(System.Runtime.Intrinsics.Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(15))] byte index, byte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadAndInsertScalar(System.Runtime.Intrinsics.Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(1))] byte index, double* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadAndInsertScalar(System.Runtime.Intrinsics.Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(7))] byte index, short* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadAndInsertScalar(System.Runtime.Intrinsics.Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(3))] byte index, int* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadAndInsertScalar(System.Runtime.Intrinsics.Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(1))] byte index, long* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadAndInsertScalar(System.Runtime.Intrinsics.Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(15))] byte index, sbyte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadAndInsertScalar(System.Runtime.Intrinsics.Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(3))] byte index, float* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadAndInsertScalar(System.Runtime.Intrinsics.Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(7))] byte index, ushort* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadAndInsertScalar(System.Runtime.Intrinsics.Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(3))] byte index, uint* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadAndInsertScalar(System.Runtime.Intrinsics.Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(1))] byte index, ulong* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector64 LoadAndInsertScalar(System.Runtime.Intrinsics.Vector64 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(7))] byte index, byte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector64 LoadAndInsertScalar(System.Runtime.Intrinsics.Vector64 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(3))] byte index, short* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector64 LoadAndInsertScalar(System.Runtime.Intrinsics.Vector64 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(1))] byte index, int* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector64 LoadAndInsertScalar(System.Runtime.Intrinsics.Vector64 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(7))] byte index, sbyte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector64 LoadAndInsertScalar(System.Runtime.Intrinsics.Vector64 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(1))] byte index, float* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector64 LoadAndInsertScalar(System.Runtime.Intrinsics.Vector64 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(3))] byte index, ushort* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector64 LoadAndInsertScalar(System.Runtime.Intrinsics.Vector64 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(1))] byte index, uint* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadAndReplicateToVector128(byte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadAndReplicateToVector128(short* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadAndReplicateToVector128(int* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadAndReplicateToVector128(sbyte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadAndReplicateToVector128(float* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadAndReplicateToVector128(ushort* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadAndReplicateToVector128(uint* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector64 LoadAndReplicateToVector64(byte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector64 LoadAndReplicateToVector64(short* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector64 LoadAndReplicateToVector64(int* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector64 LoadAndReplicateToVector64(sbyte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector64 LoadAndReplicateToVector64(float* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector64 LoadAndReplicateToVector64(ushort* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector64 LoadAndReplicateToVector64(uint* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadVector128(byte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadVector128(double* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadVector128(short* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadVector128(int* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadVector128(long* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadVector128(sbyte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadVector128(float* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadVector128(ushort* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadVector128(uint* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadVector128(ulong* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector64 LoadVector64(byte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector64 LoadVector64(double* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector64 LoadVector64(short* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector64 LoadVector64(int* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector64 LoadVector64(long* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector64 LoadVector64(sbyte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector64 LoadVector64(float* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector64 LoadVector64(ushort* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector64 LoadVector64(uint* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector64 LoadVector64(ulong* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadVector64x2(byte* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadVector64x2(sbyte* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadVector64x2(short* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadVector64x2(ushort* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadVector64x2(int* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadVector64x2(uint* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadVector64x2(float* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2, System.Runtime.Intrinsics.Vector64 Value3) LoadVector64x3(byte* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2, System.Runtime.Intrinsics.Vector64 Value3) LoadVector64x3(sbyte* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2, System.Runtime.Intrinsics.Vector64 Value3) LoadVector64x3(short* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2, System.Runtime.Intrinsics.Vector64 Value3) LoadVector64x3(ushort* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2, System.Runtime.Intrinsics.Vector64 Value3) LoadVector64x3(int* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2, System.Runtime.Intrinsics.Vector64 Value3) LoadVector64x3(uint* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2, System.Runtime.Intrinsics.Vector64 Value3) LoadVector64x3(float* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2, System.Runtime.Intrinsics.Vector64 Value3, System.Runtime.Intrinsics.Vector64 Value4) LoadVector64x4(byte* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2, System.Runtime.Intrinsics.Vector64 Value3, System.Runtime.Intrinsics.Vector64 Value4) LoadVector64x4(sbyte* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2, System.Runtime.Intrinsics.Vector64 Value3, System.Runtime.Intrinsics.Vector64 Value4) LoadVector64x4(short* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2, System.Runtime.Intrinsics.Vector64 Value3, System.Runtime.Intrinsics.Vector64 Value4) LoadVector64x4(ushort* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2, System.Runtime.Intrinsics.Vector64 Value3, System.Runtime.Intrinsics.Vector64 Value4) LoadVector64x4(int* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2, System.Runtime.Intrinsics.Vector64 Value3, System.Runtime.Intrinsics.Vector64 Value4) LoadVector64x4(uint* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2, System.Runtime.Intrinsics.Vector64 Value3, System.Runtime.Intrinsics.Vector64 Value4) LoadVector64x4(float* address) { throw null; } public static System.Runtime.Intrinsics.Vector128 Max(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } public static System.Runtime.Intrinsics.Vector128 Max(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } public static System.Runtime.Intrinsics.Vector128 Max(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } @@ -2751,43 +2772,43 @@ internal AdvSimd() { } public static System.Runtime.Intrinsics.Vector128 SignExtendWideningUpper(System.Runtime.Intrinsics.Vector128 value) { throw null; } public static System.Runtime.Intrinsics.Vector64 SqrtScalar(System.Runtime.Intrinsics.Vector64 value) { throw null; } public static System.Runtime.Intrinsics.Vector64 SqrtScalar(System.Runtime.Intrinsics.Vector64 value) { throw null; } - public unsafe static void Store(byte* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void Store(byte* address, System.Runtime.Intrinsics.Vector64 source) { } - public unsafe static void Store(double* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void Store(double* address, System.Runtime.Intrinsics.Vector64 source) { } - public unsafe static void Store(short* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void Store(short* address, System.Runtime.Intrinsics.Vector64 source) { } - public unsafe static void Store(int* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void Store(int* address, System.Runtime.Intrinsics.Vector64 source) { } - public unsafe static void Store(long* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void Store(long* address, System.Runtime.Intrinsics.Vector64 source) { } - public unsafe static void Store(sbyte* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void Store(sbyte* address, System.Runtime.Intrinsics.Vector64 source) { } - public unsafe static void Store(float* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void Store(float* address, System.Runtime.Intrinsics.Vector64 source) { } - public unsafe static void Store(ushort* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void Store(ushort* address, System.Runtime.Intrinsics.Vector64 source) { } - public unsafe static void Store(uint* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void Store(uint* address, System.Runtime.Intrinsics.Vector64 source) { } - public unsafe static void Store(ulong* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void Store(ulong* address, System.Runtime.Intrinsics.Vector64 source) { } - public unsafe static void StoreSelectedScalar(byte* address, System.Runtime.Intrinsics.Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(15))] byte index) { } - public unsafe static void StoreSelectedScalar(byte* address, System.Runtime.Intrinsics.Vector64 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(7))] byte index) { } - public unsafe static void StoreSelectedScalar(double* address, System.Runtime.Intrinsics.Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(1))] byte index) { } - public unsafe static void StoreSelectedScalar(short* address, System.Runtime.Intrinsics.Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(7))] byte index) { } - public unsafe static void StoreSelectedScalar(short* address, System.Runtime.Intrinsics.Vector64 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(3))] byte index) { } - public unsafe static void StoreSelectedScalar(int* address, System.Runtime.Intrinsics.Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(3))] byte index) { } - public unsafe static void StoreSelectedScalar(int* address, System.Runtime.Intrinsics.Vector64 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(1))] byte index) { } - public unsafe static void StoreSelectedScalar(long* address, System.Runtime.Intrinsics.Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(1))] byte index) { } - public unsafe static void StoreSelectedScalar(sbyte* address, System.Runtime.Intrinsics.Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(15))] byte index) { } - public unsafe static void StoreSelectedScalar(sbyte* address, System.Runtime.Intrinsics.Vector64 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(7))] byte index) { } - public unsafe static void StoreSelectedScalar(float* address, System.Runtime.Intrinsics.Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(3))] byte index) { } - public unsafe static void StoreSelectedScalar(float* address, System.Runtime.Intrinsics.Vector64 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(1))] byte index) { } - public unsafe static void StoreSelectedScalar(ushort* address, System.Runtime.Intrinsics.Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(7))] byte index) { } - public unsafe static void StoreSelectedScalar(ushort* address, System.Runtime.Intrinsics.Vector64 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(3))] byte index) { } - public unsafe static void StoreSelectedScalar(uint* address, System.Runtime.Intrinsics.Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(3))] byte index) { } - public unsafe static void StoreSelectedScalar(uint* address, System.Runtime.Intrinsics.Vector64 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(1))] byte index) { } - public unsafe static void StoreSelectedScalar(ulong* address, System.Runtime.Intrinsics.Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(1))] byte index) { } + public static unsafe void Store(byte* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void Store(byte* address, System.Runtime.Intrinsics.Vector64 source) { } + public static unsafe void Store(double* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void Store(double* address, System.Runtime.Intrinsics.Vector64 source) { } + public static unsafe void Store(short* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void Store(short* address, System.Runtime.Intrinsics.Vector64 source) { } + public static unsafe void Store(int* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void Store(int* address, System.Runtime.Intrinsics.Vector64 source) { } + public static unsafe void Store(long* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void Store(long* address, System.Runtime.Intrinsics.Vector64 source) { } + public static unsafe void Store(sbyte* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void Store(sbyte* address, System.Runtime.Intrinsics.Vector64 source) { } + public static unsafe void Store(float* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void Store(float* address, System.Runtime.Intrinsics.Vector64 source) { } + public static unsafe void Store(ushort* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void Store(ushort* address, System.Runtime.Intrinsics.Vector64 source) { } + public static unsafe void Store(uint* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void Store(uint* address, System.Runtime.Intrinsics.Vector64 source) { } + public static unsafe void Store(ulong* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void Store(ulong* address, System.Runtime.Intrinsics.Vector64 source) { } + public static unsafe void StoreSelectedScalar(byte* address, System.Runtime.Intrinsics.Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(15))] byte index) { } + public static unsafe void StoreSelectedScalar(byte* address, System.Runtime.Intrinsics.Vector64 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(7))] byte index) { } + public static unsafe void StoreSelectedScalar(double* address, System.Runtime.Intrinsics.Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(1))] byte index) { } + public static unsafe void StoreSelectedScalar(short* address, System.Runtime.Intrinsics.Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(7))] byte index) { } + public static unsafe void StoreSelectedScalar(short* address, System.Runtime.Intrinsics.Vector64 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(3))] byte index) { } + public static unsafe void StoreSelectedScalar(int* address, System.Runtime.Intrinsics.Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(3))] byte index) { } + public static unsafe void StoreSelectedScalar(int* address, System.Runtime.Intrinsics.Vector64 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(1))] byte index) { } + public static unsafe void StoreSelectedScalar(long* address, System.Runtime.Intrinsics.Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(1))] byte index) { } + public static unsafe void StoreSelectedScalar(sbyte* address, System.Runtime.Intrinsics.Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(15))] byte index) { } + public static unsafe void StoreSelectedScalar(sbyte* address, System.Runtime.Intrinsics.Vector64 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(7))] byte index) { } + public static unsafe void StoreSelectedScalar(float* address, System.Runtime.Intrinsics.Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(3))] byte index) { } + public static unsafe void StoreSelectedScalar(float* address, System.Runtime.Intrinsics.Vector64 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(1))] byte index) { } + public static unsafe void StoreSelectedScalar(ushort* address, System.Runtime.Intrinsics.Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(7))] byte index) { } + public static unsafe void StoreSelectedScalar(ushort* address, System.Runtime.Intrinsics.Vector64 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(3))] byte index) { } + public static unsafe void StoreSelectedScalar(uint* address, System.Runtime.Intrinsics.Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(3))] byte index) { } + public static unsafe void StoreSelectedScalar(uint* address, System.Runtime.Intrinsics.Vector64 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(1))] byte index) { } + public static unsafe void StoreSelectedScalar(ulong* address, System.Runtime.Intrinsics.Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(1))] byte index) { } public unsafe static void StoreVector64x2(byte* address, (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) value) { throw null; } public unsafe static void StoreVector64x2(sbyte* address, (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) value) { throw null; } public unsafe static void StoreVector64x2(short* address, (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) value) { throw null; } @@ -3163,55 +3184,85 @@ internal Arm64() { } public static System.Runtime.Intrinsics.Vector64 InsertSelectedScalar(System.Runtime.Intrinsics.Vector64 result, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(3))] byte resultIndex, System.Runtime.Intrinsics.Vector64 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(3))] byte valueIndex) { throw null; } public static System.Runtime.Intrinsics.Vector64 InsertSelectedScalar(System.Runtime.Intrinsics.Vector64 result, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(1))] byte resultIndex, System.Runtime.Intrinsics.Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(3))] byte valueIndex) { throw null; } public static System.Runtime.Intrinsics.Vector64 InsertSelectedScalar(System.Runtime.Intrinsics.Vector64 result, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(1))] byte resultIndex, System.Runtime.Intrinsics.Vector64 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(1))] byte valueIndex) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadAndReplicateToVector128(double* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadAndReplicateToVector128(long* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadAndReplicateToVector128(ulong* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairScalarVector64(int* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairScalarVector64(float* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairScalarVector64(uint* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairScalarVector64NonTemporal(int* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairScalarVector64NonTemporal(float* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairScalarVector64NonTemporal(uint* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadPairVector128(byte* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadPairVector128(double* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadPairVector128(short* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadPairVector128(int* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadPairVector128(long* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadPairVector128(sbyte* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadPairVector128(float* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadPairVector128(ushort* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadPairVector128(uint* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadPairVector128(ulong* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadPairVector128NonTemporal(byte* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadPairVector128NonTemporal(double* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadPairVector128NonTemporal(short* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadPairVector128NonTemporal(int* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadPairVector128NonTemporal(long* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadPairVector128NonTemporal(sbyte* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadPairVector128NonTemporal(float* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadPairVector128NonTemporal(ushort* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadPairVector128NonTemporal(uint* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadPairVector128NonTemporal(ulong* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairVector64(byte* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairVector64(double* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairVector64(short* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairVector64(int* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairVector64(long* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairVector64(sbyte* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairVector64(float* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairVector64(ushort* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairVector64(uint* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairVector64(ulong* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairVector64NonTemporal(byte* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairVector64NonTemporal(double* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairVector64NonTemporal(short* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairVector64NonTemporal(int* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairVector64NonTemporal(long* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairVector64NonTemporal(sbyte* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairVector64NonTemporal(float* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairVector64NonTemporal(ushort* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairVector64NonTemporal(uint* address) { throw null; } - public unsafe static (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairVector64NonTemporal(ulong* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadAndReplicateToVector128(double* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadAndReplicateToVector128(long* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadAndReplicateToVector128(ulong* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairScalarVector64(int* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairScalarVector64(float* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairScalarVector64(uint* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairScalarVector64NonTemporal(int* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairScalarVector64NonTemporal(float* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairScalarVector64NonTemporal(uint* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadPairVector128(byte* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadPairVector128(double* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadPairVector128(short* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadPairVector128(int* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadPairVector128(long* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadPairVector128(sbyte* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadPairVector128(float* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadPairVector128(ushort* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadPairVector128(uint* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadPairVector128(ulong* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadPairVector128NonTemporal(byte* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadPairVector128NonTemporal(double* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadPairVector128NonTemporal(short* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadPairVector128NonTemporal(int* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadPairVector128NonTemporal(long* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadPairVector128NonTemporal(sbyte* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadPairVector128NonTemporal(float* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadPairVector128NonTemporal(ushort* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadPairVector128NonTemporal(uint* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadPairVector128NonTemporal(ulong* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairVector64(byte* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairVector64(double* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairVector64(short* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairVector64(int* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairVector64(long* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairVector64(sbyte* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairVector64(float* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairVector64(ushort* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairVector64(uint* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairVector64(ulong* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairVector64NonTemporal(byte* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairVector64NonTemporal(double* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairVector64NonTemporal(short* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairVector64NonTemporal(int* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairVector64NonTemporal(long* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairVector64NonTemporal(sbyte* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairVector64NonTemporal(float* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairVector64NonTemporal(ushort* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairVector64NonTemporal(uint* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector64 Value1, System.Runtime.Intrinsics.Vector64 Value2) LoadPairVector64NonTemporal(ulong* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadVector128x2(byte* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadVector128x2(sbyte* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadVector128x2(short* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadVector128x2(ushort* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadVector128x2(int* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadVector128x2(uint* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadVector128x2(long* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadVector128x2(ulong* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadVector128x2(float* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) LoadVector128x2(double* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3) LoadVector128x3(byte* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3) LoadVector128x3(sbyte* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3) LoadVector128x3(short* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3) LoadVector128x3(ushort* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3) LoadVector128x3(int* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3) LoadVector128x3(uint* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3) LoadVector128x3(long* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3) LoadVector128x3(ulong* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3) LoadVector128x3(float* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3) LoadVector128x3(double* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3, System.Runtime.Intrinsics.Vector128 Value4) LoadVector128x4(byte* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3, System.Runtime.Intrinsics.Vector128 Value4) LoadVector128x4(sbyte* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3, System.Runtime.Intrinsics.Vector128 Value4) LoadVector128x4(short* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3, System.Runtime.Intrinsics.Vector128 Value4) LoadVector128x4(ushort* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3, System.Runtime.Intrinsics.Vector128 Value4) LoadVector128x4(int* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3, System.Runtime.Intrinsics.Vector128 Value4) LoadVector128x4(uint* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3, System.Runtime.Intrinsics.Vector128 Value4) LoadVector128x4(long* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3, System.Runtime.Intrinsics.Vector128 Value4) LoadVector128x4(ulong* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3, System.Runtime.Intrinsics.Vector128 Value4) LoadVector128x4(float* address) { throw null; } + public static unsafe (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2, System.Runtime.Intrinsics.Vector128 Value3, System.Runtime.Intrinsics.Vector128 Value4) LoadVector128x4(double* address) { throw null; } public static System.Runtime.Intrinsics.Vector128 Max(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } public static System.Runtime.Intrinsics.Vector64 MaxAcross(System.Runtime.Intrinsics.Vector128 value) { throw null; } public static System.Runtime.Intrinsics.Vector64 MaxAcross(System.Runtime.Intrinsics.Vector128 value) { throw null; } @@ -3407,52 +3458,52 @@ internal Arm64() { } public static System.Runtime.Intrinsics.Vector128 Sqrt(System.Runtime.Intrinsics.Vector128 value) { throw null; } public static System.Runtime.Intrinsics.Vector128 Sqrt(System.Runtime.Intrinsics.Vector128 value) { throw null; } public static System.Runtime.Intrinsics.Vector64 Sqrt(System.Runtime.Intrinsics.Vector64 value) { throw null; } - public unsafe static void StorePair(byte* address, System.Runtime.Intrinsics.Vector128 value1, System.Runtime.Intrinsics.Vector128 value2) { } - public unsafe static void StorePair(byte* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } - public unsafe static void StorePair(double* address, System.Runtime.Intrinsics.Vector128 value1, System.Runtime.Intrinsics.Vector128 value2) { } - public unsafe static void StorePair(double* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } - public unsafe static void StorePair(short* address, System.Runtime.Intrinsics.Vector128 value1, System.Runtime.Intrinsics.Vector128 value2) { } - public unsafe static void StorePair(short* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } - public unsafe static void StorePair(int* address, System.Runtime.Intrinsics.Vector128 value1, System.Runtime.Intrinsics.Vector128 value2) { } - public unsafe static void StorePair(int* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } - public unsafe static void StorePair(long* address, System.Runtime.Intrinsics.Vector128 value1, System.Runtime.Intrinsics.Vector128 value2) { } - public unsafe static void StorePair(long* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } - public unsafe static void StorePair(sbyte* address, System.Runtime.Intrinsics.Vector128 value1, System.Runtime.Intrinsics.Vector128 value2) { } - public unsafe static void StorePair(sbyte* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } - public unsafe static void StorePair(float* address, System.Runtime.Intrinsics.Vector128 value1, System.Runtime.Intrinsics.Vector128 value2) { } - public unsafe static void StorePair(float* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } - public unsafe static void StorePair(ushort* address, System.Runtime.Intrinsics.Vector128 value1, System.Runtime.Intrinsics.Vector128 value2) { } - public unsafe static void StorePair(ushort* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } - public unsafe static void StorePair(uint* address, System.Runtime.Intrinsics.Vector128 value1, System.Runtime.Intrinsics.Vector128 value2) { } - public unsafe static void StorePair(uint* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } - public unsafe static void StorePair(ulong* address, System.Runtime.Intrinsics.Vector128 value1, System.Runtime.Intrinsics.Vector128 value2) { } - public unsafe static void StorePair(ulong* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } - public unsafe static void StorePairNonTemporal(byte* address, System.Runtime.Intrinsics.Vector128 value1, System.Runtime.Intrinsics.Vector128 value2) { } - public unsafe static void StorePairNonTemporal(byte* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } - public unsafe static void StorePairNonTemporal(double* address, System.Runtime.Intrinsics.Vector128 value1, System.Runtime.Intrinsics.Vector128 value2) { } - public unsafe static void StorePairNonTemporal(double* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } - public unsafe static void StorePairNonTemporal(short* address, System.Runtime.Intrinsics.Vector128 value1, System.Runtime.Intrinsics.Vector128 value2) { } - public unsafe static void StorePairNonTemporal(short* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } - public unsafe static void StorePairNonTemporal(int* address, System.Runtime.Intrinsics.Vector128 value1, System.Runtime.Intrinsics.Vector128 value2) { } - public unsafe static void StorePairNonTemporal(int* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } - public unsafe static void StorePairNonTemporal(long* address, System.Runtime.Intrinsics.Vector128 value1, System.Runtime.Intrinsics.Vector128 value2) { } - public unsafe static void StorePairNonTemporal(long* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } - public unsafe static void StorePairNonTemporal(sbyte* address, System.Runtime.Intrinsics.Vector128 value1, System.Runtime.Intrinsics.Vector128 value2) { } - public unsafe static void StorePairNonTemporal(sbyte* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } - public unsafe static void StorePairNonTemporal(float* address, System.Runtime.Intrinsics.Vector128 value1, System.Runtime.Intrinsics.Vector128 value2) { } - public unsafe static void StorePairNonTemporal(float* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } - public unsafe static void StorePairNonTemporal(ushort* address, System.Runtime.Intrinsics.Vector128 value1, System.Runtime.Intrinsics.Vector128 value2) { } - public unsafe static void StorePairNonTemporal(ushort* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } - public unsafe static void StorePairNonTemporal(uint* address, System.Runtime.Intrinsics.Vector128 value1, System.Runtime.Intrinsics.Vector128 value2) { } - public unsafe static void StorePairNonTemporal(uint* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } - public unsafe static void StorePairNonTemporal(ulong* address, System.Runtime.Intrinsics.Vector128 value1, System.Runtime.Intrinsics.Vector128 value2) { } - public unsafe static void StorePairNonTemporal(ulong* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } - public unsafe static void StorePairScalar(int* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } - public unsafe static void StorePairScalar(float* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } - public unsafe static void StorePairScalar(uint* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } - public unsafe static void StorePairScalarNonTemporal(int* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } - public unsafe static void StorePairScalarNonTemporal(float* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } - public unsafe static void StorePairScalarNonTemporal(uint* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } + public static unsafe void StorePair(byte* address, System.Runtime.Intrinsics.Vector128 value1, System.Runtime.Intrinsics.Vector128 value2) { } + public static unsafe void StorePair(byte* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } + public static unsafe void StorePair(double* address, System.Runtime.Intrinsics.Vector128 value1, System.Runtime.Intrinsics.Vector128 value2) { } + public static unsafe void StorePair(double* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } + public static unsafe void StorePair(short* address, System.Runtime.Intrinsics.Vector128 value1, System.Runtime.Intrinsics.Vector128 value2) { } + public static unsafe void StorePair(short* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } + public static unsafe void StorePair(int* address, System.Runtime.Intrinsics.Vector128 value1, System.Runtime.Intrinsics.Vector128 value2) { } + public static unsafe void StorePair(int* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } + public static unsafe void StorePair(long* address, System.Runtime.Intrinsics.Vector128 value1, System.Runtime.Intrinsics.Vector128 value2) { } + public static unsafe void StorePair(long* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } + public static unsafe void StorePair(sbyte* address, System.Runtime.Intrinsics.Vector128 value1, System.Runtime.Intrinsics.Vector128 value2) { } + public static unsafe void StorePair(sbyte* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } + public static unsafe void StorePair(float* address, System.Runtime.Intrinsics.Vector128 value1, System.Runtime.Intrinsics.Vector128 value2) { } + public static unsafe void StorePair(float* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } + public static unsafe void StorePair(ushort* address, System.Runtime.Intrinsics.Vector128 value1, System.Runtime.Intrinsics.Vector128 value2) { } + public static unsafe void StorePair(ushort* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } + public static unsafe void StorePair(uint* address, System.Runtime.Intrinsics.Vector128 value1, System.Runtime.Intrinsics.Vector128 value2) { } + public static unsafe void StorePair(uint* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } + public static unsafe void StorePair(ulong* address, System.Runtime.Intrinsics.Vector128 value1, System.Runtime.Intrinsics.Vector128 value2) { } + public static unsafe void StorePair(ulong* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } + public static unsafe void StorePairNonTemporal(byte* address, System.Runtime.Intrinsics.Vector128 value1, System.Runtime.Intrinsics.Vector128 value2) { } + public static unsafe void StorePairNonTemporal(byte* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } + public static unsafe void StorePairNonTemporal(double* address, System.Runtime.Intrinsics.Vector128 value1, System.Runtime.Intrinsics.Vector128 value2) { } + public static unsafe void StorePairNonTemporal(double* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } + public static unsafe void StorePairNonTemporal(short* address, System.Runtime.Intrinsics.Vector128 value1, System.Runtime.Intrinsics.Vector128 value2) { } + public static unsafe void StorePairNonTemporal(short* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } + public static unsafe void StorePairNonTemporal(int* address, System.Runtime.Intrinsics.Vector128 value1, System.Runtime.Intrinsics.Vector128 value2) { } + public static unsafe void StorePairNonTemporal(int* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } + public static unsafe void StorePairNonTemporal(long* address, System.Runtime.Intrinsics.Vector128 value1, System.Runtime.Intrinsics.Vector128 value2) { } + public static unsafe void StorePairNonTemporal(long* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } + public static unsafe void StorePairNonTemporal(sbyte* address, System.Runtime.Intrinsics.Vector128 value1, System.Runtime.Intrinsics.Vector128 value2) { } + public static unsafe void StorePairNonTemporal(sbyte* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } + public static unsafe void StorePairNonTemporal(float* address, System.Runtime.Intrinsics.Vector128 value1, System.Runtime.Intrinsics.Vector128 value2) { } + public static unsafe void StorePairNonTemporal(float* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } + public static unsafe void StorePairNonTemporal(ushort* address, System.Runtime.Intrinsics.Vector128 value1, System.Runtime.Intrinsics.Vector128 value2) { } + public static unsafe void StorePairNonTemporal(ushort* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } + public static unsafe void StorePairNonTemporal(uint* address, System.Runtime.Intrinsics.Vector128 value1, System.Runtime.Intrinsics.Vector128 value2) { } + public static unsafe void StorePairNonTemporal(uint* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } + public static unsafe void StorePairNonTemporal(ulong* address, System.Runtime.Intrinsics.Vector128 value1, System.Runtime.Intrinsics.Vector128 value2) { } + public static unsafe void StorePairNonTemporal(ulong* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } + public static unsafe void StorePairScalar(int* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } + public static unsafe void StorePairScalar(float* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } + public static unsafe void StorePairScalar(uint* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } + public static unsafe void StorePairScalarNonTemporal(int* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } + public static unsafe void StorePairScalarNonTemporal(float* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } + public static unsafe void StorePairScalarNonTemporal(uint* address, System.Runtime.Intrinsics.Vector64 value1, System.Runtime.Intrinsics.Vector64 value2) { } public unsafe static void StoreVector128x2(byte* address, (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) value) { throw null; } public unsafe static void StoreVector128x2(sbyte* address, (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) value) { throw null; } public unsafe static void StoreVector128x2(short* address, (System.Runtime.Intrinsics.Vector128 Value1, System.Runtime.Intrinsics.Vector128 Value2) value) { throw null; } @@ -3791,11 +3842,11 @@ internal Avx() { } public static System.Runtime.Intrinsics.Vector256 Blend(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute] byte control) { throw null; } public static System.Runtime.Intrinsics.Vector256 BlendVariable(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right, System.Runtime.Intrinsics.Vector256 mask) { throw null; } public static System.Runtime.Intrinsics.Vector256 BlendVariable(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right, System.Runtime.Intrinsics.Vector256 mask) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 BroadcastScalarToVector128(float* source) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 BroadcastScalarToVector256(double* source) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 BroadcastScalarToVector256(float* source) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 BroadcastVector128ToVector256(double* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 BroadcastVector128ToVector256(float* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 BroadcastScalarToVector128(float* source) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 BroadcastScalarToVector256(double* source) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 BroadcastScalarToVector256(float* source) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 BroadcastVector128ToVector256(double* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 BroadcastVector128ToVector256(float* address) { throw null; } public static System.Runtime.Intrinsics.Vector256 Ceiling(System.Runtime.Intrinsics.Vector256 value) { throw null; } public static System.Runtime.Intrinsics.Vector256 Ceiling(System.Runtime.Intrinsics.Vector256 value) { throw null; } public static System.Runtime.Intrinsics.Vector128 Compare(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = System.Runtime.Intrinsics.X86.FloatComparisonMode.UnorderedTrueSignaling)] System.Runtime.Intrinsics.X86.FloatComparisonMode mode) { throw null; } @@ -3868,42 +3919,42 @@ internal Avx() { } public static System.Runtime.Intrinsics.Vector256 InsertVector128(System.Runtime.Intrinsics.Vector256 value, System.Runtime.Intrinsics.Vector128 data, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute] byte index) { throw null; } public static System.Runtime.Intrinsics.Vector256 InsertVector128(System.Runtime.Intrinsics.Vector256 value, System.Runtime.Intrinsics.Vector128 data, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute] byte index) { throw null; } public static System.Runtime.Intrinsics.Vector256 InsertVector128(System.Runtime.Intrinsics.Vector256 value, System.Runtime.Intrinsics.Vector128 data, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute] byte index) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 LoadAlignedVector256(byte* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 LoadAlignedVector256(double* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 LoadAlignedVector256(short* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 LoadAlignedVector256(int* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 LoadAlignedVector256(long* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 LoadAlignedVector256(sbyte* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 LoadAlignedVector256(float* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 LoadAlignedVector256(ushort* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 LoadAlignedVector256(uint* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 LoadAlignedVector256(ulong* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 LoadDquVector256(byte* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 LoadDquVector256(short* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 LoadDquVector256(int* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 LoadDquVector256(long* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 LoadDquVector256(sbyte* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 LoadDquVector256(ushort* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 LoadDquVector256(uint* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 LoadDquVector256(ulong* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 LoadVector256(byte* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 LoadVector256(double* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 LoadVector256(short* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 LoadVector256(int* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 LoadVector256(long* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 LoadVector256(sbyte* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 LoadVector256(float* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 LoadVector256(ushort* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 LoadVector256(uint* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 LoadVector256(ulong* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 MaskLoad(double* address, System.Runtime.Intrinsics.Vector128 mask) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 MaskLoad(double* address, System.Runtime.Intrinsics.Vector256 mask) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 MaskLoad(float* address, System.Runtime.Intrinsics.Vector128 mask) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 MaskLoad(float* address, System.Runtime.Intrinsics.Vector256 mask) { throw null; } - public unsafe static void MaskStore(double* address, System.Runtime.Intrinsics.Vector128 mask, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void MaskStore(double* address, System.Runtime.Intrinsics.Vector256 mask, System.Runtime.Intrinsics.Vector256 source) { } - public unsafe static void MaskStore(float* address, System.Runtime.Intrinsics.Vector128 mask, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void MaskStore(float* address, System.Runtime.Intrinsics.Vector256 mask, System.Runtime.Intrinsics.Vector256 source) { } + public static unsafe System.Runtime.Intrinsics.Vector256 LoadAlignedVector256(byte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 LoadAlignedVector256(double* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 LoadAlignedVector256(short* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 LoadAlignedVector256(int* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 LoadAlignedVector256(long* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 LoadAlignedVector256(sbyte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 LoadAlignedVector256(float* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 LoadAlignedVector256(ushort* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 LoadAlignedVector256(uint* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 LoadAlignedVector256(ulong* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 LoadDquVector256(byte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 LoadDquVector256(short* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 LoadDquVector256(int* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 LoadDquVector256(long* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 LoadDquVector256(sbyte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 LoadDquVector256(ushort* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 LoadDquVector256(uint* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 LoadDquVector256(ulong* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 LoadVector256(byte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 LoadVector256(double* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 LoadVector256(short* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 LoadVector256(int* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 LoadVector256(long* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 LoadVector256(sbyte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 LoadVector256(float* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 LoadVector256(ushort* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 LoadVector256(uint* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 LoadVector256(ulong* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 MaskLoad(double* address, System.Runtime.Intrinsics.Vector128 mask) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 MaskLoad(double* address, System.Runtime.Intrinsics.Vector256 mask) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 MaskLoad(float* address, System.Runtime.Intrinsics.Vector128 mask) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 MaskLoad(float* address, System.Runtime.Intrinsics.Vector256 mask) { throw null; } + public static unsafe void MaskStore(double* address, System.Runtime.Intrinsics.Vector128 mask, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void MaskStore(double* address, System.Runtime.Intrinsics.Vector256 mask, System.Runtime.Intrinsics.Vector256 source) { } + public static unsafe void MaskStore(float* address, System.Runtime.Intrinsics.Vector128 mask, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void MaskStore(float* address, System.Runtime.Intrinsics.Vector256 mask, System.Runtime.Intrinsics.Vector256 source) { } public static System.Runtime.Intrinsics.Vector256 Max(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) { throw null; } public static System.Runtime.Intrinsics.Vector256 Max(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) { throw null; } public static System.Runtime.Intrinsics.Vector256 Min(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) { throw null; } @@ -3948,36 +3999,36 @@ public unsafe static void MaskStore(float* address, System.Runtime.Intrinsics.Ve public static System.Runtime.Intrinsics.Vector256 Shuffle(System.Runtime.Intrinsics.Vector256 value, System.Runtime.Intrinsics.Vector256 right, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute] byte control) { throw null; } public static System.Runtime.Intrinsics.Vector256 Sqrt(System.Runtime.Intrinsics.Vector256 value) { throw null; } public static System.Runtime.Intrinsics.Vector256 Sqrt(System.Runtime.Intrinsics.Vector256 value) { throw null; } - public unsafe static void Store(byte* address, System.Runtime.Intrinsics.Vector256 source) { } - public unsafe static void Store(double* address, System.Runtime.Intrinsics.Vector256 source) { } - public unsafe static void Store(short* address, System.Runtime.Intrinsics.Vector256 source) { } - public unsafe static void Store(int* address, System.Runtime.Intrinsics.Vector256 source) { } - public unsafe static void Store(long* address, System.Runtime.Intrinsics.Vector256 source) { } - public unsafe static void Store(sbyte* address, System.Runtime.Intrinsics.Vector256 source) { } - public unsafe static void Store(float* address, System.Runtime.Intrinsics.Vector256 source) { } - public unsafe static void Store(ushort* address, System.Runtime.Intrinsics.Vector256 source) { } - public unsafe static void Store(uint* address, System.Runtime.Intrinsics.Vector256 source) { } - public unsafe static void Store(ulong* address, System.Runtime.Intrinsics.Vector256 source) { } - public unsafe static void StoreAligned(byte* address, System.Runtime.Intrinsics.Vector256 source) { } - public unsafe static void StoreAligned(double* address, System.Runtime.Intrinsics.Vector256 source) { } - public unsafe static void StoreAligned(short* address, System.Runtime.Intrinsics.Vector256 source) { } - public unsafe static void StoreAligned(int* address, System.Runtime.Intrinsics.Vector256 source) { } - public unsafe static void StoreAligned(long* address, System.Runtime.Intrinsics.Vector256 source) { } - public unsafe static void StoreAligned(sbyte* address, System.Runtime.Intrinsics.Vector256 source) { } - public unsafe static void StoreAligned(float* address, System.Runtime.Intrinsics.Vector256 source) { } - public unsafe static void StoreAligned(ushort* address, System.Runtime.Intrinsics.Vector256 source) { } - public unsafe static void StoreAligned(uint* address, System.Runtime.Intrinsics.Vector256 source) { } - public unsafe static void StoreAligned(ulong* address, System.Runtime.Intrinsics.Vector256 source) { } - public unsafe static void StoreAlignedNonTemporal(byte* address, System.Runtime.Intrinsics.Vector256 source) { } - public unsafe static void StoreAlignedNonTemporal(double* address, System.Runtime.Intrinsics.Vector256 source) { } - public unsafe static void StoreAlignedNonTemporal(short* address, System.Runtime.Intrinsics.Vector256 source) { } - public unsafe static void StoreAlignedNonTemporal(int* address, System.Runtime.Intrinsics.Vector256 source) { } - public unsafe static void StoreAlignedNonTemporal(long* address, System.Runtime.Intrinsics.Vector256 source) { } - public unsafe static void StoreAlignedNonTemporal(sbyte* address, System.Runtime.Intrinsics.Vector256 source) { } - public unsafe static void StoreAlignedNonTemporal(float* address, System.Runtime.Intrinsics.Vector256 source) { } - public unsafe static void StoreAlignedNonTemporal(ushort* address, System.Runtime.Intrinsics.Vector256 source) { } - public unsafe static void StoreAlignedNonTemporal(uint* address, System.Runtime.Intrinsics.Vector256 source) { } - public unsafe static void StoreAlignedNonTemporal(ulong* address, System.Runtime.Intrinsics.Vector256 source) { } + public static unsafe void Store(byte* address, System.Runtime.Intrinsics.Vector256 source) { } + public static unsafe void Store(double* address, System.Runtime.Intrinsics.Vector256 source) { } + public static unsafe void Store(short* address, System.Runtime.Intrinsics.Vector256 source) { } + public static unsafe void Store(int* address, System.Runtime.Intrinsics.Vector256 source) { } + public static unsafe void Store(long* address, System.Runtime.Intrinsics.Vector256 source) { } + public static unsafe void Store(sbyte* address, System.Runtime.Intrinsics.Vector256 source) { } + public static unsafe void Store(float* address, System.Runtime.Intrinsics.Vector256 source) { } + public static unsafe void Store(ushort* address, System.Runtime.Intrinsics.Vector256 source) { } + public static unsafe void Store(uint* address, System.Runtime.Intrinsics.Vector256 source) { } + public static unsafe void Store(ulong* address, System.Runtime.Intrinsics.Vector256 source) { } + public static unsafe void StoreAligned(byte* address, System.Runtime.Intrinsics.Vector256 source) { } + public static unsafe void StoreAligned(double* address, System.Runtime.Intrinsics.Vector256 source) { } + public static unsafe void StoreAligned(short* address, System.Runtime.Intrinsics.Vector256 source) { } + public static unsafe void StoreAligned(int* address, System.Runtime.Intrinsics.Vector256 source) { } + public static unsafe void StoreAligned(long* address, System.Runtime.Intrinsics.Vector256 source) { } + public static unsafe void StoreAligned(sbyte* address, System.Runtime.Intrinsics.Vector256 source) { } + public static unsafe void StoreAligned(float* address, System.Runtime.Intrinsics.Vector256 source) { } + public static unsafe void StoreAligned(ushort* address, System.Runtime.Intrinsics.Vector256 source) { } + public static unsafe void StoreAligned(uint* address, System.Runtime.Intrinsics.Vector256 source) { } + public static unsafe void StoreAligned(ulong* address, System.Runtime.Intrinsics.Vector256 source) { } + public static unsafe void StoreAlignedNonTemporal(byte* address, System.Runtime.Intrinsics.Vector256 source) { } + public static unsafe void StoreAlignedNonTemporal(double* address, System.Runtime.Intrinsics.Vector256 source) { } + public static unsafe void StoreAlignedNonTemporal(short* address, System.Runtime.Intrinsics.Vector256 source) { } + public static unsafe void StoreAlignedNonTemporal(int* address, System.Runtime.Intrinsics.Vector256 source) { } + public static unsafe void StoreAlignedNonTemporal(long* address, System.Runtime.Intrinsics.Vector256 source) { } + public static unsafe void StoreAlignedNonTemporal(sbyte* address, System.Runtime.Intrinsics.Vector256 source) { } + public static unsafe void StoreAlignedNonTemporal(float* address, System.Runtime.Intrinsics.Vector256 source) { } + public static unsafe void StoreAlignedNonTemporal(ushort* address, System.Runtime.Intrinsics.Vector256 source) { } + public static unsafe void StoreAlignedNonTemporal(uint* address, System.Runtime.Intrinsics.Vector256 source) { } + public static unsafe void StoreAlignedNonTemporal(ulong* address, System.Runtime.Intrinsics.Vector256 source) { } public static System.Runtime.Intrinsics.Vector256 Subtract(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) { throw null; } public static System.Runtime.Intrinsics.Vector256 Subtract(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) { throw null; } public static bool TestC(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } @@ -4088,10 +4139,10 @@ internal Avx2() { } public static System.Runtime.Intrinsics.Vector256 BlendVariable(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right, System.Runtime.Intrinsics.Vector256 mask) { throw null; } public static System.Runtime.Intrinsics.Vector256 BlendVariable(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right, System.Runtime.Intrinsics.Vector256 mask) { throw null; } public static System.Runtime.Intrinsics.Vector256 BlendVariable(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right, System.Runtime.Intrinsics.Vector256 mask) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 BroadcastScalarToVector128(byte* source) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 BroadcastScalarToVector128(short* source) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 BroadcastScalarToVector128(int* source) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 BroadcastScalarToVector128(long* source) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 BroadcastScalarToVector128(byte* source) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 BroadcastScalarToVector128(short* source) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 BroadcastScalarToVector128(int* source) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 BroadcastScalarToVector128(long* source) { throw null; } public static System.Runtime.Intrinsics.Vector128 BroadcastScalarToVector128(System.Runtime.Intrinsics.Vector128 value) { throw null; } public static System.Runtime.Intrinsics.Vector128 BroadcastScalarToVector128(System.Runtime.Intrinsics.Vector128 value) { throw null; } public static System.Runtime.Intrinsics.Vector128 BroadcastScalarToVector128(System.Runtime.Intrinsics.Vector128 value) { throw null; } @@ -4102,14 +4153,14 @@ internal Avx2() { } public static System.Runtime.Intrinsics.Vector128 BroadcastScalarToVector128(System.Runtime.Intrinsics.Vector128 value) { throw null; } public static System.Runtime.Intrinsics.Vector128 BroadcastScalarToVector128(System.Runtime.Intrinsics.Vector128 value) { throw null; } public static System.Runtime.Intrinsics.Vector128 BroadcastScalarToVector128(System.Runtime.Intrinsics.Vector128 value) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 BroadcastScalarToVector128(sbyte* source) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 BroadcastScalarToVector128(ushort* source) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 BroadcastScalarToVector128(uint* source) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 BroadcastScalarToVector128(ulong* source) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 BroadcastScalarToVector256(byte* source) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 BroadcastScalarToVector256(short* source) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 BroadcastScalarToVector256(int* source) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 BroadcastScalarToVector256(long* source) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 BroadcastScalarToVector128(sbyte* source) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 BroadcastScalarToVector128(ushort* source) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 BroadcastScalarToVector128(uint* source) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 BroadcastScalarToVector128(ulong* source) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 BroadcastScalarToVector256(byte* source) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 BroadcastScalarToVector256(short* source) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 BroadcastScalarToVector256(int* source) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 BroadcastScalarToVector256(long* source) { throw null; } public static System.Runtime.Intrinsics.Vector256 BroadcastScalarToVector256(System.Runtime.Intrinsics.Vector128 value) { throw null; } public static System.Runtime.Intrinsics.Vector256 BroadcastScalarToVector256(System.Runtime.Intrinsics.Vector128 value) { throw null; } public static System.Runtime.Intrinsics.Vector256 BroadcastScalarToVector256(System.Runtime.Intrinsics.Vector128 value) { throw null; } @@ -4120,18 +4171,18 @@ internal Avx2() { } public static System.Runtime.Intrinsics.Vector256 BroadcastScalarToVector256(System.Runtime.Intrinsics.Vector128 value) { throw null; } public static System.Runtime.Intrinsics.Vector256 BroadcastScalarToVector256(System.Runtime.Intrinsics.Vector128 value) { throw null; } public static System.Runtime.Intrinsics.Vector256 BroadcastScalarToVector256(System.Runtime.Intrinsics.Vector128 value) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 BroadcastScalarToVector256(sbyte* source) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 BroadcastScalarToVector256(ushort* source) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 BroadcastScalarToVector256(uint* source) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 BroadcastScalarToVector256(ulong* source) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 BroadcastVector128ToVector256(byte* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 BroadcastVector128ToVector256(short* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 BroadcastVector128ToVector256(int* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 BroadcastVector128ToVector256(long* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 BroadcastVector128ToVector256(sbyte* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 BroadcastVector128ToVector256(ushort* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 BroadcastVector128ToVector256(uint* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 BroadcastVector128ToVector256(ulong* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 BroadcastScalarToVector256(sbyte* source) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 BroadcastScalarToVector256(ushort* source) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 BroadcastScalarToVector256(uint* source) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 BroadcastScalarToVector256(ulong* source) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 BroadcastVector128ToVector256(byte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 BroadcastVector128ToVector256(short* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 BroadcastVector128ToVector256(int* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 BroadcastVector128ToVector256(long* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 BroadcastVector128ToVector256(sbyte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 BroadcastVector128ToVector256(ushort* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 BroadcastVector128ToVector256(uint* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 BroadcastVector128ToVector256(ulong* address) { throw null; } public static System.Runtime.Intrinsics.Vector256 CompareEqual(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) { throw null; } public static System.Runtime.Intrinsics.Vector256 CompareEqual(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) { throw null; } public static System.Runtime.Intrinsics.Vector256 CompareEqual(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) { throw null; } @@ -4146,30 +4197,30 @@ internal Avx2() { } public static System.Runtime.Intrinsics.Vector256 CompareGreaterThan(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) { throw null; } public static int ConvertToInt32(System.Runtime.Intrinsics.Vector256 value) { throw null; } public static uint ConvertToUInt32(System.Runtime.Intrinsics.Vector256 value) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 ConvertToVector256Int16(byte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 ConvertToVector256Int16(byte* address) { throw null; } public static System.Runtime.Intrinsics.Vector256 ConvertToVector256Int16(System.Runtime.Intrinsics.Vector128 value) { throw null; } public static System.Runtime.Intrinsics.Vector256 ConvertToVector256Int16(System.Runtime.Intrinsics.Vector128 value) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 ConvertToVector256Int16(sbyte* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 ConvertToVector256Int32(byte* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 ConvertToVector256Int32(short* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 ConvertToVector256Int16(sbyte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 ConvertToVector256Int32(byte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 ConvertToVector256Int32(short* address) { throw null; } public static System.Runtime.Intrinsics.Vector256 ConvertToVector256Int32(System.Runtime.Intrinsics.Vector128 value) { throw null; } public static System.Runtime.Intrinsics.Vector256 ConvertToVector256Int32(System.Runtime.Intrinsics.Vector128 value) { throw null; } public static System.Runtime.Intrinsics.Vector256 ConvertToVector256Int32(System.Runtime.Intrinsics.Vector128 value) { throw null; } public static System.Runtime.Intrinsics.Vector256 ConvertToVector256Int32(System.Runtime.Intrinsics.Vector128 value) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 ConvertToVector256Int32(sbyte* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 ConvertToVector256Int32(ushort* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 ConvertToVector256Int64(byte* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 ConvertToVector256Int64(short* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 ConvertToVector256Int64(int* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 ConvertToVector256Int32(sbyte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 ConvertToVector256Int32(ushort* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 ConvertToVector256Int64(byte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 ConvertToVector256Int64(short* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 ConvertToVector256Int64(int* address) { throw null; } public static System.Runtime.Intrinsics.Vector256 ConvertToVector256Int64(System.Runtime.Intrinsics.Vector128 value) { throw null; } public static System.Runtime.Intrinsics.Vector256 ConvertToVector256Int64(System.Runtime.Intrinsics.Vector128 value) { throw null; } public static System.Runtime.Intrinsics.Vector256 ConvertToVector256Int64(System.Runtime.Intrinsics.Vector128 value) { throw null; } public static System.Runtime.Intrinsics.Vector256 ConvertToVector256Int64(System.Runtime.Intrinsics.Vector128 value) { throw null; } public static System.Runtime.Intrinsics.Vector256 ConvertToVector256Int64(System.Runtime.Intrinsics.Vector128 value) { throw null; } public static System.Runtime.Intrinsics.Vector256 ConvertToVector256Int64(System.Runtime.Intrinsics.Vector128 value) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 ConvertToVector256Int64(sbyte* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 ConvertToVector256Int64(ushort* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 ConvertToVector256Int64(uint* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 ConvertToVector256Int64(sbyte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 ConvertToVector256Int64(ushort* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 ConvertToVector256Int64(uint* address) { throw null; } public static new System.Runtime.Intrinsics.Vector128 ExtractVector128(System.Runtime.Intrinsics.Vector256 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute] byte index) { throw null; } public static new System.Runtime.Intrinsics.Vector128 ExtractVector128(System.Runtime.Intrinsics.Vector256 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute] byte index) { throw null; } public static new System.Runtime.Intrinsics.Vector128 ExtractVector128(System.Runtime.Intrinsics.Vector256 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute] byte index) { throw null; } @@ -4178,54 +4229,54 @@ internal Avx2() { } public static new System.Runtime.Intrinsics.Vector128 ExtractVector128(System.Runtime.Intrinsics.Vector256 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute] byte index) { throw null; } public static new System.Runtime.Intrinsics.Vector128 ExtractVector128(System.Runtime.Intrinsics.Vector256 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute] byte index) { throw null; } public static new System.Runtime.Intrinsics.Vector128 ExtractVector128(System.Runtime.Intrinsics.Vector256 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute] byte index) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 GatherMaskVector128(System.Runtime.Intrinsics.Vector128 source, double* baseAddress, System.Runtime.Intrinsics.Vector128 index, System.Runtime.Intrinsics.Vector128 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 GatherMaskVector128(System.Runtime.Intrinsics.Vector128 source, double* baseAddress, System.Runtime.Intrinsics.Vector128 index, System.Runtime.Intrinsics.Vector128 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 GatherMaskVector128(System.Runtime.Intrinsics.Vector128 source, int* baseAddress, System.Runtime.Intrinsics.Vector128 index, System.Runtime.Intrinsics.Vector128 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 GatherMaskVector128(System.Runtime.Intrinsics.Vector128 source, int* baseAddress, System.Runtime.Intrinsics.Vector128 index, System.Runtime.Intrinsics.Vector128 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 GatherMaskVector128(System.Runtime.Intrinsics.Vector128 source, int* baseAddress, System.Runtime.Intrinsics.Vector256 index, System.Runtime.Intrinsics.Vector128 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 GatherMaskVector128(System.Runtime.Intrinsics.Vector128 source, long* baseAddress, System.Runtime.Intrinsics.Vector128 index, System.Runtime.Intrinsics.Vector128 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 GatherMaskVector128(System.Runtime.Intrinsics.Vector128 source, long* baseAddress, System.Runtime.Intrinsics.Vector128 index, System.Runtime.Intrinsics.Vector128 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 GatherMaskVector128(System.Runtime.Intrinsics.Vector128 source, float* baseAddress, System.Runtime.Intrinsics.Vector128 index, System.Runtime.Intrinsics.Vector128 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 GatherMaskVector128(System.Runtime.Intrinsics.Vector128 source, float* baseAddress, System.Runtime.Intrinsics.Vector128 index, System.Runtime.Intrinsics.Vector128 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 GatherMaskVector128(System.Runtime.Intrinsics.Vector128 source, float* baseAddress, System.Runtime.Intrinsics.Vector256 index, System.Runtime.Intrinsics.Vector128 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 GatherMaskVector128(System.Runtime.Intrinsics.Vector128 source, uint* baseAddress, System.Runtime.Intrinsics.Vector128 index, System.Runtime.Intrinsics.Vector128 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 GatherMaskVector128(System.Runtime.Intrinsics.Vector128 source, uint* baseAddress, System.Runtime.Intrinsics.Vector128 index, System.Runtime.Intrinsics.Vector128 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 GatherMaskVector128(System.Runtime.Intrinsics.Vector128 source, uint* baseAddress, System.Runtime.Intrinsics.Vector256 index, System.Runtime.Intrinsics.Vector128 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 GatherMaskVector128(System.Runtime.Intrinsics.Vector128 source, ulong* baseAddress, System.Runtime.Intrinsics.Vector128 index, System.Runtime.Intrinsics.Vector128 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 GatherMaskVector128(System.Runtime.Intrinsics.Vector128 source, ulong* baseAddress, System.Runtime.Intrinsics.Vector128 index, System.Runtime.Intrinsics.Vector128 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 GatherMaskVector256(System.Runtime.Intrinsics.Vector256 source, double* baseAddress, System.Runtime.Intrinsics.Vector128 index, System.Runtime.Intrinsics.Vector256 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 GatherMaskVector256(System.Runtime.Intrinsics.Vector256 source, double* baseAddress, System.Runtime.Intrinsics.Vector256 index, System.Runtime.Intrinsics.Vector256 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 GatherMaskVector256(System.Runtime.Intrinsics.Vector256 source, int* baseAddress, System.Runtime.Intrinsics.Vector256 index, System.Runtime.Intrinsics.Vector256 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 GatherMaskVector256(System.Runtime.Intrinsics.Vector256 source, long* baseAddress, System.Runtime.Intrinsics.Vector128 index, System.Runtime.Intrinsics.Vector256 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 GatherMaskVector256(System.Runtime.Intrinsics.Vector256 source, long* baseAddress, System.Runtime.Intrinsics.Vector256 index, System.Runtime.Intrinsics.Vector256 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 GatherMaskVector256(System.Runtime.Intrinsics.Vector256 source, float* baseAddress, System.Runtime.Intrinsics.Vector256 index, System.Runtime.Intrinsics.Vector256 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 GatherMaskVector256(System.Runtime.Intrinsics.Vector256 source, uint* baseAddress, System.Runtime.Intrinsics.Vector256 index, System.Runtime.Intrinsics.Vector256 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 GatherMaskVector256(System.Runtime.Intrinsics.Vector256 source, ulong* baseAddress, System.Runtime.Intrinsics.Vector128 index, System.Runtime.Intrinsics.Vector256 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 GatherMaskVector256(System.Runtime.Intrinsics.Vector256 source, ulong* baseAddress, System.Runtime.Intrinsics.Vector256 index, System.Runtime.Intrinsics.Vector256 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 GatherVector128(double* baseAddress, System.Runtime.Intrinsics.Vector128 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 GatherVector128(double* baseAddress, System.Runtime.Intrinsics.Vector128 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 GatherVector128(int* baseAddress, System.Runtime.Intrinsics.Vector128 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 GatherVector128(int* baseAddress, System.Runtime.Intrinsics.Vector128 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 GatherVector128(int* baseAddress, System.Runtime.Intrinsics.Vector256 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 GatherVector128(long* baseAddress, System.Runtime.Intrinsics.Vector128 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 GatherVector128(long* baseAddress, System.Runtime.Intrinsics.Vector128 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 GatherVector128(float* baseAddress, System.Runtime.Intrinsics.Vector128 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 GatherVector128(float* baseAddress, System.Runtime.Intrinsics.Vector128 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 GatherVector128(float* baseAddress, System.Runtime.Intrinsics.Vector256 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 GatherVector128(uint* baseAddress, System.Runtime.Intrinsics.Vector128 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 GatherVector128(uint* baseAddress, System.Runtime.Intrinsics.Vector128 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 GatherVector128(uint* baseAddress, System.Runtime.Intrinsics.Vector256 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 GatherVector128(ulong* baseAddress, System.Runtime.Intrinsics.Vector128 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 GatherVector128(ulong* baseAddress, System.Runtime.Intrinsics.Vector128 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 GatherVector256(double* baseAddress, System.Runtime.Intrinsics.Vector128 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 GatherVector256(double* baseAddress, System.Runtime.Intrinsics.Vector256 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 GatherVector256(int* baseAddress, System.Runtime.Intrinsics.Vector256 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 GatherVector256(long* baseAddress, System.Runtime.Intrinsics.Vector128 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 GatherVector256(long* baseAddress, System.Runtime.Intrinsics.Vector256 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 GatherVector256(float* baseAddress, System.Runtime.Intrinsics.Vector256 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 GatherVector256(uint* baseAddress, System.Runtime.Intrinsics.Vector256 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 GatherVector256(ulong* baseAddress, System.Runtime.Intrinsics.Vector128 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 GatherVector256(ulong* baseAddress, System.Runtime.Intrinsics.Vector256 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 GatherMaskVector128(System.Runtime.Intrinsics.Vector128 source, double* baseAddress, System.Runtime.Intrinsics.Vector128 index, System.Runtime.Intrinsics.Vector128 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 GatherMaskVector128(System.Runtime.Intrinsics.Vector128 source, double* baseAddress, System.Runtime.Intrinsics.Vector128 index, System.Runtime.Intrinsics.Vector128 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 GatherMaskVector128(System.Runtime.Intrinsics.Vector128 source, int* baseAddress, System.Runtime.Intrinsics.Vector128 index, System.Runtime.Intrinsics.Vector128 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 GatherMaskVector128(System.Runtime.Intrinsics.Vector128 source, int* baseAddress, System.Runtime.Intrinsics.Vector128 index, System.Runtime.Intrinsics.Vector128 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 GatherMaskVector128(System.Runtime.Intrinsics.Vector128 source, int* baseAddress, System.Runtime.Intrinsics.Vector256 index, System.Runtime.Intrinsics.Vector128 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 GatherMaskVector128(System.Runtime.Intrinsics.Vector128 source, long* baseAddress, System.Runtime.Intrinsics.Vector128 index, System.Runtime.Intrinsics.Vector128 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 GatherMaskVector128(System.Runtime.Intrinsics.Vector128 source, long* baseAddress, System.Runtime.Intrinsics.Vector128 index, System.Runtime.Intrinsics.Vector128 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 GatherMaskVector128(System.Runtime.Intrinsics.Vector128 source, float* baseAddress, System.Runtime.Intrinsics.Vector128 index, System.Runtime.Intrinsics.Vector128 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 GatherMaskVector128(System.Runtime.Intrinsics.Vector128 source, float* baseAddress, System.Runtime.Intrinsics.Vector128 index, System.Runtime.Intrinsics.Vector128 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 GatherMaskVector128(System.Runtime.Intrinsics.Vector128 source, float* baseAddress, System.Runtime.Intrinsics.Vector256 index, System.Runtime.Intrinsics.Vector128 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 GatherMaskVector128(System.Runtime.Intrinsics.Vector128 source, uint* baseAddress, System.Runtime.Intrinsics.Vector128 index, System.Runtime.Intrinsics.Vector128 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 GatherMaskVector128(System.Runtime.Intrinsics.Vector128 source, uint* baseAddress, System.Runtime.Intrinsics.Vector128 index, System.Runtime.Intrinsics.Vector128 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 GatherMaskVector128(System.Runtime.Intrinsics.Vector128 source, uint* baseAddress, System.Runtime.Intrinsics.Vector256 index, System.Runtime.Intrinsics.Vector128 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 GatherMaskVector128(System.Runtime.Intrinsics.Vector128 source, ulong* baseAddress, System.Runtime.Intrinsics.Vector128 index, System.Runtime.Intrinsics.Vector128 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 GatherMaskVector128(System.Runtime.Intrinsics.Vector128 source, ulong* baseAddress, System.Runtime.Intrinsics.Vector128 index, System.Runtime.Intrinsics.Vector128 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 GatherMaskVector256(System.Runtime.Intrinsics.Vector256 source, double* baseAddress, System.Runtime.Intrinsics.Vector128 index, System.Runtime.Intrinsics.Vector256 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 GatherMaskVector256(System.Runtime.Intrinsics.Vector256 source, double* baseAddress, System.Runtime.Intrinsics.Vector256 index, System.Runtime.Intrinsics.Vector256 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 GatherMaskVector256(System.Runtime.Intrinsics.Vector256 source, int* baseAddress, System.Runtime.Intrinsics.Vector256 index, System.Runtime.Intrinsics.Vector256 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 GatherMaskVector256(System.Runtime.Intrinsics.Vector256 source, long* baseAddress, System.Runtime.Intrinsics.Vector128 index, System.Runtime.Intrinsics.Vector256 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 GatherMaskVector256(System.Runtime.Intrinsics.Vector256 source, long* baseAddress, System.Runtime.Intrinsics.Vector256 index, System.Runtime.Intrinsics.Vector256 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 GatherMaskVector256(System.Runtime.Intrinsics.Vector256 source, float* baseAddress, System.Runtime.Intrinsics.Vector256 index, System.Runtime.Intrinsics.Vector256 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 GatherMaskVector256(System.Runtime.Intrinsics.Vector256 source, uint* baseAddress, System.Runtime.Intrinsics.Vector256 index, System.Runtime.Intrinsics.Vector256 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 GatherMaskVector256(System.Runtime.Intrinsics.Vector256 source, ulong* baseAddress, System.Runtime.Intrinsics.Vector128 index, System.Runtime.Intrinsics.Vector256 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 GatherMaskVector256(System.Runtime.Intrinsics.Vector256 source, ulong* baseAddress, System.Runtime.Intrinsics.Vector256 index, System.Runtime.Intrinsics.Vector256 mask, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 GatherVector128(double* baseAddress, System.Runtime.Intrinsics.Vector128 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 GatherVector128(double* baseAddress, System.Runtime.Intrinsics.Vector128 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 GatherVector128(int* baseAddress, System.Runtime.Intrinsics.Vector128 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 GatherVector128(int* baseAddress, System.Runtime.Intrinsics.Vector128 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 GatherVector128(int* baseAddress, System.Runtime.Intrinsics.Vector256 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 GatherVector128(long* baseAddress, System.Runtime.Intrinsics.Vector128 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 GatherVector128(long* baseAddress, System.Runtime.Intrinsics.Vector128 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 GatherVector128(float* baseAddress, System.Runtime.Intrinsics.Vector128 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 GatherVector128(float* baseAddress, System.Runtime.Intrinsics.Vector128 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 GatherVector128(float* baseAddress, System.Runtime.Intrinsics.Vector256 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 GatherVector128(uint* baseAddress, System.Runtime.Intrinsics.Vector128 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 GatherVector128(uint* baseAddress, System.Runtime.Intrinsics.Vector128 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 GatherVector128(uint* baseAddress, System.Runtime.Intrinsics.Vector256 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 GatherVector128(ulong* baseAddress, System.Runtime.Intrinsics.Vector128 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 GatherVector128(ulong* baseAddress, System.Runtime.Intrinsics.Vector128 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 GatherVector256(double* baseAddress, System.Runtime.Intrinsics.Vector128 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 GatherVector256(double* baseAddress, System.Runtime.Intrinsics.Vector256 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 GatherVector256(int* baseAddress, System.Runtime.Intrinsics.Vector256 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 GatherVector256(long* baseAddress, System.Runtime.Intrinsics.Vector128 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 GatherVector256(long* baseAddress, System.Runtime.Intrinsics.Vector256 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 GatherVector256(float* baseAddress, System.Runtime.Intrinsics.Vector256 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 GatherVector256(uint* baseAddress, System.Runtime.Intrinsics.Vector256 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 GatherVector256(ulong* baseAddress, System.Runtime.Intrinsics.Vector128 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 GatherVector256(ulong* baseAddress, System.Runtime.Intrinsics.Vector256 index, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Min = (byte)(1), Max = (byte)(8))] byte scale) { throw null; } public static System.Runtime.Intrinsics.Vector256 HorizontalAdd(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) { throw null; } public static System.Runtime.Intrinsics.Vector256 HorizontalAdd(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) { throw null; } public static System.Runtime.Intrinsics.Vector256 HorizontalAddSaturate(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) { throw null; } @@ -4240,30 +4291,30 @@ internal Avx2() { } public static new System.Runtime.Intrinsics.Vector256 InsertVector128(System.Runtime.Intrinsics.Vector256 value, System.Runtime.Intrinsics.Vector128 data, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute] byte index) { throw null; } public static new System.Runtime.Intrinsics.Vector256 InsertVector128(System.Runtime.Intrinsics.Vector256 value, System.Runtime.Intrinsics.Vector128 data, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute] byte index) { throw null; } public static new System.Runtime.Intrinsics.Vector256 InsertVector128(System.Runtime.Intrinsics.Vector256 value, System.Runtime.Intrinsics.Vector128 data, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute] byte index) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 LoadAlignedVector256NonTemporal(byte* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 LoadAlignedVector256NonTemporal(short* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 LoadAlignedVector256NonTemporal(int* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 LoadAlignedVector256NonTemporal(long* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 LoadAlignedVector256NonTemporal(sbyte* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 LoadAlignedVector256NonTemporal(ushort* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 LoadAlignedVector256NonTemporal(uint* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 LoadAlignedVector256NonTemporal(ulong* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 MaskLoad(int* address, System.Runtime.Intrinsics.Vector128 mask) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 MaskLoad(int* address, System.Runtime.Intrinsics.Vector256 mask) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 MaskLoad(long* address, System.Runtime.Intrinsics.Vector128 mask) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 MaskLoad(long* address, System.Runtime.Intrinsics.Vector256 mask) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 MaskLoad(uint* address, System.Runtime.Intrinsics.Vector128 mask) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 MaskLoad(uint* address, System.Runtime.Intrinsics.Vector256 mask) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 MaskLoad(ulong* address, System.Runtime.Intrinsics.Vector128 mask) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector256 MaskLoad(ulong* address, System.Runtime.Intrinsics.Vector256 mask) { throw null; } - public unsafe static void MaskStore(int* address, System.Runtime.Intrinsics.Vector128 mask, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void MaskStore(int* address, System.Runtime.Intrinsics.Vector256 mask, System.Runtime.Intrinsics.Vector256 source) { } - public unsafe static void MaskStore(long* address, System.Runtime.Intrinsics.Vector128 mask, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void MaskStore(long* address, System.Runtime.Intrinsics.Vector256 mask, System.Runtime.Intrinsics.Vector256 source) { } - public unsafe static void MaskStore(uint* address, System.Runtime.Intrinsics.Vector128 mask, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void MaskStore(uint* address, System.Runtime.Intrinsics.Vector256 mask, System.Runtime.Intrinsics.Vector256 source) { } - public unsafe static void MaskStore(ulong* address, System.Runtime.Intrinsics.Vector128 mask, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void MaskStore(ulong* address, System.Runtime.Intrinsics.Vector256 mask, System.Runtime.Intrinsics.Vector256 source) { } + public static unsafe System.Runtime.Intrinsics.Vector256 LoadAlignedVector256NonTemporal(byte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 LoadAlignedVector256NonTemporal(short* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 LoadAlignedVector256NonTemporal(int* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 LoadAlignedVector256NonTemporal(long* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 LoadAlignedVector256NonTemporal(sbyte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 LoadAlignedVector256NonTemporal(ushort* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 LoadAlignedVector256NonTemporal(uint* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 LoadAlignedVector256NonTemporal(ulong* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 MaskLoad(int* address, System.Runtime.Intrinsics.Vector128 mask) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 MaskLoad(int* address, System.Runtime.Intrinsics.Vector256 mask) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 MaskLoad(long* address, System.Runtime.Intrinsics.Vector128 mask) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 MaskLoad(long* address, System.Runtime.Intrinsics.Vector256 mask) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 MaskLoad(uint* address, System.Runtime.Intrinsics.Vector128 mask) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 MaskLoad(uint* address, System.Runtime.Intrinsics.Vector256 mask) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 MaskLoad(ulong* address, System.Runtime.Intrinsics.Vector128 mask) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector256 MaskLoad(ulong* address, System.Runtime.Intrinsics.Vector256 mask) { throw null; } + public static unsafe void MaskStore(int* address, System.Runtime.Intrinsics.Vector128 mask, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void MaskStore(int* address, System.Runtime.Intrinsics.Vector256 mask, System.Runtime.Intrinsics.Vector256 source) { } + public static unsafe void MaskStore(long* address, System.Runtime.Intrinsics.Vector128 mask, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void MaskStore(long* address, System.Runtime.Intrinsics.Vector256 mask, System.Runtime.Intrinsics.Vector256 source) { } + public static unsafe void MaskStore(uint* address, System.Runtime.Intrinsics.Vector128 mask, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void MaskStore(uint* address, System.Runtime.Intrinsics.Vector256 mask, System.Runtime.Intrinsics.Vector256 source) { } + public static unsafe void MaskStore(ulong* address, System.Runtime.Intrinsics.Vector128 mask, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void MaskStore(ulong* address, System.Runtime.Intrinsics.Vector256 mask, System.Runtime.Intrinsics.Vector256 source) { } public static System.Runtime.Intrinsics.Vector256 Max(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) { throw null; } public static System.Runtime.Intrinsics.Vector256 Max(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) { throw null; } public static System.Runtime.Intrinsics.Vector256 Max(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) { throw null; } @@ -5040,16 +5091,16 @@ internal Avx512F() { } public static System.Runtime.Intrinsics.Vector512 InsertVector256(System.Runtime.Intrinsics.Vector512 value, System.Runtime.Intrinsics.Vector256 data, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute] byte index) { throw null; } public static System.Runtime.Intrinsics.Vector512 InsertVector256(System.Runtime.Intrinsics.Vector512 value, System.Runtime.Intrinsics.Vector256 data, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute] byte index) { throw null; } public static System.Runtime.Intrinsics.Vector512 InsertVector256(System.Runtime.Intrinsics.Vector512 value, System.Runtime.Intrinsics.Vector256 data, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute] byte index) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector512 LoadAlignedVector512(byte* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector512 LoadAlignedVector512(double* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector512 LoadAlignedVector512(short* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector512 LoadAlignedVector512(int* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector512 LoadAlignedVector512(long* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector512 LoadAlignedVector512(sbyte* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector512 LoadAlignedVector512(float* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector512 LoadAlignedVector512(ushort* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector512 LoadAlignedVector512(uint* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector512 LoadAlignedVector512(ulong* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector512 LoadAlignedVector512(byte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector512 LoadAlignedVector512(double* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector512 LoadAlignedVector512(short* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector512 LoadAlignedVector512(int* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector512 LoadAlignedVector512(long* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector512 LoadAlignedVector512(sbyte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector512 LoadAlignedVector512(float* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector512 LoadAlignedVector512(ushort* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector512 LoadAlignedVector512(uint* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector512 LoadAlignedVector512(ulong* address) { throw null; } public static unsafe System.Runtime.Intrinsics.Vector512 LoadAlignedVector512NonTemporal(byte* address) { throw null; } public static unsafe System.Runtime.Intrinsics.Vector512 LoadAlignedVector512NonTemporal(short* address) { throw null; } public static unsafe System.Runtime.Intrinsics.Vector512 LoadAlignedVector512NonTemporal(int* address) { throw null; } @@ -5058,16 +5109,16 @@ internal Avx512F() { } public static unsafe System.Runtime.Intrinsics.Vector512 LoadAlignedVector512NonTemporal(ushort* address) { throw null; } public static unsafe System.Runtime.Intrinsics.Vector512 LoadAlignedVector512NonTemporal(uint* address) { throw null; } public static unsafe System.Runtime.Intrinsics.Vector512 LoadAlignedVector512NonTemporal(ulong* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector512 LoadVector512(byte* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector512 LoadVector512(double* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector512 LoadVector512(short* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector512 LoadVector512(int* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector512 LoadVector512(long* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector512 LoadVector512(sbyte* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector512 LoadVector512(float* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector512 LoadVector512(ushort* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector512 LoadVector512(uint* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector512 LoadVector512(ulong* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector512 LoadVector512(byte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector512 LoadVector512(double* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector512 LoadVector512(short* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector512 LoadVector512(int* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector512 LoadVector512(long* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector512 LoadVector512(sbyte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector512 LoadVector512(float* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector512 LoadVector512(ushort* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector512 LoadVector512(uint* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector512 LoadVector512(ulong* address) { throw null; } public static System.Runtime.Intrinsics.Vector512 Max(System.Runtime.Intrinsics.Vector512 left, System.Runtime.Intrinsics.Vector512 right) { throw null; } public static System.Runtime.Intrinsics.Vector512 Max(System.Runtime.Intrinsics.Vector512 left, System.Runtime.Intrinsics.Vector512 right) { throw null; } public static System.Runtime.Intrinsics.Vector512 Max(System.Runtime.Intrinsics.Vector512 left, System.Runtime.Intrinsics.Vector512 right) { throw null; } @@ -5193,36 +5244,36 @@ internal Avx512F() { } public static System.Runtime.Intrinsics.Vector512 Shuffle4x128(System.Runtime.Intrinsics.Vector512 left, System.Runtime.Intrinsics.Vector512 right, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute] byte control) { throw null; } public static System.Runtime.Intrinsics.Vector512 Sqrt(System.Runtime.Intrinsics.Vector512 value) { throw null; } public static System.Runtime.Intrinsics.Vector512 Sqrt(System.Runtime.Intrinsics.Vector512 value) { throw null; } - public unsafe static void Store(byte* address, System.Runtime.Intrinsics.Vector512 source) { } - public unsafe static void Store(double* address, System.Runtime.Intrinsics.Vector512 source) { } - public unsafe static void Store(short* address, System.Runtime.Intrinsics.Vector512 source) { } - public unsafe static void Store(int* address, System.Runtime.Intrinsics.Vector512 source) { } - public unsafe static void Store(long* address, System.Runtime.Intrinsics.Vector512 source) { } - public unsafe static void Store(sbyte* address, System.Runtime.Intrinsics.Vector512 source) { } - public unsafe static void Store(float* address, System.Runtime.Intrinsics.Vector512 source) { } - public unsafe static void Store(ushort* address, System.Runtime.Intrinsics.Vector512 source) { } - public unsafe static void Store(uint* address, System.Runtime.Intrinsics.Vector512 source) { } - public unsafe static void Store(ulong* address, System.Runtime.Intrinsics.Vector512 source) { } - public unsafe static void StoreAligned(byte* address, System.Runtime.Intrinsics.Vector512 source) { } - public unsafe static void StoreAligned(double* address, System.Runtime.Intrinsics.Vector512 source) { } - public unsafe static void StoreAligned(short* address, System.Runtime.Intrinsics.Vector512 source) { } - public unsafe static void StoreAligned(int* address, System.Runtime.Intrinsics.Vector512 source) { } - public unsafe static void StoreAligned(long* address, System.Runtime.Intrinsics.Vector512 source) { } - public unsafe static void StoreAligned(sbyte* address, System.Runtime.Intrinsics.Vector512 source) { } - public unsafe static void StoreAligned(float* address, System.Runtime.Intrinsics.Vector512 source) { } - public unsafe static void StoreAligned(ushort* address, System.Runtime.Intrinsics.Vector512 source) { } - public unsafe static void StoreAligned(uint* address, System.Runtime.Intrinsics.Vector512 source) { } - public unsafe static void StoreAligned(ulong* address, System.Runtime.Intrinsics.Vector512 source) { } - public unsafe static void StoreAlignedNonTemporal(byte* address, System.Runtime.Intrinsics.Vector512 source) { } - public unsafe static void StoreAlignedNonTemporal(double* address, System.Runtime.Intrinsics.Vector512 source) { } - public unsafe static void StoreAlignedNonTemporal(short* address, System.Runtime.Intrinsics.Vector512 source) { } - public unsafe static void StoreAlignedNonTemporal(int* address, System.Runtime.Intrinsics.Vector512 source) { } - public unsafe static void StoreAlignedNonTemporal(long* address, System.Runtime.Intrinsics.Vector512 source) { } - public unsafe static void StoreAlignedNonTemporal(sbyte* address, System.Runtime.Intrinsics.Vector512 source) { } - public unsafe static void StoreAlignedNonTemporal(float* address, System.Runtime.Intrinsics.Vector512 source) { } - public unsafe static void StoreAlignedNonTemporal(ushort* address, System.Runtime.Intrinsics.Vector512 source) { } - public unsafe static void StoreAlignedNonTemporal(uint* address, System.Runtime.Intrinsics.Vector512 source) { } - public unsafe static void StoreAlignedNonTemporal(ulong* address, System.Runtime.Intrinsics.Vector512 source) { } + public static unsafe void Store(byte* address, System.Runtime.Intrinsics.Vector512 source) { } + public static unsafe void Store(double* address, System.Runtime.Intrinsics.Vector512 source) { } + public static unsafe void Store(short* address, System.Runtime.Intrinsics.Vector512 source) { } + public static unsafe void Store(int* address, System.Runtime.Intrinsics.Vector512 source) { } + public static unsafe void Store(long* address, System.Runtime.Intrinsics.Vector512 source) { } + public static unsafe void Store(sbyte* address, System.Runtime.Intrinsics.Vector512 source) { } + public static unsafe void Store(float* address, System.Runtime.Intrinsics.Vector512 source) { } + public static unsafe void Store(ushort* address, System.Runtime.Intrinsics.Vector512 source) { } + public static unsafe void Store(uint* address, System.Runtime.Intrinsics.Vector512 source) { } + public static unsafe void Store(ulong* address, System.Runtime.Intrinsics.Vector512 source) { } + public static unsafe void StoreAligned(byte* address, System.Runtime.Intrinsics.Vector512 source) { } + public static unsafe void StoreAligned(double* address, System.Runtime.Intrinsics.Vector512 source) { } + public static unsafe void StoreAligned(short* address, System.Runtime.Intrinsics.Vector512 source) { } + public static unsafe void StoreAligned(int* address, System.Runtime.Intrinsics.Vector512 source) { } + public static unsafe void StoreAligned(long* address, System.Runtime.Intrinsics.Vector512 source) { } + public static unsafe void StoreAligned(sbyte* address, System.Runtime.Intrinsics.Vector512 source) { } + public static unsafe void StoreAligned(float* address, System.Runtime.Intrinsics.Vector512 source) { } + public static unsafe void StoreAligned(ushort* address, System.Runtime.Intrinsics.Vector512 source) { } + public static unsafe void StoreAligned(uint* address, System.Runtime.Intrinsics.Vector512 source) { } + public static unsafe void StoreAligned(ulong* address, System.Runtime.Intrinsics.Vector512 source) { } + public static unsafe void StoreAlignedNonTemporal(byte* address, System.Runtime.Intrinsics.Vector512 source) { } + public static unsafe void StoreAlignedNonTemporal(double* address, System.Runtime.Intrinsics.Vector512 source) { } + public static unsafe void StoreAlignedNonTemporal(short* address, System.Runtime.Intrinsics.Vector512 source) { } + public static unsafe void StoreAlignedNonTemporal(int* address, System.Runtime.Intrinsics.Vector512 source) { } + public static unsafe void StoreAlignedNonTemporal(long* address, System.Runtime.Intrinsics.Vector512 source) { } + public static unsafe void StoreAlignedNonTemporal(sbyte* address, System.Runtime.Intrinsics.Vector512 source) { } + public static unsafe void StoreAlignedNonTemporal(float* address, System.Runtime.Intrinsics.Vector512 source) { } + public static unsafe void StoreAlignedNonTemporal(ushort* address, System.Runtime.Intrinsics.Vector512 source) { } + public static unsafe void StoreAlignedNonTemporal(uint* address, System.Runtime.Intrinsics.Vector512 source) { } + public static unsafe void StoreAlignedNonTemporal(ulong* address, System.Runtime.Intrinsics.Vector512 source) { } public static System.Runtime.Intrinsics.Vector512 Subtract(System.Runtime.Intrinsics.Vector512 left, System.Runtime.Intrinsics.Vector512 right) { throw null; } public static System.Runtime.Intrinsics.Vector512 Subtract(System.Runtime.Intrinsics.Vector512 left, System.Runtime.Intrinsics.Vector512 right) { throw null; } public static System.Runtime.Intrinsics.Vector512 Subtract(System.Runtime.Intrinsics.Vector512 left, System.Runtime.Intrinsics.Vector512 right) { throw null; } @@ -5588,7 +5639,7 @@ public abstract partial class Bmi2 : System.Runtime.Intrinsics.X86.X86Base internal Bmi2() { } public static new bool IsSupported { get { throw null; } } public static uint MultiplyNoFlags(uint left, uint right) { throw null; } - public unsafe static uint MultiplyNoFlags(uint left, uint right, uint* low) { throw null; } + public static unsafe uint MultiplyNoFlags(uint left, uint right, uint* low) { throw null; } public static uint ParallelBitDeposit(uint value, uint mask) { throw null; } public static uint ParallelBitExtract(uint value, uint mask) { throw null; } public static uint ZeroHighBits(uint value, uint index) { throw null; } @@ -5597,7 +5648,7 @@ internal Bmi2() { } internal X64() { } public static new bool IsSupported { get { throw null; } } public static ulong MultiplyNoFlags(ulong left, ulong right) { throw null; } - public unsafe static ulong MultiplyNoFlags(ulong left, ulong right, ulong* low) { throw null; } + public static unsafe ulong MultiplyNoFlags(ulong left, ulong right, ulong* low) { throw null; } public static ulong ParallelBitDeposit(ulong value, ulong mask) { throw null; } public static ulong ParallelBitExtract(ulong value, ulong mask) { throw null; } public static ulong ZeroHighBits(ulong value, ulong index) { throw null; } @@ -5770,11 +5821,11 @@ internal Sse() { } public static int ConvertToInt32WithTruncation(System.Runtime.Intrinsics.Vector128 value) { throw null; } public static System.Runtime.Intrinsics.Vector128 Divide(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } public static System.Runtime.Intrinsics.Vector128 DivideScalar(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadAlignedVector128(float* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadHigh(System.Runtime.Intrinsics.Vector128 lower, float* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadLow(System.Runtime.Intrinsics.Vector128 upper, float* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadScalarVector128(float* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadVector128(float* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadAlignedVector128(float* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadHigh(System.Runtime.Intrinsics.Vector128 lower, float* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadLow(System.Runtime.Intrinsics.Vector128 upper, float* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadScalarVector128(float* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadVector128(float* address) { throw null; } public static System.Runtime.Intrinsics.Vector128 Max(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } public static System.Runtime.Intrinsics.Vector128 MaxScalar(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } public static System.Runtime.Intrinsics.Vector128 Min(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } @@ -5786,10 +5837,10 @@ internal Sse() { } public static System.Runtime.Intrinsics.Vector128 Multiply(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } public static System.Runtime.Intrinsics.Vector128 MultiplyScalar(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } public static System.Runtime.Intrinsics.Vector128 Or(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } - public unsafe static void Prefetch0(void* address) { } - public unsafe static void Prefetch1(void* address) { } - public unsafe static void Prefetch2(void* address) { } - public unsafe static void PrefetchNonTemporal(void* address) { } + public static unsafe void Prefetch0(void* address) { } + public static unsafe void Prefetch1(void* address) { } + public static unsafe void Prefetch2(void* address) { } + public static unsafe void PrefetchNonTemporal(void* address) { } public static System.Runtime.Intrinsics.Vector128 Reciprocal(System.Runtime.Intrinsics.Vector128 value) { throw null; } public static System.Runtime.Intrinsics.Vector128 ReciprocalScalar(System.Runtime.Intrinsics.Vector128 value) { throw null; } public static System.Runtime.Intrinsics.Vector128 ReciprocalScalar(System.Runtime.Intrinsics.Vector128 upper, System.Runtime.Intrinsics.Vector128 value) { throw null; } @@ -5800,13 +5851,13 @@ public unsafe static void PrefetchNonTemporal(void* address) { } public static System.Runtime.Intrinsics.Vector128 Sqrt(System.Runtime.Intrinsics.Vector128 value) { throw null; } public static System.Runtime.Intrinsics.Vector128 SqrtScalar(System.Runtime.Intrinsics.Vector128 value) { throw null; } public static System.Runtime.Intrinsics.Vector128 SqrtScalar(System.Runtime.Intrinsics.Vector128 upper, System.Runtime.Intrinsics.Vector128 value) { throw null; } - public unsafe static void Store(float* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void StoreAligned(float* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void StoreAlignedNonTemporal(float* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void Store(float* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void StoreAligned(float* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void StoreAlignedNonTemporal(float* address, System.Runtime.Intrinsics.Vector128 source) { } public static void StoreFence() { } - public unsafe static void StoreHigh(float* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void StoreLow(float* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void StoreScalar(float* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void StoreHigh(float* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void StoreLow(float* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void StoreScalar(float* address, System.Runtime.Intrinsics.Vector128 source) { } public static System.Runtime.Intrinsics.Vector128 Subtract(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } public static System.Runtime.Intrinsics.Vector128 SubtractScalar(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } public static System.Runtime.Intrinsics.Vector128 UnpackHigh(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } @@ -5930,34 +5981,34 @@ internal Sse2() { } public static ushort Extract(System.Runtime.Intrinsics.Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute] byte index) { throw null; } public static System.Runtime.Intrinsics.Vector128 Insert(System.Runtime.Intrinsics.Vector128 value, short data, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute] byte index) { throw null; } public static System.Runtime.Intrinsics.Vector128 Insert(System.Runtime.Intrinsics.Vector128 value, ushort data, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute] byte index) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadAlignedVector128(byte* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadAlignedVector128(double* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadAlignedVector128(short* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadAlignedVector128(int* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadAlignedVector128(long* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadAlignedVector128(sbyte* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadAlignedVector128(ushort* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadAlignedVector128(uint* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadAlignedVector128(ulong* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadAlignedVector128(byte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadAlignedVector128(double* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadAlignedVector128(short* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadAlignedVector128(int* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadAlignedVector128(long* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadAlignedVector128(sbyte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadAlignedVector128(ushort* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadAlignedVector128(uint* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadAlignedVector128(ulong* address) { throw null; } public static void LoadFence() { } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadHigh(System.Runtime.Intrinsics.Vector128 lower, double* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadLow(System.Runtime.Intrinsics.Vector128 upper, double* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadScalarVector128(double* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadScalarVector128(int* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadScalarVector128(long* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadScalarVector128(uint* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadScalarVector128(ulong* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadVector128(byte* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadVector128(double* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadVector128(short* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadVector128(int* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadVector128(long* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadVector128(sbyte* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadVector128(ushort* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadVector128(uint* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadVector128(ulong* address) { throw null; } - public unsafe static void MaskMove(System.Runtime.Intrinsics.Vector128 source, System.Runtime.Intrinsics.Vector128 mask, byte* address) { } - public unsafe static void MaskMove(System.Runtime.Intrinsics.Vector128 source, System.Runtime.Intrinsics.Vector128 mask, sbyte* address) { } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadHigh(System.Runtime.Intrinsics.Vector128 lower, double* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadLow(System.Runtime.Intrinsics.Vector128 upper, double* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadScalarVector128(double* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadScalarVector128(int* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadScalarVector128(long* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadScalarVector128(uint* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadScalarVector128(ulong* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadVector128(byte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadVector128(double* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadVector128(short* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadVector128(int* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadVector128(long* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadVector128(sbyte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadVector128(ushort* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadVector128(uint* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadVector128(ulong* address) { throw null; } + public static unsafe void MaskMove(System.Runtime.Intrinsics.Vector128 source, System.Runtime.Intrinsics.Vector128 mask, byte* address) { } + public static unsafe void MaskMove(System.Runtime.Intrinsics.Vector128 source, System.Runtime.Intrinsics.Vector128 mask, sbyte* address) { } public static System.Runtime.Intrinsics.Vector128 Max(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } public static System.Runtime.Intrinsics.Vector128 Max(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } public static System.Runtime.Intrinsics.Vector128 Max(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } @@ -6047,42 +6098,42 @@ public static void MemoryFence() { } public static System.Runtime.Intrinsics.Vector128 Sqrt(System.Runtime.Intrinsics.Vector128 value) { throw null; } public static System.Runtime.Intrinsics.Vector128 SqrtScalar(System.Runtime.Intrinsics.Vector128 value) { throw null; } public static System.Runtime.Intrinsics.Vector128 SqrtScalar(System.Runtime.Intrinsics.Vector128 upper, System.Runtime.Intrinsics.Vector128 value) { throw null; } - public unsafe static void Store(byte* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void Store(double* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void Store(short* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void Store(int* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void Store(long* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void Store(sbyte* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void Store(ushort* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void Store(uint* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void Store(ulong* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void StoreAligned(byte* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void StoreAligned(double* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void StoreAligned(short* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void StoreAligned(int* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void StoreAligned(long* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void StoreAligned(sbyte* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void StoreAligned(ushort* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void StoreAligned(uint* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void StoreAligned(ulong* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void StoreAlignedNonTemporal(byte* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void StoreAlignedNonTemporal(double* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void StoreAlignedNonTemporal(short* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void StoreAlignedNonTemporal(int* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void StoreAlignedNonTemporal(long* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void StoreAlignedNonTemporal(sbyte* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void StoreAlignedNonTemporal(ushort* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void StoreAlignedNonTemporal(uint* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void StoreAlignedNonTemporal(ulong* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void StoreHigh(double* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void StoreLow(double* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void StoreNonTemporal(int* address, int value) { } - public unsafe static void StoreNonTemporal(uint* address, uint value) { } - public unsafe static void StoreScalar(double* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void StoreScalar(int* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void StoreScalar(long* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void StoreScalar(uint* address, System.Runtime.Intrinsics.Vector128 source) { } - public unsafe static void StoreScalar(ulong* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void Store(byte* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void Store(double* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void Store(short* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void Store(int* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void Store(long* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void Store(sbyte* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void Store(ushort* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void Store(uint* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void Store(ulong* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void StoreAligned(byte* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void StoreAligned(double* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void StoreAligned(short* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void StoreAligned(int* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void StoreAligned(long* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void StoreAligned(sbyte* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void StoreAligned(ushort* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void StoreAligned(uint* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void StoreAligned(ulong* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void StoreAlignedNonTemporal(byte* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void StoreAlignedNonTemporal(double* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void StoreAlignedNonTemporal(short* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void StoreAlignedNonTemporal(int* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void StoreAlignedNonTemporal(long* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void StoreAlignedNonTemporal(sbyte* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void StoreAlignedNonTemporal(ushort* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void StoreAlignedNonTemporal(uint* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void StoreAlignedNonTemporal(ulong* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void StoreHigh(double* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void StoreLow(double* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void StoreNonTemporal(int* address, int value) { } + public static unsafe void StoreNonTemporal(uint* address, uint value) { } + public static unsafe void StoreScalar(double* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void StoreScalar(int* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void StoreScalar(long* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void StoreScalar(uint* address, System.Runtime.Intrinsics.Vector128 source) { } + public static unsafe void StoreScalar(ulong* address, System.Runtime.Intrinsics.Vector128 source) { } public static System.Runtime.Intrinsics.Vector128 Subtract(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } public static System.Runtime.Intrinsics.Vector128 Subtract(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } public static System.Runtime.Intrinsics.Vector128 Subtract(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } @@ -6136,8 +6187,8 @@ internal X64() { } public static long ConvertToInt64(System.Runtime.Intrinsics.Vector128 value) { throw null; } public static long ConvertToInt64WithTruncation(System.Runtime.Intrinsics.Vector128 value) { throw null; } public static ulong ConvertToUInt64(System.Runtime.Intrinsics.Vector128 value) { throw null; } - public unsafe static void StoreNonTemporal(long* address, long value) { } - public unsafe static void StoreNonTemporal(ulong* address, ulong value) { } + public static unsafe void StoreNonTemporal(long* address, long value) { } + public static unsafe void StoreNonTemporal(ulong* address, ulong value) { } } } [System.CLSCompliantAttribute(false)] @@ -6151,15 +6202,15 @@ internal Sse3() { } public static System.Runtime.Intrinsics.Vector128 HorizontalAdd(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } public static System.Runtime.Intrinsics.Vector128 HorizontalSubtract(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } public static System.Runtime.Intrinsics.Vector128 HorizontalSubtract(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadAndDuplicateToVector128(double* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadDquVector128(byte* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadDquVector128(short* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadDquVector128(int* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadDquVector128(long* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadDquVector128(sbyte* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadDquVector128(ushort* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadDquVector128(uint* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadDquVector128(ulong* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadAndDuplicateToVector128(double* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadDquVector128(byte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadDquVector128(short* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadDquVector128(int* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadDquVector128(long* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadDquVector128(sbyte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadDquVector128(ushort* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadDquVector128(uint* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadDquVector128(ulong* address) { throw null; } public static System.Runtime.Intrinsics.Vector128 MoveAndDuplicate(System.Runtime.Intrinsics.Vector128 source) { throw null; } public static System.Runtime.Intrinsics.Vector128 MoveHighAndDuplicate(System.Runtime.Intrinsics.Vector128 source) { throw null; } public static System.Runtime.Intrinsics.Vector128 MoveLowAndDuplicate(System.Runtime.Intrinsics.Vector128 source) { throw null; } @@ -6196,30 +6247,30 @@ internal Sse41() { } public static System.Runtime.Intrinsics.Vector128 CeilingScalar(System.Runtime.Intrinsics.Vector128 upper, System.Runtime.Intrinsics.Vector128 value) { throw null; } public static System.Runtime.Intrinsics.Vector128 CompareEqual(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } public static System.Runtime.Intrinsics.Vector128 CompareEqual(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 ConvertToVector128Int16(byte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 ConvertToVector128Int16(byte* address) { throw null; } public static System.Runtime.Intrinsics.Vector128 ConvertToVector128Int16(System.Runtime.Intrinsics.Vector128 value) { throw null; } public static System.Runtime.Intrinsics.Vector128 ConvertToVector128Int16(System.Runtime.Intrinsics.Vector128 value) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 ConvertToVector128Int16(sbyte* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 ConvertToVector128Int32(byte* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 ConvertToVector128Int32(short* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 ConvertToVector128Int16(sbyte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 ConvertToVector128Int32(byte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 ConvertToVector128Int32(short* address) { throw null; } public static System.Runtime.Intrinsics.Vector128 ConvertToVector128Int32(System.Runtime.Intrinsics.Vector128 value) { throw null; } public static System.Runtime.Intrinsics.Vector128 ConvertToVector128Int32(System.Runtime.Intrinsics.Vector128 value) { throw null; } public static System.Runtime.Intrinsics.Vector128 ConvertToVector128Int32(System.Runtime.Intrinsics.Vector128 value) { throw null; } public static System.Runtime.Intrinsics.Vector128 ConvertToVector128Int32(System.Runtime.Intrinsics.Vector128 value) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 ConvertToVector128Int32(sbyte* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 ConvertToVector128Int32(ushort* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 ConvertToVector128Int64(byte* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 ConvertToVector128Int64(short* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 ConvertToVector128Int64(int* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 ConvertToVector128Int32(sbyte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 ConvertToVector128Int32(ushort* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 ConvertToVector128Int64(byte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 ConvertToVector128Int64(short* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 ConvertToVector128Int64(int* address) { throw null; } public static System.Runtime.Intrinsics.Vector128 ConvertToVector128Int64(System.Runtime.Intrinsics.Vector128 value) { throw null; } public static System.Runtime.Intrinsics.Vector128 ConvertToVector128Int64(System.Runtime.Intrinsics.Vector128 value) { throw null; } public static System.Runtime.Intrinsics.Vector128 ConvertToVector128Int64(System.Runtime.Intrinsics.Vector128 value) { throw null; } public static System.Runtime.Intrinsics.Vector128 ConvertToVector128Int64(System.Runtime.Intrinsics.Vector128 value) { throw null; } public static System.Runtime.Intrinsics.Vector128 ConvertToVector128Int64(System.Runtime.Intrinsics.Vector128 value) { throw null; } public static System.Runtime.Intrinsics.Vector128 ConvertToVector128Int64(System.Runtime.Intrinsics.Vector128 value) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 ConvertToVector128Int64(sbyte* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 ConvertToVector128Int64(ushort* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 ConvertToVector128Int64(uint* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 ConvertToVector128Int64(sbyte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 ConvertToVector128Int64(ushort* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 ConvertToVector128Int64(uint* address) { throw null; } public static System.Runtime.Intrinsics.Vector128 DotProduct(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute] byte control) { throw null; } public static System.Runtime.Intrinsics.Vector128 DotProduct(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute] byte control) { throw null; } public static byte Extract(System.Runtime.Intrinsics.Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute] byte index) { throw null; } @@ -6237,14 +6288,14 @@ internal Sse41() { } public static System.Runtime.Intrinsics.Vector128 Insert(System.Runtime.Intrinsics.Vector128 value, sbyte data, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute] byte index) { throw null; } public static System.Runtime.Intrinsics.Vector128 Insert(System.Runtime.Intrinsics.Vector128 value, System.Runtime.Intrinsics.Vector128 data, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute] byte index) { throw null; } public static System.Runtime.Intrinsics.Vector128 Insert(System.Runtime.Intrinsics.Vector128 value, uint data, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute] byte index) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadAlignedVector128NonTemporal(byte* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadAlignedVector128NonTemporal(short* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadAlignedVector128NonTemporal(int* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadAlignedVector128NonTemporal(long* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadAlignedVector128NonTemporal(sbyte* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadAlignedVector128NonTemporal(ushort* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadAlignedVector128NonTemporal(uint* address) { throw null; } - public unsafe static System.Runtime.Intrinsics.Vector128 LoadAlignedVector128NonTemporal(ulong* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadAlignedVector128NonTemporal(byte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadAlignedVector128NonTemporal(short* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadAlignedVector128NonTemporal(int* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadAlignedVector128NonTemporal(long* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadAlignedVector128NonTemporal(sbyte* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadAlignedVector128NonTemporal(ushort* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadAlignedVector128NonTemporal(uint* address) { throw null; } + public static unsafe System.Runtime.Intrinsics.Vector128 LoadAlignedVector128NonTemporal(ulong* address) { throw null; } public static System.Runtime.Intrinsics.Vector128 Max(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } public static System.Runtime.Intrinsics.Vector128 Max(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } public static System.Runtime.Intrinsics.Vector128 Max(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } @@ -6433,16 +6484,16 @@ public abstract partial class PackedSimd public static Vector128 Splat(double value) { throw null; } public static Vector128 Splat(nint value) { throw null; } public static Vector128 Splat(nuint value) { throw null; } - public static int ExtractScalar(Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(15))] byte index) { throw null; } // takes ImmLaneIdx16 - public static uint ExtractScalar(Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(15))] byte index) { throw null; } // takes ImmLaneIdx16 - public static int ExtractScalar(Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(7))] byte index) { throw null; } // takes ImmLaneIdx8 - public static uint ExtractScalar(Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(7))] byte index) { throw null; } // takes ImmLaneIdx8 - public static int ExtractScalar(Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(3))] byte index) { throw null; } // takes ImmLaneIdx4 - public static uint ExtractScalar(Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(3))] byte index) { throw null; } // takes ImmLaneIdx4 - public static long ExtractScalar(Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(1))] byte index) { throw null; } // takes ImmLaneIdx2 - public static ulong ExtractScalar(Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(1))] byte index) { throw null; } // takes ImmLaneIdx2 - public static float ExtractScalar(Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(3))] byte index) { throw null; } // takes ImmLaneIdx4 - public static double ExtractScalar(Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(1))] byte index) { throw null; } // takes ImmLaneIdx2 + public static int ExtractScalar(Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(15))] byte index) { throw null; }// takes ImmLaneIdx16 + public static uint ExtractScalar(Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(15))] byte index) { throw null; }// takes ImmLaneIdx16 + public static int ExtractScalar(Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(7))] byte index) { throw null; }// takes ImmLaneIdx8 + public static uint ExtractScalar(Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(7))] byte index) { throw null; }// takes ImmLaneIdx8 + public static int ExtractScalar(Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(3))] byte index) { throw null; }// takes ImmLaneIdx4 + public static uint ExtractScalar(Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(3))] byte index) { throw null; }// takes ImmLaneIdx4 + public static long ExtractScalar(Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(1))] byte index) { throw null; }// takes ImmLaneIdx2 + public static ulong ExtractScalar(Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(1))] byte index) { throw null; }// takes ImmLaneIdx2 + public static float ExtractScalar(Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(3))] byte index) { throw null; }// takes ImmLaneIdx4 + public static double ExtractScalar(Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(1))] byte index) { throw null; }// takes ImmLaneIdx2 public static nint ExtractScalar(Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(3))] byte index) { throw null; } public static nuint ExtractScalar(Vector128 value, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(3))] byte index) { throw null; } public static Vector128 ReplaceScalar(Vector128 vector, [System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute(Max = (byte)(15))] byte imm, int value) { throw null; } // takes ImmLaneIdx16 diff --git a/src/tests/Common/GenerateHWIntrinsicTests/GenerateHWIntrinsicTests_Arm.cs b/src/tests/Common/GenerateHWIntrinsicTests/GenerateHWIntrinsicTests_Arm.cs index 1078dc7339142c..4221401fa1a72e 100644 --- a/src/tests/Common/GenerateHWIntrinsicTests/GenerateHWIntrinsicTests_Arm.cs +++ b/src/tests/Common/GenerateHWIntrinsicTests/GenerateHWIntrinsicTests_Arm.cs @@ -748,6 +748,27 @@ ("LoadUnOpTest.template", new Dictionary { ["TestName"] = "LoadVector128_UInt16", ["Isa"] = "AdvSimd", ["Method"] = "LoadVector128", ["RetVectorType"] = "Vector128", ["RetBaseType"] = "UInt16", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "UInt16", ["LargestVectorSize"] = "16", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt16()", ["ValidateIterResult"] = "firstOp[i] != result[i]"}), ("LoadUnOpTest.template", new Dictionary { ["TestName"] = "LoadVector128_UInt32", ["Isa"] = "AdvSimd", ["Method"] = "LoadVector128", ["RetVectorType"] = "Vector128", ["RetBaseType"] = "UInt32", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "UInt32", ["LargestVectorSize"] = "16", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt32()", ["ValidateIterResult"] = "firstOp[i] != result[i]"}), ("LoadUnOpTest.template", new Dictionary { ["TestName"] = "LoadVector128_UInt64", ["Isa"] = "AdvSimd", ["Method"] = "LoadVector128", ["RetVectorType"] = "Vector128", ["RetBaseType"] = "UInt64", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "UInt64", ["LargestVectorSize"] = "16", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt64()", ["ValidateIterResult"] = "firstOp[i] != result[i]"}), + ("LoadVectorx2Test.template", new Dictionary { ["TestName"] = "LoadVector64x2SByte", ["Isa"] = "AdvSimd", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector64x2", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "SByte", ["LargestVectorSize"] = "8", ["NextValueOp2"] = "TestLibrary.Generator.GetSByte()", ["ValidateIterResult"] = "result1[i] != input[i * 2] || result2[i] != input[(i * 2) + 1]"}), + ("LoadVectorx2Test.template", new Dictionary { ["TestName"] = "LoadVector64x2Byte", ["Isa"] = "AdvSimd", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector64x2", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "Byte", ["LargestVectorSize"] = "8", ["NextValueOp2"] = "TestLibrary.Generator.GetByte()", ["ValidateIterResult"] = "result1[i] != input[i * 2] || result2[i] != input[(i * 2) + 1]"}), + ("LoadVectorx2Test.template", new Dictionary { ["TestName"] = "LoadVector64x2UShort", ["Isa"] = "AdvSimd", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector64x2", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "UInt16", ["LargestVectorSize"] = "8", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt16()", ["ValidateIterResult"] = "result1[i] != input[i * 2] || result2[i] != input[(i * 2) + 1]"}), + ("LoadVectorx2Test.template", new Dictionary { ["TestName"] = "LoadVector64x2Short", ["Isa"] = "AdvSimd", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector64x2", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "Int16", ["LargestVectorSize"] = "8", ["NextValueOp2"] = "TestLibrary.Generator.GetInt16()", ["ValidateIterResult"] = "result1[i] != input[i * 2] || result2[i] != input[(i * 2) + 1]"}), + ("LoadVectorx2Test.template", new Dictionary { ["TestName"] = "LoadVector64x2UInt32", ["Isa"] = "AdvSimd", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector64x2", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "UInt32", ["LargestVectorSize"] = "8", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt32()", ["ValidateIterResult"] = "result1[i] != input[i * 2] || result2[i] != input[(i * 2) + 1]"}), + ("LoadVectorx2Test.template", new Dictionary { ["TestName"] = "LoadVector64x2Int32", ["Isa"] = "AdvSimd", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector64x2", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "Int32", ["LargestVectorSize"] = "8", ["NextValueOp2"] = "TestLibrary.Generator.GetInt32()", ["ValidateIterResult"] = "result1[i] != input[i * 2] || result2[i] != input[(i * 2) + 1]"}), + ("LoadVectorx2Test.template", new Dictionary { ["TestName"] = "LoadVector64x2Float", ["Isa"] = "AdvSimd", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector64x2", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "float", ["LargestVectorSize"] = "8", ["NextValueOp2"] = "TestLibrary.Generator.GetSingle()", ["ValidateIterResult"] = "result1[i] != input[i * 2] || result2[i] != input[(i * 2) + 1]"}), + ("LoadVectorx3Test.template", new Dictionary { ["TestName"] = "LoadVector64x3SByte", ["Isa"] = "AdvSimd", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector64x3", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "SByte", ["LargestVectorSize"] = "8", ["NextValueOp2"] = "TestLibrary.Generator.GetSByte()", ["ValidateIterResult"] = "result1[i] != input[i * 3] || result2[i] != input[(i * 3) + 1] || result3[i] != input[(i * 3) + 2]"}), + ("LoadVectorx3Test.template", new Dictionary { ["TestName"] = "LoadVector64x3Byte", ["Isa"] = "AdvSimd", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector64x3", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "Byte", ["LargestVectorSize"] = "8", ["NextValueOp2"] = "TestLibrary.Generator.GetByte()", ["ValidateIterResult"] = "result1[i] != input[i * 3] || result2[i] != input[(i * 3) + 1] || result3[i] != input[(i * 3) + 2]"}), + ("LoadVectorx3Test.template", new Dictionary { ["TestName"] = "LoadVector64x3UShort", ["Isa"] = "AdvSimd", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector64x3", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "UInt16", ["LargestVectorSize"] = "8", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt16()", ["ValidateIterResult"] = "result1[i] != input[i * 3] || result2[i] != input[(i * 3) + 1] || result3[i] != input[(i * 3) + 2]"}), + ("LoadVectorx3Test.template", new Dictionary { ["TestName"] = "LoadVector64x3Short", ["Isa"] = "AdvSimd", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector64x3", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "Int16", ["LargestVectorSize"] = "8", ["NextValueOp2"] = "TestLibrary.Generator.GetInt16()", ["ValidateIterResult"] = "result1[i] != input[i * 3] || result2[i] != input[(i * 3) + 1] || result3[i] != input[(i * 3) + 2]"}), + ("LoadVectorx3Test.template", new Dictionary { ["TestName"] = "LoadVector64x3UInt32", ["Isa"] = "AdvSimd", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector64x3", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "UInt32", ["LargestVectorSize"] = "8", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt32()", ["ValidateIterResult"] = "result1[i] != input[i * 3] || result2[i] != input[(i * 3) + 1] || result3[i] != input[(i * 3) + 2]"}), + ("LoadVectorx3Test.template", new Dictionary { ["TestName"] = "LoadVector64x3Int32", ["Isa"] = "AdvSimd", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector64x3", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "Int32", ["LargestVectorSize"] = "8", ["NextValueOp2"] = "TestLibrary.Generator.GetInt32()", ["ValidateIterResult"] = "result1[i] != input[i * 3] || result2[i] != input[(i * 3) + 1] || result3[i] != input[(i * 3) + 2]"}), + ("LoadVectorx3Test.template", new Dictionary { ["TestName"] = "LoadVector64x3Float", ["Isa"] = "AdvSimd", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector64x3", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "float", ["LargestVectorSize"] = "8", ["NextValueOp2"] = "TestLibrary.Generator.GetSingle()", ["ValidateIterResult"] = "result1[i] != input[i * 3] || result2[i] != input[(i * 3) + 1] || result3[i] != input[(i * 3) + 2]"}), + ("LoadVectorx4Test.template", new Dictionary { ["TestName"] = "LoadVector64x4SByte", ["Isa"] = "AdvSimd", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector64x4", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "SByte", ["LargestVectorSize"] = "8", ["NextValueOp2"] = "TestLibrary.Generator.GetSByte()", ["ValidateIterResult"] = "result1[i] != input[i * 4] || result2[i] != input[(i * 4) + 1] || result3[i] != input[(i * 4) + 2] || result4[i] != input[(i * 4) + 3]"}), + ("LoadVectorx4Test.template", new Dictionary { ["TestName"] = "LoadVector64x4Byte", ["Isa"] = "AdvSimd", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector64x4", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "Byte", ["LargestVectorSize"] = "8", ["NextValueOp2"] = "TestLibrary.Generator.GetByte()", ["ValidateIterResult"] = "result1[i] != input[i * 4] || result2[i] != input[(i * 4) + 1] || result3[i] != input[(i * 4) + 2] || result4[i] != input[(i * 4) + 3]"}), + ("LoadVectorx4Test.template", new Dictionary { ["TestName"] = "LoadVector64x4UShort", ["Isa"] = "AdvSimd", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector64x4", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "UInt16", ["LargestVectorSize"] = "8", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt16()", ["ValidateIterResult"] = "result1[i] != input[i * 4] || result2[i] != input[(i * 4) + 1] || result3[i] != input[(i * 4) + 2] || result4[i] != input[(i * 4) + 3]"}), + ("LoadVectorx4Test.template", new Dictionary { ["TestName"] = "LoadVector64x4Short", ["Isa"] = "AdvSimd", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector64x4", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "Int16", ["LargestVectorSize"] = "8", ["NextValueOp2"] = "TestLibrary.Generator.GetInt16()", ["ValidateIterResult"] = "result1[i] != input[i * 4] || result2[i] != input[(i * 4) + 1] || result3[i] != input[(i * 4) + 2] || result4[i] != input[(i * 4) + 3]"}), + ("LoadVectorx4Test.template", new Dictionary { ["TestName"] = "LoadVector64x4UInt32", ["Isa"] = "AdvSimd", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector64x4", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "UInt32", ["LargestVectorSize"] = "8", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt32()", ["ValidateIterResult"] = "result1[i] != input[i * 4] || result2[i] != input[(i * 4) + 1] || result3[i] != input[(i * 4) + 2] || result4[i] != input[(i * 4) + 3]"}), + ("LoadVectorx4Test.template", new Dictionary { ["TestName"] = "LoadVector64x4Int32", ["Isa"] = "AdvSimd", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector64x4", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "Int32", ["LargestVectorSize"] = "8", ["NextValueOp2"] = "TestLibrary.Generator.GetInt32()", ["ValidateIterResult"] = "result1[i] != input[i * 4] || result2[i] != input[(i * 4) + 1] || result3[i] != input[(i * 4) + 2] || result4[i] != input[(i * 4) + 3]"}), + ("LoadVectorx4Test.template", new Dictionary { ["TestName"] = "LoadVector64x4Float", ["Isa"] = "AdvSimd", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector64x4", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "float", ["LargestVectorSize"] = "8", ["NextValueOp2"] = "TestLibrary.Generator.GetSingle()", ["ValidateIterResult"] = "result1[i] != input[i * 4] || result2[i] != input[(i * 4) + 1] || result3[i] != input[(i * 4) + 2] || result4[i] != input[(i * 4) + 3]"}), ("VecBinOpTest.template", new Dictionary { ["TestName"] = "Max_Vector64_Byte", ["Isa"] = "AdvSimd", ["LoadIsa"] = "AdvSimd", ["Method"] = "Max", ["RetVectorType"] = "Vector64", ["RetBaseType"] = "Byte", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "Byte", ["Op2VectorType"] = "Vector64", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "8", ["NextValueOp1"] = "TestLibrary.Generator.GetByte()", ["NextValueOp2"] = "TestLibrary.Generator.GetByte()", ["ValidateIterResult"] = "Helpers.Max(left[i], right[i]) != result[i]"}), ("VecBinOpTest.template", new Dictionary { ["TestName"] = "Max_Vector64_Int16", ["Isa"] = "AdvSimd", ["LoadIsa"] = "AdvSimd", ["Method"] = "Max", ["RetVectorType"] = "Vector64", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "Int16", ["Op2VectorType"] = "Vector64", ["Op2BaseType"] = "Int16", ["LargestVectorSize"] = "8", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt16()", ["ValidateIterResult"] = "Helpers.Max(left[i], right[i]) != result[i]"}), ("VecBinOpTest.template", new Dictionary { ["TestName"] = "Max_Vector64_Int32", ["Isa"] = "AdvSimd", ["LoadIsa"] = "AdvSimd", ["Method"] = "Max", ["RetVectorType"] = "Vector64", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "Int32", ["Op2VectorType"] = "Vector64", ["Op2BaseType"] = "Int32", ["LargestVectorSize"] = "8", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt32()", ["ValidateIterResult"] = "Helpers.Max(left[i], right[i]) != result[i]"}), @@ -2044,8 +2065,38 @@ ("LoadPairVectorTest.template", new Dictionary { ["TestName"] = "LoadPairVector128NonTemporal_Single", ["Isa"] = "AdvSimd.Arm64", ["Method"] = "LoadPairVector128NonTemporal", ["RetVectorType"] = "Vector128", ["RetBaseType"] = "Single", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Single", ["LargestVectorSize"] = "32", ["NextValueOp1"] = "TestLibrary.Generator.GetSingle()", ["ValidateIterResult"] = "BitConverter.DoubleToInt64Bits(firstOp[i]) != BitConverter.DoubleToInt64Bits(result[i])"}), ("LoadPairVectorTest.template", new Dictionary { ["TestName"] = "LoadPairVector128NonTemporal_UInt16", ["Isa"] = "AdvSimd.Arm64", ["Method"] = "LoadPairVector128NonTemporal", ["RetVectorType"] = "Vector128", ["RetBaseType"] = "UInt16", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "UInt16", ["LargestVectorSize"] = "32", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt16()", ["ValidateIterResult"] = "firstOp[i] != result[i]"}), ("LoadPairVectorTest.template", new Dictionary { ["TestName"] = "LoadPairVector128NonTemporal_UInt32", ["Isa"] = "AdvSimd.Arm64", ["Method"] = "LoadPairVector128NonTemporal", ["RetVectorType"] = "Vector128", ["RetBaseType"] = "UInt32", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "UInt32", ["LargestVectorSize"] = "32", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt32()", ["ValidateIterResult"] = "firstOp[i] != result[i]"}), - ("LoadPairVectorTest.template", new Dictionary { ["TestName"] = "LoadPairVector128NonTemporal_UInt64", ["Isa"] = "AdvSimd.Arm64", ["Method"] = "LoadPairVector128NonTemporal", ["RetVectorType"] = "Vector128", ["RetBaseType"] = "UInt64", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "UInt64", ["LargestVectorSize"] = "32", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt64()", ["ValidateIterResult"] = "firstOp[i] != result[i]"}), - ("VecBinOpTest.template", new Dictionary { ["TestName"] = "Max_Vector128_Double", ["Isa"] = "AdvSimd.Arm64", ["LoadIsa"] = "AdvSimd", ["Method"] = "Max", ["RetVectorType"] = "Vector128", ["RetBaseType"] = "Double", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Double", ["Op2VectorType"] = "Vector128", ["Op2BaseType"] = "Double", ["LargestVectorSize"] = "16", ["NextValueOp1"] = "TestLibrary.Generator.GetDouble()", ["NextValueOp2"] = "TestLibrary.Generator.GetDouble()", ["ValidateIterResult"] = "BitConverter.DoubleToInt64Bits(Helpers.Max(left[i], right[i])) != BitConverter.DoubleToInt64Bits(result[i])"}), + ("LoadPairVectorTest.template", new Dictionary { ["TestName"] = "LoadPairVector128NonTemporal_UInt64", ["Isa"] = "AdvSimd.Arm64", ["Method"] = "LoadPairVector128NonTemporal", ["RetVectorType"] = "Vector128", ["RetBaseType"] = "UInt64", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "UInt64", ["LargestVectorSize"] = "32", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt64()", ["ValidateIterResult"] = "firstOp[i] != result[i]"}), + ("LoadVectorx2Test.template", new Dictionary { ["TestName"] = "LoadVector128x2SByte", ["Isa"] = "AdvSimd.Arm64", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector128x2", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "SByte", ["LargestVectorSize"] = "16", ["NextValueOp2"] = "TestLibrary.Generator.GetSByte()", ["ValidateIterResult"] = "result1[i] != input[i * 2] || result2[i] != input[(i * 2) + 1]"}), + ("LoadVectorx2Test.template", new Dictionary { ["TestName"] = "LoadVector128x2Byte", ["Isa"] = "AdvSimd.Arm64", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector128x2", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Byte", ["LargestVectorSize"] = "16", ["NextValueOp2"] = "TestLibrary.Generator.GetByte()", ["ValidateIterResult"] = "result1[i] != input[i * 2] || result2[i] != input[(i * 2) + 1]"}), + ("LoadVectorx2Test.template", new Dictionary { ["TestName"] = "LoadVector128x2UShort", ["Isa"] = "AdvSimd.Arm64", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector128x2", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "UInt16", ["LargestVectorSize"] = "16", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt16()", ["ValidateIterResult"] = "result1[i] != input[i * 2] || result2[i] != input[(i * 2) + 1]"}), + ("LoadVectorx2Test.template", new Dictionary { ["TestName"] = "LoadVector128x2Short", ["Isa"] = "AdvSimd.Arm64", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector128x2", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Int16", ["LargestVectorSize"] = "16", ["NextValueOp2"] = "TestLibrary.Generator.GetInt16()", ["ValidateIterResult"] = "result1[i] != input[i * 2] || result2[i] != input[(i * 2) + 1]"}), + ("LoadVectorx2Test.template", new Dictionary { ["TestName"] = "LoadVector128x2UInt32", ["Isa"] = "AdvSimd.Arm64", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector128x2", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "UInt32", ["LargestVectorSize"] = "16", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt32()", ["ValidateIterResult"] = "result1[i] != input[i * 2] || result2[i] != input[(i * 2) + 1]"}), + ("LoadVectorx2Test.template", new Dictionary { ["TestName"] = "LoadVector128x2Int32", ["Isa"] = "AdvSimd.Arm64", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector128x2", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Int32", ["LargestVectorSize"] = "16", ["NextValueOp2"] = "TestLibrary.Generator.GetInt32()", ["ValidateIterResult"] = "result1[i] != input[i * 2] || result2[i] != input[(i * 2) + 1]"}), + ("LoadVectorx2Test.template", new Dictionary { ["TestName"] = "LoadVector128x2UInt64", ["Isa"] = "AdvSimd.Arm64", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector128x2", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "UInt64", ["LargestVectorSize"] = "16", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt64()", ["ValidateIterResult"] = "result1[i] != input[i * 2] || result2[i] != input[(i * 2) + 1]"}), + ("LoadVectorx2Test.template", new Dictionary { ["TestName"] = "LoadVector128x2Int64", ["Isa"] = "AdvSimd.Arm64", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector128x2", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Int64", ["LargestVectorSize"] = "16", ["NextValueOp2"] = "TestLibrary.Generator.GetInt64()", ["ValidateIterResult"] = "result1[i] != input[i * 2] || result2[i] != input[(i * 2) + 1]"}), + ("LoadVectorx2Test.template", new Dictionary { ["TestName"] = "LoadVector128x2Float", ["Isa"] = "AdvSimd.Arm64", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector128x2", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "float", ["LargestVectorSize"] = "16", ["NextValueOp2"] = "TestLibrary.Generator.GetSingle()", ["ValidateIterResult"] = "result1[i] != input[i * 2] || result2[i] != input[(i * 2) + 1]"}), + ("LoadVectorx2Test.template", new Dictionary { ["TestName"] = "LoadVector128x2Double", ["Isa"] = "AdvSimd.Arm64", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector128x2", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "double", ["LargestVectorSize"] = "16", ["NextValueOp2"] = "TestLibrary.Generator.GetDouble()", ["ValidateIterResult"] = "result1[i] != input[i * 2] || result2[i] != input[(i * 2) + 1]"}), + ("LoadVectorx3Test.template", new Dictionary { ["TestName"] = "LoadVector128x3SByte", ["Isa"] = "AdvSimd.Arm64", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector128x3", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "SByte", ["LargestVectorSize"] = "16", ["NextValueOp2"] = "TestLibrary.Generator.GetSByte()", ["ValidateIterResult"] = "result1[i] != input[i * 3] || result2[i] != input[(i * 3) + 1] || result3[i] != input[(i * 3) + 2]"}), + ("LoadVectorx3Test.template", new Dictionary { ["TestName"] = "LoadVector128x3Byte", ["Isa"] = "AdvSimd.Arm64", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector128x3", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Byte", ["LargestVectorSize"] = "16", ["NextValueOp2"] = "TestLibrary.Generator.GetByte()", ["ValidateIterResult"] = "result1[i] != input[i * 3] || result2[i] != input[(i * 3) + 1] || result3[i] != input[(i * 3) + 2]"}), + ("LoadVectorx3Test.template", new Dictionary { ["TestName"] = "LoadVector128x3UShort", ["Isa"] = "AdvSimd.Arm64", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector128x3", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "UInt16", ["LargestVectorSize"] = "16", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt16()", ["ValidateIterResult"] = "result1[i] != input[i * 3] || result2[i] != input[(i * 3) + 1] || result3[i] != input[(i * 3) + 2]"}), + ("LoadVectorx3Test.template", new Dictionary { ["TestName"] = "LoadVector128x3Short", ["Isa"] = "AdvSimd.Arm64", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector128x3", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Int16", ["LargestVectorSize"] = "16", ["NextValueOp2"] = "TestLibrary.Generator.GetInt16()", ["ValidateIterResult"] = "result1[i] != input[i * 3] || result2[i] != input[(i * 3) + 1] || result3[i] != input[(i * 3) + 2]"}), + ("LoadVectorx3Test.template", new Dictionary { ["TestName"] = "LoadVector128x3UInt32", ["Isa"] = "AdvSimd.Arm64", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector128x3", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "UInt32", ["LargestVectorSize"] = "16", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt32()", ["ValidateIterResult"] = "result1[i] != input[i * 3] || result2[i] != input[(i * 3) + 1] || result3[i] != input[(i * 3) + 2]"}), + ("LoadVectorx3Test.template", new Dictionary { ["TestName"] = "LoadVector128x3Int32", ["Isa"] = "AdvSimd.Arm64", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector128x3", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Int32", ["LargestVectorSize"] = "16", ["NextValueOp2"] = "TestLibrary.Generator.GetInt32()", ["ValidateIterResult"] = "result1[i] != input[i * 3] || result2[i] != input[(i * 3) + 1] || result3[i] != input[(i * 3) + 2]"}), + ("LoadVectorx3Test.template", new Dictionary { ["TestName"] = "LoadVector128x3UInt64", ["Isa"] = "AdvSimd.Arm64", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector128x3", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "UInt64", ["LargestVectorSize"] = "16", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt64()", ["ValidateIterResult"] = "result1[i] != input[i * 3] || result2[i] != input[(i * 3) + 1] || result3[i] != input[(i * 3) + 2]"}), + ("LoadVectorx3Test.template", new Dictionary { ["TestName"] = "LoadVector128x3Int64", ["Isa"] = "AdvSimd.Arm64", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector128x3", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Int64", ["LargestVectorSize"] = "16", ["NextValueOp2"] = "TestLibrary.Generator.GetInt64()", ["ValidateIterResult"] = "result1[i] != input[i * 3] || result2[i] != input[(i * 3) + 1] || result3[i] != input[(i * 3) + 2]"}), + ("LoadVectorx3Test.template", new Dictionary { ["TestName"] = "LoadVector128x3Float", ["Isa"] = "AdvSimd.Arm64", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector128x3", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "float", ["LargestVectorSize"] = "16", ["NextValueOp2"] = "TestLibrary.Generator.GetSingle()", ["ValidateIterResult"] = "result1[i] != input[i * 3] || result2[i] != input[(i * 3) + 1] || result3[i] != input[(i * 3) + 2]"}), + ("LoadVectorx3Test.template", new Dictionary { ["TestName"] = "LoadVector128x3Double", ["Isa"] = "AdvSimd.Arm64", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector128x3", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "double", ["LargestVectorSize"] = "16", ["NextValueOp2"] = "TestLibrary.Generator.GetDouble()", ["ValidateIterResult"] = "result1[i] != input[i * 3] || result2[i] != input[(i * 3) + 1] || result3[i] != input[(i * 3) + 2]"}), + ("LoadVectorx4Test.template", new Dictionary { ["TestName"] = "LoadVector128x4SByte", ["Isa"] = "AdvSimd.Arm64", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector128x4", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "SByte", ["LargestVectorSize"] = "16", ["NextValueOp2"] = "TestLibrary.Generator.GetSByte()", ["ValidateIterResult"] = "result1[i] != input[i * 4] || result2[i] != input[(i * 4) + 1] || result3[i] != input[(i * 4) + 2] || result4[i] != input[(i * 4) + 3]"}), + ("LoadVectorx4Test.template", new Dictionary { ["TestName"] = "LoadVector128x4Byte", ["Isa"] = "AdvSimd.Arm64", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector128x4", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Byte", ["LargestVectorSize"] = "16", ["NextValueOp2"] = "TestLibrary.Generator.GetByte()", ["ValidateIterResult"] = "result1[i] != input[i * 4] || result2[i] != input[(i * 4) + 1] || result3[i] != input[(i * 4) + 2] || result4[i] != input[(i * 4) + 3]"}), + ("LoadVectorx4Test.template", new Dictionary { ["TestName"] = "LoadVector128x4UShort", ["Isa"] = "AdvSimd.Arm64", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector128x4", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "UInt16", ["LargestVectorSize"] = "16", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt16()", ["ValidateIterResult"] = "result1[i] != input[i * 4] || result2[i] != input[(i * 4) + 1] || result3[i] != input[(i * 4) + 2] || result4[i] != input[(i * 4) + 3]"}), + ("LoadVectorx4Test.template", new Dictionary { ["TestName"] = "LoadVector128x4Short", ["Isa"] = "AdvSimd.Arm64", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector128x4", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Int16", ["LargestVectorSize"] = "16", ["NextValueOp2"] = "TestLibrary.Generator.GetInt16()", ["ValidateIterResult"] = "result1[i] != input[i * 4] || result2[i] != input[(i * 4) + 1] || result3[i] != input[(i * 4) + 2] || result4[i] != input[(i * 4) + 3]"}), + ("LoadVectorx4Test.template", new Dictionary { ["TestName"] = "LoadVector128x4UInt32", ["Isa"] = "AdvSimd.Arm64", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector128x4", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "UInt32", ["LargestVectorSize"] = "16", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt32()", ["ValidateIterResult"] = "result1[i] != input[i * 4] || result2[i] != input[(i * 4) + 1] || result3[i] != input[(i * 4) + 2] || result4[i] != input[(i * 4) + 3]"}), + ("LoadVectorx4Test.template", new Dictionary { ["TestName"] = "LoadVector128x4Int32", ["Isa"] = "AdvSimd.Arm64", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector128x4", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Int32", ["LargestVectorSize"] = "16", ["NextValueOp2"] = "TestLibrary.Generator.GetInt32()", ["ValidateIterResult"] = "result1[i] != input[i * 4] || result2[i] != input[(i * 4) + 1] || result3[i] != input[(i * 4) + 2] || result4[i] != input[(i * 4) + 3]"}), + ("LoadVectorx4Test.template", new Dictionary { ["TestName"] = "LoadVector128x4UInt64", ["Isa"] = "AdvSimd.Arm64", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector128x4", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "UInt64", ["LargestVectorSize"] = "16", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt64()", ["ValidateIterResult"] = "result1[i] != input[i * 4] || result2[i] != input[(i * 4) + 1] || result3[i] != input[(i * 4) + 2] || result4[i] != input[(i * 4) + 3]"}), + ("LoadVectorx4Test.template", new Dictionary { ["TestName"] = "LoadVector128x4Int64", ["Isa"] = "AdvSimd.Arm64", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector128x4", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Int64", ["LargestVectorSize"] = "16", ["NextValueOp2"] = "TestLibrary.Generator.GetInt64()", ["ValidateIterResult"] = "result1[i] != input[i * 4] || result2[i] != input[(i * 4) + 1] || result3[i] != input[(i * 4) + 2] || result4[i] != input[(i * 4) + 3]"}), + ("LoadVectorx4Test.template", new Dictionary { ["TestName"] = "LoadVector128x4Float", ["Isa"] = "AdvSimd.Arm64", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector128x4", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "float", ["LargestVectorSize"] = "16", ["NextValueOp2"] = "TestLibrary.Generator.GetSingle()", ["ValidateIterResult"] = "result1[i] != input[i * 4] || result2[i] != input[(i * 4) + 1] || result3[i] != input[(i * 4) + 2] || result4[i] != input[(i * 4) + 3]"}), + ("LoadVectorx4Test.template", new Dictionary { ["TestName"] = "LoadVector128x4Double", ["Isa"] = "AdvSimd.Arm64", ["LoadIsa"] = "AdvSimd", ["Method"] = "LoadVector128x4", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "double", ["LargestVectorSize"] = "16", ["NextValueOp2"] = "TestLibrary.Generator.GetDouble()", ["ValidateIterResult"] = "result1[i] != input[i * 4] || result2[i] != input[(i * 4) + 1] || result3[i] != input[(i * 4) + 2] || result4[i] != input[(i * 4) + 3]"}), + ("VecBinOpTest.template", new Dictionary { ["TestName"] = "Max_Vector128_Double", ["Isa"] = "AdvSimd.Arm64", ["LoadIsa"] = "AdvSimd", ["Method"] = "Max", ["RetVectorType"] = "Vector128", ["RetBaseType"] = "Double", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Double", ["Op2VectorType"] = "Vector128", ["Op2BaseType"] = "Double", ["LargestVectorSize"] = "16", ["NextValueOp1"] = "TestLibrary.Generator.GetDouble()", ["NextValueOp2"] = "TestLibrary.Generator.GetDouble()", ["ValidateIterResult"] = "BitConverter.DoubleToInt64Bits(Helpers.Max(left[i], right[i])) != BitConverter.DoubleToInt64Bits(result[i])"}), ("VecReduceUnOpTest.template", new Dictionary { ["TestName"] = "MaxAcross_Vector64_Byte", ["Isa"] = "AdvSimd.Arm64", ["LoadIsa"] = "AdvSimd", ["Method"] = "MaxAcross", ["RetVectorType"] = "Vector64", ["RetBaseType"] = "Byte", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "Byte", ["LargestVectorSize"] = "8", ["NextValueOp1"] = "TestLibrary.Generator.GetByte()", ["ValidateReduceOpResult"] = "Helpers.MaxAcross(firstOp) != result[0]", ["ValidateRemainingResults"] = "result[i] != 0"}), ("VecReduceUnOpTest.template", new Dictionary { ["TestName"] = "MaxAcross_Vector64_Int16", ["Isa"] = "AdvSimd.Arm64", ["LoadIsa"] = "AdvSimd", ["Method"] = "MaxAcross", ["RetVectorType"] = "Vector64", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "Int16", ["LargestVectorSize"] = "8", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["ValidateReduceOpResult"] = "Helpers.MaxAcross(firstOp) != result[0]", ["ValidateRemainingResults"] = "result[i] != 0"}), ("VecReduceUnOpTest.template", new Dictionary { ["TestName"] = "MaxAcross_Vector64_SByte", ["Isa"] = "AdvSimd.Arm64", ["LoadIsa"] = "AdvSimd", ["Method"] = "MaxAcross", ["RetVectorType"] = "Vector64", ["RetBaseType"] = "SByte", ["Op1VectorType"] = "Vector64", ["Op1BaseType"] = "SByte", ["LargestVectorSize"] = "8", ["NextValueOp1"] = "TestLibrary.Generator.GetSByte()", ["ValidateReduceOpResult"] = "Helpers.MaxAcross(firstOp) != result[0]", ["ValidateRemainingResults"] = "result[i] != 0"}), diff --git a/src/tests/JIT/HardwareIntrinsics/Arm/Shared/LoadVectorx2Test.template b/src/tests/JIT/HardwareIntrinsics/Arm/Shared/LoadVectorx2Test.template new file mode 100644 index 00000000000000..c49461ac48a8bc --- /dev/null +++ b/src/tests/JIT/HardwareIntrinsics/Arm/Shared/LoadVectorx2Test.template @@ -0,0 +1,280 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +/****************************************************************************** + * This file is auto-generated from a template file by the GenerateTests.csx * + * script in src\tests\JIT\HardwareIntrinsics\Arm\Shared. In order to make * + * changes, please update the corresponding template and run according to the * + * directions listed in the file. * + ******************************************************************************/ +using System; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Runtime.Intrinsics; +using System.Runtime.Intrinsics.Arm; +using Xunit; + +namespace JIT.HardwareIntrinsics.Arm +{ + public static partial class Program + { + [Fact] + [ActiveIssue("https://github.com/dotnet/runtime/pull/92855#issuecomment-1746078670", TestRuntimes.Mono)] + public static void {TestName}() + { + var test = new LoadVector{Op1VectorType}x2Test__{Op1BaseType}(); + if (test.IsSupported) + { + // Validates basic functionality works + test.RunBasicScenario(); + + // Validates calling via reflection works + test.RunReflectionScenario(); + + // Validates passing an instance member of a class works + test.RunClassFldScenario(); + + // Validates passing the field of a local struct works + test.RunStructLclFldScenario(); + + // Validates passing an instance member of a struct works + test.RunStructFldScenario(); + } + else + { + // Validates we throw on unsupported hardware + test.RunUnsupportedScenario(); + } + + if (!test.Succeeded) + { + throw new Exception("One or more scenarios did not complete as expected."); + } + } + } + + public sealed unsafe class LoadVector{Op1VectorType}x2Test__{Op1BaseType} + { + private struct DataTable + { + private byte[] inArray; + private byte[] outArray1; + private byte[] outArray2; + + private GCHandle inHandle; + private GCHandle outHandle1; + private GCHandle outHandle2; + + private ulong alignment; + + public DataTable({Op1BaseType}[] outArray1, {Op1BaseType}[] outArray2, {Op1BaseType}[] inArray, int alignment) + { + int sizeOfInArray = inArray.Length * Unsafe.SizeOf<{Op1BaseType}>(); + int sizeOfOutArray1 = outArray1.Length * Unsafe.SizeOf<{Op1BaseType}>(); + int sizeOfOutArray2 = outArray2.Length * Unsafe.SizeOf<{Op1BaseType}>(); + if ((alignment != 16 && alignment != 8) || (alignment * 2) < sizeOfInArray || (alignment * 2) < sizeOfOutArray1 || (alignment * 2) < sizeOfOutArray2) + { + throw new ArgumentException("Invalid value of alignment"); + } + + this.inArray = new byte[alignment * 2]; + this.outArray1 = new byte[alignment * 2]; + this.outArray2 = new byte[alignment * 2]; + + this.inHandle = GCHandle.Alloc(this.inArray, GCHandleType.Pinned); + this.outHandle1 = GCHandle.Alloc(this.outArray1, GCHandleType.Pinned); + this.outHandle2 = GCHandle.Alloc(this.outArray2, GCHandleType.Pinned); + + this.alignment = (ulong)alignment; + + Unsafe.CopyBlockUnaligned(ref Unsafe.AsRef(inArrayPtr), ref Unsafe.As<{Op1BaseType}, byte>(ref inArray[0]), (uint)sizeOfInArray); + } + + public void* inArrayPtr => Align((byte*)(inHandle.AddrOfPinnedObject().ToPointer()), alignment); + public void* outArray1Ptr => Align((byte*)(outHandle1.AddrOfPinnedObject().ToPointer()), alignment); + public void* outArray2Ptr => Align((byte*)(outHandle2.AddrOfPinnedObject().ToPointer()), alignment); + + + public void Dispose() + { + inHandle.Free(); + outHandle1.Free(); + outHandle2.Free(); + } + + private static unsafe void* Align(byte* buffer, ulong expectedAlignment) + { + return (void*)(((ulong)buffer + expectedAlignment - 1) & ~(expectedAlignment - 1)); + } + } + + private struct TestStruct + { + public {Op1VectorType}<{Op1BaseType}> _fld1; + public {Op1VectorType}<{Op1BaseType}> _fld2; + + public static TestStruct Create() + { + return new TestStruct(); + } + + public void RunStructFldScenario(LoadVector{Op1VectorType}x2Test__{Op1BaseType} testClass) + { + (_fld1, _fld2) = {Isa}.{Method}(({Op1BaseType}*)testClass._dataTable.inArrayPtr); + + testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.inArrayPtr); + } + } + + private static readonly int LargestVectorSize = {LargestVectorSize}; + + private static readonly int OpElementCount = Unsafe.SizeOf<{Op1VectorType}<{Op1BaseType}>>() / sizeof({Op1BaseType}); + private static readonly int DestElementCount = OpElementCount * 2; + + private static {Op1BaseType}[] _data = new {Op1BaseType}[DestElementCount]; + + private {Op1VectorType}<{Op1BaseType}> _fld1; + private {Op1VectorType}<{Op1BaseType}> _fld2; + + private DataTable _dataTable; + + public LoadVector{Op1VectorType}x2Test__{Op1BaseType}() + { + Succeeded = true; + for (var i = 0; i < OpElementCount; i++) { _data[i] = {NextValueOp2}; } + _dataTable = new DataTable(new {Op1BaseType}[OpElementCount], new {Op1BaseType}[OpElementCount], _data, LargestVectorSize); + } + + public bool IsSupported => {Isa}.IsSupported; + + public bool Succeeded { get; set; } + + public void RunBasicScenario() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunBasicScenario)); + + var result = {Isa}.{Method}(({Op1BaseType}*)(_dataTable.inArrayPtr)); + + Unsafe.Write(_dataTable.outArray1Ptr, result.Item1); + Unsafe.Write(_dataTable.outArray2Ptr, result.Item2); + ValidateResult(_dataTable.outArray1Ptr, _dataTable.outArray2Ptr, _dataTable.inArrayPtr); + } + + public void RunReflectionScenario() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunReflectionScenario)); + + var result = typeof({Isa}).GetMethod(nameof({Isa}.{Method}), new Type[] { typeof({Op1BaseType}*) }) + .Invoke(null, new object[] { + Pointer.Box(_dataTable.inArrayPtr, typeof({Op1BaseType}*)) + }); + + var output = (({Op1VectorType}<{Op1BaseType}>,{Op1VectorType}<{Op1BaseType}>))result; + Unsafe.Write(_dataTable.outArray1Ptr, output.Item1); + Unsafe.Write(_dataTable.outArray2Ptr, output.Item2); + ValidateResult(_dataTable.outArray1Ptr, _dataTable.outArray2Ptr, _dataTable.inArrayPtr); + } + + public void RunClassFldScenario() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunClassFldScenario)); + + (_fld1, _fld2) = {Isa}.{Method}(({Op1BaseType}*)_dataTable.inArrayPtr); + + ValidateResult(_fld1, _fld2, _dataTable.inArrayPtr); + } + + public void RunStructLclFldScenario() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunStructLclFldScenario)); + + var test = TestStruct.Create(); + (test._fld1, test._fld2) = {Isa}.{Method}(({Op1BaseType}*)_dataTable.inArrayPtr); + + Unsafe.Write(_dataTable.outArray1Ptr, test._fld1); + Unsafe.Write(_dataTable.outArray2Ptr, test._fld2); + ValidateResult(_dataTable.outArray1Ptr, _dataTable.outArray2Ptr, _dataTable.inArrayPtr); + } + + public void RunStructFldScenario() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunStructFldScenario)); + + var test = TestStruct.Create(); + test.RunStructFldScenario(this); + } + + public void RunUnsupportedScenario() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunUnsupportedScenario)); + + bool succeeded = false; + + try + { + RunClassFldScenario(); + } + catch (PlatformNotSupportedException) + { + succeeded = true; + } + + if (!succeeded) + { + Succeeded = false; + } + } + + private void ValidateResult(void* result1, void* result2, void* input, [CallerMemberName] string method = "") + { + {Op1BaseType}[] inArray = new {Op1BaseType}[DestElementCount]; + {Op1BaseType}[] outArray1 = new {Op1BaseType}[OpElementCount]; + {Op1BaseType}[] outArray2 = new {Op1BaseType}[OpElementCount]; + + Unsafe.CopyBlockUnaligned(ref Unsafe.As<{Op1BaseType}, byte>(ref inArray[0]), ref Unsafe.AsRef(input), (uint)Unsafe.SizeOf<{Op1VectorType}<{Op1BaseType}>>() * 2); + Unsafe.CopyBlockUnaligned(ref Unsafe.As<{Op1BaseType}, byte>(ref outArray1[0]), ref Unsafe.AsRef(result1), (uint)Unsafe.SizeOf<{Op1VectorType}<{Op1BaseType}>>()); + Unsafe.CopyBlockUnaligned(ref Unsafe.As<{Op1BaseType}, byte>(ref outArray2[0]), ref Unsafe.AsRef(result2), (uint)Unsafe.SizeOf<{Op1VectorType}<{Op1BaseType}>>()); + + ValidateResult(inArray, outArray1, outArray2, method); + } + + private void ValidateResult({Op1VectorType}<{Op1BaseType}> result1, {Op1VectorType}<{Op1BaseType}> result2, void* input, [CallerMemberName] string method = "") + { + {Op1BaseType}[] inArray = new {Op1BaseType}[DestElementCount]; + {Op1BaseType}[] outArray1 = new {Op1BaseType}[OpElementCount]; + {Op1BaseType}[] outArray2 = new {Op1BaseType}[OpElementCount]; + + Unsafe.CopyBlockUnaligned(ref Unsafe.As<{Op1BaseType}, byte>(ref inArray[0]), ref Unsafe.AsRef(input), (uint)Unsafe.SizeOf<{Op1VectorType}<{Op1BaseType}>>() * 2); + Unsafe.WriteUnaligned(ref Unsafe.As<{Op1BaseType}, byte>(ref outArray1[0]), result1); + Unsafe.WriteUnaligned(ref Unsafe.As<{Op1BaseType}, byte>(ref outArray2[0]), result2); + + ValidateResult(inArray, outArray1, outArray2, method); + } + + private void ValidateResult({Op1BaseType}[] input, {Op1BaseType}[] result1, {Op1BaseType}[] result2, [CallerMemberName] string method = "") + { + bool succeeded = true; + + for (int i = 0; i < OpElementCount; i++) + { + if ({ValidateIterResult}) + { + succeeded = false; + break; + } + } + + if (!succeeded) + { + TestLibrary.TestFramework.LogInformation($"{nameof({Isa})}.{nameof({Isa}.{Method})}({Op1VectorType}<{Op1BaseType}>): {Method} failed:"); + TestLibrary.TestFramework.LogInformation($" input: ({string.Join(", ", input)})"); + TestLibrary.TestFramework.LogInformation($" result1: ({string.Join(", ", result1)})"); + TestLibrary.TestFramework.LogInformation($" result2: ({string.Join(", ", result2)})"); + TestLibrary.TestFramework.LogInformation(string.Empty); + + Succeeded = false; + } + } + } +} \ No newline at end of file diff --git a/src/tests/JIT/HardwareIntrinsics/Arm/Shared/LoadVectorx3Test.template b/src/tests/JIT/HardwareIntrinsics/Arm/Shared/LoadVectorx3Test.template new file mode 100644 index 00000000000000..a81ebb120ac99e --- /dev/null +++ b/src/tests/JIT/HardwareIntrinsics/Arm/Shared/LoadVectorx3Test.template @@ -0,0 +1,297 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +/****************************************************************************** + * This file is auto-generated from a template file by the GenerateTests.csx * + * script in src\tests\JIT\HardwareIntrinsics\Arm\Shared. In order to make * + * changes, please update the corresponding template and run according to the * + * directions listed in the file. * + ******************************************************************************/ +using System; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Runtime.Intrinsics; +using System.Runtime.Intrinsics.Arm; +using Xunit; + +namespace JIT.HardwareIntrinsics.Arm +{ + public static partial class Program + { + [Fact] + [ActiveIssue("https://github.com/dotnet/runtime/pull/92855#issuecomment-1746078670", TestRuntimes.Mono)] + public static void {TestName}() + { + var test = new {TestName}Test(); + if (test.IsSupported) + { + // Validates basic functionality works + test.RunBasicScenario(); + + // Validates calling via reflection works + test.RunReflectionScenario(); + + // Validates passing an instance member of a class works + test.RunClassFldScenario(); + + // Validates passing the field of a local struct works + test.RunStructLclFldScenario(); + + // Validates passing an instance member of a struct works + test.RunStructFldScenario(); + } + else + { + // Validates we throw on unsupported hardware + test.RunUnsupportedScenario(); + } + + if (!test.Succeeded) + { + throw new Exception("One or more scenarios did not complete as expected."); + } + } + } + + public sealed unsafe class {TestName}Test + { + private struct DataTable + { + private byte[] inArray; + private byte[] outArray1; + private byte[] outArray2; + private byte[] outArray3; + + private GCHandle inHandle; + private GCHandle outHandle1; + private GCHandle outHandle2; + private GCHandle outHandle3; + + private ulong alignment; + + public DataTable({Op1BaseType}[] outArray1, {Op1BaseType}[] outArray2, {Op1BaseType}[] outArray3, {Op1BaseType}[] inArray, int alignment) + { + int sizeOfInArray = inArray.Length * Unsafe.SizeOf<{Op1BaseType}>(); + int sizeOfOutArray1 = outArray1.Length * Unsafe.SizeOf<{Op1BaseType}>(); + int sizeOfOutArray2 = outArray2.Length * Unsafe.SizeOf<{Op1BaseType}>(); + int sizeOfOutArray3 = outArray3.Length * Unsafe.SizeOf<{Op1BaseType}>(); + if ((alignment != 16 && alignment != 8) || (alignment * 3) < sizeOfInArray || (alignment * 2) < sizeOfOutArray1 || (alignment * 2) < sizeOfOutArray2 || (alignment * 2) < sizeOfOutArray3) + { + throw new ArgumentException("Invalid value of alignment"); + } + + this.inArray = new byte[alignment * 3]; + this.outArray1 = new byte[alignment * 2]; + this.outArray2 = new byte[alignment * 2]; + this.outArray3 = new byte[alignment * 2]; + + this.inHandle = GCHandle.Alloc(this.inArray, GCHandleType.Pinned); + this.outHandle1 = GCHandle.Alloc(this.outArray1, GCHandleType.Pinned); + this.outHandle2 = GCHandle.Alloc(this.outArray2, GCHandleType.Pinned); + this.outHandle3 = GCHandle.Alloc(this.outArray3, GCHandleType.Pinned); + + this.alignment = (ulong)alignment; + + Unsafe.CopyBlockUnaligned(ref Unsafe.AsRef(inArrayPtr), ref Unsafe.As<{Op1BaseType}, byte>(ref inArray[0]), (uint)sizeOfInArray); + } + + public void* inArrayPtr => Align((byte*)(inHandle.AddrOfPinnedObject().ToPointer()), alignment); + public void* outArray1Ptr => Align((byte*)(outHandle1.AddrOfPinnedObject().ToPointer()), alignment); + public void* outArray2Ptr => Align((byte*)(outHandle2.AddrOfPinnedObject().ToPointer()), alignment); + public void* outArray3Ptr => Align((byte*)(outHandle3.AddrOfPinnedObject().ToPointer()), alignment); + + + public void Dispose() + { + inHandle.Free(); + outHandle1.Free(); + outHandle2.Free(); + outHandle3.Free(); + } + + private static unsafe void* Align(byte* buffer, ulong expectedAlignment) + { + return (void*)(((ulong)buffer + expectedAlignment - 1) & ~(expectedAlignment - 1)); + } + } + + private struct TestStruct + { + public {Op1VectorType}<{Op1BaseType}> _fld1; + public {Op1VectorType}<{Op1BaseType}> _fld2; + public {Op1VectorType}<{Op1BaseType}> _fld3; + + public static TestStruct Create() + { + return new TestStruct(); + } + + public void RunStructFldScenario({TestName}Test testClass) + { + (_fld1, _fld2, _fld3) = {Isa}.{Method}(({Op1BaseType}*)testClass._dataTable.inArrayPtr); + + testClass.ValidateResult(_fld1, _fld2, _fld3, testClass._dataTable.inArrayPtr); + } + } + + private static readonly int LargestVectorSize = {LargestVectorSize}; + + private static readonly int OpElementCount = Unsafe.SizeOf<{Op1VectorType}<{Op1BaseType}>>() / sizeof({Op1BaseType}); + private static readonly int DestElementCount = OpElementCount * 3; + + private static {Op1BaseType}[] _data = new {Op1BaseType}[DestElementCount]; + + private {Op1VectorType}<{Op1BaseType}> _fld1; + private {Op1VectorType}<{Op1BaseType}> _fld2; + private {Op1VectorType}<{Op1BaseType}> _fld3; + + private DataTable _dataTable; + + public {TestName}Test() + { + Succeeded = true; + for (var i = 0; i < OpElementCount; i++) { _data[i] = {NextValueOp2}; } + _dataTable = new DataTable(new {Op1BaseType}[OpElementCount], new {Op1BaseType}[OpElementCount], new {Op1BaseType}[OpElementCount], _data, LargestVectorSize); + } + + public bool IsSupported => {Isa}.IsSupported; + + public bool Succeeded { get; set; } + + public void RunBasicScenario() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunBasicScenario)); + + var result = {Isa}.{Method}(({Op1BaseType}*)(_dataTable.inArrayPtr)); + + Unsafe.Write(_dataTable.outArray1Ptr, result.Item1); + Unsafe.Write(_dataTable.outArray2Ptr, result.Item2); + Unsafe.Write(_dataTable.outArray3Ptr, result.Item3); + ValidateResult(_dataTable.outArray1Ptr, _dataTable.outArray2Ptr, _dataTable.outArray3Ptr, _dataTable.inArrayPtr); + } + + public void RunReflectionScenario() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunReflectionScenario)); + + var result = typeof({Isa}).GetMethod(nameof({Isa}.{Method}), new Type[] { typeof({Op1BaseType}*) }) + .Invoke(null, new object[] { + Pointer.Box(_dataTable.inArrayPtr, typeof({Op1BaseType}*)) + }); + + var output = (({Op1VectorType}<{Op1BaseType}>,{Op1VectorType}<{Op1BaseType}>,{Op1VectorType}<{Op1BaseType}>))result; + Unsafe.Write(_dataTable.outArray1Ptr, output.Item1); + Unsafe.Write(_dataTable.outArray2Ptr, output.Item2); + Unsafe.Write(_dataTable.outArray3Ptr, output.Item3); + ValidateResult(_dataTable.outArray1Ptr, _dataTable.outArray2Ptr, _dataTable.outArray3Ptr, _dataTable.inArrayPtr); + } + + public void RunClassFldScenario() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunClassFldScenario)); + + (_fld1, _fld2, _fld3) = {Isa}.{Method}(({Op1BaseType}*)_dataTable.inArrayPtr); + + ValidateResult(_fld1, _fld2, _fld3, _dataTable.inArrayPtr); + } + + public void RunStructLclFldScenario() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunStructLclFldScenario)); + + var test = TestStruct.Create(); + (test._fld1, test._fld2, test._fld3) = {Isa}.{Method}(({Op1BaseType}*)_dataTable.inArrayPtr); + + Unsafe.Write(_dataTable.outArray1Ptr, test._fld1); + Unsafe.Write(_dataTable.outArray2Ptr, test._fld2); + Unsafe.Write(_dataTable.outArray3Ptr, test._fld3); + ValidateResult(_dataTable.outArray1Ptr, _dataTable.outArray2Ptr, _dataTable.outArray3Ptr, _dataTable.inArrayPtr); + } + + public void RunStructFldScenario() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunStructFldScenario)); + + var test = TestStruct.Create(); + test.RunStructFldScenario(this); + } + + public void RunUnsupportedScenario() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunUnsupportedScenario)); + + bool succeeded = false; + + try + { + RunClassFldScenario(); + } + catch (PlatformNotSupportedException) + { + succeeded = true; + } + + if (!succeeded) + { + Succeeded = false; + } + } + + private void ValidateResult(void* result1, void* result2, void* result3, void* input, [CallerMemberName] string method = "") + { + {Op1BaseType}[] inArray = new {Op1BaseType}[DestElementCount]; + {Op1BaseType}[] outArray1 = new {Op1BaseType}[OpElementCount]; + {Op1BaseType}[] outArray2 = new {Op1BaseType}[OpElementCount]; + {Op1BaseType}[] outArray3 = new {Op1BaseType}[OpElementCount]; + + Unsafe.CopyBlockUnaligned(ref Unsafe.As<{Op1BaseType}, byte>(ref inArray[0]), ref Unsafe.AsRef(input), (uint)Unsafe.SizeOf<{Op1VectorType}<{Op1BaseType}>>() * 3); + Unsafe.CopyBlockUnaligned(ref Unsafe.As<{Op1BaseType}, byte>(ref outArray1[0]), ref Unsafe.AsRef(result1), (uint)Unsafe.SizeOf<{Op1VectorType}<{Op1BaseType}>>()); + Unsafe.CopyBlockUnaligned(ref Unsafe.As<{Op1BaseType}, byte>(ref outArray2[0]), ref Unsafe.AsRef(result2), (uint)Unsafe.SizeOf<{Op1VectorType}<{Op1BaseType}>>()); + Unsafe.CopyBlockUnaligned(ref Unsafe.As<{Op1BaseType}, byte>(ref outArray3[0]), ref Unsafe.AsRef(result3), (uint)Unsafe.SizeOf<{Op1VectorType}<{Op1BaseType}>>()); + + ValidateResult(inArray, outArray1, outArray2, outArray3, method); + } + + private void ValidateResult({Op1VectorType}<{Op1BaseType}> result1, {Op1VectorType}<{Op1BaseType}> result2, {Op1VectorType}<{Op1BaseType}> result3, void* input, [CallerMemberName] string method = "") + { + {Op1BaseType}[] inArray = new {Op1BaseType}[DestElementCount]; + {Op1BaseType}[] outArray1 = new {Op1BaseType}[OpElementCount]; + {Op1BaseType}[] outArray2 = new {Op1BaseType}[OpElementCount]; + {Op1BaseType}[] outArray3 = new {Op1BaseType}[OpElementCount]; + + Unsafe.CopyBlockUnaligned(ref Unsafe.As<{Op1BaseType}, byte>(ref inArray[0]), ref Unsafe.AsRef(input), (uint)Unsafe.SizeOf<{Op1VectorType}<{Op1BaseType}>>() * 3); + Unsafe.WriteUnaligned(ref Unsafe.As<{Op1BaseType}, byte>(ref outArray1[0]), result1); + Unsafe.WriteUnaligned(ref Unsafe.As<{Op1BaseType}, byte>(ref outArray2[0]), result2); + Unsafe.WriteUnaligned(ref Unsafe.As<{Op1BaseType}, byte>(ref outArray3[0]), result3); + + ValidateResult(inArray, outArray1, outArray2, outArray3, method); + } + + private void ValidateResult({Op1BaseType}[] input, {Op1BaseType}[] result1, {Op1BaseType}[] result2, {Op1BaseType}[] result3, [CallerMemberName] string method = "") + { + bool succeeded = true; + + for (int i = 0; i < OpElementCount; i++) + { + if ({ValidateIterResult}) + { + succeeded = false; + break; + } + } + + if (!succeeded) + { + TestLibrary.TestFramework.LogInformation($"{nameof({Isa})}.{nameof({Isa}.{Method})}({Op1VectorType}<{Op1BaseType}>): {Method} failed:"); + TestLibrary.TestFramework.LogInformation($" input: ({string.Join(", ", input)})"); + TestLibrary.TestFramework.LogInformation($" result1: ({string.Join(", ", result1)})"); + TestLibrary.TestFramework.LogInformation($" result2: ({string.Join(", ", result2)})"); + TestLibrary.TestFramework.LogInformation($" result3: ({string.Join(", ", result3)})"); + TestLibrary.TestFramework.LogInformation(string.Empty); + + Succeeded = false; + } + } + } +} \ No newline at end of file diff --git a/src/tests/JIT/HardwareIntrinsics/Arm/Shared/LoadVectorx4Test.template b/src/tests/JIT/HardwareIntrinsics/Arm/Shared/LoadVectorx4Test.template new file mode 100644 index 00000000000000..a8ac65a2a9efbd --- /dev/null +++ b/src/tests/JIT/HardwareIntrinsics/Arm/Shared/LoadVectorx4Test.template @@ -0,0 +1,314 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +/****************************************************************************** + * This file is auto-generated from a template file by the GenerateTests.csx * + * script in src\tests\JIT\HardwareIntrinsics\Arm\Shared. In order to make * + * changes, please update the corresponding template and run according to the * + * directions listed in the file. * + ******************************************************************************/ +using System; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Runtime.Intrinsics; +using System.Runtime.Intrinsics.Arm; +using Xunit; + +namespace JIT.HardwareIntrinsics.Arm +{ + public static partial class Program + { + [Fact] + [ActiveIssue("https://github.com/dotnet/runtime/pull/92855#issuecomment-1746078670", TestRuntimes.Mono)] + public static void {TestName}() + { + var test = new LoadVector{Op1VectorType}x4Test__{Op1BaseType}(); + if (test.IsSupported) + { + // Validates basic functionality works + test.RunBasicScenario(); + + // Validates calling via reflection works + test.RunReflectionScenario(); + + // Validates passing an instance member of a class works + test.RunClassFldScenario(); + + // Validates passing the field of a local struct works + test.RunStructLclFldScenario(); + + // Validates passing an instance member of a struct works + test.RunStructFldScenario(); + } + else + { + // Validates we throw on unsupported hardware + test.RunUnsupportedScenario(); + } + + if (!test.Succeeded) + { + throw new Exception("One or more scenarios did not complete as expected."); + } + } + } + + public sealed unsafe class LoadVector{Op1VectorType}x4Test__{Op1BaseType} + { + private struct DataTable + { + private byte[] inArray; + private byte[] outArray1; + private byte[] outArray2; + private byte[] outArray3; + private byte[] outArray4; + + private GCHandle inHandle; + private GCHandle outHandle1; + private GCHandle outHandle2; + private GCHandle outHandle3; + private GCHandle outHandle4; + + private ulong alignment; + + public DataTable({Op1BaseType}[] outArray1, {Op1BaseType}[] outArray2, {Op1BaseType}[] outArray3, {Op1BaseType}[] outArray4, {Op1BaseType}[] inArray, int alignment) + { + int sizeOfInArray = inArray.Length * Unsafe.SizeOf<{Op1BaseType}>(); + int sizeOfOutArray1 = outArray1.Length * Unsafe.SizeOf<{Op1BaseType}>(); + int sizeOfOutArray2 = outArray2.Length * Unsafe.SizeOf<{Op1BaseType}>(); + int sizeOfOutArray3 = outArray3.Length * Unsafe.SizeOf<{Op1BaseType}>(); + int sizeOfOutArray4 = outArray4.Length * Unsafe.SizeOf<{Op1BaseType}>(); + if ((alignment != 16 && alignment != 8) || (alignment * 4) < sizeOfInArray || (alignment * 2) < sizeOfOutArray1 || (alignment * 2) < sizeOfOutArray2 || (alignment * 2) < sizeOfOutArray3 || (alignment * 2) < sizeOfOutArray4) + { + throw new ArgumentException("Invalid value of alignment"); + } + + this.inArray = new byte[alignment * 4]; + this.outArray1 = new byte[alignment * 2]; + this.outArray2 = new byte[alignment * 2]; + this.outArray3 = new byte[alignment * 2]; + this.outArray4 = new byte[alignment * 2]; + + this.inHandle = GCHandle.Alloc(this.inArray, GCHandleType.Pinned); + this.outHandle1 = GCHandle.Alloc(this.outArray1, GCHandleType.Pinned); + this.outHandle2 = GCHandle.Alloc(this.outArray2, GCHandleType.Pinned); + this.outHandle3 = GCHandle.Alloc(this.outArray3, GCHandleType.Pinned); + this.outHandle4 = GCHandle.Alloc(this.outArray4, GCHandleType.Pinned); + + this.alignment = (ulong)alignment; + + Unsafe.CopyBlockUnaligned(ref Unsafe.AsRef(inArrayPtr), ref Unsafe.As<{Op1BaseType}, byte>(ref inArray[0]), (uint)sizeOfInArray); + } + + public void* inArrayPtr => Align((byte*)(inHandle.AddrOfPinnedObject().ToPointer()), alignment); + public void* outArray1Ptr => Align((byte*)(outHandle1.AddrOfPinnedObject().ToPointer()), alignment); + public void* outArray2Ptr => Align((byte*)(outHandle2.AddrOfPinnedObject().ToPointer()), alignment); + public void* outArray3Ptr => Align((byte*)(outHandle3.AddrOfPinnedObject().ToPointer()), alignment); + public void* outArray4Ptr => Align((byte*)(outHandle4.AddrOfPinnedObject().ToPointer()), alignment); + + + public void Dispose() + { + inHandle.Free(); + outHandle1.Free(); + outHandle2.Free(); + outHandle3.Free(); + outHandle4.Free(); + } + + private static unsafe void* Align(byte* buffer, ulong expectedAlignment) + { + return (void*)(((ulong)buffer + expectedAlignment - 1) & ~(expectedAlignment - 1)); + } + } + + private struct TestStruct + { + public {Op1VectorType}<{Op1BaseType}> _fld1; + public {Op1VectorType}<{Op1BaseType}> _fld2; + public {Op1VectorType}<{Op1BaseType}> _fld3; + public {Op1VectorType}<{Op1BaseType}> _fld4; + + public static TestStruct Create() + { + return new TestStruct(); + } + + public void RunStructFldScenario(LoadVector{Op1VectorType}x4Test__{Op1BaseType} testClass) + { + (_fld1, _fld2, _fld3, _fld4) = {Isa}.{Method}(({Op1BaseType}*)testClass._dataTable.inArrayPtr); + + testClass.ValidateResult(_fld1, _fld2, _fld3, _fld4, testClass._dataTable.inArrayPtr); + } + } + + private static readonly int LargestVectorSize = {LargestVectorSize}; + + private static readonly int OpElementCount = Unsafe.SizeOf<{Op1VectorType}<{Op1BaseType}>>() / sizeof({Op1BaseType}); + private static readonly int DestElementCount = OpElementCount * 4; + + private static {Op1BaseType}[] _data = new {Op1BaseType}[DestElementCount]; + + private {Op1VectorType}<{Op1BaseType}> _fld1; + private {Op1VectorType}<{Op1BaseType}> _fld2; + private {Op1VectorType}<{Op1BaseType}> _fld3; + private {Op1VectorType}<{Op1BaseType}> _fld4; + + private DataTable _dataTable; + + public LoadVector{Op1VectorType}x4Test__{Op1BaseType}() + { + Succeeded = true; + for (var i = 0; i < OpElementCount; i++) { _data[i] = {NextValueOp2}; } + _dataTable = new DataTable(new {Op1BaseType}[OpElementCount], new {Op1BaseType}[OpElementCount], new {Op1BaseType}[OpElementCount], new {Op1BaseType}[OpElementCount], _data, LargestVectorSize); + } + + public bool IsSupported => {Isa}.IsSupported; + + public bool Succeeded { get; set; } + + public void RunBasicScenario() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunBasicScenario)); + + var result = {Isa}.{Method}(({Op1BaseType}*)(_dataTable.inArrayPtr)); + + Unsafe.Write(_dataTable.outArray1Ptr, result.Item1); + Unsafe.Write(_dataTable.outArray2Ptr, result.Item2); + Unsafe.Write(_dataTable.outArray3Ptr, result.Item3); + Unsafe.Write(_dataTable.outArray4Ptr, result.Item4); + ValidateResult(_dataTable.outArray1Ptr, _dataTable.outArray2Ptr, _dataTable.outArray3Ptr, _dataTable.outArray4Ptr, _dataTable.inArrayPtr); + } + + public void RunReflectionScenario() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunReflectionScenario)); + + var result = typeof({Isa}).GetMethod(nameof({Isa}.{Method}), new Type[] { typeof({Op1BaseType}*) }) + .Invoke(null, new object[] { + Pointer.Box(_dataTable.inArrayPtr, typeof({Op1BaseType}*)) + }); + + var output = (({Op1VectorType}<{Op1BaseType}>,{Op1VectorType}<{Op1BaseType}>,{Op1VectorType}<{Op1BaseType}>,{Op1VectorType}<{Op1BaseType}>))result; + Unsafe.Write(_dataTable.outArray1Ptr, output.Item1); + Unsafe.Write(_dataTable.outArray2Ptr, output.Item2); + Unsafe.Write(_dataTable.outArray3Ptr, output.Item3); + Unsafe.Write(_dataTable.outArray4Ptr, output.Item4); + ValidateResult(_dataTable.outArray1Ptr, _dataTable.outArray2Ptr, _dataTable.outArray3Ptr, _dataTable.outArray4Ptr, _dataTable.inArrayPtr); + } + + public void RunClassFldScenario() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunClassFldScenario)); + + (_fld1, _fld2, _fld3, _fld4) = {Isa}.{Method}(({Op1BaseType}*)_dataTable.inArrayPtr); + + ValidateResult(_fld1, _fld2, _fld3, _fld4, _dataTable.inArrayPtr); + } + + public void RunStructLclFldScenario() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunStructLclFldScenario)); + + var test = TestStruct.Create(); + (test._fld1, test._fld2, test._fld3, test._fld4) = {Isa}.{Method}(({Op1BaseType}*)_dataTable.inArrayPtr); + + Unsafe.Write(_dataTable.outArray1Ptr, test._fld1); + Unsafe.Write(_dataTable.outArray2Ptr, test._fld2); + Unsafe.Write(_dataTable.outArray3Ptr, test._fld3); + Unsafe.Write(_dataTable.outArray4Ptr, test._fld4); + ValidateResult(_dataTable.outArray1Ptr, _dataTable.outArray2Ptr, _dataTable.outArray3Ptr, _dataTable.outArray4Ptr, _dataTable.inArrayPtr); + } + + public void RunStructFldScenario() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunStructFldScenario)); + + var test = TestStruct.Create(); + test.RunStructFldScenario(this); + } + + public void RunUnsupportedScenario() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunUnsupportedScenario)); + + bool succeeded = false; + + try + { + RunClassFldScenario(); + } + catch (PlatformNotSupportedException) + { + succeeded = true; + } + + if (!succeeded) + { + Succeeded = false; + } + } + + private void ValidateResult(void* result1, void* result2, void* result3, void* result4, void* input, [CallerMemberName] string method = "") + { + {Op1BaseType}[] inArray = new {Op1BaseType}[DestElementCount]; + {Op1BaseType}[] outArray1 = new {Op1BaseType}[OpElementCount]; + {Op1BaseType}[] outArray2 = new {Op1BaseType}[OpElementCount]; + {Op1BaseType}[] outArray3 = new {Op1BaseType}[OpElementCount]; + {Op1BaseType}[] outArray4 = new {Op1BaseType}[OpElementCount]; + + Unsafe.CopyBlockUnaligned(ref Unsafe.As<{Op1BaseType}, byte>(ref inArray[0]), ref Unsafe.AsRef(input), (uint)Unsafe.SizeOf<{Op1VectorType}<{Op1BaseType}>>() * 4); + Unsafe.CopyBlockUnaligned(ref Unsafe.As<{Op1BaseType}, byte>(ref outArray1[0]), ref Unsafe.AsRef(result1), (uint)Unsafe.SizeOf<{Op1VectorType}<{Op1BaseType}>>()); + Unsafe.CopyBlockUnaligned(ref Unsafe.As<{Op1BaseType}, byte>(ref outArray2[0]), ref Unsafe.AsRef(result2), (uint)Unsafe.SizeOf<{Op1VectorType}<{Op1BaseType}>>()); + Unsafe.CopyBlockUnaligned(ref Unsafe.As<{Op1BaseType}, byte>(ref outArray3[0]), ref Unsafe.AsRef(result3), (uint)Unsafe.SizeOf<{Op1VectorType}<{Op1BaseType}>>()); + Unsafe.CopyBlockUnaligned(ref Unsafe.As<{Op1BaseType}, byte>(ref outArray4[0]), ref Unsafe.AsRef(result4), (uint)Unsafe.SizeOf<{Op1VectorType}<{Op1BaseType}>>()); + + ValidateResult(inArray, outArray1, outArray2, outArray3, outArray4, method); + } + + private void ValidateResult({Op1VectorType}<{Op1BaseType}> result1, {Op1VectorType}<{Op1BaseType}> result2, {Op1VectorType}<{Op1BaseType}> result3, {Op1VectorType}<{Op1BaseType}> result4, void* input, [CallerMemberName] string method = "") + { + {Op1BaseType}[] inArray = new {Op1BaseType}[DestElementCount]; + {Op1BaseType}[] outArray1 = new {Op1BaseType}[OpElementCount]; + {Op1BaseType}[] outArray2 = new {Op1BaseType}[OpElementCount]; + {Op1BaseType}[] outArray3 = new {Op1BaseType}[OpElementCount]; + {Op1BaseType}[] outArray4 = new {Op1BaseType}[OpElementCount]; + + Unsafe.CopyBlockUnaligned(ref Unsafe.As<{Op1BaseType}, byte>(ref inArray[0]), ref Unsafe.AsRef(input), (uint)Unsafe.SizeOf<{Op1VectorType}<{Op1BaseType}>>() * 4); + Unsafe.WriteUnaligned(ref Unsafe.As<{Op1BaseType}, byte>(ref outArray1[0]), result1); + Unsafe.WriteUnaligned(ref Unsafe.As<{Op1BaseType}, byte>(ref outArray2[0]), result2); + Unsafe.WriteUnaligned(ref Unsafe.As<{Op1BaseType}, byte>(ref outArray3[0]), result3); + Unsafe.WriteUnaligned(ref Unsafe.As<{Op1BaseType}, byte>(ref outArray4[0]), result4); + + ValidateResult(inArray, outArray1, outArray2, outArray3, outArray4, method); + } + + private void ValidateResult({Op1BaseType}[] input, {Op1BaseType}[] result1, {Op1BaseType}[] result2, {Op1BaseType}[] result3, {Op1BaseType}[] result4, [CallerMemberName] string method = "") + { + bool succeeded = true; + + for (int i = 0; i < OpElementCount; i++) + { + if ({ValidateIterResult}) + { + succeeded = false; + break; + } + } + + if (!succeeded) + { + TestLibrary.TestFramework.LogInformation($"{nameof({Isa})}.{nameof({Isa}.{Method})}({Op1VectorType}<{Op1BaseType}>): {Method} failed:"); + TestLibrary.TestFramework.LogInformation($" input: ({string.Join(", ", input)})"); + TestLibrary.TestFramework.LogInformation($" result1: ({string.Join(", ", result1)})"); + TestLibrary.TestFramework.LogInformation($" result2: ({string.Join(", ", result2)})"); + TestLibrary.TestFramework.LogInformation($" result3: ({string.Join(", ", result3)})"); + TestLibrary.TestFramework.LogInformation($" result4: ({string.Join(", ", result4)})"); + TestLibrary.TestFramework.LogInformation(string.Empty); + + Succeeded = false; + } + } + } +} \ No newline at end of file From 9476f404988e5f18ecdf99f19d9a4cb5a7bbb219 Mon Sep 17 00:00:00 2001 From: Matous Kozak <55735845+matouskozak@users.noreply.github.com> Date: Thu, 5 Oct 2023 07:47:15 +0200 Subject: [PATCH 16/21] [mono] Fix linux-x64 AOT-llvm perf job (#92644) * fix AOT-llvm flags for linux_x64 perf job * unify x64 and arm64 AOT build flags for Perf jobs * Setup x64 MonoAOT runs to be tagged as LLVM. * run mono-aot-cross command on Helix before job --------- Co-authored-by: Parker Bibus --- eng/pipelines/coreclr/perf-non-wasm-jobs.yml | 2 +- eng/pipelines/coreclr/perf_slow.yml | 2 +- eng/pipelines/coreclr/templates/perf-job.yml | 4 +++- eng/testing/performance/microbenchmarks.proj | 9 ++++++++- eng/testing/performance/performance-setup.ps1 | 1 + eng/testing/performance/performance-setup.sh | 2 ++ 6 files changed, 16 insertions(+), 4 deletions(-) diff --git a/eng/pipelines/coreclr/perf-non-wasm-jobs.yml b/eng/pipelines/coreclr/perf-non-wasm-jobs.yml index ce5321e60aa293..6d7f9b05a3c997 100644 --- a/eng/pipelines/coreclr/perf-non-wasm-jobs.yml +++ b/eng/pipelines/coreclr/perf-non-wasm-jobs.yml @@ -31,7 +31,7 @@ jobs: platforms: - linux_x64 jobParameters: - buildArgs: -s mono+libs+host+packs -c $(_BuildConfig) /p:BuildMonoAOTCrossCompiler=true /p:MonoLibClang="/usr/local/lib/libclang.so.16" /p:AotHostArchitecture=x64 /p:AotHostOS=linux + buildArgs: -s mono+libs+host+packs -c $(_BuildConfig) /p:MonoAOTEnableLLVM=true /p:MonoEnableLLVM=true /p:BuildMonoAOTCrossCompiler=true /p:MonoLibClang="/usr/local/lib/libclang.so.16" /p:AotHostArchitecture=x64 /p:AotHostOS=linux nameSuffix: AOT isOfficialBuild: false postBuildSteps: diff --git a/eng/pipelines/coreclr/perf_slow.yml b/eng/pipelines/coreclr/perf_slow.yml index 8a7bd972ba250d..255c24dfec821b 100644 --- a/eng/pipelines/coreclr/perf_slow.yml +++ b/eng/pipelines/coreclr/perf_slow.yml @@ -98,7 +98,7 @@ extends: platforms: - linux_arm64 jobParameters: - buildArgs: -s mono+libs+host+packs -c $(_BuildConfig) /p:MonoAOTEnableLLVM=true /p:MonoBundleLLVMOptimizer=true /p:BuildMonoAOTCrossCompiler=true /p:MonoLibClang="/usr/local/lib/libclang.so.16" /p:AotHostArchitecture=arm64 /p:AotHostOS=linux + buildArgs: -s mono+libs+host+packs -c $(_BuildConfig) /p:MonoAOTEnableLLVM=true /p:MonoEnableLLVM=true /p:BuildMonoAOTCrossCompiler=true /p:MonoLibClang="/usr/local/lib/libclang.so.16" /p:AotHostArchitecture=arm64 /p:AotHostOS=linux nameSuffix: AOT isOfficialBuild: false postBuildSteps: diff --git a/eng/pipelines/coreclr/templates/perf-job.yml b/eng/pipelines/coreclr/templates/perf-job.yml index 53074d556c009e..dd536b62152b2a 100644 --- a/eng/pipelines/coreclr/templates/perf-job.yml +++ b/eng/pipelines/coreclr/templates/perf-job.yml @@ -104,7 +104,9 @@ jobs: extraSetupParameters: --architecture ${{ parameters.archType }} --wasmbundle $(librariesDownloadDir)/bin/wasm --javascriptengine ${{ parameters.javascriptEngine }} --hybridglobalization ${{ parameters.hybridGlobalization }} $(extraSetupParametersSuffix) ${{ if and(eq(parameters.runtimeType, 'wasm'), eq(parameters.codeGenType, 'AOT')) }}: extraSetupParameters: --architecture ${{ parameters.archType }} --wasmbundle $(librariesDownloadDir)/bin/wasm --wasmaot --javascriptengine ${{ parameters.javascriptEngine }} $(extraSetupParametersSuffix) - ${{ if and(eq(parameters.codeGenType, 'AOT'), ne(parameters.runtimeType, 'wasm')) }}: + ${{ if and(eq(parameters.codeGenType, 'AOT'), ne(parameters.runtimeType, 'wasm'), eq(parameters.archType, 'x64')) }}: + extraSetupParameters: --architecture ${{ parameters.archType }} --monoaot $(librariesDownloadDir)/bin/aot --llvm + ${{ if and(eq(parameters.codeGenType, 'AOT'), ne(parameters.runtimeType, 'wasm'), eq(parameters.archType, 'arm64')) }}: # Temporarily keep arm64 as non-llvm tagged until switch to 9.0 extraSetupParameters: --architecture ${{ parameters.archType }} --monoaot $(librariesDownloadDir)/bin/aot ${{ if and(eq(parameters.runtimeType, 'coreclr'), ne(parameters.osSubGroup, '_musl')) }}: extraSetupParameters: --corerootdirectory $(Build.SourcesDirectory)/artifacts/tests/coreclr/${{ parameters.osGroup }}.${{ parameters.archType }}.Release/Tests/Core_Root --architecture ${{ parameters.archType }} diff --git a/eng/testing/performance/microbenchmarks.proj b/eng/testing/performance/microbenchmarks.proj index 394aa992d41d2d..309be61ffdb8b8 100644 --- a/eng/testing/performance/microbenchmarks.proj +++ b/eng/testing/performance/microbenchmarks.proj @@ -54,6 +54,13 @@ --corerun $(BaseDirectory)/dotnet-mono/shared/Microsoft.NETCore.App/$(ProductVersion)/corerun + + $(HelixPreCommands);%HELIX_CORRELATION_PAYLOAD%\monoaot\mono-aot-cross --llvm --version + + + $(HelixPreCommands);$HELIX_CORRELATION_PAYLOAD/monoaot/mono-aot-cross --llvm --version + + --corerun $(CoreRun) @@ -124,7 +131,7 @@ false - diff --git a/eng/testing/performance/performance-setup.ps1 b/eng/testing/performance/performance-setup.ps1 index 30b0271b0b61ee..4fc4c1f107cbf3 100644 --- a/eng/testing/performance/performance-setup.ps1 +++ b/eng/testing/performance/performance-setup.ps1 @@ -192,6 +192,7 @@ Write-PipelineSetVariable -Name 'UseBaselineCoreRun' -Value "$UseBaselineCoreRun Write-PipelineSetVariable -Name 'RunFromPerfRepo' -Value "$RunFromPerformanceRepo" -IsMultiJobVariable $false Write-PipelineSetVariable -Name 'Compare' -Value "$Compare" -IsMultiJobVariable $false Write-PipelineSetVariable -Name 'MonoDotnet' -Value "$UsingMono" -IsMultiJobVariable $false +Write-PipelineSetVariable -Name 'MonoAOT' -Value "$MonoAOT" -IsMultiJobVariable $false Write-PipelineSetVariable -Name 'iOSLlvmBuild' -Value "$iOSLlvmBuild" -IsMultiJobVariable $false Write-PipelineSetVariable -Name 'iOSStripSymbols' -Value "$iOSStripSymbols" -IsMultiJobVariable $false Write-PipelineSetVariable -Name 'hybridGlobalization' -Value "$HybridGlobalization" -IsMultiJobVariable $false diff --git a/eng/testing/performance/performance-setup.sh b/eng/testing/performance/performance-setup.sh index cb4b2af97f7ba6..484d9f1bc36a8d 100755 --- a/eng/testing/performance/performance-setup.sh +++ b/eng/testing/performance/performance-setup.sh @@ -239,6 +239,7 @@ while (($# > 0)); do echo " --latestdotnet --dotnet-versions will not be specified. --dotnet-versions defaults to LKG version in global.json " echo " --dotnetversions Passed as '--dotnet-versions ' to the setup script" echo " --alpine Set for runs on Alpine" + echo " --llvm Set LLVM for Mono runs" echo " --iosmono Set for ios Mono/Maui runs" echo " --iosnativeaot Set for ios Native AOT runs" echo " --iosllvmbuild Set LLVM for iOS Mono/Maui runs" @@ -519,6 +520,7 @@ Write-PipelineSetVariable -name "Kind" -value "$kind" -is_multi_job_variable fal Write-PipelineSetVariable -name "_BuildConfig" -value "$_BuildConfig" -is_multi_job_variable false Write-PipelineSetVariable -name "Compare" -value "$compare" -is_multi_job_variable false Write-PipelineSetVariable -name "MonoDotnet" -value "$using_mono" -is_multi_job_variable false +Write-PipelineSetVariable -name "MonoAOT" -value "$monoaot" -is_multi_job_variable false Write-PipelineSetVariable -name "WasmDotnet" -value "$using_wasm" -is_multi_job_variable false Write-PipelineSetVariable -Name 'iOSLlvmBuild' -Value "$iosllvmbuild" -is_multi_job_variable false Write-PipelineSetVariable -Name 'iOSStripSymbols' -Value "$iosstripsymbols" -is_multi_job_variable false From f64bd37cbe8cc60c20c1f919703620d2a1c19e33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Strehovsk=C3=BD?= Date: Thu, 5 Oct 2023 15:54:33 +0900 Subject: [PATCH 17/21] Remove ActiveIssue on HostFactoryResolver tests (#92983) This whole things is not applicable to NativeAOT, don't even build it. --- .../tests/HostFactoryResolverTests.cs | 6 ------ src/libraries/tests.proj | 1 + 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/src/libraries/Microsoft.Extensions.HostFactoryResolver/tests/HostFactoryResolverTests.cs b/src/libraries/Microsoft.Extensions.HostFactoryResolver/tests/HostFactoryResolverTests.cs index 5e82fe9954cd23..fee56f79fb003e 100644 --- a/src/libraries/Microsoft.Extensions.HostFactoryResolver/tests/HostFactoryResolverTests.cs +++ b/src/libraries/Microsoft.Extensions.HostFactoryResolver/tests/HostFactoryResolverTests.cs @@ -108,7 +108,6 @@ public void CreateHostBuilderPattern_CanFindHostBuilder() [Fact] [DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(CreateHostBuilderPatternTestSite.Program))] [DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(Host))] - [ActiveIssue("https://github.com/dotnet/runtime/issues/73420", typeof(PlatformDetection), nameof(PlatformDetection.IsNativeAot))] public void CreateHostBuilderPattern_CanFindServiceProvider() { var factory = HostFactoryResolver.ResolveServiceProviderFactory(typeof(CreateHostBuilderPatternTestSite.Program).Assembly); @@ -138,7 +137,6 @@ public void CreateHostBuilderPattern__Invalid_CantFindServiceProvider() [ConditionalFact(typeof(PlatformDetection), nameof(PlatformDetection.IsThreadingSupported))] [DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(NoSpecialEntryPointPattern.Program))] - [ActiveIssue("https://github.com/dotnet/runtime/issues/73420", typeof(PlatformDetection), nameof(PlatformDetection.IsNativeAot))] public void NoSpecialEntryPointPattern() { var factory = HostFactoryResolver.ResolveServiceProviderFactory(typeof(NoSpecialEntryPointPattern.Program).Assembly, s_WaitTimeout); @@ -237,7 +235,6 @@ public void NoSpecialEntryPointPatternHangs() [ConditionalFact(typeof(PlatformDetection), nameof(PlatformDetection.IsThreadingSupported))] [DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(NoSpecialEntryPointPatternMainNoArgs.Program))] - [ActiveIssue("https://github.com/dotnet/runtime/issues/73420", typeof(PlatformDetection), nameof(PlatformDetection.IsNativeAot))] public void NoSpecialEntryPointPatternMainNoArgs() { var factory = HostFactoryResolver.ResolveServiceProviderFactory(typeof(NoSpecialEntryPointPatternMainNoArgs.Program).Assembly, s_WaitTimeout); @@ -248,7 +245,6 @@ public void NoSpecialEntryPointPatternMainNoArgs() [ConditionalFact(typeof(PlatformDetection), nameof(PlatformDetection.IsThreadingSupported))] [DynamicDependency(DynamicallyAccessedMemberTypes.All, "Program", "TopLevelStatements")] - [ActiveIssue("https://github.com/dotnet/runtime/issues/73420", typeof(PlatformDetection), nameof(PlatformDetection.IsNativeAot))] public void TopLevelStatements() { var assembly = Assembly.Load("TopLevelStatements"); @@ -270,7 +266,6 @@ public void TopLevelStatementsTestsTimeout() } [ConditionalFact(typeof(PlatformDetection), nameof(PlatformDetection.IsThreadingSupported))] - [ActiveIssue("https://github.com/dotnet/runtime/issues/73420", typeof(PlatformDetection), nameof(PlatformDetection.IsNativeAot))] [DynamicDependency(DynamicallyAccessedMemberTypes.All, "Program", "ApplicationNameSetFromArgument")] public void ApplicationNameSetFromArgument() { @@ -284,7 +279,6 @@ public void ApplicationNameSetFromArgument() [ConditionalFact(typeof(PlatformDetection), nameof(PlatformDetection.IsThreadingSupported))] [DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(NoSpecialEntryPointPattern.Program))] - [ActiveIssue("https://github.com/dotnet/runtime/issues/73420", typeof(PlatformDetection), nameof(PlatformDetection.IsNativeAot))] [ActiveIssue("https://github.com/dotnet/runtime/issues/91538", typeof(PlatformDetection), nameof(PlatformDetection.IsWasmThreadingSupported))] public void NoSpecialEntryPointPatternCanRunInParallel() { diff --git a/src/libraries/tests.proj b/src/libraries/tests.proj index 41ba22f28628ea..4af1caa2bd52c2 100644 --- a/src/libraries/tests.proj +++ b/src/libraries/tests.proj @@ -433,6 +433,7 @@ + From 52aca8c55a0198a39e4a3ed880cea99d8c6cca67 Mon Sep 17 00:00:00 2001 From: Ilona Tomkowicz <32700855+ilonatommy@users.noreply.github.com> Date: Thu, 5 Oct 2023 09:07:57 +0200 Subject: [PATCH 18/21] [wasm][debugger] Support passing negative/positive numbers to methods. (#92754) * Fix. * Fix for positive. * @radical's feedback --- .../MemberReferenceResolver.cs | 5 + .../BrowserDebugProxy/MonoSDBHelper.cs | 121 ++++++++++++------ .../EvaluateOnCallFrame2Tests.cs | 4 + .../debugger-test/debugger-evaluate-test.cs | 2 + 4 files changed, 95 insertions(+), 37 deletions(-) diff --git a/src/mono/wasm/debugger/BrowserDebugProxy/MemberReferenceResolver.cs b/src/mono/wasm/debugger/BrowserDebugProxy/MemberReferenceResolver.cs index c274d59dc855fd..906acc8559bd9f 100644 --- a/src/mono/wasm/debugger/BrowserDebugProxy/MemberReferenceResolver.cs +++ b/src/mono/wasm/debugger/BrowserDebugProxy/MemberReferenceResolver.cs @@ -752,6 +752,11 @@ public async Task Resolve(InvocationExpressionSyntax method, Dictionary if (!await commandParamsObjWriter.WriteConst(literal, context.SdbAgent, token)) throw new InternalErrorException($"Unable to evaluate method '{methodName}'. Unable to write LiteralExpressionSyntax into binary writer."); } + else if (arg.Expression is PrefixUnaryExpressionSyntax negativeLiteral) + { + if (!commandParamsObjWriter.WriteConst(negativeLiteral)) + throw new InternalErrorException($"Unable to evaluate method '{methodName}'. Unable to write PrefixUnaryExpressionSyntax into binary writer."); + } else if (arg.Expression is IdentifierNameSyntax identifierName) { if (!memberAccessValues.TryGetValue(identifierName.Identifier.Text, out JObject argValue)) diff --git a/src/mono/wasm/debugger/BrowserDebugProxy/MonoSDBHelper.cs b/src/mono/wasm/debugger/BrowserDebugProxy/MonoSDBHelper.cs index 844ed5b4d54193..ca37224059a74e 100644 --- a/src/mono/wasm/debugger/BrowserDebugProxy/MonoSDBHelper.cs +++ b/src/mono/wasm/debugger/BrowserDebugProxy/MonoSDBHelper.cs @@ -650,51 +650,53 @@ public async Task WriteConst(ElementType? type, object value, MonoSDBHelpe return false; } - public async Task WriteConst(LiteralExpressionSyntax constValue, MonoSDBHelper SdbHelper, CancellationToken token) + public bool WriteConst(PrefixUnaryExpressionSyntax constValue) { switch (constValue.Kind()) { - case SyntaxKind.NumericLiteralExpression: + case SyntaxKind.UnaryMinusExpression: { - switch (constValue.Token.Value) { - case double d: - Write(ElementType.R8, d); - break; - case float f: - Write(ElementType.R4, f); - break; - case long l: - Write(ElementType.I8, l); - break; - case ulong ul: - Write(ElementType.U8, ul); - break; - case byte b: - Write(ElementType.U1, (int)b); - break; - case sbyte sb: - Write(ElementType.I1, (uint)sb); - break; - case ushort us: - Write(ElementType.U2, (int)us); - break; - case short s: - Write(ElementType.I2, (uint)s); - break; - case uint ui: - Write(ElementType.U4, ui); - break; - case IntPtr ip: - Write(ElementType.I, (int)ip); - break; - case UIntPtr up: - Write(ElementType.U, (uint)up); + switch (constValue.Operand) + { + case LiteralExpressionSyntax les: + { + return WriteNumber(les.Token.Value, convertToNegative: true); + } + default: + { + // not supported yet break; + } + } + break; + } + case SyntaxKind.UnaryPlusExpression: + { + switch (constValue.Operand) + { + case LiteralExpressionSyntax les: + { + return WriteNumber(les.Token.Value, convertToNegative: false); + } default: - Write(ElementType.I4, (int)constValue.Token.Value); + { + // not supported yet break; + } } - return true; + break; + } + } + return false; + } + + public async Task WriteConst(LiteralExpressionSyntax constValue, MonoSDBHelper SdbHelper, CancellationToken token) + { + switch (constValue.Kind()) + { + case SyntaxKind.NumericLiteralExpression: + { + return WriteNumber(constValue.Token.Value); } case SyntaxKind.StringLiteralExpression: { @@ -728,6 +730,51 @@ public async Task WriteConst(LiteralExpressionSyntax constValue, MonoSDBHe return false; } + public bool WriteNumber(object number, bool convertToNegative=false) + { + int coeff = convertToNegative ? -1 : 1; + switch (number) + { + case double d: + Write(ElementType.R8, d * coeff); + break; + case float f: + Write(ElementType.R4, f * coeff); + break; + case long l: + Write(ElementType.I8, l * coeff); + break; + case ulong ul: + Write(ElementType.U8, ul); + break; + case byte b: + Write(ElementType.U1, (int)b); + break; + case sbyte sb: + Write(ElementType.I1, (uint)sb); + break; + case ushort us: + Write(ElementType.U2, (int)us); + break; + case short s: + Write(ElementType.I2, (uint)s * coeff); + break; + case uint ui: + Write(ElementType.U4, ui); + break; + case IntPtr ip: + Write(ElementType.I, (int)ip); + break; + case UIntPtr up: + Write(ElementType.U, (uint)up); + break; + default: + Write(ElementType.I4, (int)number * coeff); + break; + } + return true; + } + public async Task WriteJsonValue(JObject objValue, MonoSDBHelper SdbHelper, ElementType? expectedType, CancellationToken token) { switch (objValue["type"].Value()) diff --git a/src/mono/wasm/debugger/DebuggerTestSuite/EvaluateOnCallFrame2Tests.cs b/src/mono/wasm/debugger/DebuggerTestSuite/EvaluateOnCallFrame2Tests.cs index 143f25d1740eeb..1e7a6a3d0014af 100644 --- a/src/mono/wasm/debugger/DebuggerTestSuite/EvaluateOnCallFrame2Tests.cs +++ b/src/mono/wasm/debugger/DebuggerTestSuite/EvaluateOnCallFrame2Tests.cs @@ -497,6 +497,10 @@ await EvaluateOnCallFrameAndCheck(id, ("test.GetDefaultAndRequiredParam(2)", TNumber(5)), ("test.GetDefaultAndRequiredParam(3, 2)", TNumber(5)), + ("test.GetDefaultAndRequiredParam(3, +2)", TNumber(5)), + ("test.GetDefaultAndRequiredParam(3, -2)", TNumber(1)), + ("test.GetDefaultAndRequiredParam(-123l, -1.1f)", TNumber("-124.1", isDecimal: true)), // long, float + ("test.GetDefaultAndRequiredParam(-0.23)", TNumber("-32768.23", isDecimal: true)), // double, short ("test.GetDefaultAndRequiredParamMixedTypes(\"a\")", TString("a; -1; False")), ("test.GetDefaultAndRequiredParamMixedTypes(\"a\", 23)", TString("a; 23; False")), ("test.GetDefaultAndRequiredParamMixedTypes(\"a\", 23, true)", TString("a; 23; True")) diff --git a/src/mono/wasm/debugger/tests/debugger-test/debugger-evaluate-test.cs b/src/mono/wasm/debugger/tests/debugger-test/debugger-evaluate-test.cs index 0472e62c0a56af..b2339fc29c6f5d 100644 --- a/src/mono/wasm/debugger/tests/debugger-test/debugger-evaluate-test.cs +++ b/src/mono/wasm/debugger/tests/debugger-test/debugger-evaluate-test.cs @@ -1996,6 +1996,8 @@ public class TestClass public bool GetNull(object param = null) => param == null ? true : false; public int GetDefaultAndRequiredParam(int requiredParam, int optionalParam = 3) => requiredParam + optionalParam; + public float GetDefaultAndRequiredParam(long requiredParam, float optionalParam = 3.3f) => requiredParam + optionalParam; + public double GetDefaultAndRequiredParam(double requiredParam, short optionalParam = -32768) => requiredParam + optionalParam; public string GetDefaultAndRequiredParamMixedTypes(string requiredParam, int optionalParamFirst = -1, bool optionalParamSecond = false) => $"{requiredParam}; {optionalParamFirst}; {optionalParamSecond}"; } From 6e8259c49a6927e96bcaa3ae0ebd1023147d6675 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20K=C3=B6plinger?= Date: Thu, 5 Oct 2023 10:09:22 +0200 Subject: [PATCH 19/21] Fix conflicting test assembly name in classloader tests (#93012) dd52 was building test.dll and dev10_897464 was building Test.dll which caused assembly resolving conflicts: > warning MSB3243: No way to resolve conflict between "Test, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" and "test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null". Choosing "Test, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" arbitrarily. Fixed by making the test assembly names unique for each test. --- src/tests/Loader/classloader/regressions/dd52/dd52.csproj | 2 +- .../classloader/regressions/dd52/{test.il => test_dd52.il} | 2 +- .../regressions/dd52/{test.ilproj => test_dd52.ilproj} | 2 +- .../regressions/dev10_897464/{Test.il => Test_dev10_897464.il} | 2 +- .../dev10_897464/{Test.ilproj => Test_dev10_897464.ilproj} | 2 +- .../classloader/regressions/dev10_897464/dev10_897464.csproj | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) rename src/tests/Loader/classloader/regressions/dd52/{test.il => test_dd52.il} (98%) rename src/tests/Loader/classloader/regressions/dd52/{test.ilproj => test_dd52.ilproj} (79%) rename src/tests/Loader/classloader/regressions/dev10_897464/{Test.il => Test_dev10_897464.il} (97%) rename src/tests/Loader/classloader/regressions/dev10_897464/{Test.ilproj => Test_dev10_897464.ilproj} (76%) diff --git a/src/tests/Loader/classloader/regressions/dd52/dd52.csproj b/src/tests/Loader/classloader/regressions/dd52/dd52.csproj index ef5d040dbf2335..df061e65cb85cd 100644 --- a/src/tests/Loader/classloader/regressions/dd52/dd52.csproj +++ b/src/tests/Loader/classloader/regressions/dd52/dd52.csproj @@ -9,6 +9,6 @@ - + diff --git a/src/tests/Loader/classloader/regressions/dd52/test.il b/src/tests/Loader/classloader/regressions/dd52/test_dd52.il similarity index 98% rename from src/tests/Loader/classloader/regressions/dd52/test.il rename to src/tests/Loader/classloader/regressions/dd52/test_dd52.il index 9afadc4207dec6..02288c2bc4d639 100644 --- a/src/tests/Loader/classloader/regressions/dd52/test.il +++ b/src/tests/Loader/classloader/regressions/dd52/test_dd52.il @@ -2,7 +2,7 @@ // The .NET Foundation licenses this file to you under the MIT license. .assembly extern System.Console { } -.assembly test {} +.assembly test_dd52 {} .assembly extern mscorlib {} diff --git a/src/tests/Loader/classloader/regressions/dd52/test.ilproj b/src/tests/Loader/classloader/regressions/dd52/test_dd52.ilproj similarity index 79% rename from src/tests/Loader/classloader/regressions/dd52/test.ilproj rename to src/tests/Loader/classloader/regressions/dd52/test_dd52.ilproj index 3f99060e125034..06fb5d7c728751 100644 --- a/src/tests/Loader/classloader/regressions/dd52/test.ilproj +++ b/src/tests/Loader/classloader/regressions/dd52/test_dd52.ilproj @@ -3,6 +3,6 @@ Library - + diff --git a/src/tests/Loader/classloader/regressions/dev10_897464/Test.il b/src/tests/Loader/classloader/regressions/dev10_897464/Test_dev10_897464.il similarity index 97% rename from src/tests/Loader/classloader/regressions/dev10_897464/Test.il rename to src/tests/Loader/classloader/regressions/dev10_897464/Test_dev10_897464.il index 1c3bd8ae3fee87..80dd5175dc8874 100644 --- a/src/tests/Loader/classloader/regressions/dev10_897464/Test.il +++ b/src/tests/Loader/classloader/regressions/dev10_897464/Test_dev10_897464.il @@ -6,7 +6,7 @@ { } -.assembly Test +.assembly Test_dev10_897464 { .hash algorithm 0x00008004 .ver 1:0:0:0 diff --git a/src/tests/Loader/classloader/regressions/dev10_897464/Test.ilproj b/src/tests/Loader/classloader/regressions/dev10_897464/Test_dev10_897464.ilproj similarity index 76% rename from src/tests/Loader/classloader/regressions/dev10_897464/Test.ilproj rename to src/tests/Loader/classloader/regressions/dev10_897464/Test_dev10_897464.ilproj index e95b240b41fafa..29392fd34ea11b 100644 --- a/src/tests/Loader/classloader/regressions/dev10_897464/Test.ilproj +++ b/src/tests/Loader/classloader/regressions/dev10_897464/Test_dev10_897464.ilproj @@ -3,6 +3,6 @@ Library - + diff --git a/src/tests/Loader/classloader/regressions/dev10_897464/dev10_897464.csproj b/src/tests/Loader/classloader/regressions/dev10_897464/dev10_897464.csproj index df033fd8733768..74deb9820a121f 100644 --- a/src/tests/Loader/classloader/regressions/dev10_897464/dev10_897464.csproj +++ b/src/tests/Loader/classloader/regressions/dev10_897464/dev10_897464.csproj @@ -9,6 +9,6 @@ - + From ffa4ef75ec135a64a30e14df5c2afca340ee1203 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Strehovsk=C3=BD?= Date: Thu, 5 Oct 2023 17:44:34 +0900 Subject: [PATCH 20/21] Don't widen to Int128 in CastCache (#92984) Leftover change from hackathon. Existing code is widening to Int128 and then counting zeros. It still worked because we only use it for bit shifting and bit shifts do wrap around if they're > 64. But this was bringing Int128 into `Runtime.Base` in my hackathon project. --- .../src/System/Runtime/CompilerServices/CastCache.cs | 2 +- .../src/System/Runtime/CompilerServices/GenericCache.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/Runtime/CompilerServices/CastCache.cs b/src/libraries/System.Private.CoreLib/src/System/Runtime/CompilerServices/CastCache.cs index 7653749d5d5f28..22f9e762d473b5 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Runtime/CompilerServices/CastCache.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Runtime/CompilerServices/CastCache.cs @@ -250,7 +250,7 @@ internal static CastResult TryGet(int[] table, nuint source, nuint target) TableMask(ref tableData) = size - 1; // Fibonacci hash reduces the value into desired range by shifting right by the number of leading zeroes in 'size-1' - byte shift = (byte)BitOperations.LeadingZeroCount(size - 1); + byte shift = (byte)BitOperations.LeadingZeroCount((nuint)(size - 1)); HashShift(ref tableData) = shift; return table; diff --git a/src/libraries/System.Private.CoreLib/src/System/Runtime/CompilerServices/GenericCache.cs b/src/libraries/System.Private.CoreLib/src/System/Runtime/CompilerServices/GenericCache.cs index 712f5ed924645c..31bd1ff9b50fe6 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Runtime/CompilerServices/GenericCache.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Runtime/CompilerServices/GenericCache.cs @@ -230,7 +230,7 @@ internal bool TryGet(TKey key, out TValue? value) ref Entry tableData = ref TableData(table); // Fibonacci hash reduces the value into desired range by shifting right by the number of leading zeroes in 'size-1' - byte shift = (byte)BitOperations.LeadingZeroCount(size - 1); + byte shift = (byte)BitOperations.LeadingZeroCount((nuint)(size - 1)); HashShift(table) = shift; return table; From 2472edf7b688ae92200580edb8bdb9bede911fe3 Mon Sep 17 00:00:00 2001 From: Alan Hayward Date: Thu, 5 Oct 2023 13:41:58 +0100 Subject: [PATCH 21/21] Add UZP1 TEST_IMG: ubuntu/dotnet-build TEST_CMD: echo # This patch is not expect to build Jira: ENTLLT-6871 Change-Id: I0b6034296d36a044a847b65f1f4cf508ad3494f7 --- src/coreclr/jit/emitarm64.cpp | 82 ++++++++++++++++++++++++++ src/coreclr/jit/emitfmtsarm64.h | 2 + src/coreclr/jit/hwintrinsiclistarm64.h | 9 +++ src/coreclr/jit/instrsarm64.h | 4 +- 4 files changed, 96 insertions(+), 1 deletion(-) diff --git a/src/coreclr/jit/emitarm64.cpp b/src/coreclr/jit/emitarm64.cpp index 5e0b4f2e78a959..fa3d8ba725eb79 100644 --- a/src/coreclr/jit/emitarm64.cpp +++ b/src/coreclr/jit/emitarm64.cpp @@ -924,6 +924,30 @@ void emitter::emitInsSanityCheck(instrDesc* id) assert(isVectorRegister(id->idReg3())); break; + case IF_DV_3H: // DV_3H ........XX.mmmmm ......nnnnnddddd Vd Vn Vm (SVE vector) + // Copied this from IF_DV_3E! + assert(isValidVectorElemsize(id->idOpSize())); + assert(insOptsNone(id->idInsOpt())); + assert(isSVEVectorRegister(id->idReg1())); + assert(isSVEVectorRegister(id->idReg2())); + assert(isSVEVectorRegister(id->idReg3())); + elemsize = id->idOpSize(); + index = emitGetInsSC(id); + assert(isValidVectorIndex(EA_16BYTE, elemsize, index)); + break; + + case IF_DV_3I: // DV_3I ........XX..mmmm .......nnnn.dddd Pd Pn Pm (SVE predicate) + // Copied this from IF_DV_3E and modified! + assert(isValidVectorElemsize(id->idOpSize())); + assert(insOptsNone(id->idInsOpt())); + assert(isSVEPredicateRegister(id->idReg1())); + assert(isSVEPredicateRegister(id->idReg2())); + assert(isSVEPredicateRegister(id->idReg3())); + elemsize = id->idOpSize(); + index = emitGetInsSC(id); + assert(isValidVectorIndex(EA_16BYTE, elemsize, index)); + break; + case IF_DV_4A: // DR_4A .........X.mmmmm .aaaaannnnnddddd Rd Rn Rm Ra (scalar) assert(isValidGeneralDatasize(id->idOpSize())); assert(isVectorRegister(id->idReg1())); @@ -1020,6 +1044,8 @@ bool emitter::emitInsMayWriteToGCReg(instrDesc* id) case IF_DV_3EI: // DV_3EI ........XXLMmmmm ....H.nnnnnddddd Vd Vn Vm[] (scalar by element) case IF_DV_3F: // DV_3F .Q......XX.mmmmm ......nnnnnddddd Vd Vn Vm (vector) case IF_DV_3G: // DV_3G .Q.........mmmmm .iiii.nnnnnddddd Vd Vn Vm imm (vector) + case IF_DV_3H: // DV_3H ........XX.mmmmm ......nnnnnddddd Vd Vn Vm (SVE vector) + case IF_DV_3I: // DV_3I ........XX..mmmm .......nnnn.dddd Pd Pn Pm (SVE predicate) case IF_DV_4A: // DV_4A .........X.mmmmm .aaaaannnnnddddd Vd Va Vn Vm (scalar) // Tracked GC pointers cannot be placed into the SIMD registers. return false; @@ -1725,6 +1751,7 @@ emitter::code_t emitter::emitInsCode(instruction ins, insFormat fmt) const static insFormat formatEncode3H[3] = {IF_DR_3A, IF_DV_3A, IF_DV_3AI}; const static insFormat formatEncode3I[3] = {IF_DR_2E, IF_DR_2F, IF_DV_2M}; const static insFormat formatEncode3J[3] = {IF_LS_2D, IF_LS_3F, IF_LS_2E}; + const static insFormat formatEncode3K[3] = {IF_LS_3A, IF_LS_3H, IF_LS_3I}; const static insFormat formatEncode2A[2] = {IF_DR_2E, IF_DR_2F}; const static insFormat formatEncode2B[2] = {IF_DR_3A, IF_DR_3B}; const static insFormat formatEncode2C[2] = {IF_DR_3A, IF_DI_2D}; @@ -2047,6 +2074,17 @@ emitter::code_t emitter::emitInsCode(instruction ins, insFormat fmt) } break; + case IF_EN3K: + for (index = 0; index < 3; index++) + { + if (fmt == formatEncode3K[index]) + { + encoding_found = true; + break; + } + } + break; + case IF_EN2A: for (index = 0; index < 2; index++) { @@ -11748,6 +11786,26 @@ size_t emitter::emitOutputInstr(insGroup* ig, instrDesc* id, BYTE** dp) dst += emitOutput_Instr(dst, code); break; + case IF_DV_3H: // DV_3H ........XX.mmmmm ......nnnnnddddd Vd Vn Vm (SVE vector) + code = emitInsCode(ins, fmt); + elemsize = id->idOpSize(); + code |= insEncodeElemsize(elemsize); // XX + code |= insEncodeReg_Zd(id->idReg1()); // ddddd + code |= insEncodeReg_Zn(id->idReg2()); // nnnnn + code |= insEncodeReg_Zm(id->idReg3()); // mmmmm + dst += emitOutput_Instr(dst, code); + break; + + case IF_DV_3I: // DV_3I ........XX..mmmm .......nnnn.dddd Pd Pn Pm (SVE predicate) + code = emitInsCode(ins, fmt); + elemsize = id->idOpSize(); + code |= insEncodeElemsize(elemsize); // XX + code |= insEncodeReg_Pd(id->idReg1()); // dddd + code |= insEncodeReg_Pn(id->idReg2()); // nnnn + code |= insEncodeReg_Pm(id->idReg3()); // mmmm + dst += emitOutput_Instr(dst, code); + break; + case IF_DV_4A: // DV_4A .........X.mmmmm .aaaaannnnnddddd Vd Va Vn Vm (scalar) code = emitInsCode(ins, fmt); elemsize = id->idOpSize(); @@ -13926,6 +13984,20 @@ void emitter::emitDispInsHelp( emitDispImm(emitGetInsSC(id), false); break; + case IF_DV_3H: // DV_3H ........XX.mmmmm ......nnnnnddddd Vd Vn Vm (SVE vector) + emitDispSVEVectorReg(id->idReg1(), id->idInsOpt(), true); + emitDispSVEVectorReg(id->idReg2(), id->idInsOpt(), true); + emitDispSVEVectorReg(id->idReg3(), id->idInsOpt(), true); + emitDispImm(emitGetInsSC(id), false); + break; + + case IF_DV_3I: // DV_3I ........XX..mmmm .......nnnn.dddd Pd Pn Pm (SVE predicate) + emitDispSVEPredicateReg(id->idReg1(), id->idInsOpt(), true); + emitDispSVEPredicateReg(id->idReg2(), id->idInsOpt(), true); + emitDispSVEPredicateReg(id->idReg3(), id->idInsOpt(), true); + emitDispImm(emitGetInsSC(id), false); + break; + case IF_DV_4A: // DV_4A .........X.mmmmm .aaaaannnnnddddd Vd Va Vn Vm (scalar) emitDispReg(id->idReg1(), size, true); emitDispReg(id->idReg2(), size, true); @@ -15894,6 +15966,16 @@ emitter::insExecutionCharacteristics emitter::getInsExecutionCharacteristics(ins result.insLatency = PERFSCORE_LATENCY_2C; break; + case IF_DV_3H: // uzp1 + result.insThroughput = PERFSCORE_THROUGHPUT_2X; + result.insLatency = PERFSCORE_LATENCY_2C; + break; + + case IF_DV_3I: // uzp1 + result.insThroughput = PERFSCORE_THROUGHPUT_2X; + result.insLatency = PERFSCORE_LATENCY_2C; + break; + case IF_DV_2L: // abs, neg, cmeq, cmge, cmgt, cmle, cmlt (scalar) case IF_DV_2M: // (vector) // abs, neg, mvn, not, cmeq, cmge, cmgt, cmle, cmlt, diff --git a/src/coreclr/jit/emitfmtsarm64.h b/src/coreclr/jit/emitfmtsarm64.h index 31bbde6afc47af..980ad2bf6c53f2 100644 --- a/src/coreclr/jit/emitfmtsarm64.h +++ b/src/coreclr/jit/emitfmtsarm64.h @@ -220,6 +220,8 @@ IF_DEF(DV_3E, IS_NONE, NONE) // DV_3E ........XX.mmmmm ......nnnnnddddd V IF_DEF(DV_3EI, IS_NONE, NONE) // DV_3EI ........XXLMmmmm ....H.nnnnnddddd Vd Vn Vm[] (scalar by element) IF_DEF(DV_3F, IS_NONE, NONE) // DV_3F ...........mmmmm ......nnnnnddddd Qd Sn Vm (Qd used as both source and destination) IF_DEF(DV_3G, IS_NONE, NONE) // DV_3G .Q.........mmmmm .iiii.nnnnnddddd Vd Vn Vm imm (vector) +IF_DEF(DV_3H, IS_NONE, NONE) // DV_3H ........XX.mmmmm ......nnnnnddddd Vd Vn Vm (SVE vector) +IF_DEF(DV_3I, IS_NONE, NONE) // DV_3I ........XX..mmmm .......nnnn.dddd Pd Pn Pm (SVE predicate) IF_DEF(DV_4A, IS_NONE, NONE) // DV_4A .........X.mmmmm .aaaaannnnnddddd Vd Vn Vm Va (scalar) diff --git a/src/coreclr/jit/hwintrinsiclistarm64.h b/src/coreclr/jit/hwintrinsiclistarm64.h index da77e3fdfabd54..6a601357e67ec5 100644 --- a/src/coreclr/jit/hwintrinsiclistarm64.h +++ b/src/coreclr/jit/hwintrinsiclistarm64.h @@ -764,6 +764,15 @@ HARDWARE_INTRINSIC(Sha256, HashUpdate2, HARDWARE_INTRINSIC(Sha256, ScheduleUpdate0, 16, 2, false, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_sha256su0, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_HasRMWSemantics) HARDWARE_INTRINSIC(Sha256, ScheduleUpdate1, 16, 3, false, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_sha256su1, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_HasRMWSemantics) + +// *************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** +// ISA Function name SIMD size NumArg EncodesExtraTypeArg Instructions Category Flags +// {TYP_BYTE, TYP_UBYTE, TYP_SHORT, TYP_USHORT, TYP_INT, TYP_UINT, TYP_LONG, TYP_ULONG, TYP_FLOAT, TYP_DOUBLE} +// *************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** +// SVE Intrinsics +HARDWARE_INTRINSIC(SVE_Arm64, UnzipEven, -1, 2, true, {INS_uzp1, INS_uzp1, INS_uzp1, INS_uzp1, INS_uzp1, INS_uzp1, INS_uzp1, INS_uzp1, INS_uzp1, INS_uzp1}, HW_Category_SVE, HW_Flag_NoFlag) + + #endif // FEATURE_HW_INTRINSIC #undef HARDWARE_INTRINSIC diff --git a/src/coreclr/jit/instrsarm64.h b/src/coreclr/jit/instrsarm64.h index 39d729b52de92b..818ae052df7e8c 100644 --- a/src/coreclr/jit/instrsarm64.h +++ b/src/coreclr/jit/instrsarm64.h @@ -1680,8 +1680,10 @@ INST1(fminnmv, "fminnmv", 0, IF_DV_2R, 0x2EB0C800) INST1(fminv, "fminv", 0, IF_DV_2R, 0x2EB0F800) // fminv Vd,Vn DV_2R 0Q1011101X110000 111110nnnnnddddd 2EB0 F800 Vd,Vn (vector) -INST1(uzp1, "uzp1", 0, IF_DV_3A, 0x0E001800) +INST3(uzp1, "uzp1", 0, IF_EN3n, 0x0E001800, 0x05206800, 0x05204800) // uzp1 Vd,Vn,Vm DV_3A 0Q001110XX0mmmmm 000110nnnnnddddd 0E00 1800 Vd,Vn,Vm (vector) + // uzp1 Zd,Zn,Zm DV_3H 00000101XX1mmmmm 011010nnnnnddddd 0520 6800 Zd,Zn,Zm (SVE vector) + // uzp1 Pd,Pn,Pm DV_3I 00000101XX10mmmm 0100100nnnn0dddd 0520 4800 Pd,Pn,Pm (SVE predicate) INST1(uzp2, "uzp2", 0, IF_DV_3A, 0x0E005800) // upz2 Vd,Vn,Vm DV_3A 0Q001110XX0mmmmm 010110nnnnnddddd 0E00 5800 Vd,Vn,Vm (vector)