diff --git a/src/libraries/System.Private.CoreLib/src/System/SpanHelpers.T.cs b/src/libraries/System.Private.CoreLib/src/System/SpanHelpers.T.cs index 0d61e3b662da7a..5f8136a16cd89f 100644 --- a/src/libraries/System.Private.CoreLib/src/System/SpanHelpers.T.cs +++ b/src/libraries/System.Private.CoreLib/src/System/SpanHelpers.T.cs @@ -34,29 +34,29 @@ public static unsafe void Fill(ref T refData, nuint numElements, T value) if (sizeof(T) == 1) { - vector = new Vector(Unsafe.As(ref tmp)); + vector = Vector.Create(Unsafe.As(ref tmp)); } else if (sizeof(T) == 2) { - vector = (Vector)(new Vector(Unsafe.As(ref tmp))); + vector = (Vector)Vector.Create(Unsafe.ReadUnaligned(ref Unsafe.As(ref tmp))); } else if (sizeof(T) == 4) { // special-case float since it's already passed in a SIMD reg vector = (typeof(T) == typeof(float)) - ? (Vector)(new Vector((float)(object)tmp!)) - : (Vector)(new Vector(Unsafe.As(ref tmp))); + ? (Vector)Vector.Create(Unsafe.BitCast(tmp)) + : (Vector)Vector.Create(Unsafe.ReadUnaligned(ref Unsafe.As(ref tmp))); } else if (sizeof(T) == 8) { // special-case double since it's already passed in a SIMD reg vector = (typeof(T) == typeof(double)) - ? (Vector)(new Vector((double)(object)tmp!)) - : (Vector)(new Vector(Unsafe.As(ref tmp))); + ? (Vector)Vector.Create(Unsafe.BitCast(tmp)) + : (Vector)Vector.Create(Unsafe.ReadUnaligned(ref Unsafe.As(ref tmp))); } else if (sizeof(T) == 16) { - Vector128 vec128 = Unsafe.As>(ref tmp); + Vector128 vec128 = Vector128.LoadUnsafe(ref Unsafe.As(ref tmp)); if (Vector.Count == 16) { vector = vec128.AsVector(); @@ -75,7 +75,7 @@ public static unsafe void Fill(ref T refData, nuint numElements, T value) { if (Vector.Count == 32) { - vector = Unsafe.As>(ref tmp).AsVector(); + vector = Vector256.LoadUnsafe(ref Unsafe.As(ref tmp)).AsVector(); } else {