From 597bc0c10158201fbfa1126a99865bdbf6267d05 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Fri, 2 May 2025 23:21:27 +1000 Subject: [PATCH] Update MultiplyAdd --- src/ImageSharp/Common/Helpers/Vector256Utilities.cs | 2 +- src/ImageSharp/Common/Helpers/Vector512Utilities.cs | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/ImageSharp/Common/Helpers/Vector256Utilities.cs b/src/ImageSharp/Common/Helpers/Vector256Utilities.cs index a7366f6da..9928b529e 100644 --- a/src/ImageSharp/Common/Helpers/Vector256Utilities.cs +++ b/src/ImageSharp/Common/Helpers/Vector256Utilities.cs @@ -146,7 +146,7 @@ internal static class Vector256Utilities { if (Fma.IsSupported) { - return Fma.MultiplyAdd(vm1, vm0, va); + return Fma.MultiplyAdd(vm0, vm1, va); } if (Avx.IsSupported) diff --git a/src/ImageSharp/Common/Helpers/Vector512Utilities.cs b/src/ImageSharp/Common/Helpers/Vector512Utilities.cs index 77dc94475..40e8ac344 100644 --- a/src/ImageSharp/Common/Helpers/Vector512Utilities.cs +++ b/src/ImageSharp/Common/Helpers/Vector512Utilities.cs @@ -145,7 +145,15 @@ internal static class Vector512Utilities public static Vector512 MultiplyAdd( Vector512 va, Vector512 vm0, - Vector512 vm1) => va + (vm0 * vm1); + Vector512 vm1) + { + if (Avx512F.IsSupported) + { + return Avx512F.FusedMultiplyAdd(vm0, vm1, va); + } + + return va + (vm0 * vm1); + } [DoesNotReturn] private static void ThrowUnreachableException() => throw new UnreachableException();