Coverage Report

Created: 2021-02-21 07:20

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