Coverage Report

Created: 2025-07-11 06:15

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