From 949b5f891c6b39d3ac3310e970a67ba84f8468e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Lema=C5=84czyk?= Date: Thu, 16 Oct 2025 04:52:22 +0200 Subject: [PATCH] Return windowed Montgomery odd powers to pooling --- PerfectNumbers.Core/ULongExtensions.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/PerfectNumbers.Core/ULongExtensions.cs b/PerfectNumbers.Core/ULongExtensions.cs index 0271021..c09ce8e 100644 --- a/PerfectNumbers.Core/ULongExtensions.cs +++ b/PerfectNumbers.Core/ULongExtensions.cs @@ -346,7 +346,8 @@ public static class ULongExtensions ulong result = divisor.MontgomeryOne; ulong nPrime = divisor.NPrime; - Span oddPowers = stackalloc ulong[oddPowerCount]; + ulong[] oddPowersArray = ThreadStaticPools.UlongPool.Rent(oddPowerCount); + Span oddPowers = oddPowersArray.AsSpan(0, oddPowerCount); InitializeMontgomeryOddPowersCpu(divisor, modulus, nPrime, oddPowers); int index = bitLength - 1; @@ -385,13 +386,14 @@ public static class ULongExtensions index = windowStart - 1; } + ThreadStaticPools.UlongPool.Return(oddPowersArray); - if (keepMontgomery) + if (!keepMontgomery) { - return result; + result = result.MontgomeryMultiply(1UL, modulus, nPrime); } - return result.MontgomeryMultiply(1UL, modulus, nPrime); + return result; } [MethodImpl(MethodImplOptions.AggressiveInlining)]