Coverage Report

Created: 2020-05-23 13:54

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