fixed

Pure Haskell large fixed-width integers.
git clone git://git.ppad.tech/fixed.git
Log | Files | Refs | README | LICENSE

commit db88f9116371c803128d240d3b16e9ea31ae6271
parent 1e28378cf2fe8b311e334df04276d843719d4a15
Author: Jared Tobin <jared@jtobin.io>
Date:   Sun,  7 Dec 2025 07:15:29 +0400

lib: align on equals

Diffstat:
Mlib/Data/Word/Wider.hs | 50+++++++++++++++++++++++++-------------------------
Mlib/Numeric/Montgomery/Secp256k1/Curve.hs | 158++++++++++++++++++++++++++++++++++++++++----------------------------------------
Mlib/Numeric/Montgomery/Secp256k1/Scalar.hs | 158++++++++++++++++++++++++++++++++++++++++----------------------------------------
3 files changed, 183 insertions(+), 183 deletions(-)

diff --git a/lib/Data/Word/Wider.hs b/lib/Data/Word/Wider.hs @@ -103,15 +103,15 @@ cmp# -> Int# cmp# (# l0, l1, l2, l3 #) (# r0, r1, r2, r3 #) = let !(# w0, b0 #) = L.sub_b# r0 l0 (Limb 0##) - !d0 = L.or# (Limb 0##) w0 + !d0 = L.or# (Limb 0##) w0 !(# w1, b1 #) = L.sub_b# r1 l1 b0 - !d1 = L.or# d0 w1 + !d1 = L.or# d0 w1 !(# w2, b2 #) = L.sub_b# r2 l2 b1 - !d2 = L.or# d1 w2 + !d2 = L.or# d1 w2 !(# w3, b3 #) = L.sub_b# r3 l3 b2 - !d3 = L.or# d2 w3 - !(Limb w) = L.and# b3 (Limb 2##) - !s = word2Int# w -# 1# + !d3 = L.or# d2 w3 + !(Limb w) = L.and# b3 (Limb 2##) + !s = word2Int# w -# 1# in (word2Int# (C.to_word# (L.nonzero# d3))) *# s {-# INLINE cmp# #-} @@ -388,31 +388,31 @@ sqr# :: (# Limb, Limb, Limb, Limb #) -> (# (# Limb, Limb, Limb, Limb #), (# Limb, Limb, Limb, Limb #) #) sqr# (# x0, x1, x2, x3 #) = - let !sh = case B.finiteBitSize (0 :: Word) of I# m -> m -# 1# - !(# q1_0, c1_0 #) = L.mac# x1 x0 (Limb 0##) (Limb 0##) - !r1 = c1_0 - !(# r2_0, c2_0 #) = L.mac# x2 x0 r1 (Limb 0##) - !(# s2_1, c2_1 #) = L.mac# x2 x1 (Limb 0##) c2_0 - !t2 = c2_1 - !(# s3_0, c3_0 #) = L.mac# x3 x0 s2_1 (Limb 0##) - !(# t3, c3_1 #) = L.mac# x3 x1 t2 c3_0 - !(# u3, c3_2 #) = L.mac# x3 x2 (Limb 0##) c3_1 - !v3 = c3_2 + let !sh = case B.finiteBitSize (0 :: Word) of I# m -> m -# 1# + !(# q1_0, c1_0 #) = L.mac# x1 x0 (Limb 0##) (Limb 0##) + !r1 = c1_0 + !(# r2_0, c2_0 #) = L.mac# x2 x0 r1 (Limb 0##) + !(# s2_1, c2_1 #) = L.mac# x2 x1 (Limb 0##) c2_0 + !t2 = c2_1 + !(# s3_0, c3_0 #) = L.mac# x3 x0 s2_1 (Limb 0##) + !(# t3, c3_1 #) = L.mac# x3 x1 t2 c3_0 + !(# u3, c3_2 #) = L.mac# x3 x2 (Limb 0##) c3_1 + !v3 = c3_2 !(# lo1, car0_1 #) = (# L.shl# q1_0 1#, L.shr# q1_0 sh #) !(# lo2, car0_2 #) = (# L.or# (L.shl# r2_0 1#) car0_1, L.shr# r2_0 sh #) !(# lo3, car0_3 #) = (# L.or# (L.shl# s3_0 1#) car0_2, L.shr# s3_0 sh #) !(# hi0, car1_0 #) = (# L.or# (L.shl# t3 1#) car0_3, L.shr# t3 sh #) !(# hi1, car1_1 #) = (# L.or# (L.shl# u3 1#) car1_0, L.shr# u3 sh #) !(# hi2, car1_2 #) = (# L.or# (L.shl# v3 1#) car1_1, L.shr# v3 sh #) - !hi3 = car1_2 - !(# pf, car2_0 #) = L.mac# x0 x0 (Limb 0##) (Limb 0##) - !(# qf, car2_1 #) = L.add_c# lo1 car2_0 (Limb 0##) - !(# rf, car2_2 #) = L.mac# x1 x1 lo2 car2_1 - !(# sf, car2_3 #) = L.add_c# lo3 car2_2 (Limb 0##) - !(# tf, car2_4 #) = L.mac# x2 x2 hi0 car2_3 - !(# uf, car2_5 #) = L.add_c# hi1 car2_4 (Limb 0##) - !(# vf, car2_6 #) = L.mac# x3 x3 hi2 car2_5 - !(# wf, _ #) = L.add_c# hi3 car2_6 (Limb 0##) + !hi3 = car1_2 + !(# pf, car2_0 #) = L.mac# x0 x0 (Limb 0##) (Limb 0##) + !(# qf, car2_1 #) = L.add_c# lo1 car2_0 (Limb 0##) + !(# rf, car2_2 #) = L.mac# x1 x1 lo2 car2_1 + !(# sf, car2_3 #) = L.add_c# lo3 car2_2 (Limb 0##) + !(# tf, car2_4 #) = L.mac# x2 x2 hi0 car2_3 + !(# uf, car2_5 #) = L.add_c# hi1 car2_4 (Limb 0##) + !(# vf, car2_6 #) = L.mac# x3 x3 hi2 car2_5 + !(# wf, _ #) = L.add_c# hi3 car2_6 (Limb 0##) in (# (# pf, qf, rf, sf #), (# tf, uf, vf, wf #) #) {-# INLINE sqr# #-} diff --git a/lib/Numeric/Montgomery/Secp256k1/Curve.hs b/lib/Numeric/Montgomery/Secp256k1/Curve.hs @@ -127,31 +127,31 @@ redc_inner# (# u0, u1, u2, u3 #) (# l0, l1, l2, l3 #) = let !(# m0, m1, m2, m3 #) = (# Limb 0xFFFFFFFEFFFFFC2F##, Limb 0xFFFFFFFFFFFFFFFF## , Limb 0xFFFFFFFFFFFFFFFF##, Limb 0xFFFFFFFFFFFFFFFF## #) - !n = Limb 0xD838091DD2253531## - !w_0 = L.mul_w# l0 n - !(# _, c_00 #) = L.mac# w_0 m0 l0 (Limb 0##) + !n = Limb 0xD838091DD2253531## + !w_0 = L.mul_w# l0 n + !(# _, c_00 #) = L.mac# w_0 m0 l0 (Limb 0##) !(# l0_1, c_01 #) = L.mac# w_0 m1 l1 c_00 !(# l0_2, c_02 #) = L.mac# w_0 m2 l2 c_01 !(# l0_3, c_03 #) = L.mac# w_0 m3 l3 c_02 - !(# u_0, mc_0 #) = L.add_c# u0 c_03 (Limb 0##) - !w_1 = L.mul_w# l0_1 n - !(# _, c_10 #) = L.mac# w_1 m0 l0_1 (Limb 0##) + !(# u_0, mc_0 #) = L.add_c# u0 c_03 (Limb 0##) + !w_1 = L.mul_w# l0_1 n + !(# _, c_10 #) = L.mac# w_1 m0 l0_1 (Limb 0##) !(# l1_1, c_11 #) = L.mac# w_1 m1 l0_2 c_10 !(# l1_2, c_12 #) = L.mac# w_1 m2 l0_3 c_11 !(# u1_3, c_13 #) = L.mac# w_1 m3 u_0 c_12 - !(# u_1, mc_1 #) = L.add_c# u1 c_13 mc_0 - !w_2 = L.mul_w# l1_1 n - !(# _, c_20 #) = L.mac# w_2 m0 l1_1 (Limb 0##) + !(# u_1, mc_1 #) = L.add_c# u1 c_13 mc_0 + !w_2 = L.mul_w# l1_1 n + !(# _, c_20 #) = L.mac# w_2 m0 l1_1 (Limb 0##) !(# l2_1, c_21 #) = L.mac# w_2 m1 l1_2 c_20 !(# u2_2, c_22 #) = L.mac# w_2 m2 u1_3 c_21 !(# u2_3, c_23 #) = L.mac# w_2 m3 u_1 c_22 - !(# u_2, mc_2 #) = L.add_c# u2 c_23 mc_1 - !w_3 = L.mul_w# l2_1 n - !(# _, c_30 #) = L.mac# w_3 m0 l2_1 (Limb 0##) + !(# u_2, mc_2 #) = L.add_c# u2 c_23 mc_1 + !w_3 = L.mul_w# l2_1 n + !(# _, c_30 #) = L.mac# w_3 m0 l2_1 (Limb 0##) !(# u3_1, c_31 #) = L.mac# w_3 m1 u2_2 c_30 !(# u3_2, c_32 #) = L.mac# w_3 m2 u2_3 c_31 !(# u3_3, c_33 #) = L.mac# w_3 m3 u_2 c_32 - !(# u_3, mc_3 #) = L.add_c# u3 c_33 mc_2 + !(# u_3, mc_3 #) = L.add_c# u3 c_33 mc_2 in (# (# u3_1, u3_2, u3_3, u_3 #), mc_3 #) {-# INLINE redc_inner# #-} @@ -187,24 +187,24 @@ retr_inner# (# x0, x1, x2, x3 #) = let !(# m0, m1, m2, m3 #) = (# Limb 0xFFFFFFFEFFFFFC2F##, Limb 0xFFFFFFFFFFFFFFFF## , Limb 0xFFFFFFFFFFFFFFFF##, Limb 0xFFFFFFFFFFFFFFFF## #) - !n = Limb 0xD838091DD2253531## - !u_0 = L.mul_w# x0 n - !(# _, o0 #) = L.mac# u_0 m0 x0 (Limb 0##) + !n = Limb 0xD838091DD2253531## + !u_0 = L.mul_w# x0 n + !(# _, o0 #) = L.mac# u_0 m0 x0 (Limb 0##) !(# o0_1, p0_1 #) = L.mac# u_0 m1 (Limb 0##) o0 !(# p0_2, q0_2 #) = L.mac# u_0 m2 (Limb 0##) p0_1 !(# q0_3, r0_3 #) = L.mac# u_0 m3 (Limb 0##) q0_2 - !u_1 = L.mul_w# (L.add_w# o0_1 x1) n - !(# _, o1 #) = L.mac# u_1 m0 x1 o0_1 + !u_1 = L.mul_w# (L.add_w# o0_1 x1) n + !(# _, o1 #) = L.mac# u_1 m0 x1 o0_1 !(# o1_1, p1_1 #) = L.mac# u_1 m1 p0_2 o1 !(# p1_2, q1_2 #) = L.mac# u_1 m2 q0_3 p1_1 !(# q1_3, r1_3 #) = L.mac# u_1 m3 r0_3 q1_2 - !u_2 = L.mul_w# (L.add_w# o1_1 x2) n - !(# _, o2 #) = L.mac# u_2 m0 x2 o1_1 + !u_2 = L.mul_w# (L.add_w# o1_1 x2) n + !(# _, o2 #) = L.mac# u_2 m0 x2 o1_1 !(# o2_1, p2_1 #) = L.mac# u_2 m1 p1_2 o2 !(# p2_2, q2_2 #) = L.mac# u_2 m2 q1_3 p2_1 !(# q2_3, r2_3 #) = L.mac# u_2 m3 r1_3 q2_2 - !u_3 = L.mul_w# (L.add_w# o2_1 x3) n - !(# _, o3 #) = L.mac# u_3 m0 x3 o2_1 + !u_3 = L.mul_w# (L.add_w# o2_1 x3) n + !(# _, o3 #) = L.mac# u_3 m0 x3 o2_1 !(# o3_1, p3_1 #) = L.mac# u_3 m1 p2_2 o3 !(# p3_2, q3_2 #) = L.mac# u_3 m2 q2_3 p3_1 !(# q3_3, r3_3 #) = L.mac# u_3 m3 r2_3 q3_2 @@ -235,75 +235,75 @@ mul_inner# (# x0, x1, x2, x3 #) (# y0, y1, y2, y3 #) = let !(# m0, m1, m2, m3 #) = (# Limb 0xFFFFFFFEFFFFFC2F##, Limb 0xFFFFFFFFFFFFFFFF## , Limb 0xFFFFFFFFFFFFFFFF##, Limb 0xFFFFFFFFFFFFFFFF## #) - !n = Limb 0xD838091DD2253531## - !axy0 = L.mul_c# x0 y0 - !u0 = L.mul_w# (lo axy0) n - !(# (# _, a0 #), c0 #) = W.add_o# (L.mul_c# u0 m0) axy0 - !carry0 = (# a0, c0 #) - !axy0_1 = L.mul_c# x0 y1 - !umc0_1 = W.add_w# (L.mul_c# u0 m1) carry0 + !n = Limb 0xD838091DD2253531## + !axy0 = L.mul_c# x0 y0 + !u0 = L.mul_w# (lo axy0) n + !(# (# _, a0 #), c0 #) = W.add_o# (L.mul_c# u0 m0) axy0 + !carry0 = (# a0, c0 #) + !axy0_1 = L.mul_c# x0 y1 + !umc0_1 = W.add_w# (L.mul_c# u0 m1) carry0 !(# (# o0, ab0_1 #), c0_1 #) = W.add_o# axy0_1 umc0_1 - !carry0_1 = (# ab0_1, c0_1 #) - !axy0_2 = L.mul_c# x0 y2 - !umc0_2 = W.add_w# (L.mul_c# u0 m2) carry0_1 + !carry0_1 = (# ab0_1, c0_1 #) + !axy0_2 = L.mul_c# x0 y2 + !umc0_2 = W.add_w# (L.mul_c# u0 m2) carry0_1 !(# (# p0, ab0_2 #), c0_2 #) = W.add_o# axy0_2 umc0_2 - !carry0_2 = (# ab0_2, c0_2 #) - !axy0_3 = L.mul_c# x0 y3 - !umc0_3 = W.add_w# (L.mul_c# u0 m3) carry0_2 + !carry0_2 = (# ab0_2, c0_2 #) + !axy0_3 = L.mul_c# x0 y3 + !umc0_3 = W.add_w# (L.mul_c# u0 m3) carry0_2 !(# (# q0, ab0_3 #), c0_3 #) = W.add_o# axy0_3 umc0_3 - !carry0_3 = (# ab0_3, c0_3 #) - !(# r0, mc0 #) = carry0_3 - !axy1 = wadd_w# (L.mul_c# x1 y0) o0 - !u1 = L.mul_w# (lo axy1) n - !(# (# _, a1 #), c1 #) = W.add_o# (L.mul_c# u1 m0) axy1 - !carry1 = (# a1, c1 #) - !axy1_1 = wadd_w# (L.mul_c# x1 y1) p0 - !umc1_1 = W.add_w# (L.mul_c# u1 m1) carry1 + !carry0_3 = (# ab0_3, c0_3 #) + !(# r0, mc0 #) = carry0_3 + !axy1 = wadd_w# (L.mul_c# x1 y0) o0 + !u1 = L.mul_w# (lo axy1) n + !(# (# _, a1 #), c1 #) = W.add_o# (L.mul_c# u1 m0) axy1 + !carry1 = (# a1, c1 #) + !axy1_1 = wadd_w# (L.mul_c# x1 y1) p0 + !umc1_1 = W.add_w# (L.mul_c# u1 m1) carry1 !(# (# o1, ab1_1 #), c1_1 #) = W.add_o# axy1_1 umc1_1 - !carry1_1 = (# ab1_1, c1_1 #) - !axy1_2 = wadd_w# (L.mul_c# x1 y2) q0 - !umc1_2 = W.add_w# (L.mul_c# u1 m2) carry1_1 + !carry1_1 = (# ab1_1, c1_1 #) + !axy1_2 = wadd_w# (L.mul_c# x1 y2) q0 + !umc1_2 = W.add_w# (L.mul_c# u1 m2) carry1_1 !(# (# p1, ab1_2 #), c1_2 #) = W.add_o# axy1_2 umc1_2 - !carry1_2 = (# ab1_2, c1_2 #) - !axy1_3 = wadd_w# (L.mul_c# x1 y3) r0 - !umc1_3 = W.add_w# (L.mul_c# u1 m3) carry1_2 + !carry1_2 = (# ab1_2, c1_2 #) + !axy1_3 = wadd_w# (L.mul_c# x1 y3) r0 + !umc1_3 = W.add_w# (L.mul_c# u1 m3) carry1_2 !(# (# q1, ab1_3 #), c1_3 #) = W.add_o# axy1_3 umc1_3 - !carry1_3 = (# ab1_3, c1_3 #) - !(# r1, mc1 #) = wadd_w# carry1_3 mc0 - !axy2 = wadd_w# (L.mul_c# x2 y0) o1 - !u2 = L.mul_w# (lo axy2) n - !(# (# _, a2 #), c2 #) = W.add_o# (L.mul_c# u2 m0) axy2 - !carry2 = (# a2, c2 #) - !axy2_1 = wadd_w# (L.mul_c# x2 y1) p1 - !umc2_1 = W.add_w# (L.mul_c# u2 m1) carry2 + !carry1_3 = (# ab1_3, c1_3 #) + !(# r1, mc1 #) = wadd_w# carry1_3 mc0 + !axy2 = wadd_w# (L.mul_c# x2 y0) o1 + !u2 = L.mul_w# (lo axy2) n + !(# (# _, a2 #), c2 #) = W.add_o# (L.mul_c# u2 m0) axy2 + !carry2 = (# a2, c2 #) + !axy2_1 = wadd_w# (L.mul_c# x2 y1) p1 + !umc2_1 = W.add_w# (L.mul_c# u2 m1) carry2 !(# (# o2, ab2_1 #), c2_1 #) = W.add_o# axy2_1 umc2_1 - !carry2_1 = (# ab2_1, c2_1 #) - !axy2_2 = wadd_w# (L.mul_c# x2 y2) q1 - !umc2_2 = W.add_w# (L.mul_c# u2 m2) carry2_1 + !carry2_1 = (# ab2_1, c2_1 #) + !axy2_2 = wadd_w# (L.mul_c# x2 y2) q1 + !umc2_2 = W.add_w# (L.mul_c# u2 m2) carry2_1 !(# (# p2, ab2_2 #), c2_2 #) = W.add_o# axy2_2 umc2_2 - !carry2_2 = (# ab2_2, c2_2 #) - !axy2_3 = wadd_w# (L.mul_c# x2 y3) r1 - !umc2_3 = W.add_w# (L.mul_c# u2 m3) carry2_2 + !carry2_2 = (# ab2_2, c2_2 #) + !axy2_3 = wadd_w# (L.mul_c# x2 y3) r1 + !umc2_3 = W.add_w# (L.mul_c# u2 m3) carry2_2 !(# (# q2, ab2_3 #), c2_3 #) = W.add_o# axy2_3 umc2_3 - !carry2_3 = (# ab2_3, c2_3 #) - !(# r2, mc2 #) = wadd_w# carry2_3 mc1 - !axy3 = wadd_w# (L.mul_c# x3 y0) o2 - !u3 = L.mul_w# (lo axy3) n - !(# (# _, a3 #), c3 #) = W.add_o# (L.mul_c# u3 m0) axy3 - !carry3 = (# a3, c3 #) - !axy3_1 = wadd_w# (L.mul_c# x3 y1) p2 - !umc3_1 = W.add_w# (L.mul_c# u3 m1) carry3 + !carry2_3 = (# ab2_3, c2_3 #) + !(# r2, mc2 #) = wadd_w# carry2_3 mc1 + !axy3 = wadd_w# (L.mul_c# x3 y0) o2 + !u3 = L.mul_w# (lo axy3) n + !(# (# _, a3 #), c3 #) = W.add_o# (L.mul_c# u3 m0) axy3 + !carry3 = (# a3, c3 #) + !axy3_1 = wadd_w# (L.mul_c# x3 y1) p2 + !umc3_1 = W.add_w# (L.mul_c# u3 m1) carry3 !(# (# o3, ab3_1 #), c3_1 #) = W.add_o# axy3_1 umc3_1 - !carry3_1 = (# ab3_1, c3_1 #) - !axy3_2 = wadd_w# (L.mul_c# x3 y2) q2 - !umc3_2 = W.add_w# (L.mul_c# u3 m2) carry3_1 + !carry3_1 = (# ab3_1, c3_1 #) + !axy3_2 = wadd_w# (L.mul_c# x3 y2) q2 + !umc3_2 = W.add_w# (L.mul_c# u3 m2) carry3_1 !(# (# p3, ab3_2 #), c3_2 #) = W.add_o# axy3_2 umc3_2 - !carry3_2 = (# ab3_2, c3_2 #) - !axy3_3 = wadd_w# (L.mul_c# x3 y3) r2 - !umc3_3 = W.add_w# (L.mul_c# u3 m3) carry3_2 + !carry3_2 = (# ab3_2, c3_2 #) + !axy3_3 = wadd_w# (L.mul_c# x3 y3) r2 + !umc3_3 = W.add_w# (L.mul_c# u3 m3) carry3_2 !(# (# q3, ab3_3 #), c3_3 #) = W.add_o# axy3_3 umc3_3 - !carry3_3 = (# ab3_3, c3_3 #) - !(# r3, mc3 #) = wadd_w# carry3_3 mc2 + !carry3_3 = (# ab3_3, c3_3 #) + !(# r3, mc3 #) = wadd_w# carry3_3 mc2 in (# (# o3, p3, q3, r3 #), mc3 #) {-# INLINE mul_inner# #-} diff --git a/lib/Numeric/Montgomery/Secp256k1/Scalar.hs b/lib/Numeric/Montgomery/Secp256k1/Scalar.hs @@ -127,31 +127,31 @@ redc_inner# (# u0, u1, u2, u3 #) (# l0, l1, l2, l3 #) = let !(# m0, m1, m2, m3 #) = (# Limb 0xBFD25E8CD0364141##, Limb 0xBAAEDCE6AF48A03B## , Limb 0xFFFFFFFFFFFFFFFE##, Limb 0xFFFFFFFFFFFFFFFF## #) - !n = Limb 0x4B0DFF665588B13F## - !w_0 = L.mul_w# l0 n - !(# _, c_00 #) = L.mac# w_0 m0 l0 (Limb 0##) + !n = Limb 0x4B0DFF665588B13F## + !w_0 = L.mul_w# l0 n + !(# _, c_00 #) = L.mac# w_0 m0 l0 (Limb 0##) !(# l0_1, c_01 #) = L.mac# w_0 m1 l1 c_00 !(# l0_2, c_02 #) = L.mac# w_0 m2 l2 c_01 !(# l0_3, c_03 #) = L.mac# w_0 m3 l3 c_02 - !(# u_0, mc_0 #) = L.add_c# u0 c_03 (Limb 0##) - !w_1 = L.mul_w# l0_1 n - !(# _, c_10 #) = L.mac# w_1 m0 l0_1 (Limb 0##) + !(# u_0, mc_0 #) = L.add_c# u0 c_03 (Limb 0##) + !w_1 = L.mul_w# l0_1 n + !(# _, c_10 #) = L.mac# w_1 m0 l0_1 (Limb 0##) !(# l1_1, c_11 #) = L.mac# w_1 m1 l0_2 c_10 !(# l1_2, c_12 #) = L.mac# w_1 m2 l0_3 c_11 !(# u1_3, c_13 #) = L.mac# w_1 m3 u_0 c_12 - !(# u_1, mc_1 #) = L.add_c# u1 c_13 mc_0 - !w_2 = L.mul_w# l1_1 n - !(# _, c_20 #) = L.mac# w_2 m0 l1_1 (Limb 0##) + !(# u_1, mc_1 #) = L.add_c# u1 c_13 mc_0 + !w_2 = L.mul_w# l1_1 n + !(# _, c_20 #) = L.mac# w_2 m0 l1_1 (Limb 0##) !(# l2_1, c_21 #) = L.mac# w_2 m1 l1_2 c_20 !(# u2_2, c_22 #) = L.mac# w_2 m2 u1_3 c_21 !(# u2_3, c_23 #) = L.mac# w_2 m3 u_1 c_22 - !(# u_2, mc_2 #) = L.add_c# u2 c_23 mc_1 - !w_3 = L.mul_w# l2_1 n - !(# _, c_30 #) = L.mac# w_3 m0 l2_1 (Limb 0##) + !(# u_2, mc_2 #) = L.add_c# u2 c_23 mc_1 + !w_3 = L.mul_w# l2_1 n + !(# _, c_30 #) = L.mac# w_3 m0 l2_1 (Limb 0##) !(# u3_1, c_31 #) = L.mac# w_3 m1 u2_2 c_30 !(# u3_2, c_32 #) = L.mac# w_3 m2 u2_3 c_31 !(# u3_3, c_33 #) = L.mac# w_3 m3 u_2 c_32 - !(# u_3, mc_3 #) = L.add_c# u3 c_33 mc_2 + !(# u_3, mc_3 #) = L.add_c# u3 c_33 mc_2 in (# (# u3_1, u3_2, u3_3, u_3 #), mc_3 #) {-# INLINE redc_inner# #-} @@ -186,24 +186,24 @@ retr_inner# (# x0, x1, x2, x3 #) = let !(# m0, m1, m2, m3 #) = (# Limb 0xBFD25E8CD0364141##, Limb 0xBAAEDCE6AF48A03B## , Limb 0xFFFFFFFFFFFFFFFE##, Limb 0xFFFFFFFFFFFFFFFF## #) - !n = Limb 0x4B0DFF665588B13F## - !u_0 = L.mul_w# x0 n - !(# _, o0 #) = L.mac# u_0 m0 x0 (Limb 0##) + !n = Limb 0x4B0DFF665588B13F## + !u_0 = L.mul_w# x0 n + !(# _, o0 #) = L.mac# u_0 m0 x0 (Limb 0##) !(# o0_1, p0_1 #) = L.mac# u_0 m1 (Limb 0##) o0 !(# p0_2, q0_2 #) = L.mac# u_0 m2 (Limb 0##) p0_1 !(# q0_3, r0_3 #) = L.mac# u_0 m3 (Limb 0##) q0_2 - !u_1 = L.mul_w# (L.add_w# o0_1 x1) n - !(# _, o1 #) = L.mac# u_1 m0 x1 o0_1 + !u_1 = L.mul_w# (L.add_w# o0_1 x1) n + !(# _, o1 #) = L.mac# u_1 m0 x1 o0_1 !(# o1_1, p1_1 #) = L.mac# u_1 m1 p0_2 o1 !(# p1_2, q1_2 #) = L.mac# u_1 m2 q0_3 p1_1 !(# q1_3, r1_3 #) = L.mac# u_1 m3 r0_3 q1_2 - !u_2 = L.mul_w# (L.add_w# o1_1 x2) n - !(# _, o2 #) = L.mac# u_2 m0 x2 o1_1 + !u_2 = L.mul_w# (L.add_w# o1_1 x2) n + !(# _, o2 #) = L.mac# u_2 m0 x2 o1_1 !(# o2_1, p2_1 #) = L.mac# u_2 m1 p1_2 o2 !(# p2_2, q2_2 #) = L.mac# u_2 m2 q1_3 p2_1 !(# q2_3, r2_3 #) = L.mac# u_2 m3 r1_3 q2_2 - !u_3 = L.mul_w# (L.add_w# o2_1 x3) n - !(# _, o3 #) = L.mac# u_3 m0 x3 o2_1 + !u_3 = L.mul_w# (L.add_w# o2_1 x3) n + !(# _, o3 #) = L.mac# u_3 m0 x3 o2_1 !(# o3_1, p3_1 #) = L.mac# u_3 m1 p2_2 o3 !(# p3_2, q3_2 #) = L.mac# u_3 m2 q2_3 p3_1 !(# q3_3, r3_3 #) = L.mac# u_3 m3 r2_3 q3_2 @@ -234,75 +234,75 @@ mul_inner# (# x0, x1, x2, x3 #) (# y0, y1, y2, y3 #) = let !(# m0, m1, m2, m3 #) = (# Limb 0xBFD25E8CD0364141##, Limb 0xBAAEDCE6AF48A03B## , Limb 0xFFFFFFFFFFFFFFFE##, Limb 0xFFFFFFFFFFFFFFFF## #) - !n = Limb 0x4B0DFF665588B13F## - !axy0 = L.mul_c# x0 y0 - !u0 = L.mul_w# (lo axy0) n - !(# (# _, a0 #), c0 #) = W.add_o# (L.mul_c# u0 m0) axy0 - !carry0 = (# a0, c0 #) - !axy0_1 = L.mul_c# x0 y1 - !umc0_1 = W.add_w# (L.mul_c# u0 m1) carry0 + !n = Limb 0x4B0DFF665588B13F## + !axy0 = L.mul_c# x0 y0 + !u0 = L.mul_w# (lo axy0) n + !(# (# _, a0 #), c0 #) = W.add_o# (L.mul_c# u0 m0) axy0 + !carry0 = (# a0, c0 #) + !axy0_1 = L.mul_c# x0 y1 + !umc0_1 = W.add_w# (L.mul_c# u0 m1) carry0 !(# (# o0, ab0_1 #), c0_1 #) = W.add_o# axy0_1 umc0_1 - !carry0_1 = (# ab0_1, c0_1 #) - !axy0_2 = L.mul_c# x0 y2 - !umc0_2 = W.add_w# (L.mul_c# u0 m2) carry0_1 + !carry0_1 = (# ab0_1, c0_1 #) + !axy0_2 = L.mul_c# x0 y2 + !umc0_2 = W.add_w# (L.mul_c# u0 m2) carry0_1 !(# (# p0, ab0_2 #), c0_2 #) = W.add_o# axy0_2 umc0_2 - !carry0_2 = (# ab0_2, c0_2 #) - !axy0_3 = L.mul_c# x0 y3 - !umc0_3 = W.add_w# (L.mul_c# u0 m3) carry0_2 + !carry0_2 = (# ab0_2, c0_2 #) + !axy0_3 = L.mul_c# x0 y3 + !umc0_3 = W.add_w# (L.mul_c# u0 m3) carry0_2 !(# (# q0, ab0_3 #), c0_3 #) = W.add_o# axy0_3 umc0_3 - !carry0_3 = (# ab0_3, c0_3 #) - !(# r0, mc0 #) = carry0_3 - !axy1 = wadd_w# (L.mul_c# x1 y0) o0 - !u1 = L.mul_w# (lo axy1) n - !(# (# _, a1 #), c1 #) = W.add_o# (L.mul_c# u1 m0) axy1 - !carry1 = (# a1, c1 #) - !axy1_1 = wadd_w# (L.mul_c# x1 y1) p0 - !umc1_1 = W.add_w# (L.mul_c# u1 m1) carry1 + !carry0_3 = (# ab0_3, c0_3 #) + !(# r0, mc0 #) = carry0_3 + !axy1 = wadd_w# (L.mul_c# x1 y0) o0 + !u1 = L.mul_w# (lo axy1) n + !(# (# _, a1 #), c1 #) = W.add_o# (L.mul_c# u1 m0) axy1 + !carry1 = (# a1, c1 #) + !axy1_1 = wadd_w# (L.mul_c# x1 y1) p0 + !umc1_1 = W.add_w# (L.mul_c# u1 m1) carry1 !(# (# o1, ab1_1 #), c1_1 #) = W.add_o# axy1_1 umc1_1 - !carry1_1 = (# ab1_1, c1_1 #) - !axy1_2 = wadd_w# (L.mul_c# x1 y2) q0 - !umc1_2 = W.add_w# (L.mul_c# u1 m2) carry1_1 + !carry1_1 = (# ab1_1, c1_1 #) + !axy1_2 = wadd_w# (L.mul_c# x1 y2) q0 + !umc1_2 = W.add_w# (L.mul_c# u1 m2) carry1_1 !(# (# p1, ab1_2 #), c1_2 #) = W.add_o# axy1_2 umc1_2 - !carry1_2 = (# ab1_2, c1_2 #) - !axy1_3 = wadd_w# (L.mul_c# x1 y3) r0 - !umc1_3 = W.add_w# (L.mul_c# u1 m3) carry1_2 + !carry1_2 = (# ab1_2, c1_2 #) + !axy1_3 = wadd_w# (L.mul_c# x1 y3) r0 + !umc1_3 = W.add_w# (L.mul_c# u1 m3) carry1_2 !(# (# q1, ab1_3 #), c1_3 #) = W.add_o# axy1_3 umc1_3 - !carry1_3 = (# ab1_3, c1_3 #) - !(# r1, mc1 #) = wadd_w# carry1_3 mc0 - !axy2 = wadd_w# (L.mul_c# x2 y0) o1 - !u2 = L.mul_w# (lo axy2) n - !(# (# _, a2 #), c2 #) = W.add_o# (L.mul_c# u2 m0) axy2 - !carry2 = (# a2, c2 #) - !axy2_1 = wadd_w# (L.mul_c# x2 y1) p1 - !umc2_1 = W.add_w# (L.mul_c# u2 m1) carry2 + !carry1_3 = (# ab1_3, c1_3 #) + !(# r1, mc1 #) = wadd_w# carry1_3 mc0 + !axy2 = wadd_w# (L.mul_c# x2 y0) o1 + !u2 = L.mul_w# (lo axy2) n + !(# (# _, a2 #), c2 #) = W.add_o# (L.mul_c# u2 m0) axy2 + !carry2 = (# a2, c2 #) + !axy2_1 = wadd_w# (L.mul_c# x2 y1) p1 + !umc2_1 = W.add_w# (L.mul_c# u2 m1) carry2 !(# (# o2, ab2_1 #), c2_1 #) = W.add_o# axy2_1 umc2_1 - !carry2_1 = (# ab2_1, c2_1 #) - !axy2_2 = wadd_w# (L.mul_c# x2 y2) q1 - !umc2_2 = W.add_w# (L.mul_c# u2 m2) carry2_1 + !carry2_1 = (# ab2_1, c2_1 #) + !axy2_2 = wadd_w# (L.mul_c# x2 y2) q1 + !umc2_2 = W.add_w# (L.mul_c# u2 m2) carry2_1 !(# (# p2, ab2_2 #), c2_2 #) = W.add_o# axy2_2 umc2_2 - !carry2_2 = (# ab2_2, c2_2 #) - !axy2_3 = wadd_w# (L.mul_c# x2 y3) r1 - !umc2_3 = W.add_w# (L.mul_c# u2 m3) carry2_2 + !carry2_2 = (# ab2_2, c2_2 #) + !axy2_3 = wadd_w# (L.mul_c# x2 y3) r1 + !umc2_3 = W.add_w# (L.mul_c# u2 m3) carry2_2 !(# (# q2, ab2_3 #), c2_3 #) = W.add_o# axy2_3 umc2_3 - !carry2_3 = (# ab2_3, c2_3 #) - !(# r2, mc2 #) = wadd_w# carry2_3 mc1 - !axy3 = wadd_w# (L.mul_c# x3 y0) o2 - !u3 = L.mul_w# (lo axy3) n - !(# (# _, a3 #), c3 #) = W.add_o# (L.mul_c# u3 m0) axy3 - !carry3 = (# a3, c3 #) - !axy3_1 = wadd_w# (L.mul_c# x3 y1) p2 - !umc3_1 = W.add_w# (L.mul_c# u3 m1) carry3 + !carry2_3 = (# ab2_3, c2_3 #) + !(# r2, mc2 #) = wadd_w# carry2_3 mc1 + !axy3 = wadd_w# (L.mul_c# x3 y0) o2 + !u3 = L.mul_w# (lo axy3) n + !(# (# _, a3 #), c3 #) = W.add_o# (L.mul_c# u3 m0) axy3 + !carry3 = (# a3, c3 #) + !axy3_1 = wadd_w# (L.mul_c# x3 y1) p2 + !umc3_1 = W.add_w# (L.mul_c# u3 m1) carry3 !(# (# o3, ab3_1 #), c3_1 #) = W.add_o# axy3_1 umc3_1 - !carry3_1 = (# ab3_1, c3_1 #) - !axy3_2 = wadd_w# (L.mul_c# x3 y2) q2 - !umc3_2 = W.add_w# (L.mul_c# u3 m2) carry3_1 + !carry3_1 = (# ab3_1, c3_1 #) + !axy3_2 = wadd_w# (L.mul_c# x3 y2) q2 + !umc3_2 = W.add_w# (L.mul_c# u3 m2) carry3_1 !(# (# p3, ab3_2 #), c3_2 #) = W.add_o# axy3_2 umc3_2 - !carry3_2 = (# ab3_2, c3_2 #) - !axy3_3 = wadd_w# (L.mul_c# x3 y3) r2 - !umc3_3 = W.add_w# (L.mul_c# u3 m3) carry3_2 + !carry3_2 = (# ab3_2, c3_2 #) + !axy3_3 = wadd_w# (L.mul_c# x3 y3) r2 + !umc3_3 = W.add_w# (L.mul_c# u3 m3) carry3_2 !(# (# q3, ab3_3 #), c3_3 #) = W.add_o# axy3_3 umc3_3 - !carry3_3 = (# ab3_3, c3_3 #) - !(# r3, mc3 #) = wadd_w# carry3_3 mc2 + !carry3_3 = (# ab3_3, c3_3 #) + !(# r3, mc3 #) = wadd_w# carry3_3 mc2 in (# (# o3, p3, q3, r3 #), mc3 #) {-# INLINE mul_inner# #-}