Coverage Report

Created: 2021-05-04 09:02

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