diff --git a/HPPH/PixelHelper.Sum.cs b/HPPH/PixelHelper.Sum.cs index 6951782..caacf20 100644 --- a/HPPH/PixelHelper.Sum.cs +++ b/HPPH/PixelHelper.Sum.cs @@ -211,11 +211,12 @@ public static unsafe partial class PixelHelper 4, 0 ]; + Vector256 controlVector = Vector256.LoadUnsafe(ref MemoryMarshal.GetReference(avx2ControlData)); + Vector256 rgbaSum64 = Vector256.Zero; ReadOnlySpan dataBytes = MemoryMarshal.AsBytes(data); fixed (byte* bytePtr = dataBytes) - fixed (int* controlPtr = avx2ControlData) fixed (byte* maskPtr = avx2ShuffleMask) { Vector256 avx2ShuffleMaskVector = Avx2.BroadcastVector128ToVector256(maskPtr); @@ -224,7 +225,7 @@ public static unsafe partial class PixelHelper { Vector256 chunk = Vector256.Load(bytePtr + (i * 4)); Vector256 deinterleaved = Avx2.Shuffle(chunk, avx2ShuffleMaskVector); - Vector256 deinterleaved2 = Avx2.PermuteVar8x32(deinterleaved.AsInt32(), Vector256.Load(controlPtr)); + Vector256 deinterleaved2 = Avx2.PermuteVar8x32(deinterleaved.AsInt32(), controlVector); Vector256 sum = Avx2.SumAbsoluteDifferences(deinterleaved2.AsByte(), Vector256.Zero).AsInt64(); rgbaSum64 = Avx2.Add(rgbaSum64, sum); }