diff --git a/src/coreclr/jit/CMakeLists.txt b/src/coreclr/jit/CMakeLists.txt
index 480d9d50350ddc..aa660321075890 100644
--- a/src/coreclr/jit/CMakeLists.txt
+++ b/src/coreclr/jit/CMakeLists.txt
@@ -402,6 +402,7 @@ set( JIT_ARM64_HEADERS
emitfmtsarm64.h
emitfmtsarm64sve.h
hwintrinsiclistarm64.h
+ hwintrinsiclistarm64sve.h
instrsarm64.h
instrsarm64sve.h
registerarm64.h
diff --git a/src/coreclr/jit/hwintrinsiclistarm64.h b/src/coreclr/jit/hwintrinsiclistarm64.h
index cb4c8269d61171..e334a20bd59fe1 100644
--- a/src/coreclr/jit/hwintrinsiclistarm64.h
+++ b/src/coreclr/jit/hwintrinsiclistarm64.h
@@ -802,6 +802,8 @@ HARDWARE_INTRINSIC(Sha256, ScheduleUpdate1,
#endif // FEATURE_HW_INTRINSIC
+#include "hwintrinsiclistarm64sve.h"
+
#undef HARDWARE_INTRINSIC
// clang-format on
diff --git a/src/coreclr/jit/hwintrinsiclistarm64sve.h b/src/coreclr/jit/hwintrinsiclistarm64sve.h
new file mode 100644
index 00000000000000..f8263c40bb0c66
--- /dev/null
+++ b/src/coreclr/jit/hwintrinsiclistarm64sve.h
@@ -0,0 +1,24 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+/*****************************************************************************/
+#ifndef HARDWARE_INTRINSIC
+#error Define HARDWARE_INTRINSIC before including this file
+#endif
+/*****************************************************************************/
+
+// clang-format off
+
+#ifdef FEATURE_HW_INTRINSICS
+// ***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************
+// 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
+
+
+#endif // FEATURE_HW_INTRINSIC
+
+#undef HARDWARE_INTRINSIC
+
+// clang-format on
diff --git a/src/libraries/System.Private.CoreLib/src/ILLink/ILLink.Substitutions.NoArmIntrinsics.xml b/src/libraries/System.Private.CoreLib/src/ILLink/ILLink.Substitutions.NoArmIntrinsics.xml
index 1da6f6d57d26e3..7d05d2b47a61fe 100644
--- a/src/libraries/System.Private.CoreLib/src/ILLink/ILLink.Substitutions.NoArmIntrinsics.xml
+++ b/src/libraries/System.Private.CoreLib/src/ILLink/ILLink.Substitutions.NoArmIntrinsics.xml
@@ -51,5 +51,11 @@
+
+
+
+
+
+
diff --git a/src/libraries/System.Private.CoreLib/src/System.Private.CoreLib.Shared.projitems b/src/libraries/System.Private.CoreLib/src/System.Private.CoreLib.Shared.projitems
index e46bd04f7d6958..1213cb5d3cb22b 100644
--- a/src/libraries/System.Private.CoreLib/src/System.Private.CoreLib.Shared.projitems
+++ b/src/libraries/System.Private.CoreLib/src/System.Private.CoreLib.Shared.projitems
@@ -2632,6 +2632,7 @@
+
@@ -2642,6 +2643,7 @@
+
diff --git a/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Arm/Sve.PlatformNotSupported.cs b/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Arm/Sve.PlatformNotSupported.cs
new file mode 100644
index 00000000000000..3eeb40d5d9de19
--- /dev/null
+++ b/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Arm/Sve.PlatformNotSupported.cs
@@ -0,0 +1,34 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Diagnostics.CodeAnalysis;
+using System.Runtime.CompilerServices;
+using System.Runtime.Intrinsics;
+using System.Numerics;
+
+namespace System.Runtime.Intrinsics.Arm
+{
+ ///
+ /// This class provides access to the ARM SVE hardware instructions via intrinsics
+ ///
+ [CLSCompliant(false)]
+ [System.Runtime.Versioning.RequiresPreviewFeaturesAttribute("Sve is in preview.")]
+#if SYSTEM_PRIVATE_CORELIB
+ public
+#else
+ internal
+#endif
+ abstract class Sve : AdvSimd
+ {
+ internal Sve() { }
+
+ public static new bool IsSupported { [Intrinsic] get { return false; } }
+
+ public new abstract class Arm64 : AdvSimd.Arm64
+ {
+ internal Arm64() { }
+
+ public static new bool IsSupported { [Intrinsic] get { return false; } }
+ }
+ }
+}
diff --git a/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Arm/Sve.cs b/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Arm/Sve.cs
new file mode 100644
index 00000000000000..7a71144e0bc33f
--- /dev/null
+++ b/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Arm/Sve.cs
@@ -0,0 +1,31 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Diagnostics.CodeAnalysis;
+using System.Runtime.CompilerServices;
+using System.Runtime.Intrinsics;
+using System.Numerics;
+
+namespace System.Runtime.Intrinsics.Arm
+{
+ ///
+ /// This class provides access to the ARM SVE hardware instructions via intrinsics
+ ///
+ [Intrinsic]
+ [CLSCompliant(false)]
+ [System.Runtime.Versioning.RequiresPreviewFeaturesAttribute("Sve is in preview.")]
+ public abstract class Sve : AdvSimd
+ {
+ internal Sve() { }
+
+ public static new bool IsSupported { get => IsSupported; }
+
+ [Intrinsic]
+ public new abstract class Arm64 : AdvSimd.Arm64
+ {
+ internal Arm64() { }
+
+ public static new bool IsSupported { get => IsSupported; }
+ }
+ }
+}
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 b3db125c2c7ece..1bc93d71e25e82 100644
--- a/src/libraries/System.Runtime.Intrinsics/ref/System.Runtime.Intrinsics.cs
+++ b/src/libraries/System.Runtime.Intrinsics/ref/System.Runtime.Intrinsics.cs
@@ -4142,6 +4142,19 @@ internal Arm64() { }
public static new bool IsSupported { get { throw null; } }
}
}
+ [System.CLSCompliantAttribute(false)]
+ [System.Runtime.Versioning.RequiresPreviewFeaturesAttribute("Sve is in preview.")]
+ public abstract partial class Sve : System.Runtime.Intrinsics.Arm.AdvSimd
+ {
+ internal Sve() { }
+ public static new bool IsSupported { get { throw null; } }
+
+ public new abstract partial class Arm64 : System.Runtime.Intrinsics.Arm.AdvSimd.Arm64
+ {
+ internal Arm64() { }
+ public static new bool IsSupported { get { throw null; } }
+ }
+ }
}
namespace System.Runtime.Intrinsics.X86
{
diff --git a/src/mono/mono/mini/mini.h b/src/mono/mono/mini/mini.h
index cd2cad8e7dcece..8532f788e17ebb 100644
--- a/src/mono/mono/mini/mini.h
+++ b/src/mono/mono/mini/mini.h
@@ -2927,6 +2927,7 @@ typedef enum {
MONO_CPU_ARM64_NEON = 1 << 4,
MONO_CPU_ARM64_RDM = 1 << 5,
MONO_CPU_ARM64_DP = 1 << 6,
+ MONO_CPU_ARM64_SVE = 1 << 7,
#endif
} MonoCPUFeatures;
diff --git a/src/mono/mono/mini/simd-intrinsics.c b/src/mono/mono/mini/simd-intrinsics.c
index 8955ede9b10506..948e2d86b8f2ac 100644
--- a/src/mono/mono/mini/simd-intrinsics.c
+++ b/src/mono/mono/mini/simd-intrinsics.c
@@ -3902,6 +3902,7 @@ static const IntrinGroup supported_arm_intrinsics [] = {
{ "Rdm", MONO_CPU_ARM64_RDM, rdm_methods, sizeof (rdm_methods) },
{ "Sha1", MONO_CPU_ARM64_CRYPTO, sha1_methods, sizeof (sha1_methods) },
{ "Sha256", MONO_CPU_ARM64_CRYPTO, sha256_methods, sizeof (sha256_methods) },
+ { "Sve", MONO_CPU_ARM64_SVE, unsupported, sizeof (unsupported) },
};
static MonoInst*
diff --git a/src/tests/Common/GenerateHWIntrinsicTests/GenerateHWIntrinsicTests_Arm.cs b/src/tests/Common/GenerateHWIntrinsicTests/GenerateHWIntrinsicTests_Arm.cs
index 30adb388b9f1dc..48761b8619c353 100644
--- a/src/tests/Common/GenerateHWIntrinsicTests/GenerateHWIntrinsicTests_Arm.cs
+++ b/src/tests/Common/GenerateHWIntrinsicTests/GenerateHWIntrinsicTests_Arm.cs
@@ -2893,6 +2893,12 @@
("SecureHashTernOpTest.template", new Dictionary { ["TestName"] = "ScheduleUpdate1_Vector128_UInt32", ["Isa"] = "Sha256", ["LoadIsa"] = "AdvSimd", ["Method"] = "ScheduleUpdate1", ["RetVectorType"] = "Vector128", ["RetBaseType"] = "UInt32", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "UInt32", ["Op2VectorType"] = "Vector128", ["Op2BaseType"] = "UInt32", ["Op3VectorType"] = "Vector128", ["Op3BaseType"] = "UInt32", ["LargestVectorSize"] = "16", ["NextValueOp1"] = "0x00112233", ["NextValueOp2"] = "0x44556677", ["NextValueOp3"] = "0x8899AABB", ["ExpectedResult"] = "{0x248F1BDF, 0x248F1BDF, 0xB303DDBA, 0xF74821FE}"}),
};
+(string templateFileName, Dictionary templateData)[] SveInputs = Array.Empty<(string templateFileName, Dictionary templateData)>();
+{
+ //TODO-SVE: Add SVE tests
+};
+
+
string projectName = args[0];
string templateDirectory = args[1];
string outputDirectory = args[2];
@@ -2910,6 +2916,7 @@
ProcessInputs("Rdm.Arm64", Rdm_Arm64Inputs);
ProcessInputs("Sha1", Sha1Inputs);
ProcessInputs("Sha256", Sha256Inputs);
+ProcessInputs("Sve", SveInputs);
void ProcessInputs(string groupName, (string templateFileName, Dictionary templateData)[] inputs)
{
diff --git a/src/tests/JIT/HardwareIntrinsics/Arm/Shared/Program.cs b/src/tests/JIT/HardwareIntrinsics/Arm/Shared/Program.cs
index 08b254882aa74f..4ad42ce51fd0a1 100644
--- a/src/tests/JIT/HardwareIntrinsics/Arm/Shared/Program.cs
+++ b/src/tests/JIT/HardwareIntrinsics/Arm/Shared/Program.cs
@@ -21,6 +21,7 @@ public static void PrintSupportedIsa()
TestLibrary.TestFramework.LogInformation($" Rdm: {Rdm.IsSupported}");
TestLibrary.TestFramework.LogInformation($" Sha1: {Sha1.IsSupported}");
TestLibrary.TestFramework.LogInformation($" Sha256: {Sha256.IsSupported}");
+ TestLibrary.TestFramework.LogInformation($" Sve: {Sve.IsSupported}");
TestLibrary.TestFramework.LogInformation(string.Empty);
}
}
diff --git a/src/tests/JIT/HardwareIntrinsics/Arm/Sve/Program.Sve.cs b/src/tests/JIT/HardwareIntrinsics/Arm/Sve/Program.Sve.cs
new file mode 100644
index 00000000000000..35fb50d5efb903
--- /dev/null
+++ b/src/tests/JIT/HardwareIntrinsics/Arm/Sve/Program.Sve.cs
@@ -0,0 +1,16 @@
+// 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;
+
+namespace JIT.HardwareIntrinsics.Arm._Sve
+{
+ public static partial class Program
+ {
+ static Program()
+ {
+ JIT.HardwareIntrinsics.Arm.Program.PrintSupportedIsa();
+ }
+ }
+}
diff --git a/src/tests/JIT/HardwareIntrinsics/Arm/Sve/Sve_r.csproj b/src/tests/JIT/HardwareIntrinsics/Arm/Sve/Sve_r.csproj
new file mode 100644
index 00000000000000..0918724cfff289
--- /dev/null
+++ b/src/tests/JIT/HardwareIntrinsics/Arm/Sve/Sve_r.csproj
@@ -0,0 +1,14 @@
+
+
+ true
+
+
+ Embedded
+
+
+
+
+
+
+
+
diff --git a/src/tests/JIT/HardwareIntrinsics/Arm/Sve/Sve_ro.csproj b/src/tests/JIT/HardwareIntrinsics/Arm/Sve/Sve_ro.csproj
new file mode 100644
index 00000000000000..a9d4a43b42ae16
--- /dev/null
+++ b/src/tests/JIT/HardwareIntrinsics/Arm/Sve/Sve_ro.csproj
@@ -0,0 +1,14 @@
+
+
+ true
+
+
+ Embedded
+ True
+
+
+
+
+
+
+