Coverage Report

Created: 2024-04-02 06:34

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