Repository: dotnet/runtime
Pull request #115609: arm64: Rename SVE Prefetch APIs names to use Bit
Author: login: jonathandavies-arm
Labels: name: breaking-change
description: Issue or PR that represents a breaking API or functional change over a previous release.
name: area-CodeGen-coreclr
description: CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI
name: community-contribution
description: Indicates that the PR has been added by a community member
name: arm-sve
description: Work related to arm64 SVE/SVE2 support
Created: 2025-05-15T13:21:25Z | Merged: 2025-05-29T16:08:18Z

- Fixes #114909

Linked issue #114909: Arm64 SVE: Rename Prefetch APIs names to use Bit
The following Prefetch APIs were implemented:

```csharp
public static unsafe void GatherPrefetch8Bit(Vector<T> mask, Vector<T2> addresses, [ConstantExpected] SvePrefetchType prefetchType);
public static unsafe void GatherPrefetch8Bit(Vector<T> mask, void* address, Vector<T2> offsets, [ConstantExpected] SvePrefetchType prefetchType);
public static unsafe void GatherPrefetch16Bit(Vector<T> mask, Vector<T2> addresses, [ConstantExpected] SvePrefetchType prefetchType);
public static unsafe void GatherPrefetch16Bit(Vector<T> mask, void* address, Vector<T2> indices, [ConstantExpected] SvePrefetchType prefetchType);
public static unsafe void GatherPrefetch32Bit(Vector<T> mask, Vector<T2> addresses, [ConstantExpected] SvePrefetchType prefetchType);
public static unsafe void GatherPrefetch32Bit(Vector<T> mask, void* address, Vector<T2> indices, [ConstantExpected] SvePrefetchType prefetchType);
public static unsafe void GatherPrefetch64Bit(Vector<T> mask, Vector<T2> addresses, [ConstantExpected] SvePrefetchType prefetchType);
public static unsafe void GatherPrefetch64Bit(Vector<T> mask, void* address, Vector<T2> indices, [ConstantExpected] SvePrefetchType prefetchType);

public static unsafe void Prefetch8Bit(Vector<T> mask, void* address, SvePrefetchType op); // PRFB
public static unsafe void Prefetch16Bit(Vector<T> mask, void* address, SvePrefetchType op); // PRFH
public static unsafe void Prefetch32Bit(Vector<T> mask, void* address, SvePrefetchType op); // PRFW
public static unsafe void Prefetch64Bit(Vector<T> mask, void* address, SvePrefetchType op); // PRFD
```

However, the last four were implemented as:
```csharp
public static unsafe void PrefetchBytes(Vector<T> mask, void* address, SvePrefetchType op); // PRFB
public static unsafe void PrefetchInt16(Vector<T> mask, void* address, SvePrefetchType op); // PRFH
public static unsafe void PrefetchInt32(Vector<T> mask, void* address, SvePrefetchType op); // PRFW
public static unsafe void PrefetchInt64(Vector<T> mask, void* address, SvePrefetchType op); // PRFD
```


Original API reviews: https://github.com/dotnet/runtime/issues/97831 and https://github.com/dotnet/runtime/issues/94007


Either
 the `Prefetch*()` APIs 
or the `GatherPrefetch*()` APIs
 need renaming.
Linked issue comments: user: login: dotnet-policy-service[bot]
created_at: 2025-04-22T12:40:56Z
body: Tagging subscribers to this area: @dotnet/area-system-runtime-intrinsics
See info in [area-owners.md](https://github.com/dotnet/runtime/blob/main/docs/area-owners.md) if you want to be subscribed.
<!-- Policy app identification https://img.shields.io/static/v1?label=PullRequestIssueManagement. -->
author_association: CONTRIBUTOR
user: login: tannergooding
created_at: 2025-05-08T17:54:43Z
body: From what I recall from API review, the `#bit` names were intentional so we didn't need `byte*` and `sbyte*` variants.

The new names aren't really consistent either, as you have `Bytes` vs `Int16` rather than `Int16s` (which doesn't flow well).

I'd say we should fix this back to match the originally approved APIs, unless someone has a better suggestion for the names to use.
author_association: MEMBER
user: login: a74nh
created_at: 2025-05-09T08:23:37Z
body: Switched the title and description so that it's no longer an API suggestion change
author_association: CONTRIBUTOR
user: login: kunalspathak
created_at: 2025-05-29T16:08:40Z
body: We still need to fix other APIs.
author_association: CONTRIBUTOR
user: login: kunalspathak
created_at: 2025-05-29T16:14:00Z
body: Never mind, I got confused with `GatherPrefetch*` APIs as well.
author_association: CONTRIBUTOR

Diff:
diff --git a/src/coreclr/jit/fgdiagnostic.cpp b/src/coreclr/jit/fgdiagnostic.cpp
index f32e14ad4b1e13..889490925adf10 100644
--- a/src/coreclr/jit/fgdiagnostic.cpp
+++ b/src/coreclr/jit/fgdiagnostic.cpp
@@ -3458,10 +3458,10 @@ void Compiler::fgDebugCheckFlags(GenTree* tree, BasicBlock* block)
                     case NI_Sve_GatherPrefetch32Bit:
                     case NI_Sve_GatherPrefetch64Bit:
                     case NI_Sve_GatherPrefetch8Bit:
-                    case NI_Sve_PrefetchBytes:
-                    case NI_Sve_PrefetchInt16:
-                    case NI_Sve_PrefetchInt32:
-                    case NI_Sve_PrefetchInt64:
+                    case NI_Sve_Prefetch16Bit:
+                    case NI_Sve_Prefetch32Bit:
+                    case NI_Sve_Prefetch64Bit:
+                    case NI_Sve_Prefetch8Bit:
                     case NI_Sve_GetFfrByte:
                     case NI_Sve_GetFfrInt16:
                     case NI_Sve_GetFfrInt32:
diff --git a/src/coreclr/jit/gentree.cpp b/src/coreclr/jit/gentree.cpp
index 0baf062913bdc8..e2b4456425cef5 100644
--- a/src/coreclr/jit/gentree.cpp
+++ b/src/coreclr/jit/gentree.cpp
@@ -28698,10 +28698,6 @@ bool GenTreeHWIntrinsic::OperRequiresCallFlag() const
 
 #if defined(TARGET_ARM64)
             case NI_ArmBase_Yield:
-            case NI_Sve_PrefetchBytes:
-            case NI_Sve_PrefetchInt16:
-            case NI_Sve_PrefetchInt32:
-            case NI_Sve_PrefetchInt64:
             case NI_Sve_GatherPrefetch16Bit:
             case NI_Sve_GatherPrefetch32Bit:
             case NI_Sve_GatherPrefetch64Bit:
@@ -28714,6 +28710,10 @@ bool GenTreeHWIntrinsic::OperRequiresCallFlag() const
             case NI_Sve_GetFfrUInt16:
             case NI_Sve_GetFfrUInt32:
             case NI_Sve_GetFfrUInt64:
