Botan 2.19.1
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 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
12namespace Botan {
13
14/*
15* Comba 4x4 Squaring
16*/
17void 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*/
50void 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*/
89void 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*/
141void 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*/
208void 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*/
283void 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*/
386void 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*/
474void 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*/
598void 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*/
805void 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*/
1132void 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*/
1535void 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}
Definition: alg_id.cpp:13
void bigint_comba_mul4(word z[8], const word x[4], const word y[4])
Definition: mp_comba.cpp:50
void bigint_comba_sqr6(word z[12], const word x[6])
Definition: mp_comba.cpp:89
void bigint_comba_sqr16(word z[32], const word x[16])
Definition: mp_comba.cpp:598
void bigint_comba_mul8(word z[16], const word x[8], const word y[8])
Definition: mp_comba.cpp:283
void bigint_comba_sqr4(word z[8], const word x[4])
Definition: mp_comba.cpp:17
void bigint_comba_sqr9(word z[18], const word x[9])
Definition: mp_comba.cpp:386
void word3_muladd(word *w2, word *w1, word *w0, word x, word y)
Definition: mp_asmi.h:451
void bigint_comba_mul24(word z[48], const word x[24], const word y[24])
Definition: mp_comba.cpp:1535
void bigint_comba_sqr24(word z[48], const word x[24])
Definition: mp_comba.cpp:1132
void bigint_comba_mul9(word z[18], const word x[9], const word y[9])
Definition: mp_comba.cpp:474
void word3_muladd_2(word *w2, word *w1, word *w0, word x, word y)
Definition: mp_asmi.h:536
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_sqr8(word z[16], const word x[8])
Definition: mp_comba.cpp:208