Coverage Report

Created: 2020-11-21 08:34

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