From 8f5ae2dd60619bff3c7341db1f1fc744ac5bc222 Mon Sep 17 00:00:00 2001 From: Nicolas Portmann Date: Sat, 7 Nov 2020 10:44:36 +0100 Subject: [PATCH] Micro-optimize grayscale converter --- .../JpegColorConverter.FromGrayScaleAvx2.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromGrayScaleAvx2.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromGrayScaleAvx2.cs index aebffc3dfc..45846a6b56 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromGrayScaleAvx2.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromGrayScaleAvx2.cs @@ -42,16 +42,16 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder.ColorConverters int n = result.Length / 8; for (int i = 0; i < n; i++) { - Vector256 g = Avx2.PermuteVar8x32(Unsafe.Add(ref gBase, i), vcontrol); + Vector256 g = Avx.Multiply(Unsafe.Add(ref gBase, i), scale); - g = Avx.Multiply(g, scale); + g = Avx2.PermuteVar8x32(g, vcontrol); ref Vector256 destination = ref Unsafe.Add(ref resultBase, i * 4); destination = Avx.Blend(Avx.Permute(g, 0b00_00_00_00), one, 0b1000_1000); - Unsafe.Add(ref destination, 1) = Avx.Blend(Avx.Permute(g, 0b01_01_01_01), one, 0b1000_1000); - Unsafe.Add(ref destination, 2) = Avx.Blend(Avx.Permute(g, 0b10_10_10_10), one, 0b1000_1000); - Unsafe.Add(ref destination, 3) = Avx.Blend(Avx.Permute(g, 0b11_11_11_11), one, 0b1000_1000); + Unsafe.Add(ref destination, 1) = Avx.Blend(Avx.Shuffle(g, g, 0b01_01_01_01), one, 0b1000_1000); + Unsafe.Add(ref destination, 2) = Avx.Blend(Avx.Shuffle(g, g, 0b10_10_10_10), one, 0b1000_1000); + Unsafe.Add(ref destination, 3) = Avx.Blend(Avx.Shuffle(g, g, 0b11_11_11_11), one, 0b1000_1000); } #endif }