+            case NI_Sve_Prefetch16Bit:
+            case NI_Sve_Prefetch32Bit:
+            case NI_Sve_Prefetch64Bit:
+            case NI_Sve_Prefetch8Bit:
             case NI_Sve_SetFfr:
             {
                 return true;
@@ -28916,10 +28916,10 @@ void GenTreeHWIntrinsic::Initialize(NamedIntrinsic intrinsicId)
             case NI_Sve_GatherPrefetch32Bit:
             case NI_Sve_GatherPrefetch64Bit:
             case NI_Sve_GatherPrefetch8Bit:
-            case NI_Sve_PrefetchBytes:
-            case NI_Sve_PrefetchInt16:
-            case NI_Sve_PrefetchInt32:
-            case NI_Sve_PrefetchInt64:
+            case NI_Sve_Prefetch16Bit:
+            case NI_Sve_Prefetch32Bit:
+            case NI_Sve_Prefetch64Bit:
+            case NI_Sve_Prefetch8Bit:
             case NI_Sve_GetFfrByte:
             case NI_Sve_GetFfrInt16:
             case NI_Sve_GetFfrInt32:
diff --git a/src/coreclr/jit/hwintrinsicarm64.cpp b/src/coreclr/jit/hwintrinsicarm64.cpp
index 06b6b1edf77aa6..5a5fd9ba972777 100644
--- a/src/coreclr/jit/hwintrinsicarm64.cpp
+++ b/src/coreclr/jit/hwintrinsicarm64.cpp
@@ -508,10 +508,10 @@ void HWIntrinsicInfo::lookupImmBounds(
             case NI_Sve_GatherPrefetch16Bit:
             case NI_Sve_GatherPrefetch32Bit:
             case NI_Sve_GatherPrefetch64Bit:
-            case NI_Sve_PrefetchBytes:
-            case NI_Sve_PrefetchInt16:
-            case NI_Sve_PrefetchInt32:
-            case NI_Sve_PrefetchInt64:
+            case NI_Sve_Prefetch16Bit:
+            case NI_Sve_Prefetch32Bit:
+            case NI_Sve_Prefetch64Bit:
+            case NI_Sve_Prefetch8Bit:
                 immLowerBound = (int)SVE_PRFOP_PLDL1KEEP;
                 immUpperBound = (int)SVE_PRFOP_CONST15;
                 break;
@@ -3182,10 +3182,10 @@ GenTree* Compiler::impSpecialIntrinsic(NamedIntrinsic        intrinsic,
         case NI_Sve_GatherPrefetch16Bit:
         case NI_Sve_GatherPrefetch32Bit:
         case NI_Sve_GatherPrefetch64Bit:
-        case NI_Sve_PrefetchBytes:
-        case NI_Sve_PrefetchInt16:
-        case NI_Sve_PrefetchInt32:
-        case NI_Sve_PrefetchInt64:
+        case NI_Sve_Prefetch16Bit:
+        case NI_Sve_Prefetch32Bit:
+        case NI_Sve_Prefetch64Bit:
+        case NI_Sve_Prefetch8Bit:
         {
             assert((sig->numArgs == 3) || (sig->numArgs == 4));
             assert(!isScalar);
diff --git a/src/coreclr/jit/hwintrinsiccodegenarm64.cpp b/src/coreclr/jit/hwintrinsiccodegenarm64.cpp
index 1ce3b282f6673a..2120cbc1d04911 100644
--- a/src/coreclr/jit/hwintrinsiccodegenarm64.cpp
+++ b/src/coreclr/jit/hwintrinsiccodegenarm64.cpp
@@ -1786,10 +1786,10 @@ void CodeGen::genHWIntrinsic(GenTreeHWIntrinsic* node)
                 break;
             }
 
-            case NI_Sve_PrefetchBytes:
-            case NI_Sve_PrefetchInt16:
-            case NI_Sve_PrefetchInt32:
-            case NI_Sve_PrefetchInt64:
+            case NI_Sve_Prefetch16Bit:
+            case NI_Sve_Prefetch32Bit:
+            case NI_Sve_Prefetch64Bit:
+            case NI_Sve_Prefetch8Bit:
             {
                 assert(hasImmediateOperand);
                 HWIntrinsicImmOpHelper helper(this, intrin.op3, node);
diff --git a/src/coreclr/jit/hwintrinsiclistarm64sve.h b/src/coreclr/jit/hwintrinsiclistarm64sve.h
index 639a9056a1b608..1554efbb62f5a3 100644
--- a/src/coreclr/jit/hwintrinsiclistarm64sve.h
+++ b/src/coreclr/jit/hwintrinsiclistarm64sve.h
@@ -227,10 +227,10 @@ HARDWARE_INTRINSIC(Sve,           Not,
 HARDWARE_INTRINSIC(Sve,           Or,                                                               -1,     -1,     {INS_sve_orr,        INS_sve_orr,        INS_sve_orr,        INS_sve_orr,        INS_sve_orr,        INS_sve_orr,        INS_sve_orr,        INS_sve_orr,        INS_invalid,        INS_invalid},     HW_Category_SIMD,                  HW_Flag_Scalable|HW_Flag_OptionalEmbeddedMaskedOperation|HW_Flag_HasRMWSemantics|HW_Flag_LowMaskedOperation|HW_Flag_HasAllMaskVariant)
 HARDWARE_INTRINSIC(Sve,           OrAcross,                                                         -1,     -1,     {INS_sve_orv,        INS_sve_orv,        INS_sve_orv,        INS_sve_orv,        INS_sve_orv,        INS_sve_orv,        INS_sve_orv,        INS_sve_orv,        INS_invalid,        INS_invalid},     HW_Category_SIMD,                  HW_Flag_Scalable|HW_Flag_EmbeddedMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_ReduceOperation)
 HARDWARE_INTRINSIC(Sve,           PopCount,                                                         -1,     -1,     {INS_sve_cnt,        INS_sve_cnt,        INS_sve_cnt,        INS_sve_cnt,        INS_sve_cnt,        INS_sve_cnt,        INS_sve_cnt,        INS_sve_cnt,        INS_sve_cnt,        INS_sve_cnt},     HW_Category_SIMD,                  HW_Flag_Scalable|HW_Flag_BaseTypeFromFirstArg|HW_Flag_EmbeddedMaskedOperation|HW_Flag_LowMaskedOperation)
-HARDWARE_INTRINSIC(Sve,           PrefetchBytes,                                                    -1,      3,     {INS_invalid,        INS_sve_prfb,       INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid},     HW_Category_Special,               HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_BaseTypeFromFirstArg|HW_Flag_HasImmediateOperand|HW_Flag_SpecialSideEffect_Other)
-HARDWARE_INTRINSIC(Sve,           PrefetchInt16,                                                    -1,      3,     {INS_invalid,        INS_invalid,        INS_invalid,        INS_sve_prfh,       INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid},     HW_Category_Special,               HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_BaseTypeFromFirstArg|HW_Flag_HasImmediateOperand|HW_Flag_SpecialSideEffect_Other)
-HARDWARE_INTRINSIC(Sve,           PrefetchInt32,                                                    -1,      3,     {INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_sve_prfw,       INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid},     HW_Category_Special,               HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_BaseTypeFromFirstArg|HW_Flag_HasImmediateOperand|HW_Flag_SpecialSideEffect_Other)
-HARDWARE_INTRINSIC(Sve,           PrefetchInt64,                                                    -1,      3,     {INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_sve_prfd,       INS_invalid,        INS_invalid},     HW_Category_Special,               HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_BaseTypeFromFirstArg|HW_Flag_HasImmediateOperand|HW_Flag_SpecialSideEffect_Other)
+HARDWARE_INTRINSIC(Sve,           Prefetch16Bit,                                                    -1,      3,     {INS_invalid,        INS_invalid,        INS_invalid,        INS_sve_prfh,       INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid},     HW_Category_Special,               HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_BaseTypeFromFirstArg|HW_Flag_HasImmediateOperand|HW_Flag_SpecialSideEffect_Other)
+HARDWARE_INTRINSIC(Sve,           Prefetch32Bit,                                                    -1,      3,     {INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_sve_prfw,       INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid},     HW_Category_Special,               HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_BaseTypeFromFirstArg|HW_Flag_HasImmediateOperand|HW_Flag_SpecialSideEffect_Other)
+HARDWARE_INTRINSIC(Sve,           Prefetch64Bit,                                                    -1,      3,     {INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_sve_prfd,       INS_invalid,        INS_invalid},     HW_Category_Special,               HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_BaseTypeFromFirstArg|HW_Flag_HasImmediateOperand|HW_Flag_SpecialSideEffect_Other)
+HARDWARE_INTRINSIC(Sve,           Prefetch8Bit,                                                    -1,      3,     {INS_invalid,        INS_sve_prfb,       INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid},     HW_Category_Special,               HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_BaseTypeFromFirstArg|HW_Flag_HasImmediateOperand|HW_Flag_SpecialSideEffect_Other)
 HARDWARE_INTRINSIC(Sve,           ReciprocalEstimate,                                               -1,      1,     {INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_sve_frecpe,     INS_sve_frecpe},  HW_Category_SIMD,                  HW_Flag_Scalable)
 HARDWARE_INTRINSIC(Sve,           ReciprocalExponent,                                               -1,      -1,    {INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_sve_frecpx,     INS_sve_frecpx},  HW_Category_SIMD,                  HW_Flag_Scalable|HW_Flag_EmbeddedMaskedOperation|HW_Flag_LowMaskedOperation)
 HARDWARE_INTRINSIC(Sve,           ReciprocalSqrtEstimate,                                           -1,      1,     {INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_sve_frsqrte,    INS_sve_frsqrte}, HW_Category_SIMD,                  HW_Flag_Scalable)
diff --git a/src/coreclr/jit/lowerarmarch.cpp b/src/coreclr/jit/lowerarmarch.cpp
index 38d6cb6cf6ba41..a1fe92920ae2cc 100644
--- a/src/coreclr/jit/lowerarmarch.cpp
+++ b/src/coreclr/jit/lowerarmarch.cpp
@@ -3820,10 +3820,10 @@ void Lowering::ContainCheckHWIntrinsic(GenTreeHWIntrinsic* node)
             case NI_AdvSimd_ExtractVector128:
             case NI_AdvSimd_StoreSelectedScalar:
             case NI_AdvSimd_Arm64_StoreSelectedScalar:
-            case NI_Sve_PrefetchBytes:
-            case NI_Sve_PrefetchInt16:
-            case NI_Sve_PrefetchInt32:
-            case NI_Sve_PrefetchInt64:
+            case NI_Sve_Prefetch16Bit:
+            case NI_Sve_Prefetch32Bit:
+            case NI_Sve_Prefetch64Bit:
+            case NI_Sve_Prefetch8Bit:
             case NI_Sve_ExtractVector:
             case NI_Sve_AddRotateComplex:
             case NI_Sve_TrigonometricMultiplyAddCoefficient:
diff --git a/src/coreclr/jit/lsraarm64.cpp b/src/coreclr/jit/lsraarm64.cpp
index 24cd1bd4a818aa..c0a25631715890 100644
--- a/src/coreclr/jit/lsraarm64.cpp
+++ b/src/coreclr/jit/lsraarm64.cpp
@@ -1655,10 +1655,10 @@ void LinearScan::BuildHWIntrinsicImmediate(GenTreeHWIntrinsic* intrinsicTree, co
                 case NI_AdvSimd_ExtractVector128:
                 case NI_AdvSimd_StoreSelectedScalar:
                 case NI_AdvSimd_Arm64_StoreSelectedScalar:
-                case NI_Sve_PrefetchBytes:
-                case NI_Sve_PrefetchInt16:
-                case NI_Sve_PrefetchInt32:
-                case NI_Sve_PrefetchInt64:
+                case NI_Sve_Prefetch16Bit:
+                case NI_Sve_Prefetch32Bit:
+                case NI_Sve_Prefetch64Bit:
+                case NI_Sve_Prefetch8Bit:
                 case NI_Sve_ExtractVector:
                 case NI_Sve_TrigonometricMultiplyAddCoefficient:
                     needBranchTargetReg = !intrin.op3->isContainedIntOrIImmed();
@@ -2356,14 +2356,14 @@ GenTree* LinearScan::getVectorAddrOperand(GenTreeHWIntrinsic* intrinsicTree)
     // Operands that are not loads or stores but do require an address
     switch (intrinsicTree->GetHWIntrinsicId())
     {
-        case NI_Sve_PrefetchBytes:
-        case NI_Sve_PrefetchInt16:
-        case NI_Sve_PrefetchInt32:
-        case NI_Sve_PrefetchInt64:
         case NI_Sve_GatherPrefetch8Bit:
         case NI_Sve_GatherPrefetch16Bit:
         case NI_Sve_GatherPrefetch32Bit:
         case NI_Sve_GatherPrefetch64Bit:
+        case NI_Sve_Prefetch16Bit:
+        case NI_Sve_Prefetch32Bit:
+        case NI_Sve_Prefetch64Bit:
+        case NI_Sve_Prefetch8Bit:
             if (!varTypeIsSIMD(intrinsicTree->Op(2)->gtType))
             {
                 return intrinsicTree->Op(2);
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
index ae59a6fb4f8ed7..edd5835b8b37ca 100644
--- 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
@@ -7422,22 +7422,13 @@ internal Arm64() { }
         public static Vector<ulong> PopCount(Vector<ulong> value) { throw new PlatformNotSupportedException(); }
 
 
-        // Prefetch bytes
-
-        /// <summary>
-        ///   <para>void svprfb(svbool_t pg, const void *base, enum svprfop op)</para>
-        ///   <para>  PRFB op, Pg, [Xbase, #0, MUL VL]</para>
-        /// </summary>
-        public static unsafe void PrefetchBytes(Vector<byte> mask, void* address, [ConstantExpected] SvePrefetchType prefetchType) { throw new PlatformNotSupportedException(); }
-
-
         // Prefetch halfwords
 
         /// <summary>
         ///   <para>void svprfh(svbool_t pg, const void *base, enum svprfop op)</para>
         ///   <para>  PRFH op, Pg, [Xbase, #0, MUL VL]</para>
         /// </summary>
-        public static unsafe void PrefetchInt16(Vector<ushort> mask, void* address, [ConstantExpected] SvePrefetchType prefetchType) { throw new PlatformNotSupportedException(); }
+        public static unsafe void Prefetch16Bit(Vector<ushort> mask, void* address, [ConstantExpected] SvePrefetchType prefetchType) { throw new PlatformNotSupportedException(); }
 
 
         // Prefetch words
@@ -7446,7 +7437,7 @@ internal Arm64() { }
         ///   <para>void svprfw(svbool_t pg, const void *base, enum svprfop op)</para>
         ///   <para>  PRFW op, Pg, [Xbase, #0, MUL VL]</para>
         /// </summary>
-        public static unsafe void PrefetchInt32(Vector<uint> mask, void* address, [ConstantExpected] SvePrefetchType prefetchType) { throw new PlatformNotSupportedException(); }
+        public static unsafe void Prefetch32Bit(Vector<uint> mask, void* address, [ConstantExpected] SvePrefetchType prefetchType) { throw new PlatformNotSupportedException(); }
 
 
         // Prefetch doublewords
@@ -7455,7 +7446,16 @@ internal Arm64() { }
         ///   <para>void svprfd(svbool_t pg, const void *base, enum svprfop op)</para>
         ///   <para>  PRFD op, Pg, [Xbase, #0, MUL VL]</para>
         /// </summary>
-        public static unsafe void PrefetchInt64(Vector<ulong> mask, void* address, [ConstantExpected] SvePrefetchType prefetchType) { throw new PlatformNotSupportedException(); }
+        public static unsafe void Prefetch64Bit(Vector<ulong> mask, void* address, [ConstantExpected] SvePrefetchType prefetchType) { throw new PlatformNotSupportedException(); }
+
+
+        // Prefetch bytes
+
+        /// <summary>
+        ///   <para>void svprfb(svbool_t pg, const void *base, enum svprfop op)</para>
+        ///   <para>  PRFB op, Pg, [Xbase, #0, MUL VL]</para>
+        /// </summary>
+        public static unsafe void Prefetch8Bit(Vector<byte> mask, void* address, [ConstantExpected] SvePrefetchType prefetchType) { throw new PlatformNotSupportedException(); }
 
 
         // Reciprocal estimate
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
index 4664271d600658..9cf0c73acf49b2 100644
--- 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
@@ -7413,22 +7413,13 @@ internal Arm64() { }
         public static Vector<ulong> PopCount(Vector<ulong> value) => PopCount(value);
 
 
-        // Prefetch bytes
-
-        /// <summary>
-        ///   <para>void svprfb(svbool_t pg, const void *base, enum svprfop op)</para>
-        ///   <para>  PRFB op, Pg, [Xbase, #0, MUL VL]</para>
-        /// </summary>
-        public static unsafe void PrefetchBytes(Vector<byte> mask, void* address, [ConstantExpected] SvePrefetchType prefetchType) => PrefetchBytes(mask, address, prefetchType);
-
-
         // Prefetch halfwords
 
         /// <summary>
         ///   <para>void svprfh(svbool_t pg, const void *base, enum svprfop op)</para>
         ///   <para>  PRFH op, Pg, [Xbase, #0, MUL VL]</para>
         /// </summary>
-        public static unsafe void PrefetchInt16(Vector<ushort> mask, void* address, [ConstantExpected] SvePrefetchType prefetchType) => PrefetchInt16(mask, address, prefetchType);
+        public static unsafe void Prefetch16Bit(Vector<ushort> mask, void* address, [ConstantExpected] SvePrefetchType prefetchType) => Prefetch16Bit(mask, address, prefetchType);
 
 
         // Prefetch words
@@ -7437,7 +7428,7 @@ internal Arm64() { }
         ///   <para>void svprfw(svbool_t pg, const void *base, enum svprfop op)</para>
         ///   <para>  PRFW op, Pg, [Xbase, #0, MUL VL]</para>
         /// </summary>
-        public static unsafe void PrefetchInt32(Vector<uint> mask, void* address, [ConstantExpected] SvePrefetchType prefetchType) => PrefetchInt32(mask, address, prefetchType);
+        public static unsafe void Prefetch32Bit(Vector<uint> mask, void* address, [ConstantExpected] SvePrefetchType prefetchType) => Prefetch32Bit(mask, address, prefetchType);
 
 
         // Prefetch doublewords
@@ -7446,7 +7437,16 @@ internal Arm64() { }
         ///   <para>void svprfd(svbool_t pg, const void *base, enum svprfop op)</para>
         ///   <para>  PRFD op, Pg, [Xbase, #0, MUL VL]</para>
         /// </summary>
-        public static unsafe void PrefetchInt64(Vector<ulong> mask, void* address, [ConstantExpected] SvePrefetchType prefetchType) => PrefetchInt64(mask, address, prefetchType);
+        public static unsafe void Prefetch64Bit(Vector<ulong> mask, void* address, [ConstantExpected] SvePrefetchType prefetchType) => Prefetch64Bit(mask, address, prefetchType);
+
+
+        // Prefetch bytes
+
+        /// <summary>
+        ///   <para>void svprfb(svbool_t pg, const void *base, enum svprfop op)</para>
+        ///   <para>  PRFB op, Pg, [Xbase, #0, MUL VL]</para>
+        /// </summary>
+        public static unsafe void Prefetch8Bit(Vector<byte> mask, void* address, [ConstantExpected] SvePrefetchType prefetchType) => Prefetch8Bit(mask, address, prefetchType);
 
 
         // Reciprocal estimate
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 b27ff60f800823..e6e4d648603ee2 100644
--- a/src/libraries/System.Runtime.Intrinsics/ref/System.Runtime.Intrinsics.cs
+++ b/src/libraries/System.Runtime.Intrinsics/ref/System.Runtime.Intrinsics.cs
@@ -5561,10 +5561,10 @@ internal Arm64() { }
         public static System.Numerics.Vector<ulong> PopCount(System.Numerics.Vector<double> value) { throw null; }
         public static System.Numerics.Vector<ulong> PopCount(System.Numerics.Vector<long> value) { throw null; }
         public static System.Numerics.Vector<ulong> PopCount(System.Numerics.Vector<ulong> value) { throw null; }
-        public static unsafe void PrefetchBytes(System.Numerics.Vector<byte> mask, void* address, [ConstantExpected] SvePrefetchType prefetchType) { throw null; }
-        public static unsafe void PrefetchInt16(System.Numerics.Vector<ushort> mask, void* address, [ConstantExpected] SvePrefetchType prefetchType) { throw null; }
-        public static unsafe void PrefetchInt32(System.Numerics.Vector<uint> mask, void* address, [ConstantExpected] SvePrefetchType prefetchType) { throw null; }
-        public static unsafe void PrefetchInt64(System.Numerics.Vector<ulong> mask, void* address, [ConstantExpected] SvePrefetchType prefetchType) { throw null; }
+        public static unsafe void Prefetch16Bit(System.Numerics.Vector<ushort> mask, void* address, [ConstantExpected] SvePrefetchType prefetchType) { throw null; }
+        public static unsafe void Prefetch32Bit(System.Numerics.Vector<uint> mask, void* address, [ConstantExpected] SvePrefetchType prefetchType) { throw null; }
+        public static unsafe void Prefetch64Bit(System.Numerics.Vector<ulong> mask, void* address, [ConstantExpected] SvePrefetchType prefetchType) { throw null; }
+        public static unsafe void Prefetch8Bit(System.Numerics.Vector<byte> mask, void* address, [ConstantExpected] SvePrefetchType prefetchType) { throw null; }
         public static System.Numerics.Vector<double> ReciprocalEstimate(System.Numerics.Vector<double> value) { throw null; }
         public static System.Numerics.Vector<float> ReciprocalEstimate(System.Numerics.Vector<float> value) { throw null; }
         public static System.Numerics.Vector<double> ReciprocalExponent(System.Numerics.Vector<double> value) { throw null; }
diff --git a/src/libraries/apicompat/ApiCompatBaseline.NetCoreAppLatestStable.xml b/src/libraries/apicompat/ApiCompatBaseline.NetCoreAppLatestStable.xml
index 811dd618a5fa24..4317f49799c665 100644
--- a/src/libraries/apicompat/ApiCompatBaseline.NetCoreAppLatestStable.xml
+++ b/src/libraries/apicompat/ApiCompatBaseline.NetCoreAppLatestStable.xml
@@ -1,6 +1,30 @@
 ﻿<?xml version="1.0" encoding="utf-8"?>
 <!-- https://learn.microsoft.com/dotnet/fundamentals/package-validation/diagnostic-ids -->
 <Suppressions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+  <Suppression>
+    <DiagnosticId>CP0002</DiagnosticId>
+    <Target>M:System.Runtime.Intrinsics.Arm.Sve.PrefetchBytes(System.Numerics.Vector{System.Byte},System.Void*,System.Runtime.Intrinsics.Arm.SvePrefetchType)</Target>
+    <Left>net9.0/System.Runtime.Intrinsics.dll</Left>
+    <Right>net10.0/System.Runtime.Intrinsics.dll</Right>
+  </Suppression>
+  <Suppression>
+    <DiagnosticId>CP0002</DiagnosticId>
+    <Target>M:System.Runtime.Intrinsics.Arm.Sve.PrefetchInt16(System.Numerics.Vector{System.UInt16},System.Void*,System.Runtime.Intrinsics.Arm.SvePrefetchType)</Target>
+    <Left>net9.0/System.Runtime.Intrinsics.dll</Left>
+    <Right>net10.0/System.Runtime.Intrinsics.dll</Right>
+  </Suppression>
+  <Suppression>
+    <DiagnosticId>CP0002</DiagnosticId>
+    <Target>M:System.Runtime.Intrinsics.Arm.Sve.PrefetchInt32(System.Numerics.Vector{System.UInt32},System.Void*,System.Runtime.Intrinsics.Arm.SvePrefetchType)</Target>
+    <Left>net9.0/System.Runtime.Intrinsics.dll</Left>
+    <Right>net10.0/System.Runtime.Intrinsics.dll</Right>
+  </Suppression>
+  <Suppression>
+    <DiagnosticId>CP0002</DiagnosticId>
+    <Target>M:System.Runtime.Intrinsics.Arm.Sve.PrefetchInt64(System.Numerics.Vector{System.UInt64},System.Void*,System.Runtime.Intrinsics.Arm.SvePrefetchType)</Target>
+    <Left>net9.0/System.Runtime.Intrinsics.dll</Left>
+    <Right>net10.0/System.Runtime.Intrinsics.dll</Right>
+  </Suppression>
   <Suppression>
     <DiagnosticId>CP0015</DiagnosticId>
     <Target>M:System.Delegate.#ctor(System.Type,System.String)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute]</Target>
diff --git a/src/tests/Common/GenerateHWIntrinsicTests/GenerateHWIntrinsicTests_Arm.cs b/src/tests/Common/GenerateHWIntrinsicTests/GenerateHWIntrinsicTests_Arm.cs
index e7a5153a0c6da8..b02de9ca09df58 100644
--- a/src/tests/Common/GenerateHWIntrinsicTests/GenerateHWIntrinsicTests_Arm.cs
+++ b/src/tests/Common/GenerateHWIntrinsicTests/GenerateHWIntrinsicTests_Arm.cs
@@ -4172,12 +4172,10 @@
     ("SveSimpleVecOpTest.template",         new Dictionary<string, string> { ["TestName"] = "Sve_PopCount_ushort",                                                                                 ["Isa"] = "Sve",           ["LoadIsa"] = "Sve",     ["Method"] = "PopCount",                                                             ["RetVectorType"] = "Vector",    ["RetBaseType"] = "UInt16",  ["Op1VectorType"] = "Vector",    ["Op1BaseType"] = "UInt16",                                                                                                                           ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt16()",                                                                                                                                                      ["ValidateIterResult"] = "Helpers.BitCount(firstOp[i]) != result[i]",         ["GetIterResult"] = "Helpers.BitCount(leftOp[i])"}),
     ("SveSimpleVecOpTest.template",         new Dictionary<string, string> { ["TestName"] = "Sve_PopCount_uint",                                                                                   ["Isa"] = "Sve",           ["LoadIsa"] = "Sve",     ["Method"] = "PopCount",                                                             ["RetVectorType"] = "Vector",    ["RetBaseType"] = "UInt32",  ["Op1VectorType"] = "Vector",    ["Op1BaseType"] = "UInt32",                                                                                                                           ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt32()",                                                                                                                                                      ["ValidateIterResult"] = "Helpers.BitCount(firstOp[i]) != result[i]",         ["GetIterResult"] = "Helpers.BitCount(leftOp[i])"}),
     ("SveSimpleVecOpTest.template",         new Dictionary<string, string> { ["TestName"] = "Sve_PopCount_ulong",                                                                                  ["Isa"] = "Sve",           ["LoadIsa"] = "Sve",     ["Method"] = "PopCount",                                                             ["RetVectorType"] = "Vector",    ["RetBaseType"] = "UInt64",  ["Op1VectorType"] = "Vector",    ["Op1BaseType"] = "UInt64",                                                                                                                           ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt64()",                                                                                                                                                      ["ValidateIterResult"] = "Helpers.BitCount(firstOp[i]) != result[i]",         ["GetIterResult"] = "Helpers.BitCount(leftOp[i])"}),
-
-    ("SvePrefetchTest.template",         new Dictionary<string, string> { ["TestName"] = "Sve_PrefetchBytes",                                                                                      ["Isa"] = "Sve",           ["LoadIsa"] = "Sve",     ["Method"] = "PrefetchBytes",                                                        ["Op1VectorType"] = "Vector",    ["Op1BaseType"] = "Byte",                                                                                                                          ["LargestVectorSize"] = "64", ["NextValueOp2"] = "TestLibrary.Generator.GetByte()",   ["ValidPrefetch"] = "SvePrefetchType.LoadL1Temporal",     ["InvalidPrefetch"] = "(SvePrefetchType)100"}),
-    ("SvePrefetchTest.template",         new Dictionary<string, string> { ["TestName"] = "Sve_PrefetchInt16",                                                                                      ["Isa"] = "Sve",           ["LoadIsa"] = "Sve",     ["Method"] = "PrefetchInt16",                                                        ["Op1VectorType"] = "Vector",    ["Op1BaseType"] = "UInt16",                                                                                                                        ["LargestVectorSize"] = "64", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt16()", ["ValidPrefetch"] = "SvePrefetchType.LoadL2NonTemporal",  ["InvalidPrefetch"] = "(SvePrefetchType)18"}),
-    ("SvePrefetchTest.template",         new Dictionary<string, string> { ["TestName"] = "Sve_PrefetchInt32",                                                                                      ["Isa"] = "Sve",           ["LoadIsa"] = "Sve",     ["Method"] = "PrefetchInt32",                                                        ["Op1VectorType"] = "Vector",    ["Op1BaseType"] = "UInt32",                                                                                                                        ["LargestVectorSize"] = "64", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt32()", ["ValidPrefetch"] = "SvePrefetchType.StoreL3Temporal",    ["InvalidPrefetch"] = "(SvePrefetchType)20"}),
-    ("SvePrefetchTest.template",         new Dictionary<string, string> { ["TestName"] = "Sve_PrefetchInt64",                                                                                      ["Isa"] = "Sve",           ["LoadIsa"] = "Sve",     ["Method"] = "PrefetchInt64",                                                        ["Op1VectorType"] = "Vector",    ["Op1BaseType"] = "UInt64",                                                                                                                        ["LargestVectorSize"] = "64", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt64()", ["ValidPrefetch"] = "SvePrefetchType.StoreL1NonTemporal", ["InvalidPrefetch"] = "(SvePrefetchType)87"}),
-
+    ("SvePrefetchTest.template",         new Dictionary<string, string> { ["TestName"] = "Sve_Prefetch16Bit",                                                                                      ["Isa"] = "Sve",           ["LoadIsa"] = "Sve",     ["Method"] = "Prefetch16Bit",                                                        ["Op1VectorType"] = "Vector",    ["Op1BaseType"] = "UInt16",                                                                                                                        ["LargestVectorSize"] = "64", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt16()", ["ValidPrefetch"] = "SvePrefetchType.LoadL2NonTemporal",  ["InvalidPrefetch"] = "(SvePrefetchType)18"}),
+    ("SvePrefetchTest.template",         new Dictionary<string, string> { ["TestName"] = "Sve_Prefetch32Bit",                                                                                      ["Isa"] = "Sve",           ["LoadIsa"] = "Sve",     ["Method"] = "Prefetch32Bit",                                                        ["Op1VectorType"] = "Vector",    ["Op1BaseType"] = "UInt32",                                                                                                                        ["LargestVectorSize"] = "64", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt32()", ["ValidPrefetch"] = "SvePrefetchType.StoreL3Temporal",    ["InvalidPrefetch"] = "(SvePrefetchType)20"}),
+    ("SvePrefetchTest.template",         new Dictionary<string, string> { ["TestName"] = "Sve_Prefetch64Bit",                                                                                      ["Isa"] = "Sve",           ["LoadIsa"] = "Sve",     ["Method"] = "Prefetch64Bit",                                                        ["Op1VectorType"] = "Vector",    ["Op1BaseType"] = "UInt64",                                                                                                                        ["LargestVectorSize"] = "64", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt64()", ["ValidPrefetch"] = "SvePrefetchType.StoreL1NonTemporal", ["InvalidPrefetch"] = "(SvePrefetchType)87"}),
+    ("SvePrefetchTest.template",         new Dictionary<string, string> { ["TestName"] = "Sve_Prefetch8Bit",                                                                                      ["Isa"] = "Sve",           ["LoadIsa"] = "Sve",     ["Method"] = "Prefetch8Bit",                                                        ["Op1VectorType"] = "Vector",    ["Op1BaseType"] = "Byte",                                                                                                                          ["LargestVectorSize"] = "64", ["NextValueOp2"] = "TestLibrary.Generator.GetByte()",   ["ValidPrefetch"] = "SvePrefetchType.LoadL1Temporal",     ["InvalidPrefetch"] = "(SvePrefetchType)100"}),
     ("SveSimpleVecOpTest.template",       new Dictionary<string, string> { ["TestName"] = "Sve_ReverseBits_byte",                                                                                  ["Isa"] = "Sve",           ["LoadIsa"] = "Sve",     ["Method"] = "ReverseBits",                                                          ["RetVectorType"] = "Vector",    ["RetBaseType"] = "Byte",    ["Op1VectorType"] = "Vector",    ["Op1BaseType"] = "Byte",                                                                                                                             ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetByte()",                                                                                                                                                        ["ValidateIterResult"] = "result[i] != Helpers.ReverseElementBits(firstOp[i])",  ["GetIterResult"] = "Helpers.ReverseElementBits(leftOp[i])"}),
     ("SveSimpleVecOpTest.template",       new Dictionary<string, string> { ["TestName"] = "Sve_ReverseBits_short",                                                                                 ["Isa"] = "Sve",           ["LoadIsa"] = "Sve",     ["Method"] = "ReverseBits",                                                          ["RetVectorType"] = "Vector",    ["RetBaseType"] = "Int16",   ["Op1VectorType"] = "Vector",    ["Op1BaseType"] = "Int16",                                                                                                                            ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()",                                                                                                                                                       ["ValidateIterResult"] = "result[i] != Helpers.ReverseElementBits(firstOp[i])",  ["GetIterResult"] = "Helpers.ReverseElementBits(leftOp[i])"}),
     ("SveSimpleVecOpTest.template",       new Dictionary<string, string> { ["TestName"] = "Sve_ReverseBits_int",                                                                                   ["Isa"] = "Sve",           ["LoadIsa"] = "Sve",     ["Method"] = "ReverseBits",                                                          ["RetVectorType"] = "Vector",    ["RetBaseType"] = "Int32",   ["Op1VectorType"] = "Vector",    ["Op1BaseType"] = "Int32",                                                                                                                            ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()",                                                                                                                                                       ["ValidateIterResult"] = "result[i] != Helpers.ReverseElementBits(firstOp[i])",  ["GetIterResult"] = "Helpers.ReverseElementBits(leftOp[i])"}),


Reviews:
user: login: kunalspathak
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-16T18:26:06Z
user: login: kunalspathak
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-16T18:27:08Z
user: login: kunalspathak
body: LGTM
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-05-16T18:29:23Z
user: login: kunalspathak
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-19T17:08:20Z
user: login: tannergooding
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-05-22T18:03:54Z
user: login: jonathandavies-arm
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-27T13:28:40Z
user: login: tannergooding
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-05-27T15:42:32Z
user: login: kunalspathak
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-29T13:15:17Z
user: login: jonathandavies-arm
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-29T13:23:22Z
user: login: kunalspathak
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-29T14:02:11Z
user: login: kunalspathak
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-29T14:02:49Z
user: login: jonathandavies-arm
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-29T14:26:15Z
user: login: tannergooding
state: APPROVED
author_association: MEMBER
submitted_at: 2025-05-29T15:19:17Z

Review comments:
diff_hunk: @@ -227,10 +227,10 @@ HARDWARE_INTRINSIC(Sve,           Not,
 HARDWARE_INTRINSIC(Sve,           Or,                                                               -1,     -1,     {INS_sve_orr,        INS_sve_orr,        INS_sve_orr,        INS_sve_orr,        INS_sve_orr,        INS_sve_orr,        INS_sve_orr,        INS_sve_orr,        INS_invalid,        INS_invalid},     HW_Category_SIMD,                  HW_Flag_Scalable|HW_Flag_OptionalEmbeddedMaskedOperation|HW_Flag_HasRMWSemantics|HW_Flag_LowMaskedOperation)
 HARDWARE_INTRINSIC(Sve,           OrAcross,                                                         -1,     -1,     {INS_sve_orv,        INS_sve_orv,        INS_sve_orv,        INS_sve_orv,        INS_sve_orv,        INS_sve_orv,        INS_sve_orv,        INS_sve_orv,        INS_invalid,        INS_invalid},     HW_Category_SIMD,                  HW_Flag_Scalable|HW_Flag_EmbeddedMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_ReduceOperation)
 HARDWARE_INTRINSIC(Sve,           PopCount,                                                         -1,     -1,     {INS_sve_cnt,        INS_sve_cnt,        INS_sve_cnt,        INS_sve_cnt,        INS_sve_cnt,        INS_sve_cnt,        INS_sve_cnt,        INS_sve_cnt,        INS_sve_cnt,        INS_sve_cnt},     HW_Category_SIMD,                  HW_Flag_Scalable|HW_Flag_BaseTypeFromFirstArg|HW_Flag_EmbeddedMaskedOperation|HW_Flag_LowMaskedOperation)
-HARDWARE_INTRINSIC(Sve,           PrefetchBytes,                                                    -1,      3,     {INS_invalid,        INS_sve_prfb,       INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid},     HW_Category_Special,               HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_BaseTypeFromFirstArg|HW_Flag_HasImmediateOperand|HW_Flag_SpecialSideEffect_Other)
-HARDWARE_INTRINSIC(Sve,           PrefetchInt16,                                                    -1,      3,     {INS_invalid,        INS_invalid,        INS_invalid,        INS_sve_prfh,       INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid},     HW_Category_Special,               HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_BaseTypeFromFirstArg|HW_Flag_HasImmediateOperand|HW_Flag_SpecialSideEffect_Other)
-HARDWARE_INTRINSIC(Sve,           PrefetchInt32,                                                    -1,      3,     {INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_sve_prfw,       INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid},     HW_Category_Special,               HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_BaseTypeFromFirstArg|HW_Flag_HasImmediateOperand|HW_Flag_SpecialSideEffect_Other)
-HARDWARE_INTRINSIC(Sve,           PrefetchInt64,                                                    -1,      3,     {INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_sve_prfd,       INS_invalid,        INS_invalid},     HW_Category_Special,               HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_BaseTypeFromFirstArg|HW_Flag_HasImmediateOperand|HW_Flag_SpecialSideEffect_Other)
+HARDWARE_INTRINSIC(Sve,           Prefetch16Bit,                                                    -1,      3,     {INS_invalid,        INS_invalid,        INS_invalid,        INS_sve_prfh,       INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid},     HW_Category_Special,               HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_BaseTypeFromFirstArg|HW_Flag_HasImmediateOperand|HW_Flag_SpecialSideEffect_Other)
+HARDWARE_INTRINSIC(Sve,           Prefetch32Bit,                                                    -1,      3,     {INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_sve_prfw,       INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid},     HW_Category_Special,               HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_BaseTypeFromFirstArg|HW_Flag_HasImmediateOperand|HW_Flag_SpecialSideEffect_Other)
+HARDWARE_INTRINSIC(Sve,           Prefetch64Bit,                                                    -1,      3,     {INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_sve_prfd,       INS_invalid,        INS_invalid},     HW_Category_Special,               HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_BaseTypeFromFirstArg|HW_Flag_HasImmediateOperand|HW_Flag_SpecialSideEffect_Other)
+HARDWARE_INTRINSIC(Sve,           Prefetch8Bit,                                                    -1,      3,     {INS_invalid,        INS_sve_prfb,       INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid},     HW_Category_Special,               HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_BaseTypeFromFirstArg|HW_Flag_HasImmediateOperand|HW_Flag_SpecialSideEffect_Other)
path: src/coreclr/jit/hwintrinsiclistarm64sve.h
user: login: kunalspathak
body: ```suggestion
HARDWARE_INTRINSIC(Sve,           Prefetch8Bit,                                                    -1,      3,      {INS_invalid,        INS_sve_prfb,       INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid},     HW_Category_Special,               HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_BaseTypeFromFirstArg|HW_Flag_HasImmediateOperand|HW_Flag_SpecialSideEffect_Other)
```
created_at: 2025-05-16T18:26:06Z
author_association: CONTRIBUTOR
diff_hunk: @@ -227,10 +227,10 @@ HARDWARE_INTRINSIC(Sve,           Not,
 HARDWARE_INTRINSIC(Sve,           Or,                                                               -1,     -1,     {INS_sve_orr,        INS_sve_orr,        INS_sve_orr,        INS_sve_orr,        INS_sve_orr,        INS_sve_orr,        INS_sve_orr,        INS_sve_orr,        INS_invalid,        INS_invalid},     HW_Category_SIMD,                  HW_Flag_Scalable|HW_Flag_OptionalEmbeddedMaskedOperation|HW_Flag_HasRMWSemantics|HW_Flag_LowMaskedOperation)
 HARDWARE_INTRINSIC(Sve,           OrAcross,                                                         -1,     -1,     {INS_sve_orv,        INS_sve_orv,        INS_sve_orv,        INS_sve_orv,        INS_sve_orv,        INS_sve_orv,        INS_sve_orv,        INS_sve_orv,        INS_invalid,        INS_invalid},     HW_Category_SIMD,                  HW_Flag_Scalable|HW_Flag_EmbeddedMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_ReduceOperation)
 HARDWARE_INTRINSIC(Sve,           PopCount,                                                         -1,     -1,     {INS_sve_cnt,        INS_sve_cnt,        INS_sve_cnt,        INS_sve_cnt,        INS_sve_cnt,        INS_sve_cnt,        INS_sve_cnt,        INS_sve_cnt,        INS_sve_cnt,        INS_sve_cnt},     HW_Category_SIMD,                  HW_Flag_Scalable|HW_Flag_BaseTypeFromFirstArg|HW_Flag_EmbeddedMaskedOperation|HW_Flag_LowMaskedOperation)
-HARDWARE_INTRINSIC(Sve,           PrefetchBytes,                                                    -1,      3,     {INS_invalid,        INS_sve_prfb,       INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid},     HW_Category_Special,               HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_BaseTypeFromFirstArg|HW_Flag_HasImmediateOperand|HW_Flag_SpecialSideEffect_Other)
-HARDWARE_INTRINSIC(Sve,           PrefetchInt16,                                                    -1,      3,     {INS_invalid,        INS_invalid,        INS_invalid,        INS_sve_prfh,       INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid},     HW_Category_Special,               HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_BaseTypeFromFirstArg|HW_Flag_HasImmediateOperand|HW_Flag_SpecialSideEffect_Other)
-HARDWARE_INTRINSIC(Sve,           PrefetchInt32,                                                    -1,      3,     {INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_sve_prfw,       INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid},     HW_Category_Special,               HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_BaseTypeFromFirstArg|HW_Flag_HasImmediateOperand|HW_Flag_SpecialSideEffect_Other)
-HARDWARE_INTRINSIC(Sve,           PrefetchInt64,                                                    -1,      3,     {INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_sve_prfd,       INS_invalid,        INS_invalid},     HW_Category_Special,               HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_BaseTypeFromFirstArg|HW_Flag_HasImmediateOperand|HW_Flag_SpecialSideEffect_Other)
+HARDWARE_INTRINSIC(Sve,           Prefetch16Bit,                                                    -1,      3,     {INS_invalid,        INS_invalid,        INS_invalid,        INS_sve_prfh,       INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid},     HW_Category_Special,               HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_BaseTypeFromFirstArg|HW_Flag_HasImmediateOperand|HW_Flag_SpecialSideEffect_Other)
+HARDWARE_INTRINSIC(Sve,           Prefetch32Bit,                                                    -1,      3,     {INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_sve_prfw,       INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid},     HW_Category_Special,               HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_BaseTypeFromFirstArg|HW_Flag_HasImmediateOperand|HW_Flag_SpecialSideEffect_Other)
+HARDWARE_INTRINSIC(Sve,           Prefetch64Bit,                                                    -1,      3,     {INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_sve_prfd,       INS_invalid,        INS_invalid},     HW_Category_Special,               HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_BaseTypeFromFirstArg|HW_Flag_HasImmediateOperand|HW_Flag_SpecialSideEffect_Other)
+HARDWARE_INTRINSIC(Sve,           Prefetch8Bit,                                                    -1,      3,      {INS_invalid,        INS_sve_prfb,       INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid},     HW_Category_Special,               HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_BaseTypeFromFirstArg|HW_Flag_HasImmediateOperand|HW_Flag_SpecialSideEffect_Other)
path: src/coreclr/jit/hwintrinsiclistarm64sve.h
user: login: kunalspathak
body: ```suggestion
HARDWARE_INTRINSIC(Sve,           Prefetch8Bit,                                                     -1,      3,     {INS_invalid,        INS_sve_prfb,       INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid,        INS_invalid},     HW_Category_Special,               HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_BaseTypeFromFirstArg|HW_Flag_HasImmediateOperand|HW_Flag_SpecialSideEffect_Other)
```
created_at: 2025-05-16T18:27:08Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,28 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!-- https://learn.microsoft.com/dotnet/fundamentals/package-validation/diagnostic-ids -->
path: src/coreclr/System.Private.CoreLib/CompatibilitySuppressions.xml
user: login: kunalspathak
body: what is the purpose of adding this file?
created_at: 2025-05-19T17:08:20Z
author_association: CONTRIBUTOR
diff_hunk: @@ -1,6 +1,30 @@
 ﻿<?xml version="1.0" encoding="utf-8"?>
 <!-- https://learn.microsoft.com/dotnet/fundamentals/package-validation/diagnostic-ids -->
 <Suppressions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+  <Suppression>
path: src/libraries/apicompat/ApiCompatBaseline.NetCoreAppLatestStable.xml
user: login: tannergooding
body: Just wondering, were these authored by hand or by running `dotnet build -c Release /p:ApiCompatGenerateSuppressionFile=true` in the appropriate folder?
created_at: 2025-05-22T18:03:54Z
author_association: MEMBER
diff_hunk: @@ -1,6 +1,30 @@
 ﻿<?xml version="1.0" encoding="utf-8"?>
 <!-- https://learn.microsoft.com/dotnet/fundamentals/package-validation/diagnostic-ids -->
 <Suppressions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+  <Suppression>
path: src/libraries/apicompat/ApiCompatBaseline.NetCoreAppLatestStable.xml
user: login: jonathandavies-arm
body: It was generated from the build, although not a release build. Does it matter which directory you run the build from?
created_at: 2025-05-27T13:28:40Z
author_association: CONTRIBUTOR
diff_hunk: @@ -1,6 +1,30 @@
 ﻿<?xml version="1.0" encoding="utf-8"?>
 <!-- https://learn.microsoft.com/dotnet/fundamentals/package-validation/diagnostic-ids -->
 <Suppressions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+  <Suppression>
path: src/libraries/apicompat/ApiCompatBaseline.NetCoreAppLatestStable.xml
user: login: tannergooding
body: It can, but if you ended up getting something emitted then it was likely from the right folder.

It's namely either the `src` or `pkg` folder depending on if the project has one or not.
created_at: 2025-05-27T15:42:32Z
author_association: MEMBER
diff_hunk: @@ -1,6 +1,30 @@
 ﻿<?xml version="1.0" encoding="utf-8"?>
 <!-- https://learn.microsoft.com/dotnet/fundamentals/package-validation/diagnostic-ids -->
 <Suppressions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+  <Suppression>
path: src/libraries/apicompat/ApiCompatBaseline.NetCoreAppLatestStable.xml
user: login: kunalspathak
body: @jonathandavies-arm - is this something that you are planning to fix?
created_at: 2025-05-29T13:15:17Z
author_association: CONTRIBUTOR
diff_hunk: @@ -1,6 +1,30 @@
 ﻿<?xml version="1.0" encoding="utf-8"?>
 <!-- https://learn.microsoft.com/dotnet/fundamentals/package-validation/diagnostic-ids -->
 <Suppressions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+  <Suppression>
path: src/libraries/apicompat/ApiCompatBaseline.NetCoreAppLatestStable.xml
user: login: jonathandavies-arm
body: I don't understand what the problem is. 
created_at: 2025-05-29T13:23:21Z
author_association: CONTRIBUTOR
diff_hunk: @@ -1,6 +1,30 @@
 ﻿<?xml version="1.0" encoding="utf-8"?>
 <!-- https://learn.microsoft.com/dotnet/fundamentals/package-validation/diagnostic-ids -->
 <Suppressions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+  <Suppression>
path: src/libraries/apicompat/ApiCompatBaseline.NetCoreAppLatestStable.xml
user: login: kunalspathak
body: If this was generated passing `/p:ApiCompatGenerateSuppressionFile=true` then I don't think there is anything to be done here. Can you confirm that it was used?
created_at: 2025-05-29T14:02:10Z
author_association: CONTRIBUTOR
diff_hunk: @@ -1,6 +1,30 @@
 ﻿<?xml version="1.0" encoding="utf-8"?>
 <!-- https://learn.microsoft.com/dotnet/fundamentals/package-validation/diagnostic-ids -->
 <Suppressions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+  <Suppression>
path: src/libraries/apicompat/ApiCompatBaseline.NetCoreAppLatestStable.xml
user: login: kunalspathak
body: reference: https://github.com/dotnet/runtime/tree/main/docs/workflow/building/libraries#apicompat
created_at: 2025-05-29T14:02:49Z
author_association: CONTRIBUTOR
diff_hunk: @@ -1,6 +1,30 @@
 ﻿<?xml version="1.0" encoding="utf-8"?>
 <!-- https://learn.microsoft.com/dotnet/fundamentals/package-validation/diagnostic-ids -->
 <Suppressions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+  <Suppression>
path: src/libraries/apicompat/ApiCompatBaseline.NetCoreAppLatestStable.xml
user: login: jonathandavies-arm
body: This file was changed when I built with the `/p:ApiCompatGenerateSuppressionFile=true` flag
created_at: 2025-05-29T14:26:14Z
author_association: CONTRIBUTOR

PR comments:
user: login: a74nh
created_at: 2025-05-16T11:20:10Z
body: @kunalspathak : Now that SVE exists in .NET9 and .NET10 do we have to do something special when changing the API names?

```
2025-05-15T13:50:31.1464888Z D:\a\_work\1\s\src\libraries\apicompat\ApiCompat.proj(93,5): error : API compatibility errors between 'net9.0/System.Runtime.Intrinsics.dll' (left) and 'net10.0/System.Runtime.Intrinsics.dll' (right):
2025-05-15T13:50:31.1474870Z D:\a\_work\1\s\src\libraries\apicompat\ApiCompat.proj(93,5): error CP0002: Member 'void System.Runtime.Intrinsics.Arm.Sve.PrefetchBytes(System.Numerics.Vector<byte>, void*, System.Runtime.Intrinsics.Arm.SvePrefetchType)' exists on net9.0/System.Runtime.Intrinsics.dll but not on net10.0/System.Runtime.Intrinsics.dll
2025-05-15T13:50:31.1477545Z D:\a\_work\1\s\src\libraries\apicompat\ApiCompat.proj(93,5): error CP0002: Member 'void System.Runtime.Intrinsics.Arm.Sve.PrefetchInt16(System.Numerics.Vector<ushort>, void*, System.Runtime.Intrinsics.Arm.SvePrefetchType)' exists on net9.0/System.Runtime.Intrinsics.dll but not on net10.0/System.Runtime.Intrinsics.dll
2025-05-15T13:50:31.1491490Z D:\a\_work\1\s\src\libraries\apicompat\ApiCompat.proj(93,5): error CP0002: Member 'void System.Runtime.Intrinsics.Arm.Sve.PrefetchInt32(System.Numerics.Vector<uint>, void*, System.Runtime.Intrinsics.Arm.SvePrefetchType)' exists on net9.0/System.Runtime.Intrinsics.dll but not on net10.0/System.Runtime.Intrinsics.dll
2025-05-15T13:50:31.1508773Z D:\a\_work\1\s\src\libraries\apicompat\ApiCompat.proj(93,5): error CP0002: Member 'void System.Runtime.Intrinsics.Arm.Sve.PrefetchInt64(System.Numerics.Vector<ulong>, void*, System.Runtime.Intrinsics.Arm.SvePrefetchType)' exists on net9.0/System.Runtime.Intrinsics.dll but not on net10.0/System.Runtime.Intrinsics.dll
2025-05-15T13:50:31.1636343Z D:\a\_work\1\s\src\libraries\apicompat\ApiCompat.proj(93,5): error : API breaking changes found. If those are intentional, the APICompat suppression file can be updated by rebuilding with '/p:ApiCompatGenerateSuppressionFile=true'
```
author_association: CONTRIBUTOR
user: login: kunalspathak
created_at: 2025-05-21T14:38:03Z
body: @tannergooding - can you double check the changes in `ApiCompatBaseline`?
author_association: CONTRIBUTOR
user: login: kunalspathak
created_at: 2025-05-29T16:07:08Z
body: /ba-g failures are unrelated
author_association: CONTRIBUTOR
user: login: dotnet-policy-service[bot]
created_at: 2025-06-10T18:21:13Z
body: Added `needs-breaking-change-doc-created` label because this PR has the `breaking-change` label.

When you commit this breaking change:

1. [ ] Create and link to this PR and the issue a matching issue in the dotnet/docs repo using the [breaking change documentation template](https://aka.ms/dotnet/docs/new-breaking-change-issue), then remove this `needs-breaking-change-doc-created` label.
2. [ ] Ask a committer to mail the `.NET Breaking Change Notification` DL.

Tagging @dotnet/compat for awareness of the breaking change.
<!-- Policy app identification https://img.shields.io/static/v1?label=PullRequestIssueManagement. -->
author_association: CONTRIBUTOR
user: login: ericstj
created_at: 2025-06-10T18:25:51Z
body: I marked this as breaking since it changed the method name.   This is binary breaking for folks moving from .NET 9.0 to 10.0.  @tannergooding are we OK with that break?  It will mean libraries built against 9.0 will fail at runtime if they use these methods.
author_association: MEMBER
user: login: ericstj
created_at: 2025-06-10T21:25:47Z
body: Correction, @kunalspathak let me know this was in experimental API - which is OK.  That's an expected risk folks take using experimental API.  Your call if you'd like to document this as breaking or not.

@gewarren - anything special that needs to happen in this case to clean up API docs for these renamed methods?  I'm guessing the system is not going to just discover that these are removed.
author_association: MEMBER
user: login: gewarren
created_at: 2025-06-10T22:25:33Z
body: @ericstj I logged an [issue](https://github.com/dotnet/dotnet-api-docs/issues/11427) to add remarks about the new method names. The old methods will appear when .NET 9 is selected and disappear when .NET 10 is selected.
author_association: CONTRIBUTOR