Coverage Report

Created: 2020-02-14 15:38

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