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