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
30
void bigint_comba_mul4(word z[8], const word x[4], const word y[4]) {
55
30
   word w2 = 0, w1 = 0, w0 = 0;
56
57
30
   word3_muladd(&w2, &w1, &w0, x[0], y[0]);
58
30
   z[0] = w0;
59
30
   w0 = 0;
60
61
30
   word3_muladd(&w0, &w2, &w1, x[0], y[1]);
62
30
   word3_muladd(&w0, &w2, &w1, x[1], y[0]);
63
30
   z[1] = w1;
64
30
   w1 = 0;
65
66
30
   word3_muladd(&w1, &w0, &w2, x[0], y[2]);
67
30
   word3_muladd(&w1, &w0, &w2, x[1], y[1]);
68
30
   word3_muladd(&w1, &w0, &w2, x[2], y[0]);
69
30
   z[2] = w2;
70
30
   w2 = 0;
71
72
30
   word3_muladd(&w2, &w1, &w0, x[0], y[3]);
73
30
   word3_muladd(&w2, &w1, &w0, x[1], y[2]);
74
30
   word3_muladd(&w2, &w1, &w0, x[2], y[1]);
75
30
   word3_muladd(&w2, &w1, &w0, x[3], y[0]);
76
30
   z[3] = w0;
77
30
   w0 = 0;
78
79
30
   word3_muladd(&w0, &w2, &w1, x[1], y[3]);
80
30
   word3_muladd(&w0, &w2, &w1, x[2], y[2]);
81
30
   word3_muladd(&w0, &w2, &w1, x[3], y[1]);
82
30
   z[4] = w1;
83
30
   w1 = 0;
84
85
30
   word3_muladd(&w1, &w0, &w2, x[2], y[3]);
86
30
   word3_muladd(&w1, &w0, &w2, x[3], y[2]);
87
30
   z[5] = w2;
88
30
   w2 = 0;
89
90
30
   word3_muladd(&w2, &w1, &w0, x[3], y[3]);
91
30
   z[6] = w0;
92
30
   z[7] = w1;
93
30
}
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
36
void bigint_comba_mul6(word z[12], const word x[6], const word y[6]) {
160
36
   word w2 = 0, w1 = 0, w0 = 0;
161
162
36
   word3_muladd(&w2, &w1, &w0, x[0], y[0]);
163
36
   z[0] = w0;
164
36
   w0 = 0;
165
166
36
   word3_muladd(&w0, &w2, &w1, x[0], y[1]);
167
36
   word3_muladd(&w0, &w2, &w1, x[1], y[0]);
168
36
   z[1] = w1;
169
36
   w1 = 0;
170
171
36
   word3_muladd(&w1, &w0, &w2, x[0], y[2]);
172
36
   word3_muladd(&w1, &w0, &w2, x[1], y[1]);
173
36
   word3_muladd(&w1, &w0, &w2, x[2], y[0]);
174
36
   z[2] = w2;
175
36
   w2 = 0;
176
177
36
   word3_muladd(&w2, &w1, &w0, x[0], y[3]);
178
36
   word3_muladd(&w2, &w1, &w0, x[1], y[2]);
179
36
   word3_muladd(&w2, &w1, &w0, x[2], y[1]);
180
36
   word3_muladd(&w2, &w1, &w0, x[3], y[0]);
181
36
   z[3] = w0;
182
36
   w0 = 0;
183
184
36
   word3_muladd(&w0, &w2, &w1, x[0], y[4]);
185
36
   word3_muladd(&w0, &w2, &w1, x[1], y[3]);
186
36
   word3_muladd(&w0, &w2, &w1, x[2], y[2]);
187
36
   word3_muladd(&w0, &w2, &w1, x[3], y[1]);
188
36
   word3_muladd(&w0, &w2, &w1, x[4], y[0]);
189
36
   z[4] = w1;
190
36
   w1 = 0;
191
192
36
   word3_muladd(&w1, &w0, &w2, x[0], y[5]);
193
36
   word3_muladd(&w1, &w0, &w2, x[1], y[4]);
194
36
   word3_muladd(&w1, &w0, &w2, x[2], y[3]);
195
36
   word3_muladd(&w1, &w0, &w2, x[3], y[2]);
196
36
   word3_muladd(&w1, &w0, &w2, x[4], y[1]);
197
36
   word3_muladd(&w1, &w0, &w2, x[5], y[0]);
198
36
   z[5] = w2;
199
36
   w2 = 0;
200
201
36
   word3_muladd(&w2, &w1, &w0, x[1], y[5]);
202
36
   word3_muladd(&w2, &w1, &w0, x[2], y[4]);
203
36
   word3_muladd(&w2, &w1, &w0, x[3], y[3]);
204
36
   word3_muladd(&w2, &w1, &w0, x[4], y[2]);
205
36
   word3_muladd(&w2, &w1, &w0, x[5], y[1]);
206
36
   z[6] = w0;
207
36
   w0 = 0;
208
209
36
   word3_muladd(&w0, &w2, &w1, x[2], y[5]);
210
36
   word3_muladd(&w0, &w2, &w1, x[3], y[4]);
211
36
   word3_muladd(&w0, &w2, &w1, x[4], y[3]);
212
36
   word3_muladd(&w0, &w2, &w1, x[5], y[2]);
213
36
   z[7] = w1;
214
36
   w1 = 0;
215
216
36
   word3_muladd(&w1, &w0, &w2, x[3], y[5]);
217
36
   word3_muladd(&w1, &w0, &w2, x[4], y[4]);
218
36
   word3_muladd(&w1, &w0, &w2, x[5], y[3]);
219
36
   z[8] = w2;
220
36
   w2 = 0;
221
222
36
   word3_muladd(&w2, &w1, &w0, x[4], y[5]);
223
36
   word3_muladd(&w2, &w1, &w0, x[5], y[4]);
224
36
   z[9] = w0;
225
36
   w0 = 0;
226
227
36
   word3_muladd(&w0, &w2, &w1, x[5], y[5]);
228
36
   z[10] = w1;
229
36
   z[11] = w2;
230
36
}
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
46
void bigint_comba_mul8(word z[16], const word x[8], const word y[8]) {
324
46
   word w2 = 0, w1 = 0, w0 = 0;
325
326
46
   word3_muladd(&w2, &w1, &w0, x[0], y[0]);
327
46
   z[0] = w0;
328
46
   w0 = 0;
329
330
46
   word3_muladd(&w0, &w2, &w1, x[0], y[1]);
331
46
   word3_muladd(&w0, &w2, &w1, x[1], y[0]);
332
46
   z[1] = w1;
333
46
   w1 = 0;
334
335
46
   word3_muladd(&w1, &w0, &w2, x[0], y[2]);
336
46
   word3_muladd(&w1, &w0, &w2, x[1], y[1]);
337
46
   word3_muladd(&w1, &w0, &w2, x[2], y[0]);
338
46
   z[2] = w2;
339
46
   w2 = 0;
340
341
46
   word3_muladd(&w2, &w1, &w0, x[0], y[3]);
342
46
   word3_muladd(&w2, &w1, &w0, x[1], y[2]);
343
46
   word3_muladd(&w2, &w1, &w0, x[2], y[1]);
344
46
   word3_muladd(&w2, &w1, &w0, x[3], y[0]);
345
46
   z[3] = w0;
346
46
   w0 = 0;
347
348
46
   word3_muladd(&w0, &w2, &w1, x[0], y[4]);
349
46
   word3_muladd(&w0, &w2, &w1, x[1], y[3]);
350
46
   word3_muladd(&w0, &w2, &w1, x[2], y[2]);
351
46
   word3_muladd(&w0, &w2, &w1, x[3], y[1]);
352
46
   word3_muladd(&w0, &w2, &w1, x[4], y[0]);
353
46
   z[4] = w1;
354
46
   w1 = 0;
355
356
46
   word3_muladd(&w1, &w0, &w2, x[0], y[5]);
357
46
   word3_muladd(&w1, &w0, &w2, x[1], y[4]);
358
46
   word3_muladd(&w1, &w0, &w2, x[2], y[3]);
359
46
   word3_muladd(&w1, &w0, &w2, x[3], y[2]);
360
46
   word3_muladd(&w1, &w0, &w2, x[4], y[1]);
361
46
   word3_muladd(&w1, &w0, &w2, x[5], y[0]);
362
46
   z[5] = w2;
363
46
   w2 = 0;
364
365
46
   word3_muladd(&w2, &w1, &w0, x[0], y[6]);
366
46
   word3_muladd(&w2, &w1, &w0, x[1], y[5]);
367
46
   word3_muladd(&w2, &w1, &w0, x[2], y[4]);
368
46
   word3_muladd(&w2, &w1, &w0, x[3], y[3]);
369
46
   word3_muladd(&w2, &w1, &w0, x[4], y[2]);
370
46
   word3_muladd(&w2, &w1, &w0, x[5], y[1]);
371
46
   word3_muladd(&w2, &w1, &w0, x[6], y[0]);
372
46
   z[6] = w0;
373
46
   w0 = 0;
374
375
46
   word3_muladd(&w0, &w2, &w1, x[0], y[7]);
376
46
   word3_muladd(&w0, &w2, &w1, x[1], y[6]);
377
46
   word3_muladd(&w0, &w2, &w1, x[2], y[5]);
378
46
   word3_muladd(&w0, &w2, &w1, x[3], y[4]);
379
46
   word3_muladd(&w0, &w2, &w1, x[4], y[3]);
380
46
   word3_muladd(&w0, &w2, &w1, x[5], y[2]);
381
46
   word3_muladd(&w0, &w2, &w1, x[6], y[1]);
382
46
   word3_muladd(&w0, &w2, &w1, x[7], y[0]);
383
46
   z[7] = w1;
384
46
   w1 = 0;
385
386
46
   word3_muladd(&w1, &w0, &w2, x[1], y[7]);
387
46
   word3_muladd(&w1, &w0, &w2, x[2], y[6]);
388
46
   word3_muladd(&w1, &w0, &w2, x[3], y[5]);
389
46
   word3_muladd(&w1, &w0, &w2, x[4], y[4]);
390
46
   word3_muladd(&w1, &w0, &w2, x[5], y[3]);
391
46
   word3_muladd(&w1, &w0, &w2, x[6], y[2]);
392
46
   word3_muladd(&w1, &w0, &w2, x[7], y[1]);
393
46
   z[8] = w2;
394
46
   w2 = 0;
395
396
46
   word3_muladd(&w2, &w1, &w0, x[2], y[7]);
397
46
   word3_muladd(&w2, &w1, &w0, x[3], y[6]);
398
46
   word3_muladd(&w2, &w1, &w0, x[4], y[5]);
399
46
   word3_muladd(&w2, &w1, &w0, x[5], y[4]);
400
46
   word3_muladd(&w2, &w1, &w0, x[6], y[3]);
401
46
   word3_muladd(&w2, &w1, &w0, x[7], y[2]);
402
46
   z[9] = w0;
403
46
   w0 = 0;
404
405
46
   word3_muladd(&w0, &w2, &w1, x[3], y[7]);
406
46
   word3_muladd(&w0, &w2, &w1, x[4], y[6]);
407
46
   word3_muladd(&w0, &w2, &w1, x[5], y[5]);
408
46
   word3_muladd(&w0, &w2, &w1, x[6], y[4]);
409
46
   word3_muladd(&w0, &w2, &w1, x[7], y[3]);
410
46
   z[10] = w1;
411
46
   w1 = 0;
412
413
46
   word3_muladd(&w1, &w0, &w2, x[4], y[7]);
414
46
   word3_muladd(&w1, &w0, &w2, x[5], y[6]);
415
46
   word3_muladd(&w1, &w0, &w2, x[6], y[5]);
416
46
   word3_muladd(&w1, &w0, &w2, x[7], y[4]);
417
46
   z[11] = w2;
418
46
   w2 = 0;
419
420
46
   word3_muladd(&w2, &w1, &w0, x[5], y[7]);
421
46
   word3_muladd(&w2, &w1, &w0, x[6], y[6]);
422
46
   word3_muladd(&w2, &w1, &w0, x[7], y[5]);
423
46
   z[12] = w0;
424
46
   w0 = 0;
425
426
46
   word3_muladd(&w0, &w2, &w1, x[6], y[7]);
427
46
   word3_muladd(&w0, &w2, &w1, x[7], y[6]);
428
46
   z[13] = w1;
429
46
   w1 = 0;
430
431
46
   word3_muladd(&w1, &w0, &w2, x[7], y[7]);
432
46
   z[14] = w2;
433
46
   z[15] = w0;
434
46
}
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
51
void bigint_comba_mul9(word z[18], const word x[9], const word y[9]) {
543
51
   word w2 = 0, w1 = 0, w0 = 0;
544
545
51
   word3_muladd(&w2, &w1, &w0, x[0], y[0]);
546
51
   z[0] = w0;
547
51
   w0 = 0;
548
549
51
   word3_muladd(&w0, &w2, &w1, x[0], y[1]);
550
51
   word3_muladd(&w0, &w2, &w1, x[1], y[0]);
551
51
   z[1] = w1;
552
51
   w1 = 0;
553
554
51
   word3_muladd(&w1, &w0, &w2, x[0], y[2]);
555
51
   word3_muladd(&w1, &w0, &w2, x[1], y[1]);
556
51
   word3_muladd(&w1, &w0, &w2, x[2], y[0]);
557
51
   z[2] = w2;
558
51
   w2 = 0;
559
560
51
   word3_muladd(&w2, &w1, &w0, x[0], y[3]);
561
51
   word3_muladd(&w2, &w1, &w0, x[1], y[2]);
562
51
   word3_muladd(&w2, &w1, &w0, x[2], y[1]);
563
51
   word3_muladd(&w2, &w1, &w0, x[3], y[0]);
564
51
   z[3] = w0;
565
51
   w0 = 0;
566
567
51
   word3_muladd(&w0, &w2, &w1, x[0], y[4]);
568
51
   word3_muladd(&w0, &w2, &w1, x[1], y[3]);
569
51
   word3_muladd(&w0, &w2, &w1, x[2], y[2]);
570
51
   word3_muladd(&w0, &w2, &w1, x[3], y[1]);
571
51
   word3_muladd(&w0, &w2, &w1, x[4], y[0]);
572
51
   z[4] = w1;
573
51
   w1 = 0;
574
575
51
   word3_muladd(&w1, &w0, &w2, x[0], y[5]);
576
51
   word3_muladd(&w1, &w0, &w2, x[1], y[4]);
577
51
   word3_muladd(&w1, &w0, &w2, x[2], y[3]);
578
51
   word3_muladd(&w1, &w0, &w2, x[3], y[2]);
579
51
   word3_muladd(&w1, &w0, &w2, x[4], y[1]);
580
51
   word3_muladd(&w1, &w0, &w2, x[5], y[0]);
581
51
   z[5] = w2;
582
51
   w2 = 0;
583
584
51
   word3_muladd(&w2, &w1, &w0, x[0], y[6]);
585
51
   word3_muladd(&w2, &w1, &w0, x[1], y[5]);
586
51
   word3_muladd(&w2, &w1, &w0, x[2], y[4]);
587
51
   word3_muladd(&w2, &w1, &w0, x[3], y[3]);
588
51
   word3_muladd(&w2, &w1, &w0, x[4], y[2]);
589
51
   word3_muladd(&w2, &w1, &w0, x[5], y[1]);
590
51
   word3_muladd(&w2, &w1, &w0, x[6], y[0]);
591
51
   z[6] = w0;
592
51
   w0 = 0;
593
594
51
   word3_muladd(&w0, &w2, &w1, x[0], y[7]);
595
51
   word3_muladd(&w0, &w2, &w1, x[1], y[6]);
596
51
   word3_muladd(&w0, &w2, &w1, x[2], y[5]);
597
51
   word3_muladd(&w0, &w2, &w1, x[3], y[4]);
598
51
   word3_muladd(&w0, &w2, &w1, x[4], y[3]);
599
51
   word3_muladd(&w0, &w2, &w1, x[5], y[2]);
600
51
   word3_muladd(&w0, &w2, &w1, x[6], y[1]);
601
51
   word3_muladd(&w0, &w2, &w1, x[7], y[0]);
602
51
   z[7] = w1;
603
51
   w1 = 0;
604
605
51
   word3_muladd(&w1, &w0, &w2, x[0], y[8]);
606
51
   word3_muladd(&w1, &w0, &w2, x[1], y[7]);
607
51
   word3_muladd(&w1, &w0, &w2, x[2], y[6]);
608
51
   word3_muladd(&w1, &w0, &w2, x[3], y[5]);
609
51
   word3_muladd(&w1, &w0, &w2, x[4], y[4]);
610
51
   word3_muladd(&w1, &w0, &w2, x[5], y[3]);
611
51
   word3_muladd(&w1, &w0, &w2, x[6], y[2]);
612
51
   word3_muladd(&w1, &w0, &w2, x[7], y[1]);
613
51
   word3_muladd(&w1, &w0, &w2, x[8], y[0]);
614
51
   z[8] = w2;
615
51
   w2 = 0;
616
617
51
   word3_muladd(&w2, &w1, &w0, x[1], y[8]);
618
51
   word3_muladd(&w2, &w1, &w0, x[2], y[7]);
619
51
   word3_muladd(&w2, &w1, &w0, x[3], y[6]);
620
51
   word3_muladd(&w2, &w1, &w0, x[4], y[5]);
621
51
   word3_muladd(&w2, &w1, &w0, x[5], y[4]);
622
51
   word3_muladd(&w2, &w1, &w0, x[6], y[3]);
623
51
   word3_muladd(&w2, &w1, &w0, x[7], y[2]);
624
51
   word3_muladd(&w2, &w1, &w0, x[8], y[1]);
625
51
   z[9] = w0;
626
51
   w0 = 0;
627
628
51
   word3_muladd(&w0, &w2, &w1, x[2], y[8]);
629
51
   word3_muladd(&w0, &w2, &w1, x[3], y[7]);
630
51
   word3_muladd(&w0, &w2, &w1, x[4], y[6]);
631
51
   word3_muladd(&w0, &w2, &w1, x[5], y[5]);
632
51
   word3_muladd(&w0, &w2, &w1, x[6], y[4]);
633
51
   word3_muladd(&w0, &w2, &w1, x[7], y[3]);
634
51
   word3_muladd(&w0, &w2, &w1, x[8], y[2]);
635
51
   z[10] = w1;
636
51
   w1 = 0;
637
638
51
   word3_muladd(&w1, &w0, &w2, x[3], y[8]);
639
51
   word3_muladd(&w1, &w0, &w2, x[4], y[7]);
640
51
   word3_muladd(&w1, &w0, &w2, x[5], y[6]);
641
51
   word3_muladd(&w1, &w0, &w2, x[6], y[5]);
642
51
   word3_muladd(&w1, &w0, &w2, x[7], y[4]);
643
51
   word3_muladd(&w1, &w0, &w2, x[8], y[3]);
644
51
   z[11] = w2;
645
51
   w2 = 0;
646
647
51
   word3_muladd(&w2, &w1, &w0, x[4], y[8]);
648
51
   word3_muladd(&w2, &w1, &w0, x[5], y[7]);
649
51
   word3_muladd(&w2, &w1, &w0, x[6], y[6]);
650
51
   word3_muladd(&w2, &w1, &w0, x[7], y[5]);
651
51
   word3_muladd(&w2, &w1, &w0, x[8], y[4]);
652
51
   z[12] = w0;
653
51
   w0 = 0;
654
655
51
   word3_muladd(&w0, &w2, &w1, x[5], y[8]);
656
51
   word3_muladd(&w0, &w2, &w1, x[6], y[7]);
657
51
   word3_muladd(&w0, &w2, &w1, x[7], y[6]);
658
51
   word3_muladd(&w0, &w2, &w1, x[8], y[5]);
659
51
   z[13] = w1;
660
51
   w1 = 0;
661
662
51
   word3_muladd(&w1, &w0, &w2, x[6], y[8]);
663
51
   word3_muladd(&w1, &w0, &w2, x[7], y[7]);
664
51
   word3_muladd(&w1, &w0, &w2, x[8], y[6]);
665
51
   z[14] = w2;
666
51
   w2 = 0;
667
668
51
   word3_muladd(&w2, &w1, &w0, x[7], y[8]);
669
51
   word3_muladd(&w2, &w1, &w0, x[8], y[7]);
670
51
   z[15] = w0;
671
51
   w0 = 0;
672
673
51
   word3_muladd(&w0, &w2, &w1, x[8], y[8]);
674
51
   z[16] = w1;
675
51
   z[17] = w2;
676
51
}
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
64
void bigint_comba_mul16(word z[32], const word x[16], const word y[16]) {
918
64
   word w2 = 0, w1 = 0, w0 = 0;
919
920
64
   word3_muladd(&w2, &w1, &w0, x[0], y[0]);
921
64
   z[0] = w0;
922
64
   w0 = 0;
923
924
64
   word3_muladd(&w0, &w2, &w1, x[0], y[1]);
925
64
   word3_muladd(&w0, &w2, &w1, x[1], y[0]);
926
64
   z[1] = w1;
927
64
   w1 = 0;
928
929
64
   word3_muladd(&w1, &w0, &w2, x[0], y[2]);
930
64
   word3_muladd(&w1, &w0, &w2, x[1], y[1]);
931
64
   word3_muladd(&w1, &w0, &w2, x[2], y[0]);
932
64
   z[2] = w2;
933
64
   w2 = 0;
934
935
64
   word3_muladd(&w2, &w1, &w0, x[0], y[3]);
936
64
   word3_muladd(&w2, &w1, &w0, x[1], y[2]);
937
64
   word3_muladd(&w2, &w1, &w0, x[2], y[1]);
938
64
   word3_muladd(&w2, &w1, &w0, x[3], y[0]);
939
64
   z[3] = w0;
940
64
   w0 = 0;
941
942
64
   word3_muladd(&w0, &w2, &w1, x[0], y[4]);
943
64
   word3_muladd(&w0, &w2, &w1, x[1], y[3]);
944
64
   word3_muladd(&w0, &w2, &w1, x[2], y[2]);
945
64
   word3_muladd(&w0, &w2, &w1, x[3], y[1]);
946
64
   word3_muladd(&w0, &w2, &w1, x[4], y[0]);
947
64
   z[4] = w1;
948
64
   w1 = 0;
949
950
64
   word3_muladd(&w1, &w0, &w2, x[0], y[5]);
951
64
   word3_muladd(&w1, &w0, &w2, x[1], y[4]);
952
64
   word3_muladd(&w1, &w0, &w2, x[2], y[3]);
953
64
   word3_muladd(&w1, &w0, &w2, x[3], y[2]);
954
64
   word3_muladd(&w1, &w0, &w2, x[4], y[1]);
955
64
   word3_muladd(&w1, &w0, &w2, x[5], y[0]);
956
64
   z[5] = w2;
957
64
   w2 = 0;
958
959
64
   word3_muladd(&w2, &w1, &w0, x[0], y[6]);
960
64
   word3_muladd(&w2, &w1, &w0, x[1], y[5]);
961
64
   word3_muladd(&w2, &w1, &w0, x[2], y[4]);
962
64
   word3_muladd(&w2, &w1, &w0, x[3], y[3]);
963
64
   word3_muladd(&w2, &w1, &w0, x[4], y[2]);
964
64
   word3_muladd(&w2, &w1, &w0, x[5], y[1]);
965
64
   word3_muladd(&w2, &w1, &w0, x[6], y[0]);
966
64
   z[6] = w0;
967
64
   w0 = 0;
968
969
64
   word3_muladd(&w0, &w2, &w1, x[0], y[7]);
970
64
   word3_muladd(&w0, &w2, &w1, x[1], y[6]);
971
64
   word3_muladd(&w0, &w2, &w1, x[2], y[5]);
972
64
   word3_muladd(&w0, &w2, &w1, x[3], y[4]);
973
64
   word3_muladd(&w0, &w2, &w1, x[4], y[3]);
974
64
   word3_muladd(&w0, &w2, &w1, x[5], y[2]);
975
64
   word3_muladd(&w0, &w2, &w1, x[6], y[1]);
976
64
   word3_muladd(&w0, &w2, &w1, x[7], y[0]);
977
64
   z[7] = w1;
978
64
   w1 = 0;
979
980
64
   word3_muladd(&w1, &w0, &w2, x[0], y[8]);
981
64
   word3_muladd(&w1, &w0, &w2, x[1], y[7]);
982
64
   word3_muladd(&w1, &w0, &w2, x[2], y[6]);
983
64
   word3_muladd(&w1, &w0, &w2, x[3], y[5]);
984
64
   word3_muladd(&w1, &w0, &w2, x[4], y[4]);
985
64
   word3_muladd(&w1, &w0, &w2, x[5], y[3]);
986
64
   word3_muladd(&w1, &w0, &w2, x[6], y[2]);
987
64
   word3_muladd(&w1, &w0, &w2, x[7], y[1]);
988
64
   word3_muladd(&w1, &w0, &w2, x[8], y[0]);
989
64
   z[8] = w2;
990
64
   w2 = 0;
991
992
64
   word3_muladd(&w2, &w1, &w0, x[0], y[9]);
993
64
   word3_muladd(&w2, &w1, &w0, x[1], y[8]);
994
64
   word3_muladd(&w2, &w1, &w0, x[2], y[7]);
995
64
   word3_muladd(&w2, &w1, &w0, x[3], y[6]);
996
64
   word3_muladd(&w2, &w1, &w0, x[4], y[5]);
997
64
   word3_muladd(&w2, &w1, &w0, x[5], y[4]);
998
64
   word3_muladd(&w2, &w1, &w0, x[6], y[3]);
999
64
   word3_muladd(&w2, &w1, &w0, x[7], y[2]);
1000
64
   word3_muladd(&w2, &w1, &w0, x[8], y[1]);
1001
64
   word3_muladd(&w2, &w1, &w0, x[9], y[0]);
1002
64
   z[9] = w0;
1003
64
   w0 = 0;
1004
1005
64
   word3_muladd(&w0, &w2, &w1, x[0], y[10]);
1006
64
   word3_muladd(&w0, &w2, &w1, x[1], y[9]);
1007
64
   word3_muladd(&w0, &w2, &w1, x[2], y[8]);
1008
64
   word3_muladd(&w0, &w2, &w1, x[3], y[7]);
1009
64
   word3_muladd(&w0, &w2, &w1, x[4], y[6]);
1010
64
   word3_muladd(&w0, &w2, &w1, x[5], y[5]);
1011
64
   word3_muladd(&w0, &w2, &w1, x[6], y[4]);
1012
64
   word3_muladd(&w0, &w2, &w1, x[7], y[3]);
1013
64
   word3_muladd(&w0, &w2, &w1, x[8], y[2]);
1014
64
   word3_muladd(&w0, &w2, &w1, x[9], y[1]);
1015
64
   word3_muladd(&w0, &w2, &w1, x[10], y[0]);
1016
64
   z[10] = w1;
1017
64
   w1 = 0;
1018
1019
64
   word3_muladd(&w1, &w0, &w2, x[0], y[11]);
1020
64
   word3_muladd(&w1, &w0, &w2, x[1], y[10]);
1021
64
   word3_muladd(&w1, &w0, &w2, x[2], y[9]);
1022
64
   word3_muladd(&w1, &w0, &w2, x[3], y[8]);
1023
64
   word3_muladd(&w1, &w0, &w2, x[4], y[7]);
1024
64
   word3_muladd(&w1, &w0, &w2, x[5], y[6]);
1025
64
   word3_muladd(&w1, &w0, &w2, x[6], y[5]);
1026
64
   word3_muladd(&w1, &w0, &w2, x[7], y[4]);
1027
64
   word3_muladd(&w1, &w0, &w2, x[8], y[3]);
1028
64
   word3_muladd(&w1, &w0, &w2, x[9], y[2]);
1029
64
   word3_muladd(&w1, &w0, &w2, x[10], y[1]);
1030
64
   word3_muladd(&w1, &w0, &w2, x[11], y[0]);
1031
64
   z[11] = w2;
1032
64
   w2 = 0;
1033
1034
64
   word3_muladd(&w2, &w1, &w0, x[0], y[12]);
1035
64
   word3_muladd(&w2, &w1, &w0, x[1], y[11]);
1036
64
   word3_muladd(&w2, &w1, &w0, x[2], y[10]);
1037
64
   word3_muladd(&w2, &w1, &w0, x[3], y[9]);
1038
64
   word3_muladd(&w2, &w1, &w0, x[4], y[8]);
1039
64
   word3_muladd(&w2, &w1, &w0, x[5], y[7]);
1040
64
   word3_muladd(&w2, &w1, &w0, x[6], y[6]);
1041
64
   word3_muladd(&w2, &w1, &w0, x[7], y[5]);
1042
64
   word3_muladd(&w2, &w1, &w0, x[8], y[4]);
1043
64
   word3_muladd(&w2, &w1, &w0, x[9], y[3]);
1044
64
   word3_muladd(&w2, &w1, &w0, x[10], y[2]);
1045
64
   word3_muladd(&w2, &w1, &w0, x[11], y[1]);
1046
64
   word3_muladd(&w2, &w1, &w0, x[12], y[0]);
1047
64
   z[12] = w0;
1048
64
   w0 = 0;
1049
1050
64
   word3_muladd(&w0, &w2, &w1, x[0], y[13]);
1051
64
   word3_muladd(&w0, &w2, &w1, x[1], y[12]);
1052
64
   word3_muladd(&w0, &w2, &w1, x[2], y[11]);
1053
64
   word3_muladd(&w0, &w2, &w1, x[3], y[10]);
1054
64
   word3_muladd(&w0, &w2, &w1, x[4], y[9]);
1055
64
   word3_muladd(&w0, &w2, &w1, x[5], y[8]);
1056
64
   word3_muladd(&w0, &w2, &w1, x[6], y[7]);
1057
64
   word3_muladd(&w0, &w2, &w1, x[7], y[6]);
1058
64
   word3_muladd(&w0, &w2, &w1, x[8], y[5]);
1059
64
   word3_muladd(&w0, &w2, &w1, x[9], y[4]);
1060
64
   word3_muladd(&w0, &w2, &w1, x[10], y[3]);
1061
64
   word3_muladd(&w0, &w2, &w1, x[11], y[2]);
1062
64
   word3_muladd(&w0, &w2, &w1, x[12], y[1]);
1063
64
   word3_muladd(&w0, &w2, &w1, x[13], y[0]);
1064
64
   z[13] = w1;
1065
64
   w1 = 0;
1066
1067
64
   word3_muladd(&w1, &w0, &w2, x[0], y[14]);
1068
64
   word3_muladd(&w1, &w0, &w2, x[1], y[13]);
1069
64
   word3_muladd(&w1, &w0, &w2, x[2], y[12]);
1070
64
   word3_muladd(&w1, &w0, &w2, x[3], y[11]);
1071
64
   word3_muladd(&w1, &w0, &w2, x[4], y[10]);
1072
64
   word3_muladd(&w1, &w0, &w2, x[5], y[9]);
1073
64
   word3_muladd(&w1, &w0, &w2, x[6], y[8]);
1074
64
   word3_muladd(&w1, &w0, &w2, x[7], y[7]);
1075
64
   word3_muladd(&w1, &w0, &w2, x[8], y[6]);
1076
64
   word3_muladd(&w1, &w0, &w2, x[9], y[5]);
1077
64
   word3_muladd(&w1, &w0, &w2, x[10], y[4]);
1078
64
   word3_muladd(&w1, &w0, &w2, x[11], y[3]);
1079
64
   word3_muladd(&w1, &w0, &w2, x[12], y[2]);
1080
64
   word3_muladd(&w1, &w0, &w2, x[13], y[1]);
1081
64
   word3_muladd(&w1, &w0, &w2, x[14], y[0]);
1082
64
   z[14] = w2;
1083
64
   w2 = 0;
1084
1085
64
   word3_muladd(&w2, &w1, &w0, x[0], y[15]);
1086
64
   word3_muladd(&w2, &w1, &w0, x[1], y[14]);
1087
64
   word3_muladd(&w2, &w1, &w0, x[2], y[13]);
1088
64
   word3_muladd(&w2, &w1, &w0, x[3], y[12]);
1089
64
   word3_muladd(&w2, &w1, &w0, x[4], y[11]);
1090
64
   word3_muladd(&w2, &w1, &w0, x[5], y[10]);
1091
64
   word3_muladd(&w2, &w1, &w0, x[6], y[9]);
1092
64
   word3_muladd(&w2, &w1, &w0, x[7], y[8]);
1093
64
   word3_muladd(&w2, &w1, &w0, x[8], y[7]);
1094
64
   word3_muladd(&w2, &w1, &w0, x[9], y[6]);
1095
64
   word3_muladd(&w2, &w1, &w0, x[10], y[5]);
1096
64
   word3_muladd(&w2, &w1, &w0, x[11], y[4]);
1097
64
   word3_muladd(&w2, &w1, &w0, x[12], y[3]);
1098
64
   word3_muladd(&w2, &w1, &w0, x[13], y[2]);
1099
64
   word3_muladd(&w2, &w1, &w0, x[14], y[1]);
1100
64
   word3_muladd(&w2, &w1, &w0, x[15], y[0]);
1101
64
   z[15] = w0;
1102
64
   w0 = 0;
1103
1104
64
   word3_muladd(&w0, &w2, &w1, x[1], y[15]);
1105
64
   word3_muladd(&w0, &w2, &w1, x[2], y[14]);
1106
64
   word3_muladd(&w0, &w2, &w1, x[3], y[13]);
1107
64
   word3_muladd(&w0, &w2, &w1, x[4], y[12]);
1108
64
   word3_muladd(&w0, &w2, &w1, x[5], y[11]);
1109
64
   word3_muladd(&w0, &w2, &w1, x[6], y[10]);
1110
64
   word3_muladd(&w0, &w2, &w1, x[7], y[9]);
1111
64
   word3_muladd(&w0, &w2, &w1, x[8], y[8]);
1112
64
   word3_muladd(&w0, &w2, &w1, x[9], y[7]);
1113
64
   word3_muladd(&w0, &w2, &w1, x[10], y[6]);
1114
64
   word3_muladd(&w0, &w2, &w1, x[11], y[5]);
1115
64
   word3_muladd(&w0, &w2, &w1, x[12], y[4]);
1116
64
   word3_muladd(&w0, &w2, &w1, x[13], y[3]);
1117
64
   word3_muladd(&w0, &w2, &w1, x[14], y[2]);
1118
64
   word3_muladd(&w0, &w2, &w1, x[15], y[1]);
1119
64
   z[16] = w1;
1120
64
   w1 = 0;
1121
1122
64
   word3_muladd(&w1, &w0, &w2, x[2], y[15]);
1123
64
   word3_muladd(&w1, &w0, &w2, x[3], y[14]);
1124
64
   word3_muladd(&w1, &w0, &w2, x[4], y[13]);
1125
64
   word3_muladd(&w1, &w0, &w2, x[5], y[12]);
1126
64
   word3_muladd(&w1, &w0, &w2, x[6], y[11]);
1127
64
   word3_muladd(&w1, &w0, &w2, x[7], y[10]);
1128
64
   word3_muladd(&w1, &w0, &w2, x[8], y[9]);
1129
64
   word3_muladd(&w1, &w0, &w2, x[9], y[8]);
1130
64
   word3_muladd(&w1, &w0, &w2, x[10], y[7]);
1131
64
   word3_muladd(&w1, &w0, &w2, x[11], y[6]);
1132
64
   word3_muladd(&w1, &w0, &w2, x[12], y[5]);
1133
64
   word3_muladd(&w1, &w0, &w2, x[13], y[4]);
1134
64
   word3_muladd(&w1, &w0, &w2, x[14], y[3]);
1135
64
   word3_muladd(&w1, &w0, &w2, x[15], y[2]);
1136
64
   z[17] = w2;
1137
64
   w2 = 0;
1138
1139
64
   word3_muladd(&w2, &w1, &w0, x[3], y[15]);
1140
64
   word3_muladd(&w2, &w1, &w0, x[4], y[14]);
1141
64
   word3_muladd(&w2, &w1, &w0, x[5], y[13]);
1142
64
   word3_muladd(&w2, &w1, &w0, x[6], y[12]);
1143
64
   word3_muladd(&w2, &w1, &w0, x[7], y[11]);
1144
64
   word3_muladd(&w2, &w1, &w0, x[8], y[10]);
1145
64
   word3_muladd(&w2, &w1, &w0, x[9], y[9]);
1146
64
   word3_muladd(&w2, &w1, &w0, x[10], y[8]);
1147
64
   word3_muladd(&w2, &w1, &w0, x[11], y[7]);
1148
64
   word3_muladd(&w2, &w1, &w0, x[12], y[6]);
1149
64
   word3_muladd(&w2, &w1, &w0, x[13], y[5]);
1150
64
   word3_muladd(&w2, &w1, &w0, x[14], y[4]);
1151
64
   word3_muladd(&w2, &w1, &w0, x[15], y[3]);
1152
64
   z[18] = w0;
1153
64
   w0 = 0;
1154
1155
64
   word3_muladd(&w0, &w2, &w1, x[4], y[15]);
1156
64
   word3_muladd(&w0, &w2, &w1, x[5], y[14]);
1157
64
   word3_muladd(&w0, &w2, &w1, x[6], y[13]);
1158
64
   word3_muladd(&w0, &w2, &w1, x[7], y[12]);
1159
64
   word3_muladd(&w0, &w2, &w1, x[8], y[11]);
1160
64
   word3_muladd(&w0, &w2, &w1, x[9], y[10]);
1161
64
   word3_muladd(&w0, &w2, &w1, x[10], y[9]);
1162
64
   word3_muladd(&w0, &w2, &w1, x[11], y[8]);
1163
64
   word3_muladd(&w0, &w2, &w1, x[12], y[7]);
1164
64
   word3_muladd(&w0, &w2, &w1, x[13], y[6]);
1165
64
   word3_muladd(&w0, &w2, &w1, x[14], y[5]);
1166
64
   word3_muladd(&w0, &w2, &w1, x[15], y[4]);
1167
64
   z[19] = w1;
1168
64
   w1 = 0;
1169
1170
64
   word3_muladd(&w1, &w0, &w2, x[5], y[15]);
1171
64
   word3_muladd(&w1, &w0, &w2, x[6], y[14]);
1172
64
   word3_muladd(&w1, &w0, &w2, x[7], y[13]);
1173
64
   word3_muladd(&w1, &w0, &w2, x[8], y[12]);
1174
64
   word3_muladd(&w1, &w0, &w2, x[9], y[11]);
1175
64
   word3_muladd(&w1, &w0, &w2, x[10], y[10]);
1176
64
   word3_muladd(&w1, &w0, &w2, x[11], y[9]);
1177
64
   word3_muladd(&w1, &w0, &w2, x[12], y[8]);
1178
64
   word3_muladd(&w1, &w0, &w2, x[13], y[7]);
1179
64
   word3_muladd(&w1, &w0, &w2, x[14], y[6]);
1180
64
   word3_muladd(&w1, &w0, &w2, x[15], y[5]);
1181
64
   z[20] = w2;
1182
64
   w2 = 0;
1183
1184
64
   word3_muladd(&w2, &w1, &w0, x[6], y[15]);
1185
64
   word3_muladd(&w2, &w1, &w0, x[7], y[14]);
1186
64
   word3_muladd(&w2, &w1, &w0, x[8], y[13]);
1187
64
   word3_muladd(&w2, &w1, &w0, x[9], y[12]);
1188
64
   word3_muladd(&w2, &w1, &w0, x[10], y[11]);
1189
64
   word3_muladd(&w2, &w1, &w0, x[11], y[10]);
1190
64
   word3_muladd(&w2, &w1, &w0, x[12], y[9]);
1191
64
   word3_muladd(&w2, &w1, &w0, x[13], y[8]);
1192
64
   word3_muladd(&w2, &w1, &w0, x[14], y[7]);
1193
64
   word3_muladd(&w2, &w1, &w0, x[15], y[6]);
1194
64
   z[21] = w0;
1195
64
   w0 = 0;
1196
1197
64
   word3_muladd(&w0, &w2, &w1, x[7], y[15]);
1198
64
   word3_muladd(&w0, &w2, &w1, x[8], y[14]);
1199
64
   word3_muladd(&w0, &w2, &w1, x[9], y[13]);
1200
64
   word3_muladd(&w0, &w2, &w1, x[10], y[12]);
1201
64
   word3_muladd(&w0, &w2, &w1, x[11], y[11]);
1202
64
   word3_muladd(&w0, &w2, &w1, x[12], y[10]);
1203
64
   word3_muladd(&w0, &w2, &w1, x[13], y[9]);
1204
64
   word3_muladd(&w0, &w2, &w1, x[14], y[8]);
1205
64
   word3_muladd(&w0, &w2, &w1, x[15], y[7]);
1206
64
   z[22] = w1;
1207
64
   w1 = 0;
1208
1209
64
   word3_muladd(&w1, &w0, &w2, x[8], y[15]);
1210
64
   word3_muladd(&w1, &w0, &w2, x[9], y[14]);
1211
64
   word3_muladd(&w1, &w0, &w2, x[10], y[13]);
1212
64
   word3_muladd(&w1, &w0, &w2, x[11], y[12]);
1213
64
   word3_muladd(&w1, &w0, &w2, x[12], y[11]);
1214
64
   word3_muladd(&w1, &w0, &w2, x[13], y[10]);
1215
64
   word3_muladd(&w1, &w0, &w2, x[14], y[9]);
1216
64
   word3_muladd(&w1, &w0, &w2, x[15], y[8]);
1217
64
   z[23] = w2;
1218
64
   w2 = 0;
1219
1220
64
   word3_muladd(&w2, &w1, &w0, x[9], y[15]);
1221
64
   word3_muladd(&w2, &w1, &w0, x[10], y[14]);
1222
64
   word3_muladd(&w2, &w1, &w0, x[11], y[13]);
1223
64
   word3_muladd(&w2, &w1, &w0, x[12], y[12]);
1224
64
   word3_muladd(&w2, &w1, &w0, x[13], y[11]);
1225
64
   word3_muladd(&w2, &w1, &w0, x[14], y[10]);
1226
64
   word3_muladd(&w2, &w1, &w0, x[15], y[9]);
1227
64
   z[24] = w0;
1228
64
   w0 = 0;
1229
1230
64
   word3_muladd(&w0, &w2, &w1, x[10], y[15]);
1231
64
   word3_muladd(&w0, &w2, &w1, x[11], y[14]);
1232
64
   word3_muladd(&w0, &w2, &w1, x[12], y[13]);
1233
64
   word3_muladd(&w0, &w2, &w1, x[13], y[12]);
1234
64
   word3_muladd(&w0, &w2, &w1, x[14], y[11]);
1235
64
   word3_muladd(&w0, &w2, &w1, x[15], y[10]);
1236
64
   z[25] = w1;
1237
64
   w1 = 0;
1238
1239
64
   word3_muladd(&w1, &w0, &w2, x[11], y[15]);
1240
64
   word3_muladd(&w1, &w0, &w2, x[12], y[14]);
1241
64
   word3_muladd(&w1, &w0, &w2, x[13], y[13]);
1242
64
   word3_muladd(&w1, &w0, &w2, x[14], y[12]);
1243
64
   word3_muladd(&w1, &w0, &w2, x[15], y[11]);
1244
64
   z[26] = w2;
1245
64
   w2 = 0;
1246
1247
64
   word3_muladd(&w2, &w1, &w0, x[12], y[15]);
1248
64
   word3_muladd(&w2, &w1, &w0, x[13], y[14]);
1249
64
   word3_muladd(&w2, &w1, &w0, x[14], y[13]);
1250
64
   word3_muladd(&w2, &w1, &w0, x[15], y[12]);
1251
64
   z[27] = w0;
1252
64
   w0 = 0;
1253
1254
64
   word3_muladd(&w0, &w2, &w1, x[13], y[15]);
1255
64
   word3_muladd(&w0, &w2, &w1, x[14], y[14]);
1256
64
   word3_muladd(&w0, &w2, &w1, x[15], y[13]);
1257
64
   z[28] = w1;
1258
64
   w1 = 0;
1259
1260
64
   word3_muladd(&w1, &w0, &w2, x[14], y[15]);
1261
64
   word3_muladd(&w1, &w0, &w2, x[15], y[14]);
1262
64
   z[29] = w2;
1263
64
   w2 = 0;
1264
1265
64
   word3_muladd(&w2, &w1, &w0, x[15], y[15]);
1266
64
   z[30] = w0;
1267
64
   z[31] = w1;
1268
64
}
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
64
void bigint_comba_mul24(word z[48], const word x[24], const word y[24]) {
1722
64
   word w2 = 0, w1 = 0, w0 = 0;
1723
1724
64
   word3_muladd(&w2, &w1, &w0, x[0], y[0]);
1725
64
   z[0] = w0;
1726
64
   w0 = 0;
1727
1728
64
   word3_muladd(&w0, &w2, &w1, x[0], y[1]);
1729
64
   word3_muladd(&w0, &w2, &w1, x[1], y[0]);
1730
64
   z[1] = w1;
1731
64
   w1 = 0;
1732
1733
64
   word3_muladd(&w1, &w0, &w2, x[0], y[2]);
1734
64
   word3_muladd(&w1, &w0, &w2, x[1], y[1]);
1735
64
   word3_muladd(&w1, &w0, &w2, x[2], y[0]);
1736
64
   z[2] = w2;
1737
64
   w2 = 0;
1738
1739
64
   word3_muladd(&w2, &w1, &w0, x[0], y[3]);
1740
64
   word3_muladd(&w2, &w1, &w0, x[1], y[2]);
1741
64
   word3_muladd(&w2, &w1, &w0, x[2], y[1]);
1742
64
   word3_muladd(&w2, &w1, &w0, x[3], y[0]);
1743
64
   z[3] = w0;
1744
64
   w0 = 0;
1745
1746
64
   word3_muladd(&w0, &w2, &w1, x[0], y[4]);
1747
64
   word3_muladd(&w0, &w2, &w1, x[1], y[3]);
1748
64
   word3_muladd(&w0, &w2, &w1, x[2], y[2]);
1749
64
   word3_muladd(&w0, &w2, &w1, x[3], y[1]);
1750
64
   word3_muladd(&w0, &w2, &w1, x[4], y[0]);
1751
64
   z[4] = w1;
1752
64
   w1 = 0;
1753
1754
64
   word3_muladd(&w1, &w0, &w2, x[0], y[5]);
1755
64
   word3_muladd(&w1, &w0, &w2, x[1], y[4]);
1756
64
   word3_muladd(&w1, &w0, &w2, x[2], y[3]);
1757
64
   word3_muladd(&w1, &w0, &w2, x[3], y[2]);
1758
64
   word3_muladd(&w1, &w0, &w2, x[4], y[1]);
1759
64
   word3_muladd(&w1, &w0, &w2, x[5], y[0]);
1760
64
   z[5] = w2;
1761
64
   w2 = 0;
1762
1763
64
   word3_muladd(&w2, &w1, &w0, x[0], y[6]);
1764
64
   word3_muladd(&w2, &w1, &w0, x[1], y[5]);
1765
64
   word3_muladd(&w2, &w1, &w0, x[2], y[4]);
1766
64
   word3_muladd(&w2, &w1, &w0, x[3], y[3]);
1767
64
   word3_muladd(&w2, &w1, &w0, x[4], y[2]);
1768
64
   word3_muladd(&w2, &w1, &w0, x[5], y[1]);
1769
64
   word3_muladd(&w2, &w1, &w0, x[6], y[0]);
1770
64
   z[6] = w0;
1771
64
   w0 = 0;
1772
1773
64
   word3_muladd(&w0, &w2, &w1, x[0], y[7]);
1774
64
   word3_muladd(&w0, &w2, &w1, x[1], y[6]);
1775
64
   word3_muladd(&w0, &w2, &w1, x[2], y[5]);
1776
64
   word3_muladd(&w0, &w2, &w1, x[3], y[4]);
1777
64
   word3_muladd(&w0, &w2, &w1, x[4], y[3]);
1778
64
   word3_muladd(&w0, &w2, &w1, x[5], y[2]);
1779
64
   word3_muladd(&w0, &w2, &w1, x[6], y[1]);
1780
64
   word3_muladd(&w0, &w2, &w1, x[7], y[0]);
1781
64
   z[7] = w1;
1782
64
   w1 = 0;
1783
1784
64
   word3_muladd(&w1, &w0, &w2, x[0], y[8]);
1785
64
   word3_muladd(&w1, &w0, &w2, x[1], y[7]);
1786
64
   word3_muladd(&w1, &w0, &w2, x[2], y[6]);
1787
64
   word3_muladd(&w1, &w0, &w2, x[3], y[5]);
1788
64
   word3_muladd(&w1, &w0, &w2, x[4], y[4]);
1789
64
   word3_muladd(&w1, &w0, &w2, x[5], y[3]);
1790
64
   word3_muladd(&w1, &w0, &w2, x[6], y[2]);
1791
64
   word3_muladd(&w1, &w0, &w2, x[7], y[1]);
1792
64
   word3_muladd(&w1, &w0, &w2, x[8], y[0]);
1793
64
   z[8] = w2;
1794
64
   w2 = 0;
1795
1796
64
   word3_muladd(&w2, &w1, &w0, x[0], y[9]);
1797
64
   word3_muladd(&w2, &w1, &w0, x[1], y[8]);
1798
64
   word3_muladd(&w2, &w1, &w0, x[2], y[7]);
1799
64
   word3_muladd(&w2, &w1, &w0, x[3], y[6]);
1800
64
   word3_muladd(&w2, &w1, &w0, x[4], y[5]);
1801
64
   word3_muladd(&w2, &w1, &w0, x[5], y[4]);
1802
64
   word3_muladd(&w2, &w1, &w0, x[6], y[3]);
1803
64
   word3_muladd(&w2, &w1, &w0, x[7], y[2]);
1804
64
   word3_muladd(&w2, &w1, &w0, x[8], y[1]);
1805
64
   word3_muladd(&w2, &w1, &w0, x[9], y[0]);
1806
64
   z[9] = w0;
1807
64
   w0 = 0;
1808
1809
64
   word3_muladd(&w0, &w2, &w1, x[0], y[10]);
1810
64
   word3_muladd(&w0, &w2, &w1, x[1], y[9]);
1811
64
   word3_muladd(&w0, &w2, &w1, x[2], y[8]);
1812
64
   word3_muladd(&w0, &w2, &w1, x[3], y[7]);
1813
64
   word3_muladd(&w0, &w2, &w1, x[4], y[6]);
1814
64
   word3_muladd(&w0, &w2, &w1, x[5], y[5]);
1815
64
   word3_muladd(&w0, &w2, &w1, x[6], y[4]);
1816
64
   word3_muladd(&w0, &w2, &w1, x[7], y[3]);
1817
64
   word3_muladd(&w0, &w2, &w1, x[8], y[2]);
1818
64
   word3_muladd(&w0, &w2, &w1, x[9], y[1]);
1819
64
   word3_muladd(&w0, &w2, &w1, x[10], y[0]);
1820
64
   z[10] = w1;
1821
64
   w1 = 0;
1822
1823
64
   word3_muladd(&w1, &w0, &w2, x[0], y[11]);
1824
64
   word3_muladd(&w1, &w0, &w2, x[1], y[10]);
1825
64
   word3_muladd(&w1, &w0, &w2, x[2], y[9]);
1826
64
   word3_muladd(&w1, &w0, &w2, x[3], y[8]);
1827
64
   word3_muladd(&w1, &w0, &w2, x[4], y[7]);
1828
64
   word3_muladd(&w1, &w0, &w2, x[5], y[6]);
1829
64
   word3_muladd(&w1, &w0, &w2, x[6], y[5]);
1830
64
   word3_muladd(&w1, &w0, &w2, x[7], y[4]);
1831
64
   word3_muladd(&w1, &w0, &w2, x[8], y[3]);
1832
64
   word3_muladd(&w1, &w0, &w2, x[9], y[2]);
1833
64
   word3_muladd(&w1, &w0, &w2, x[10], y[1]);
1834
64
   word3_muladd(&w1, &w0, &w2, x[11], y[0]);
1835
64
   z[11] = w2;
1836
64
   w2 = 0;
1837
1838
64
   word3_muladd(&w2, &w1, &w0, x[0], y[12]);
1839
64
   word3_muladd(&w2, &w1, &w0, x[1], y[11]);
1840
64
   word3_muladd(&w2, &w1, &w0, x[2], y[10]);
1841
64
   word3_muladd(&w2, &w1, &w0, x[3], y[9]);
1842
64
   word3_muladd(&w2, &w1, &w0, x[4], y[8]);
1843
64
   word3_muladd(&w2, &w1, &w0, x[5], y[7]);
1844
64
   word3_muladd(&w2, &w1, &w0, x[6], y[6]);
1845
64
   word3_muladd(&w2, &w1, &w0, x[7], y[5]);
1846
64
   word3_muladd(&w2, &w1, &w0, x[8], y[4]);
1847
64
   word3_muladd(&w2, &w1, &w0, x[9], y[3]);
1848
64
   word3_muladd(&w2, &w1, &w0, x[10], y[2]);
1849
64
   word3_muladd(&w2, &w1, &w0, x[11], y[1]);
1850
64
   word3_muladd(&w2, &w1, &w0, x[12], y[0]);
1851
64
   z[12] = w0;
1852
64
   w0 = 0;
1853
1854
64
   word3_muladd(&w0, &w2, &w1, x[0], y[13]);
1855
64
   word3_muladd(&w0, &w2, &w1, x[1], y[12]);
1856
64
   word3_muladd(&w0, &w2, &w1, x[2], y[11]);
1857
64
   word3_muladd(&w0, &w2, &w1, x[3], y[10]);
1858
64
   word3_muladd(&w0, &w2, &w1, x[4], y[9]);
1859
64
   word3_muladd(&w0, &w2, &w1, x[5], y[8]);
1860
64
   word3_muladd(&w0, &w2, &w1, x[6], y[7]);
1861
64
   word3_muladd(&w0, &w2, &w1, x[7], y[6]);
1862
64
   word3_muladd(&w0, &w2, &w1, x[8], y[5]);
1863
64
   word3_muladd(&w0, &w2, &w1, x[9], y[4]);
1864
64
   word3_muladd(&w0, &w2, &w1, x[10], y[3]);
1865
64
   word3_muladd(&w0, &w2, &w1, x[11], y[2]);
1866
64
   word3_muladd(&w0, &w2, &w1, x[12], y[1]);
1867
64
   word3_muladd(&w0, &w2, &w1, x[13], y[0]);
1868
64
   z[13] = w1;
1869
64
   w1 = 0;
1870
1871
64
   word3_muladd(&w1, &w0, &w2, x[0], y[14]);
1872
64
   word3_muladd(&w1, &w0, &w2, x[1], y[13]);
1873
64
   word3_muladd(&w1, &w0, &w2, x[2], y[12]);
1874
64
   word3_muladd(&w1, &w0, &w2, x[3], y[11]);
1875
64
   word3_muladd(&w1, &w0, &w2, x[4], y[10]);
1876
64
   word3_muladd(&w1, &w0, &w2, x[5], y[9]);
1877
64
   word3_muladd(&w1, &w0, &w2, x[6], y[8]);
1878
64
   word3_muladd(&w1, &w0, &w2, x[7], y[7]);
1879
64
   word3_muladd(&w1, &w0, &w2, x[8], y[6]);
1880
64
   word3_muladd(&w1, &w0, &w2, x[9], y[5]);
1881
64
   word3_muladd(&w1, &w0, &w2, x[10], y[4]);
1882
64
   word3_muladd(&w1, &w0, &w2, x[11], y[3]);
1883
64
   word3_muladd(&w1, &w0, &w2, x[12], y[2]);
1884
64
   word3_muladd(&w1, &w0, &w2, x[13], y[1]);
1885
64
   word3_muladd(&w1, &w0, &w2, x[14], y[0]);
1886
64
   z[14] = w2;
1887
64
   w2 = 0;
1888
1889
64
   word3_muladd(&w2, &w1, &w0, x[0], y[15]);
1890
64
   word3_muladd(&w2, &w1, &w0, x[1], y[14]);
1891
64
   word3_muladd(&w2, &w1, &w0, x[2], y[13]);
1892
64
   word3_muladd(&w2, &w1, &w0, x[3], y[12]);
1893
64
   word3_muladd(&w2, &w1, &w0, x[4], y[11]);
1894
64
   word3_muladd(&w2, &w1, &w0, x[5], y[10]);
1895
64
   word3_muladd(&w2, &w1, &w0, x[6], y[9]);
1896
64
   word3_muladd(&w2, &w1, &w0, x[7], y[8]);
1897
64
   word3_muladd(&w2, &w1, &w0, x[8], y[7]);
1898
64
   word3_muladd(&w2, &w1, &w0, x[9], y[6]);
1899
64
   word3_muladd(&w2, &w1, &w0, x[10], y[5]);
1900
64
   word3_muladd(&w2, &w1, &w0, x[11], y[4]);
1901
64
   word3_muladd(&w2, &w1, &w0, x[12], y[3]);
1902
64
   word3_muladd(&w2, &w1, &w0, x[13], y[2]);
1903
64
   word3_muladd(&w2, &w1, &w0, x[14], y[1]);
1904
64
   word3_muladd(&w2, &w1, &w0, x[15], y[0]);
1905
64
   z[15] = w0;
1906
64
   w0 = 0;
1907
1908
64
   word3_muladd(&w0, &w2, &w1, x[0], y[16]);
1909
64
   word3_muladd(&w0, &w2, &w1, x[1], y[15]);
1910
64
   word3_muladd(&w0, &w2, &w1, x[2], y[14]);
1911
64
   word3_muladd(&w0, &w2, &w1, x[3], y[13]);
1912
64
   word3_muladd(&w0, &w2, &w1, x[4], y[12]);
1913
64
   word3_muladd(&w0, &w2, &w1, x[5], y[11]);
1914
64
   word3_muladd(&w0, &w2, &w1, x[6], y[10]);
1915
64
   word3_muladd(&w0, &w2, &w1, x[7], y[9]);
1916
64
   word3_muladd(&w0, &w2, &w1, x[8], y[8]);
1917
64
   word3_muladd(&w0, &w2, &w1, x[9], y[7]);
1918
64
   word3_muladd(&w0, &w2, &w1, x[10], y[6]);
1919
64
   word3_muladd(&w0, &w2, &w1, x[11], y[5]);
1920
64
   word3_muladd(&w0, &w2, &w1, x[12], y[4]);
1921
64
   word3_muladd(&w0, &w2, &w1, x[13], y[3]);
1922
64
   word3_muladd(&w0, &w2, &w1, x[14], y[2]);
1923
64
   word3_muladd(&w0, &w2, &w1, x[15], y[1]);
1924
64
   word3_muladd(&w0, &w2, &w1, x[16], y[0]);
1925
64
   z[16] = w1;
1926
64
   w1 = 0;
1927
1928
64
   word3_muladd(&w1, &w0, &w2, x[0], y[17]);
1929
64
   word3_muladd(&w1, &w0, &w2, x[1], y[16]);
1930
64
   word3_muladd(&w1, &w0, &w2, x[2], y[15]);
1931
64
   word3_muladd(&w1, &w0, &w2, x[3], y[14]);
1932
64
   word3_muladd(&w1, &w0, &w2, x[4], y[13]);
1933
64
   word3_muladd(&w1, &w0, &w2, x[5], y[12]);
1934
64
   word3_muladd(&w1, &w0, &w2, x[6], y[11]);
1935
64
   word3_muladd(&w1, &w0, &w2, x[7], y[10]);
1936
64
   word3_muladd(&w1, &w0, &w2, x[8], y[9]);
1937
64
   word3_muladd(&w1, &w0, &w2, x[9], y[8]);
1938
64
   word3_muladd(&w1, &w0, &w2, x[10], y[7]);
1939
64
   word3_muladd(&w1, &w0, &w2, x[11], y[6]);
1940
64
   word3_muladd(&w1, &w0, &w2, x[12], y[5]);
1941
64
   word3_muladd(&w1, &w0, &w2, x[13], y[4]);
1942
64
   word3_muladd(&w1, &w0, &w2, x[14], y[3]);
1943
64
   word3_muladd(&w1, &w0, &w2, x[15], y[2]);
1944
64
   word3_muladd(&w1, &w0, &w2, x[16], y[1]);
1945
64
   word3_muladd(&w1, &w0, &w2, x[17], y[0]);
1946
64
   z[17] = w2;
1947
64
   w2 = 0;
1948
1949
64
   word3_muladd(&w2, &w1, &w0, x[0], y[18]);
1950
64
   word3_muladd(&w2, &w1, &w0, x[1], y[17]);
1951
64
   word3_muladd(&w2, &w1, &w0, x[2], y[16]);
1952
64
   word3_muladd(&w2, &w1, &w0, x[3], y[15]);
1953
64
   word3_muladd(&w2, &w1, &w0, x[4], y[14]);
1954
64
   word3_muladd(&w2, &w1, &w0, x[5], y[13]);
1955
64
   word3_muladd(&w2, &w1, &w0, x[6], y[12]);
1956
64
   word3_muladd(&w2, &w1, &w0, x[7], y[11]);
1957
64
   word3_muladd(&w2, &w1, &w0, x[8], y[10]);
1958
64
   word3_muladd(&w2, &w1, &w0, x[9], y[9]);
1959
64
   word3_muladd(&w2, &w1, &w0, x[10], y[8]);
1960
64
   word3_muladd(&w2, &w1, &w0, x[11], y[7]);
1961
64
   word3_muladd(&w2, &w1, &w0, x[12], y[6]);
1962
64
   word3_muladd(&w2, &w1, &w0, x[13], y[5]);
1963
64
   word3_muladd(&w2, &w1, &w0, x[14], y[4]);
1964
64
   word3_muladd(&w2, &w1, &w0, x[15], y[3]);
1965
64
   word3_muladd(&w2, &w1, &w0, x[16], y[2]);
1966
64
   word3_muladd(&w2, &w1, &w0, x[17], y[1]);
1967
64
   word3_muladd(&w2, &w1, &w0, x[18], y[0]);
1968
64
   z[18] = w0;
1969
64
   w0 = 0;
1970
1971
64
   word3_muladd(&w0, &w2, &w1, x[0], y[19]);
1972
64
   word3_muladd(&w0, &w2, &w1, x[1], y[18]);
1973
64
   word3_muladd(&w0, &w2, &w1, x[2], y[17]);
1974
64
   word3_muladd(&w0, &w2, &w1, x[3], y[16]);
1975
64
   word3_muladd(&w0, &w2, &w1, x[4], y[15]);
1976
64
   word3_muladd(&w0, &w2, &w1, x[5], y[14]);
1977
64
   word3_muladd(&w0, &w2, &w1, x[6], y[13]);
1978
64
   word3_muladd(&w0, &w2, &w1, x[7], y[12]);
1979
64
   word3_muladd(&w0, &w2, &w1, x[8], y[11]);
1980
64
   word3_muladd(&w0, &w2, &w1, x[9], y[10]);
1981
64
   word3_muladd(&w0, &w2, &w1, x[10], y[9]);
1982
64
   word3_muladd(&w0, &w2, &w1, x[11], y[8]);
1983
64
   word3_muladd(&w0, &w2, &w1, x[12], y[7]);
1984
64
   word3_muladd(&w0, &w2, &w1, x[13], y[6]);
1985
64
   word3_muladd(&w0, &w2, &w1, x[14], y[5]);
1986
64
   word3_muladd(&w0, &w2, &w1, x[15], y[4]);
1987
64
   word3_muladd(&w0, &w2, &w1, x[16], y[3]);
1988
64
   word3_muladd(&w0, &w2, &w1, x[17], y[2]);
1989
64
   word3_muladd(&w0, &w2, &w1, x[18], y[1]);
1990
64
   word3_muladd(&w0, &w2, &w1, x[19], y[0]);
1991
64
   z[19] = w1;
1992
64
   w1 = 0;
1993
1994
64
   word3_muladd(&w1, &w0, &w2, x[0], y[20]);
1995
64
   word3_muladd(&w1, &w0, &w2, x[1], y[19]);
1996
64
   word3_muladd(&w1, &w0, &w2, x[2], y[18]);
1997
64
   word3_muladd(&w1, &w0, &w2, x[3], y[17]);
1998
64
   word3_muladd(&w1, &w0, &w2, x[4], y[16]);
1999
64
   word3_muladd(&w1, &w0, &w2, x[5], y[15]);
2000
64
   word3_muladd(&w1, &w0, &w2, x[6], y[14]);
2001
64
   word3_muladd(&w1, &w0, &w2, x[7], y[13]);
2002
64
   word3_muladd(&w1, &w0, &w2, x[8], y[12]);
2003
64
   word3_muladd(&w1, &w0, &w2, x[9], y[11]);
2004
64
   word3_muladd(&w1, &w0, &w2, x[10], y[10]);
2005
64
   word3_muladd(&w1, &w0, &w2, x[11], y[9]);
2006
64
   word3_muladd(&w1, &w0, &w2, x[12], y[8]);
2007
64
   word3_muladd(&w1, &w0, &w2, x[13], y[7]);
2008
64
   word3_muladd(&w1, &w0, &w2, x[14], y[6]);
2009
64
   word3_muladd(&w1, &w0, &w2, x[15], y[5]);
2010
64
   word3_muladd(&w1, &w0, &w2, x[16], y[4]);
2011
64
   word3_muladd(&w1, &w0, &w2, x[17], y[3]);
2012
64
   word3_muladd(&w1, &w0, &w2, x[18], y[2]);
2013
64
   word3_muladd(&w1, &w0, &w2, x[19], y[1]);
2014
64
   word3_muladd(&w1, &w0, &w2, x[20], y[0]);
2015
64
   z[20] = w2;
2016
64
   w2 = 0;
2017
2018
64
   word3_muladd(&w2, &w1, &w0, x[0], y[21]);
2019
64
   word3_muladd(&w2, &w1, &w0, x[1], y[20]);
2020
64
   word3_muladd(&w2, &w1, &w0, x[2], y[19]);
2021
64
   word3_muladd(&w2, &w1, &w0, x[3], y[18]);
2022
64
   word3_muladd(&w2, &w1, &w0, x[4], y[17]);
2023
64
   word3_muladd(&w2, &w1, &w0, x[5], y[16]);
2024
64
   word3_muladd(&w2, &w1, &w0, x[6], y[15]);
2025
64
   word3_muladd(&w2, &w1, &w0, x[7], y[14]);
2026
64
   word3_muladd(&w2, &w1, &w0, x[8], y[13]);
2027
64
   word3_muladd(&w2, &w1, &w0, x[9], y[12]);
2028
64
   word3_muladd(&w2, &w1, &w0, x[10], y[11]);
2029
64
   word3_muladd(&w2, &w1, &w0, x[11], y[10]);
2030
64
   word3_muladd(&w2, &w1, &w0, x[12], y[9]);
2031
64
   word3_muladd(&w2, &w1, &w0, x[13], y[8]);
2032
64
   word3_muladd(&w2, &w1, &w0, x[14], y[7]);
2033
64
   word3_muladd(&w2, &w1, &w0, x[15], y[6]);
2034
64
   word3_muladd(&w2, &w1, &w0, x[16], y[5]);
2035
64
   word3_muladd(&w2, &w1, &w0, x[17], y[4]);
2036
64
   word3_muladd(&w2, &w1, &w0, x[18], y[3]);
2037
64
   word3_muladd(&w2, &w1, &w0, x[19], y[2]);
2038
64
   word3_muladd(&w2, &w1, &w0, x[20], y[1]);
2039
64
   word3_muladd(&w2, &w1, &w0, x[21], y[0]);
2040
64
   z[21] = w0;
2041
64
   w0 = 0;
2042
2043
64
   word3_muladd(&w0, &w2, &w1, x[0], y[22]);
2044
64
   word3_muladd(&w0, &w2, &w1, x[1], y[21]);
2045
64
   word3_muladd(&w0, &w2, &w1, x[2], y[20]);
2046
64
   word3_muladd(&w0, &w2, &w1, x[3], y[19]);
2047
64
   word3_muladd(&w0, &w2, &w1, x[4], y[18]);
2048
64
   word3_muladd(&w0, &w2, &w1, x[5], y[17]);
2049
64
   word3_muladd(&w0, &w2, &w1, x[6], y[16]);
2050
64
   word3_muladd(&w0, &w2, &w1, x[7], y[15]);
2051
64
   word3_muladd(&w0, &w2, &w1, x[8], y[14]);
2052
64
   word3_muladd(&w0, &w2, &w1, x[9], y[13]);
2053
64
   word3_muladd(&w0, &w2, &w1, x[10], y[12]);
2054
64
   word3_muladd(&w0, &w2, &w1, x[11], y[11]);
2055
64
   word3_muladd(&w0, &w2, &w1, x[12], y[10]);
2056
64
   word3_muladd(&w0, &w2, &w1, x[13], y[9]);
2057
64
   word3_muladd(&w0, &w2, &w1, x[14], y[8]);
2058
64
   word3_muladd(&w0, &w2, &w1, x[15], y[7]);
2059
64
   word3_muladd(&w0, &w2, &w1, x[16], y[6]);
2060
64
   word3_muladd(&w0, &w2, &w1, x[17], y[5]);
2061
64
   word3_muladd(&w0, &w2, &w1, x[18], y[4]);
2062
64
   word3_muladd(&w0, &w2, &w1, x[19], y[3]);
2063
64
   word3_muladd(&w0, &w2, &w1, x[20], y[2]);
2064
64
   word3_muladd(&w0, &w2, &w1, x[21], y[1]);
2065
64
   word3_muladd(&w0, &w2, &w1, x[22], y[0]);
2066
64
   z[22] = w1;
2067
64
   w1 = 0;
2068
2069
64
   word3_muladd(&w1, &w0, &w2, x[0], y[23]);
2070
64
   word3_muladd(&w1, &w0, &w2, x[1], y[22]);
2071
64
   word3_muladd(&w1, &w0, &w2, x[2], y[21]);
2072
64
   word3_muladd(&w1, &w0, &w2, x[3], y[20]);
2073
64
   word3_muladd(&w1, &w0, &w2, x[4], y[19]);
2074
64
   word3_muladd(&w1, &w0, &w2, x[5], y[18]);
2075
64
   word3_muladd(&w1, &w0, &w2, x[6], y[17]);
2076
64
   word3_muladd(&w1, &w0, &w2, x[7], y[16]);
2077
64
   word3_muladd(&w1, &w0, &w2, x[8], y[15]);
2078
64
   word3_muladd(&w1, &w0, &w2, x[9], y[14]);
2079
64
   word3_muladd(&w1, &w0, &w2, x[10], y[13]);
2080
64
   word3_muladd(&w1, &w0, &w2, x[11], y[12]);
2081
64
   word3_muladd(&w1, &w0, &w2, x[12], y[11]);
2082
64
   word3_muladd(&w1, &w0, &w2, x[13], y[10]);
2083
64
   word3_muladd(&w1, &w0, &w2, x[14], y[9]);
2084
64
   word3_muladd(&w1, &w0, &w2, x[15], y[8]);
2085
64
   word3_muladd(&w1, &w0, &w2, x[16], y[7]);
2086
64
   word3_muladd(&w1, &w0, &w2, x[17], y[6]);
2087
64
   word3_muladd(&w1, &w0, &w2, x[18], y[5]);
2088
64
   word3_muladd(&w1, &w0, &w2, x[19], y[4]);
2089
64
   word3_muladd(&w1, &w0, &w2, x[20], y[3]);
2090
64
   word3_muladd(&w1, &w0, &w2, x[21], y[2]);
2091
64
   word3_muladd(&w1, &w0, &w2, x[22], y[1]);
2092
64
   word3_muladd(&w1, &w0, &w2, x[23], y[0]);
2093
64
   z[23] = w2;
2094
64
   w2 = 0;
2095
2096
64
   word3_muladd(&w2, &w1, &w0, x[1], y[23]);
2097
64
   word3_muladd(&w2, &w1, &w0, x[2], y[22]);
2098
64
   word3_muladd(&w2, &w1, &w0, x[3], y[21]);
2099
64
   word3_muladd(&w2, &w1, &w0, x[4], y[20]);
2100
64
   word3_muladd(&w2, &w1, &w0, x[5], y[19]);
2101
64
   word3_muladd(&w2, &w1, &w0, x[6], y[18]);
2102
64
   word3_muladd(&w2, &w1, &w0, x[7], y[17]);
2103
64
   word3_muladd(&w2, &w1, &w0, x[8], y[16]);
2104
64
   word3_muladd(&w2, &w1, &w0, x[9], y[15]);
2105
64
   word3_muladd(&w2, &w1, &w0, x[10], y[14]);
2106
64
   word3_muladd(&w2, &w1, &w0, x[11], y[13]);
2107
64
   word3_muladd(&w2, &w1, &w0, x[12], y[12]);
2108
64
   word3_muladd(&w2, &w1, &w0, x[13], y[11]);
2109
64
   word3_muladd(&w2, &w1, &w0, x[14], y[10]);
2110
64
   word3_muladd(&w2, &w1, &w0, x[15], y[9]);
2111
64
   word3_muladd(&w2, &w1, &w0, x[16], y[8]);
2112
64
   word3_muladd(&w2, &w1, &w0, x[17], y[7]);
2113
64
   word3_muladd(&w2, &w1, &w0, x[18], y[6]);
2114
64
   word3_muladd(&w2, &w1, &w0, x[19], y[5]);
2115
64
   word3_muladd(&w2, &w1, &w0, x[20], y[4]);
2116
64
   word3_muladd(&w2, &w1, &w0, x[21], y[3]);
2117
64
   word3_muladd(&w2, &w1, &w0, x[22], y[2]);
2118
64
   word3_muladd(&w2, &w1, &w0, x[23], y[1]);
2119
64
   z[24] = w0;
2120
64
   w0 = 0;
2121
2122
64
   word3_muladd(&w0, &w2, &w1, x[2], y[23]);
2123
64
   word3_muladd(&w0, &w2, &w1, x[3], y[22]);
2124
64
   word3_muladd(&w0, &w2, &w1, x[4], y[21]);
2125
64
   word3_muladd(&w0, &w2, &w1, x[5], y[20]);
2126
64
   word3_muladd(&w0, &w2, &w1, x[6], y[19]);
2127
64
   word3_muladd(&w0, &w2, &w1, x[7], y[18]);
2128
64
   word3_muladd(&w0, &w2, &w1, x[8], y[17]);
2129
64
   word3_muladd(&w0, &w2, &w1, x[9], y[16]);
2130
64
   word3_muladd(&w0, &w2, &w1, x[10], y[15]);
2131
64
   word3_muladd(&w0, &w2, &w1, x[11], y[14]);
2132
64
   word3_muladd(&w0, &w2, &w1, x[12], y[13]);
2133
64
   word3_muladd(&w0, &w2, &w1, x[13], y[12]);
2134
64
   word3_muladd(&w0, &w2, &w1, x[14], y[11]);
2135
64
   word3_muladd(&w0, &w2, &w1, x[15], y[10]);
2136
64
   word3_muladd(&w0, &w2, &w1, x[16], y[9]);
2137
64
   word3_muladd(&w0, &w2, &w1, x[17], y[8]);
2138
64
   word3_muladd(&w0, &w2, &w1, x[18], y[7]);
2139
64
   word3_muladd(&w0, &w2, &w1, x[19], y[6]);
2140
64
   word3_muladd(&w0, &w2, &w1, x[20], y[5]);
2141
64
   word3_muladd(&w0, &w2, &w1, x[21], y[4]);
2142
64
   word3_muladd(&w0, &w2, &w1, x[22], y[3]);
2143
64
   word3_muladd(&w0, &w2, &w1, x[23], y[2]);
2144
64
   z[25] = w1;
2145
64
   w1 = 0;
2146
2147
64
   word3_muladd(&w1, &w0, &w2, x[3], y[23]);
2148
64
   word3_muladd(&w1, &w0, &w2, x[4], y[22]);
2149
64
   word3_muladd(&w1, &w0, &w2, x[5], y[21]);
2150
64
   word3_muladd(&w1, &w0, &w2, x[6], y[20]);
2151
64
   word3_muladd(&w1, &w0, &w2, x[7], y[19]);
2152
64
   word3_muladd(&w1, &w0, &w2, x[8], y[18]);
2153
64
   word3_muladd(&w1, &w0, &w2, x[9], y[17]);
2154
64
   word3_muladd(&w1, &w0, &w2, x[10], y[16]);
2155
64
   word3_muladd(&w1, &w0, &w2, x[11], y[15]);
2156
64
   word3_muladd(&w1, &w0, &w2, x[12], y[14]);
2157
64
   word3_muladd(&w1, &w0, &w2, x[13], y[13]);
2158
64
   word3_muladd(&w1, &w0, &w2, x[14], y[12]);
2159
64
   word3_muladd(&w1, &w0, &w2, x[15], y[11]);
2160
64
   word3_muladd(&w1, &w0, &w2, x[16], y[10]);
2161
64
   word3_muladd(&w1, &w0, &w2, x[17], y[9]);
2162
64
   word3_muladd(&w1, &w0, &w2, x[18], y[8]);
2163
64
   word3_muladd(&w1, &w0, &w2, x[19], y[7]);
2164
64
   word3_muladd(&w1, &w0, &w2, x[20], y[6]);
2165
64
   word3_muladd(&w1, &w0, &w2, x[21], y[5]);
2166
64
   word3_muladd(&w1, &w0, &w2, x[22], y[4]);
2167
64
   word3_muladd(&w1, &w0, &w2, x[23], y[3]);
2168
64
   z[26] = w2;
2169
64
   w2 = 0;
2170
2171
64
   word3_muladd(&w2, &w1, &w0, x[4], y[23]);
2172
64
   word3_muladd(&w2, &w1, &w0, x[5], y[22]);
2173
64
   word3_muladd(&w2, &w1, &w0, x[6], y[21]);
2174
64
   word3_muladd(&w2, &w1, &w0, x[7], y[20]);
2175
64
   word3_muladd(&w2, &w1, &w0, x[8], y[19]);
2176
64
   word3_muladd(&w2, &w1, &w0, x[9], y[18]);
2177
64
   word3_muladd(&w2, &w1, &w0, x[10], y[17]);
2178
64
   word3_muladd(&w2, &w1, &w0, x[11], y[16]);
2179
64
   word3_muladd(&w2, &w1, &w0, x[12], y[15]);
2180
64
   word3_muladd(&w2, &w1, &w0, x[13], y[14]);
2181
64
   word3_muladd(&w2, &w1, &w0, x[14], y[13]);
2182
64
   word3_muladd(&w2, &w1, &w0, x[15], y[12]);
2183
64
   word3_muladd(&w2, &w1, &w0, x[16], y[11]);
2184
64
   word3_muladd(&w2, &w1, &w0, x[17], y[10]);
2185
64
   word3_muladd(&w2, &w1, &w0, x[18], y[9]);
2186
64
   word3_muladd(&w2, &w1, &w0, x[19], y[8]);
2187
64
   word3_muladd(&w2, &w1, &w0, x[20], y[7]);
2188
64
   word3_muladd(&w2, &w1, &w0, x[21], y[6]);
2189
64
   word3_muladd(&w2, &w1, &w0, x[22], y[5]);
2190
64
   word3_muladd(&w2, &w1, &w0, x[23], y[4]);
2191
64
   z[27] = w0;
2192
64
   w0 = 0;
2193
2194
64
   word3_muladd(&w0, &w2, &w1, x[5], y[23]);
2195
64
   word3_muladd(&w0, &w2, &w1, x[6], y[22]);
2196
64
   word3_muladd(&w0, &w2, &w1, x[7], y[21]);
2197
64
   word3_muladd(&w0, &w2, &w1, x[8], y[20]);
2198
64
   word3_muladd(&w0, &w2, &w1, x[9], y[19]);
2199
64
   word3_muladd(&w0, &w2, &w1, x[10], y[18]);
2200
64
   word3_muladd(&w0, &w2, &w1, x[11], y[17]);
2201
64
   word3_muladd(&w0, &w2, &w1, x[12], y[16]);
2202
64
   word3_muladd(&w0, &w2, &w1, x[13], y[15]);
2203
64
   word3_muladd(&w0, &w2, &w1, x[14], y[14]);
2204
64
   word3_muladd(&w0, &w2, &w1, x[15], y[13]);
2205
64
   word3_muladd(&w0, &w2, &w1, x[16], y[12]);
2206
64
   word3_muladd(&w0, &w2, &w1, x[17], y[11]);
2207
64
   word3_muladd(&w0, &w2, &w1, x[18], y[10]);
2208
64
   word3_muladd(&w0, &w2, &w1, x[19], y[9]);
2209
64
   word3_muladd(&w0, &w2, &w1, x[20], y[8]);
2210
64
   word3_muladd(&w0, &w2, &w1, x[21], y[7]);
2211
64
   word3_muladd(&w0, &w2, &w1, x[22], y[6]);
2212
64
   word3_muladd(&w0, &w2, &w1, x[23], y[5]);
2213
64
   z[28] = w1;
2214
64
   w1 = 0;
2215
2216
64
   word3_muladd(&w1, &w0, &w2, x[6], y[23]);
2217
64
   word3_muladd(&w1, &w0, &w2, x[7], y[22]);
2218
64
   word3_muladd(&w1, &w0, &w2, x[8], y[21]);
2219
64
   word3_muladd(&w1, &w0, &w2, x[9], y[20]);
2220
64
   word3_muladd(&w1, &w0, &w2, x[10], y[19]);
2221
64
   word3_muladd(&w1, &w0, &w2, x[11], y[18]);
2222
64
   word3_muladd(&w1, &w0, &w2, x[12], y[17]);
2223
64
   word3_muladd(&w1, &w0, &w2, x[13], y[16]);
2224
64
   word3_muladd(&w1, &w0, &w2, x[14], y[15]);
2225
64
   word3_muladd(&w1, &w0, &w2, x[15], y[14]);
2226
64
   word3_muladd(&w1, &w0, &w2, x[16], y[13]);
2227
64
   word3_muladd(&w1, &w0, &w2, x[17], y[12]);
2228
64
   word3_muladd(&w1, &w0, &w2, x[18], y[11]);
2229
64
   word3_muladd(&w1, &w0, &w2, x[19], y[10]);
2230
64
   word3_muladd(&w1, &w0, &w2, x[20], y[9]);
2231
64
   word3_muladd(&w1, &w0, &w2, x[21], y[8]);
2232
64
   word3_muladd(&w1, &w0, &w2, x[22], y[7]);
2233
64
   word3_muladd(&w1, &w0, &w2, x[23], y[6]);
2234
64
   z[29] = w2;
2235
64
   w2 = 0;
2236
2237
64
   word3_muladd(&w2, &w1, &w0, x[7], y[23]);
2238
64
   word3_muladd(&w2, &w1, &w0, x[8], y[22]);
2239
64
   word3_muladd(&w2, &w1, &w0, x[9], y[21]);
2240
64
   word3_muladd(&w2, &w1, &w0, x[10], y[20]);
2241
64
   word3_muladd(&w2, &w1, &w0, x[11], y[19]);
2242
64
   word3_muladd(&w2, &w1, &w0, x[12], y[18]);
2243
64
   word3_muladd(&w2, &w1, &w0, x[13], y[17]);
2244
64
   word3_muladd(&w2, &w1, &w0, x[14], y[16]);
2245
64
   word3_muladd(&w2, &w1, &w0, x[15], y[15]);
2246
64
   word3_muladd(&w2, &w1, &w0, x[16], y[14]);
2247
64
   word3_muladd(&w2, &w1, &w0, x[17], y[13]);
2248
64
   word3_muladd(&w2, &w1, &w0, x[18], y[12]);
2249
64
   word3_muladd(&w2, &w1, &w0, x[19], y[11]);
2250
64
   word3_muladd(&w2, &w1, &w0, x[20], y[10]);
2251
64
   word3_muladd(&w2, &w1, &w0, x[21], y[9]);
2252
64
   word3_muladd(&w2, &w1, &w0, x[22], y[8]);
2253
64
   word3_muladd(&w2, &w1, &w0, x[23], y[7]);
2254
64
   z[30] = w0;
2255
64
   w0 = 0;
2256
2257
64
   word3_muladd(&w0, &w2, &w1, x[8], y[23]);
2258
64
   word3_muladd(&w0, &w2, &w1, x[9], y[22]);
2259
64
   word3_muladd(&w0, &w2, &w1, x[10], y[21]);
2260
64
   word3_muladd(&w0, &w2, &w1, x[11], y[20]);
2261
64
   word3_muladd(&w0, &w2, &w1, x[12], y[19]);
2262
64
   word3_muladd(&w0, &w2, &w1, x[13], y[18]);
2263
64
   word3_muladd(&w0, &w2, &w1, x[14], y[17]);
2264
64
   word3_muladd(&w0, &w2, &w1, x[15], y[16]);
2265
64
   word3_muladd(&w0, &w2, &w1, x[16], y[15]);
2266
64
   word3_muladd(&w0, &w2, &w1, x[17], y[14]);
2267
64
   word3_muladd(&w0, &w2, &w1, x[18], y[13]);
2268
64
   word3_muladd(&w0, &w2, &w1, x[19], y[12]);
2269
64
   word3_muladd(&w0, &w2, &w1, x[20], y[11]);
2270
64
   word3_muladd(&w0, &w2, &w1, x[21], y[10]);
2271
64
   word3_muladd(&w0, &w2, &w1, x[22], y[9]);
2272
64
   word3_muladd(&w0, &w2, &w1, x[23], y[8]);
2273
64
   z[31] = w1;
2274
64
   w1 = 0;
2275
2276
64
   word3_muladd(&w1, &w0, &w2, x[9], y[23]);
2277
64
   word3_muladd(&w1, &w0, &w2, x[10], y[22]);
2278
64
   word3_muladd(&w1, &w0, &w2, x[11], y[21]);
2279
64
   word3_muladd(&w1, &w0, &w2, x[12], y[20]);
2280
64
   word3_muladd(&w1, &w0, &w2, x[13], y[19]);
2281
64
   word3_muladd(&w1, &w0, &w2, x[14], y[18]);
2282
64
   word3_muladd(&w1, &w0, &w2, x[15], y[17]);
2283
64
   word3_muladd(&w1, &w0, &w2, x[16], y[16]);
2284
64
   word3_muladd(&w1, &w0, &w2, x[17], y[15]);
2285
64
   word3_muladd(&w1, &w0, &w2, x[18], y[14]);
2286
64
   word3_muladd(&w1, &w0, &w2, x[19], y[13]);
2287
64
   word3_muladd(&w1, &w0, &w2, x[20], y[12]);
2288
64
   word3_muladd(&w1, &w0, &w2, x[21], y[11]);
2289
64
   word3_muladd(&w1, &w0, &w2, x[22], y[10]);
2290
64
   word3_muladd(&w1, &w0, &w2, x[23], y[9]);
2291
64
   z[32] = w2;
2292
64
   w2 = 0;
2293
2294
64
   word3_muladd(&w2, &w1, &w0, x[10], y[23]);
2295
64
   word3_muladd(&w2, &w1, &w0, x[11], y[22]);
2296
64
   word3_muladd(&w2, &w1, &w0, x[12], y[21]);
2297
64
   word3_muladd(&w2, &w1, &w0, x[13], y[20]);
2298
64
   word3_muladd(&w2, &w1, &w0, x[14], y[19]);
2299
64
   word3_muladd(&w2, &w1, &w0, x[15], y[18]);
2300
64
   word3_muladd(&w2, &w1, &w0, x[16], y[17]);
2301
64
   word3_muladd(&w2, &w1, &w0, x[17], y[16]);
2302
64
   word3_muladd(&w2, &w1, &w0, x[18], y[15]);
2303
64
   word3_muladd(&w2, &w1, &w0, x[19], y[14]);
2304
64
   word3_muladd(&w2, &w1, &w0, x[20], y[13]);
2305
64
   word3_muladd(&w2, &w1, &w0, x[21], y[12]);
2306
64
   word3_muladd(&w2, &w1, &w0, x[22], y[11]);
2307
64
   word3_muladd(&w2, &w1, &w0, x[23], y[10]);
2308
64
   z[33] = w0;
2309
64
   w0 = 0;
2310
2311
64
   word3_muladd(&w0, &w2, &w1, x[11], y[23]);
2312
64
   word3_muladd(&w0, &w2, &w1, x[12], y[22]);
2313
64
   word3_muladd(&w0, &w2, &w1, x[13], y[21]);
2314
64
   word3_muladd(&w0, &w2, &w1, x[14], y[20]);
2315
64
   word3_muladd(&w0, &w2, &w1, x[15], y[19]);
2316
64
   word3_muladd(&w0, &w2, &w1, x[16], y[18]);
2317
64
   word3_muladd(&w0, &w2, &w1, x[17], y[17]);
2318
64
   word3_muladd(&w0, &w2, &w1, x[18], y[16]);
2319
64
   word3_muladd(&w0, &w2, &w1, x[19], y[15]);
2320
64
   word3_muladd(&w0, &w2, &w1, x[20], y[14]);
2321
64
   word3_muladd(&w0, &w2, &w1, x[21], y[13]);
2322
64
   word3_muladd(&w0, &w2, &w1, x[22], y[12]);
2323
64
   word3_muladd(&w0, &w2, &w1, x[23], y[11]);
2324
64
   z[34] = w1;
2325
64
   w1 = 0;
2326
2327
64
   word3_muladd(&w1, &w0, &w2, x[12], y[23]);
2328
64
   word3_muladd(&w1, &w0, &w2, x[13], y[22]);
2329
64
   word3_muladd(&w1, &w0, &w2, x[14], y[21]);
2330
64
   word3_muladd(&w1, &w0, &w2, x[15], y[20]);
2331
64
   word3_muladd(&w1, &w0, &w2, x[16], y[19]);
2332
64
   word3_muladd(&w1, &w0, &w2, x[17], y[18]);
2333
64
   word3_muladd(&w1, &w0, &w2, x[18], y[17]);
2334
64
   word3_muladd(&w1, &w0, &w2, x[19], y[16]);
2335
64
   word3_muladd(&w1, &w0, &w2, x[20], y[15]);
2336
64
   word3_muladd(&w1, &w0, &w2, x[21], y[14]);
2337
64
   word3_muladd(&w1, &w0, &w2, x[22], y[13]);
2338
64
   word3_muladd(&w1, &w0, &w2, x[23], y[12]);
2339
64
   z[35] = w2;
2340
64
   w2 = 0;
2341
2342
64
   word3_muladd(&w2, &w1, &w0, x[13], y[23]);
2343
64
   word3_muladd(&w2, &w1, &w0, x[14], y[22]);
2344
64
   word3_muladd(&w2, &w1, &w0, x[15], y[21]);
2345
64
   word3_muladd(&w2, &w1, &w0, x[16], y[20]);
2346
64
   word3_muladd(&w2, &w1, &w0, x[17], y[19]);
2347
64
   word3_muladd(&w2, &w1, &w0, x[18], y[18]);
2348
64
   word3_muladd(&w2, &w1, &w0, x[19], y[17]);
2349
64
   word3_muladd(&w2, &w1, &w0, x[20], y[16]);
2350
64
   word3_muladd(&w2, &w1, &w0, x[21], y[15]);
2351
64
   word3_muladd(&w2, &w1, &w0, x[22], y[14]);
2352
64
   word3_muladd(&w2, &w1, &w0, x[23], y[13]);
2353
64
   z[36] = w0;
2354
64
   w0 = 0;
2355
2356
64
   word3_muladd(&w0, &w2, &w1, x[14], y[23]);
2357
64
   word3_muladd(&w0, &w2, &w1, x[15], y[22]);
2358
64
   word3_muladd(&w0, &w2, &w1, x[16], y[21]);
2359
64
   word3_muladd(&w0, &w2, &w1, x[17], y[20]);
2360
64
   word3_muladd(&w0, &w2, &w1, x[18], y[19]);
2361
64
   word3_muladd(&w0, &w2, &w1, x[19], y[18]);
2362
64
   word3_muladd(&w0, &w2, &w1, x[20], y[17]);
2363
64
   word3_muladd(&w0, &w2, &w1, x[21], y[16]);
2364
64
   word3_muladd(&w0, &w2, &w1, x[22], y[15]);
2365
64
   word3_muladd(&w0, &w2, &w1, x[23], y[14]);
2366
64
   z[37] = w1;
2367
64
   w1 = 0;
2368
2369
64
   word3_muladd(&w1, &w0, &w2, x[15], y[23]);
2370
64
   word3_muladd(&w1, &w0, &w2, x[16], y[22]);
2371
64
   word3_muladd(&w1, &w0, &w2, x[17], y[21]);
2372
64
   word3_muladd(&w1, &w0, &w2, x[18], y[20]);
2373
64
   word3_muladd(&w1, &w0, &w2, x[19], y[19]);
2374
64
   word3_muladd(&w1, &w0, &w2, x[20], y[18]);
2375
64
   word3_muladd(&w1, &w0, &w2, x[21], y[17]);
2376
64
   word3_muladd(&w1, &w0, &w2, x[22], y[16]);
2377
64
   word3_muladd(&w1, &w0, &w2, x[23], y[15]);
2378
64
   z[38] = w2;
2379
64
   w2 = 0;
2380
2381
64
   word3_muladd(&w2, &w1, &w0, x[16], y[23]);
2382
64
   word3_muladd(&w2, &w1, &w0, x[17], y[22]);
2383
64
   word3_muladd(&w2, &w1, &w0, x[18], y[21]);
2384
64
   word3_muladd(&w2, &w1, &w0, x[19], y[20]);
2385
64
   word3_muladd(&w2, &w1, &w0, x[20], y[19]);
2386
64
   word3_muladd(&w2, &w1, &w0, x[21], y[18]);
2387
64
   word3_muladd(&w2, &w1, &w0, x[22], y[17]);
2388
64
   word3_muladd(&w2, &w1, &w0, x[23], y[16]);
2389
64
   z[39] = w0;
2390
64
   w0 = 0;
2391
2392
64
   word3_muladd(&w0, &w2, &w1, x[17], y[23]);
2393
64
   word3_muladd(&w0, &w2, &w1, x[18], y[22]);
2394
64
   word3_muladd(&w0, &w2, &w1, x[19], y[21]);
2395
64
   word3_muladd(&w0, &w2, &w1, x[20], y[20]);
2396
64
   word3_muladd(&w0, &w2, &w1, x[21], y[19]);
2397
64
   word3_muladd(&w0, &w2, &w1, x[22], y[18]);
2398
64
   word3_muladd(&w0, &w2, &w1, x[23], y[17]);
2399
64
   z[40] = w1;
2400
64
   w1 = 0;
2401
2402
64
   word3_muladd(&w1, &w0, &w2, x[18], y[23]);
2403
64
   word3_muladd(&w1, &w0, &w2, x[19], y[22]);
2404
64
   word3_muladd(&w1, &w0, &w2, x[20], y[21]);
2405
64
   word3_muladd(&w1, &w0, &w2, x[21], y[20]);
2406
64
   word3_muladd(&w1, &w0, &w2, x[22], y[19]);
2407
64
   word3_muladd(&w1, &w0, &w2, x[23], y[18]);
2408
64
   z[41] = w2;
2409
64
   w2 = 0;
2410
2411
64
   word3_muladd(&w2, &w1, &w0, x[19], y[23]);
2412
64
   word3_muladd(&w2, &w1, &w0, x[20], y[22]);
2413
64
   word3_muladd(&w2, &w1, &w0, x[21], y[21]);
2414
64
   word3_muladd(&w2, &w1, &w0, x[22], y[20]);
2415
64
   word3_muladd(&w2, &w1, &w0, x[23], y[19]);
2416
64
   z[42] = w0;
2417
64
   w0 = 0;
2418
2419
64
   word3_muladd(&w0, &w2, &w1, x[20], y[23]);
2420
64
   word3_muladd(&w0, &w2, &w1, x[21], y[22]);
2421
64
   word3_muladd(&w0, &w2, &w1, x[22], y[21]);
2422
64
   word3_muladd(&w0, &w2, &w1, x[23], y[20]);
2423
64
   z[43] = w1;
2424
64
   w1 = 0;
2425
2426
64
   word3_muladd(&w1, &w0, &w2, x[21], y[23]);
2427
64
   word3_muladd(&w1, &w0, &w2, x[22], y[22]);
2428
64
   word3_muladd(&w1, &w0, &w2, x[23], y[21]);
2429
64
   z[44] = w2;
2430
64
   w2 = 0;
2431
2432
64
   word3_muladd(&w2, &w1, &w0, x[22], y[23]);
2433
64
   word3_muladd(&w2, &w1, &w0, x[23], y[22]);
2434
64
   z[45] = w0;
2435
64
   w0 = 0;
2436
2437
64
   word3_muladd(&w0, &w2, &w1, x[23], y[23]);
2438
64
   z[46] = w1;
2439
64
   z[47] = w2;
2440
64
}
2441
2442
}  // namespace Botan