Coverage Report

Created: 2022-06-23 06:44

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