Tiny optimization

This commit is contained in:
Marek Lemańczyk committed 2025-09-29 23:28:35 +02:00
1 parent 79cb8823ad
commit 0bdf85730d
1 file changed
+13 -9
+13 -9
View File
@@ -22,7 +22,6 @@ public struct GpuUInt128 : IComparable<GpuUInt128>, IEquatable<GpuUInt128>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
public GpuUInt128(ulong low) public GpuUInt128(ulong low)
{ {
High = 0UL;
Low = low; Low = low;
} }
@@ -394,20 +393,25 @@ public struct GpuUInt128 : IComparable<GpuUInt128>, IEquatable<GpuUInt128>
ulong w1 = xLow * yHigh; ulong w1 = xLow * yHigh;
ulong w2 = xHigh * yLow; ulong w2 = xHigh * yLow;
ulong carry = return (xHigh * yHigh) + (w1 >> 32) + (w2 >> 32) +
(((xLow * yLow) >> 32) + (
(uint)w1 + (
(uint)w2) >> 32; ((xLow * yLow) >> 32) +
return (xHigh * yHigh) + (w1 >> 32) + (w2 >> 32) + carry; (uint)w1 +
(uint)w2
) >> 32
);
} }
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
public void Mul64(GpuUInt128 other) public void Mul64(GpuUInt128 other)
{ {
// Multiply this.Low (assumed 64-bit value) by full 128-bit other // Multiply this.Low (assumed 64-bit value) by full 128-bit other
ulong operand = Low; ulong operand = Low,
Low = operand * other.Low; otherLow = other.Low;
High = operand * other.High + MulHigh(operand, other.Low);
Low = operand * otherLow;
High = operand * other.High + MulHigh(operand, otherLow);
} }
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]