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