diff --git a/src/ImageSharp/Common/Helpers/Vector512Utilities.cs b/src/ImageSharp/Common/Helpers/Vector512Utilities.cs index 8a9ba6aa44..bcc3c9fa92 100644 --- a/src/ImageSharp/Common/Helpers/Vector512Utilities.cs +++ b/src/ImageSharp/Common/Helpers/Vector512Utilities.cs @@ -3,6 +3,7 @@ using System.Diagnostics; using System.Diagnostics.CodeAnalysis; +using System.Numerics; using System.Runtime.CompilerServices; using System.Runtime.Intrinsics; using System.Runtime.Intrinsics.X86; @@ -138,10 +139,14 @@ internal static class Vector512Utilities /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Vector512 MultiplyAddEstimate(Vector512 a, Vector512 b, Vector512 c) + { + if (Avx512F.IsSupported) + { + return Avx512F.FusedMultiplyAdd(a, b, c); + } - // Don't actually use FMA as it requires many more instruction to extract the - // upper and lower parts of the vector and then recombine them. - => (a + b) * c; + return (a + b) * c; + } [DoesNotReturn] private static void ThrowUnreachableException() => throw new UnreachableException();