From cc5f7af71c2fc42f317a5244f0ea660aa3123636 Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Wed, 24 Nov 2021 12:50:39 +0100 Subject: [PATCH] Better version of LoadHigh --- src/ImageSharp/Formats/Webp/Lossy/YuvConversion.cs | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/ImageSharp/Formats/Webp/Lossy/YuvConversion.cs b/src/ImageSharp/Formats/Webp/Lossy/YuvConversion.cs index 8e3b15389..d0a14db33 100644 --- a/src/ImageSharp/Formats/Webp/Lossy/YuvConversion.cs +++ b/src/ImageSharp/Formats/Webp/Lossy/YuvConversion.cs @@ -720,12 +720,9 @@ namespace SixLabors.ImageSharp.Formats.Webp.Lossy // Convert 32 samples of YUV444 to R/G/B private static void ConvertYuv444ToRgbSse41(Span y, Span u, Span v, out Vector128 r, out Vector128 g, out Vector128 b) { - Vector64 yTmp = Unsafe.As>(ref MemoryMarshal.GetReference(y)); - Vector64 uTmp = Unsafe.As>(ref MemoryMarshal.GetReference(u)); - Vector64 vTmp = Unsafe.As>(ref MemoryMarshal.GetReference(v)); - Vector128 y0 = LoadHigh(yTmp); - Vector128 u0 = LoadHigh(uTmp); - Vector128 v0 = LoadHigh(vTmp); + Vector128 y0 = LoadHigh(ref MemoryMarshal.GetReference(y)); + Vector128 u0 = LoadHigh(ref MemoryMarshal.GetReference(u)); + Vector128 v0 = LoadHigh(ref MemoryMarshal.GetReference(v)); Vector128 y1 = Sse2.MultiplyHigh(y0.AsUInt16(), K19077.AsUInt16()); Vector128 r0 = Sse2.MultiplyHigh(v0.AsUInt16(), K26149.AsUInt16()); @@ -751,9 +748,9 @@ namespace SixLabors.ImageSharp.Formats.Webp.Lossy // Load the bytes into the *upper* part of 16b words. That's "<< 8", basically. [MethodImpl(InliningOptions.ShortMethod)] - private static Vector128 LoadHigh(Vector64 src) + private static Vector128 LoadHigh(ref byte src) { - Vector128 tmp = Unsafe.As, Vector128>(ref src); + Vector128 tmp = Unsafe.As>(ref src); return Sse2.UnpackLow(Vector128.Zero, tmp); } #endif