2
* Comba Multiplication and Squaring
4
* This file was automatically generated by ./src/scripts/comba.py on 2016-01-01
6
* Botan is released under the Simplified BSD License (see license.txt)
9
#include <botan/internal/mp_core.h>
10
#include <botan/internal/mp_asmi.h>
17
void bigint_comba_sqr4(word z[8], const word x[4])
19
word w2 = 0, w1 = 0, w0 = 0;
21
word3_muladd (&w2, &w1, &w0, x[ 0], x[ 0]);
24
word3_muladd_2(&w0, &w2, &w1, x[ 0], x[ 1]);
27
word3_muladd_2(&w1, &w0, &w2, x[ 0], x[ 2]);
28
word3_muladd (&w1, &w0, &w2, x[ 1], x[ 1]);
31
word3_muladd_2(&w2, &w1, &w0, x[ 0], x[ 3]);
32
word3_muladd_2(&w2, &w1, &w0, x[ 1], x[ 2]);
35
word3_muladd_2(&w0, &w2, &w1, x[ 1], x[ 3]);
36
word3_muladd (&w0, &w2, &w1, x[ 2], x[ 2]);
39
word3_muladd_2(&w1, &w0, &w2, x[ 2], x[ 3]);
42
word3_muladd (&w2, &w1, &w0, x[ 3], x[ 3]);
48
* Comba 4x4 Multiplication
50
void bigint_comba_mul4(word z[8], const word x[4], const word y[4])
52
word w2 = 0, w1 = 0, w0 = 0;
54
word3_muladd(&w2, &w1, &w0, x[ 0], y[ 0]);
57
word3_muladd(&w0, &w2, &w1, x[ 0], y[ 1]);
58
word3_muladd(&w0, &w2, &w1, x[ 1], y[ 0]);
61
word3_muladd(&w1, &w0, &w2, x[ 0], y[ 2]);
62
word3_muladd(&w1, &w0, &w2, x[ 1], y[ 1]);
63
word3_muladd(&w1, &w0, &w2, x[ 2], y[ 0]);
66
word3_muladd(&w2, &w1, &w0, x[ 0], y[ 3]);
67
word3_muladd(&w2, &w1, &w0, x[ 1], y[ 2]);
68
word3_muladd(&w2, &w1, &w0, x[ 2], y[ 1]);
69
word3_muladd(&w2, &w1, &w0, x[ 3], y[ 0]);
72
word3_muladd(&w0, &w2, &w1, x[ 1], y[ 3]);
73
word3_muladd(&w0, &w2, &w1, x[ 2], y[ 2]);
74
word3_muladd(&w0, &w2, &w1, x[ 3], y[ 1]);
77
word3_muladd(&w1, &w0, &w2, x[ 2], y[ 3]);
78
word3_muladd(&w1, &w0, &w2, x[ 3], y[ 2]);
81
word3_muladd(&w2, &w1, &w0, x[ 3], y[ 3]);
89
void bigint_comba_sqr6(word z[12], const word x[6])
91
word w2 = 0, w1 = 0, w0 = 0;
93
word3_muladd (&w2, &w1, &w0, x[ 0], x[ 0]);
96
word3_muladd_2(&w0, &w2, &w1, x[ 0], x[ 1]);
99
word3_muladd_2(&w1, &w0, &w2, x[ 0], x[ 2]);
100
word3_muladd (&w1, &w0, &w2, x[ 1], x[ 1]);
103
word3_muladd_2(&w2, &w1, &w0, x[ 0], x[ 3]);
104
word3_muladd_2(&w2, &w1, &w0, x[ 1], x[ 2]);
107
word3_muladd_2(&w0, &w2, &w1, x[ 0], x[ 4]);
108
word3_muladd_2(&w0, &w2, &w1, x[ 1], x[ 3]);
109
word3_muladd (&w0, &w2, &w1, x[ 2], x[ 2]);
112
word3_muladd_2(&w1, &w0, &w2, x[ 0], x[ 5]);
113
word3_muladd_2(&w1, &w0, &w2, x[ 1], x[ 4]);
114
word3_muladd_2(&w1, &w0, &w2, x[ 2], x[ 3]);
117
word3_muladd_2(&w2, &w1, &w0, x[ 1], x[ 5]);
118
word3_muladd_2(&w2, &w1, &w0, x[ 2], x[ 4]);
119
word3_muladd (&w2, &w1, &w0, x[ 3], x[ 3]);
122
word3_muladd_2(&w0, &w2, &w1, x[ 2], x[ 5]);
123
word3_muladd_2(&w0, &w2, &w1, x[ 3], x[ 4]);
126
word3_muladd_2(&w1, &w0, &w2, x[ 3], x[ 5]);
127
word3_muladd (&w1, &w0, &w2, x[ 4], x[ 4]);
130
word3_muladd_2(&w2, &w1, &w0, x[ 4], x[ 5]);
133
word3_muladd (&w0, &w2, &w1, x[ 5], x[ 5]);
139
* Comba 6x6 Multiplication
141
void bigint_comba_mul6(word z[12], const word x[6], const word y[6])
143
word w2 = 0, w1 = 0, w0 = 0;
145
word3_muladd(&w2, &w1, &w0, x[ 0], y[ 0]);
148
word3_muladd(&w0, &w2, &w1, x[ 0], y[ 1]);
149
word3_muladd(&w0, &w2, &w1, x[ 1], y[ 0]);
152
word3_muladd(&w1, &w0, &w2, x[ 0], y[ 2]);
153
word3_muladd(&w1, &w0, &w2, x[ 1], y[ 1]);
154
word3_muladd(&w1, &w0, &w2, x[ 2], y[ 0]);
157
word3_muladd(&w2, &w1, &w0, x[ 0], y[ 3]);
158
word3_muladd(&w2, &w1, &w0, x[ 1], y[ 2]);
159
word3_muladd(&w2, &w1, &w0, x[ 2], y[ 1]);
160
word3_muladd(&w2, &w1, &w0, x[ 3], y[ 0]);
163
word3_muladd(&w0, &w2, &w1, x[ 0], y[ 4]);
164
word3_muladd(&w0, &w2, &w1, x[ 1], y[ 3]);
165
word3_muladd(&w0, &w2, &w1, x[ 2], y[ 2]);
166
word3_muladd(&w0, &w2, &w1, x[ 3], y[ 1]);
167
word3_muladd(&w0, &w2, &w1, x[ 4], y[ 0]);
170
word3_muladd(&w1, &w0, &w2, x[ 0], y[ 5]);
171
word3_muladd(&w1, &w0, &w2, x[ 1], y[ 4]);
172
word3_muladd(&w1, &w0, &w2, x[ 2], y[ 3]);
173
word3_muladd(&w1, &w0, &w2, x[ 3], y[ 2]);
174
word3_muladd(&w1, &w0, &w2, x[ 4], y[ 1]);
175
word3_muladd(&w1, &w0, &w2, x[ 5], y[ 0]);
178
word3_muladd(&w2, &w1, &w0, x[ 1], y[ 5]);
179
word3_muladd(&w2, &w1, &w0, x[ 2], y[ 4]);
180
word3_muladd(&w2, &w1, &w0, x[ 3], y[ 3]);
181
word3_muladd(&w2, &w1, &w0, x[ 4], y[ 2]);
182
word3_muladd(&w2, &w1, &w0, x[ 5], y[ 1]);
185
word3_muladd(&w0, &w2, &w1, x[ 2], y[ 5]);
186
word3_muladd(&w0, &w2, &w1, x[ 3], y[ 4]);
187
word3_muladd(&w0, &w2, &w1, x[ 4], y[ 3]);
188
word3_muladd(&w0, &w2, &w1, x[ 5], y[ 2]);
191
word3_muladd(&w1, &w0, &w2, x[ 3], y[ 5]);
192
word3_muladd(&w1, &w0, &w2, x[ 4], y[ 4]);
193
word3_muladd(&w1, &w0, &w2, x[ 5], y[ 3]);
196
word3_muladd(&w2, &w1, &w0, x[ 4], y[ 5]);
197
word3_muladd(&w2, &w1, &w0, x[ 5], y[ 4]);
200
word3_muladd(&w0, &w2, &w1, x[ 5], y[ 5]);
208
void bigint_comba_sqr8(word z[16], const word x[8])
210
word w2 = 0, w1 = 0, w0 = 0;
212
word3_muladd (&w2, &w1, &w0, x[ 0], x[ 0]);
215
word3_muladd_2(&w0, &w2, &w1, x[ 0], x[ 1]);
218
word3_muladd_2(&w1, &w0, &w2, x[ 0], x[ 2]);
219
word3_muladd (&w1, &w0, &w2, x[ 1], x[ 1]);
222
word3_muladd_2(&w2, &w1, &w0, x[ 0], x[ 3]);
223
word3_muladd_2(&w2, &w1, &w0, x[ 1], x[ 2]);
226
word3_muladd_2(&w0, &w2, &w1, x[ 0], x[ 4]);
227
word3_muladd_2(&w0, &w2, &w1, x[ 1], x[ 3]);
228
word3_muladd (&w0, &w2, &w1, x[ 2], x[ 2]);
231
word3_muladd_2(&w1, &w0, &w2, x[ 0], x[ 5]);
232
word3_muladd_2(&w1, &w0, &w2, x[ 1], x[ 4]);
233
word3_muladd_2(&w1, &w0, &w2, x[ 2], x[ 3]);
236
word3_muladd_2(&w2, &w1, &w0, x[ 0], x[ 6]);
237
word3_muladd_2(&w2, &w1, &w0, x[ 1], x[ 5]);
238
word3_muladd_2(&w2, &w1, &w0, x[ 2], x[ 4]);
239
word3_muladd (&w2, &w1, &w0, x[ 3], x[ 3]);
242
word3_muladd_2(&w0, &w2, &w1, x[ 0], x[ 7]);
243
word3_muladd_2(&w0, &w2, &w1, x[ 1], x[ 6]);
244
word3_muladd_2(&w0, &w2, &w1, x[ 2], x[ 5]);
245
word3_muladd_2(&w0, &w2, &w1, x[ 3], x[ 4]);
248
word3_muladd_2(&w1, &w0, &w2, x[ 1], x[ 7]);
249
word3_muladd_2(&w1, &w0, &w2, x[ 2], x[ 6]);
250
word3_muladd_2(&w1, &w0, &w2, x[ 3], x[ 5]);
251
word3_muladd (&w1, &w0, &w2, x[ 4], x[ 4]);
254
word3_muladd_2(&w2, &w1, &w0, x[ 2], x[ 7]);
255
word3_muladd_2(&w2, &w1, &w0, x[ 3], x[ 6]);
256
word3_muladd_2(&w2, &w1, &w0, x[ 4], x[ 5]);
259
word3_muladd_2(&w0, &w2, &w1, x[ 3], x[ 7]);
260
word3_muladd_2(&w0, &w2, &w1, x[ 4], x[ 6]);
261
word3_muladd (&w0, &w2, &w1, x[ 5], x[ 5]);
264
word3_muladd_2(&w1, &w0, &w2, x[ 4], x[ 7]);
265
word3_muladd_2(&w1, &w0, &w2, x[ 5], x[ 6]);
268
word3_muladd_2(&w2, &w1, &w0, x[ 5], x[ 7]);
269
word3_muladd (&w2, &w1, &w0, x[ 6], x[ 6]);
272
word3_muladd_2(&w0, &w2, &w1, x[ 6], x[ 7]);
275
word3_muladd (&w1, &w0, &w2, x[ 7], x[ 7]);
281
* Comba 8x8 Multiplication
283
void bigint_comba_mul8(word z[16], const word x[8], const word y[8])
285
word w2 = 0, w1 = 0, w0 = 0;
287
word3_muladd(&w2, &w1, &w0, x[ 0], y[ 0]);
290
word3_muladd(&w0, &w2, &w1, x[ 0], y[ 1]);
291
word3_muladd(&w0, &w2, &w1, x[ 1], y[ 0]);
294
word3_muladd(&w1, &w0, &w2, x[ 0], y[ 2]);
295
word3_muladd(&w1, &w0, &w2, x[ 1], y[ 1]);
296
word3_muladd(&w1, &w0, &w2, x[ 2], y[ 0]);
299
word3_muladd(&w2, &w1, &w0, x[ 0], y[ 3]);
300
word3_muladd(&w2, &w1, &w0, x[ 1], y[ 2]);
301
word3_muladd(&w2, &w1, &w0, x[ 2], y[ 1]);
302
word3_muladd(&w2, &w1, &w0, x[ 3], y[ 0]);
305
word3_muladd(&w0, &w2, &w1, x[ 0], y[ 4]);
306
word3_muladd(&w0, &w2, &w1, x[ 1], y[ 3]);
307
word3_muladd(&w0, &w2, &w1, x[ 2], y[ 2]);
308
word3_muladd(&w0, &w2, &w1, x[ 3], y[ 1]);
309
word3_muladd(&w0, &w2, &w1, x[ 4], y[ 0]);
312
word3_muladd(&w1, &w0, &w2, x[ 0], y[ 5]);
313
word3_muladd(&w1, &w0, &w2, x[ 1], y[ 4]);
314
word3_muladd(&w1, &w0, &w2, x[ 2], y[ 3]);
315
word3_muladd(&w1, &w0, &w2, x[ 3], y[ 2]);
316
word3_muladd(&w1, &w0, &w2, x[ 4], y[ 1]);
317
word3_muladd(&w1, &w0, &w2, x[ 5], y[ 0]);
320
word3_muladd(&w2, &w1, &w0, x[ 0], y[ 6]);
321
word3_muladd(&w2, &w1, &w0, x[ 1], y[ 5]);
322
word3_muladd(&w2, &w1, &w0, x[ 2], y[ 4]);
323
word3_muladd(&w2, &w1, &w0, x[ 3], y[ 3]);
324
word3_muladd(&w2, &w1, &w0, x[ 4], y[ 2]);
325
word3_muladd(&w2, &w1, &w0, x[ 5], y[ 1]);
326
word3_muladd(&w2, &w1, &w0, x[ 6], y[ 0]);
329
word3_muladd(&w0, &w2, &w1, x[ 0], y[ 7]);
330
word3_muladd(&w0, &w2, &w1, x[ 1], y[ 6]);
331
word3_muladd(&w0, &w2, &w1, x[ 2], y[ 5]);
332
word3_muladd(&w0, &w2, &w1, x[ 3], y[ 4]);
333
word3_muladd(&w0, &w2, &w1, x[ 4], y[ 3]);
334
word3_muladd(&w0, &w2, &w1, x[ 5], y[ 2]);
335
word3_muladd(&w0, &w2, &w1, x[ 6], y[ 1]);
336
word3_muladd(&w0, &w2, &w1, x[ 7], y[ 0]);
339
word3_muladd(&w1, &w0, &w2, x[ 1], y[ 7]);
340
word3_muladd(&w1, &w0, &w2, x[ 2], y[ 6]);
341
word3_muladd(&w1, &w0, &w2, x[ 3], y[ 5]);
342
word3_muladd(&w1, &w0, &w2, x[ 4], y[ 4]);
343
word3_muladd(&w1, &w0, &w2, x[ 5], y[ 3]);
344
word3_muladd(&w1, &w0, &w2, x[ 6], y[ 2]);
345
word3_muladd(&w1, &w0, &w2, x[ 7], y[ 1]);
348
word3_muladd(&w2, &w1, &w0, x[ 2], y[ 7]);
349
word3_muladd(&w2, &w1, &w0, x[ 3], y[ 6]);
350
word3_muladd(&w2, &w1, &w0, x[ 4], y[ 5]);
351
word3_muladd(&w2, &w1, &w0, x[ 5], y[ 4]);
352
word3_muladd(&w2, &w1, &w0, x[ 6], y[ 3]);
353
word3_muladd(&w2, &w1, &w0, x[ 7], y[ 2]);
356
word3_muladd(&w0, &w2, &w1, x[ 3], y[ 7]);
357
word3_muladd(&w0, &w2, &w1, x[ 4], y[ 6]);
358
word3_muladd(&w0, &w2, &w1, x[ 5], y[ 5]);
359
word3_muladd(&w0, &w2, &w1, x[ 6], y[ 4]);
360
word3_muladd(&w0, &w2, &w1, x[ 7], y[ 3]);
363
word3_muladd(&w1, &w0, &w2, x[ 4], y[ 7]);
364
word3_muladd(&w1, &w0, &w2, x[ 5], y[ 6]);
365
word3_muladd(&w1, &w0, &w2, x[ 6], y[ 5]);
366
word3_muladd(&w1, &w0, &w2, x[ 7], y[ 4]);
369
word3_muladd(&w2, &w1, &w0, x[ 5], y[ 7]);
370
word3_muladd(&w2, &w1, &w0, x[ 6], y[ 6]);
371
word3_muladd(&w2, &w1, &w0, x[ 7], y[ 5]);
374
word3_muladd(&w0, &w2, &w1, x[ 6], y[ 7]);
375
word3_muladd(&w0, &w2, &w1, x[ 7], y[ 6]);
378
word3_muladd(&w1, &w0, &w2, x[ 7], y[ 7]);
386
void bigint_comba_sqr9(word z[18], const word x[9])
388
word w2 = 0, w1 = 0, w0 = 0;
390
word3_muladd (&w2, &w1, &w0, x[ 0], x[ 0]);
393
word3_muladd_2(&w0, &w2, &w1, x[ 0], x[ 1]);
396
word3_muladd_2(&w1, &w0, &w2, x[ 0], x[ 2]);
397
word3_muladd (&w1, &w0, &w2, x[ 1], x[ 1]);
400
word3_muladd_2(&w2, &w1, &w0, x[ 0], x[ 3]);
401
word3_muladd_2(&w2, &w1, &w0, x[ 1], x[ 2]);
404
word3_muladd_2(&w0, &w2, &w1, x[ 0], x[ 4]);
405
word3_muladd_2(&w0, &w2, &w1, x[ 1], x[ 3]);
406
word3_muladd (&w0, &w2, &w1, x[ 2], x[ 2]);
409
word3_muladd_2(&w1, &w0, &w2, x[ 0], x[ 5]);
410
word3_muladd_2(&w1, &w0, &w2, x[ 1], x[ 4]);
411
word3_muladd_2(&w1, &w0, &w2, x[ 2], x[ 3]);
414
word3_muladd_2(&w2, &w1, &w0, x[ 0], x[ 6]);
415
word3_muladd_2(&w2, &w1, &w0, x[ 1], x[ 5]);
416
word3_muladd_2(&w2, &w1, &w0, x[ 2], x[ 4]);
417
word3_muladd (&w2, &w1, &w0, x[ 3], x[ 3]);
420
word3_muladd_2(&w0, &w2, &w1, x[ 0], x[ 7]);
421
word3_muladd_2(&w0, &w2, &w1, x[ 1], x[ 6]);
422
word3_muladd_2(&w0, &w2, &w1, x[ 2], x[ 5]);
423
word3_muladd_2(&w0, &w2, &w1, x[ 3], x[ 4]);
426
word3_muladd_2(&w1, &w0, &w2, x[ 0], x[ 8]);
427
word3_muladd_2(&w1, &w0, &w2, x[ 1], x[ 7]);
428
word3_muladd_2(&w1, &w0, &w2, x[ 2], x[ 6]);
429
word3_muladd_2(&w1, &w0, &w2, x[ 3], x[ 5]);
430
word3_muladd (&w1, &w0, &w2, x[ 4], x[ 4]);
433
word3_muladd_2(&w2, &w1, &w0, x[ 1], x[ 8]);
434
word3_muladd_2(&w2, &w1, &w0, x[ 2], x[ 7]);
435
word3_muladd_2(&w2, &w1, &w0, x[ 3], x[ 6]);
436
word3_muladd_2(&w2, &w1, &w0, x[ 4], x[ 5]);
439
word3_muladd_2(&w0, &w2, &w1, x[ 2], x[ 8]);
440
word3_muladd_2(&w0, &w2, &w1, x[ 3], x[ 7]);
441
word3_muladd_2(&w0, &w2, &w1, x[ 4], x[ 6]);
442
word3_muladd (&w0, &w2, &w1, x[ 5], x[ 5]);
445
word3_muladd_2(&w1, &w0, &w2, x[ 3], x[ 8]);
446
word3_muladd_2(&w1, &w0, &w2, x[ 4], x[ 7]);
447
word3_muladd_2(&w1, &w0, &w2, x[ 5], x[ 6]);
450
word3_muladd_2(&w2, &w1, &w0, x[ 4], x[ 8]);
451
word3_muladd_2(&w2, &w1, &w0, x[ 5], x[ 7]);
452
word3_muladd (&w2, &w1, &w0, x[ 6], x[ 6]);
455
word3_muladd_2(&w0, &w2, &w1, x[ 5], x[ 8]);
456
word3_muladd_2(&w0, &w2, &w1, x[ 6], x[ 7]);
459
word3_muladd_2(&w1, &w0, &w2, x[ 6], x[ 8]);
460
word3_muladd (&w1, &w0, &w2, x[ 7], x[ 7]);
463
word3_muladd_2(&w2, &w1, &w0, x[ 7], x[ 8]);
466
word3_muladd (&w0, &w2, &w1, x[ 8], x[ 8]);
472
* Comba 9x9 Multiplication
474
void bigint_comba_mul9(word z[18], const word x[9], const word y[9])
476
word w2 = 0, w1 = 0, w0 = 0;
478
word3_muladd(&w2, &w1, &w0, x[ 0], y[ 0]);
481
word3_muladd(&w0, &w2, &w1, x[ 0], y[ 1]);
482
word3_muladd(&w0, &w2, &w1, x[ 1], y[ 0]);
485
word3_muladd(&w1, &w0, &w2, x[ 0], y[ 2]);
486
word3_muladd(&w1, &w0, &w2, x[ 1], y[ 1]);
487
word3_muladd(&w1, &w0, &w2, x[ 2], y[ 0]);
490
word3_muladd(&w2, &w1, &w0, x[ 0], y[ 3]);
491
word3_muladd(&w2, &w1, &w0, x[ 1], y[ 2]);
492
word3_muladd(&w2, &w1, &w0, x[ 2], y[ 1]);
493
word3_muladd(&w2, &w1, &w0, x[ 3], y[ 0]);
496
word3_muladd(&w0, &w2, &w1, x[ 0], y[ 4]);
497
word3_muladd(&w0, &w2, &w1, x[ 1], y[ 3]);
498
word3_muladd(&w0, &w2, &w1, x[ 2], y[ 2]);
499
word3_muladd(&w0, &w2, &w1, x[ 3], y[ 1]);
500
word3_muladd(&w0, &w2, &w1, x[ 4], y[ 0]);
503
word3_muladd(&w1, &w0, &w2, x[ 0], y[ 5]);
504
word3_muladd(&w1, &w0, &w2, x[ 1], y[ 4]);
505
word3_muladd(&w1, &w0, &w2, x[ 2], y[ 3]);
506
word3_muladd(&w1, &w0, &w2, x[ 3], y[ 2]);
507
word3_muladd(&w1, &w0, &w2, x[ 4], y[ 1]);
508
word3_muladd(&w1, &w0, &w2, x[ 5], y[ 0]);
511
word3_muladd(&w2, &w1, &w0, x[ 0], y[ 6]);
512
word3_muladd(&w2, &w1, &w0, x[ 1], y[ 5]);
513
word3_muladd(&w2, &w1, &w0, x[ 2], y[ 4]);
514
word3_muladd(&w2, &w1, &w0, x[ 3], y[ 3]);
515
word3_muladd(&w2, &w1, &w0, x[ 4], y[ 2]);
516
word3_muladd(&w2, &w1, &w0, x[ 5], y[ 1]);
517
word3_muladd(&w2, &w1, &w0, x[ 6], y[ 0]);
520
word3_muladd(&w0, &w2, &w1, x[ 0], y[ 7]);
521
word3_muladd(&w0, &w2, &w1, x[ 1], y[ 6]);
522
word3_muladd(&w0, &w2, &w1, x[ 2], y[ 5]);
523
word3_muladd(&w0, &w2, &w1, x[ 3], y[ 4]);
524
word3_muladd(&w0, &w2, &w1, x[ 4], y[ 3]);
525
word3_muladd(&w0, &w2, &w1, x[ 5], y[ 2]);
526
word3_muladd(&w0, &w2, &w1, x[ 6], y[ 1]);
527
word3_muladd(&w0, &w2, &w1, x[ 7], y[ 0]);
530
word3_muladd(&w1, &w0, &w2, x[ 0], y[ 8]);
531
word3_muladd(&w1, &w0, &w2, x[ 1], y[ 7]);
532
word3_muladd(&w1, &w0, &w2, x[ 2], y[ 6]);
533
word3_muladd(&w1, &w0, &w2, x[ 3], y[ 5]);
534
word3_muladd(&w1, &w0, &w2, x[ 4], y[ 4]);
535
word3_muladd(&w1, &w0, &w2, x[ 5], y[ 3]);
536
word3_muladd(&w1, &w0, &w2, x[ 6], y[ 2]);
537
word3_muladd(&w1, &w0, &w2, x[ 7], y[ 1]);
538
word3_muladd(&w1, &w0, &w2, x[ 8], y[ 0]);
541
word3_muladd(&w2, &w1, &w0, x[ 1], y[ 8]);
542
word3_muladd(&w2, &w1, &w0, x[ 2], y[ 7]);
543
word3_muladd(&w2, &w1, &w0, x[ 3], y[ 6]);
544
word3_muladd(&w2, &w1, &w0, x[ 4], y[ 5]);
545
word3_muladd(&w2, &w1, &w0, x[ 5], y[ 4]);
546
word3_muladd(&w2, &w1, &w0, x[ 6], y[ 3]);
547
word3_muladd(&w2, &w1, &w0, x[ 7], y[ 2]);
548
word3_muladd(&w2, &w1, &w0, x[ 8], y[ 1]);
551
word3_muladd(&w0, &w2, &w1, x[ 2], y[ 8]);
552
word3_muladd(&w0, &w2, &w1, x[ 3], y[ 7]);
553
word3_muladd(&w0, &w2, &w1, x[ 4], y[ 6]);
554
word3_muladd(&w0, &w2, &w1, x[ 5], y[ 5]);
555
word3_muladd(&w0, &w2, &w1, x[ 6], y[ 4]);
556
word3_muladd(&w0, &w2, &w1, x[ 7], y[ 3]);
557
word3_muladd(&w0, &w2, &w1, x[ 8], y[ 2]);
560
word3_muladd(&w1, &w0, &w2, x[ 3], y[ 8]);
561
word3_muladd(&w1, &w0, &w2, x[ 4], y[ 7]);
562
word3_muladd(&w1, &w0, &w2, x[ 5], y[ 6]);
563
word3_muladd(&w1, &w0, &w2, x[ 6], y[ 5]);
564
word3_muladd(&w1, &w0, &w2, x[ 7], y[ 4]);
565
word3_muladd(&w1, &w0, &w2, x[ 8], y[ 3]);
568
word3_muladd(&w2, &w1, &w0, x[ 4], y[ 8]);
569
word3_muladd(&w2, &w1, &w0, x[ 5], y[ 7]);
570
word3_muladd(&w2, &w1, &w0, x[ 6], y[ 6]);
571
word3_muladd(&w2, &w1, &w0, x[ 7], y[ 5]);
572
word3_muladd(&w2, &w1, &w0, x[ 8], y[ 4]);
575
word3_muladd(&w0, &w2, &w1, x[ 5], y[ 8]);
576
word3_muladd(&w0, &w2, &w1, x[ 6], y[ 7]);
577
word3_muladd(&w0, &w2, &w1, x[ 7], y[ 6]);
578
word3_muladd(&w0, &w2, &w1, x[ 8], y[ 5]);
581
word3_muladd(&w1, &w0, &w2, x[ 6], y[ 8]);
582
word3_muladd(&w1, &w0, &w2, x[ 7], y[ 7]);
583
word3_muladd(&w1, &w0, &w2, x[ 8], y[ 6]);
586
word3_muladd(&w2, &w1, &w0, x[ 7], y[ 8]);
587
word3_muladd(&w2, &w1, &w0, x[ 8], y[ 7]);
590
word3_muladd(&w0, &w2, &w1, x[ 8], y[ 8]);
596
* Comba 16x16 Squaring
598
void bigint_comba_sqr16(word z[32], const word x[16])
600
word w2 = 0, w1 = 0, w0 = 0;
602
word3_muladd (&w2, &w1, &w0, x[ 0], x[ 0]);
605
word3_muladd_2(&w0, &w2, &w1, x[ 0], x[ 1]);
608
word3_muladd_2(&w1, &w0, &w2, x[ 0], x[ 2]);
609
word3_muladd (&w1, &w0, &w2, x[ 1], x[ 1]);
612
word3_muladd_2(&w2, &w1, &w0, x[ 0], x[ 3]);
613
word3_muladd_2(&w2, &w1, &w0, x[ 1], x[ 2]);
616
word3_muladd_2(&w0, &w2, &w1, x[ 0], x[ 4]);
617
word3_muladd_2(&w0, &w2, &w1, x[ 1], x[ 3]);
618
word3_muladd (&w0, &w2, &w1, x[ 2], x[ 2]);
621
word3_muladd_2(&w1, &w0, &w2, x[ 0], x[ 5]);
622
word3_muladd_2(&w1, &w0, &w2, x[ 1], x[ 4]);
623
word3_muladd_2(&w1, &w0, &w2, x[ 2], x[ 3]);
626
word3_muladd_2(&w2, &w1, &w0, x[ 0], x[ 6]);
627
word3_muladd_2(&w2, &w1, &w0, x[ 1], x[ 5]);
628
word3_muladd_2(&w2, &w1, &w0, x[ 2], x[ 4]);
629
word3_muladd (&w2, &w1, &w0, x[ 3], x[ 3]);
632
word3_muladd_2(&w0, &w2, &w1, x[ 0], x[ 7]);
633
word3_muladd_2(&w0, &w2, &w1, x[ 1], x[ 6]);
634
word3_muladd_2(&w0, &w2, &w1, x[ 2], x[ 5]);
635
word3_muladd_2(&w0, &w2, &w1, x[ 3], x[ 4]);
638
word3_muladd_2(&w1, &w0, &w2, x[ 0], x[ 8]);
639
word3_muladd_2(&w1, &w0, &w2, x[ 1], x[ 7]);
640
word3_muladd_2(&w1, &w0, &w2, x[ 2], x[ 6]);
641
word3_muladd_2(&w1, &w0, &w2, x[ 3], x[ 5]);
642
word3_muladd (&w1, &w0, &w2, x[ 4], x[ 4]);
645
word3_muladd_2(&w2, &w1, &w0, x[ 0], x[ 9]);
646
word3_muladd_2(&w2, &w1, &w0, x[ 1], x[ 8]);
647
word3_muladd_2(&w2, &w1, &w0, x[ 2], x[ 7]);
648
word3_muladd_2(&w2, &w1, &w0, x[ 3], x[ 6]);
649
word3_muladd_2(&w2, &w1, &w0, x[ 4], x[ 5]);
652
word3_muladd_2(&w0, &w2, &w1, x[ 0], x[10]);
653
word3_muladd_2(&w0, &w2, &w1, x[ 1], x[ 9]);
654
word3_muladd_2(&w0, &w2, &w1, x[ 2], x[ 8]);
655
word3_muladd_2(&w0, &w2, &w1, x[ 3], x[ 7]);
656
word3_muladd_2(&w0, &w2, &w1, x[ 4], x[ 6]);
657
word3_muladd (&w0, &w2, &w1, x[ 5], x[ 5]);
660
word3_muladd_2(&w1, &w0, &w2, x[ 0], x[11]);
661
word3_muladd_2(&w1, &w0, &w2, x[ 1], x[10]);
662
word3_muladd_2(&w1, &w0, &w2, x[ 2], x[ 9]);
663
word3_muladd_2(&w1, &w0, &w2, x[ 3], x[ 8]);
664
word3_muladd_2(&w1, &w0, &w2, x[ 4], x[ 7]);
665
word3_muladd_2(&w1, &w0, &w2, x[ 5], x[ 6]);
668
word3_muladd_2(&w2, &w1, &w0, x[ 0], x[12]);
669
word3_muladd_2(&w2, &w1, &w0, x[ 1], x[11]);
670
word3_muladd_2(&w2, &w1, &w0, x[ 2], x[10]);
671
word3_muladd_2(&w2, &w1, &w0, x[ 3], x[ 9]);
672
word3_muladd_2(&w2, &w1, &w0, x[ 4], x[ 8]);
673
word3_muladd_2(&w2, &w1, &w0, x[ 5], x[ 7]);
674
word3_muladd (&w2, &w1, &w0, x[ 6], x[ 6]);
677
word3_muladd_2(&w0, &w2, &w1, x[ 0], x[13]);
678
word3_muladd_2(&w0, &w2, &w1, x[ 1], x[12]);
679
word3_muladd_2(&w0, &w2, &w1, x[ 2], x[11]);
680
word3_muladd_2(&w0, &w2, &w1, x[ 3], x[10]);
681
word3_muladd_2(&w0, &w2, &w1, x[ 4], x[ 9]);
682
word3_muladd_2(&w0, &w2, &w1, x[ 5], x[ 8]);
683
word3_muladd_2(&w0, &w2, &w1, x[ 6], x[ 7]);
686
word3_muladd_2(&w1, &w0, &w2, x[ 0], x[14]);
687
word3_muladd_2(&w1, &w0, &w2, x[ 1], x[13]);
688
word3_muladd_2(&w1, &w0, &w2, x[ 2], x[12]);
689
word3_muladd_2(&w1, &w0, &w2, x[ 3], x[11]);
690
word3_muladd_2(&w1, &w0, &w2, x[ 4], x[10]);
691
word3_muladd_2(&w1, &w0, &w2, x[ 5], x[ 9]);
692
word3_muladd_2(&w1, &w0, &w2, x[ 6], x[ 8]);
693
word3_muladd (&w1, &w0, &w2, x[ 7], x[ 7]);
696
word3_muladd_2(&w2, &w1, &w0, x[ 0], x[15]);
697
word3_muladd_2(&w2, &w1, &w0, x[ 1], x[14]);
698
word3_muladd_2(&w2, &w1, &w0, x[ 2], x[13]);
699
word3_muladd_2(&w2, &w1, &w0, x[ 3], x[12]);
700
word3_muladd_2(&w2, &w1, &w0, x[ 4], x[11]);
701
word3_muladd_2(&w2, &w1, &w0, x[ 5], x[10]);
702
word3_muladd_2(&w2, &w1, &w0, x[ 6], x[ 9]);
703
word3_muladd_2(&w2, &w1, &w0, x[ 7], x[ 8]);
706
word3_muladd_2(&w0, &w2, &w1, x[ 1], x[15]);
707
word3_muladd_2(&w0, &w2, &w1, x[ 2], x[14]);
708
word3_muladd_2(&w0, &w2, &w1, x[ 3], x[13]);
709
word3_muladd_2(&w0, &w2, &w1, x[ 4], x[12]);
710
word3_muladd_2(&w0, &w2, &w1, x[ 5], x[11]);
711
word3_muladd_2(&w0, &w2, &w1, x[ 6], x[10]);
712
word3_muladd_2(&w0, &w2, &w1, x[ 7], x[ 9]);
713
word3_muladd (&w0, &w2, &w1, x[ 8], x[ 8]);
716
word3_muladd_2(&w1, &w0, &w2, x[ 2], x[15]);
717
word3_muladd_2(&w1, &w0, &w2, x[ 3], x[14]);
718
word3_muladd_2(&w1, &w0, &w2, x[ 4], x[13]);
719
word3_muladd_2(&w1, &w0, &w2, x[ 5], x[12]);
720
word3_muladd_2(&w1, &w0, &w2, x[ 6], x[11]);
721
word3_muladd_2(&w1, &w0, &w2, x[ 7], x[10]);
722
word3_muladd_2(&w1, &w0, &w2, x[ 8], x[ 9]);
725
word3_muladd_2(&w2, &w1, &w0, x[ 3], x[15]);
726
word3_muladd_2(&w2, &w1, &w0, x[ 4], x[14]);
727
word3_muladd_2(&w2, &w1, &w0, x[ 5], x[13]);
728
word3_muladd_2(&w2, &w1, &w0, x[ 6], x[12]);
729
word3_muladd_2(&w2, &w1, &w0, x[ 7], x[11]);
730
word3_muladd_2(&w2, &w1, &w0, x[ 8], x[10]);
731
word3_muladd (&w2, &w1, &w0, x[ 9], x[ 9]);
734
word3_muladd_2(&w0, &w2, &w1, x[ 4], x[15]);
735
word3_muladd_2(&w0, &w2, &w1, x[ 5], x[14]);
736
word3_muladd_2(&w0, &w2, &w1, x[ 6], x[13]);
737
word3_muladd_2(&w0, &w2, &w1, x[ 7], x[12]);
738
word3_muladd_2(&w0, &w2, &w1, x[ 8], x[11]);
739
word3_muladd_2(&w0, &w2, &w1, x[ 9], x[10]);
742
word3_muladd_2(&w1, &w0, &w2, x[ 5], x[15]);
743
word3_muladd_2(&w1, &w0, &w2, x[ 6], x[14]);
744
word3_muladd_2(&w1, &w0, &w2, x[ 7], x[13]);
745
word3_muladd_2(&w1, &w0, &w2, x[ 8], x[12]);
746
word3_muladd_2(&w1, &w0, &w2, x[ 9], x[11]);
747
word3_muladd (&w1, &w0, &w2, x[10], x[10]);
750
word3_muladd_2(&w2, &w1, &w0, x[ 6], x[15]);
751
word3_muladd_2(&w2, &w1, &w0, x[ 7], x[14]);
752
word3_muladd_2(&w2, &w1, &w0, x[ 8], x[13]);
753
word3_muladd_2(&w2, &w1, &w0, x[ 9], x[12]);
754
word3_muladd_2(&w2, &w1, &w0, x[10], x[11]);
757
word3_muladd_2(&w0, &w2, &w1, x[ 7], x[15]);
758
word3_muladd_2(&w0, &w2, &w1, x[ 8], x[14]);
759
word3_muladd_2(&w0, &w2, &w1, x[ 9], x[13]);
760
word3_muladd_2(&w0, &w2, &w1, x[10], x[12]);
761
word3_muladd (&w0, &w2, &w1, x[11], x[11]);
764
word3_muladd_2(&w1, &w0, &w2, x[ 8], x[15]);
765
word3_muladd_2(&w1, &w0, &w2, x[ 9], x[14]);
766
word3_muladd_2(&w1, &w0, &w2, x[10], x[13]);
767
word3_muladd_2(&w1, &w0, &w2, x[11], x[12]);
770
word3_muladd_2(&w2, &w1, &w0, x[ 9], x[15]);
771
word3_muladd_2(&w2, &w1, &w0, x[10], x[14]);
772
word3_muladd_2(&w2, &w1, &w0, x[11], x[13]);
773
word3_muladd (&w2, &w1, &w0, x[12], x[12]);
776
word3_muladd_2(&w0, &w2, &w1, x[10], x[15]);
777
word3_muladd_2(&w0, &w2, &w1, x[11], x[14]);
778
word3_muladd_2(&w0, &w2, &w1, x[12], x[13]);
781
word3_muladd_2(&w1, &w0, &w2, x[11], x[15]);
782
word3_muladd_2(&w1, &w0, &w2, x[12], x[14]);
783
word3_muladd (&w1, &w0, &w2, x[13], x[13]);
786
word3_muladd_2(&w2, &w1, &w0, x[12], x[15]);
787
word3_muladd_2(&w2, &w1, &w0, x[13], x[14]);
790
word3_muladd_2(&w0, &w2, &w1, x[13], x[15]);
791
word3_muladd (&w0, &w2, &w1, x[14], x[14]);
794
word3_muladd_2(&w1, &w0, &w2, x[14], x[15]);
797
word3_muladd (&w2, &w1, &w0, x[15], x[15]);
803
* Comba 16x16 Multiplication
805
void bigint_comba_mul16(word z[32], const word x[16], const word y[16])
807
word w2 = 0, w1 = 0, w0 = 0;
809
word3_muladd(&w2, &w1, &w0, x[ 0], y[ 0]);
812
word3_muladd(&w0, &w2, &w1, x[ 0], y[ 1]);
813
word3_muladd(&w0, &w2, &w1, x[ 1], y[ 0]);
816
word3_muladd(&w1, &w0, &w2, x[ 0], y[ 2]);
817
word3_muladd(&w1, &w0, &w2, x[ 1], y[ 1]);
818
word3_muladd(&w1, &w0, &w2, x[ 2], y[ 0]);
821
word3_muladd(&w2, &w1, &w0, x[ 0], y[ 3]);
822
word3_muladd(&w2, &w1, &w0, x[ 1], y[ 2]);
823
word3_muladd(&w2, &w1, &w0, x[ 2], y[ 1]);
824
word3_muladd(&w2, &w1, &w0, x[ 3], y[ 0]);
827
word3_muladd(&w0, &w2, &w1, x[ 0], y[ 4]);
828
word3_muladd(&w0, &w2, &w1, x[ 1], y[ 3]);
829
word3_muladd(&w0, &w2, &w1, x[ 2], y[ 2]);
830
word3_muladd(&w0, &w2, &w1, x[ 3], y[ 1]);
831
word3_muladd(&w0, &w2, &w1, x[ 4], y[ 0]);
834
word3_muladd(&w1, &w0, &w2, x[ 0], y[ 5]);
835
word3_muladd(&w1, &w0, &w2, x[ 1], y[ 4]);
836
word3_muladd(&w1, &w0, &w2, x[ 2], y[ 3]);
837
word3_muladd(&w1, &w0, &w2, x[ 3], y[ 2]);
838
word3_muladd(&w1, &w0, &w2, x[ 4], y[ 1]);
839
word3_muladd(&w1, &w0, &w2, x[ 5], y[ 0]);
842
word3_muladd(&w2, &w1, &w0, x[ 0], y[ 6]);
843
word3_muladd(&w2, &w1, &w0, x[ 1], y[ 5]);
844
word3_muladd(&w2, &w1, &w0, x[ 2], y[ 4]);
845
word3_muladd(&w2, &w1, &w0, x[ 3], y[ 3]);
846
word3_muladd(&w2, &w1, &w0, x[ 4], y[ 2]);
847
word3_muladd(&w2, &w1, &w0, x[ 5], y[ 1]);
848
word3_muladd(&w2, &w1, &w0, x[ 6], y[ 0]);
851
word3_muladd(&w0, &w2, &w1, x[ 0], y[ 7]);
852
word3_muladd(&w0, &w2, &w1, x[ 1], y[ 6]);
853
word3_muladd(&w0, &w2, &w1, x[ 2], y[ 5]);
854
word3_muladd(&w0, &w2, &w1, x[ 3], y[ 4]);
855
word3_muladd(&w0, &w2, &w1, x[ 4], y[ 3]);
856
word3_muladd(&w0, &w2, &w1, x[ 5], y[ 2]);
857
word3_muladd(&w0, &w2, &w1, x[ 6], y[ 1]);
858
word3_muladd(&w0, &w2, &w1, x[ 7], y[ 0]);
861
word3_muladd(&w1, &w0, &w2, x[ 0], y[ 8]);
862
word3_muladd(&w1, &w0, &w2, x[ 1], y[ 7]);
863
word3_muladd(&w1, &w0, &w2, x[ 2], y[ 6]);
864
word3_muladd(&w1, &w0, &w2, x[ 3], y[ 5]);
865
word3_muladd(&w1, &w0, &w2, x[ 4], y[ 4]);
866
word3_muladd(&w1, &w0, &w2, x[ 5], y[ 3]);
867
word3_muladd(&w1, &w0, &w2, x[ 6], y[ 2]);
868
word3_muladd(&w1, &w0, &w2, x[ 7], y[ 1]);
869
word3_muladd(&w1, &w0, &w2, x[ 8], y[ 0]);
872
word3_muladd(&w2, &w1, &w0, x[ 0], y[ 9]);
873
word3_muladd(&w2, &w1, &w0, x[ 1], y[ 8]);
874
word3_muladd(&w2, &w1, &w0, x[ 2], y[ 7]);
875
word3_muladd(&w2, &w1, &w0, x[ 3], y[ 6]);
876
word3_muladd(&w2, &w1, &w0, x[ 4], y[ 5]);
877
word3_muladd(&w2, &w1, &w0, x[ 5], y[ 4]);
878
word3_muladd(&w2, &w1, &w0, x[ 6], y[ 3]);
879
word3_muladd(&w2, &w1, &w0, x[ 7], y[ 2]);
880
word3_muladd(&w2, &w1, &w0, x[ 8], y[ 1]);
881
word3_muladd(&w2, &w1, &w0, x[ 9], y[ 0]);
884
word3_muladd(&w0, &w2, &w1, x[ 0], y[10]);
885
word3_muladd(&w0, &w2, &w1, x[ 1], y[ 9]);
886
word3_muladd(&w0, &w2, &w1, x[ 2], y[ 8]);
887
word3_muladd(&w0, &w2, &w1, x[ 3], y[ 7]);
888
word3_muladd(&w0, &w2, &w1, x[ 4], y[ 6]);
889
word3_muladd(&w0, &w2, &w1, x[ 5], y[ 5]);
890
word3_muladd(&w0, &w2, &w1, x[ 6], y[ 4]);
891
word3_muladd(&w0, &w2, &w1, x[ 7], y[ 3]);
892
word3_muladd(&w0, &w2, &w1, x[ 8], y[ 2]);
893
word3_muladd(&w0, &w2, &w1, x[ 9], y[ 1]);
894
word3_muladd(&w0, &w2, &w1, x[10], y[ 0]);
897
word3_muladd(&w1, &w0, &w2, x[ 0], y[11]);
898
word3_muladd(&w1, &w0, &w2, x[ 1], y[10]);
899
word3_muladd(&w1, &w0, &w2, x[ 2], y[ 9]);
900
word3_muladd(&w1, &w0, &w2, x[ 3], y[ 8]);
901
word3_muladd(&w1, &w0, &w2, x[ 4], y[ 7]);
902
word3_muladd(&w1, &w0, &w2, x[ 5], y[ 6]);
903
word3_muladd(&w1, &w0, &w2, x[ 6], y[ 5]);
904
word3_muladd(&w1, &w0, &w2, x[ 7], y[ 4]);
905
word3_muladd(&w1, &w0, &w2, x[ 8], y[ 3]);
906
word3_muladd(&w1, &w0, &w2, x[ 9], y[ 2]);
907
word3_muladd(&w1, &w0, &w2, x[10], y[ 1]);
908
word3_muladd(&w1, &w0, &w2, x[11], y[ 0]);
911
word3_muladd(&w2, &w1, &w0, x[ 0], y[12]);
912
word3_muladd(&w2, &w1, &w0, x[ 1], y[11]);
913
word3_muladd(&w2, &w1, &w0, x[ 2], y[10]);
914
word3_muladd(&w2, &w1, &w0, x[ 3], y[ 9]);
915
word3_muladd(&w2, &w1, &w0, x[ 4], y[ 8]);
916
word3_muladd(&w2, &w1, &w0, x[ 5], y[ 7]);
917
word3_muladd(&w2, &w1, &w0, x[ 6], y[ 6]);
918
word3_muladd(&w2, &w1, &w0, x[ 7], y[ 5]);
919
word3_muladd(&w2, &w1, &w0, x[ 8], y[ 4]);
920
word3_muladd(&w2, &w1, &w0, x[ 9], y[ 3]);
921
word3_muladd(&w2, &w1, &w0, x[10], y[ 2]);
922
word3_muladd(&w2, &w1, &w0, x[11], y[ 1]);
923
word3_muladd(&w2, &w1, &w0, x[12], y[ 0]);
926
word3_muladd(&w0, &w2, &w1, x[ 0], y[13]);
927
word3_muladd(&w0, &w2, &w1, x[ 1], y[12]);
928
word3_muladd(&w0, &w2, &w1, x[ 2], y[11]);
929
word3_muladd(&w0, &w2, &w1, x[ 3], y[10]);
930
word3_muladd(&w0, &w2, &w1, x[ 4], y[ 9]);
931
word3_muladd(&w0, &w2, &w1, x[ 5], y[ 8]);
932
word3_muladd(&w0, &w2, &w1, x[ 6], y[ 7]);
933
word3_muladd(&w0, &w2, &w1, x[ 7], y[ 6]);
934
word3_muladd(&w0, &w2, &w1, x[ 8], y[ 5]);
935
word3_muladd(&w0, &w2, &w1, x[ 9], y[ 4]);
936
word3_muladd(&w0, &w2, &w1, x[10], y[ 3]);
937
word3_muladd(&w0, &w2, &w1, x[11], y[ 2]);
938
word3_muladd(&w0, &w2, &w1, x[12], y[ 1]);
939
word3_muladd(&w0, &w2, &w1, x[13], y[ 0]);
942
word3_muladd(&w1, &w0, &w2, x[ 0], y[14]);
943
word3_muladd(&w1, &w0, &w2, x[ 1], y[13]);
944
word3_muladd(&w1, &w0, &w2, x[ 2], y[12]);
945
word3_muladd(&w1, &w0, &w2, x[ 3], y[11]);
946
word3_muladd(&w1, &w0, &w2, x[ 4], y[10]);
947
word3_muladd(&w1, &w0, &w2, x[ 5], y[ 9]);
948
word3_muladd(&w1, &w0, &w2, x[ 6], y[ 8]);
949
word3_muladd(&w1, &w0, &w2, x[ 7], y[ 7]);
950
word3_muladd(&w1, &w0, &w2, x[ 8], y[ 6]);
951
word3_muladd(&w1, &w0, &w2, x[ 9], y[ 5]);
952
word3_muladd(&w1, &w0, &w2, x[10], y[ 4]);
953
word3_muladd(&w1, &w0, &w2, x[11], y[ 3]);
954
word3_muladd(&w1, &w0, &w2, x[12], y[ 2]);
955
word3_muladd(&w1, &w0, &w2, x[13], y[ 1]);
956
word3_muladd(&w1, &w0, &w2, x[14], y[ 0]);
959
word3_muladd(&w2, &w1, &w0, x[ 0], y[15]);
960
word3_muladd(&w2, &w1, &w0, x[ 1], y[14]);
961
word3_muladd(&w2, &w1, &w0, x[ 2], y[13]);
962
word3_muladd(&w2, &w1, &w0, x[ 3], y[12]);
963
word3_muladd(&w2, &w1, &w0, x[ 4], y[11]);
964
word3_muladd(&w2, &w1, &w0, x[ 5], y[10]);
965
word3_muladd(&w2, &w1, &w0, x[ 6], y[ 9]);
966
word3_muladd(&w2, &w1, &w0, x[ 7], y[ 8]);
967
word3_muladd(&w2, &w1, &w0, x[ 8], y[ 7]);
968
word3_muladd(&w2, &w1, &w0, x[ 9], y[ 6]);
969
word3_muladd(&w2, &w1, &w0, x[10], y[ 5]);
970
word3_muladd(&w2, &w1, &w0, x[11], y[ 4]);
971
word3_muladd(&w2, &w1, &w0, x[12], y[ 3]);
972
word3_muladd(&w2, &w1, &w0, x[13], y[ 2]);
973
word3_muladd(&w2, &w1, &w0, x[14], y[ 1]);
974
word3_muladd(&w2, &w1, &w0, x[15], y[ 0]);
977
word3_muladd(&w0, &w2, &w1, x[ 1], y[15]);
978
word3_muladd(&w0, &w2, &w1, x[ 2], y[14]);
979
word3_muladd(&w0, &w2, &w1, x[ 3], y[13]);
980
word3_muladd(&w0, &w2, &w1, x[ 4], y[12]);
981
word3_muladd(&w0, &w2, &w1, x[ 5], y[11]);
982
word3_muladd(&w0, &w2, &w1, x[ 6], y[10]);
983
word3_muladd(&w0, &w2, &w1, x[ 7], y[ 9]);
984
word3_muladd(&w0, &w2, &w1, x[ 8], y[ 8]);
985
word3_muladd(&w0, &w2, &w1, x[ 9], y[ 7]);
986
word3_muladd(&w0, &w2, &w1, x[10], y[ 6]);
987
word3_muladd(&w0, &w2, &w1, x[11], y[ 5]);
988
word3_muladd(&w0, &w2, &w1, x[12], y[ 4]);
989
word3_muladd(&w0, &w2, &w1, x[13], y[ 3]);
990
word3_muladd(&w0, &w2, &w1, x[14], y[ 2]);
991
word3_muladd(&w0, &w2, &w1, x[15], y[ 1]);
994
word3_muladd(&w1, &w0, &w2, x[ 2], y[15]);
995
word3_muladd(&w1, &w0, &w2, x[ 3], y[14]);
996
word3_muladd(&w1, &w0, &w2, x[ 4], y[13]);
997
word3_muladd(&w1, &w0, &w2, x[ 5], y[12]);
998
word3_muladd(&w1, &w0, &w2, x[ 6], y[11]);
999
word3_muladd(&w1, &w0, &w2, x[ 7], y[10]);
1000
word3_muladd(&w1, &w0, &w2, x[ 8], y[ 9]);
1001
word3_muladd(&w1, &w0, &w2, x[ 9], y[ 8]);
1002
word3_muladd(&w1, &w0, &w2, x[10], y[ 7]);
1003
word3_muladd(&w1, &w0, &w2, x[11], y[ 6]);
1004
word3_muladd(&w1, &w0, &w2, x[12], y[ 5]);
1005
word3_muladd(&w1, &w0, &w2, x[13], y[ 4]);
1006
word3_muladd(&w1, &w0, &w2, x[14], y[ 3]);
1007
word3_muladd(&w1, &w0, &w2, x[15], y[ 2]);
1010
word3_muladd(&w2, &w1, &w0, x[ 3], y[15]);
1011
word3_muladd(&w2, &w1, &w0, x[ 4], y[14]);
1012
word3_muladd(&w2, &w1, &w0, x[ 5], y[13]);
1013
word3_muladd(&w2, &w1, &w0, x[ 6], y[12]);
1014
word3_muladd(&w2, &w1, &w0, x[ 7], y[11]);
1015
word3_muladd(&w2, &w1, &w0, x[ 8], y[10]);
1016
word3_muladd(&w2, &w1, &w0, x[ 9], y[ 9]);
1017
word3_muladd(&w2, &w1, &w0, x[10], y[ 8]);
1018
word3_muladd(&w2, &w1, &w0, x[11], y[ 7]);
1019
word3_muladd(&w2, &w1, &w0, x[12], y[ 6]);
1020
word3_muladd(&w2, &w1, &w0, x[13], y[ 5]);
1021
word3_muladd(&w2, &w1, &w0, x[14], y[ 4]);
1022
word3_muladd(&w2, &w1, &w0, x[15], y[ 3]);
1025
word3_muladd(&w0, &w2, &w1, x[ 4], y[15]);
1026
word3_muladd(&w0, &w2, &w1, x[ 5], y[14]);
1027
word3_muladd(&w0, &w2, &w1, x[ 6], y[13]);
1028
word3_muladd(&w0, &w2, &w1, x[ 7], y[12]);
1029
word3_muladd(&w0, &w2, &w1, x[ 8], y[11]);
1030
word3_muladd(&w0, &w2, &w1, x[ 9], y[10]);
1031
word3_muladd(&w0, &w2, &w1, x[10], y[ 9]);
1032
word3_muladd(&w0, &w2, &w1, x[11], y[ 8]);
1033
word3_muladd(&w0, &w2, &w1, x[12], y[ 7]);
1034
word3_muladd(&w0, &w2, &w1, x[13], y[ 6]);
1035
word3_muladd(&w0, &w2, &w1, x[14], y[ 5]);
1036
word3_muladd(&w0, &w2, &w1, x[15], y[ 4]);
1039
word3_muladd(&w1, &w0, &w2, x[ 5], y[15]);
1040
word3_muladd(&w1, &w0, &w2, x[ 6], y[14]);
1041
word3_muladd(&w1, &w0, &w2, x[ 7], y[13]);
1042
word3_muladd(&w1, &w0, &w2, x[ 8], y[12]);
1043
word3_muladd(&w1, &w0, &w2, x[ 9], y[11]);
1044
word3_muladd(&w1, &w0, &w2, x[10], y[10]);
1045
word3_muladd(&w1, &w0, &w2, x[11], y[ 9]);
1046
word3_muladd(&w1, &w0, &w2, x[12], y[ 8]);
1047
word3_muladd(&w1, &w0, &w2, x[13], y[ 7]);
1048
word3_muladd(&w1, &w0, &w2, x[14], y[ 6]);
1049
word3_muladd(&w1, &w0, &w2, x[15], y[ 5]);
1052
word3_muladd(&w2, &w1, &w0, x[ 6], y[15]);
1053
word3_muladd(&w2, &w1, &w0, x[ 7], y[14]);
1054
word3_muladd(&w2, &w1, &w0, x[ 8], y[13]);
1055
word3_muladd(&w2, &w1, &w0, x[ 9], y[12]);
1056
word3_muladd(&w2, &w1, &w0, x[10], y[11]);
1057
word3_muladd(&w2, &w1, &w0, x[11], y[10]);
1058
word3_muladd(&w2, &w1, &w0, x[12], y[ 9]);
1059
word3_muladd(&w2, &w1, &w0, x[13], y[ 8]);
1060
word3_muladd(&w2, &w1, &w0, x[14], y[ 7]);
1061
word3_muladd(&w2, &w1, &w0, x[15], y[ 6]);
1064
word3_muladd(&w0, &w2, &w1, x[ 7], y[15]);
1065
word3_muladd(&w0, &w2, &w1, x[ 8], y[14]);
1066
word3_muladd(&w0, &w2, &w1, x[ 9], y[13]);
1067
word3_muladd(&w0, &w2, &w1, x[10], y[12]);
1068
word3_muladd(&w0, &w2, &w1, x[11], y[11]);
1069
word3_muladd(&w0, &w2, &w1, x[12], y[10]);
1070
word3_muladd(&w0, &w2, &w1, x[13], y[ 9]);
1071
word3_muladd(&w0, &w2, &w1, x[14], y[ 8]);
1072
word3_muladd(&w0, &w2, &w1, x[15], y[ 7]);
1075
word3_muladd(&w1, &w0, &w2, x[ 8], y[15]);
1076
word3_muladd(&w1, &w0, &w2, x[ 9], y[14]);
1077
word3_muladd(&w1, &w0, &w2, x[10], y[13]);
1078
word3_muladd(&w1, &w0, &w2, x[11], y[12]);
1079
word3_muladd(&w1, &w0, &w2, x[12], y[11]);
1080
word3_muladd(&w1, &w0, &w2, x[13], y[10]);
1081
word3_muladd(&w1, &w0, &w2, x[14], y[ 9]);
1082
word3_muladd(&w1, &w0, &w2, x[15], y[ 8]);
1085
word3_muladd(&w2, &w1, &w0, x[ 9], y[15]);
1086
word3_muladd(&w2, &w1, &w0, x[10], y[14]);
1087
word3_muladd(&w2, &w1, &w0, x[11], y[13]);
1088
word3_muladd(&w2, &w1, &w0, x[12], y[12]);
1089
word3_muladd(&w2, &w1, &w0, x[13], y[11]);
1090
word3_muladd(&w2, &w1, &w0, x[14], y[10]);
1091
word3_muladd(&w2, &w1, &w0, x[15], y[ 9]);
1094
word3_muladd(&w0, &w2, &w1, x[10], y[15]);
1095
word3_muladd(&w0, &w2, &w1, x[11], y[14]);
1096
word3_muladd(&w0, &w2, &w1, x[12], y[13]);
1097
word3_muladd(&w0, &w2, &w1, x[13], y[12]);
1098
word3_muladd(&w0, &w2, &w1, x[14], y[11]);
1099
word3_muladd(&w0, &w2, &w1, x[15], y[10]);
1102
word3_muladd(&w1, &w0, &w2, x[11], y[15]);
1103
word3_muladd(&w1, &w0, &w2, x[12], y[14]);
1104
word3_muladd(&w1, &w0, &w2, x[13], y[13]);
1105
word3_muladd(&w1, &w0, &w2, x[14], y[12]);
1106
word3_muladd(&w1, &w0, &w2, x[15], y[11]);
1109
word3_muladd(&w2, &w1, &w0, x[12], y[15]);
1110
word3_muladd(&w2, &w1, &w0, x[13], y[14]);
1111
word3_muladd(&w2, &w1, &w0, x[14], y[13]);
1112
word3_muladd(&w2, &w1, &w0, x[15], y[12]);
1115
word3_muladd(&w0, &w2, &w1, x[13], y[15]);
1116
word3_muladd(&w0, &w2, &w1, x[14], y[14]);
1117
word3_muladd(&w0, &w2, &w1, x[15], y[13]);
1120
word3_muladd(&w1, &w0, &w2, x[14], y[15]);
1121
word3_muladd(&w1, &w0, &w2, x[15], y[14]);
1124
word3_muladd(&w2, &w1, &w0, x[15], y[15]);