Coverage Report

Created: 2023-06-07 06:59

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