Coverage Report

Created: 2023-09-25 06:34

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