20 uint64_t t3, t4, tx, u0;
21 uint64_t a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3], a4 = a[4];
22 const uint64_t
M = 0xFFFFFFFFFFFFFULL, R = 0x1000003D10ULL;
43 secp256k1_u128_mul(&d, a0, b[3]);
44 secp256k1_u128_accum_mul(&d, a1, b[2]);
45 secp256k1_u128_accum_mul(&d, a2, b[1]);
46 secp256k1_u128_accum_mul(&d, a3, b[0]);
49 secp256k1_u128_mul(&c, a4, b[4]);
52 secp256k1_u128_accum_mul(&d, R, secp256k1_u128_to_u64(&c)); secp256k1_u128_rshift(&c, 64);
56 t3 = secp256k1_u128_to_u64(&d) &
M; secp256k1_u128_rshift(&d, 52);
61 secp256k1_u128_accum_mul(&d, a0, b[4]);
62 secp256k1_u128_accum_mul(&d, a1, b[3]);
63 secp256k1_u128_accum_mul(&d, a2, b[2]);
64 secp256k1_u128_accum_mul(&d, a3, b[1]);
65 secp256k1_u128_accum_mul(&d, a4, b[0]);
68 secp256k1_u128_accum_mul(&d, R << 12, secp256k1_u128_to_u64(&c));
71 t4 = secp256k1_u128_to_u64(&d) &
M; secp256k1_u128_rshift(&d, 52);
75 tx = (t4 >> 48); t4 &= (
M >> 4);
80 secp256k1_u128_mul(&c, a0, b[0]);
83 secp256k1_u128_accum_mul(&d, a1, b[4]);
84 secp256k1_u128_accum_mul(&d, a2, b[3]);
85 secp256k1_u128_accum_mul(&d, a3, b[2]);
86 secp256k1_u128_accum_mul(&d, a4, b[1]);
89 u0 = secp256k1_u128_to_u64(&d) &
M; secp256k1_u128_rshift(&d, 52);
97 secp256k1_u128_accum_mul(&c, u0, R >> 4);
100 r[0] = secp256k1_u128_to_u64(&c) &
M; secp256k1_u128_rshift(&c, 52);
105 secp256k1_u128_accum_mul(&c, a0, b[1]);
106 secp256k1_u128_accum_mul(&c, a1, b[0]);
109 secp256k1_u128_accum_mul(&d, a2, b[4]);
110 secp256k1_u128_accum_mul(&d, a3, b[3]);
111 secp256k1_u128_accum_mul(&d, a4, b[2]);
114 secp256k1_u128_accum_mul(&c, secp256k1_u128_to_u64(&d) &
M, R); secp256k1_u128_rshift(&d, 52);
118 r[1] = secp256k1_u128_to_u64(&c) &
M; secp256k1_u128_rshift(&c, 52);
123 secp256k1_u128_accum_mul(&c, a0, b[2]);
124 secp256k1_u128_accum_mul(&c, a1, b[1]);
125 secp256k1_u128_accum_mul(&c, a2, b[0]);
128 secp256k1_u128_accum_mul(&d, a3, b[4]);
129 secp256k1_u128_accum_mul(&d, a4, b[3]);
132 secp256k1_u128_accum_mul(&c, R, secp256k1_u128_to_u64(&d)); secp256k1_u128_rshift(&d, 64);
137 r[2] = secp256k1_u128_to_u64(&c) &
M; secp256k1_u128_rshift(&c, 52);
141 secp256k1_u128_accum_mul(&c, R << 12, secp256k1_u128_to_u64(&d));
142 secp256k1_u128_accum_u64(&c, t3);
145 r[3] = secp256k1_u128_to_u64(&c) &
M; secp256k1_u128_rshift(&c, 52);
149 r[4] = secp256k1_u128_to_u64(&c) + t4;
156 uint64_t a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3], a4 = a[4];
157 uint64_t t3, t4, tx, u0;
158 const uint64_t
M = 0xFFFFFFFFFFFFFULL, R = 0x1000003D10ULL;
171 secp256k1_u128_mul(&d, a0*2, a3);
172 secp256k1_u128_accum_mul(&d, a1*2, a2);
175 secp256k1_u128_mul(&c, a4, a4);
178 secp256k1_u128_accum_mul(&d, R, secp256k1_u128_to_u64(&c)); secp256k1_u128_rshift(&c, 64);
182 t3 = secp256k1_u128_to_u64(&d) &
M; secp256k1_u128_rshift(&d, 52);
188 secp256k1_u128_accum_mul(&d, a0, a4);
189 secp256k1_u128_accum_mul(&d, a1*2, a3);
190 secp256k1_u128_accum_mul(&d, a2, a2);
193 secp256k1_u128_accum_mul(&d, R << 12, secp256k1_u128_to_u64(&c));
196 t4 = secp256k1_u128_to_u64(&d) &
M; secp256k1_u128_rshift(&d, 52);
200 tx = (t4 >> 48); t4 &= (
M >> 4);
205 secp256k1_u128_mul(&c, a0, a0);
208 secp256k1_u128_accum_mul(&d, a1, a4);
209 secp256k1_u128_accum_mul(&d, a2*2, a3);
212 u0 = secp256k1_u128_to_u64(&d) &
M; secp256k1_u128_rshift(&d, 52);
220 secp256k1_u128_accum_mul(&c, u0, R >> 4);
223 r[0] = secp256k1_u128_to_u64(&c) &
M; secp256k1_u128_rshift(&c, 52);
229 secp256k1_u128_accum_mul(&c, a0, a1);
232 secp256k1_u128_accum_mul(&d, a2, a4);
233 secp256k1_u128_accum_mul(&d, a3, a3);
236 secp256k1_u128_accum_mul(&c, secp256k1_u128_to_u64(&d) &
M, R); secp256k1_u128_rshift(&d, 52);
240 r[1] = secp256k1_u128_to_u64(&c) &
M; secp256k1_u128_rshift(&c, 52);
245 secp256k1_u128_accum_mul(&c, a0, a2);
246 secp256k1_u128_accum_mul(&c, a1, a1);
249 secp256k1_u128_accum_mul(&d, a3, a4);
252 secp256k1_u128_accum_mul(&c, R, secp256k1_u128_to_u64(&d)); secp256k1_u128_rshift(&d, 64);
256 r[2] = secp256k1_u128_to_u64(&c) &
M; secp256k1_u128_rshift(&c, 52);
261 secp256k1_u128_accum_mul(&c, R << 12, secp256k1_u128_to_u64(&d));
262 secp256k1_u128_accum_u64(&c, t3);
265 r[3] = secp256k1_u128_to_u64(&c) &
M; secp256k1_u128_rshift(&c, 52);
269 r[4] = secp256k1_u128_to_u64(&c) + t4;