Coverage Report

Created: 2026-06-09 06:59

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/Botan-3.4.0/src/lib/math/mp/mp_comba.cpp
Line
Count
Source
1
/*
2
* Comba Multiplication and Squaring
3
*
4
* This file was automatically generated by ./src/scripts/dev_tools/gen_mp_comba.py on 2024-03-29
5
*
6
* Botan is released under the Simplified BSD License (see license.txt)
7
*/
8
9
#include <botan/internal/mp_core.h>
10
11
namespace Botan {
12
13
/*
14
* Comba 4x4 Squaring
15
*/
16
24.5M
void bigint_comba_sqr4(word z[8], const word x[4]) {
17
24.5M
   word w2 = 0, w1 = 0, w0 = 0;
18
19
24.5M
   word3_muladd(&w2, &w1, &w0, x[0], x[0]);
20
24.5M
   z[0] = w0;
21
24.5M
   w0 = 0;
22
23
24.5M
   word3_muladd_2(&w0, &w2, &w1, x[0], x[1]);
24
24.5M
   z[1] = w1;
25
24.5M
   w1 = 0;
26
27
24.5M
   word3_muladd_2(&w1, &w0, &w2, x[0], x[2]);
28
24.5M
   word3_muladd(&w1, &w0, &w2, x[1], x[1]);
29
24.5M
   z[2] = w2;
30
24.5M
   w2 = 0;
31
32
24.5M
   word3_muladd_2(&w2, &w1, &w0, x[0], x[3]);
33
24.5M
   word3_muladd_2(&w2, &w1, &w0, x[1], x[2]);
34
24.5M
   z[3] = w0;
35
24.5M
   w0 = 0;
36
37
24.5M
   word3_muladd_2(&w0, &w2, &w1, x[1], x[3]);
38
24.5M
   word3_muladd(&w0, &w2, &w1, x[2], x[2]);
39
24.5M
   z[4] = w1;
40
24.5M
   w1 = 0;
41
42
24.5M
   word3_muladd_2(&w1, &w0, &w2, x[2], x[3]);
43
24.5M
   z[5] = w2;
44
24.5M
   w2 = 0;
45
46
24.5M
   word3_muladd(&w2, &w1, &w0, x[3], x[3]);
47
24.5M
   z[6] = w0;
48
24.5M
   z[7] = w1;
49
24.5M
}
50
51
/*
52
* Comba 4x4 Multiplication
53
*/
54
30.5M
void bigint_comba_mul4(word z[8], const word x[4], const word y[4]) {
55
30.5M
   word w2 = 0, w1 = 0, w0 = 0;
56
57
30.5M
   word3_muladd(&w2, &w1, &w0, x[0], y[0]);
58
30.5M
   z[0] = w0;
59
30.5M
   w0 = 0;
60
61
30.5M
   word3_muladd(&w0, &w2, &w1, x[0], y[1]);
62
30.5M
   word3_muladd(&w0, &w2, &w1, x[1], y[0]);
63
30.5M
   z[1] = w1;
64
30.5M
   w1 = 0;
65
66
30.5M
   word3_muladd(&w1, &w0, &w2, x[0], y[2]);
67
30.5M
   word3_muladd(&w1, &w0, &w2, x[1], y[1]);
68
30.5M
   word3_muladd(&w1, &w0, &w2, x[2], y[0]);
69
30.5M
   z[2] = w2;
70
30.5M
   w2 = 0;
71
72
30.5M
   word3_muladd(&w2, &w1, &w0, x[0], y[3]);
73
30.5M
   word3_muladd(&w2, &w1, &w0, x[1], y[2]);
74
30.5M
   word3_muladd(&w2, &w1, &w0, x[2], y[1]);
75
30.5M
   word3_muladd(&w2, &w1, &w0, x[3], y[0]);
76
30.5M
   z[3] = w0;
77
30.5M
   w0 = 0;
78
79
30.5M
   word3_muladd(&w0, &w2, &w1, x[1], y[3]);
80
30.5M
   word3_muladd(&w0, &w2, &w1, x[2], y[2]);
81
30.5M
   word3_muladd(&w0, &w2, &w1, x[3], y[1]);
82
30.5M
   z[4] = w1;
83
30.5M
   w1 = 0;
84
85
30.5M
   word3_muladd(&w1, &w0, &w2, x[2], y[3]);
86
30.5M
   word3_muladd(&w1, &w0, &w2, x[3], y[2]);
87
30.5M
   z[5] = w2;
88
30.5M
   w2 = 0;
89
90
30.5M
   word3_muladd(&w2, &w1, &w0, x[3], y[3]);
91
30.5M
   z[6] = w0;
92
30.5M
   z[7] = w1;
93
30.5M
}
94
95
/*
96
* Comba 6x6 Squaring
97
*/
98
2.67M
void bigint_comba_sqr6(word z[12], const word x[6]) {
99
2.67M
   word w2 = 0, w1 = 0, w0 = 0;
100
101
2.67M
   word3_muladd(&w2, &w1, &w0, x[0], x[0]);
102
2.67M
   z[0] = w0;
103
2.67M
   w0 = 0;
104
105
2.67M
   word3_muladd_2(&w0, &w2, &w1, x[0], x[1]);
106
2.67M
   z[1] = w1;
107
2.67M
   w1 = 0;
108
109
2.67M
   word3_muladd_2(&w1, &w0, &w2, x[0], x[2]);
110
2.67M
   word3_muladd(&w1, &w0, &w2, x[1], x[1]);
111
2.67M
   z[2] = w2;
112
2.67M
   w2 = 0;
113
114
2.67M
   word3_muladd_2(&w2, &w1, &w0, x[0], x[3]);
115
2.67M
   word3_muladd_2(&w2, &w1, &w0, x[1], x[2]);
116
2.67M
   z[3] = w0;
117
2.67M
   w0 = 0;
118
119
2.67M
   word3_muladd_2(&w0, &w2, &w1, x[0], x[4]);
120
2.67M
   word3_muladd_2(&w0, &w2, &w1, x[1], x[3]);
121
2.67M
   word3_muladd(&w0, &w2, &w1, x[2], x[2]);
122
2.67M
   z[4] = w1;
123
2.67M
   w1 = 0;
124
125
2.67M
   word3_muladd_2(&w1, &w0, &w2, x[0], x[5]);
126
2.67M
   word3_muladd_2(&w1, &w0, &w2, x[1], x[4]);
127
2.67M
   word3_muladd_2(&w1, &w0, &w2, x[2], x[3]);
128
2.67M
   z[5] = w2;
129
2.67M
   w2 = 0;
130
131
2.67M
   word3_muladd_2(&w2, &w1, &w0, x[1], x[5]);
132
2.67M
   word3_muladd_2(&w2, &w1, &w0, x[2], x[4]);
133
2.67M
   word3_muladd(&w2, &w1, &w0, x[3], x[3]);
134
2.67M
   z[6] = w0;
135
2.67M
   w0 = 0;
136
137
2.67M
   word3_muladd_2(&w0, &w2, &w1, x[2], x[5]);
138
2.67M
   word3_muladd_2(&w0, &w2, &w1, x[3], x[4]);
139
2.67M
   z[7] = w1;
140
2.67M
   w1 = 0;
141
142
2.67M
   word3_muladd_2(&w1, &w0, &w2, x[3], x[5]);
143
2.67M
   word3_muladd(&w1, &w0, &w2, x[4], x[4]);
144
2.67M
   z[8] = w2;
145
2.67M
   w2 = 0;
146
147
2.67M
   word3_muladd_2(&w2, &w1, &w0, x[4], x[5]);
148
2.67M
   z[9] = w0;
149
2.67M
   w0 = 0;
150
151
2.67M
   word3_muladd(&w0, &w2, &w1, x[5], x[5]);
152
2.67M
   z[10] = w1;
153
2.67M
   z[11] = w2;
154
2.67M
}
155
156
/*
157
* Comba 6x6 Multiplication
158
*/
159
3.00M
void bigint_comba_mul6(word z[12], const word x[6], const word y[6]) {
160
3.00M
   word w2 = 0, w1 = 0, w0 = 0;
161
162
3.00M
   word3_muladd(&w2, &w1, &w0, x[0], y[0]);
163
3.00M
   z[0] = w0;
164
3.00M
   w0 = 0;
165
166
3.00M
   word3_muladd(&w0, &w2, &w1, x[0], y[1]);
167
3.00M
   word3_muladd(&w0, &w2, &w1, x[1], y[0]);
168
3.00M
   z[1] = w1;
169
3.00M
   w1 = 0;
170
171
3.00M
   word3_muladd(&w1, &w0, &w2, x[0], y[2]);
172
3.00M
   word3_muladd(&w1, &w0, &w2, x[1], y[1]);
173
3.00M
   word3_muladd(&w1, &w0, &w2, x[2], y[0]);
174
3.00M
   z[2] = w2;
175
3.00M
   w2 = 0;
176
177
3.00M
   word3_muladd(&w2, &w1, &w0, x[0], y[3]);
178
3.00M
   word3_muladd(&w2, &w1, &w0, x[1], y[2]);
179
3.00M
   word3_muladd(&w2, &w1, &w0, x[2], y[1]);
180
3.00M
   word3_muladd(&w2, &w1, &w0, x[3], y[0]);
181
3.00M
   z[3] = w0;
182
3.00M
   w0 = 0;
183
184
3.00M
   word3_muladd(&w0, &w2, &w1, x[0], y[4]);
185
3.00M
   word3_muladd(&w0, &w2, &w1, x[1], y[3]);
186
3.00M
   word3_muladd(&w0, &w2, &w1, x[2], y[2]);
187
3.00M
   word3_muladd(&w0, &w2, &w1, x[3], y[1]);
188
3.00M
   word3_muladd(&w0, &w2, &w1, x[4], y[0]);
189
3.00M
   z[4] = w1;
190
3.00M
   w1 = 0;
191
192
3.00M
   word3_muladd(&w1, &w0, &w2, x[0], y[5]);
193
3.00M
   word3_muladd(&w1, &w0, &w2, x[1], y[4]);
194
3.00M
   word3_muladd(&w1, &w0, &w2, x[2], y[3]);
195
3.00M
   word3_muladd(&w1, &w0, &w2, x[3], y[2]);
196
3.00M
   word3_muladd(&w1, &w0, &w2, x[4], y[1]);
197
3.00M
   word3_muladd(&w1, &w0, &w2, x[5], y[0]);
198
3.00M
   z[5] = w2;
199
3.00M
   w2 = 0;
200
201
3.00M
   word3_muladd(&w2, &w1, &w0, x[1], y[5]);
202
3.00M
   word3_muladd(&w2, &w1, &w0, x[2], y[4]);
203
3.00M
   word3_muladd(&w2, &w1, &w0, x[3], y[3]);
204
3.00M
   word3_muladd(&w2, &w1, &w0, x[4], y[2]);
205
3.00M
   word3_muladd(&w2, &w1, &w0, x[5], y[1]);
206
3.00M
   z[6] = w0;
207
3.00M
   w0 = 0;
208
209
3.00M
   word3_muladd(&w0, &w2, &w1, x[2], y[5]);
210
3.00M
   word3_muladd(&w0, &w2, &w1, x[3], y[4]);
211
3.00M
   word3_muladd(&w0, &w2, &w1, x[4], y[3]);
212
3.00M
   word3_muladd(&w0, &w2, &w1, x[5], y[2]);
213
3.00M
   z[7] = w1;
214
3.00M
   w1 = 0;
215
216
3.00M
   word3_muladd(&w1, &w0, &w2, x[3], y[5]);
217
3.00M
   word3_muladd(&w1, &w0, &w2, x[4], y[4]);
218
3.00M
   word3_muladd(&w1, &w0, &w2, x[5], y[3]);
219
3.00M
   z[8] = w2;
220
3.00M
   w2 = 0;
221
222
3.00M
   word3_muladd(&w2, &w1, &w0, x[4], y[5]);
223
3.00M
   word3_muladd(&w2, &w1, &w0, x[5], y[4]);
224
3.00M
   z[9] = w0;
225
3.00M
   w0 = 0;
226
227
3.00M
   word3_muladd(&w0, &w2, &w1, x[5], y[5]);
228
3.00M
   z[10] = w1;
229
3.00M
   z[11] = w2;
230
3.00M
}
231
232
/*
233
* Comba 8x8 Squaring
234
*/
235
1.96M
void bigint_comba_sqr8(word z[16], const word x[8]) {
236
1.96M
   word w2 = 0, w1 = 0, w0 = 0;
237
238
1.96M
   word3_muladd(&w2, &w1, &w0, x[0], x[0]);
239
1.96M
   z[0] = w0;
240
1.96M
   w0 = 0;
241
242
1.96M
   word3_muladd_2(&w0, &w2, &w1, x[0], x[1]);
243
1.96M
   z[1] = w1;
244
1.96M
   w1 = 0;
245
246
1.96M
   word3_muladd_2(&w1, &w0, &w2, x[0], x[2]);
247
1.96M
   word3_muladd(&w1, &w0, &w2, x[1], x[1]);
248
1.96M
   z[2] = w2;
249
1.96M
   w2 = 0;
250
251
1.96M
   word3_muladd_2(&w2, &w1, &w0, x[0], x[3]);
252
1.96M
   word3_muladd_2(&w2, &w1, &w0, x[1], x[2]);
253
1.96M
   z[3] = w0;
254
1.96M
   w0 = 0;
255
256
1.96M
   word3_muladd_2(&w0, &w2, &w1, x[0], x[4]);
257
1.96M
   word3_muladd_2(&w0, &w2, &w1, x[1], x[3]);
258
1.96M
   word3_muladd(&w0, &w2, &w1, x[2], x[2]);
259
1.96M
   z[4] = w1;
260
1.96M
   w1 = 0;
261
262
1.96M
   word3_muladd_2(&w1, &w0, &w2, x[0], x[5]);
263
1.96M
   word3_muladd_2(&w1, &w0, &w2, x[1], x[4]);
264
1.96M
   word3_muladd_2(&w1, &w0, &w2, x[2], x[3]);
265
1.96M
   z[5] = w2;
266
1.96M
   w2 = 0;
267
268
1.96M
   word3_muladd_2(&w2, &w1, &w0, x[0], x[6]);
269
1.96M
   word3_muladd_2(&w2, &w1, &w0, x[1], x[5]);
270
1.96M
   word3_muladd_2(&w2, &w1, &w0, x[2], x[4]);
271
1.96M
   word3_muladd(&w2, &w1, &w0, x[3], x[3]);
272
1.96M
   z[6] = w0;
273
1.96M
   w0 = 0;
274
275
1.96M
   word3_muladd_2(&w0, &w2, &w1, x[0], x[7]);
276
1.96M
   word3_muladd_2(&w0, &w2, &w1, x[1], x[6]);
277
1.96M
   word3_muladd_2(&w0, &w2, &w1, x[2], x[5]);
278
1.96M
   word3_muladd_2(&w0, &w2, &w1, x[3], x[4]);
279
1.96M
   z[7] = w1;
280
1.96M
   w1 = 0;
281
282
1.96M
   word3_muladd_2(&w1, &w0, &w2, x[1], x[7]);
283
1.96M
   word3_muladd_2(&w1, &w0, &w2, x[2], x[6]);
284
1.96M
   word3_muladd_2(&w1, &w0, &w2, x[3], x[5]);
285
1.96M
   word3_muladd(&w1, &w0, &w2, x[4], x[4]);
286
1.96M
   z[8] = w2;
287
1.96M
   w2 = 0;
288
289
1.96M
   word3_muladd_2(&w2, &w1, &w0, x[2], x[7]);
290
1.96M
   word3_muladd_2(&w2, &w1, &w0, x[3], x[6]);
291
1.96M
   word3_muladd_2(&w2, &w1, &w0, x[4], x[5]);
292
1.96M
   z[9] = w0;
293
1.96M
   w0 = 0;
294
295
1.96M
   word3_muladd_2(&w0, &w2, &w1, x[3], x[7]);
296
1.96M
   word3_muladd_2(&w0, &w2, &w1, x[4], x[6]);
297
1.96M
   word3_muladd(&w0, &w2, &w1, x[5], x[5]);
298
1.96M
   z[10] = w1;
299
1.96M
   w1 = 0;
300
301
1.96M
   word3_muladd_2(&w1, &w0, &w2, x[4], x[7]);
302
1.96M
   word3_muladd_2(&w1, &w0, &w2, x[5], x[6]);
303
1.96M
   z[11] = w2;
304
1.96M
   w2 = 0;
305
306
1.96M
   word3_muladd_2(&w2, &w1, &w0, x[5], x[7]);
307
1.96M
   word3_muladd(&w2, &w1, &w0, x[6], x[6]);
308
1.96M
   z[12] = w0;
309
1.96M
   w0 = 0;
310
311
1.96M
   word3_muladd_2(&w0, &w2, &w1, x[6], x[7]);
312
1.96M
   z[13] = w1;
313
1.96M
   w1 = 0;
314
315
1.96M
   word3_muladd(&w1, &w0, &w2, x[7], x[7]);
316
1.96M
   z[14] = w2;
317
1.96M
   z[15] = w0;
318
1.96M
}
319
320
/*
321
* Comba 8x8 Multiplication
322
*/
323
2.07M
void bigint_comba_mul8(word z[16], const word x[8], const word y[8]) {
324
2.07M
   word w2 = 0, w1 = 0, w0 = 0;
325
326
2.07M
   word3_muladd(&w2, &w1, &w0, x[0], y[0]);
327
2.07M
   z[0] = w0;
328
2.07M
   w0 = 0;
329
330
2.07M
   word3_muladd(&w0, &w2, &w1, x[0], y[1]);
331
2.07M
   word3_muladd(&w0, &w2, &w1, x[1], y[0]);
332
2.07M
   z[1] = w1;
333
2.07M
   w1 = 0;
334
335
2.07M
   word3_muladd(&w1, &w0, &w2, x[0], y[2]);
336
2.07M
   word3_muladd(&w1, &w0, &w2, x[1], y[1]);
337
2.07M
   word3_muladd(&w1, &w0, &w2, x[2], y[0]);
338
2.07M
   z[2] = w2;
339
2.07M
   w2 = 0;
340
341
2.07M
   word3_muladd(&w2, &w1, &w0, x[0], y[3]);
342
2.07M
   word3_muladd(&w2, &w1, &w0, x[1], y[2]);
343
2.07M
   word3_muladd(&w2, &w1, &w0, x[2], y[1]);
344
2.07M
   word3_muladd(&w2, &w1, &w0, x[3], y[0]);
345
2.07M
   z[3] = w0;
346
2.07M
   w0 = 0;
347
348
2.07M
   word3_muladd(&w0, &w2, &w1, x[0], y[4]);
349
2.07M
   word3_muladd(&w0, &w2, &w1, x[1], y[3]);
350
2.07M
   word3_muladd(&w0, &w2, &w1, x[2], y[2]);
351
2.07M
   word3_muladd(&w0, &w2, &w1, x[3], y[1]);
352
2.07M
   word3_muladd(&w0, &w2, &w1, x[4], y[0]);
353
2.07M
   z[4] = w1;
354
2.07M
   w1 = 0;
355
356
2.07M
   word3_muladd(&w1, &w0, &w2, x[0], y[5]);
357
2.07M
   word3_muladd(&w1, &w0, &w2, x[1], y[4]);
358
2.07M
   word3_muladd(&w1, &w0, &w2, x[2], y[3]);
359
2.07M
   word3_muladd(&w1, &w0, &w2, x[3], y[2]);
360
2.07M
   word3_muladd(&w1, &w0, &w2, x[4], y[1]);
361
2.07M
   word3_muladd(&w1, &w0, &w2, x[5], y[0]);
362
2.07M
   z[5] = w2;
363
2.07M
   w2 = 0;
364
365
2.07M
   word3_muladd(&w2, &w1, &w0, x[0], y[6]);
366
2.07M
   word3_muladd(&w2, &w1, &w0, x[1], y[5]);
367
2.07M
   word3_muladd(&w2, &w1, &w0, x[2], y[4]);
368
2.07M
   word3_muladd(&w2, &w1, &w0, x[3], y[3]);
369
2.07M
   word3_muladd(&w2, &w1, &w0, x[4], y[2]);
370
2.07M
   word3_muladd(&w2, &w1, &w0, x[5], y[1]);
371
2.07M
   word3_muladd(&w2, &w1, &w0, x[6], y[0]);
372
2.07M
   z[6] = w0;
373
2.07M
   w0 = 0;
374
375
2.07M
   word3_muladd(&w0, &w2, &w1, x[0], y[7]);
376
2.07M
   word3_muladd(&w0, &w2, &w1, x[1], y[6]);
377
2.07M
   word3_muladd(&w0, &w2, &w1, x[2], y[5]);
378
2.07M
   word3_muladd(&w0, &w2, &w1, x[3], y[4]);
379
2.07M
   word3_muladd(&w0, &w2, &w1, x[4], y[3]);
380
2.07M
   word3_muladd(&w0, &w2, &w1, x[5], y[2]);
381
2.07M
   word3_muladd(&w0, &w2, &w1, x[6], y[1]);
382
2.07M
   word3_muladd(&w0, &w2, &w1, x[7], y[0]);
383
2.07M
   z[7] = w1;
384
2.07M
   w1 = 0;
385
386
2.07M
   word3_muladd(&w1, &w0, &w2, x[1], y[7]);
387
2.07M
   word3_muladd(&w1, &w0, &w2, x[2], y[6]);
388
2.07M
   word3_muladd(&w1, &w0, &w2, x[3], y[5]);
389
2.07M
   word3_muladd(&w1, &w0, &w2, x[4], y[4]);
390
2.07M
   word3_muladd(&w1, &w0, &w2, x[5], y[3]);
391
2.07M
   word3_muladd(&w1, &w0, &w2, x[6], y[2]);
392
2.07M
   word3_muladd(&w1, &w0, &w2, x[7], y[1]);
393
2.07M
   z[8] = w2;
394
2.07M
   w2 = 0;
395
396
2.07M
   word3_muladd(&w2, &w1, &w0, x[2], y[7]);
397
2.07M
   word3_muladd(&w2, &w1, &w0, x[3], y[6]);
398
2.07M
   word3_muladd(&w2, &w1, &w0, x[4], y[5]);
399
2.07M
   word3_muladd(&w2, &w1, &w0, x[5], y[4]);
400
2.07M
   word3_muladd(&w2, &w1, &w0, x[6], y[3]);
401
2.07M
   word3_muladd(&w2, &w1, &w0, x[7], y[2]);
402
2.07M
   z[9] = w0;
403
2.07M
   w0 = 0;
404
405
2.07M
   word3_muladd(&w0, &w2, &w1, x[3], y[7]);
406
2.07M
   word3_muladd(&w0, &w2, &w1, x[4], y[6]);
407
2.07M
   word3_muladd(&w0, &w2, &w1, x[5], y[5]);
408
2.07M
   word3_muladd(&w0, &w2, &w1, x[6], y[4]);
409
2.07M
   word3_muladd(&w0, &w2, &w1, x[7], y[3]);
410
2.07M
   z[10] = w1;
411
2.07M
   w1 = 0;
412
413
2.07M
   word3_muladd(&w1, &w0, &w2, x[4], y[7]);
414
2.07M
   word3_muladd(&w1, &w0, &w2, x[5], y[6]);
415
2.07M
   word3_muladd(&w1, &w0, &w2, x[6], y[5]);
416
2.07M
   word3_muladd(&w1, &w0, &w2, x[7], y[4]);
417
2.07M
   z[11] = w2;
418
2.07M
   w2 = 0;
419
420
2.07M
   word3_muladd(&w2, &w1, &w0, x[5], y[7]);
421
2.07M
   word3_muladd(&w2, &w1, &w0, x[6], y[6]);
422
2.07M
   word3_muladd(&w2, &w1, &w0, x[7], y[5]);
423
2.07M
   z[12] = w0;
424
2.07M
   w0 = 0;
425
426
2.07M
   word3_muladd(&w0, &w2, &w1, x[6], y[7]);
427
2.07M
   word3_muladd(&w0, &w2, &w1, x[7], y[6]);
428
2.07M
   z[13] = w1;
429
2.07M
   w1 = 0;
430
431
2.07M
   word3_muladd(&w1, &w0, &w2, x[7], y[7]);
432
2.07M
   z[14] = w2;
433
2.07M
   z[15] = w0;
434
2.07M
}
435
436
/*
437
* Comba 9x9 Squaring
438
*/
439
25.2M
void bigint_comba_sqr9(word z[18], const word x[9]) {
440
25.2M
   word w2 = 0, w1 = 0, w0 = 0;
441
442
25.2M
   word3_muladd(&w2, &w1, &w0, x[0], x[0]);
443
25.2M
   z[0] = w0;
444
25.2M
   w0 = 0;
445
446
25.2M
   word3_muladd_2(&w0, &w2, &w1, x[0], x[1]);
447
25.2M
   z[1] = w1;
448
25.2M
   w1 = 0;
449
450
25.2M
   word3_muladd_2(&w1, &w0, &w2, x[0], x[2]);
451
25.2M
   word3_muladd(&w1, &w0, &w2, x[1], x[1]);
452
25.2M
   z[2] = w2;
453
25.2M
   w2 = 0;
454
455
25.2M
   word3_muladd_2(&w2, &w1, &w0, x[0], x[3]);
456
25.2M
   word3_muladd_2(&w2, &w1, &w0, x[1], x[2]);
457
25.2M
   z[3] = w0;
458
25.2M
   w0 = 0;
459
460
25.2M
   word3_muladd_2(&w0, &w2, &w1, x[0], x[4]);
461
25.2M
   word3_muladd_2(&w0, &w2, &w1, x[1], x[3]);
462
25.2M
   word3_muladd(&w0, &w2, &w1, x[2], x[2]);
463
25.2M
   z[4] = w1;
464
25.2M
   w1 = 0;
465
466
25.2M
   word3_muladd_2(&w1, &w0, &w2, x[0], x[5]);
467
25.2M
   word3_muladd_2(&w1, &w0, &w2, x[1], x[4]);
468
25.2M
   word3_muladd_2(&w1, &w0, &w2, x[2], x[3]);
469
25.2M
   z[5] = w2;
470
25.2M
   w2 = 0;
471
472
25.2M
   word3_muladd_2(&w2, &w1, &w0, x[0], x[6]);
473
25.2M
   word3_muladd_2(&w2, &w1, &w0, x[1], x[5]);
474
25.2M
   word3_muladd_2(&w2, &w1, &w0, x[2], x[4]);
475
25.2M
   word3_muladd(&w2, &w1, &w0, x[3], x[3]);
476
25.2M
   z[6] = w0;
477
25.2M
   w0 = 0;
478
479
25.2M
   word3_muladd_2(&w0, &w2, &w1, x[0], x[7]);
480
25.2M
   word3_muladd_2(&w0, &w2, &w1, x[1], x[6]);
481
25.2M
   word3_muladd_2(&w0, &w2, &w1, x[2], x[5]);
482
25.2M
   word3_muladd_2(&w0, &w2, &w1, x[3], x[4]);
483
25.2M
   z[7] = w1;
484
25.2M
   w1 = 0;
485
486
25.2M
   word3_muladd_2(&w1, &w0, &w2, x[0], x[8]);
487
25.2M
   word3_muladd_2(&w1, &w0, &w2, x[1], x[7]);
488
25.2M
   word3_muladd_2(&w1, &w0, &w2, x[2], x[6]);
489
25.2M
   word3_muladd_2(&w1, &w0, &w2, x[3], x[5]);
490
25.2M
   word3_muladd(&w1, &w0, &w2, x[4], x[4]);
491
25.2M
   z[8] = w2;
492
25.2M
   w2 = 0;
493
494
25.2M
   word3_muladd_2(&w2, &w1, &w0, x[1], x[8]);
495
25.2M
   word3_muladd_2(&w2, &w1, &w0, x[2], x[7]);
496
25.2M
   word3_muladd_2(&w2, &w1, &w0, x[3], x[6]);
497
25.2M
   word3_muladd_2(&w2, &w1, &w0, x[4], x[5]);
498
25.2M
   z[9] = w0;
499
25.2M
   w0 = 0;
500
501
25.2M
   word3_muladd_2(&w0, &w2, &w1, x[2], x[8]);
502
25.2M
   word3_muladd_2(&w0, &w2, &w1, x[3], x[7]);
503
25.2M
   word3_muladd_2(&w0, &w2, &w1, x[4], x[6]);
504
25.2M
   word3_muladd(&w0, &w2, &w1, x[5], x[5]);
505
25.2M
   z[10] = w1;
506
25.2M
   w1 = 0;
507
508
25.2M
   word3_muladd_2(&w1, &w0, &w2, x[3], x[8]);
509
25.2M
   word3_muladd_2(&w1, &w0, &w2, x[4], x[7]);
510
25.2M
   word3_muladd_2(&w1, &w0, &w2, x[5], x[6]);
511
25.2M
   z[11] = w2;
512
25.2M
   w2 = 0;
513
514
25.2M
   word3_muladd_2(&w2, &w1, &w0, x[4], x[8]);
515
25.2M
   word3_muladd_2(&w2, &w1, &w0, x[5], x[7]);
516
25.2M
   word3_muladd(&w2, &w1, &w0, x[6], x[6]);
517
25.2M
   z[12] = w0;
518
25.2M
   w0 = 0;
519
520
25.2M
   word3_muladd_2(&w0, &w2, &w1, x[5], x[8]);
521
25.2M
   word3_muladd_2(&w0, &w2, &w1, x[6], x[7]);
522
25.2M
   z[13] = w1;
523
25.2M
   w1 = 0;
524
525
25.2M
   word3_muladd_2(&w1, &w0, &w2, x[6], x[8]);
526
25.2M
   word3_muladd(&w1, &w0, &w2, x[7], x[7]);
527
25.2M
   z[14] = w2;
528
25.2M
   w2 = 0;
529
530
25.2M
   word3_muladd_2(&w2, &w1, &w0, x[7], x[8]);
531
25.2M
   z[15] = w0;
532
25.2M
   w0 = 0;
533
534
25.2M
   word3_muladd(&w0, &w2, &w1, x[8], x[8]);
535
25.2M
   z[16] = w1;
536
25.2M
   z[17] = w2;
537
25.2M
}
538
539
/*
540
* Comba 9x9 Multiplication
541
*/
542
27.4M
void bigint_comba_mul9(word z[18], const word x[9], const word y[9]) {
543
27.4M
   word w2 = 0, w1 = 0, w0 = 0;
544
545
27.4M
   word3_muladd(&w2, &w1, &w0, x[0], y[0]);
546
27.4M
   z[0] = w0;
547
27.4M
   w0 = 0;
548
549
27.4M
   word3_muladd(&w0, &w2, &w1, x[0], y[1]);
550
27.4M
   word3_muladd(&w0, &w2, &w1, x[1], y[0]);
551
27.4M
   z[1] = w1;
552
27.4M
   w1 = 0;
553
554
27.4M
   word3_muladd(&w1, &w0, &w2, x[0], y[2]);
555
27.4M
   word3_muladd(&w1, &w0, &w2, x[1], y[1]);
556
27.4M
   word3_muladd(&w1, &w0, &w2, x[2], y[0]);
557
27.4M
   z[2] = w2;
558
27.4M
   w2 = 0;
559
560
27.4M
   word3_muladd(&w2, &w1, &w0, x[0], y[3]);
561
27.4M
   word3_muladd(&w2, &w1, &w0, x[1], y[2]);
562
27.4M
   word3_muladd(&w2, &w1, &w0, x[2], y[1]);
563
27.4M
   word3_muladd(&w2, &w1, &w0, x[3], y[0]);
564
27.4M
   z[3] = w0;
565
27.4M
   w0 = 0;
566
567
27.4M
   word3_muladd(&w0, &w2, &w1, x[0], y[4]);
568
27.4M
   word3_muladd(&w0, &w2, &w1, x[1], y[3]);
569
27.4M
   word3_muladd(&w0, &w2, &w1, x[2], y[2]);
570
27.4M
   word3_muladd(&w0, &w2, &w1, x[3], y[1]);
571
27.4M
   word3_muladd(&w0, &w2, &w1, x[4], y[0]);
572
27.4M
   z[4] = w1;
573
27.4M
   w1 = 0;
574
575
27.4M
   word3_muladd(&w1, &w0, &w2, x[0], y[5]);
576
27.4M
   word3_muladd(&w1, &w0, &w2, x[1], y[4]);
577
27.4M
   word3_muladd(&w1, &w0, &w2, x[2], y[3]);
578
27.4M
   word3_muladd(&w1, &w0, &w2, x[3], y[2]);
579
27.4M
   word3_muladd(&w1, &w0, &w2, x[4], y[1]);
580
27.4M
   word3_muladd(&w1, &w0, &w2, x[5], y[0]);
581
27.4M
   z[5] = w2;
582
27.4M
   w2 = 0;
583
584
27.4M
   word3_muladd(&w2, &w1, &w0, x[0], y[6]);
585
27.4M
   word3_muladd(&w2, &w1, &w0, x[1], y[5]);
586
27.4M
   word3_muladd(&w2, &w1, &w0, x[2], y[4]);
587
27.4M
   word3_muladd(&w2, &w1, &w0, x[3], y[3]);
588
27.4M
   word3_muladd(&w2, &w1, &w0, x[4], y[2]);
589
27.4M
   word3_muladd(&w2, &w1, &w0, x[5], y[1]);
590
27.4M
   word3_muladd(&w2, &w1, &w0, x[6], y[0]);
591
27.4M
   z[6] = w0;
592
27.4M
   w0 = 0;
593
594
27.4M
   word3_muladd(&w0, &w2, &w1, x[0], y[7]);
595
27.4M
   word3_muladd(&w0, &w2, &w1, x[1], y[6]);
596
27.4M
   word3_muladd(&w0, &w2, &w1, x[2], y[5]);
597
27.4M
   word3_muladd(&w0, &w2, &w1, x[3], y[4]);
598
27.4M
   word3_muladd(&w0, &w2, &w1, x[4], y[3]);
599
27.4M
   word3_muladd(&w0, &w2, &w1, x[5], y[2]);
600
27.4M
   word3_muladd(&w0, &w2, &w1, x[6], y[1]);
601
27.4M
   word3_muladd(&w0, &w2, &w1, x[7], y[0]);
602
27.4M
   z[7] = w1;
603
27.4M
   w1 = 0;
604
605
27.4M
   word3_muladd(&w1, &w0, &w2, x[0], y[8]);
606
27.4M
   word3_muladd(&w1, &w0, &w2, x[1], y[7]);
607
27.4M
   word3_muladd(&w1, &w0, &w2, x[2], y[6]);
608
27.4M
   word3_muladd(&w1, &w0, &w2, x[3], y[5]);
609
27.4M
   word3_muladd(&w1, &w0, &w2, x[4], y[4]);
610
27.4M
   word3_muladd(&w1, &w0, &w2, x[5], y[3]);
611
27.4M
   word3_muladd(&w1, &w0, &w2, x[6], y[2]);
612
27.4M
   word3_muladd(&w1, &w0, &w2, x[7], y[1]);
613
27.4M
   word3_muladd(&w1, &w0, &w2, x[8], y[0]);
614
27.4M
   z[8] = w2;
615
27.4M
   w2 = 0;
616
617
27.4M
   word3_muladd(&w2, &w1, &w0, x[1], y[8]);
618
27.4M
   word3_muladd(&w2, &w1, &w0, x[2], y[7]);
619
27.4M
   word3_muladd(&w2, &w1, &w0, x[3], y[6]);
620
27.4M
   word3_muladd(&w2, &w1, &w0, x[4], y[5]);
621
27.4M
   word3_muladd(&w2, &w1, &w0, x[5], y[4]);
622
27.4M
   word3_muladd(&w2, &w1, &w0, x[6], y[3]);
623
27.4M
   word3_muladd(&w2, &w1, &w0, x[7], y[2]);
624
27.4M
   word3_muladd(&w2, &w1, &w0, x[8], y[1]);
625
27.4M
   z[9] = w0;
626
27.4M
   w0 = 0;
627
628
27.4M
   word3_muladd(&w0, &w2, &w1, x[2], y[8]);
629
27.4M
   word3_muladd(&w0, &w2, &w1, x[3], y[7]);
630
27.4M
   word3_muladd(&w0, &w2, &w1, x[4], y[6]);
631
27.4M
   word3_muladd(&w0, &w2, &w1, x[5], y[5]);
632
27.4M
   word3_muladd(&w0, &w2, &w1, x[6], y[4]);
633
27.4M
   word3_muladd(&w0, &w2, &w1, x[7], y[3]);
634
27.4M
   word3_muladd(&w0, &w2, &w1, x[8], y[2]);
635
27.4M
   z[10] = w1;
636
27.4M
   w1 = 0;
637
638
27.4M
   word3_muladd(&w1, &w0, &w2, x[3], y[8]);
639
27.4M
   word3_muladd(&w1, &w0, &w2, x[4], y[7]);
640
27.4M
   word3_muladd(&w1, &w0, &w2, x[5], y[6]);
641
27.4M
   word3_muladd(&w1, &w0, &w2, x[6], y[5]);
642
27.4M
   word3_muladd(&w1, &w0, &w2, x[7], y[4]);
643
27.4M
   word3_muladd(&w1, &w0, &w2, x[8], y[3]);
644
27.4M
   z[11] = w2;
645
27.4M
   w2 = 0;
646
647
27.4M
   word3_muladd(&w2, &w1, &w0, x[4], y[8]);
648
27.4M
   word3_muladd(&w2, &w1, &w0, x[5], y[7]);
649
27.4M
   word3_muladd(&w2, &w1, &w0, x[6], y[6]);
650
27.4M
   word3_muladd(&w2, &w1, &w0, x[7], y[5]);
651
27.4M
   word3_muladd(&w2, &w1, &w0, x[8], y[4]);
652
27.4M
   z[12] = w0;
653
27.4M
   w0 = 0;
654
655
27.4M
   word3_muladd(&w0, &w2, &w1, x[5], y[8]);
656
27.4M
   word3_muladd(&w0, &w2, &w1, x[6], y[7]);
657
27.4M
   word3_muladd(&w0, &w2, &w1, x[7], y[6]);
658
27.4M
   word3_muladd(&w0, &w2, &w1, x[8], y[5]);
659
27.4M
   z[13] = w1;
660
27.4M
   w1 = 0;
661
662
27.4M
   word3_muladd(&w1, &w0, &w2, x[6], y[8]);
663
27.4M
   word3_muladd(&w1, &w0, &w2, x[7], y[7]);
664
27.4M
   word3_muladd(&w1, &w0, &w2, x[8], y[6]);
665
27.4M
   z[14] = w2;
666
27.4M
   w2 = 0;
667
668
27.4M
   word3_muladd(&w2, &w1, &w0, x[7], y[8]);
669
27.4M
   word3_muladd(&w2, &w1, &w0, x[8], y[7]);
670
27.4M
   z[15] = w0;
671
27.4M
   w0 = 0;
672
673
27.4M
   word3_muladd(&w0, &w2, &w1, x[8], y[8]);
674
27.4M
   z[16] = w1;
675
27.4M
   z[17] = w2;
676
27.4M
}
677
678
/*
679
* Comba 16x16 Squaring
680
*/
681
1.76M
void bigint_comba_sqr16(word z[32], const word x[16]) {
682
1.76M
   word w2 = 0, w1 = 0, w0 = 0;
683
684
1.76M
   word3_muladd(&w2, &w1, &w0, x[0], x[0]);
685
1.76M
   z[0] = w0;
686
1.76M
   w0 = 0;
687
688
1.76M
   word3_muladd_2(&w0, &w2, &w1, x[0], x[1]);
689
1.76M
   z[1] = w1;
690
1.76M
   w1 = 0;
691
692
1.76M
   word3_muladd_2(&w1, &w0, &w2, x[0], x[2]);
693
1.76M
   word3_muladd(&w1, &w0, &w2, x[1], x[1]);
694
1.76M
   z[2] = w2;
695
1.76M
   w2 = 0;
696
697
1.76M
   word3_muladd_2(&w2, &w1, &w0, x[0], x[3]);
698
1.76M
   word3_muladd_2(&w2, &w1, &w0, x[1], x[2]);
699
1.76M
   z[3] = w0;
700
1.76M
   w0 = 0;
701
702
1.76M
   word3_muladd_2(&w0, &w2, &w1, x[0], x[4]);
703
1.76M
   word3_muladd_2(&w0, &w2, &w1, x[1], x[3]);
704
1.76M
   word3_muladd(&w0, &w2, &w1, x[2], x[2]);
705
1.76M
   z[4] = w1;
706
1.76M
   w1 = 0;
707
708
1.76M
   word3_muladd_2(&w1, &w0, &w2, x[0], x[5]);
709
1.76M
   word3_muladd_2(&w1, &w0, &w2, x[1], x[4]);
710
1.76M
   word3_muladd_2(&w1, &w0, &w2, x[2], x[3]);
711
1.76M
   z[5] = w2;
712
1.76M
   w2 = 0;
713
714
1.76M
   word3_muladd_2(&w2, &w1, &w0, x[0], x[6]);
715
1.76M
   word3_muladd_2(&w2, &w1, &w0, x[1], x[5]);
716
1.76M
   word3_muladd_2(&w2, &w1, &w0, x[2], x[4]);
717
1.76M
   word3_muladd(&w2, &w1, &w0, x[3], x[3]);
718
1.76M
   z[6] = w0;
719
1.76M
   w0 = 0;
720
721
1.76M
   word3_muladd_2(&w0, &w2, &w1, x[0], x[7]);
722
1.76M
   word3_muladd_2(&w0, &w2, &w1, x[1], x[6]);
723
1.76M
   word3_muladd_2(&w0, &w2, &w1, x[2], x[5]);
724
1.76M
   word3_muladd_2(&w0, &w2, &w1, x[3], x[4]);
725
1.76M
   z[7] = w1;
726
1.76M
   w1 = 0;
727
728
1.76M
   word3_muladd_2(&w1, &w0, &w2, x[0], x[8]);
729
1.76M
   word3_muladd_2(&w1, &w0, &w2, x[1], x[7]);
730
1.76M
   word3_muladd_2(&w1, &w0, &w2, x[2], x[6]);
731
1.76M
   word3_muladd_2(&w1, &w0, &w2, x[3], x[5]);
732
1.76M
   word3_muladd(&w1, &w0, &w2, x[4], x[4]);
733
1.76M
   z[8] = w2;
734
1.76M
   w2 = 0;
735
736
1.76M
   word3_muladd_2(&w2, &w1, &w0, x[0], x[9]);
737
1.76M
   word3_muladd_2(&w2, &w1, &w0, x[1], x[8]);
738
1.76M
   word3_muladd_2(&w2, &w1, &w0, x[2], x[7]);
739
1.76M
   word3_muladd_2(&w2, &w1, &w0, x[3], x[6]);
740
1.76M
   word3_muladd_2(&w2, &w1, &w0, x[4], x[5]);
741
1.76M
   z[9] = w0;
742
1.76M
   w0 = 0;
743
744
1.76M
   word3_muladd_2(&w0, &w2, &w1, x[0], x[10]);
745
1.76M
   word3_muladd_2(&w0, &w2, &w1, x[1], x[9]);
746
1.76M
   word3_muladd_2(&w0, &w2, &w1, x[2], x[8]);
747
1.76M
   word3_muladd_2(&w0, &w2, &w1, x[3], x[7]);
748
1.76M
   word3_muladd_2(&w0, &w2, &w1, x[4], x[6]);
749
1.76M
   word3_muladd(&w0, &w2, &w1, x[5], x[5]);
750
1.76M
   z[10] = w1;
751
1.76M
   w1 = 0;
752
753
1.76M
   word3_muladd_2(&w1, &w0, &w2, x[0], x[11]);
754
1.76M
   word3_muladd_2(&w1, &w0, &w2, x[1], x[10]);
755
1.76M
   word3_muladd_2(&w1, &w0, &w2, x[2], x[9]);
756
1.76M
   word3_muladd_2(&w1, &w0, &w2, x[3], x[8]);
757
1.76M
   word3_muladd_2(&w1, &w0, &w2, x[4], x[7]);
758
1.76M
   word3_muladd_2(&w1, &w0, &w2, x[5], x[6]);
759
1.76M
   z[11] = w2;
760
1.76M
   w2 = 0;
761
762
1.76M
   word3_muladd_2(&w2, &w1, &w0, x[0], x[12]);
763
1.76M
   word3_muladd_2(&w2, &w1, &w0, x[1], x[11]);
764
1.76M
   word3_muladd_2(&w2, &w1, &w0, x[2], x[10]);
765
1.76M
   word3_muladd_2(&w2, &w1, &w0, x[3], x[9]);
766
1.76M
   word3_muladd_2(&w2, &w1, &w0, x[4], x[8]);
767
1.76M
   word3_muladd_2(&w2, &w1, &w0, x[5], x[7]);
768
1.76M
   word3_muladd(&w2, &w1, &w0, x[6], x[6]);
769
1.76M
   z[12] = w0;
770
1.76M
   w0 = 0;
771
772
1.76M
   word3_muladd_2(&w0, &w2, &w1, x[0], x[13]);
773
1.76M
   word3_muladd_2(&w0, &w2, &w1, x[1], x[12]);
774
1.76M
   word3_muladd_2(&w0, &w2, &w1, x[2], x[11]);
775
1.76M
   word3_muladd_2(&w0, &w2, &w1, x[3], x[10]);
776
1.76M
   word3_muladd_2(&w0, &w2, &w1, x[4], x[9]);
777
1.76M
   word3_muladd_2(&w0, &w2, &w1, x[5], x[8]);
778
1.76M
   word3_muladd_2(&w0, &w2, &w1, x[6], x[7]);
779
1.76M
   z[13] = w1;
780
1.76M
   w1 = 0;
781
782
1.76M
   word3_muladd_2(&w1, &w0, &w2, x[0], x[14]);
783
1.76M
   word3_muladd_2(&w1, &w0, &w2, x[1], x[13]);
784
1.76M
   word3_muladd_2(&w1, &w0, &w2, x[2], x[12]);
785
1.76M
   word3_muladd_2(&w1, &w0, &w2, x[3], x[11]);
786
1.76M
   word3_muladd_2(&w1, &w0, &w2, x[4], x[10]);
787
1.76M
   word3_muladd_2(&w1, &w0, &w2, x[5], x[9]);
788
1.76M
   word3_muladd_2(&w1, &w0, &w2, x[6], x[8]);
789
1.76M
   word3_muladd(&w1, &w0, &w2, x[7], x[7]);
790
1.76M
   z[14] = w2;
791
1.76M
   w2 = 0;
792
793
1.76M
   word3_muladd_2(&w2, &w1, &w0, x[0], x[15]);
794
1.76M
   word3_muladd_2(&w2, &w1, &w0, x[1], x[14]);
795
1.76M
   word3_muladd_2(&w2, &w1, &w0, x[2], x[13]);
796
1.76M
   word3_muladd_2(&w2, &w1, &w0, x[3], x[12]);
797
1.76M
   word3_muladd_2(&w2, &w1, &w0, x[4], x[11]);
798
1.76M
   word3_muladd_2(&w2, &w1, &w0, x[5], x[10]);
799
1.76M
   word3_muladd_2(&w2, &w1, &w0, x[6], x[9]);
800
1.76M
   word3_muladd_2(&w2, &w1, &w0, x[7], x[8]);
801
1.76M
   z[15] = w0;
802
1.76M
   w0 = 0;
803
804
1.76M
   word3_muladd_2(&w0, &w2, &w1, x[1], x[15]);
805
1.76M
   word3_muladd_2(&w0, &w2, &w1, x[2], x[14]);
806
1.76M
   word3_muladd_2(&w0, &w2, &w1, x[3], x[13]);
807
1.76M
   word3_muladd_2(&w0, &w2, &w1, x[4], x[12]);
808
1.76M
   word3_muladd_2(&w0, &w2, &w1, x[5], x[11]);
809
1.76M
   word3_muladd_2(&w0, &w2, &w1, x[6], x[10]);
810
1.76M
   word3_muladd_2(&w0, &w2, &w1, x[7], x[9]);
811
1.76M
   word3_muladd(&w0, &w2, &w1, x[8], x[8]);
812
1.76M
   z[16] = w1;
813
1.76M
   w1 = 0;
814
815
1.76M
   word3_muladd_2(&w1, &w0, &w2, x[2], x[15]);
816
1.76M
   word3_muladd_2(&w1, &w0, &w2, x[3], x[14]);
817
1.76M
   word3_muladd_2(&w1, &w0, &w2, x[4], x[13]);
818
1.76M
   word3_muladd_2(&w1, &w0, &w2, x[5], x[12]);
819
1.76M
   word3_muladd_2(&w1, &w0, &w2, x[6], x[11]);
820
1.76M
   word3_muladd_2(&w1, &w0, &w2, x[7], x[10]);
821
1.76M
   word3_muladd_2(&w1, &w0, &w2, x[8], x[9]);
822
1.76M
   z[17] = w2;
823
1.76M
   w2 = 0;
824
825
1.76M
   word3_muladd_2(&w2, &w1, &w0, x[3], x[15]);
826
1.76M
   word3_muladd_2(&w2, &w1, &w0, x[4], x[14]);
827
1.76M
   word3_muladd_2(&w2, &w1, &w0, x[5], x[13]);
828
1.76M
   word3_muladd_2(&w2, &w1, &w0, x[6], x[12]);
829
1.76M
   word3_muladd_2(&w2, &w1, &w0, x[7], x[11]);
830
1.76M
   word3_muladd_2(&w2, &w1, &w0, x[8], x[10]);
831
1.76M
   word3_muladd(&w2, &w1, &w0, x[9], x[9]);
832
1.76M
   z[18] = w0;
833
1.76M
   w0 = 0;
834
835
1.76M
   word3_muladd_2(&w0, &w2, &w1, x[4], x[15]);
836
1.76M
   word3_muladd_2(&w0, &w2, &w1, x[5], x[14]);
837
1.76M
   word3_muladd_2(&w0, &w2, &w1, x[6], x[13]);
838
1.76M
   word3_muladd_2(&w0, &w2, &w1, x[7], x[12]);
839
1.76M
   word3_muladd_2(&w0, &w2, &w1, x[8], x[11]);
840
1.76M
   word3_muladd_2(&w0, &w2, &w1, x[9], x[10]);
841
1.76M
   z[19] = w1;
842
1.76M
   w1 = 0;
843
844
1.76M
   word3_muladd_2(&w1, &w0, &w2, x[5], x[15]);
845
1.76M
   word3_muladd_2(&w1, &w0, &w2, x[6], x[14]);
846
1.76M
   word3_muladd_2(&w1, &w0, &w2, x[7], x[13]);
847
1.76M
   word3_muladd_2(&w1, &w0, &w2, x[8], x[12]);
848
1.76M
   word3_muladd_2(&w1, &w0, &w2, x[9], x[11]);
849
1.76M
   word3_muladd(&w1, &w0, &w2, x[10], x[10]);
850
1.76M
   z[20] = w2;
851
1.76M
   w2 = 0;
852
853
1.76M
   word3_muladd_2(&w2, &w1, &w0, x[6], x[15]);
854
1.76M
   word3_muladd_2(&w2, &w1, &w0, x[7], x[14]);
855
1.76M
   word3_muladd_2(&w2, &w1, &w0, x[8], x[13]);
856
1.76M
   word3_muladd_2(&w2, &w1, &w0, x[9], x[12]);
857
1.76M
   word3_muladd_2(&w2, &w1, &w0, x[10], x[11]);
858
1.76M
   z[21] = w0;
859
1.76M
   w0 = 0;
860
861
1.76M
   word3_muladd_2(&w0, &w2, &w1, x[7], x[15]);
862
1.76M
   word3_muladd_2(&w0, &w2, &w1, x[8], x[14]);
863
1.76M
   word3_muladd_2(&w0, &w2, &w1, x[9], x[13]);
864
1.76M
   word3_muladd_2(&w0, &w2, &w1, x[10], x[12]);
865
1.76M
   word3_muladd(&w0, &w2, &w1, x[11], x[11]);
866
1.76M
   z[22] = w1;
867
1.76M
   w1 = 0;
868
869
1.76M
   word3_muladd_2(&w1, &w0, &w2, x[8], x[15]);
870
1.76M
   word3_muladd_2(&w1, &w0, &w2, x[9], x[14]);
871
1.76M
   word3_muladd_2(&w1, &w0, &w2, x[10], x[13]);
872
1.76M
   word3_muladd_2(&w1, &w0, &w2, x[11], x[12]);
873
1.76M
   z[23] = w2;
874
1.76M
   w2 = 0;
875
876
1.76M
   word3_muladd_2(&w2, &w1, &w0, x[9], x[15]);
877
1.76M
   word3_muladd_2(&w2, &w1, &w0, x[10], x[14]);
878
1.76M
   word3_muladd_2(&w2, &w1, &w0, x[11], x[13]);
879
1.76M
   word3_muladd(&w2, &w1, &w0, x[12], x[12]);
880
1.76M
   z[24] = w0;
881
1.76M
   w0 = 0;
882
883
1.76M
   word3_muladd_2(&w0, &w2, &w1, x[10], x[15]);
884
1.76M
   word3_muladd_2(&w0, &w2, &w1, x[11], x[14]);
885
1.76M
   word3_muladd_2(&w0, &w2, &w1, x[12], x[13]);
886
1.76M
   z[25] = w1;
887
1.76M
   w1 = 0;
888
889
1.76M
   word3_muladd_2(&w1, &w0, &w2, x[11], x[15]);
890
1.76M
   word3_muladd_2(&w1, &w0, &w2, x[12], x[14]);
891
1.76M
   word3_muladd(&w1, &w0, &w2, x[13], x[13]);
892
1.76M
   z[26] = w2;
893
1.76M
   w2 = 0;
894
895
1.76M
   word3_muladd_2(&w2, &w1, &w0, x[12], x[15]);
896
1.76M
   word3_muladd_2(&w2, &w1, &w0, x[13], x[14]);
897
1.76M
   z[27] = w0;
898
1.76M
   w0 = 0;
899
900
1.76M
   word3_muladd_2(&w0, &w2, &w1, x[13], x[15]);
901
1.76M
   word3_muladd(&w0, &w2, &w1, x[14], x[14]);
902
1.76M
   z[28] = w1;
903
1.76M
   w1 = 0;
904
905
1.76M
   word3_muladd_2(&w1, &w0, &w2, x[14], x[15]);
906
1.76M
   z[29] = w2;
907
1.76M
   w2 = 0;
908
909
1.76M
   word3_muladd(&w2, &w1, &w0, x[15], x[15]);
910
1.76M
   z[30] = w0;
911
1.76M
   z[31] = w1;
912
1.76M
}
913
914
/*
915
* Comba 16x16 Multiplication
916
*/
917
1.22M
void bigint_comba_mul16(word z[32], const word x[16], const word y[16]) {
918
1.22M
   word w2 = 0, w1 = 0, w0 = 0;
919
920
1.22M
   word3_muladd(&w2, &w1, &w0, x[0], y[0]);
921
1.22M
   z[0] = w0;
922
1.22M
   w0 = 0;
923
924
1.22M
   word3_muladd(&w0, &w2, &w1, x[0], y[1]);
925
1.22M
   word3_muladd(&w0, &w2, &w1, x[1], y[0]);
926
1.22M
   z[1] = w1;
927
1.22M
   w1 = 0;
928
929
1.22M
   word3_muladd(&w1, &w0, &w2, x[0], y[2]);
930
1.22M
   word3_muladd(&w1, &w0, &w2, x[1], y[1]);
931
1.22M
   word3_muladd(&w1, &w0, &w2, x[2], y[0]);
932
1.22M
   z[2] = w2;
933
1.22M
   w2 = 0;
934
935
1.22M
   word3_muladd(&w2, &w1, &w0, x[0], y[3]);
936
1.22M
   word3_muladd(&w2, &w1, &w0, x[1], y[2]);
937
1.22M
   word3_muladd(&w2, &w1, &w0, x[2], y[1]);
938
1.22M
   word3_muladd(&w2, &w1, &w0, x[3], y[0]);
939
1.22M
   z[3] = w0;
940
1.22M
   w0 = 0;
941
942
1.22M
   word3_muladd(&w0, &w2, &w1, x[0], y[4]);
943
1.22M
   word3_muladd(&w0, &w2, &w1, x[1], y[3]);
944
1.22M
   word3_muladd(&w0, &w2, &w1, x[2], y[2]);
945
1.22M
   word3_muladd(&w0, &w2, &w1, x[3], y[1]);
946
1.22M
   word3_muladd(&w0, &w2, &w1, x[4], y[0]);
947
1.22M
   z[4] = w1;
948
1.22M
   w1 = 0;
949
950
1.22M
   word3_muladd(&w1, &w0, &w2, x[0], y[5]);
951
1.22M
   word3_muladd(&w1, &w0, &w2, x[1], y[4]);
952
1.22M
   word3_muladd(&w1, &w0, &w2, x[2], y[3]);
953
1.22M
   word3_muladd(&w1, &w0, &w2, x[3], y[2]);
954
1.22M
   word3_muladd(&w1, &w0, &w2, x[4], y[1]);
955
1.22M
   word3_muladd(&w1, &w0, &w2, x[5], y[0]);
956
1.22M
   z[5] = w2;
957
1.22M
   w2 = 0;
958
959
1.22M
   word3_muladd(&w2, &w1, &w0, x[0], y[6]);
960
1.22M
   word3_muladd(&w2, &w1, &w0, x[1], y[5]);
961
1.22M
   word3_muladd(&w2, &w1, &w0, x[2], y[4]);
962
1.22M
   word3_muladd(&w2, &w1, &w0, x[3], y[3]);
963
1.22M
   word3_muladd(&w2, &w1, &w0, x[4], y[2]);
964
1.22M
   word3_muladd(&w2, &w1, &w0, x[5], y[1]);
965
1.22M
   word3_muladd(&w2, &w1, &w0, x[6], y[0]);
966
1.22M
   z[6] = w0;
967
1.22M
   w0 = 0;
968
969
1.22M
   word3_muladd(&w0, &w2, &w1, x[0], y[7]);
970
1.22M
   word3_muladd(&w0, &w2, &w1, x[1], y[6]);
971
1.22M
   word3_muladd(&w0, &w2, &w1, x[2], y[5]);
972
1.22M
   word3_muladd(&w0, &w2, &w1, x[3], y[4]);
973
1.22M
   word3_muladd(&w0, &w2, &w1, x[4], y[3]);
974
1.22M
   word3_muladd(&w0, &w2, &w1, x[5], y[2]);
975
1.22M
   word3_muladd(&w0, &w2, &w1, x[6], y[1]);
976
1.22M
   word3_muladd(&w0, &w2, &w1, x[7], y[0]);
977
1.22M
   z[7] = w1;
978
1.22M
   w1 = 0;
979
980
1.22M
   word3_muladd(&w1, &w0, &w2, x[0], y[8]);
981
1.22M
   word3_muladd(&w1, &w0, &w2, x[1], y[7]);
982
1.22M
   word3_muladd(&w1, &w0, &w2, x[2], y[6]);
983
1.22M
   word3_muladd(&w1, &w0, &w2, x[3], y[5]);
984
1.22M
   word3_muladd(&w1, &w0, &w2, x[4], y[4]);
985
1.22M
   word3_muladd(&w1, &w0, &w2, x[5], y[3]);
986
1.22M
   word3_muladd(&w1, &w0, &w2, x[6], y[2]);
987
1.22M
   word3_muladd(&w1, &w0, &w2, x[7], y[1]);
988
1.22M
   word3_muladd(&w1, &w0, &w2, x[8], y[0]);
989
1.22M
   z[8] = w2;
990
1.22M
   w2 = 0;
991
992
1.22M
   word3_muladd(&w2, &w1, &w0, x[0], y[9]);
993
1.22M
   word3_muladd(&w2, &w1, &w0, x[1], y[8]);
994
1.22M
   word3_muladd(&w2, &w1, &w0, x[2], y[7]);
995
1.22M
   word3_muladd(&w2, &w1, &w0, x[3], y[6]);
996
1.22M
   word3_muladd(&w2, &w1, &w0, x[4], y[5]);
997
1.22M
   word3_muladd(&w2, &w1, &w0, x[5], y[4]);
998
1.22M
   word3_muladd(&w2, &w1, &w0, x[6], y[3]);
999
1.22M
   word3_muladd(&w2, &w1, &w0, x[7], y[2]);
1000
1.22M
   word3_muladd(&w2, &w1, &w0, x[8], y[1]);
1001
1.22M
   word3_muladd(&w2, &w1, &w0, x[9], y[0]);
1002
1.22M
   z[9] = w0;
1003
1.22M
   w0 = 0;
1004
1005
1.22M
   word3_muladd(&w0, &w2, &w1, x[0], y[10]);
1006
1.22M
   word3_muladd(&w0, &w2, &w1, x[1], y[9]);
1007
1.22M
   word3_muladd(&w0, &w2, &w1, x[2], y[8]);
1008
1.22M
   word3_muladd(&w0, &w2, &w1, x[3], y[7]);
1009
1.22M
   word3_muladd(&w0, &w2, &w1, x[4], y[6]);
1010
1.22M
   word3_muladd(&w0, &w2, &w1, x[5], y[5]);
1011
1.22M
   word3_muladd(&w0, &w2, &w1, x[6], y[4]);
1012
1.22M
   word3_muladd(&w0, &w2, &w1, x[7], y[3]);
1013
1.22M
   word3_muladd(&w0, &w2, &w1, x[8], y[2]);
1014
1.22M
   word3_muladd(&w0, &w2, &w1, x[9], y[1]);
1015
1.22M
   word3_muladd(&w0, &w2, &w1, x[10], y[0]);
1016
1.22M
   z[10] = w1;
1017
1.22M
   w1 = 0;
1018
1019
1.22M
   word3_muladd(&w1, &w0, &w2, x[0], y[11]);
1020
1.22M
   word3_muladd(&w1, &w0, &w2, x[1], y[10]);
1021
1.22M
   word3_muladd(&w1, &w0, &w2, x[2], y[9]);
1022
1.22M
   word3_muladd(&w1, &w0, &w2, x[3], y[8]);
1023
1.22M
   word3_muladd(&w1, &w0, &w2, x[4], y[7]);
1024
1.22M
   word3_muladd(&w1, &w0, &w2, x[5], y[6]);
1025
1.22M
   word3_muladd(&w1, &w0, &w2, x[6], y[5]);
1026
1.22M
   word3_muladd(&w1, &w0, &w2, x[7], y[4]);
1027
1.22M
   word3_muladd(&w1, &w0, &w2, x[8], y[3]);
1028
1.22M
   word3_muladd(&w1, &w0, &w2, x[9], y[2]);
1029
1.22M
   word3_muladd(&w1, &w0, &w2, x[10], y[1]);
1030
1.22M
   word3_muladd(&w1, &w0, &w2, x[11], y[0]);
1031
1.22M
   z[11] = w2;
1032
1.22M
   w2 = 0;
1033
1034
1.22M
   word3_muladd(&w2, &w1, &w0, x[0], y[12]);
1035
1.22M
   word3_muladd(&w2, &w1, &w0, x[1], y[11]);
1036
1.22M
   word3_muladd(&w2, &w1, &w0, x[2], y[10]);
1037
1.22M
   word3_muladd(&w2, &w1, &w0, x[3], y[9]);
1038
1.22M
   word3_muladd(&w2, &w1, &w0, x[4], y[8]);
1039
1.22M
   word3_muladd(&w2, &w1, &w0, x[5], y[7]);
1040
1.22M
   word3_muladd(&w2, &w1, &w0, x[6], y[6]);
1041
1.22M
   word3_muladd(&w2, &w1, &w0, x[7], y[5]);
1042
1.22M
   word3_muladd(&w2, &w1, &w0, x[8], y[4]);
1043
1.22M
   word3_muladd(&w2, &w1, &w0, x[9], y[3]);
1044
1.22M
   word3_muladd(&w2, &w1, &w0, x[10], y[2]);
1045
1.22M
   word3_muladd(&w2, &w1, &w0, x[11], y[1]);
1046
1.22M
   word3_muladd(&w2, &w1, &w0, x[12], y[0]);
1047
1.22M
   z[12] = w0;
1048
1.22M
   w0 = 0;
1049
1050
1.22M
   word3_muladd(&w0, &w2, &w1, x[0], y[13]);
1051
1.22M
   word3_muladd(&w0, &w2, &w1, x[1], y[12]);
1052
1.22M
   word3_muladd(&w0, &w2, &w1, x[2], y[11]);
1053
1.22M
   word3_muladd(&w0, &w2, &w1, x[3], y[10]);
1054
1.22M
   word3_muladd(&w0, &w2, &w1, x[4], y[9]);
1055
1.22M
   word3_muladd(&w0, &w2, &w1, x[5], y[8]);
1056
1.22M
   word3_muladd(&w0, &w2, &w1, x[6], y[7]);
1057
1.22M
   word3_muladd(&w0, &w2, &w1, x[7], y[6]);
1058
1.22M
   word3_muladd(&w0, &w2, &w1, x[8], y[5]);
1059
1.22M
   word3_muladd(&w0, &w2, &w1, x[9], y[4]);
1060
1.22M
   word3_muladd(&w0, &w2, &w1, x[10], y[3]);
1061
1.22M
   word3_muladd(&w0, &w2, &w1, x[11], y[2]);
1062
1.22M
   word3_muladd(&w0, &w2, &w1, x[12], y[1]);
1063
1.22M
   word3_muladd(&w0, &w2, &w1, x[13], y[0]);
1064
1.22M
   z[13] = w1;
1065
1.22M
   w1 = 0;
1066
1067
1.22M
   word3_muladd(&w1, &w0, &w2, x[0], y[14]);
1068
1.22M
   word3_muladd(&w1, &w0, &w2, x[1], y[13]);
1069
1.22M
   word3_muladd(&w1, &w0, &w2, x[2], y[12]);
1070
1.22M
   word3_muladd(&w1, &w0, &w2, x[3], y[11]);
1071
1.22M
   word3_muladd(&w1, &w0, &w2, x[4], y[10]);
1072
1.22M
   word3_muladd(&w1, &w0, &w2, x[5], y[9]);
1073
1.22M
   word3_muladd(&w1, &w0, &w2, x[6], y[8]);
1074
1.22M
   word3_muladd(&w1, &w0, &w2, x[7], y[7]);
1075
1.22M
   word3_muladd(&w1, &w0, &w2, x[8], y[6]);
1076
1.22M
   word3_muladd(&w1, &w0, &w2, x[9], y[5]);
1077
1.22M
   word3_muladd(&w1, &w0, &w2, x[10], y[4]);
1078
1.22M
   word3_muladd(&w1, &w0, &w2, x[11], y[3]);
1079
1.22M
   word3_muladd(&w1, &w0, &w2, x[12], y[2]);
1080
1.22M
   word3_muladd(&w1, &w0, &w2, x[13], y[1]);
1081
1.22M
   word3_muladd(&w1, &w0, &w2, x[14], y[0]);
1082
1.22M
   z[14] = w2;
1083
1.22M
   w2 = 0;
1084
1085
1.22M
   word3_muladd(&w2, &w1, &w0, x[0], y[15]);
1086
1.22M
   word3_muladd(&w2, &w1, &w0, x[1], y[14]);
1087
1.22M
   word3_muladd(&w2, &w1, &w0, x[2], y[13]);
1088
1.22M
   word3_muladd(&w2, &w1, &w0, x[3], y[12]);
1089
1.22M
   word3_muladd(&w2, &w1, &w0, x[4], y[11]);
1090
1.22M
   word3_muladd(&w2, &w1, &w0, x[5], y[10]);
1091
1.22M
   word3_muladd(&w2, &w1, &w0, x[6], y[9]);
1092
1.22M
   word3_muladd(&w2, &w1, &w0, x[7], y[8]);
1093
1.22M
   word3_muladd(&w2, &w1, &w0, x[8], y[7]);
1094
1.22M
   word3_muladd(&w2, &w1, &w0, x[9], y[6]);
1095
1.22M
   word3_muladd(&w2, &w1, &w0, x[10], y[5]);
1096
1.22M
   word3_muladd(&w2, &w1, &w0, x[11], y[4]);
1097
1.22M
   word3_muladd(&w2, &w1, &w0, x[12], y[3]);
1098
1.22M
   word3_muladd(&w2, &w1, &w0, x[13], y[2]);
1099
1.22M
   word3_muladd(&w2, &w1, &w0, x[14], y[1]);
1100
1.22M
   word3_muladd(&w2, &w1, &w0, x[15], y[0]);
1101
1.22M
   z[15] = w0;
1102
1.22M
   w0 = 0;
1103
1104
1.22M
   word3_muladd(&w0, &w2, &w1, x[1], y[15]);
1105
1.22M
   word3_muladd(&w0, &w2, &w1, x[2], y[14]);
1106
1.22M
   word3_muladd(&w0, &w2, &w1, x[3], y[13]);
1107
1.22M
   word3_muladd(&w0, &w2, &w1, x[4], y[12]);
1108
1.22M
   word3_muladd(&w0, &w2, &w1, x[5], y[11]);
1109
1.22M
   word3_muladd(&w0, &w2, &w1, x[6], y[10]);
1110
1.22M
   word3_muladd(&w0, &w2, &w1, x[7], y[9]);
1111
1.22M
   word3_muladd(&w0, &w2, &w1, x[8], y[8]);
1112
1.22M
   word3_muladd(&w0, &w2, &w1, x[9], y[7]);
1113
1.22M
   word3_muladd(&w0, &w2, &w1, x[10], y[6]);
1114
1.22M
   word3_muladd(&w0, &w2, &w1, x[11], y[5]);
1115
1.22M
   word3_muladd(&w0, &w2, &w1, x[12], y[4]);
1116
1.22M
   word3_muladd(&w0, &w2, &w1, x[13], y[3]);
1117
1.22M
   word3_muladd(&w0, &w2, &w1, x[14], y[2]);
1118
1.22M
   word3_muladd(&w0, &w2, &w1, x[15], y[1]);
1119
1.22M
   z[16] = w1;
1120
1.22M
   w1 = 0;
1121
1122
1.22M
   word3_muladd(&w1, &w0, &w2, x[2], y[15]);
1123
1.22M
   word3_muladd(&w1, &w0, &w2, x[3], y[14]);
1124
1.22M
   word3_muladd(&w1, &w0, &w2, x[4], y[13]);
1125
1.22M
   word3_muladd(&w1, &w0, &w2, x[5], y[12]);
1126
1.22M
   word3_muladd(&w1, &w0, &w2, x[6], y[11]);
1127
1.22M
   word3_muladd(&w1, &w0, &w2, x[7], y[10]);
1128
1.22M
   word3_muladd(&w1, &w0, &w2, x[8], y[9]);
1129
1.22M
   word3_muladd(&w1, &w0, &w2, x[9], y[8]);
1130
1.22M
   word3_muladd(&w1, &w0, &w2, x[10], y[7]);
1131
1.22M
   word3_muladd(&w1, &w0, &w2, x[11], y[6]);
1132
1.22M
   word3_muladd(&w1, &w0, &w2, x[12], y[5]);
1133
1.22M
   word3_muladd(&w1, &w0, &w2, x[13], y[4]);
1134
1.22M
   word3_muladd(&w1, &w0, &w2, x[14], y[3]);
1135
1.22M
   word3_muladd(&w1, &w0, &w2, x[15], y[2]);
1136
1.22M
   z[17] = w2;
1137
1.22M
   w2 = 0;
1138
1139
1.22M
   word3_muladd(&w2, &w1, &w0, x[3], y[15]);
1140
1.22M
   word3_muladd(&w2, &w1, &w0, x[4], y[14]);
1141
1.22M
   word3_muladd(&w2, &w1, &w0, x[5], y[13]);
1142
1.22M
   word3_muladd(&w2, &w1, &w0, x[6], y[12]);
1143
1.22M
   word3_muladd(&w2, &w1, &w0, x[7], y[11]);
1144
1.22M
   word3_muladd(&w2, &w1, &w0, x[8], y[10]);
1145
1.22M
   word3_muladd(&w2, &w1, &w0, x[9], y[9]);
1146
1.22M
   word3_muladd(&w2, &w1, &w0, x[10], y[8]);
1147
1.22M
   word3_muladd(&w2, &w1, &w0, x[11], y[7]);
1148
1.22M
   word3_muladd(&w2, &w1, &w0, x[12], y[6]);
1149
1.22M
   word3_muladd(&w2, &w1, &w0, x[13], y[5]);
1150
1.22M
   word3_muladd(&w2, &w1, &w0, x[14], y[4]);
1151
1.22M
   word3_muladd(&w2, &w1, &w0, x[15], y[3]);
1152
1.22M
   z[18] = w0;
1153
1.22M
   w0 = 0;
1154
1155
1.22M
   word3_muladd(&w0, &w2, &w1, x[4], y[15]);
1156
1.22M
   word3_muladd(&w0, &w2, &w1, x[5], y[14]);
1157
1.22M
   word3_muladd(&w0, &w2, &w1, x[6], y[13]);
1158
1.22M
   word3_muladd(&w0, &w2, &w1, x[7], y[12]);
1159
1.22M
   word3_muladd(&w0, &w2, &w1, x[8], y[11]);
1160
1.22M
   word3_muladd(&w0, &w2, &w1, x[9], y[10]);
1161
1.22M
   word3_muladd(&w0, &w2, &w1, x[10], y[9]);
1162
1.22M
   word3_muladd(&w0, &w2, &w1, x[11], y[8]);
1163
1.22M
   word3_muladd(&w0, &w2, &w1, x[12], y[7]);
1164
1.22M
   word3_muladd(&w0, &w2, &w1, x[13], y[6]);
1165
1.22M
   word3_muladd(&w0, &w2, &w1, x[14], y[5]);
1166
1.22M
   word3_muladd(&w0, &w2, &w1, x[15], y[4]);
1167
1.22M
   z[19] = w1;
1168
1.22M
   w1 = 0;
1169
1170
1.22M
   word3_muladd(&w1, &w0, &w2, x[5], y[15]);
1171
1.22M
   word3_muladd(&w1, &w0, &w2, x[6], y[14]);
1172
1.22M
   word3_muladd(&w1, &w0, &w2, x[7], y[13]);
1173
1.22M
   word3_muladd(&w1, &w0, &w2, x[8], y[12]);
1174
1.22M
   word3_muladd(&w1, &w0, &w2, x[9], y[11]);
1175
1.22M
   word3_muladd(&w1, &w0, &w2, x[10], y[10]);
1176
1.22M
   word3_muladd(&w1, &w0, &w2, x[11], y[9]);
1177
1.22M
   word3_muladd(&w1, &w0, &w2, x[12], y[8]);
1178
1.22M
   word3_muladd(&w1, &w0, &w2, x[13], y[7]);
1179
1.22M
   word3_muladd(&w1, &w0, &w2, x[14], y[6]);
1180
1.22M
   word3_muladd(&w1, &w0, &w2, x[15], y[5]);
1181
1.22M
   z[20] = w2;
1182
1.22M
   w2 = 0;
1183
1184
1.22M
   word3_muladd(&w2, &w1, &w0, x[6], y[15]);
1185
1.22M
   word3_muladd(&w2, &w1, &w0, x[7], y[14]);
1186
1.22M
   word3_muladd(&w2, &w1, &w0, x[8], y[13]);
1187
1.22M
   word3_muladd(&w2, &w1, &w0, x[9], y[12]);
1188
1.22M
   word3_muladd(&w2, &w1, &w0, x[10], y[11]);
1189
1.22M
   word3_muladd(&w2, &w1, &w0, x[11], y[10]);
1190
1.22M
   word3_muladd(&w2, &w1, &w0, x[12], y[9]);
1191
1.22M
   word3_muladd(&w2, &w1, &w0, x[13], y[8]);
1192
1.22M
   word3_muladd(&w2, &w1, &w0, x[14], y[7]);
1193
1.22M
   word3_muladd(&w2, &w1, &w0, x[15], y[6]);
1194
1.22M
   z[21] = w0;
1195
1.22M
   w0 = 0;
1196
1197
1.22M
   word3_muladd(&w0, &w2, &w1, x[7], y[15]);
1198
1.22M
   word3_muladd(&w0, &w2, &w1, x[8], y[14]);
1199
1.22M
   word3_muladd(&w0, &w2, &w1, x[9], y[13]);
1200
1.22M
   word3_muladd(&w0, &w2, &w1, x[10], y[12]);
1201
1.22M
   word3_muladd(&w0, &w2, &w1, x[11], y[11]);
1202
1.22M
   word3_muladd(&w0, &w2, &w1, x[12], y[10]);
1203
1.22M
   word3_muladd(&w0, &w2, &w1, x[13], y[9]);
1204
1.22M
   word3_muladd(&w0, &w2, &w1, x[14], y[8]);
1205
1.22M
   word3_muladd(&w0, &w2, &w1, x[15], y[7]);
1206
1.22M
   z[22] = w1;
1207
1.22M
   w1 = 0;
1208
1209
1.22M
   word3_muladd(&w1, &w0, &w2, x[8], y[15]);
1210
1.22M
   word3_muladd(&w1, &w0, &w2, x[9], y[14]);
1211
1.22M
   word3_muladd(&w1, &w0, &w2, x[10], y[13]);
1212
1.22M
   word3_muladd(&w1, &w0, &w2, x[11], y[12]);
1213
1.22M
   word3_muladd(&w1, &w0, &w2, x[12], y[11]);
1214
1.22M
   word3_muladd(&w1, &w0, &w2, x[13], y[10]);
1215
1.22M
   word3_muladd(&w1, &w0, &w2, x[14], y[9]);
1216
1.22M
   word3_muladd(&w1, &w0, &w2, x[15], y[8]);
1217
1.22M
   z[23] = w2;
1218
1.22M
   w2 = 0;
1219
1220
1.22M
   word3_muladd(&w2, &w1, &w0, x[9], y[15]);
1221
1.22M
   word3_muladd(&w2, &w1, &w0, x[10], y[14]);
1222
1.22M
   word3_muladd(&w2, &w1, &w0, x[11], y[13]);
1223
1.22M
   word3_muladd(&w2, &w1, &w0, x[12], y[12]);
1224
1.22M
   word3_muladd(&w2, &w1, &w0, x[13], y[11]);
1225
1.22M
   word3_muladd(&w2, &w1, &w0, x[14], y[10]);
1226
1.22M
   word3_muladd(&w2, &w1, &w0, x[15], y[9]);
1227
1.22M
   z[24] = w0;
1228
1.22M
   w0 = 0;
1229
1230
1.22M
   word3_muladd(&w0, &w2, &w1, x[10], y[15]);
1231
1.22M
   word3_muladd(&w0, &w2, &w1, x[11], y[14]);
1232
1.22M
   word3_muladd(&w0, &w2, &w1, x[12], y[13]);
1233
1.22M
   word3_muladd(&w0, &w2, &w1, x[13], y[12]);
1234
1.22M
   word3_muladd(&w0, &w2, &w1, x[14], y[11]);
1235
1.22M
   word3_muladd(&w0, &w2, &w1, x[15], y[10]);
1236
1.22M
   z[25] = w1;
1237
1.22M
   w1 = 0;
1238
1239
1.22M
   word3_muladd(&w1, &w0, &w2, x[11], y[15]);
1240
1.22M
   word3_muladd(&w1, &w0, &w2, x[12], y[14]);
1241
1.22M
   word3_muladd(&w1, &w0, &w2, x[13], y[13]);
1242
1.22M
   word3_muladd(&w1, &w0, &w2, x[14], y[12]);
1243
1.22M
   word3_muladd(&w1, &w0, &w2, x[15], y[11]);
1244
1.22M
   z[26] = w2;
1245
1.22M
   w2 = 0;
1246
1247
1.22M
   word3_muladd(&w2, &w1, &w0, x[12], y[15]);
1248
1.22M
   word3_muladd(&w2, &w1, &w0, x[13], y[14]);
1249
1.22M
   word3_muladd(&w2, &w1, &w0, x[14], y[13]);
1250
1.22M
   word3_muladd(&w2, &w1, &w0, x[15], y[12]);
1251
1.22M
   z[27] = w0;
1252
1.22M
   w0 = 0;
1253
1254
1.22M
   word3_muladd(&w0, &w2, &w1, x[13], y[15]);
1255
1.22M
   word3_muladd(&w0, &w2, &w1, x[14], y[14]);
1256
1.22M
   word3_muladd(&w0, &w2, &w1, x[15], y[13]);
1257
1.22M
   z[28] = w1;
1258
1.22M
   w1 = 0;
1259
1260
1.22M
   word3_muladd(&w1, &w0, &w2, x[14], y[15]);
1261
1.22M
   word3_muladd(&w1, &w0, &w2, x[15], y[14]);
1262
1.22M
   z[29] = w2;
1263
1.22M
   w2 = 0;
1264
1265
1.22M
   word3_muladd(&w2, &w1, &w0, x[15], y[15]);
1266
1.22M
   z[30] = w0;
1267
1.22M
   z[31] = w1;
1268
1.22M
}
1269
1270
/*
1271
* Comba 24x24 Squaring
1272
*/
1273
180k
void bigint_comba_sqr24(word z[48], const word x[24]) {
1274
180k
   word w2 = 0, w1 = 0, w0 = 0;
1275
1276
180k
   word3_muladd(&w2, &w1, &w0, x[0], x[0]);
1277
180k
   z[0] = w0;
1278
180k
   w0 = 0;
1279
1280
180k
   word3_muladd_2(&w0, &w2, &w1, x[0], x[1]);
1281
180k
   z[1] = w1;
1282
180k
   w1 = 0;
1283
1284
180k
   word3_muladd_2(&w1, &w0, &w2, x[0], x[2]);
1285
180k
   word3_muladd(&w1, &w0, &w2, x[1], x[1]);
1286
180k
   z[2] = w2;
1287
180k
   w2 = 0;
1288
1289
180k
   word3_muladd_2(&w2, &w1, &w0, x[0], x[3]);
1290
180k
   word3_muladd_2(&w2, &w1, &w0, x[1], x[2]);
1291
180k
   z[3] = w0;
1292
180k
   w0 = 0;
1293
1294
180k
   word3_muladd_2(&w0, &w2, &w1, x[0], x[4]);
1295
180k
   word3_muladd_2(&w0, &w2, &w1, x[1], x[3]);
1296
180k
   word3_muladd(&w0, &w2, &w1, x[2], x[2]);
1297
180k
   z[4] = w1;
1298
180k
   w1 = 0;
1299
1300
180k
   word3_muladd_2(&w1, &w0, &w2, x[0], x[5]);
1301
180k
   word3_muladd_2(&w1, &w0, &w2, x[1], x[4]);
1302
180k
   word3_muladd_2(&w1, &w0, &w2, x[2], x[3]);
1303
180k
   z[5] = w2;
1304
180k
   w2 = 0;
1305
1306
180k
   word3_muladd_2(&w2, &w1, &w0, x[0], x[6]);
1307
180k
   word3_muladd_2(&w2, &w1, &w0, x[1], x[5]);
1308
180k
   word3_muladd_2(&w2, &w1, &w0, x[2], x[4]);
1309
180k
   word3_muladd(&w2, &w1, &w0, x[3], x[3]);
1310
180k
   z[6] = w0;
1311
180k
   w0 = 0;
1312
1313
180k
   word3_muladd_2(&w0, &w2, &w1, x[0], x[7]);
1314
180k
   word3_muladd_2(&w0, &w2, &w1, x[1], x[6]);
1315
180k
   word3_muladd_2(&w0, &w2, &w1, x[2], x[5]);
1316
180k
   word3_muladd_2(&w0, &w2, &w1, x[3], x[4]);
1317
180k
   z[7] = w1;
1318
180k
   w1 = 0;
1319
1320
180k
   word3_muladd_2(&w1, &w0, &w2, x[0], x[8]);
1321
180k
   word3_muladd_2(&w1, &w0, &w2, x[1], x[7]);
1322
180k
   word3_muladd_2(&w1, &w0, &w2, x[2], x[6]);
1323
180k
   word3_muladd_2(&w1, &w0, &w2, x[3], x[5]);
1324
180k
   word3_muladd(&w1, &w0, &w2, x[4], x[4]);
1325
180k
   z[8] = w2;
1326
180k
   w2 = 0;
1327
1328
180k
   word3_muladd_2(&w2, &w1, &w0, x[0], x[9]);
1329
180k
   word3_muladd_2(&w2, &w1, &w0, x[1], x[8]);
1330
180k
   word3_muladd_2(&w2, &w1, &w0, x[2], x[7]);
1331
180k
   word3_muladd_2(&w2, &w1, &w0, x[3], x[6]);
1332
180k
   word3_muladd_2(&w2, &w1, &w0, x[4], x[5]);
1333
180k
   z[9] = w0;
1334
180k
   w0 = 0;
1335
1336
180k
   word3_muladd_2(&w0, &w2, &w1, x[0], x[10]);
1337
180k
   word3_muladd_2(&w0, &w2, &w1, x[1], x[9]);
1338
180k
   word3_muladd_2(&w0, &w2, &w1, x[2], x[8]);
1339
180k
   word3_muladd_2(&w0, &w2, &w1, x[3], x[7]);
1340
180k
   word3_muladd_2(&w0, &w2, &w1, x[4], x[6]);
1341
180k
   word3_muladd(&w0, &w2, &w1, x[5], x[5]);
1342
180k
   z[10] = w1;
1343
180k
   w1 = 0;
1344
1345
180k
   word3_muladd_2(&w1, &w0, &w2, x[0], x[11]);
1346
180k
   word3_muladd_2(&w1, &w0, &w2, x[1], x[10]);
1347
180k
   word3_muladd_2(&w1, &w0, &w2, x[2], x[9]);
1348
180k
   word3_muladd_2(&w1, &w0, &w2, x[3], x[8]);
1349
180k
   word3_muladd_2(&w1, &w0, &w2, x[4], x[7]);
1350
180k
   word3_muladd_2(&w1, &w0, &w2, x[5], x[6]);
1351
180k
   z[11] = w2;
1352
180k
   w2 = 0;
1353
1354
180k
   word3_muladd_2(&w2, &w1, &w0, x[0], x[12]);
1355
180k
   word3_muladd_2(&w2, &w1, &w0, x[1], x[11]);
1356
180k
   word3_muladd_2(&w2, &w1, &w0, x[2], x[10]);
1357
180k
   word3_muladd_2(&w2, &w1, &w0, x[3], x[9]);
1358
180k
   word3_muladd_2(&w2, &w1, &w0, x[4], x[8]);
1359
180k
   word3_muladd_2(&w2, &w1, &w0, x[5], x[7]);
1360
180k
   word3_muladd(&w2, &w1, &w0, x[6], x[6]);
1361
180k
   z[12] = w0;
1362
180k
   w0 = 0;
1363
1364
180k
   word3_muladd_2(&w0, &w2, &w1, x[0], x[13]);
1365
180k
   word3_muladd_2(&w0, &w2, &w1, x[1], x[12]);
1366
180k
   word3_muladd_2(&w0, &w2, &w1, x[2], x[11]);
1367
180k
   word3_muladd_2(&w0, &w2, &w1, x[3], x[10]);
1368
180k
   word3_muladd_2(&w0, &w2, &w1, x[4], x[9]);
1369
180k
   word3_muladd_2(&w0, &w2, &w1, x[5], x[8]);
1370
180k
   word3_muladd_2(&w0, &w2, &w1, x[6], x[7]);
1371
180k
   z[13] = w1;
1372
180k
   w1 = 0;
1373
1374
180k
   word3_muladd_2(&w1, &w0, &w2, x[0], x[14]);
1375
180k
   word3_muladd_2(&w1, &w0, &w2, x[1], x[13]);
1376
180k
   word3_muladd_2(&w1, &w0, &w2, x[2], x[12]);
1377
180k
   word3_muladd_2(&w1, &w0, &w2, x[3], x[11]);
1378
180k
   word3_muladd_2(&w1, &w0, &w2, x[4], x[10]);
1379
180k
   word3_muladd_2(&w1, &w0, &w2, x[5], x[9]);
1380
180k
   word3_muladd_2(&w1, &w0, &w2, x[6], x[8]);
1381
180k
   word3_muladd(&w1, &w0, &w2, x[7], x[7]);
1382
180k
   z[14] = w2;
1383
180k
   w2 = 0;
1384
1385
180k
   word3_muladd_2(&w2, &w1, &w0, x[0], x[15]);
1386
180k
   word3_muladd_2(&w2, &w1, &w0, x[1], x[14]);
1387
180k
   word3_muladd_2(&w2, &w1, &w0, x[2], x[13]);
1388
180k
   word3_muladd_2(&w2, &w1, &w0, x[3], x[12]);
1389
180k
   word3_muladd_2(&w2, &w1, &w0, x[4], x[11]);
1390
180k
   word3_muladd_2(&w2, &w1, &w0, x[5], x[10]);
1391
180k
   word3_muladd_2(&w2, &w1, &w0, x[6], x[9]);
1392
180k
   word3_muladd_2(&w2, &w1, &w0, x[7], x[8]);
1393
180k
   z[15] = w0;
1394
180k
   w0 = 0;
1395
1396
180k
   word3_muladd_2(&w0, &w2, &w1, x[0], x[16]);
1397
180k
   word3_muladd_2(&w0, &w2, &w1, x[1], x[15]);
1398
180k
   word3_muladd_2(&w0, &w2, &w1, x[2], x[14]);
1399
180k
   word3_muladd_2(&w0, &w2, &w1, x[3], x[13]);
1400
180k
   word3_muladd_2(&w0, &w2, &w1, x[4], x[12]);
1401
180k
   word3_muladd_2(&w0, &w2, &w1, x[5], x[11]);
1402
180k
   word3_muladd_2(&w0, &w2, &w1, x[6], x[10]);
1403
180k
   word3_muladd_2(&w0, &w2, &w1, x[7], x[9]);
1404
180k
   word3_muladd(&w0, &w2, &w1, x[8], x[8]);
1405
180k
   z[16] = w1;
1406
180k
   w1 = 0;
1407
1408
180k
   word3_muladd_2(&w1, &w0, &w2, x[0], x[17]);
1409
180k
   word3_muladd_2(&w1, &w0, &w2, x[1], x[16]);
1410
180k
   word3_muladd_2(&w1, &w0, &w2, x[2], x[15]);
1411
180k
   word3_muladd_2(&w1, &w0, &w2, x[3], x[14]);
1412
180k
   word3_muladd_2(&w1, &w0, &w2, x[4], x[13]);
1413
180k
   word3_muladd_2(&w1, &w0, &w2, x[5], x[12]);
1414
180k
   word3_muladd_2(&w1, &w0, &w2, x[6], x[11]);
1415
180k
   word3_muladd_2(&w1, &w0, &w2, x[7], x[10]);
1416
180k
   word3_muladd_2(&w1, &w0, &w2, x[8], x[9]);
1417
180k
   z[17] = w2;
1418
180k
   w2 = 0;
1419
1420
180k
   word3_muladd_2(&w2, &w1, &w0, x[0], x[18]);
1421
180k
   word3_muladd_2(&w2, &w1, &w0, x[1], x[17]);
1422
180k
   word3_muladd_2(&w2, &w1, &w0, x[2], x[16]);
1423
180k
   word3_muladd_2(&w2, &w1, &w0, x[3], x[15]);
1424
180k
   word3_muladd_2(&w2, &w1, &w0, x[4], x[14]);
1425
180k
   word3_muladd_2(&w2, &w1, &w0, x[5], x[13]);
1426
180k
   word3_muladd_2(&w2, &w1, &w0, x[6], x[12]);
1427
180k
   word3_muladd_2(&w2, &w1, &w0, x[7], x[11]);
1428
180k
   word3_muladd_2(&w2, &w1, &w0, x[8], x[10]);
1429
180k
   word3_muladd(&w2, &w1, &w0, x[9], x[9]);
1430
180k
   z[18] = w0;
1431
180k
   w0 = 0;
1432
1433
180k
   word3_muladd_2(&w0, &w2, &w1, x[0], x[19]);
1434
180k
   word3_muladd_2(&w0, &w2, &w1, x[1], x[18]);
1435
180k
   word3_muladd_2(&w0, &w2, &w1, x[2], x[17]);
1436
180k
   word3_muladd_2(&w0, &w2, &w1, x[3], x[16]);
1437
180k
   word3_muladd_2(&w0, &w2, &w1, x[4], x[15]);
1438
180k
   word3_muladd_2(&w0, &w2, &w1, x[5], x[14]);
1439
180k
   word3_muladd_2(&w0, &w2, &w1, x[6], x[13]);
1440
180k
   word3_muladd_2(&w0, &w2, &w1, x[7], x[12]);
1441
180k
   word3_muladd_2(&w0, &w2, &w1, x[8], x[11]);
1442
180k
   word3_muladd_2(&w0, &w2, &w1, x[9], x[10]);
1443
180k
   z[19] = w1;
1444
180k
   w1 = 0;
1445
1446
180k
   word3_muladd_2(&w1, &w0, &w2, x[0], x[20]);
1447
180k
   word3_muladd_2(&w1, &w0, &w2, x[1], x[19]);
1448
180k
   word3_muladd_2(&w1, &w0, &w2, x[2], x[18]);
1449
180k
   word3_muladd_2(&w1, &w0, &w2, x[3], x[17]);
1450
180k
   word3_muladd_2(&w1, &w0, &w2, x[4], x[16]);
1451
180k
   word3_muladd_2(&w1, &w0, &w2, x[5], x[15]);
1452
180k
   word3_muladd_2(&w1, &w0, &w2, x[6], x[14]);
1453
180k
   word3_muladd_2(&w1, &w0, &w2, x[7], x[13]);
1454
180k
   word3_muladd_2(&w1, &w0, &w2, x[8], x[12]);
1455
180k
   word3_muladd_2(&w1, &w0, &w2, x[9], x[11]);
1456
180k
   word3_muladd(&w1, &w0, &w2, x[10], x[10]);
1457
180k
   z[20] = w2;
1458
180k
   w2 = 0;
1459
1460
180k
   word3_muladd_2(&w2, &w1, &w0, x[0], x[21]);
1461
180k
   word3_muladd_2(&w2, &w1, &w0, x[1], x[20]);
1462
180k
   word3_muladd_2(&w2, &w1, &w0, x[2], x[19]);
1463
180k
   word3_muladd_2(&w2, &w1, &w0, x[3], x[18]);
1464
180k
   word3_muladd_2(&w2, &w1, &w0, x[4], x[17]);
1465
180k
   word3_muladd_2(&w2, &w1, &w0, x[5], x[16]);
1466
180k
   word3_muladd_2(&w2, &w1, &w0, x[6], x[15]);
1467
180k
   word3_muladd_2(&w2, &w1, &w0, x[7], x[14]);
1468
180k
   word3_muladd_2(&w2, &w1, &w0, x[8], x[13]);
1469
180k
   word3_muladd_2(&w2, &w1, &w0, x[9], x[12]);
1470
180k
   word3_muladd_2(&w2, &w1, &w0, x[10], x[11]);
1471
180k
   z[21] = w0;
1472
180k
   w0 = 0;
1473
1474
180k
   word3_muladd_2(&w0, &w2, &w1, x[0], x[22]);
1475
180k
   word3_muladd_2(&w0, &w2, &w1, x[1], x[21]);
1476
180k
   word3_muladd_2(&w0, &w2, &w1, x[2], x[20]);
1477
180k
   word3_muladd_2(&w0, &w2, &w1, x[3], x[19]);
1478
180k
   word3_muladd_2(&w0, &w2, &w1, x[4], x[18]);
1479
180k
   word3_muladd_2(&w0, &w2, &w1, x[5], x[17]);
1480
180k
   word3_muladd_2(&w0, &w2, &w1, x[6], x[16]);
1481
180k
   word3_muladd_2(&w0, &w2, &w1, x[7], x[15]);
1482
180k
   word3_muladd_2(&w0, &w2, &w1, x[8], x[14]);
1483
180k
   word3_muladd_2(&w0, &w2, &w1, x[9], x[13]);
1484
180k
   word3_muladd_2(&w0, &w2, &w1, x[10], x[12]);
1485
180k
   word3_muladd(&w0, &w2, &w1, x[11], x[11]);
1486
180k
   z[22] = w1;
1487
180k
   w1 = 0;
1488
1489
180k
   word3_muladd_2(&w1, &w0, &w2, x[0], x[23]);
1490
180k
   word3_muladd_2(&w1, &w0, &w2, x[1], x[22]);
1491
180k
   word3_muladd_2(&w1, &w0, &w2, x[2], x[21]);
1492
180k
   word3_muladd_2(&w1, &w0, &w2, x[3], x[20]);
1493
180k
   word3_muladd_2(&w1, &w0, &w2, x[4], x[19]);
1494
180k
   word3_muladd_2(&w1, &w0, &w2, x[5], x[18]);
1495
180k
   word3_muladd_2(&w1, &w0, &w2, x[6], x[17]);
1496
180k
   word3_muladd_2(&w1, &w0, &w2, x[7], x[16]);
1497
180k
   word3_muladd_2(&w1, &w0, &w2, x[8], x[15]);
1498
180k
   word3_muladd_2(&w1, &w0, &w2, x[9], x[14]);
1499
180k
   word3_muladd_2(&w1, &w0, &w2, x[10], x[13]);
1500
180k
   word3_muladd_2(&w1, &w0, &w2, x[11], x[12]);
1501
180k
   z[23] = w2;
1502
180k
   w2 = 0;
1503
1504
180k
   word3_muladd_2(&w2, &w1, &w0, x[1], x[23]);
1505
180k
   word3_muladd_2(&w2, &w1, &w0, x[2], x[22]);
1506
180k
   word3_muladd_2(&w2, &w1, &w0, x[3], x[21]);
1507
180k
   word3_muladd_2(&w2, &w1, &w0, x[4], x[20]);
1508
180k
   word3_muladd_2(&w2, &w1, &w0, x[5], x[19]);
1509
180k
   word3_muladd_2(&w2, &w1, &w0, x[6], x[18]);
1510
180k
   word3_muladd_2(&w2, &w1, &w0, x[7], x[17]);
1511
180k
   word3_muladd_2(&w2, &w1, &w0, x[8], x[16]);
1512
180k
   word3_muladd_2(&w2, &w1, &w0, x[9], x[15]);
1513
180k
   word3_muladd_2(&w2, &w1, &w0, x[10], x[14]);
1514
180k
   word3_muladd_2(&w2, &w1, &w0, x[11], x[13]);
1515
180k
   word3_muladd(&w2, &w1, &w0, x[12], x[12]);
1516
180k
   z[24] = w0;
1517
180k
   w0 = 0;
1518
1519
180k
   word3_muladd_2(&w0, &w2, &w1, x[2], x[23]);
1520
180k
   word3_muladd_2(&w0, &w2, &w1, x[3], x[22]);
1521
180k
   word3_muladd_2(&w0, &w2, &w1, x[4], x[21]);
1522
180k
   word3_muladd_2(&w0, &w2, &w1, x[5], x[20]);
1523
180k
   word3_muladd_2(&w0, &w2, &w1, x[6], x[19]);
1524
180k
   word3_muladd_2(&w0, &w2, &w1, x[7], x[18]);
1525
180k
   word3_muladd_2(&w0, &w2, &w1, x[8], x[17]);
1526
180k
   word3_muladd_2(&w0, &w2, &w1, x[9], x[16]);
1527
180k
   word3_muladd_2(&w0, &w2, &w1, x[10], x[15]);
1528
180k
   word3_muladd_2(&w0, &w2, &w1, x[11], x[14]);
1529
180k
   word3_muladd_2(&w0, &w2, &w1, x[12], x[13]);
1530
180k
   z[25] = w1;
1531
180k
   w1 = 0;
1532
1533
180k
   word3_muladd_2(&w1, &w0, &w2, x[3], x[23]);
1534
180k
   word3_muladd_2(&w1, &w0, &w2, x[4], x[22]);
1535
180k
   word3_muladd_2(&w1, &w0, &w2, x[5], x[21]);
1536
180k
   word3_muladd_2(&w1, &w0, &w2, x[6], x[20]);
1537
180k
   word3_muladd_2(&w1, &w0, &w2, x[7], x[19]);
1538
180k
   word3_muladd_2(&w1, &w0, &w2, x[8], x[18]);
1539
180k
   word3_muladd_2(&w1, &w0, &w2, x[9], x[17]);
1540
180k
   word3_muladd_2(&w1, &w0, &w2, x[10], x[16]);
1541
180k
   word3_muladd_2(&w1, &w0, &w2, x[11], x[15]);
1542
180k
   word3_muladd_2(&w1, &w0, &w2, x[12], x[14]);
1543
180k
   word3_muladd(&w1, &w0, &w2, x[13], x[13]);
1544
180k
   z[26] = w2;
1545
180k
   w2 = 0;
1546
1547
180k
   word3_muladd_2(&w2, &w1, &w0, x[4], x[23]);
1548
180k
   word3_muladd_2(&w2, &w1, &w0, x[5], x[22]);
1549
180k
   word3_muladd_2(&w2, &w1, &w0, x[6], x[21]);
1550
180k
   word3_muladd_2(&w2, &w1, &w0, x[7], x[20]);
1551
180k
   word3_muladd_2(&w2, &w1, &w0, x[8], x[19]);
1552
180k
   word3_muladd_2(&w2, &w1, &w0, x[9], x[18]);
1553
180k
   word3_muladd_2(&w2, &w1, &w0, x[10], x[17]);
1554
180k
   word3_muladd_2(&w2, &w1, &w0, x[11], x[16]);
1555
180k
   word3_muladd_2(&w2, &w1, &w0, x[12], x[15]);
1556
180k
   word3_muladd_2(&w2, &w1, &w0, x[13], x[14]);
1557
180k
   z[27] = w0;
1558
180k
   w0 = 0;
1559
1560
180k
   word3_muladd_2(&w0, &w2, &w1, x[5], x[23]);
1561
180k
   word3_muladd_2(&w0, &w2, &w1, x[6], x[22]);
1562
180k
   word3_muladd_2(&w0, &w2, &w1, x[7], x[21]);
1563
180k
   word3_muladd_2(&w0, &w2, &w1, x[8], x[20]);
1564
180k
   word3_muladd_2(&w0, &w2, &w1, x[9], x[19]);
1565
180k
   word3_muladd_2(&w0, &w2, &w1, x[10], x[18]);
1566
180k
   word3_muladd_2(&w0, &w2, &w1, x[11], x[17]);
1567
180k
   word3_muladd_2(&w0, &w2, &w1, x[12], x[16]);
1568
180k
   word3_muladd_2(&w0, &w2, &w1, x[13], x[15]);
1569
180k
   word3_muladd(&w0, &w2, &w1, x[14], x[14]);
1570
180k
   z[28] = w1;
1571
180k
   w1 = 0;
1572
1573
180k
   word3_muladd_2(&w1, &w0, &w2, x[6], x[23]);
1574
180k
   word3_muladd_2(&w1, &w0, &w2, x[7], x[22]);
1575
180k
   word3_muladd_2(&w1, &w0, &w2, x[8], x[21]);
1576
180k
   word3_muladd_2(&w1, &w0, &w2, x[9], x[20]);
1577
180k
   word3_muladd_2(&w1, &w0, &w2, x[10], x[19]);
1578
180k
   word3_muladd_2(&w1, &w0, &w2, x[11], x[18]);
1579
180k
   word3_muladd_2(&w1, &w0, &w2, x[12], x[17]);
1580
180k
   word3_muladd_2(&w1, &w0, &w2, x[13], x[16]);
1581
180k
   word3_muladd_2(&w1, &w0, &w2, x[14], x[15]);
1582
180k
   z[29] = w2;
1583
180k
   w2 = 0;
1584
1585
180k
   word3_muladd_2(&w2, &w1, &w0, x[7], x[23]);
1586
180k
   word3_muladd_2(&w2, &w1, &w0, x[8], x[22]);
1587
180k
   word3_muladd_2(&w2, &w1, &w0, x[9], x[21]);
1588
180k
   word3_muladd_2(&w2, &w1, &w0, x[10], x[20]);
1589
180k
   word3_muladd_2(&w2, &w1, &w0, x[11], x[19]);
1590
180k
   word3_muladd_2(&w2, &w1, &w0, x[12], x[18]);
1591
180k
   word3_muladd_2(&w2, &w1, &w0, x[13], x[17]);
1592
180k
   word3_muladd_2(&w2, &w1, &w0, x[14], x[16]);
1593
180k
   word3_muladd(&w2, &w1, &w0, x[15], x[15]);
1594
180k
   z[30] = w0;
1595
180k
   w0 = 0;
1596
1597
180k
   word3_muladd_2(&w0, &w2, &w1, x[8], x[23]);
1598
180k
   word3_muladd_2(&w0, &w2, &w1, x[9], x[22]);
1599
180k
   word3_muladd_2(&w0, &w2, &w1, x[10], x[21]);
1600
180k
   word3_muladd_2(&w0, &w2, &w1, x[11], x[20]);
1601
180k
   word3_muladd_2(&w0, &w2, &w1, x[12], x[19]);
1602
180k
   word3_muladd_2(&w0, &w2, &w1, x[13], x[18]);
1603
180k
   word3_muladd_2(&w0, &w2, &w1, x[14], x[17]);
1604
180k
   word3_muladd_2(&w0, &w2, &w1, x[15], x[16]);
1605
180k
   z[31] = w1;
1606
180k
   w1 = 0;
1607
1608
180k
   word3_muladd_2(&w1, &w0, &w2, x[9], x[23]);
1609
180k
   word3_muladd_2(&w1, &w0, &w2, x[10], x[22]);
1610
180k
   word3_muladd_2(&w1, &w0, &w2, x[11], x[21]);
1611
180k
   word3_muladd_2(&w1, &w0, &w2, x[12], x[20]);
1612
180k
   word3_muladd_2(&w1, &w0, &w2, x[13], x[19]);
1613
180k
   word3_muladd_2(&w1, &w0, &w2, x[14], x[18]);
1614
180k
   word3_muladd_2(&w1, &w0, &w2, x[15], x[17]);
1615
180k
   word3_muladd(&w1, &w0, &w2, x[16], x[16]);
1616
180k
   z[32] = w2;
1617
180k
   w2 = 0;
1618
1619
180k
   word3_muladd_2(&w2, &w1, &w0, x[10], x[23]);
1620
180k
   word3_muladd_2(&w2, &w1, &w0, x[11], x[22]);
1621
180k
   word3_muladd_2(&w2, &w1, &w0, x[12], x[21]);
1622
180k
   word3_muladd_2(&w2, &w1, &w0, x[13], x[20]);
1623
180k
   word3_muladd_2(&w2, &w1, &w0, x[14], x[19]);
1624
180k
   word3_muladd_2(&w2, &w1, &w0, x[15], x[18]);
1625
180k
   word3_muladd_2(&w2, &w1, &w0, x[16], x[17]);
1626
180k
   z[33] = w0;
1627
180k
   w0 = 0;
1628
1629
180k
   word3_muladd_2(&w0, &w2, &w1, x[11], x[23]);
1630
180k
   word3_muladd_2(&w0, &w2, &w1, x[12], x[22]);
1631
180k
   word3_muladd_2(&w0, &w2, &w1, x[13], x[21]);
1632
180k
   word3_muladd_2(&w0, &w2, &w1, x[14], x[20]);
1633
180k
   word3_muladd_2(&w0, &w2, &w1, x[15], x[19]);
1634
180k
   word3_muladd_2(&w0, &w2, &w1, x[16], x[18]);
1635
180k
   word3_muladd(&w0, &w2, &w1, x[17], x[17]);
1636
180k
   z[34] = w1;
1637
180k
   w1 = 0;
1638
1639
180k
   word3_muladd_2(&w1, &w0, &w2, x[12], x[23]);
1640
180k
   word3_muladd_2(&w1, &w0, &w2, x[13], x[22]);
1641
180k
   word3_muladd_2(&w1, &w0, &w2, x[14], x[21]);
1642
180k
   word3_muladd_2(&w1, &w0, &w2, x[15], x[20]);
1643
180k
   word3_muladd_2(&w1, &w0, &w2, x[16], x[19]);
1644
180k
   word3_muladd_2(&w1, &w0, &w2, x[17], x[18]);
1645
180k
   z[35] = w2;
1646
180k
   w2 = 0;
1647
1648
180k
   word3_muladd_2(&w2, &w1, &w0, x[13], x[23]);
1649
180k
   word3_muladd_2(&w2, &w1, &w0, x[14], x[22]);
1650
180k
   word3_muladd_2(&w2, &w1, &w0, x[15], x[21]);
1651
180k
   word3_muladd_2(&w2, &w1, &w0, x[16], x[20]);
1652
180k
   word3_muladd_2(&w2, &w1, &w0, x[17], x[19]);
1653
180k
   word3_muladd(&w2, &w1, &w0, x[18], x[18]);
1654
180k
   z[36] = w0;
1655
180k
   w0 = 0;
1656
1657
180k
   word3_muladd_2(&w0, &w2, &w1, x[14], x[23]);
1658
180k
   word3_muladd_2(&w0, &w2, &w1, x[15], x[22]);
1659
180k
   word3_muladd_2(&w0, &w2, &w1, x[16], x[21]);
1660
180k
   word3_muladd_2(&w0, &w2, &w1, x[17], x[20]);
1661
180k
   word3_muladd_2(&w0, &w2, &w1, x[18], x[19]);
1662
180k
   z[37] = w1;
1663
180k
   w1 = 0;
1664
1665
180k
   word3_muladd_2(&w1, &w0, &w2, x[15], x[23]);
1666
180k
   word3_muladd_2(&w1, &w0, &w2, x[16], x[22]);
1667
180k
   word3_muladd_2(&w1, &w0, &w2, x[17], x[21]);
1668
180k
   word3_muladd_2(&w1, &w0, &w2, x[18], x[20]);
1669
180k
   word3_muladd(&w1, &w0, &w2, x[19], x[19]);
1670
180k
   z[38] = w2;
1671
180k
   w2 = 0;
1672
1673
180k
   word3_muladd_2(&w2, &w1, &w0, x[16], x[23]);
1674
180k
   word3_muladd_2(&w2, &w1, &w0, x[17], x[22]);
1675
180k
   word3_muladd_2(&w2, &w1, &w0, x[18], x[21]);
1676
180k
   word3_muladd_2(&w2, &w1, &w0, x[19], x[20]);
1677
180k
   z[39] = w0;
1678
180k
   w0 = 0;
1679
1680
180k
   word3_muladd_2(&w0, &w2, &w1, x[17], x[23]);
1681
180k
   word3_muladd_2(&w0, &w2, &w1, x[18], x[22]);
1682
180k
   word3_muladd_2(&w0, &w2, &w1, x[19], x[21]);
1683
180k
   word3_muladd(&w0, &w2, &w1, x[20], x[20]);
1684
180k
   z[40] = w1;
1685
180k
   w1 = 0;
1686
1687
180k
   word3_muladd_2(&w1, &w0, &w2, x[18], x[23]);
1688
180k
   word3_muladd_2(&w1, &w0, &w2, x[19], x[22]);
1689
180k
   word3_muladd_2(&w1, &w0, &w2, x[20], x[21]);
1690
180k
   z[41] = w2;
1691
180k
   w2 = 0;
1692
1693
180k
   word3_muladd_2(&w2, &w1, &w0, x[19], x[23]);
1694
180k
   word3_muladd_2(&w2, &w1, &w0, x[20], x[22]);
1695
180k
   word3_muladd(&w2, &w1, &w0, x[21], x[21]);
1696
180k
   z[42] = w0;
1697
180k
   w0 = 0;
1698
1699
180k
   word3_muladd_2(&w0, &w2, &w1, x[20], x[23]);
1700
180k
   word3_muladd_2(&w0, &w2, &w1, x[21], x[22]);
1701
180k
   z[43] = w1;
1702
180k
   w1 = 0;
1703
1704
180k
   word3_muladd_2(&w1, &w0, &w2, x[21], x[23]);
1705
180k
   word3_muladd(&w1, &w0, &w2, x[22], x[22]);
1706
180k
   z[44] = w2;
1707
180k
   w2 = 0;
1708
1709
180k
   word3_muladd_2(&w2, &w1, &w0, x[22], x[23]);
1710
180k
   z[45] = w0;
1711
180k
   w0 = 0;
1712
1713
180k
   word3_muladd(&w0, &w2, &w1, x[23], x[23]);
1714
180k
   z[46] = w1;
1715
180k
   z[47] = w2;
1716
180k
}
1717
1718
/*
1719
* Comba 24x24 Multiplication
1720
*/
1721
119k
void bigint_comba_mul24(word z[48], const word x[24], const word y[24]) {
1722
119k
   word w2 = 0, w1 = 0, w0 = 0;
1723
1724
119k
   word3_muladd(&w2, &w1, &w0, x[0], y[0]);
1725
119k
   z[0] = w0;
1726
119k
   w0 = 0;
1727
1728
119k
   word3_muladd(&w0, &w2, &w1, x[0], y[1]);
1729
119k
   word3_muladd(&w0, &w2, &w1, x[1], y[0]);
1730
119k
   z[1] = w1;
1731
119k
   w1 = 0;
1732
1733
119k
   word3_muladd(&w1, &w0, &w2, x[0], y[2]);
1734
119k
   word3_muladd(&w1, &w0, &w2, x[1], y[1]);
1735
119k
   word3_muladd(&w1, &w0, &w2, x[2], y[0]);
1736
119k
   z[2] = w2;
1737
119k
   w2 = 0;
1738
1739
119k
   word3_muladd(&w2, &w1, &w0, x[0], y[3]);
1740
119k
   word3_muladd(&w2, &w1, &w0, x[1], y[2]);
1741
119k
   word3_muladd(&w2, &w1, &w0, x[2], y[1]);
1742
119k
   word3_muladd(&w2, &w1, &w0, x[3], y[0]);
1743
119k
   z[3] = w0;
1744
119k
   w0 = 0;
1745
1746
119k
   word3_muladd(&w0, &w2, &w1, x[0], y[4]);
1747
119k
   word3_muladd(&w0, &w2, &w1, x[1], y[3]);
1748
119k
   word3_muladd(&w0, &w2, &w1, x[2], y[2]);
1749
119k
   word3_muladd(&w0, &w2, &w1, x[3], y[1]);
1750
119k
   word3_muladd(&w0, &w2, &w1, x[4], y[0]);
1751
119k
   z[4] = w1;
1752
119k
   w1 = 0;
1753
1754
119k
   word3_muladd(&w1, &w0, &w2, x[0], y[5]);
1755
119k
   word3_muladd(&w1, &w0, &w2, x[1], y[4]);
1756
119k
   word3_muladd(&w1, &w0, &w2, x[2], y[3]);
1757
119k
   word3_muladd(&w1, &w0, &w2, x[3], y[2]);
1758
119k
   word3_muladd(&w1, &w0, &w2, x[4], y[1]);
1759
119k
   word3_muladd(&w1, &w0, &w2, x[5], y[0]);
1760
119k
   z[5] = w2;
1761
119k
   w2 = 0;
1762
1763
119k
   word3_muladd(&w2, &w1, &w0, x[0], y[6]);
1764
119k
   word3_muladd(&w2, &w1, &w0, x[1], y[5]);
1765
119k
   word3_muladd(&w2, &w1, &w0, x[2], y[4]);
1766
119k
   word3_muladd(&w2, &w1, &w0, x[3], y[3]);
1767
119k
   word3_muladd(&w2, &w1, &w0, x[4], y[2]);
1768
119k
   word3_muladd(&w2, &w1, &w0, x[5], y[1]);
1769
119k
   word3_muladd(&w2, &w1, &w0, x[6], y[0]);
1770
119k
   z[6] = w0;
1771
119k
   w0 = 0;
1772
1773
119k
   word3_muladd(&w0, &w2, &w1, x[0], y[7]);
1774
119k
   word3_muladd(&w0, &w2, &w1, x[1], y[6]);
1775
119k
   word3_muladd(&w0, &w2, &w1, x[2], y[5]);
1776
119k
   word3_muladd(&w0, &w2, &w1, x[3], y[4]);
1777
119k
   word3_muladd(&w0, &w2, &w1, x[4], y[3]);
1778
119k
   word3_muladd(&w0, &w2, &w1, x[5], y[2]);
1779
119k
   word3_muladd(&w0, &w2, &w1, x[6], y[1]);
1780
119k
   word3_muladd(&w0, &w2, &w1, x[7], y[0]);
1781
119k
   z[7] = w1;
1782
119k
   w1 = 0;
1783
1784
119k
   word3_muladd(&w1, &w0, &w2, x[0], y[8]);
1785
119k
   word3_muladd(&w1, &w0, &w2, x[1], y[7]);
1786
119k
   word3_muladd(&w1, &w0, &w2, x[2], y[6]);
1787
119k
   word3_muladd(&w1, &w0, &w2, x[3], y[5]);
1788
119k
   word3_muladd(&w1, &w0, &w2, x[4], y[4]);
1789
119k
   word3_muladd(&w1, &w0, &w2, x[5], y[3]);
1790
119k
   word3_muladd(&w1, &w0, &w2, x[6], y[2]);
1791
119k
   word3_muladd(&w1, &w0, &w2, x[7], y[1]);
1792
119k
   word3_muladd(&w1, &w0, &w2, x[8], y[0]);
1793
119k
   z[8] = w2;
1794
119k
   w2 = 0;
1795
1796
119k
   word3_muladd(&w2, &w1, &w0, x[0], y[9]);
1797
119k
   word3_muladd(&w2, &w1, &w0, x[1], y[8]);
1798
119k
   word3_muladd(&w2, &w1, &w0, x[2], y[7]);
1799
119k
   word3_muladd(&w2, &w1, &w0, x[3], y[6]);
1800
119k
   word3_muladd(&w2, &w1, &w0, x[4], y[5]);
1801
119k
   word3_muladd(&w2, &w1, &w0, x[5], y[4]);
1802
119k
   word3_muladd(&w2, &w1, &w0, x[6], y[3]);
1803
119k
   word3_muladd(&w2, &w1, &w0, x[7], y[2]);
1804
119k
   word3_muladd(&w2, &w1, &w0, x[8], y[1]);
1805
119k
   word3_muladd(&w2, &w1, &w0, x[9], y[0]);
1806
119k
   z[9] = w0;
1807
119k
   w0 = 0;
1808
1809
119k
   word3_muladd(&w0, &w2, &w1, x[0], y[10]);
1810
119k
   word3_muladd(&w0, &w2, &w1, x[1], y[9]);
1811
119k
   word3_muladd(&w0, &w2, &w1, x[2], y[8]);
1812
119k
   word3_muladd(&w0, &w2, &w1, x[3], y[7]);
1813
119k
   word3_muladd(&w0, &w2, &w1, x[4], y[6]);
1814
119k
   word3_muladd(&w0, &w2, &w1, x[5], y[5]);
1815
119k
   word3_muladd(&w0, &w2, &w1, x[6], y[4]);
1816
119k
   word3_muladd(&w0, &w2, &w1, x[7], y[3]);
1817
119k
   word3_muladd(&w0, &w2, &w1, x[8], y[2]);
1818
119k
   word3_muladd(&w0, &w2, &w1, x[9], y[1]);
1819
119k
   word3_muladd(&w0, &w2, &w1, x[10], y[0]);
1820
119k
   z[10] = w1;
1821
119k
   w1 = 0;
1822
1823
119k
   word3_muladd(&w1, &w0, &w2, x[0], y[11]);
1824
119k
   word3_muladd(&w1, &w0, &w2, x[1], y[10]);
1825
119k
   word3_muladd(&w1, &w0, &w2, x[2], y[9]);
1826
119k
   word3_muladd(&w1, &w0, &w2, x[3], y[8]);
1827
119k
   word3_muladd(&w1, &w0, &w2, x[4], y[7]);
1828
119k
   word3_muladd(&w1, &w0, &w2, x[5], y[6]);
1829
119k
   word3_muladd(&w1, &w0, &w2, x[6], y[5]);
1830
119k
   word3_muladd(&w1, &w0, &w2, x[7], y[4]);
1831
119k
   word3_muladd(&w1, &w0, &w2, x[8], y[3]);
1832
119k
   word3_muladd(&w1, &w0, &w2, x[9], y[2]);
1833
119k
   word3_muladd(&w1, &w0, &w2, x[10], y[1]);
1834
119k
   word3_muladd(&w1, &w0, &w2, x[11], y[0]);
1835
119k
   z[11] = w2;
1836
119k
   w2 = 0;
1837
1838
119k
   word3_muladd(&w2, &w1, &w0, x[0], y[12]);
1839
119k
   word3_muladd(&w2, &w1, &w0, x[1], y[11]);
1840
119k
   word3_muladd(&w2, &w1, &w0, x[2], y[10]);
1841
119k
   word3_muladd(&w2, &w1, &w0, x[3], y[9]);
1842
119k
   word3_muladd(&w2, &w1, &w0, x[4], y[8]);
1843
119k
   word3_muladd(&w2, &w1, &w0, x[5], y[7]);
1844
119k
   word3_muladd(&w2, &w1, &w0, x[6], y[6]);
1845
119k
   word3_muladd(&w2, &w1, &w0, x[7], y[5]);
1846
119k
   word3_muladd(&w2, &w1, &w0, x[8], y[4]);
1847
119k
   word3_muladd(&w2, &w1, &w0, x[9], y[3]);
1848
119k
   word3_muladd(&w2, &w1, &w0, x[10], y[2]);
1849
119k
   word3_muladd(&w2, &w1, &w0, x[11], y[1]);
1850
119k
   word3_muladd(&w2, &w1, &w0, x[12], y[0]);
1851
119k
   z[12] = w0;
1852
119k
   w0 = 0;
1853
1854
119k
   word3_muladd(&w0, &w2, &w1, x[0], y[13]);
1855
119k
   word3_muladd(&w0, &w2, &w1, x[1], y[12]);
1856
119k
   word3_muladd(&w0, &w2, &w1, x[2], y[11]);
1857
119k
   word3_muladd(&w0, &w2, &w1, x[3], y[10]);
1858
119k
   word3_muladd(&w0, &w2, &w1, x[4], y[9]);
1859
119k
   word3_muladd(&w0, &w2, &w1, x[5], y[8]);
1860
119k
   word3_muladd(&w0, &w2, &w1, x[6], y[7]);
1861
119k
   word3_muladd(&w0, &w2, &w1, x[7], y[6]);
1862
119k
   word3_muladd(&w0, &w2, &w1, x[8], y[5]);
1863
119k
   word3_muladd(&w0, &w2, &w1, x[9], y[4]);
1864
119k
   word3_muladd(&w0, &w2, &w1, x[10], y[3]);
1865
119k
   word3_muladd(&w0, &w2, &w1, x[11], y[2]);
1866
119k
   word3_muladd(&w0, &w2, &w1, x[12], y[1]);
1867
119k
   word3_muladd(&w0, &w2, &w1, x[13], y[0]);
1868
119k
   z[13] = w1;
1869
119k
   w1 = 0;
1870
1871
119k
   word3_muladd(&w1, &w0, &w2, x[0], y[14]);
1872
119k
   word3_muladd(&w1, &w0, &w2, x[1], y[13]);
1873
119k
   word3_muladd(&w1, &w0, &w2, x[2], y[12]);
1874
119k
   word3_muladd(&w1, &w0, &w2, x[3], y[11]);
1875
119k
   word3_muladd(&w1, &w0, &w2, x[4], y[10]);
1876
119k
   word3_muladd(&w1, &w0, &w2, x[5], y[9]);
1877
119k
   word3_muladd(&w1, &w0, &w2, x[6], y[8]);
1878
119k
   word3_muladd(&w1, &w0, &w2, x[7], y[7]);
1879
119k
   word3_muladd(&w1, &w0, &w2, x[8], y[6]);
1880
119k
   word3_muladd(&w1, &w0, &w2, x[9], y[5]);
1881
119k
   word3_muladd(&w1, &w0, &w2, x[10], y[4]);
1882
119k
   word3_muladd(&w1, &w0, &w2, x[11], y[3]);
1883
119k
   word3_muladd(&w1, &w0, &w2, x[12], y[2]);
1884
119k
   word3_muladd(&w1, &w0, &w2, x[13], y[1]);
1885
119k
   word3_muladd(&w1, &w0, &w2, x[14], y[0]);
1886
119k
   z[14] = w2;
1887
119k
   w2 = 0;
1888
1889
119k
   word3_muladd(&w2, &w1, &w0, x[0], y[15]);
1890
119k
   word3_muladd(&w2, &w1, &w0, x[1], y[14]);
1891
119k
   word3_muladd(&w2, &w1, &w0, x[2], y[13]);
1892
119k
   word3_muladd(&w2, &w1, &w0, x[3], y[12]);
1893
119k
   word3_muladd(&w2, &w1, &w0, x[4], y[11]);
1894
119k
   word3_muladd(&w2, &w1, &w0, x[5], y[10]);
1895
119k
   word3_muladd(&w2, &w1, &w0, x[6], y[9]);
1896
119k
   word3_muladd(&w2, &w1, &w0, x[7], y[8]);
1897
119k
   word3_muladd(&w2, &w1, &w0, x[8], y[7]);
1898
119k
   word3_muladd(&w2, &w1, &w0, x[9], y[6]);
1899
119k
   word3_muladd(&w2, &w1, &w0, x[10], y[5]);
1900
119k
   word3_muladd(&w2, &w1, &w0, x[11], y[4]);
1901
119k
   word3_muladd(&w2, &w1, &w0, x[12], y[3]);
1902
119k
   word3_muladd(&w2, &w1, &w0, x[13], y[2]);
1903
119k
   word3_muladd(&w2, &w1, &w0, x[14], y[1]);
1904
119k
   word3_muladd(&w2, &w1, &w0, x[15], y[0]);
1905
119k
   z[15] = w0;
1906
119k
   w0 = 0;
1907
1908
119k
   word3_muladd(&w0, &w2, &w1, x[0], y[16]);
1909
119k
   word3_muladd(&w0, &w2, &w1, x[1], y[15]);
1910
119k
   word3_muladd(&w0, &w2, &w1, x[2], y[14]);
1911
119k
   word3_muladd(&w0, &w2, &w1, x[3], y[13]);
1912
119k
   word3_muladd(&w0, &w2, &w1, x[4], y[12]);
1913
119k
   word3_muladd(&w0, &w2, &w1, x[5], y[11]);
1914
119k
   word3_muladd(&w0, &w2, &w1, x[6], y[10]);
1915
119k
   word3_muladd(&w0, &w2, &w1, x[7], y[9]);
1916
119k
   word3_muladd(&w0, &w2, &w1, x[8], y[8]);
1917
119k
   word3_muladd(&w0, &w2, &w1, x[9], y[7]);
1918
119k
   word3_muladd(&w0, &w2, &w1, x[10], y[6]);
1919
119k
   word3_muladd(&w0, &w2, &w1, x[11], y[5]);
1920
119k
   word3_muladd(&w0, &w2, &w1, x[12], y[4]);
1921
119k
   word3_muladd(&w0, &w2, &w1, x[13], y[3]);
1922
119k
   word3_muladd(&w0, &w2, &w1, x[14], y[2]);
1923
119k
   word3_muladd(&w0, &w2, &w1, x[15], y[1]);
1924
119k
   word3_muladd(&w0, &w2, &w1, x[16], y[0]);
1925
119k
   z[16] = w1;
1926
119k
   w1 = 0;
1927
1928
119k
   word3_muladd(&w1, &w0, &w2, x[0], y[17]);
1929
119k
   word3_muladd(&w1, &w0, &w2, x[1], y[16]);
1930
119k
   word3_muladd(&w1, &w0, &w2, x[2], y[15]);
1931
119k
   word3_muladd(&w1, &w0, &w2, x[3], y[14]);
1932
119k
   word3_muladd(&w1, &w0, &w2, x[4], y[13]);
1933
119k
   word3_muladd(&w1, &w0, &w2, x[5], y[12]);
1934
119k
   word3_muladd(&w1, &w0, &w2, x[6], y[11]);
1935
119k
   word3_muladd(&w1, &w0, &w2, x[7], y[10]);
1936
119k
   word3_muladd(&w1, &w0, &w2, x[8], y[9]);
1937
119k
   word3_muladd(&w1, &w0, &w2, x[9], y[8]);
1938
119k
   word3_muladd(&w1, &w0, &w2, x[10], y[7]);
1939
119k
   word3_muladd(&w1, &w0, &w2, x[11], y[6]);
1940
119k
   word3_muladd(&w1, &w0, &w2, x[12], y[5]);
1941
119k
   word3_muladd(&w1, &w0, &w2, x[13], y[4]);
1942
119k
   word3_muladd(&w1, &w0, &w2, x[14], y[3]);
1943
119k
   word3_muladd(&w1, &w0, &w2, x[15], y[2]);
1944
119k
   word3_muladd(&w1, &w0, &w2, x[16], y[1]);
1945
119k
   word3_muladd(&w1, &w0, &w2, x[17], y[0]);
1946
119k
   z[17] = w2;
1947
119k
   w2 = 0;
1948
1949
119k
   word3_muladd(&w2, &w1, &w0, x[0], y[18]);
1950
119k
   word3_muladd(&w2, &w1, &w0, x[1], y[17]);
1951
119k
   word3_muladd(&w2, &w1, &w0, x[2], y[16]);
1952
119k
   word3_muladd(&w2, &w1, &w0, x[3], y[15]);
1953
119k
   word3_muladd(&w2, &w1, &w0, x[4], y[14]);
1954
119k
   word3_muladd(&w2, &w1, &w0, x[5], y[13]);
1955
119k
   word3_muladd(&w2, &w1, &w0, x[6], y[12]);
1956
119k
   word3_muladd(&w2, &w1, &w0, x[7], y[11]);
1957
119k
   word3_muladd(&w2, &w1, &w0, x[8], y[10]);
1958
119k
   word3_muladd(&w2, &w1, &w0, x[9], y[9]);
1959
119k
   word3_muladd(&w2, &w1, &w0, x[10], y[8]);
1960
119k
   word3_muladd(&w2, &w1, &w0, x[11], y[7]);
1961
119k
   word3_muladd(&w2, &w1, &w0, x[12], y[6]);
1962
119k
   word3_muladd(&w2, &w1, &w0, x[13], y[5]);
1963
119k
   word3_muladd(&w2, &w1, &w0, x[14], y[4]);
1964
119k
   word3_muladd(&w2, &w1, &w0, x[15], y[3]);
1965
119k
   word3_muladd(&w2, &w1, &w0, x[16], y[2]);
1966
119k
   word3_muladd(&w2, &w1, &w0, x[17], y[1]);
1967
119k
   word3_muladd(&w2, &w1, &w0, x[18], y[0]);
1968
119k
   z[18] = w0;
1969
119k
   w0 = 0;
1970
1971
119k
   word3_muladd(&w0, &w2, &w1, x[0], y[19]);
1972
119k
   word3_muladd(&w0, &w2, &w1, x[1], y[18]);
1973
119k
   word3_muladd(&w0, &w2, &w1, x[2], y[17]);
1974
119k
   word3_muladd(&w0, &w2, &w1, x[3], y[16]);
1975
119k
   word3_muladd(&w0, &w2, &w1, x[4], y[15]);
1976
119k
   word3_muladd(&w0, &w2, &w1, x[5], y[14]);
1977
119k
   word3_muladd(&w0, &w2, &w1, x[6], y[13]);
1978
119k
   word3_muladd(&w0, &w2, &w1, x[7], y[12]);
1979
119k
   word3_muladd(&w0, &w2, &w1, x[8], y[11]);
1980
119k
   word3_muladd(&w0, &w2, &w1, x[9], y[10]);
1981
119k
   word3_muladd(&w0, &w2, &w1, x[10], y[9]);
1982
119k
   word3_muladd(&w0, &w2, &w1, x[11], y[8]);
1983
119k
   word3_muladd(&w0, &w2, &w1, x[12], y[7]);
1984
119k
   word3_muladd(&w0, &w2, &w1, x[13], y[6]);
1985
119k
   word3_muladd(&w0, &w2, &w1, x[14], y[5]);
1986
119k
   word3_muladd(&w0, &w2, &w1, x[15], y[4]);
1987
119k
   word3_muladd(&w0, &w2, &w1, x[16], y[3]);
1988
119k
   word3_muladd(&w0, &w2, &w1, x[17], y[2]);
1989
119k
   word3_muladd(&w0, &w2, &w1, x[18], y[1]);
1990
119k
   word3_muladd(&w0, &w2, &w1, x[19], y[0]);
1991
119k
   z[19] = w1;
1992
119k
   w1 = 0;
1993
1994
119k
   word3_muladd(&w1, &w0, &w2, x[0], y[20]);
1995
119k
   word3_muladd(&w1, &w0, &w2, x[1], y[19]);
1996
119k
   word3_muladd(&w1, &w0, &w2, x[2], y[18]);
1997
119k
   word3_muladd(&w1, &w0, &w2, x[3], y[17]);
1998
119k
   word3_muladd(&w1, &w0, &w2, x[4], y[16]);
1999
119k
   word3_muladd(&w1, &w0, &w2, x[5], y[15]);
2000
119k
   word3_muladd(&w1, &w0, &w2, x[6], y[14]);
2001
119k
   word3_muladd(&w1, &w0, &w2, x[7], y[13]);
2002
119k
   word3_muladd(&w1, &w0, &w2, x[8], y[12]);
2003
119k
   word3_muladd(&w1, &w0, &w2, x[9], y[11]);
2004
119k
   word3_muladd(&w1, &w0, &w2, x[10], y[10]);
2005
119k
   word3_muladd(&w1, &w0, &w2, x[11], y[9]);
2006
119k
   word3_muladd(&w1, &w0, &w2, x[12], y[8]);
2007
119k
   word3_muladd(&w1, &w0, &w2, x[13], y[7]);
2008
119k
   word3_muladd(&w1, &w0, &w2, x[14], y[6]);
2009
119k
   word3_muladd(&w1, &w0, &w2, x[15], y[5]);
2010
119k
   word3_muladd(&w1, &w0, &w2, x[16], y[4]);
2011
119k
   word3_muladd(&w1, &w0, &w2, x[17], y[3]);
2012
119k
   word3_muladd(&w1, &w0, &w2, x[18], y[2]);
2013
119k
   word3_muladd(&w1, &w0, &w2, x[19], y[1]);
2014
119k
   word3_muladd(&w1, &w0, &w2, x[20], y[0]);
2015
119k
   z[20] = w2;
2016
119k
   w2 = 0;
2017
2018
119k
   word3_muladd(&w2, &w1, &w0, x[0], y[21]);
2019
119k
   word3_muladd(&w2, &w1, &w0, x[1], y[20]);
2020
119k
   word3_muladd(&w2, &w1, &w0, x[2], y[19]);
2021
119k
   word3_muladd(&w2, &w1, &w0, x[3], y[18]);
2022
119k
   word3_muladd(&w2, &w1, &w0, x[4], y[17]);
2023
119k
   word3_muladd(&w2, &w1, &w0, x[5], y[16]);
2024
119k
   word3_muladd(&w2, &w1, &w0, x[6], y[15]);
2025
119k
   word3_muladd(&w2, &w1, &w0, x[7], y[14]);
2026
119k
   word3_muladd(&w2, &w1, &w0, x[8], y[13]);
2027
119k
   word3_muladd(&w2, &w1, &w0, x[9], y[12]);
2028
119k
   word3_muladd(&w2, &w1, &w0, x[10], y[11]);
2029
119k
   word3_muladd(&w2, &w1, &w0, x[11], y[10]);
2030
119k
   word3_muladd(&w2, &w1, &w0, x[12], y[9]);
2031
119k
   word3_muladd(&w2, &w1, &w0, x[13], y[8]);
2032
119k
   word3_muladd(&w2, &w1, &w0, x[14], y[7]);
2033
119k
   word3_muladd(&w2, &w1, &w0, x[15], y[6]);
2034
119k
   word3_muladd(&w2, &w1, &w0, x[16], y[5]);
2035
119k
   word3_muladd(&w2, &w1, &w0, x[17], y[4]);
2036
119k
   word3_muladd(&w2, &w1, &w0, x[18], y[3]);
2037
119k
   word3_muladd(&w2, &w1, &w0, x[19], y[2]);
2038
119k
   word3_muladd(&w2, &w1, &w0, x[20], y[1]);
2039
119k
   word3_muladd(&w2, &w1, &w0, x[21], y[0]);
2040
119k
   z[21] = w0;
2041
119k
   w0 = 0;
2042
2043
119k
   word3_muladd(&w0, &w2, &w1, x[0], y[22]);
2044
119k
   word3_muladd(&w0, &w2, &w1, x[1], y[21]);
2045
119k
   word3_muladd(&w0, &w2, &w1, x[2], y[20]);
2046
119k
   word3_muladd(&w0, &w2, &w1, x[3], y[19]);
2047
119k
   word3_muladd(&w0, &w2, &w1, x[4], y[18]);
2048
119k
   word3_muladd(&w0, &w2, &w1, x[5], y[17]);
2049
119k
   word3_muladd(&w0, &w2, &w1, x[6], y[16]);
2050
119k
   word3_muladd(&w0, &w2, &w1, x[7], y[15]);
2051
119k
   word3_muladd(&w0, &w2, &w1, x[8], y[14]);
2052
119k
   word3_muladd(&w0, &w2, &w1, x[9], y[13]);
2053
119k
   word3_muladd(&w0, &w2, &w1, x[10], y[12]);
2054
119k
   word3_muladd(&w0, &w2, &w1, x[11], y[11]);
2055
119k
   word3_muladd(&w0, &w2, &w1, x[12], y[10]);
2056
119k
   word3_muladd(&w0, &w2, &w1, x[13], y[9]);
2057
119k
   word3_muladd(&w0, &w2, &w1, x[14], y[8]);
2058
119k
   word3_muladd(&w0, &w2, &w1, x[15], y[7]);
2059
119k
   word3_muladd(&w0, &w2, &w1, x[16], y[6]);
2060
119k
   word3_muladd(&w0, &w2, &w1, x[17], y[5]);
2061
119k
   word3_muladd(&w0, &w2, &w1, x[18], y[4]);
2062
119k
   word3_muladd(&w0, &w2, &w1, x[19], y[3]);
2063
119k
   word3_muladd(&w0, &w2, &w1, x[20], y[2]);
2064
119k
   word3_muladd(&w0, &w2, &w1, x[21], y[1]);
2065
119k
   word3_muladd(&w0, &w2, &w1, x[22], y[0]);
2066
119k
   z[22] = w1;
2067
119k
   w1 = 0;
2068
2069
119k
   word3_muladd(&w1, &w0, &w2, x[0], y[23]);
2070
119k
   word3_muladd(&w1, &w0, &w2, x[1], y[22]);
2071
119k
   word3_muladd(&w1, &w0, &w2, x[2], y[21]);
2072
119k
   word3_muladd(&w1, &w0, &w2, x[3], y[20]);
2073
119k
   word3_muladd(&w1, &w0, &w2, x[4], y[19]);
2074
119k
   word3_muladd(&w1, &w0, &w2, x[5], y[18]);
2075
119k
   word3_muladd(&w1, &w0, &w2, x[6], y[17]);
2076
119k
   word3_muladd(&w1, &w0, &w2, x[7], y[16]);
2077
119k
   word3_muladd(&w1, &w0, &w2, x[8], y[15]);
2078
119k
   word3_muladd(&w1, &w0, &w2, x[9], y[14]);
2079
119k
   word3_muladd(&w1, &w0, &w2, x[10], y[13]);
2080
119k
   word3_muladd(&w1, &w0, &w2, x[11], y[12]);
2081
119k
   word3_muladd(&w1, &w0, &w2, x[12], y[11]);
2082
119k
   word3_muladd(&w1, &w0, &w2, x[13], y[10]);
2083
119k
   word3_muladd(&w1, &w0, &w2, x[14], y[9]);
2084
119k
   word3_muladd(&w1, &w0, &w2, x[15], y[8]);
2085
119k
   word3_muladd(&w1, &w0, &w2, x[16], y[7]);
2086
119k
   word3_muladd(&w1, &w0, &w2, x[17], y[6]);
2087
119k
   word3_muladd(&w1, &w0, &w2, x[18], y[5]);
2088
119k
   word3_muladd(&w1, &w0, &w2, x[19], y[4]);
2089
119k
   word3_muladd(&w1, &w0, &w2, x[20], y[3]);
2090
119k
   word3_muladd(&w1, &w0, &w2, x[21], y[2]);
2091
119k
   word3_muladd(&w1, &w0, &w2, x[22], y[1]);
2092
119k
   word3_muladd(&w1, &w0, &w2, x[23], y[0]);
2093
119k
   z[23] = w2;
2094
119k
   w2 = 0;
2095
2096
119k
   word3_muladd(&w2, &w1, &w0, x[1], y[23]);
2097
119k
   word3_muladd(&w2, &w1, &w0, x[2], y[22]);
2098
119k
   word3_muladd(&w2, &w1, &w0, x[3], y[21]);
2099
119k
   word3_muladd(&w2, &w1, &w0, x[4], y[20]);
2100
119k
   word3_muladd(&w2, &w1, &w0, x[5], y[19]);
2101
119k
   word3_muladd(&w2, &w1, &w0, x[6], y[18]);
2102
119k
   word3_muladd(&w2, &w1, &w0, x[7], y[17]);
2103
119k
   word3_muladd(&w2, &w1, &w0, x[8], y[16]);
2104
119k
   word3_muladd(&w2, &w1, &w0, x[9], y[15]);
2105
119k
   word3_muladd(&w2, &w1, &w0, x[10], y[14]);
2106
119k
   word3_muladd(&w2, &w1, &w0, x[11], y[13]);
2107
119k
   word3_muladd(&w2, &w1, &w0, x[12], y[12]);
2108
119k
   word3_muladd(&w2, &w1, &w0, x[13], y[11]);
2109
119k
   word3_muladd(&w2, &w1, &w0, x[14], y[10]);
2110
119k
   word3_muladd(&w2, &w1, &w0, x[15], y[9]);
2111
119k
   word3_muladd(&w2, &w1, &w0, x[16], y[8]);
2112
119k
   word3_muladd(&w2, &w1, &w0, x[17], y[7]);
2113
119k
   word3_muladd(&w2, &w1, &w0, x[18], y[6]);
2114
119k
   word3_muladd(&w2, &w1, &w0, x[19], y[5]);
2115
119k
   word3_muladd(&w2, &w1, &w0, x[20], y[4]);
2116
119k
   word3_muladd(&w2, &w1, &w0, x[21], y[3]);
2117
119k
   word3_muladd(&w2, &w1, &w0, x[22], y[2]);
2118
119k
   word3_muladd(&w2, &w1, &w0, x[23], y[1]);
2119
119k
   z[24] = w0;
2120
119k
   w0 = 0;
2121
2122
119k
   word3_muladd(&w0, &w2, &w1, x[2], y[23]);
2123
119k
   word3_muladd(&w0, &w2, &w1, x[3], y[22]);
2124
119k
   word3_muladd(&w0, &w2, &w1, x[4], y[21]);
2125
119k
   word3_muladd(&w0, &w2, &w1, x[5], y[20]);
2126
119k
   word3_muladd(&w0, &w2, &w1, x[6], y[19]);
2127
119k
   word3_muladd(&w0, &w2, &w1, x[7], y[18]);
2128
119k
   word3_muladd(&w0, &w2, &w1, x[8], y[17]);
2129
119k
   word3_muladd(&w0, &w2, &w1, x[9], y[16]);
2130
119k
   word3_muladd(&w0, &w2, &w1, x[10], y[15]);
2131
119k
   word3_muladd(&w0, &w2, &w1, x[11], y[14]);
2132
119k
   word3_muladd(&w0, &w2, &w1, x[12], y[13]);
2133
119k
   word3_muladd(&w0, &w2, &w1, x[13], y[12]);
2134
119k
   word3_muladd(&w0, &w2, &w1, x[14], y[11]);
2135
119k
   word3_muladd(&w0, &w2, &w1, x[15], y[10]);
2136
119k
   word3_muladd(&w0, &w2, &w1, x[16], y[9]);
2137
119k
   word3_muladd(&w0, &w2, &w1, x[17], y[8]);
2138
119k
   word3_muladd(&w0, &w2, &w1, x[18], y[7]);
2139
119k
   word3_muladd(&w0, &w2, &w1, x[19], y[6]);
2140
119k
   word3_muladd(&w0, &w2, &w1, x[20], y[5]);
2141
119k
   word3_muladd(&w0, &w2, &w1, x[21], y[4]);
2142
119k
   word3_muladd(&w0, &w2, &w1, x[22], y[3]);
2143
119k
   word3_muladd(&w0, &w2, &w1, x[23], y[2]);
2144
119k
   z[25] = w1;
2145
119k
   w1 = 0;
2146
2147
119k
   word3_muladd(&w1, &w0, &w2, x[3], y[23]);
2148
119k
   word3_muladd(&w1, &w0, &w2, x[4], y[22]);
2149
119k
   word3_muladd(&w1, &w0, &w2, x[5], y[21]);
2150
119k
   word3_muladd(&w1, &w0, &w2, x[6], y[20]);
2151
119k
   word3_muladd(&w1, &w0, &w2, x[7], y[19]);
2152
119k
   word3_muladd(&w1, &w0, &w2, x[8], y[18]);
2153
119k
   word3_muladd(&w1, &w0, &w2, x[9], y[17]);
2154
119k
   word3_muladd(&w1, &w0, &w2, x[10], y[16]);
2155
119k
   word3_muladd(&w1, &w0, &w2, x[11], y[15]);
2156
119k
   word3_muladd(&w1, &w0, &w2, x[12], y[14]);
2157
119k
   word3_muladd(&w1, &w0, &w2, x[13], y[13]);
2158
119k
   word3_muladd(&w1, &w0, &w2, x[14], y[12]);
2159
119k
   word3_muladd(&w1, &w0, &w2, x[15], y[11]);
2160
119k
   word3_muladd(&w1, &w0, &w2, x[16], y[10]);
2161
119k
   word3_muladd(&w1, &w0, &w2, x[17], y[9]);
2162
119k
   word3_muladd(&w1, &w0, &w2, x[18], y[8]);
2163
119k
   word3_muladd(&w1, &w0, &w2, x[19], y[7]);
2164
119k
   word3_muladd(&w1, &w0, &w2, x[20], y[6]);
2165
119k
   word3_muladd(&w1, &w0, &w2, x[21], y[5]);
2166
119k
   word3_muladd(&w1, &w0, &w2, x[22], y[4]);
2167
119k
   word3_muladd(&w1, &w0, &w2, x[23], y[3]);
2168
119k
   z[26] = w2;
2169
119k
   w2 = 0;
2170
2171
119k
   word3_muladd(&w2, &w1, &w0, x[4], y[23]);
2172
119k
   word3_muladd(&w2, &w1, &w0, x[5], y[22]);
2173
119k
   word3_muladd(&w2, &w1, &w0, x[6], y[21]);
2174
119k
   word3_muladd(&w2, &w1, &w0, x[7], y[20]);
2175
119k
   word3_muladd(&w2, &w1, &w0, x[8], y[19]);
2176
119k
   word3_muladd(&w2, &w1, &w0, x[9], y[18]);
2177
119k
   word3_muladd(&w2, &w1, &w0, x[10], y[17]);
2178
119k
   word3_muladd(&w2, &w1, &w0, x[11], y[16]);
2179
119k
   word3_muladd(&w2, &w1, &w0, x[12], y[15]);
2180
119k
   word3_muladd(&w2, &w1, &w0, x[13], y[14]);
2181
119k
   word3_muladd(&w2, &w1, &w0, x[14], y[13]);
2182
119k
   word3_muladd(&w2, &w1, &w0, x[15], y[12]);
2183
119k
   word3_muladd(&w2, &w1, &w0, x[16], y[11]);
2184
119k
   word3_muladd(&w2, &w1, &w0, x[17], y[10]);
2185
119k
   word3_muladd(&w2, &w1, &w0, x[18], y[9]);
2186
119k
   word3_muladd(&w2, &w1, &w0, x[19], y[8]);
2187
119k
   word3_muladd(&w2, &w1, &w0, x[20], y[7]);
2188
119k
   word3_muladd(&w2, &w1, &w0, x[21], y[6]);
2189
119k
   word3_muladd(&w2, &w1, &w0, x[22], y[5]);
2190
119k
   word3_muladd(&w2, &w1, &w0, x[23], y[4]);
2191
119k
   z[27] = w0;
2192
119k
   w0 = 0;
2193
2194
119k
   word3_muladd(&w0, &w2, &w1, x[5], y[23]);
2195
119k
   word3_muladd(&w0, &w2, &w1, x[6], y[22]);
2196
119k
   word3_muladd(&w0, &w2, &w1, x[7], y[21]);
2197
119k
   word3_muladd(&w0, &w2, &w1, x[8], y[20]);
2198
119k
   word3_muladd(&w0, &w2, &w1, x[9], y[19]);
2199
119k
   word3_muladd(&w0, &w2, &w1, x[10], y[18]);
2200
119k
   word3_muladd(&w0, &w2, &w1, x[11], y[17]);
2201
119k
   word3_muladd(&w0, &w2, &w1, x[12], y[16]);
2202
119k
   word3_muladd(&w0, &w2, &w1, x[13], y[15]);
2203
119k
   word3_muladd(&w0, &w2, &w1, x[14], y[14]);
2204
119k
   word3_muladd(&w0, &w2, &w1, x[15], y[13]);
2205
119k
   word3_muladd(&w0, &w2, &w1, x[16], y[12]);
2206
119k
   word3_muladd(&w0, &w2, &w1, x[17], y[11]);
2207
119k
   word3_muladd(&w0, &w2, &w1, x[18], y[10]);
2208
119k
   word3_muladd(&w0, &w2, &w1, x[19], y[9]);
2209
119k
   word3_muladd(&w0, &w2, &w1, x[20], y[8]);
2210
119k
   word3_muladd(&w0, &w2, &w1, x[21], y[7]);
2211
119k
   word3_muladd(&w0, &w2, &w1, x[22], y[6]);
2212
119k
   word3_muladd(&w0, &w2, &w1, x[23], y[5]);
2213
119k
   z[28] = w1;
2214
119k
   w1 = 0;
2215
2216
119k
   word3_muladd(&w1, &w0, &w2, x[6], y[23]);
2217
119k
   word3_muladd(&w1, &w0, &w2, x[7], y[22]);
2218
119k
   word3_muladd(&w1, &w0, &w2, x[8], y[21]);
2219
119k
   word3_muladd(&w1, &w0, &w2, x[9], y[20]);
2220
119k
   word3_muladd(&w1, &w0, &w2, x[10], y[19]);
2221
119k
   word3_muladd(&w1, &w0, &w2, x[11], y[18]);
2222
119k
   word3_muladd(&w1, &w0, &w2, x[12], y[17]);
2223
119k
   word3_muladd(&w1, &w0, &w2, x[13], y[16]);
2224
119k
   word3_muladd(&w1, &w0, &w2, x[14], y[15]);
2225
119k
   word3_muladd(&w1, &w0, &w2, x[15], y[14]);
2226
119k
   word3_muladd(&w1, &w0, &w2, x[16], y[13]);
2227
119k
   word3_muladd(&w1, &w0, &w2, x[17], y[12]);
2228
119k
   word3_muladd(&w1, &w0, &w2, x[18], y[11]);
2229
119k
   word3_muladd(&w1, &w0, &w2, x[19], y[10]);
2230
119k
   word3_muladd(&w1, &w0, &w2, x[20], y[9]);
2231
119k
   word3_muladd(&w1, &w0, &w2, x[21], y[8]);
2232
119k
   word3_muladd(&w1, &w0, &w2, x[22], y[7]);
2233
119k
   word3_muladd(&w1, &w0, &w2, x[23], y[6]);
2234
119k
   z[29] = w2;
2235
119k
   w2 = 0;
2236
2237
119k
   word3_muladd(&w2, &w1, &w0, x[7], y[23]);
2238
119k
   word3_muladd(&w2, &w1, &w0, x[8], y[22]);
2239
119k
   word3_muladd(&w2, &w1, &w0, x[9], y[21]);
2240
119k
   word3_muladd(&w2, &w1, &w0, x[10], y[20]);
2241
119k
   word3_muladd(&w2, &w1, &w0, x[11], y[19]);
2242
119k
   word3_muladd(&w2, &w1, &w0, x[12], y[18]);
2243
119k
   word3_muladd(&w2, &w1, &w0, x[13], y[17]);
2244
119k
   word3_muladd(&w2, &w1, &w0, x[14], y[16]);
2245
119k
   word3_muladd(&w2, &w1, &w0, x[15], y[15]);
2246
119k
   word3_muladd(&w2, &w1, &w0, x[16], y[14]);
2247
119k
   word3_muladd(&w2, &w1, &w0, x[17], y[13]);
2248
119k
   word3_muladd(&w2, &w1, &w0, x[18], y[12]);
2249
119k
   word3_muladd(&w2, &w1, &w0, x[19], y[11]);
2250
119k
   word3_muladd(&w2, &w1, &w0, x[20], y[10]);
2251
119k
   word3_muladd(&w2, &w1, &w0, x[21], y[9]);
2252
119k
   word3_muladd(&w2, &w1, &w0, x[22], y[8]);
2253
119k
   word3_muladd(&w2, &w1, &w0, x[23], y[7]);
2254
119k
   z[30] = w0;
2255
119k
   w0 = 0;
2256
2257
119k
   word3_muladd(&w0, &w2, &w1, x[8], y[23]);
2258
119k
   word3_muladd(&w0, &w2, &w1, x[9], y[22]);
2259
119k
   word3_muladd(&w0, &w2, &w1, x[10], y[21]);
2260
119k
   word3_muladd(&w0, &w2, &w1, x[11], y[20]);
2261
119k
   word3_muladd(&w0, &w2, &w1, x[12], y[19]);
2262
119k
   word3_muladd(&w0, &w2, &w1, x[13], y[18]);
2263
119k
   word3_muladd(&w0, &w2, &w1, x[14], y[17]);
2264
119k
   word3_muladd(&w0, &w2, &w1, x[15], y[16]);
2265
119k
   word3_muladd(&w0, &w2, &w1, x[16], y[15]);
2266
119k
   word3_muladd(&w0, &w2, &w1, x[17], y[14]);
2267
119k
   word3_muladd(&w0, &w2, &w1, x[18], y[13]);
2268
119k
   word3_muladd(&w0, &w2, &w1, x[19], y[12]);
2269
119k
   word3_muladd(&w0, &w2, &w1, x[20], y[11]);
2270
119k
   word3_muladd(&w0, &w2, &w1, x[21], y[10]);
2271
119k
   word3_muladd(&w0, &w2, &w1, x[22], y[9]);
2272
119k
   word3_muladd(&w0, &w2, &w1, x[23], y[8]);
2273
119k
   z[31] = w1;
2274
119k
   w1 = 0;
2275
2276
119k
   word3_muladd(&w1, &w0, &w2, x[9], y[23]);
2277
119k
   word3_muladd(&w1, &w0, &w2, x[10], y[22]);
2278
119k
   word3_muladd(&w1, &w0, &w2, x[11], y[21]);
2279
119k
   word3_muladd(&w1, &w0, &w2, x[12], y[20]);
2280
119k
   word3_muladd(&w1, &w0, &w2, x[13], y[19]);
2281
119k
   word3_muladd(&w1, &w0, &w2, x[14], y[18]);
2282
119k
   word3_muladd(&w1, &w0, &w2, x[15], y[17]);
2283
119k
   word3_muladd(&w1, &w0, &w2, x[16], y[16]);
2284
119k
   word3_muladd(&w1, &w0, &w2, x[17], y[15]);
2285
119k
   word3_muladd(&w1, &w0, &w2, x[18], y[14]);
2286
119k
   word3_muladd(&w1, &w0, &w2, x[19], y[13]);
2287
119k
   word3_muladd(&w1, &w0, &w2, x[20], y[12]);
2288
119k
   word3_muladd(&w1, &w0, &w2, x[21], y[11]);
2289
119k
   word3_muladd(&w1, &w0, &w2, x[22], y[10]);
2290
119k
   word3_muladd(&w1, &w0, &w2, x[23], y[9]);
2291
119k
   z[32] = w2;
2292
119k
   w2 = 0;
2293
2294
119k
   word3_muladd(&w2, &w1, &w0, x[10], y[23]);
2295
119k
   word3_muladd(&w2, &w1, &w0, x[11], y[22]);
2296
119k
   word3_muladd(&w2, &w1, &w0, x[12], y[21]);
2297
119k
   word3_muladd(&w2, &w1, &w0, x[13], y[20]);
2298
119k
   word3_muladd(&w2, &w1, &w0, x[14], y[19]);
2299
119k
   word3_muladd(&w2, &w1, &w0, x[15], y[18]);
2300
119k
   word3_muladd(&w2, &w1, &w0, x[16], y[17]);
2301
119k
   word3_muladd(&w2, &w1, &w0, x[17], y[16]);
2302
119k
   word3_muladd(&w2, &w1, &w0, x[18], y[15]);
2303
119k
   word3_muladd(&w2, &w1, &w0, x[19], y[14]);
2304
119k
   word3_muladd(&w2, &w1, &w0, x[20], y[13]);
2305
119k
   word3_muladd(&w2, &w1, &w0, x[21], y[12]);
2306
119k
   word3_muladd(&w2, &w1, &w0, x[22], y[11]);
2307
119k
   word3_muladd(&w2, &w1, &w0, x[23], y[10]);
2308
119k
   z[33] = w0;
2309
119k
   w0 = 0;
2310
2311
119k
   word3_muladd(&w0, &w2, &w1, x[11], y[23]);
2312
119k
   word3_muladd(&w0, &w2, &w1, x[12], y[22]);
2313
119k
   word3_muladd(&w0, &w2, &w1, x[13], y[21]);
2314
119k
   word3_muladd(&w0, &w2, &w1, x[14], y[20]);
2315
119k
   word3_muladd(&w0, &w2, &w1, x[15], y[19]);
2316
119k
   word3_muladd(&w0, &w2, &w1, x[16], y[18]);
2317
119k
   word3_muladd(&w0, &w2, &w1, x[17], y[17]);
2318
119k
   word3_muladd(&w0, &w2, &w1, x[18], y[16]);
2319
119k
   word3_muladd(&w0, &w2, &w1, x[19], y[15]);
2320
119k
   word3_muladd(&w0, &w2, &w1, x[20], y[14]);
2321
119k
   word3_muladd(&w0, &w2, &w1, x[21], y[13]);
2322
119k
   word3_muladd(&w0, &w2, &w1, x[22], y[12]);
2323
119k
   word3_muladd(&w0, &w2, &w1, x[23], y[11]);
2324
119k
   z[34] = w1;
2325
119k
   w1 = 0;
2326
2327
119k
   word3_muladd(&w1, &w0, &w2, x[12], y[23]);
2328
119k
   word3_muladd(&w1, &w0, &w2, x[13], y[22]);
2329
119k
   word3_muladd(&w1, &w0, &w2, x[14], y[21]);
2330
119k
   word3_muladd(&w1, &w0, &w2, x[15], y[20]);
2331
119k
   word3_muladd(&w1, &w0, &w2, x[16], y[19]);
2332
119k
   word3_muladd(&w1, &w0, &w2, x[17], y[18]);
2333
119k
   word3_muladd(&w1, &w0, &w2, x[18], y[17]);
2334
119k
   word3_muladd(&w1, &w0, &w2, x[19], y[16]);
2335
119k
   word3_muladd(&w1, &w0, &w2, x[20], y[15]);
2336
119k
   word3_muladd(&w1, &w0, &w2, x[21], y[14]);
2337
119k
   word3_muladd(&w1, &w0, &w2, x[22], y[13]);
2338
119k
   word3_muladd(&w1, &w0, &w2, x[23], y[12]);
2339
119k
   z[35] = w2;
2340
119k
   w2 = 0;
2341
2342
119k
   word3_muladd(&w2, &w1, &w0, x[13], y[23]);
2343
119k
   word3_muladd(&w2, &w1, &w0, x[14], y[22]);
2344
119k
   word3_muladd(&w2, &w1, &w0, x[15], y[21]);
2345
119k
   word3_muladd(&w2, &w1, &w0, x[16], y[20]);
2346
119k
   word3_muladd(&w2, &w1, &w0, x[17], y[19]);
2347
119k
   word3_muladd(&w2, &w1, &w0, x[18], y[18]);
2348
119k
   word3_muladd(&w2, &w1, &w0, x[19], y[17]);
2349
119k
   word3_muladd(&w2, &w1, &w0, x[20], y[16]);
2350
119k
   word3_muladd(&w2, &w1, &w0, x[21], y[15]);
2351
119k
   word3_muladd(&w2, &w1, &w0, x[22], y[14]);
2352
119k
   word3_muladd(&w2, &w1, &w0, x[23], y[13]);
2353
119k
   z[36] = w0;
2354
119k
   w0 = 0;
2355
2356
119k
   word3_muladd(&w0, &w2, &w1, x[14], y[23]);
2357
119k
   word3_muladd(&w0, &w2, &w1, x[15], y[22]);
2358
119k
   word3_muladd(&w0, &w2, &w1, x[16], y[21]);
2359
119k
   word3_muladd(&w0, &w2, &w1, x[17], y[20]);
2360
119k
   word3_muladd(&w0, &w2, &w1, x[18], y[19]);
2361
119k
   word3_muladd(&w0, &w2, &w1, x[19], y[18]);
2362
119k
   word3_muladd(&w0, &w2, &w1, x[20], y[17]);
2363
119k
   word3_muladd(&w0, &w2, &w1, x[21], y[16]);
2364
119k
   word3_muladd(&w0, &w2, &w1, x[22], y[15]);
2365
119k
   word3_muladd(&w0, &w2, &w1, x[23], y[14]);
2366
119k
   z[37] = w1;
2367
119k
   w1 = 0;
2368
2369
119k
   word3_muladd(&w1, &w0, &w2, x[15], y[23]);
2370
119k
   word3_muladd(&w1, &w0, &w2, x[16], y[22]);
2371
119k
   word3_muladd(&w1, &w0, &w2, x[17], y[21]);
2372
119k
   word3_muladd(&w1, &w0, &w2, x[18], y[20]);
2373
119k
   word3_muladd(&w1, &w0, &w2, x[19], y[19]);
2374
119k
   word3_muladd(&w1, &w0, &w2, x[20], y[18]);
2375
119k
   word3_muladd(&w1, &w0, &w2, x[21], y[17]);
2376
119k
   word3_muladd(&w1, &w0, &w2, x[22], y[16]);
2377
119k
   word3_muladd(&w1, &w0, &w2, x[23], y[15]);
2378
119k
   z[38] = w2;
2379
119k
   w2 = 0;
2380
2381
119k
   word3_muladd(&w2, &w1, &w0, x[16], y[23]);
2382
119k
   word3_muladd(&w2, &w1, &w0, x[17], y[22]);
2383
119k
   word3_muladd(&w2, &w1, &w0, x[18], y[21]);
2384
119k
   word3_muladd(&w2, &w1, &w0, x[19], y[20]);
2385
119k
   word3_muladd(&w2, &w1, &w0, x[20], y[19]);
2386
119k
   word3_muladd(&w2, &w1, &w0, x[21], y[18]);
2387
119k
   word3_muladd(&w2, &w1, &w0, x[22], y[17]);
2388
119k
   word3_muladd(&w2, &w1, &w0, x[23], y[16]);
2389
119k
   z[39] = w0;
2390
119k
   w0 = 0;
2391
2392
119k
   word3_muladd(&w0, &w2, &w1, x[17], y[23]);
2393
119k
   word3_muladd(&w0, &w2, &w1, x[18], y[22]);
2394
119k
   word3_muladd(&w0, &w2, &w1, x[19], y[21]);
2395
119k
   word3_muladd(&w0, &w2, &w1, x[20], y[20]);
2396
119k
   word3_muladd(&w0, &w2, &w1, x[21], y[19]);
2397
119k
   word3_muladd(&w0, &w2, &w1, x[22], y[18]);
2398
119k
   word3_muladd(&w0, &w2, &w1, x[23], y[17]);
2399
119k
   z[40] = w1;
2400
119k
   w1 = 0;
2401
2402
119k
   word3_muladd(&w1, &w0, &w2, x[18], y[23]);
2403
119k
   word3_muladd(&w1, &w0, &w2, x[19], y[22]);
2404
119k
   word3_muladd(&w1, &w0, &w2, x[20], y[21]);
2405
119k
   word3_muladd(&w1, &w0, &w2, x[21], y[20]);
2406
119k
   word3_muladd(&w1, &w0, &w2, x[22], y[19]);
2407
119k
   word3_muladd(&w1, &w0, &w2, x[23], y[18]);
2408
119k
   z[41] = w2;
2409
119k
   w2 = 0;
2410
2411
119k
   word3_muladd(&w2, &w1, &w0, x[19], y[23]);
2412
119k
   word3_muladd(&w2, &w1, &w0, x[20], y[22]);
2413
119k
   word3_muladd(&w2, &w1, &w0, x[21], y[21]);
2414
119k
   word3_muladd(&w2, &w1, &w0, x[22], y[20]);
2415
119k
   word3_muladd(&w2, &w1, &w0, x[23], y[19]);
2416
119k
   z[42] = w0;
2417
119k
   w0 = 0;
2418
2419
119k
   word3_muladd(&w0, &w2, &w1, x[20], y[23]);
2420
119k
   word3_muladd(&w0, &w2, &w1, x[21], y[22]);
2421
119k
   word3_muladd(&w0, &w2, &w1, x[22], y[21]);
2422
119k
   word3_muladd(&w0, &w2, &w1, x[23], y[20]);
2423
119k
   z[43] = w1;
2424
119k
   w1 = 0;
2425
2426
119k
   word3_muladd(&w1, &w0, &w2, x[21], y[23]);
2427
119k
   word3_muladd(&w1, &w0, &w2, x[22], y[22]);
2428
119k
   word3_muladd(&w1, &w0, &w2, x[23], y[21]);
2429
119k
   z[44] = w2;
2430
119k
   w2 = 0;
2431
2432
119k
   word3_muladd(&w2, &w1, &w0, x[22], y[23]);
2433
119k
   word3_muladd(&w2, &w1, &w0, x[23], y[22]);
2434
119k
   z[45] = w0;
2435
119k
   w0 = 0;
2436
2437
119k
   word3_muladd(&w0, &w2, &w1, x[23], y[23]);
2438
119k
   z[46] = w1;
2439
119k
   z[47] = w2;
2440
119k
}
2441
2442
}  // namespace Botan