diff --git a/src/libraries/System.Runtime.Numerics/src/System/Numerics/NumericsHelpers.cs b/src/libraries/System.Runtime.Numerics/src/System/Numerics/NumericsHelpers.cs index 0f8414d3d00a98..7547f50e35d91c 100644 --- a/src/libraries/System.Runtime.Numerics/src/System/Numerics/NumericsHelpers.cs +++ b/src/libraries/System.Runtime.Numerics/src/System/Numerics/NumericsHelpers.cs @@ -2,8 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. using System.Diagnostics; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; using System.Runtime.Intrinsics; namespace System.Numerics @@ -143,33 +141,30 @@ public static void DangerousMakeOnesComplement(Span d) // AAAAAAAAAAA // where A = ~X - int offset = 0; - ref nuint start = ref MemoryMarshal.GetReference(d); - - while (Vector512.IsHardwareAccelerated && d.Length - offset >= Vector512.Count) + while (Vector512.IsHardwareAccelerated && d.Length >= Vector512.Count) { - Vector512 complement = ~Vector512.LoadUnsafe(ref start, (nuint)offset); - Vector512.StoreUnsafe(complement, ref start, (nuint)offset); - offset += Vector512.Count; + Vector512 complement = ~Vector512.Create(d); + complement.CopyTo(d); + d = d.Slice(Vector512.Count); } - while (Vector256.IsHardwareAccelerated && d.Length - offset >= Vector256.Count) + while (Vector256.IsHardwareAccelerated && d.Length >= Vector256.Count) { - Vector256 complement = ~Vector256.LoadUnsafe(ref start, (nuint)offset); - Vector256.StoreUnsafe(complement, ref start, (nuint)offset); - offset += Vector256.Count; + Vector256 complement = ~Vector256.Create(d); + complement.CopyTo(d); + d = d.Slice(Vector256.Count); } - while (Vector128.IsHardwareAccelerated && d.Length - offset >= Vector128.Count) + while (Vector128.IsHardwareAccelerated && d.Length >= Vector128.Count) { - Vector128 complement = ~Vector128.LoadUnsafe(ref start, (nuint)offset); - Vector128.StoreUnsafe(complement, ref start, (nuint)offset); - offset += Vector128.Count; + Vector128 complement = ~Vector128.Create(d); + complement.CopyTo(d); + d = d.Slice(Vector128.Count); } - for (; offset < d.Length; offset++) + for (int i = 0; i < d.Length; i++) { - d[offset] = ~d[offset]; + d[i] = ~d[i]; } }