Coverage Report

Created: 2020-06-30 13:58

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