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