Coverage Report

Created: 2020-10-17 06:46

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