MontgomeryDivisorDataPool.Rent / .Return removed as we no longer pool Montgomery divisor data. UInt128Extensions.MontgomeryDivisorDataPool variables optimized.

This commit is contained in:
mlemanczyk committed 2025-12-16 02:27:29 +01:00
1 parent b7773adad8
commit 3c80221105
27 files changed
+260 -476

No files matched your search

+20 -20
View File
@@ -510,38 +510,38 @@ public static class UInt128Extensions
ulong rightLow = (ulong)right;
ulong rightHigh = (ulong)(right >> 64);
var partial0 = Multiply64(leftLow, rightLow);
var partial1 = Multiply64(leftLow, rightHigh);
var partial2 = Multiply64(leftHigh, rightLow);
var partial3 = Multiply64(leftHigh, rightHigh);
(ulong carry, p0) = Multiply64(leftLow, rightLow);
(ulong partial1High, ulong partial1Low) = Multiply64(leftLow, rightHigh);
p0 = partial0.Low;
ulong carry = partial0.High;
ulong sum = carry + partial1.Low;
ulong carryMid = sum < partial1.Low ? 1UL : 0UL;
sum += partial2.Low;
if (sum < partial2.Low)
ulong sum = carry + partial1Low;
carry = sum < partial1Low ? 1UL : 0UL;
(ulong partial2High, ulong partial2Low) = Multiply64(leftHigh, rightLow);
sum += partial2Low;
if (sum < partial2Low)
{
carryMid++;
carry++;
}
p1 = sum;
sum = partial1.High + partial2.High;
ulong carryHigh = sum < partial2.High ? 1UL : 0UL;
sum += partial3.Low;
if (sum < partial3.Low)
sum = partial1High + partial2High;
partial2High = sum < partial2High ? 1UL : 0UL;
(partial1High, partial1Low) = Multiply64(leftHigh, rightHigh);
sum += partial1Low;
if (sum < partial1Low)
{
carryHigh++;
partial2High++;
}
sum += carryMid;
if (sum < carryMid)
sum += carry;
if (sum < carry)
{
carryHigh++;
partial2High++;
}
p2 = sum;
p3 = partial3.High + carryHigh;
p3 = partial1High + partial2High;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]