Coverage Report

Created: 2026-04-28 06:26

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