Coverage Report

Created: 2024-11-21 07:03

/src/nss-nspr/nss/lib/freebl/mpi/mp_comba.c
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * The below file is derived from TFM v0.03.
3
 * It contains code from fp_mul_comba.c and
4
 * fp_sqr_comba.c, which contained the following license.
5
 *
6
 * Right now, the assembly in this file limits
7
 * this code to AMD 64.
8
 *
9
 * This file is public domain.
10
 */
11
12
/* TomsFastMath, a fast ISO C bignum library.
13
 *
14
 * This project is meant to fill in where LibTomMath
15
 * falls short.  That is speed ;-)
16
 *
17
 * This project is public domain and free for all purposes.
18
 *
19
 * Tom St Denis, tomstdenis@iahu.ca
20
 */
21
22
#include "mpi-priv.h"
23
24
/* clamp digits */
25
#define mp_clamp(a)                                      \
26
137k
    {                                                    \
27
157k
        while ((a)->used && (a)->dp[(a)->used - 1] == 0) \
28
137k
            --((a)->used);                               \
29
137k
        (a)->sign = (a)->used ? (a)->sign : ZPOS;        \
30
137k
    }
31
32
/* anything you need at the start */
33
#define COMBA_START
34
35
/* clear the chaining variables */
36
#define COMBA_CLEAR \
37
49.8k
    c0 = c1 = c2 = 0;
38
39
/* forward the carry to the next digit */
40
#define COMBA_FORWARD \
41
549k
    do {              \
42
549k
        c0 = c1;      \
43
549k
        c1 = c2;      \
44
549k
        c2 = 0;       \
45
549k
    } while (0);
46
47
/* anything you need at the end */
48
#define COMBA_FINI
49
50
/* this should multiply i and j  */
51
#define MULADD(i, j)                                \
52
4.82M
    __asm__(                                        \
53
4.82M
        "movq  %6,%%rax     \n\t"                   \
54
4.82M
        "mulq  %7           \n\t"                   \
55
4.82M
        "addq  %%rax,%0     \n\t"                   \
56
4.82M
        "adcq  %%rdx,%1     \n\t"                   \
57
4.82M
        "adcq  $0,%2        \n\t"                   \
58
4.82M
        : "=r"(c0), "=r"(c1), "=r"(c2)              \
59
4.82M
        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
60
4.82M
        : "%rax", "%rdx", "cc");
61
62
/* sqr macros only */
63
#define CLEAR_CARRY \
64
87.9k
    c0 = c1 = c2 = 0;
65
66
#define COMBA_STORE(x) \
67
3.21M
    x = c0;
68
69
#define COMBA_STORE2(x) \
70
137k
    x = c1;
71
72
#define CARRY_FORWARD \
73
2.53M
    do {              \
74
2.53M
        c0 = c1;      \
75
2.53M
        c1 = c2;      \
76
2.53M
        c2 = 0;       \
77
2.53M
    } while (0);
78
79
#define COMBA_FINI
80
81
#define SQRADD(i, j)                        \
82
1.35M
    __asm__(                                \
83
1.35M
        "movq  %6,%%rax     \n\t"           \
84
1.35M
        "mulq  %%rax        \n\t"           \
85
1.35M
        "addq  %%rax,%0     \n\t"           \
86
1.35M
        "adcq  %%rdx,%1     \n\t"           \
87
1.35M
        "adcq  $0,%2        \n\t"           \
88
1.35M
        : "=r"(c0), "=r"(c1), "=r"(c2)      \
89
1.35M
        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
90
1.35M
        : "%rax", "%rdx", "cc");
91
92
#define SQRADD2(i, j)                               \
93
807k
    __asm__(                                        \
94
807k
        "movq  %6,%%rax     \n\t"                   \
95
807k
        "mulq  %7           \n\t"                   \
96
807k
        "addq  %%rax,%0     \n\t"                   \
97
807k
        "adcq  %%rdx,%1     \n\t"                   \
98
807k
        "adcq  $0,%2        \n\t"                   \
99
807k
        "addq  %%rax,%0     \n\t"                   \
100
807k
        "adcq  %%rdx,%1     \n\t"                   \
101
807k
        "adcq  $0,%2        \n\t"                   \
102
807k
        : "=r"(c0), "=r"(c1), "=r"(c2)              \
103
807k
        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
104
807k
        : "%rax", "%rdx", "cc");
105
106
#define SQRADDSC(i, j)                    \
107
1.86M
    __asm__(                              \
108
1.86M
        "movq  %3,%%rax     \n\t"         \
109
1.86M
        "mulq  %4           \n\t"         \
110
1.86M
        "movq  %%rax,%0     \n\t"         \
111
1.86M
        "movq  %%rdx,%1     \n\t"         \
112
1.86M
        "xorq  %2,%2        \n\t"         \
113
1.86M
        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
114
1.86M
        : "g"(i), "g"(j)                  \
115
1.86M
        : "%rax", "%rdx", "cc");
116
117
#define SQRADDAC(i, j)                                 \
118
13.7M
    __asm__(                                           \
119
13.7M
        "movq  %6,%%rax     \n\t"                      \
120
13.7M
        "mulq  %7           \n\t"                      \
121
13.7M
        "addq  %%rax,%0     \n\t"                      \
122
13.7M
        "adcq  %%rdx,%1     \n\t"                      \
123
13.7M
        "adcq  $0,%2        \n\t"                      \
124
13.7M
        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
125
13.7M
        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
126
13.7M
        : "%rax", "%rdx", "cc");
127
128
#define SQRADDDB                                                  \
129
1.86M
    __asm__(                                                      \
130
1.86M
        "addq %6,%0         \n\t"                                 \
131
1.86M
        "adcq %7,%1         \n\t"                                 \
132
1.86M
        "adcq %8,%2         \n\t"                                 \
133
1.86M
        "addq %6,%0         \n\t"                                 \
134
1.86M
        "adcq %7,%1         \n\t"                                 \
135
1.86M
        "adcq %8,%2         \n\t"                                 \
136
1.86M
        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
137
1.86M
        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
138
1.86M
        : "cc");
139
140
void
141
s_mp_mul_comba_4(const mp_int *A, const mp_int *B, mp_int *C)
142
41.9k
{
143
41.9k
    mp_digit c0, c1, c2, at[8];
144
145
41.9k
    memcpy(at, A->dp, 4 * sizeof(mp_digit));
146
41.9k
    memcpy(at + 4, B->dp, 4 * sizeof(mp_digit));
147
41.9k
    COMBA_START;
148
149
41.9k
    COMBA_CLEAR;
150
    /* 0 */
151
41.9k
    MULADD(at[0], at[4]);
152
41.9k
    COMBA_STORE(C->dp[0]);
153
    /* 1 */
154
41.9k
    COMBA_FORWARD;
155
41.9k
    MULADD(at[0], at[5]);
156
41.9k
    MULADD(at[1], at[4]);
157
41.9k
    COMBA_STORE(C->dp[1]);
158
    /* 2 */
159
41.9k
    COMBA_FORWARD;
160
41.9k
    MULADD(at[0], at[6]);
161
41.9k
    MULADD(at[1], at[5]);
162
41.9k
    MULADD(at[2], at[4]);
163
41.9k
    COMBA_STORE(C->dp[2]);
164
    /* 3 */
165
41.9k
    COMBA_FORWARD;
166
41.9k
    MULADD(at[0], at[7]);
167
41.9k
    MULADD(at[1], at[6]);
168
41.9k
    MULADD(at[2], at[5]);
169
41.9k
    MULADD(at[3], at[4]);
170
41.9k
    COMBA_STORE(C->dp[3]);
171
    /* 4 */
172
41.9k
    COMBA_FORWARD;
173
41.9k
    MULADD(at[1], at[7]);
174
41.9k
    MULADD(at[2], at[6]);
175
41.9k
    MULADD(at[3], at[5]);
176
41.9k
    COMBA_STORE(C->dp[4]);
177
    /* 5 */
178
41.9k
    COMBA_FORWARD;
179
41.9k
    MULADD(at[2], at[7]);
180
41.9k
    MULADD(at[3], at[6]);
181
41.9k
    COMBA_STORE(C->dp[5]);
182
    /* 6 */
183
41.9k
    COMBA_FORWARD;
184
41.9k
    MULADD(at[3], at[7]);
185
41.9k
    COMBA_STORE(C->dp[6]);
186
41.9k
    COMBA_STORE2(C->dp[7]);
187
41.9k
    C->used = 8;
188
41.9k
    C->sign = A->sign ^ B->sign;
189
41.9k
    mp_clamp(C);
190
41.9k
    COMBA_FINI;
191
41.9k
}
192
193
void
194
s_mp_mul_comba_8(const mp_int *A, const mp_int *B, mp_int *C)
195
3.46k
{
196
3.46k
    mp_digit c0, c1, c2, at[16];
197
198
3.46k
    memcpy(at, A->dp, 8 * sizeof(mp_digit));
199
3.46k
    memcpy(at + 8, B->dp, 8 * sizeof(mp_digit));
200
3.46k
    COMBA_START;
201
202
3.46k
    COMBA_CLEAR;
203
    /* 0 */
204
3.46k
    MULADD(at[0], at[8]);
205
3.46k
    COMBA_STORE(C->dp[0]);
206
    /* 1 */
207
3.46k
    COMBA_FORWARD;
208
3.46k
    MULADD(at[0], at[9]);
209
3.46k
    MULADD(at[1], at[8]);
210
3.46k
    COMBA_STORE(C->dp[1]);
211
    /* 2 */
212
3.46k
    COMBA_FORWARD;
213
3.46k
    MULADD(at[0], at[10]);
214
3.46k
    MULADD(at[1], at[9]);
215
3.46k
    MULADD(at[2], at[8]);
216
3.46k
    COMBA_STORE(C->dp[2]);
217
    /* 3 */
218
3.46k
    COMBA_FORWARD;
219
3.46k
    MULADD(at[0], at[11]);
220
3.46k
    MULADD(at[1], at[10]);
221
3.46k
    MULADD(at[2], at[9]);
222
3.46k
    MULADD(at[3], at[8]);
223
3.46k
    COMBA_STORE(C->dp[3]);
224
    /* 4 */
225
3.46k
    COMBA_FORWARD;
226
3.46k
    MULADD(at[0], at[12]);
227
3.46k
    MULADD(at[1], at[11]);
228
3.46k
    MULADD(at[2], at[10]);
229
3.46k
    MULADD(at[3], at[9]);
230
3.46k
    MULADD(at[4], at[8]);
231
3.46k
    COMBA_STORE(C->dp[4]);
232
    /* 5 */
233
3.46k
    COMBA_FORWARD;
234
3.46k
    MULADD(at[0], at[13]);
235
3.46k
    MULADD(at[1], at[12]);
236
3.46k
    MULADD(at[2], at[11]);
237
3.46k
    MULADD(at[3], at[10]);
238
3.46k
    MULADD(at[4], at[9]);
239
3.46k
    MULADD(at[5], at[8]);
240
3.46k
    COMBA_STORE(C->dp[5]);
241
    /* 6 */
242
3.46k
    COMBA_FORWARD;
243
3.46k
    MULADD(at[0], at[14]);
244
3.46k
    MULADD(at[1], at[13]);
245
3.46k
    MULADD(at[2], at[12]);
246
3.46k
    MULADD(at[3], at[11]);
247
3.46k
    MULADD(at[4], at[10]);
248
3.46k
    MULADD(at[5], at[9]);
249
3.46k
    MULADD(at[6], at[8]);
250
3.46k
    COMBA_STORE(C->dp[6]);
251
    /* 7 */
252
3.46k
    COMBA_FORWARD;
253
3.46k
    MULADD(at[0], at[15]);
254
3.46k
    MULADD(at[1], at[14]);
255
3.46k
    MULADD(at[2], at[13]);
256
3.46k
    MULADD(at[3], at[12]);
257
3.46k
    MULADD(at[4], at[11]);
258
3.46k
    MULADD(at[5], at[10]);
259
3.46k
    MULADD(at[6], at[9]);
260
3.46k
    MULADD(at[7], at[8]);
261
3.46k
    COMBA_STORE(C->dp[7]);
262
    /* 8 */
263
3.46k
    COMBA_FORWARD;
264
3.46k
    MULADD(at[1], at[15]);
265
3.46k
    MULADD(at[2], at[14]);
266
3.46k
    MULADD(at[3], at[13]);
267
3.46k
    MULADD(at[4], at[12]);
268
3.46k
    MULADD(at[5], at[11]);
269
3.46k
    MULADD(at[6], at[10]);
270
3.46k
    MULADD(at[7], at[9]);
271
3.46k
    COMBA_STORE(C->dp[8]);
272
    /* 9 */
273
3.46k
    COMBA_FORWARD;
274
3.46k
    MULADD(at[2], at[15]);
275
3.46k
    MULADD(at[3], at[14]);
276
3.46k
    MULADD(at[4], at[13]);
277
3.46k
    MULADD(at[5], at[12]);
278
3.46k
    MULADD(at[6], at[11]);
279
3.46k
    MULADD(at[7], at[10]);
280
3.46k
    COMBA_STORE(C->dp[9]);
281
    /* 10 */
282
3.46k
    COMBA_FORWARD;
283
3.46k
    MULADD(at[3], at[15]);
284
3.46k
    MULADD(at[4], at[14]);
285
3.46k
    MULADD(at[5], at[13]);
286
3.46k
    MULADD(at[6], at[12]);
287
3.46k
    MULADD(at[7], at[11]);
288
3.46k
    COMBA_STORE(C->dp[10]);
289
    /* 11 */
290
3.46k
    COMBA_FORWARD;
291
3.46k
    MULADD(at[4], at[15]);
292
3.46k
    MULADD(at[5], at[14]);
293
3.46k
    MULADD(at[6], at[13]);
294
3.46k
    MULADD(at[7], at[12]);
295
3.46k
    COMBA_STORE(C->dp[11]);
296
    /* 12 */
297
3.46k
    COMBA_FORWARD;
298
3.46k
    MULADD(at[5], at[15]);
299
3.46k
    MULADD(at[6], at[14]);
300
3.46k
    MULADD(at[7], at[13]);
301
3.46k
    COMBA_STORE(C->dp[12]);
302
    /* 13 */
303
3.46k
    COMBA_FORWARD;
304
3.46k
    MULADD(at[6], at[15]);
305
3.46k
    MULADD(at[7], at[14]);
306
3.46k
    COMBA_STORE(C->dp[13]);
307
    /* 14 */
308
3.46k
    COMBA_FORWARD;
309
3.46k
    MULADD(at[7], at[15]);
310
3.46k
    COMBA_STORE(C->dp[14]);
311
3.46k
    COMBA_STORE2(C->dp[15]);
312
3.46k
    C->used = 16;
313
3.46k
    C->sign = A->sign ^ B->sign;
314
3.46k
    mp_clamp(C);
315
3.46k
    COMBA_FINI;
316
3.46k
}
317
318
void
319
s_mp_mul_comba_16(const mp_int *A, const mp_int *B, mp_int *C)
320
735
{
321
735
    mp_digit c0, c1, c2, at[32];
322
323
735
    memcpy(at, A->dp, 16 * sizeof(mp_digit));
324
735
    memcpy(at + 16, B->dp, 16 * sizeof(mp_digit));
325
735
    COMBA_START;
326
327
735
    COMBA_CLEAR;
328
    /* 0 */
329
735
    MULADD(at[0], at[16]);
330
735
    COMBA_STORE(C->dp[0]);
331
    /* 1 */
332
735
    COMBA_FORWARD;
333
735
    MULADD(at[0], at[17]);
334
735
    MULADD(at[1], at[16]);
335
735
    COMBA_STORE(C->dp[1]);
336
    /* 2 */
337
735
    COMBA_FORWARD;
338
735
    MULADD(at[0], at[18]);
339
735
    MULADD(at[1], at[17]);
340
735
    MULADD(at[2], at[16]);
341
735
    COMBA_STORE(C->dp[2]);
342
    /* 3 */
343
735
    COMBA_FORWARD;
344
735
    MULADD(at[0], at[19]);
345
735
    MULADD(at[1], at[18]);
346
735
    MULADD(at[2], at[17]);
347
735
    MULADD(at[3], at[16]);
348
735
    COMBA_STORE(C->dp[3]);
349
    /* 4 */
350
735
    COMBA_FORWARD;
351
735
    MULADD(at[0], at[20]);
352
735
    MULADD(at[1], at[19]);
353
735
    MULADD(at[2], at[18]);
354
735
    MULADD(at[3], at[17]);
355
735
    MULADD(at[4], at[16]);
356
735
    COMBA_STORE(C->dp[4]);
357
    /* 5 */
358
735
    COMBA_FORWARD;
359
735
    MULADD(at[0], at[21]);
360
735
    MULADD(at[1], at[20]);
361
735
    MULADD(at[2], at[19]);
362
735
    MULADD(at[3], at[18]);
363
735
    MULADD(at[4], at[17]);
364
735
    MULADD(at[5], at[16]);
365
735
    COMBA_STORE(C->dp[5]);
366
    /* 6 */
367
735
    COMBA_FORWARD;
368
735
    MULADD(at[0], at[22]);
369
735
    MULADD(at[1], at[21]);
370
735
    MULADD(at[2], at[20]);
371
735
    MULADD(at[3], at[19]);
372
735
    MULADD(at[4], at[18]);
373
735
    MULADD(at[5], at[17]);
374
735
    MULADD(at[6], at[16]);
375
735
    COMBA_STORE(C->dp[6]);
376
    /* 7 */
377
735
    COMBA_FORWARD;
378
735
    MULADD(at[0], at[23]);
379
735
    MULADD(at[1], at[22]);
380
735
    MULADD(at[2], at[21]);
381
735
    MULADD(at[3], at[20]);
382
735
    MULADD(at[4], at[19]);
383
735
    MULADD(at[5], at[18]);
384
735
    MULADD(at[6], at[17]);
385
735
    MULADD(at[7], at[16]);
386
735
    COMBA_STORE(C->dp[7]);
387
    /* 8 */
388
735
    COMBA_FORWARD;
389
735
    MULADD(at[0], at[24]);
390
735
    MULADD(at[1], at[23]);
391
735
    MULADD(at[2], at[22]);
392
735
    MULADD(at[3], at[21]);
393
735
    MULADD(at[4], at[20]);
394
735
    MULADD(at[5], at[19]);
395
735
    MULADD(at[6], at[18]);
396
735
    MULADD(at[7], at[17]);
397
735
    MULADD(at[8], at[16]);
398
735
    COMBA_STORE(C->dp[8]);
399
    /* 9 */
400
735
    COMBA_FORWARD;
401
735
    MULADD(at[0], at[25]);
402
735
    MULADD(at[1], at[24]);
403
735
    MULADD(at[2], at[23]);
404
735
    MULADD(at[3], at[22]);
405
735
    MULADD(at[4], at[21]);
406
735
    MULADD(at[5], at[20]);
407
735
    MULADD(at[6], at[19]);
408
735
    MULADD(at[7], at[18]);
409
735
    MULADD(at[8], at[17]);
410
735
    MULADD(at[9], at[16]);
411
735
    COMBA_STORE(C->dp[9]);
412
    /* 10 */
413
735
    COMBA_FORWARD;
414
735
    MULADD(at[0], at[26]);
415
735
    MULADD(at[1], at[25]);
416
735
    MULADD(at[2], at[24]);
417
735
    MULADD(at[3], at[23]);
418
735
    MULADD(at[4], at[22]);
419
735
    MULADD(at[5], at[21]);
420
735
    MULADD(at[6], at[20]);
421
735
    MULADD(at[7], at[19]);
422
735
    MULADD(at[8], at[18]);
423
735
    MULADD(at[9], at[17]);
424
735
    MULADD(at[10], at[16]);
425
735
    COMBA_STORE(C->dp[10]);
426
    /* 11 */
427
735
    COMBA_FORWARD;
428
735
    MULADD(at[0], at[27]);
429
735
    MULADD(at[1], at[26]);
430
735
    MULADD(at[2], at[25]);
431
735
    MULADD(at[3], at[24]);
432
735
    MULADD(at[4], at[23]);
433
735
    MULADD(at[5], at[22]);
434
735
    MULADD(at[6], at[21]);
435
735
    MULADD(at[7], at[20]);
436
735
    MULADD(at[8], at[19]);
437
735
    MULADD(at[9], at[18]);
438
735
    MULADD(at[10], at[17]);
439
735
    MULADD(at[11], at[16]);
440
735
    COMBA_STORE(C->dp[11]);
441
    /* 12 */
442
735
    COMBA_FORWARD;
443
735
    MULADD(at[0], at[28]);
444
735
    MULADD(at[1], at[27]);
445
735
    MULADD(at[2], at[26]);
446
735
    MULADD(at[3], at[25]);
447
735
    MULADD(at[4], at[24]);
448
735
    MULADD(at[5], at[23]);
449
735
    MULADD(at[6], at[22]);
450
735
    MULADD(at[7], at[21]);
451
735
    MULADD(at[8], at[20]);
452
735
    MULADD(at[9], at[19]);
453
735
    MULADD(at[10], at[18]);
454
735
    MULADD(at[11], at[17]);
455
735
    MULADD(at[12], at[16]);
456
735
    COMBA_STORE(C->dp[12]);
457
    /* 13 */
458
735
    COMBA_FORWARD;
459
735
    MULADD(at[0], at[29]);
460
735
    MULADD(at[1], at[28]);
461
735
    MULADD(at[2], at[27]);
462
735
    MULADD(at[3], at[26]);
463
735
    MULADD(at[4], at[25]);
464
735
    MULADD(at[5], at[24]);
465
735
    MULADD(at[6], at[23]);
466
735
    MULADD(at[7], at[22]);
467
735
    MULADD(at[8], at[21]);
468
735
    MULADD(at[9], at[20]);
469
735
    MULADD(at[10], at[19]);
470
735
    MULADD(at[11], at[18]);
471
735
    MULADD(at[12], at[17]);
472
735
    MULADD(at[13], at[16]);
473
735
    COMBA_STORE(C->dp[13]);
474
    /* 14 */
475
735
    COMBA_FORWARD;
476
735
    MULADD(at[0], at[30]);
477
735
    MULADD(at[1], at[29]);
478
735
    MULADD(at[2], at[28]);
479
735
    MULADD(at[3], at[27]);
480
735
    MULADD(at[4], at[26]);
481
735
    MULADD(at[5], at[25]);
482
735
    MULADD(at[6], at[24]);
483
735
    MULADD(at[7], at[23]);
484
735
    MULADD(at[8], at[22]);
485
735
    MULADD(at[9], at[21]);
486
735
    MULADD(at[10], at[20]);
487
735
    MULADD(at[11], at[19]);
488
735
    MULADD(at[12], at[18]);
489
735
    MULADD(at[13], at[17]);
490
735
    MULADD(at[14], at[16]);
491
735
    COMBA_STORE(C->dp[14]);
492
    /* 15 */
493
735
    COMBA_FORWARD;
494
735
    MULADD(at[0], at[31]);
495
735
    MULADD(at[1], at[30]);
496
735
    MULADD(at[2], at[29]);
497
735
    MULADD(at[3], at[28]);
498
735
    MULADD(at[4], at[27]);
499
735
    MULADD(at[5], at[26]);
500
735
    MULADD(at[6], at[25]);
501
735
    MULADD(at[7], at[24]);
502
735
    MULADD(at[8], at[23]);
503
735
    MULADD(at[9], at[22]);
504
735
    MULADD(at[10], at[21]);
505
735
    MULADD(at[11], at[20]);
506
735
    MULADD(at[12], at[19]);
507
735
    MULADD(at[13], at[18]);
508
735
    MULADD(at[14], at[17]);
509
735
    MULADD(at[15], at[16]);
510
735
    COMBA_STORE(C->dp[15]);
511
    /* 16 */
512
735
    COMBA_FORWARD;
513
735
    MULADD(at[1], at[31]);
514
735
    MULADD(at[2], at[30]);
515
735
    MULADD(at[3], at[29]);
516
735
    MULADD(at[4], at[28]);
517
735
    MULADD(at[5], at[27]);
518
735
    MULADD(at[6], at[26]);
519
735
    MULADD(at[7], at[25]);
520
735
    MULADD(at[8], at[24]);
521
735
    MULADD(at[9], at[23]);
522
735
    MULADD(at[10], at[22]);
523
735
    MULADD(at[11], at[21]);
524
735
    MULADD(at[12], at[20]);
525
735
    MULADD(at[13], at[19]);
526
735
    MULADD(at[14], at[18]);
527
735
    MULADD(at[15], at[17]);
528
735
    COMBA_STORE(C->dp[16]);
529
    /* 17 */
530
735
    COMBA_FORWARD;
531
735
    MULADD(at[2], at[31]);
532
735
    MULADD(at[3], at[30]);
533
735
    MULADD(at[4], at[29]);
534
735
    MULADD(at[5], at[28]);
535
735
    MULADD(at[6], at[27]);
536
735
    MULADD(at[7], at[26]);
537
735
    MULADD(at[8], at[25]);
538
735
    MULADD(at[9], at[24]);
539
735
    MULADD(at[10], at[23]);
540
735
    MULADD(at[11], at[22]);
541
735
    MULADD(at[12], at[21]);
542
735
    MULADD(at[13], at[20]);
543
735
    MULADD(at[14], at[19]);
544
735
    MULADD(at[15], at[18]);
545
735
    COMBA_STORE(C->dp[17]);
546
    /* 18 */
547
735
    COMBA_FORWARD;
548
735
    MULADD(at[3], at[31]);
549
735
    MULADD(at[4], at[30]);
550
735
    MULADD(at[5], at[29]);
551
735
    MULADD(at[6], at[28]);
552
735
    MULADD(at[7], at[27]);
553
735
    MULADD(at[8], at[26]);
554
735
    MULADD(at[9], at[25]);
555
735
    MULADD(at[10], at[24]);
556
735
    MULADD(at[11], at[23]);
557
735
    MULADD(at[12], at[22]);
558
735
    MULADD(at[13], at[21]);
559
735
    MULADD(at[14], at[20]);
560
735
    MULADD(at[15], at[19]);
561
735
    COMBA_STORE(C->dp[18]);
562
    /* 19 */
563
735
    COMBA_FORWARD;
564
735
    MULADD(at[4], at[31]);
565
735
    MULADD(at[5], at[30]);
566
735
    MULADD(at[6], at[29]);
567
735
    MULADD(at[7], at[28]);
568
735
    MULADD(at[8], at[27]);
569
735
    MULADD(at[9], at[26]);
570
735
    MULADD(at[10], at[25]);
571
735
    MULADD(at[11], at[24]);
572
735
    MULADD(at[12], at[23]);
573
735
    MULADD(at[13], at[22]);
574
735
    MULADD(at[14], at[21]);
575
735
    MULADD(at[15], at[20]);
576
735
    COMBA_STORE(C->dp[19]);
577
    /* 20 */
578
735
    COMBA_FORWARD;
579
735
    MULADD(at[5], at[31]);
580
735
    MULADD(at[6], at[30]);
581
735
    MULADD(at[7], at[29]);
582
735
    MULADD(at[8], at[28]);
583
735
    MULADD(at[9], at[27]);
584
735
    MULADD(at[10], at[26]);
585
735
    MULADD(at[11], at[25]);
586
735
    MULADD(at[12], at[24]);
587
735
    MULADD(at[13], at[23]);
588
735
    MULADD(at[14], at[22]);
589
735
    MULADD(at[15], at[21]);
590
735
    COMBA_STORE(C->dp[20]);
591
    /* 21 */
592
735
    COMBA_FORWARD;
593
735
    MULADD(at[6], at[31]);
594
735
    MULADD(at[7], at[30]);
595
735
    MULADD(at[8], at[29]);
596
735
    MULADD(at[9], at[28]);
597
735
    MULADD(at[10], at[27]);
598
735
    MULADD(at[11], at[26]);
599
735
    MULADD(at[12], at[25]);
600
735
    MULADD(at[13], at[24]);
601
735
    MULADD(at[14], at[23]);
602
735
    MULADD(at[15], at[22]);
603
735
    COMBA_STORE(C->dp[21]);
604
    /* 22 */
605
735
    COMBA_FORWARD;
606
735
    MULADD(at[7], at[31]);
607
735
    MULADD(at[8], at[30]);
608
735
    MULADD(at[9], at[29]);
609
735
    MULADD(at[10], at[28]);
610
735
    MULADD(at[11], at[27]);
611
735
    MULADD(at[12], at[26]);
612
735
    MULADD(at[13], at[25]);
613
735
    MULADD(at[14], at[24]);
614
735
    MULADD(at[15], at[23]);
615
735
    COMBA_STORE(C->dp[22]);
616
    /* 23 */
617
735
    COMBA_FORWARD;
618
735
    MULADD(at[8], at[31]);
619
735
    MULADD(at[9], at[30]);
620
735
    MULADD(at[10], at[29]);
621
735
    MULADD(at[11], at[28]);
622
735
    MULADD(at[12], at[27]);
623
735
    MULADD(at[13], at[26]);
624
735
    MULADD(at[14], at[25]);
625
735
    MULADD(at[15], at[24]);
626
735
    COMBA_STORE(C->dp[23]);
627
    /* 24 */
628
735
    COMBA_FORWARD;
629
735
    MULADD(at[9], at[31]);
630
735
    MULADD(at[10], at[30]);
631
735
    MULADD(at[11], at[29]);
632
735
    MULADD(at[12], at[28]);
633
735
    MULADD(at[13], at[27]);
634
735
    MULADD(at[14], at[26]);
635
735
    MULADD(at[15], at[25]);
636
735
    COMBA_STORE(C->dp[24]);
637
    /* 25 */
638
735
    COMBA_FORWARD;
639
735
    MULADD(at[10], at[31]);
640
735
    MULADD(at[11], at[30]);
641
735
    MULADD(at[12], at[29]);
642
735
    MULADD(at[13], at[28]);
643
735
    MULADD(at[14], at[27]);
644
735
    MULADD(at[15], at[26]);
645
735
    COMBA_STORE(C->dp[25]);
646
    /* 26 */
647
735
    COMBA_FORWARD;
648
735
    MULADD(at[11], at[31]);
649
735
    MULADD(at[12], at[30]);
650
735
    MULADD(at[13], at[29]);
651
735
    MULADD(at[14], at[28]);
652
735
    MULADD(at[15], at[27]);
653
735
    COMBA_STORE(C->dp[26]);
654
    /* 27 */
655
735
    COMBA_FORWARD;
656
735
    MULADD(at[12], at[31]);
657
735
    MULADD(at[13], at[30]);
658
735
    MULADD(at[14], at[29]);
659
735
    MULADD(at[15], at[28]);
660
735
    COMBA_STORE(C->dp[27]);
661
    /* 28 */
662
735
    COMBA_FORWARD;
663
735
    MULADD(at[13], at[31]);
664
735
    MULADD(at[14], at[30]);
665
735
    MULADD(at[15], at[29]);
666
735
    COMBA_STORE(C->dp[28]);
667
    /* 29 */
668
735
    COMBA_FORWARD;
669
735
    MULADD(at[14], at[31]);
670
735
    MULADD(at[15], at[30]);
671
735
    COMBA_STORE(C->dp[29]);
672
    /* 30 */
673
735
    COMBA_FORWARD;
674
735
    MULADD(at[15], at[31]);
675
735
    COMBA_STORE(C->dp[30]);
676
735
    COMBA_STORE2(C->dp[31]);
677
735
    C->used = 32;
678
735
    C->sign = A->sign ^ B->sign;
679
735
    mp_clamp(C);
680
735
    COMBA_FINI;
681
735
}
682
683
void
684
s_mp_mul_comba_32(const mp_int *A, const mp_int *B, mp_int *C)
685
3.65k
{
686
3.65k
    mp_digit c0, c1, c2, at[64];
687
688
3.65k
    memcpy(at, A->dp, 32 * sizeof(mp_digit));
689
3.65k
    memcpy(at + 32, B->dp, 32 * sizeof(mp_digit));
690
3.65k
    COMBA_START;
691
692
3.65k
    COMBA_CLEAR;
693
    /* 0 */
694
3.65k
    MULADD(at[0], at[32]);
695
3.65k
    COMBA_STORE(C->dp[0]);
696
    /* 1 */
697
3.65k
    COMBA_FORWARD;
698
3.65k
    MULADD(at[0], at[33]);
699
3.65k
    MULADD(at[1], at[32]);
700
3.65k
    COMBA_STORE(C->dp[1]);
701
    /* 2 */
702
3.65k
    COMBA_FORWARD;
703
3.65k
    MULADD(at[0], at[34]);
704
3.65k
    MULADD(at[1], at[33]);
705
3.65k
    MULADD(at[2], at[32]);
706
3.65k
    COMBA_STORE(C->dp[2]);
707
    /* 3 */
708
3.65k
    COMBA_FORWARD;
709
3.65k
    MULADD(at[0], at[35]);
710
3.65k
    MULADD(at[1], at[34]);
711
3.65k
    MULADD(at[2], at[33]);
712
3.65k
    MULADD(at[3], at[32]);
713
3.65k
    COMBA_STORE(C->dp[3]);
714
    /* 4 */
715
3.65k
    COMBA_FORWARD;
716
3.65k
    MULADD(at[0], at[36]);
717
3.65k
    MULADD(at[1], at[35]);
718
3.65k
    MULADD(at[2], at[34]);
719
3.65k
    MULADD(at[3], at[33]);
720
3.65k
    MULADD(at[4], at[32]);
721
3.65k
    COMBA_STORE(C->dp[4]);
722
    /* 5 */
723
3.65k
    COMBA_FORWARD;
724
3.65k
    MULADD(at[0], at[37]);
725
3.65k
    MULADD(at[1], at[36]);
726
3.65k
    MULADD(at[2], at[35]);
727
3.65k
    MULADD(at[3], at[34]);
728
3.65k
    MULADD(at[4], at[33]);
729
3.65k
    MULADD(at[5], at[32]);
730
3.65k
    COMBA_STORE(C->dp[5]);
731
    /* 6 */
732
3.65k
    COMBA_FORWARD;
733
3.65k
    MULADD(at[0], at[38]);
734
3.65k
    MULADD(at[1], at[37]);
735
3.65k
    MULADD(at[2], at[36]);
736
3.65k
    MULADD(at[3], at[35]);
737
3.65k
    MULADD(at[4], at[34]);
738
3.65k
    MULADD(at[5], at[33]);
739
3.65k
    MULADD(at[6], at[32]);
740
3.65k
    COMBA_STORE(C->dp[6]);
741
    /* 7 */
742
3.65k
    COMBA_FORWARD;
743
3.65k
    MULADD(at[0], at[39]);
744
3.65k
    MULADD(at[1], at[38]);
745
3.65k
    MULADD(at[2], at[37]);
746
3.65k
    MULADD(at[3], at[36]);
747
3.65k
    MULADD(at[4], at[35]);
748
3.65k
    MULADD(at[5], at[34]);
749
3.65k
    MULADD(at[6], at[33]);
750
3.65k
    MULADD(at[7], at[32]);
751
3.65k
    COMBA_STORE(C->dp[7]);
752
    /* 8 */
753
3.65k
    COMBA_FORWARD;
754
3.65k
    MULADD(at[0], at[40]);
755
3.65k
    MULADD(at[1], at[39]);
756
3.65k
    MULADD(at[2], at[38]);
757
3.65k
    MULADD(at[3], at[37]);
758
3.65k
    MULADD(at[4], at[36]);
759
3.65k
    MULADD(at[5], at[35]);
760
3.65k
    MULADD(at[6], at[34]);
761
3.65k
    MULADD(at[7], at[33]);
762
3.65k
    MULADD(at[8], at[32]);
763
3.65k
    COMBA_STORE(C->dp[8]);
764
    /* 9 */
765
3.65k
    COMBA_FORWARD;
766
3.65k
    MULADD(at[0], at[41]);
767
3.65k
    MULADD(at[1], at[40]);
768
3.65k
    MULADD(at[2], at[39]);
769
3.65k
    MULADD(at[3], at[38]);
770
3.65k
    MULADD(at[4], at[37]);
771
3.65k
    MULADD(at[5], at[36]);
772
3.65k
    MULADD(at[6], at[35]);
773
3.65k
    MULADD(at[7], at[34]);
774
3.65k
    MULADD(at[8], at[33]);
775
3.65k
    MULADD(at[9], at[32]);
776
3.65k
    COMBA_STORE(C->dp[9]);
777
    /* 10 */
778
3.65k
    COMBA_FORWARD;
779
3.65k
    MULADD(at[0], at[42]);
780
3.65k
    MULADD(at[1], at[41]);
781
3.65k
    MULADD(at[2], at[40]);
782
3.65k
    MULADD(at[3], at[39]);
783
3.65k
    MULADD(at[4], at[38]);
784
3.65k
    MULADD(at[5], at[37]);
785
3.65k
    MULADD(at[6], at[36]);
786
3.65k
    MULADD(at[7], at[35]);
787
3.65k
    MULADD(at[8], at[34]);
788
3.65k
    MULADD(at[9], at[33]);
789
3.65k
    MULADD(at[10], at[32]);
790
3.65k
    COMBA_STORE(C->dp[10]);
791
    /* 11 */
792
3.65k
    COMBA_FORWARD;
793
3.65k
    MULADD(at[0], at[43]);
794
3.65k
    MULADD(at[1], at[42]);
795
3.65k
    MULADD(at[2], at[41]);
796
3.65k
    MULADD(at[3], at[40]);
797
3.65k
    MULADD(at[4], at[39]);
798
3.65k
    MULADD(at[5], at[38]);
799
3.65k
    MULADD(at[6], at[37]);
800
3.65k
    MULADD(at[7], at[36]);
801
3.65k
    MULADD(at[8], at[35]);
802
3.65k
    MULADD(at[9], at[34]);
803
3.65k
    MULADD(at[10], at[33]);
804
3.65k
    MULADD(at[11], at[32]);
805
3.65k
    COMBA_STORE(C->dp[11]);
806
    /* 12 */
807
3.65k
    COMBA_FORWARD;
808
3.65k
    MULADD(at[0], at[44]);
809
3.65k
    MULADD(at[1], at[43]);
810
3.65k
    MULADD(at[2], at[42]);
811
3.65k
    MULADD(at[3], at[41]);
812
3.65k
    MULADD(at[4], at[40]);
813
3.65k
    MULADD(at[5], at[39]);
814
3.65k
    MULADD(at[6], at[38]);
815
3.65k
    MULADD(at[7], at[37]);
816
3.65k
    MULADD(at[8], at[36]);
817
3.65k
    MULADD(at[9], at[35]);
818
3.65k
    MULADD(at[10], at[34]);
819
3.65k
    MULADD(at[11], at[33]);
820
3.65k
    MULADD(at[12], at[32]);
821
3.65k
    COMBA_STORE(C->dp[12]);
822
    /* 13 */
823
3.65k
    COMBA_FORWARD;
824
3.65k
    MULADD(at[0], at[45]);
825
3.65k
    MULADD(at[1], at[44]);
826
3.65k
    MULADD(at[2], at[43]);
827
3.65k
    MULADD(at[3], at[42]);
828
3.65k
    MULADD(at[4], at[41]);
829
3.65k
    MULADD(at[5], at[40]);
830
3.65k
    MULADD(at[6], at[39]);
831
3.65k
    MULADD(at[7], at[38]);
832
3.65k
    MULADD(at[8], at[37]);
833
3.65k
    MULADD(at[9], at[36]);
834
3.65k
    MULADD(at[10], at[35]);
835
3.65k
    MULADD(at[11], at[34]);
836
3.65k
    MULADD(at[12], at[33]);
837
3.65k
    MULADD(at[13], at[32]);
838
3.65k
    COMBA_STORE(C->dp[13]);
839
    /* 14 */
840
3.65k
    COMBA_FORWARD;
841
3.65k
    MULADD(at[0], at[46]);
842
3.65k
    MULADD(at[1], at[45]);
843
3.65k
    MULADD(at[2], at[44]);
844
3.65k
    MULADD(at[3], at[43]);
845
3.65k
    MULADD(at[4], at[42]);
846
3.65k
    MULADD(at[5], at[41]);
847
3.65k
    MULADD(at[6], at[40]);
848
3.65k
    MULADD(at[7], at[39]);
849
3.65k
    MULADD(at[8], at[38]);
850
3.65k
    MULADD(at[9], at[37]);
851
3.65k
    MULADD(at[10], at[36]);
852
3.65k
    MULADD(at[11], at[35]);
853
3.65k
    MULADD(at[12], at[34]);
854
3.65k
    MULADD(at[13], at[33]);
855
3.65k
    MULADD(at[14], at[32]);
856
3.65k
    COMBA_STORE(C->dp[14]);
857
    /* 15 */
858
3.65k
    COMBA_FORWARD;
859
3.65k
    MULADD(at[0], at[47]);
860
3.65k
    MULADD(at[1], at[46]);
861
3.65k
    MULADD(at[2], at[45]);
862
3.65k
    MULADD(at[3], at[44]);
863
3.65k
    MULADD(at[4], at[43]);
864
3.65k
    MULADD(at[5], at[42]);
865
3.65k
    MULADD(at[6], at[41]);
866
3.65k
    MULADD(at[7], at[40]);
867
3.65k
    MULADD(at[8], at[39]);
868
3.65k
    MULADD(at[9], at[38]);
869
3.65k
    MULADD(at[10], at[37]);
870
3.65k
    MULADD(at[11], at[36]);
871
3.65k
    MULADD(at[12], at[35]);
872
3.65k
    MULADD(at[13], at[34]);
873
3.65k
    MULADD(at[14], at[33]);
874
3.65k
    MULADD(at[15], at[32]);
875
3.65k
    COMBA_STORE(C->dp[15]);
876
    /* 16 */
877
3.65k
    COMBA_FORWARD;
878
3.65k
    MULADD(at[0], at[48]);
879
3.65k
    MULADD(at[1], at[47]);
880
3.65k
    MULADD(at[2], at[46]);
881
3.65k
    MULADD(at[3], at[45]);
882
3.65k
    MULADD(at[4], at[44]);
883
3.65k
    MULADD(at[5], at[43]);
884
3.65k
    MULADD(at[6], at[42]);
885
3.65k
    MULADD(at[7], at[41]);
886
3.65k
    MULADD(at[8], at[40]);
887
3.65k
    MULADD(at[9], at[39]);
888
3.65k
    MULADD(at[10], at[38]);
889
3.65k
    MULADD(at[11], at[37]);
890
3.65k
    MULADD(at[12], at[36]);
891
3.65k
    MULADD(at[13], at[35]);
892
3.65k
    MULADD(at[14], at[34]);
893
3.65k
    MULADD(at[15], at[33]);
894
3.65k
    MULADD(at[16], at[32]);
895
3.65k
    COMBA_STORE(C->dp[16]);
896
    /* 17 */
897
3.65k
    COMBA_FORWARD;
898
3.65k
    MULADD(at[0], at[49]);
899
3.65k
    MULADD(at[1], at[48]);
900
3.65k
    MULADD(at[2], at[47]);
901
3.65k
    MULADD(at[3], at[46]);
902
3.65k
    MULADD(at[4], at[45]);
903
3.65k
    MULADD(at[5], at[44]);
904
3.65k
    MULADD(at[6], at[43]);
905
3.65k
    MULADD(at[7], at[42]);
906
3.65k
    MULADD(at[8], at[41]);
907
3.65k
    MULADD(at[9], at[40]);
908
3.65k
    MULADD(at[10], at[39]);
909
3.65k
    MULADD(at[11], at[38]);
910
3.65k
    MULADD(at[12], at[37]);
911
3.65k
    MULADD(at[13], at[36]);
912
3.65k
    MULADD(at[14], at[35]);
913
3.65k
    MULADD(at[15], at[34]);
914
3.65k
    MULADD(at[16], at[33]);
915
3.65k
    MULADD(at[17], at[32]);
916
3.65k
    COMBA_STORE(C->dp[17]);
917
    /* 18 */
918
3.65k
    COMBA_FORWARD;
919
3.65k
    MULADD(at[0], at[50]);
920
3.65k
    MULADD(at[1], at[49]);
921
3.65k
    MULADD(at[2], at[48]);
922
3.65k
    MULADD(at[3], at[47]);
923
3.65k
    MULADD(at[4], at[46]);
924
3.65k
    MULADD(at[5], at[45]);
925
3.65k
    MULADD(at[6], at[44]);
926
3.65k
    MULADD(at[7], at[43]);
927
3.65k
    MULADD(at[8], at[42]);
928
3.65k
    MULADD(at[9], at[41]);
929
3.65k
    MULADD(at[10], at[40]);
930
3.65k
    MULADD(at[11], at[39]);
931
3.65k
    MULADD(at[12], at[38]);
932
3.65k
    MULADD(at[13], at[37]);
933
3.65k
    MULADD(at[14], at[36]);
934
3.65k
    MULADD(at[15], at[35]);
935
3.65k
    MULADD(at[16], at[34]);
936
3.65k
    MULADD(at[17], at[33]);
937
3.65k
    MULADD(at[18], at[32]);
938
3.65k
    COMBA_STORE(C->dp[18]);
939
    /* 19 */
940
3.65k
    COMBA_FORWARD;
941
3.65k
    MULADD(at[0], at[51]);
942
3.65k
    MULADD(at[1], at[50]);
943
3.65k
    MULADD(at[2], at[49]);
944
3.65k
    MULADD(at[3], at[48]);
945
3.65k
    MULADD(at[4], at[47]);
946
3.65k
    MULADD(at[5], at[46]);
947
3.65k
    MULADD(at[6], at[45]);
948
3.65k
    MULADD(at[7], at[44]);
949
3.65k
    MULADD(at[8], at[43]);
950
3.65k
    MULADD(at[9], at[42]);
951
3.65k
    MULADD(at[10], at[41]);
952
3.65k
    MULADD(at[11], at[40]);
953
3.65k
    MULADD(at[12], at[39]);
954
3.65k
    MULADD(at[13], at[38]);
955
3.65k
    MULADD(at[14], at[37]);
956
3.65k
    MULADD(at[15], at[36]);
957
3.65k
    MULADD(at[16], at[35]);
958
3.65k
    MULADD(at[17], at[34]);
959
3.65k
    MULADD(at[18], at[33]);
960
3.65k
    MULADD(at[19], at[32]);
961
3.65k
    COMBA_STORE(C->dp[19]);
962
    /* 20 */
963
3.65k
    COMBA_FORWARD;
964
3.65k
    MULADD(at[0], at[52]);
965
3.65k
    MULADD(at[1], at[51]);
966
3.65k
    MULADD(at[2], at[50]);
967
3.65k
    MULADD(at[3], at[49]);
968
3.65k
    MULADD(at[4], at[48]);
969
3.65k
    MULADD(at[5], at[47]);
970
3.65k
    MULADD(at[6], at[46]);
971
3.65k
    MULADD(at[7], at[45]);
972
3.65k
    MULADD(at[8], at[44]);
973
3.65k
    MULADD(at[9], at[43]);
974
3.65k
    MULADD(at[10], at[42]);
975
3.65k
    MULADD(at[11], at[41]);
976
3.65k
    MULADD(at[12], at[40]);
977
3.65k
    MULADD(at[13], at[39]);
978
3.65k
    MULADD(at[14], at[38]);
979
3.65k
    MULADD(at[15], at[37]);
980
3.65k
    MULADD(at[16], at[36]);
981
3.65k
    MULADD(at[17], at[35]);
982
3.65k
    MULADD(at[18], at[34]);
983
3.65k
    MULADD(at[19], at[33]);
984
3.65k
    MULADD(at[20], at[32]);
985
3.65k
    COMBA_STORE(C->dp[20]);
986
    /* 21 */
987
3.65k
    COMBA_FORWARD;
988
3.65k
    MULADD(at[0], at[53]);
989
3.65k
    MULADD(at[1], at[52]);
990
3.65k
    MULADD(at[2], at[51]);
991
3.65k
    MULADD(at[3], at[50]);
992
3.65k
    MULADD(at[4], at[49]);
993
3.65k
    MULADD(at[5], at[48]);
994
3.65k
    MULADD(at[6], at[47]);
995
3.65k
    MULADD(at[7], at[46]);
996
3.65k
    MULADD(at[8], at[45]);
997
3.65k
    MULADD(at[9], at[44]);
998
3.65k
    MULADD(at[10], at[43]);
999
3.65k
    MULADD(at[11], at[42]);
1000
3.65k
    MULADD(at[12], at[41]);
1001
3.65k
    MULADD(at[13], at[40]);
1002
3.65k
    MULADD(at[14], at[39]);
1003
3.65k
    MULADD(at[15], at[38]);
1004
3.65k
    MULADD(at[16], at[37]);
1005
3.65k
    MULADD(at[17], at[36]);
1006
3.65k
    MULADD(at[18], at[35]);
1007
3.65k
    MULADD(at[19], at[34]);
1008
3.65k
    MULADD(at[20], at[33]);
1009
3.65k
    MULADD(at[21], at[32]);
1010
3.65k
    COMBA_STORE(C->dp[21]);
1011
    /* 22 */
1012
3.65k
    COMBA_FORWARD;
1013
3.65k
    MULADD(at[0], at[54]);
1014
3.65k
    MULADD(at[1], at[53]);
1015
3.65k
    MULADD(at[2], at[52]);
1016
3.65k
    MULADD(at[3], at[51]);
1017
3.65k
    MULADD(at[4], at[50]);
1018
3.65k
    MULADD(at[5], at[49]);
1019
3.65k
    MULADD(at[6], at[48]);
1020
3.65k
    MULADD(at[7], at[47]);
1021
3.65k
    MULADD(at[8], at[46]);
1022
3.65k
    MULADD(at[9], at[45]);
1023
3.65k
    MULADD(at[10], at[44]);
1024
3.65k
    MULADD(at[11], at[43]);
1025
3.65k
    MULADD(at[12], at[42]);
1026
3.65k
    MULADD(at[13], at[41]);
1027
3.65k
    MULADD(at[14], at[40]);
1028
3.65k
    MULADD(at[15], at[39]);
1029
3.65k
    MULADD(at[16], at[38]);
1030
3.65k
    MULADD(at[17], at[37]);
1031
3.65k
    MULADD(at[18], at[36]);
1032
3.65k
    MULADD(at[19], at[35]);
1033
3.65k
    MULADD(at[20], at[34]);
1034
3.65k
    MULADD(at[21], at[33]);
1035
3.65k
    MULADD(at[22], at[32]);
1036
3.65k
    COMBA_STORE(C->dp[22]);
1037
    /* 23 */
1038
3.65k
    COMBA_FORWARD;
1039
3.65k
    MULADD(at[0], at[55]);
1040
3.65k
    MULADD(at[1], at[54]);
1041
3.65k
    MULADD(at[2], at[53]);
1042
3.65k
    MULADD(at[3], at[52]);
1043
3.65k
    MULADD(at[4], at[51]);
1044
3.65k
    MULADD(at[5], at[50]);
1045
3.65k
    MULADD(at[6], at[49]);
1046
3.65k
    MULADD(at[7], at[48]);
1047
3.65k
    MULADD(at[8], at[47]);
1048
3.65k
    MULADD(at[9], at[46]);
1049
3.65k
    MULADD(at[10], at[45]);
1050
3.65k
    MULADD(at[11], at[44]);
1051
3.65k
    MULADD(at[12], at[43]);
1052
3.65k
    MULADD(at[13], at[42]);
1053
3.65k
    MULADD(at[14], at[41]);
1054
3.65k
    MULADD(at[15], at[40]);
1055
3.65k
    MULADD(at[16], at[39]);
1056
3.65k
    MULADD(at[17], at[38]);
1057
3.65k
    MULADD(at[18], at[37]);
1058
3.65k
    MULADD(at[19], at[36]);
1059
3.65k
    MULADD(at[20], at[35]);
1060
3.65k
    MULADD(at[21], at[34]);
1061
3.65k
    MULADD(at[22], at[33]);
1062
3.65k
    MULADD(at[23], at[32]);
1063
3.65k
    COMBA_STORE(C->dp[23]);
1064
    /* 24 */
1065
3.65k
    COMBA_FORWARD;
1066
3.65k
    MULADD(at[0], at[56]);
1067
3.65k
    MULADD(at[1], at[55]);
1068
3.65k
    MULADD(at[2], at[54]);
1069
3.65k
    MULADD(at[3], at[53]);
1070
3.65k
    MULADD(at[4], at[52]);
1071
3.65k
    MULADD(at[5], at[51]);
1072
3.65k
    MULADD(at[6], at[50]);
1073
3.65k
    MULADD(at[7], at[49]);
1074
3.65k
    MULADD(at[8], at[48]);
1075
3.65k
    MULADD(at[9], at[47]);
1076
3.65k
    MULADD(at[10], at[46]);
1077
3.65k
    MULADD(at[11], at[45]);
1078
3.65k
    MULADD(at[12], at[44]);
1079
3.65k
    MULADD(at[13], at[43]);
1080
3.65k
    MULADD(at[14], at[42]);
1081
3.65k
    MULADD(at[15], at[41]);
1082
3.65k
    MULADD(at[16], at[40]);
1083
3.65k
    MULADD(at[17], at[39]);
1084
3.65k
    MULADD(at[18], at[38]);
1085
3.65k
    MULADD(at[19], at[37]);
1086
3.65k
    MULADD(at[20], at[36]);
1087
3.65k
    MULADD(at[21], at[35]);
1088
3.65k
    MULADD(at[22], at[34]);
1089
3.65k
    MULADD(at[23], at[33]);
1090
3.65k
    MULADD(at[24], at[32]);
1091
3.65k
    COMBA_STORE(C->dp[24]);
1092
    /* 25 */
1093
3.65k
    COMBA_FORWARD;
1094
3.65k
    MULADD(at[0], at[57]);
1095
3.65k
    MULADD(at[1], at[56]);
1096
3.65k
    MULADD(at[2], at[55]);
1097
3.65k
    MULADD(at[3], at[54]);
1098
3.65k
    MULADD(at[4], at[53]);
1099
3.65k
    MULADD(at[5], at[52]);
1100
3.65k
    MULADD(at[6], at[51]);
1101
3.65k
    MULADD(at[7], at[50]);
1102
3.65k
    MULADD(at[8], at[49]);
1103
3.65k
    MULADD(at[9], at[48]);
1104
3.65k
    MULADD(at[10], at[47]);
1105
3.65k
    MULADD(at[11], at[46]);
1106
3.65k
    MULADD(at[12], at[45]);
1107
3.65k
    MULADD(at[13], at[44]);
1108
3.65k
    MULADD(at[14], at[43]);
1109
3.65k
    MULADD(at[15], at[42]);
1110
3.65k
    MULADD(at[16], at[41]);
1111
3.65k
    MULADD(at[17], at[40]);
1112
3.65k
    MULADD(at[18], at[39]);
1113
3.65k
    MULADD(at[19], at[38]);
1114
3.65k
    MULADD(at[20], at[37]);
1115
3.65k
    MULADD(at[21], at[36]);
1116
3.65k
    MULADD(at[22], at[35]);
1117
3.65k
    MULADD(at[23], at[34]);
1118
3.65k
    MULADD(at[24], at[33]);
1119
3.65k
    MULADD(at[25], at[32]);
1120
3.65k
    COMBA_STORE(C->dp[25]);
1121
    /* 26 */
1122
3.65k
    COMBA_FORWARD;
1123
3.65k
    MULADD(at[0], at[58]);
1124
3.65k
    MULADD(at[1], at[57]);
1125
3.65k
    MULADD(at[2], at[56]);
1126
3.65k
    MULADD(at[3], at[55]);
1127
3.65k
    MULADD(at[4], at[54]);
1128
3.65k
    MULADD(at[5], at[53]);
1129
3.65k
    MULADD(at[6], at[52]);
1130
3.65k
    MULADD(at[7], at[51]);
1131
3.65k
    MULADD(at[8], at[50]);
1132
3.65k
    MULADD(at[9], at[49]);
1133
3.65k
    MULADD(at[10], at[48]);
1134
3.65k
    MULADD(at[11], at[47]);
1135
3.65k
    MULADD(at[12], at[46]);
1136
3.65k
    MULADD(at[13], at[45]);
1137
3.65k
    MULADD(at[14], at[44]);
1138
3.65k
    MULADD(at[15], at[43]);
1139
3.65k
    MULADD(at[16], at[42]);
1140
3.65k
    MULADD(at[17], at[41]);
1141
3.65k
    MULADD(at[18], at[40]);
1142
3.65k
    MULADD(at[19], at[39]);
1143
3.65k
    MULADD(at[20], at[38]);
1144
3.65k
    MULADD(at[21], at[37]);
1145
3.65k
    MULADD(at[22], at[36]);
1146
3.65k
    MULADD(at[23], at[35]);
1147
3.65k
    MULADD(at[24], at[34]);
1148
3.65k
    MULADD(at[25], at[33]);
1149
3.65k
    MULADD(at[26], at[32]);
1150
3.65k
    COMBA_STORE(C->dp[26]);
1151
    /* 27 */
1152
3.65k
    COMBA_FORWARD;
1153
3.65k
    MULADD(at[0], at[59]);
1154
3.65k
    MULADD(at[1], at[58]);
1155
3.65k
    MULADD(at[2], at[57]);
1156
3.65k
    MULADD(at[3], at[56]);
1157
3.65k
    MULADD(at[4], at[55]);
1158
3.65k
    MULADD(at[5], at[54]);
1159
3.65k
    MULADD(at[6], at[53]);
1160
3.65k
    MULADD(at[7], at[52]);
1161
3.65k
    MULADD(at[8], at[51]);
1162
3.65k
    MULADD(at[9], at[50]);
1163
3.65k
    MULADD(at[10], at[49]);
1164
3.65k
    MULADD(at[11], at[48]);
1165
3.65k
    MULADD(at[12], at[47]);
1166
3.65k
    MULADD(at[13], at[46]);
1167
3.65k
    MULADD(at[14], at[45]);
1168
3.65k
    MULADD(at[15], at[44]);
1169
3.65k
    MULADD(at[16], at[43]);
1170
3.65k
    MULADD(at[17], at[42]);
1171
3.65k
    MULADD(at[18], at[41]);
1172
3.65k
    MULADD(at[19], at[40]);
1173
3.65k
    MULADD(at[20], at[39]);
1174
3.65k
    MULADD(at[21], at[38]);
1175
3.65k
    MULADD(at[22], at[37]);
1176
3.65k
    MULADD(at[23], at[36]);
1177
3.65k
    MULADD(at[24], at[35]);
1178
3.65k
    MULADD(at[25], at[34]);
1179
3.65k
    MULADD(at[26], at[33]);
1180
3.65k
    MULADD(at[27], at[32]);
1181
3.65k
    COMBA_STORE(C->dp[27]);
1182
    /* 28 */
1183
3.65k
    COMBA_FORWARD;
1184
3.65k
    MULADD(at[0], at[60]);
1185
3.65k
    MULADD(at[1], at[59]);
1186
3.65k
    MULADD(at[2], at[58]);
1187
3.65k
    MULADD(at[3], at[57]);
1188
3.65k
    MULADD(at[4], at[56]);
1189
3.65k
    MULADD(at[5], at[55]);
1190
3.65k
    MULADD(at[6], at[54]);
1191
3.65k
    MULADD(at[7], at[53]);
1192
3.65k
    MULADD(at[8], at[52]);
1193
3.65k
    MULADD(at[9], at[51]);
1194
3.65k
    MULADD(at[10], at[50]);
1195
3.65k
    MULADD(at[11], at[49]);
1196
3.65k
    MULADD(at[12], at[48]);
1197
3.65k
    MULADD(at[13], at[47]);
1198
3.65k
    MULADD(at[14], at[46]);
1199
3.65k
    MULADD(at[15], at[45]);
1200
3.65k
    MULADD(at[16], at[44]);
1201
3.65k
    MULADD(at[17], at[43]);
1202
3.65k
    MULADD(at[18], at[42]);
1203
3.65k
    MULADD(at[19], at[41]);
1204
3.65k
    MULADD(at[20], at[40]);
1205
3.65k
    MULADD(at[21], at[39]);
1206
3.65k
    MULADD(at[22], at[38]);
1207
3.65k
    MULADD(at[23], at[37]);
1208
3.65k
    MULADD(at[24], at[36]);
1209
3.65k
    MULADD(at[25], at[35]);
1210
3.65k
    MULADD(at[26], at[34]);
1211
3.65k
    MULADD(at[27], at[33]);
1212
3.65k
    MULADD(at[28], at[32]);
1213
3.65k
    COMBA_STORE(C->dp[28]);
1214
    /* 29 */
1215
3.65k
    COMBA_FORWARD;
1216
3.65k
    MULADD(at[0], at[61]);
1217
3.65k
    MULADD(at[1], at[60]);
1218
3.65k
    MULADD(at[2], at[59]);
1219
3.65k
    MULADD(at[3], at[58]);
1220
3.65k
    MULADD(at[4], at[57]);
1221
3.65k
    MULADD(at[5], at[56]);
1222
3.65k
    MULADD(at[6], at[55]);
1223
3.65k
    MULADD(at[7], at[54]);
1224
3.65k
    MULADD(at[8], at[53]);
1225
3.65k
    MULADD(at[9], at[52]);
1226
3.65k
    MULADD(at[10], at[51]);
1227
3.65k
    MULADD(at[11], at[50]);
1228
3.65k
    MULADD(at[12], at[49]);
1229
3.65k
    MULADD(at[13], at[48]);
1230
3.65k
    MULADD(at[14], at[47]);
1231
3.65k
    MULADD(at[15], at[46]);
1232
3.65k
    MULADD(at[16], at[45]);
1233
3.65k
    MULADD(at[17], at[44]);
1234
3.65k
    MULADD(at[18], at[43]);
1235
3.65k
    MULADD(at[19], at[42]);
1236
3.65k
    MULADD(at[20], at[41]);
1237
3.65k
    MULADD(at[21], at[40]);
1238
3.65k
    MULADD(at[22], at[39]);
1239
3.65k
    MULADD(at[23], at[38]);
1240
3.65k
    MULADD(at[24], at[37]);
1241
3.65k
    MULADD(at[25], at[36]);
1242
3.65k
    MULADD(at[26], at[35]);
1243
3.65k
    MULADD(at[27], at[34]);
1244
3.65k
    MULADD(at[28], at[33]);
1245
3.65k
    MULADD(at[29], at[32]);
1246
3.65k
    COMBA_STORE(C->dp[29]);
1247
    /* 30 */
1248
3.65k
    COMBA_FORWARD;
1249
3.65k
    MULADD(at[0], at[62]);
1250
3.65k
    MULADD(at[1], at[61]);
1251
3.65k
    MULADD(at[2], at[60]);
1252
3.65k
    MULADD(at[3], at[59]);
1253
3.65k
    MULADD(at[4], at[58]);
1254
3.65k
    MULADD(at[5], at[57]);
1255
3.65k
    MULADD(at[6], at[56]);
1256
3.65k
    MULADD(at[7], at[55]);
1257
3.65k
    MULADD(at[8], at[54]);
1258
3.65k
    MULADD(at[9], at[53]);
1259
3.65k
    MULADD(at[10], at[52]);
1260
3.65k
    MULADD(at[11], at[51]);
1261
3.65k
    MULADD(at[12], at[50]);
1262
3.65k
    MULADD(at[13], at[49]);
1263
3.65k
    MULADD(at[14], at[48]);
1264
3.65k
    MULADD(at[15], at[47]);
1265
3.65k
    MULADD(at[16], at[46]);
1266
3.65k
    MULADD(at[17], at[45]);
1267
3.65k
    MULADD(at[18], at[44]);
1268
3.65k
    MULADD(at[19], at[43]);
1269
3.65k
    MULADD(at[20], at[42]);
1270
3.65k
    MULADD(at[21], at[41]);
1271
3.65k
    MULADD(at[22], at[40]);
1272
3.65k
    MULADD(at[23], at[39]);
1273
3.65k
    MULADD(at[24], at[38]);
1274
3.65k
    MULADD(at[25], at[37]);
1275
3.65k
    MULADD(at[26], at[36]);
1276
3.65k
    MULADD(at[27], at[35]);
1277
3.65k
    MULADD(at[28], at[34]);
1278
3.65k
    MULADD(at[29], at[33]);
1279
3.65k
    MULADD(at[30], at[32]);
1280
3.65k
    COMBA_STORE(C->dp[30]);
1281
    /* 31 */
1282
3.65k
    COMBA_FORWARD;
1283
3.65k
    MULADD(at[0], at[63]);
1284
3.65k
    MULADD(at[1], at[62]);
1285
3.65k
    MULADD(at[2], at[61]);
1286
3.65k
    MULADD(at[3], at[60]);
1287
3.65k
    MULADD(at[4], at[59]);
1288
3.65k
    MULADD(at[5], at[58]);
1289
3.65k
    MULADD(at[6], at[57]);
1290
3.65k
    MULADD(at[7], at[56]);
1291
3.65k
    MULADD(at[8], at[55]);
1292
3.65k
    MULADD(at[9], at[54]);
1293
3.65k
    MULADD(at[10], at[53]);
1294
3.65k
    MULADD(at[11], at[52]);
1295
3.65k
    MULADD(at[12], at[51]);
1296
3.65k
    MULADD(at[13], at[50]);
1297
3.65k
    MULADD(at[14], at[49]);
1298
3.65k
    MULADD(at[15], at[48]);
1299
3.65k
    MULADD(at[16], at[47]);
1300
3.65k
    MULADD(at[17], at[46]);
1301
3.65k
    MULADD(at[18], at[45]);
1302
3.65k
    MULADD(at[19], at[44]);
1303
3.65k
    MULADD(at[20], at[43]);
1304
3.65k
    MULADD(at[21], at[42]);
1305
3.65k
    MULADD(at[22], at[41]);
1306
3.65k
    MULADD(at[23], at[40]);
1307
3.65k
    MULADD(at[24], at[39]);
1308
3.65k
    MULADD(at[25], at[38]);
1309
3.65k
    MULADD(at[26], at[37]);
1310
3.65k
    MULADD(at[27], at[36]);
1311
3.65k
    MULADD(at[28], at[35]);
1312
3.65k
    MULADD(at[29], at[34]);
1313
3.65k
    MULADD(at[30], at[33]);
1314
3.65k
    MULADD(at[31], at[32]);
1315
3.65k
    COMBA_STORE(C->dp[31]);
1316
    /* 32 */
1317
3.65k
    COMBA_FORWARD;
1318
3.65k
    MULADD(at[1], at[63]);
1319
3.65k
    MULADD(at[2], at[62]);
1320
3.65k
    MULADD(at[3], at[61]);
1321
3.65k
    MULADD(at[4], at[60]);
1322
3.65k
    MULADD(at[5], at[59]);
1323
3.65k
    MULADD(at[6], at[58]);
1324
3.65k
    MULADD(at[7], at[57]);
1325
3.65k
    MULADD(at[8], at[56]);
1326
3.65k
    MULADD(at[9], at[55]);
1327
3.65k
    MULADD(at[10], at[54]);
1328
3.65k
    MULADD(at[11], at[53]);
1329
3.65k
    MULADD(at[12], at[52]);
1330
3.65k
    MULADD(at[13], at[51]);
1331
3.65k
    MULADD(at[14], at[50]);
1332
3.65k
    MULADD(at[15], at[49]);
1333
3.65k
    MULADD(at[16], at[48]);
1334
3.65k
    MULADD(at[17], at[47]);
1335
3.65k
    MULADD(at[18], at[46]);
1336
3.65k
    MULADD(at[19], at[45]);
1337
3.65k
    MULADD(at[20], at[44]);
1338
3.65k
    MULADD(at[21], at[43]);
1339
3.65k
    MULADD(at[22], at[42]);
1340
3.65k
    MULADD(at[23], at[41]);
1341
3.65k
    MULADD(at[24], at[40]);
1342
3.65k
    MULADD(at[25], at[39]);
1343
3.65k
    MULADD(at[26], at[38]);
1344
3.65k
    MULADD(at[27], at[37]);
1345
3.65k
    MULADD(at[28], at[36]);
1346
3.65k
    MULADD(at[29], at[35]);
1347
3.65k
    MULADD(at[30], at[34]);
1348
3.65k
    MULADD(at[31], at[33]);
1349
3.65k
    COMBA_STORE(C->dp[32]);
1350
    /* 33 */
1351
3.65k
    COMBA_FORWARD;
1352
3.65k
    MULADD(at[2], at[63]);
1353
3.65k
    MULADD(at[3], at[62]);
1354
3.65k
    MULADD(at[4], at[61]);
1355
3.65k
    MULADD(at[5], at[60]);
1356
3.65k
    MULADD(at[6], at[59]);
1357
3.65k
    MULADD(at[7], at[58]);
1358
3.65k
    MULADD(at[8], at[57]);
1359
3.65k
    MULADD(at[9], at[56]);
1360
3.65k
    MULADD(at[10], at[55]);
1361
3.65k
    MULADD(at[11], at[54]);
1362
3.65k
    MULADD(at[12], at[53]);
1363
3.65k
    MULADD(at[13], at[52]);
1364
3.65k
    MULADD(at[14], at[51]);
1365
3.65k
    MULADD(at[15], at[50]);
1366
3.65k
    MULADD(at[16], at[49]);
1367
3.65k
    MULADD(at[17], at[48]);
1368
3.65k
    MULADD(at[18], at[47]);
1369
3.65k
    MULADD(at[19], at[46]);
1370
3.65k
    MULADD(at[20], at[45]);
1371
3.65k
    MULADD(at[21], at[44]);
1372
3.65k
    MULADD(at[22], at[43]);
1373
3.65k
    MULADD(at[23], at[42]);
1374
3.65k
    MULADD(at[24], at[41]);
1375
3.65k
    MULADD(at[25], at[40]);
1376
3.65k
    MULADD(at[26], at[39]);
1377
3.65k
    MULADD(at[27], at[38]);
1378
3.65k
    MULADD(at[28], at[37]);
1379
3.65k
    MULADD(at[29], at[36]);
1380
3.65k
    MULADD(at[30], at[35]);
1381
3.65k
    MULADD(at[31], at[34]);
1382
3.65k
    COMBA_STORE(C->dp[33]);
1383
    /* 34 */
1384
3.65k
    COMBA_FORWARD;
1385
3.65k
    MULADD(at[3], at[63]);
1386
3.65k
    MULADD(at[4], at[62]);
1387
3.65k
    MULADD(at[5], at[61]);
1388
3.65k
    MULADD(at[6], at[60]);
1389
3.65k
    MULADD(at[7], at[59]);
1390
3.65k
    MULADD(at[8], at[58]);
1391
3.65k
    MULADD(at[9], at[57]);
1392
3.65k
    MULADD(at[10], at[56]);
1393
3.65k
    MULADD(at[11], at[55]);
1394
3.65k
    MULADD(at[12], at[54]);
1395
3.65k
    MULADD(at[13], at[53]);
1396
3.65k
    MULADD(at[14], at[52]);
1397
3.65k
    MULADD(at[15], at[51]);
1398
3.65k
    MULADD(at[16], at[50]);
1399
3.65k
    MULADD(at[17], at[49]);
1400
3.65k
    MULADD(at[18], at[48]);
1401
3.65k
    MULADD(at[19], at[47]);
1402
3.65k
    MULADD(at[20], at[46]);
1403
3.65k
    MULADD(at[21], at[45]);
1404
3.65k
    MULADD(at[22], at[44]);
1405
3.65k
    MULADD(at[23], at[43]);
1406
3.65k
    MULADD(at[24], at[42]);
1407
3.65k
    MULADD(at[25], at[41]);
1408
3.65k
    MULADD(at[26], at[40]);
1409
3.65k
    MULADD(at[27], at[39]);
1410
3.65k
    MULADD(at[28], at[38]);
1411
3.65k
    MULADD(at[29], at[37]);
1412
3.65k
    MULADD(at[30], at[36]);
1413
3.65k
    MULADD(at[31], at[35]);
1414
3.65k
    COMBA_STORE(C->dp[34]);
1415
    /* 35 */
1416
3.65k
    COMBA_FORWARD;
1417
3.65k
    MULADD(at[4], at[63]);
1418
3.65k
    MULADD(at[5], at[62]);
1419
3.65k
    MULADD(at[6], at[61]);
1420
3.65k
    MULADD(at[7], at[60]);
1421
3.65k
    MULADD(at[8], at[59]);
1422
3.65k
    MULADD(at[9], at[58]);
1423
3.65k
    MULADD(at[10], at[57]);
1424
3.65k
    MULADD(at[11], at[56]);
1425
3.65k
    MULADD(at[12], at[55]);
1426
3.65k
    MULADD(at[13], at[54]);
1427
3.65k
    MULADD(at[14], at[53]);
1428
3.65k
    MULADD(at[15], at[52]);
1429
3.65k
    MULADD(at[16], at[51]);
1430
3.65k
    MULADD(at[17], at[50]);
1431
3.65k
    MULADD(at[18], at[49]);
1432
3.65k
    MULADD(at[19], at[48]);
1433
3.65k
    MULADD(at[20], at[47]);
1434
3.65k
    MULADD(at[21], at[46]);
1435
3.65k
    MULADD(at[22], at[45]);
1436
3.65k
    MULADD(at[23], at[44]);
1437
3.65k
    MULADD(at[24], at[43]);
1438
3.65k
    MULADD(at[25], at[42]);
1439
3.65k
    MULADD(at[26], at[41]);
1440
3.65k
    MULADD(at[27], at[40]);
1441
3.65k
    MULADD(at[28], at[39]);
1442
3.65k
    MULADD(at[29], at[38]);
1443
3.65k
    MULADD(at[30], at[37]);
1444
3.65k
    MULADD(at[31], at[36]);
1445
3.65k
    COMBA_STORE(C->dp[35]);
1446
    /* 36 */
1447
3.65k
    COMBA_FORWARD;
1448
3.65k
    MULADD(at[5], at[63]);
1449
3.65k
    MULADD(at[6], at[62]);
1450
3.65k
    MULADD(at[7], at[61]);
1451
3.65k
    MULADD(at[8], at[60]);
1452
3.65k
    MULADD(at[9], at[59]);
1453
3.65k
    MULADD(at[10], at[58]);
1454
3.65k
    MULADD(at[11], at[57]);
1455
3.65k
    MULADD(at[12], at[56]);
1456
3.65k
    MULADD(at[13], at[55]);
1457
3.65k
    MULADD(at[14], at[54]);
1458
3.65k
    MULADD(at[15], at[53]);
1459
3.65k
    MULADD(at[16], at[52]);
1460
3.65k
    MULADD(at[17], at[51]);
1461
3.65k
    MULADD(at[18], at[50]);
1462
3.65k
    MULADD(at[19], at[49]);
1463
3.65k
    MULADD(at[20], at[48]);
1464
3.65k
    MULADD(at[21], at[47]);
1465
3.65k
    MULADD(at[22], at[46]);
1466
3.65k
    MULADD(at[23], at[45]);
1467
3.65k
    MULADD(at[24], at[44]);
1468
3.65k
    MULADD(at[25], at[43]);
1469
3.65k
    MULADD(at[26], at[42]);
1470
3.65k
    MULADD(at[27], at[41]);
1471
3.65k
    MULADD(at[28], at[40]);
1472
3.65k
    MULADD(at[29], at[39]);
1473
3.65k
    MULADD(at[30], at[38]);
1474
3.65k
    MULADD(at[31], at[37]);
1475
3.65k
    COMBA_STORE(C->dp[36]);
1476
    /* 37 */
1477
3.65k
    COMBA_FORWARD;
1478
3.65k
    MULADD(at[6], at[63]);
1479
3.65k
    MULADD(at[7], at[62]);
1480
3.65k
    MULADD(at[8], at[61]);
1481
3.65k
    MULADD(at[9], at[60]);
1482
3.65k
    MULADD(at[10], at[59]);
1483
3.65k
    MULADD(at[11], at[58]);
1484
3.65k
    MULADD(at[12], at[57]);
1485
3.65k
    MULADD(at[13], at[56]);
1486
3.65k
    MULADD(at[14], at[55]);
1487
3.65k
    MULADD(at[15], at[54]);
1488
3.65k
    MULADD(at[16], at[53]);
1489
3.65k
    MULADD(at[17], at[52]);
1490
3.65k
    MULADD(at[18], at[51]);
1491
3.65k
    MULADD(at[19], at[50]);
1492
3.65k
    MULADD(at[20], at[49]);
1493
3.65k
    MULADD(at[21], at[48]);
1494
3.65k
    MULADD(at[22], at[47]);
1495
3.65k
    MULADD(at[23], at[46]);
1496
3.65k
    MULADD(at[24], at[45]);
1497
3.65k
    MULADD(at[25], at[44]);
1498
3.65k
    MULADD(at[26], at[43]);
1499
3.65k
    MULADD(at[27], at[42]);
1500
3.65k
    MULADD(at[28], at[41]);
1501
3.65k
    MULADD(at[29], at[40]);
1502
3.65k
    MULADD(at[30], at[39]);
1503
3.65k
    MULADD(at[31], at[38]);
1504
3.65k
    COMBA_STORE(C->dp[37]);
1505
    /* 38 */
1506
3.65k
    COMBA_FORWARD;
1507
3.65k
    MULADD(at[7], at[63]);
1508
3.65k
    MULADD(at[8], at[62]);
1509
3.65k
    MULADD(at[9], at[61]);
1510
3.65k
    MULADD(at[10], at[60]);
1511
3.65k
    MULADD(at[11], at[59]);
1512
3.65k
    MULADD(at[12], at[58]);
1513
3.65k
    MULADD(at[13], at[57]);
1514
3.65k
    MULADD(at[14], at[56]);
1515
3.65k
    MULADD(at[15], at[55]);
1516
3.65k
    MULADD(at[16], at[54]);
1517
3.65k
    MULADD(at[17], at[53]);
1518
3.65k
    MULADD(at[18], at[52]);
1519
3.65k
    MULADD(at[19], at[51]);
1520
3.65k
    MULADD(at[20], at[50]);
1521
3.65k
    MULADD(at[21], at[49]);
1522
3.65k
    MULADD(at[22], at[48]);
1523
3.65k
    MULADD(at[23], at[47]);
1524
3.65k
    MULADD(at[24], at[46]);
1525
3.65k
    MULADD(at[25], at[45]);
1526
3.65k
    MULADD(at[26], at[44]);
1527
3.65k
    MULADD(at[27], at[43]);
1528
3.65k
    MULADD(at[28], at[42]);
1529
3.65k
    MULADD(at[29], at[41]);
1530
3.65k
    MULADD(at[30], at[40]);
1531
3.65k
    MULADD(at[31], at[39]);
1532
3.65k
    COMBA_STORE(C->dp[38]);
1533
    /* 39 */
1534
3.65k
    COMBA_FORWARD;
1535
3.65k
    MULADD(at[8], at[63]);
1536
3.65k
    MULADD(at[9], at[62]);
1537
3.65k
    MULADD(at[10], at[61]);
1538
3.65k
    MULADD(at[11], at[60]);
1539
3.65k
    MULADD(at[12], at[59]);
1540
3.65k
    MULADD(at[13], at[58]);
1541
3.65k
    MULADD(at[14], at[57]);
1542
3.65k
    MULADD(at[15], at[56]);
1543
3.65k
    MULADD(at[16], at[55]);
1544
3.65k
    MULADD(at[17], at[54]);
1545
3.65k
    MULADD(at[18], at[53]);
1546
3.65k
    MULADD(at[19], at[52]);
1547
3.65k
    MULADD(at[20], at[51]);
1548
3.65k
    MULADD(at[21], at[50]);
1549
3.65k
    MULADD(at[22], at[49]);
1550
3.65k
    MULADD(at[23], at[48]);
1551
3.65k
    MULADD(at[24], at[47]);
1552
3.65k
    MULADD(at[25], at[46]);
1553
3.65k
    MULADD(at[26], at[45]);
1554
3.65k
    MULADD(at[27], at[44]);
1555
3.65k
    MULADD(at[28], at[43]);
1556
3.65k
    MULADD(at[29], at[42]);
1557
3.65k
    MULADD(at[30], at[41]);
1558
3.65k
    MULADD(at[31], at[40]);
1559
3.65k
    COMBA_STORE(C->dp[39]);
1560
    /* 40 */
1561
3.65k
    COMBA_FORWARD;
1562
3.65k
    MULADD(at[9], at[63]);
1563
3.65k
    MULADD(at[10], at[62]);
1564
3.65k
    MULADD(at[11], at[61]);
1565
3.65k
    MULADD(at[12], at[60]);
1566
3.65k
    MULADD(at[13], at[59]);
1567
3.65k
    MULADD(at[14], at[58]);
1568
3.65k
    MULADD(at[15], at[57]);
1569
3.65k
    MULADD(at[16], at[56]);
1570
3.65k
    MULADD(at[17], at[55]);
1571
3.65k
    MULADD(at[18], at[54]);
1572
3.65k
    MULADD(at[19], at[53]);
1573
3.65k
    MULADD(at[20], at[52]);
1574
3.65k
    MULADD(at[21], at[51]);
1575
3.65k
    MULADD(at[22], at[50]);
1576
3.65k
    MULADD(at[23], at[49]);
1577
3.65k
    MULADD(at[24], at[48]);
1578
3.65k
    MULADD(at[25], at[47]);
1579
3.65k
    MULADD(at[26], at[46]);
1580
3.65k
    MULADD(at[27], at[45]);
1581
3.65k
    MULADD(at[28], at[44]);
1582
3.65k
    MULADD(at[29], at[43]);
1583
3.65k
    MULADD(at[30], at[42]);
1584
3.65k
    MULADD(at[31], at[41]);
1585
3.65k
    COMBA_STORE(C->dp[40]);
1586
    /* 41 */
1587
3.65k
    COMBA_FORWARD;
1588
3.65k
    MULADD(at[10], at[63]);
1589
3.65k
    MULADD(at[11], at[62]);
1590
3.65k
    MULADD(at[12], at[61]);
1591
3.65k
    MULADD(at[13], at[60]);
1592
3.65k
    MULADD(at[14], at[59]);
1593
3.65k
    MULADD(at[15], at[58]);
1594
3.65k
    MULADD(at[16], at[57]);
1595
3.65k
    MULADD(at[17], at[56]);
1596
3.65k
    MULADD(at[18], at[55]);
1597
3.65k
    MULADD(at[19], at[54]);
1598
3.65k
    MULADD(at[20], at[53]);
1599
3.65k
    MULADD(at[21], at[52]);
1600
3.65k
    MULADD(at[22], at[51]);
1601
3.65k
    MULADD(at[23], at[50]);
1602
3.65k
    MULADD(at[24], at[49]);
1603
3.65k
    MULADD(at[25], at[48]);
1604
3.65k
    MULADD(at[26], at[47]);
1605
3.65k
    MULADD(at[27], at[46]);
1606
3.65k
    MULADD(at[28], at[45]);
1607
3.65k
    MULADD(at[29], at[44]);
1608
3.65k
    MULADD(at[30], at[43]);
1609
3.65k
    MULADD(at[31], at[42]);
1610
3.65k
    COMBA_STORE(C->dp[41]);
1611
    /* 42 */
1612
3.65k
    COMBA_FORWARD;
1613
3.65k
    MULADD(at[11], at[63]);
1614
3.65k
    MULADD(at[12], at[62]);
1615
3.65k
    MULADD(at[13], at[61]);
1616
3.65k
    MULADD(at[14], at[60]);
1617
3.65k
    MULADD(at[15], at[59]);
1618
3.65k
    MULADD(at[16], at[58]);
1619
3.65k
    MULADD(at[17], at[57]);
1620
3.65k
    MULADD(at[18], at[56]);
1621
3.65k
    MULADD(at[19], at[55]);
1622
3.65k
    MULADD(at[20], at[54]);
1623
3.65k
    MULADD(at[21], at[53]);
1624
3.65k
    MULADD(at[22], at[52]);
1625
3.65k
    MULADD(at[23], at[51]);
1626
3.65k
    MULADD(at[24], at[50]);
1627
3.65k
    MULADD(at[25], at[49]);
1628
3.65k
    MULADD(at[26], at[48]);
1629
3.65k
    MULADD(at[27], at[47]);
1630
3.65k
    MULADD(at[28], at[46]);
1631
3.65k
    MULADD(at[29], at[45]);
1632
3.65k
    MULADD(at[30], at[44]);
1633
3.65k
    MULADD(at[31], at[43]);
1634
3.65k
    COMBA_STORE(C->dp[42]);
1635
    /* 43 */
1636
3.65k
    COMBA_FORWARD;
1637
3.65k
    MULADD(at[12], at[63]);
1638
3.65k
    MULADD(at[13], at[62]);
1639
3.65k
    MULADD(at[14], at[61]);
1640
3.65k
    MULADD(at[15], at[60]);
1641
3.65k
    MULADD(at[16], at[59]);
1642
3.65k
    MULADD(at[17], at[58]);
1643
3.65k
    MULADD(at[18], at[57]);
1644
3.65k
    MULADD(at[19], at[56]);
1645
3.65k
    MULADD(at[20], at[55]);
1646
3.65k
    MULADD(at[21], at[54]);
1647
3.65k
    MULADD(at[22], at[53]);
1648
3.65k
    MULADD(at[23], at[52]);
1649
3.65k
    MULADD(at[24], at[51]);
1650
3.65k
    MULADD(at[25], at[50]);
1651
3.65k
    MULADD(at[26], at[49]);
1652
3.65k
    MULADD(at[27], at[48]);
1653
3.65k
    MULADD(at[28], at[47]);
1654
3.65k
    MULADD(at[29], at[46]);
1655
3.65k
    MULADD(at[30], at[45]);
1656
3.65k
    MULADD(at[31], at[44]);
1657
3.65k
    COMBA_STORE(C->dp[43]);
1658
    /* 44 */
1659
3.65k
    COMBA_FORWARD;
1660
3.65k
    MULADD(at[13], at[63]);
1661
3.65k
    MULADD(at[14], at[62]);
1662
3.65k
    MULADD(at[15], at[61]);
1663
3.65k
    MULADD(at[16], at[60]);
1664
3.65k
    MULADD(at[17], at[59]);
1665
3.65k
    MULADD(at[18], at[58]);
1666
3.65k
    MULADD(at[19], at[57]);
1667
3.65k
    MULADD(at[20], at[56]);
1668
3.65k
    MULADD(at[21], at[55]);
1669
3.65k
    MULADD(at[22], at[54]);
1670
3.65k
    MULADD(at[23], at[53]);
1671
3.65k
    MULADD(at[24], at[52]);
1672
3.65k
    MULADD(at[25], at[51]);
1673
3.65k
    MULADD(at[26], at[50]);
1674
3.65k
    MULADD(at[27], at[49]);
1675
3.65k
    MULADD(at[28], at[48]);
1676
3.65k
    MULADD(at[29], at[47]);
1677
3.65k
    MULADD(at[30], at[46]);
1678
3.65k
    MULADD(at[31], at[45]);
1679
3.65k
    COMBA_STORE(C->dp[44]);
1680
    /* 45 */
1681
3.65k
    COMBA_FORWARD;
1682
3.65k
    MULADD(at[14], at[63]);
1683
3.65k
    MULADD(at[15], at[62]);
1684
3.65k
    MULADD(at[16], at[61]);
1685
3.65k
    MULADD(at[17], at[60]);
1686
3.65k
    MULADD(at[18], at[59]);
1687
3.65k
    MULADD(at[19], at[58]);
1688
3.65k
    MULADD(at[20], at[57]);
1689
3.65k
    MULADD(at[21], at[56]);
1690
3.65k
    MULADD(at[22], at[55]);
1691
3.65k
    MULADD(at[23], at[54]);
1692
3.65k
    MULADD(at[24], at[53]);
1693
3.65k
    MULADD(at[25], at[52]);
1694
3.65k
    MULADD(at[26], at[51]);
1695
3.65k
    MULADD(at[27], at[50]);
1696
3.65k
    MULADD(at[28], at[49]);
1697
3.65k
    MULADD(at[29], at[48]);
1698
3.65k
    MULADD(at[30], at[47]);
1699
3.65k
    MULADD(at[31], at[46]);
1700
3.65k
    COMBA_STORE(C->dp[45]);
1701
    /* 46 */
1702
3.65k
    COMBA_FORWARD;
1703
3.65k
    MULADD(at[15], at[63]);
1704
3.65k
    MULADD(at[16], at[62]);
1705
3.65k
    MULADD(at[17], at[61]);
1706
3.65k
    MULADD(at[18], at[60]);
1707
3.65k
    MULADD(at[19], at[59]);
1708
3.65k
    MULADD(at[20], at[58]);
1709
3.65k
    MULADD(at[21], at[57]);
1710
3.65k
    MULADD(at[22], at[56]);
1711
3.65k
    MULADD(at[23], at[55]);
1712
3.65k
    MULADD(at[24], at[54]);
1713
3.65k
    MULADD(at[25], at[53]);
1714
3.65k
    MULADD(at[26], at[52]);
1715
3.65k
    MULADD(at[27], at[51]);
1716
3.65k
    MULADD(at[28], at[50]);
1717
3.65k
    MULADD(at[29], at[49]);
1718
3.65k
    MULADD(at[30], at[48]);
1719
3.65k
    MULADD(at[31], at[47]);
1720
3.65k
    COMBA_STORE(C->dp[46]);
1721
    /* 47 */
1722
3.65k
    COMBA_FORWARD;
1723
3.65k
    MULADD(at[16], at[63]);
1724
3.65k
    MULADD(at[17], at[62]);
1725
3.65k
    MULADD(at[18], at[61]);
1726
3.65k
    MULADD(at[19], at[60]);
1727
3.65k
    MULADD(at[20], at[59]);
1728
3.65k
    MULADD(at[21], at[58]);
1729
3.65k
    MULADD(at[22], at[57]);
1730
3.65k
    MULADD(at[23], at[56]);
1731
3.65k
    MULADD(at[24], at[55]);
1732
3.65k
    MULADD(at[25], at[54]);
1733
3.65k
    MULADD(at[26], at[53]);
1734
3.65k
    MULADD(at[27], at[52]);
1735
3.65k
    MULADD(at[28], at[51]);
1736
3.65k
    MULADD(at[29], at[50]);
1737
3.65k
    MULADD(at[30], at[49]);
1738
3.65k
    MULADD(at[31], at[48]);
1739
3.65k
    COMBA_STORE(C->dp[47]);
1740
    /* 48 */
1741
3.65k
    COMBA_FORWARD;
1742
3.65k
    MULADD(at[17], at[63]);
1743
3.65k
    MULADD(at[18], at[62]);
1744
3.65k
    MULADD(at[19], at[61]);
1745
3.65k
    MULADD(at[20], at[60]);
1746
3.65k
    MULADD(at[21], at[59]);
1747
3.65k
    MULADD(at[22], at[58]);
1748
3.65k
    MULADD(at[23], at[57]);
1749
3.65k
    MULADD(at[24], at[56]);
1750
3.65k
    MULADD(at[25], at[55]);
1751
3.65k
    MULADD(at[26], at[54]);
1752
3.65k
    MULADD(at[27], at[53]);
1753
3.65k
    MULADD(at[28], at[52]);
1754
3.65k
    MULADD(at[29], at[51]);
1755
3.65k
    MULADD(at[30], at[50]);
1756
3.65k
    MULADD(at[31], at[49]);
1757
3.65k
    COMBA_STORE(C->dp[48]);
1758
    /* 49 */
1759
3.65k
    COMBA_FORWARD;
1760
3.65k
    MULADD(at[18], at[63]);
1761
3.65k
    MULADD(at[19], at[62]);
1762
3.65k
    MULADD(at[20], at[61]);
1763
3.65k
    MULADD(at[21], at[60]);
1764
3.65k
    MULADD(at[22], at[59]);
1765
3.65k
    MULADD(at[23], at[58]);
1766
3.65k
    MULADD(at[24], at[57]);
1767
3.65k
    MULADD(at[25], at[56]);
1768
3.65k
    MULADD(at[26], at[55]);
1769
3.65k
    MULADD(at[27], at[54]);
1770
3.65k
    MULADD(at[28], at[53]);
1771
3.65k
    MULADD(at[29], at[52]);
1772
3.65k
    MULADD(at[30], at[51]);
1773
3.65k
    MULADD(at[31], at[50]);
1774
3.65k
    COMBA_STORE(C->dp[49]);
1775
    /* 50 */
1776
3.65k
    COMBA_FORWARD;
1777
3.65k
    MULADD(at[19], at[63]);
1778
3.65k
    MULADD(at[20], at[62]);
1779
3.65k
    MULADD(at[21], at[61]);
1780
3.65k
    MULADD(at[22], at[60]);
1781
3.65k
    MULADD(at[23], at[59]);
1782
3.65k
    MULADD(at[24], at[58]);
1783
3.65k
    MULADD(at[25], at[57]);
1784
3.65k
    MULADD(at[26], at[56]);
1785
3.65k
    MULADD(at[27], at[55]);
1786
3.65k
    MULADD(at[28], at[54]);
1787
3.65k
    MULADD(at[29], at[53]);
1788
3.65k
    MULADD(at[30], at[52]);
1789
3.65k
    MULADD(at[31], at[51]);
1790
3.65k
    COMBA_STORE(C->dp[50]);
1791
    /* 51 */
1792
3.65k
    COMBA_FORWARD;
1793
3.65k
    MULADD(at[20], at[63]);
1794
3.65k
    MULADD(at[21], at[62]);
1795
3.65k
    MULADD(at[22], at[61]);
1796
3.65k
    MULADD(at[23], at[60]);
1797
3.65k
    MULADD(at[24], at[59]);
1798
3.65k
    MULADD(at[25], at[58]);
1799
3.65k
    MULADD(at[26], at[57]);
1800
3.65k
    MULADD(at[27], at[56]);
1801
3.65k
    MULADD(at[28], at[55]);
1802
3.65k
    MULADD(at[29], at[54]);
1803
3.65k
    MULADD(at[30], at[53]);
1804
3.65k
    MULADD(at[31], at[52]);
1805
3.65k
    COMBA_STORE(C->dp[51]);
1806
    /* 52 */
1807
3.65k
    COMBA_FORWARD;
1808
3.65k
    MULADD(at[21], at[63]);
1809
3.65k
    MULADD(at[22], at[62]);
1810
3.65k
    MULADD(at[23], at[61]);
1811
3.65k
    MULADD(at[24], at[60]);
1812
3.65k
    MULADD(at[25], at[59]);
1813
3.65k
    MULADD(at[26], at[58]);
1814
3.65k
    MULADD(at[27], at[57]);
1815
3.65k
    MULADD(at[28], at[56]);
1816
3.65k
    MULADD(at[29], at[55]);
1817
3.65k
    MULADD(at[30], at[54]);
1818
3.65k
    MULADD(at[31], at[53]);
1819
3.65k
    COMBA_STORE(C->dp[52]);
1820
    /* 53 */
1821
3.65k
    COMBA_FORWARD;
1822
3.65k
    MULADD(at[22], at[63]);
1823
3.65k
    MULADD(at[23], at[62]);
1824
3.65k
    MULADD(at[24], at[61]);
1825
3.65k
    MULADD(at[25], at[60]);
1826
3.65k
    MULADD(at[26], at[59]);
1827
3.65k
    MULADD(at[27], at[58]);
1828
3.65k
    MULADD(at[28], at[57]);
1829
3.65k
    MULADD(at[29], at[56]);
1830
3.65k
    MULADD(at[30], at[55]);
1831
3.65k
    MULADD(at[31], at[54]);
1832
3.65k
    COMBA_STORE(C->dp[53]);
1833
    /* 54 */
1834
3.65k
    COMBA_FORWARD;
1835
3.65k
    MULADD(at[23], at[63]);
1836
3.65k
    MULADD(at[24], at[62]);
1837
3.65k
    MULADD(at[25], at[61]);
1838
3.65k
    MULADD(at[26], at[60]);
1839
3.65k
    MULADD(at[27], at[59]);
1840
3.65k
    MULADD(at[28], at[58]);
1841
3.65k
    MULADD(at[29], at[57]);
1842
3.65k
    MULADD(at[30], at[56]);
1843
3.65k
    MULADD(at[31], at[55]);
1844
3.65k
    COMBA_STORE(C->dp[54]);
1845
    /* 55 */
1846
3.65k
    COMBA_FORWARD;
1847
3.65k
    MULADD(at[24], at[63]);
1848
3.65k
    MULADD(at[25], at[62]);
1849
3.65k
    MULADD(at[26], at[61]);
1850
3.65k
    MULADD(at[27], at[60]);
1851
3.65k
    MULADD(at[28], at[59]);
1852
3.65k
    MULADD(at[29], at[58]);
1853
3.65k
    MULADD(at[30], at[57]);
1854
3.65k
    MULADD(at[31], at[56]);
1855
3.65k
    COMBA_STORE(C->dp[55]);
1856
    /* 56 */
1857
3.65k
    COMBA_FORWARD;
1858
3.65k
    MULADD(at[25], at[63]);
1859
3.65k
    MULADD(at[26], at[62]);
1860
3.65k
    MULADD(at[27], at[61]);
1861
3.65k
    MULADD(at[28], at[60]);
1862
3.65k
    MULADD(at[29], at[59]);
1863
3.65k
    MULADD(at[30], at[58]);
1864
3.65k
    MULADD(at[31], at[57]);
1865
3.65k
    COMBA_STORE(C->dp[56]);
1866
    /* 57 */
1867
3.65k
    COMBA_FORWARD;
1868
3.65k
    MULADD(at[26], at[63]);
1869
3.65k
    MULADD(at[27], at[62]);
1870
3.65k
    MULADD(at[28], at[61]);
1871
3.65k
    MULADD(at[29], at[60]);
1872
3.65k
    MULADD(at[30], at[59]);
1873
3.65k
    MULADD(at[31], at[58]);
1874
3.65k
    COMBA_STORE(C->dp[57]);
1875
    /* 58 */
1876
3.65k
    COMBA_FORWARD;
1877
3.65k
    MULADD(at[27], at[63]);
1878
3.65k
    MULADD(at[28], at[62]);
1879
3.65k
    MULADD(at[29], at[61]);
1880
3.65k
    MULADD(at[30], at[60]);
1881
3.65k
    MULADD(at[31], at[59]);
1882
3.65k
    COMBA_STORE(C->dp[58]);
1883
    /* 59 */
1884
3.65k
    COMBA_FORWARD;
1885
3.65k
    MULADD(at[28], at[63]);
1886
3.65k
    MULADD(at[29], at[62]);
1887
3.65k
    MULADD(at[30], at[61]);
1888
3.65k
    MULADD(at[31], at[60]);
1889
3.65k
    COMBA_STORE(C->dp[59]);
1890
    /* 60 */
1891
3.65k
    COMBA_FORWARD;
1892
3.65k
    MULADD(at[29], at[63]);
1893
3.65k
    MULADD(at[30], at[62]);
1894
3.65k
    MULADD(at[31], at[61]);
1895
3.65k
    COMBA_STORE(C->dp[60]);
1896
    /* 61 */
1897
3.65k
    COMBA_FORWARD;
1898
3.65k
    MULADD(at[30], at[63]);
1899
3.65k
    MULADD(at[31], at[62]);
1900
3.65k
    COMBA_STORE(C->dp[61]);
1901
    /* 62 */
1902
3.65k
    COMBA_FORWARD;
1903
3.65k
    MULADD(at[31], at[63]);
1904
3.65k
    COMBA_STORE(C->dp[62]);
1905
3.65k
    COMBA_STORE2(C->dp[63]);
1906
3.65k
    C->used = 64;
1907
3.65k
    C->sign = A->sign ^ B->sign;
1908
3.65k
    mp_clamp(C);
1909
3.65k
    COMBA_FINI;
1910
3.65k
}
1911
1912
void
1913
s_mp_sqr_comba_4(const mp_int *A, mp_int *B)
1914
41.3k
{
1915
41.3k
    mp_digit *a, b[8], c0, c1, c2;
1916
1917
41.3k
    a = A->dp;
1918
41.3k
    COMBA_START;
1919
1920
    /* clear carries */
1921
41.3k
    CLEAR_CARRY;
1922
1923
    /* output 0 */
1924
41.3k
    SQRADD(a[0], a[0]);
1925
41.3k
    COMBA_STORE(b[0]);
1926
1927
    /* output 1 */
1928
41.3k
    CARRY_FORWARD;
1929
41.3k
    SQRADD2(a[0], a[1]);
1930
41.3k
    COMBA_STORE(b[1]);
1931
1932
    /* output 2 */
1933
41.3k
    CARRY_FORWARD;
1934
41.3k
    SQRADD2(a[0], a[2]);
1935
41.3k
    SQRADD(a[1], a[1]);
1936
41.3k
    COMBA_STORE(b[2]);
1937
1938
    /* output 3 */
1939
41.3k
    CARRY_FORWARD;
1940
41.3k
    SQRADD2(a[0], a[3]);
1941
41.3k
    SQRADD2(a[1], a[2]);
1942
41.3k
    COMBA_STORE(b[3]);
1943
1944
    /* output 4 */
1945
41.3k
    CARRY_FORWARD;
1946
41.3k
    SQRADD2(a[1], a[3]);
1947
41.3k
    SQRADD(a[2], a[2]);
1948
41.3k
    COMBA_STORE(b[4]);
1949
1950
    /* output 5 */
1951
41.3k
    CARRY_FORWARD;
1952
41.3k
    SQRADD2(a[2], a[3]);
1953
41.3k
    COMBA_STORE(b[5]);
1954
1955
    /* output 6 */
1956
41.3k
    CARRY_FORWARD;
1957
41.3k
    SQRADD(a[3], a[3]);
1958
41.3k
    COMBA_STORE(b[6]);
1959
41.3k
    COMBA_STORE2(b[7]);
1960
41.3k
    COMBA_FINI;
1961
1962
41.3k
    B->used = 8;
1963
41.3k
    B->sign = ZPOS;
1964
41.3k
    memcpy(B->dp, b, 8 * sizeof(mp_digit));
1965
41.3k
    mp_clamp(B);
1966
41.3k
}
1967
1968
void
1969
s_mp_sqr_comba_8(const mp_int *A, mp_int *B)
1970
2.42k
{
1971
2.42k
    mp_digit *a, b[16], c0, c1, c2, sc0, sc1, sc2;
1972
1973
2.42k
    a = A->dp;
1974
2.42k
    COMBA_START;
1975
1976
    /* clear carries */
1977
2.42k
    CLEAR_CARRY;
1978
1979
    /* output 0 */
1980
2.42k
    SQRADD(a[0], a[0]);
1981
2.42k
    COMBA_STORE(b[0]);
1982
1983
    /* output 1 */
1984
2.42k
    CARRY_FORWARD;
1985
2.42k
    SQRADD2(a[0], a[1]);
1986
2.42k
    COMBA_STORE(b[1]);
1987
1988
    /* output 2 */
1989
2.42k
    CARRY_FORWARD;
1990
2.42k
    SQRADD2(a[0], a[2]);
1991
2.42k
    SQRADD(a[1], a[1]);
1992
2.42k
    COMBA_STORE(b[2]);
1993
1994
    /* output 3 */
1995
2.42k
    CARRY_FORWARD;
1996
2.42k
    SQRADD2(a[0], a[3]);
1997
2.42k
    SQRADD2(a[1], a[2]);
1998
2.42k
    COMBA_STORE(b[3]);
1999
2000
    /* output 4 */
2001
2.42k
    CARRY_FORWARD;
2002
2.42k
    SQRADD2(a[0], a[4]);
2003
2.42k
    SQRADD2(a[1], a[3]);
2004
2.42k
    SQRADD(a[2], a[2]);
2005
2.42k
    COMBA_STORE(b[4]);
2006
2007
    /* output 5 */
2008
2.42k
    CARRY_FORWARD;
2009
2.42k
    SQRADDSC(a[0], a[5]);
2010
2.42k
    SQRADDAC(a[1], a[4]);
2011
2.42k
    SQRADDAC(a[2], a[3]);
2012
2.42k
    SQRADDDB;
2013
2.42k
    COMBA_STORE(b[5]);
2014
2015
    /* output 6 */
2016
2.42k
    CARRY_FORWARD;
2017
2.42k
    SQRADDSC(a[0], a[6]);
2018
2.42k
    SQRADDAC(a[1], a[5]);
2019
2.42k
    SQRADDAC(a[2], a[4]);
2020
2.42k
    SQRADDDB;
2021
2.42k
    SQRADD(a[3], a[3]);
2022
2.42k
    COMBA_STORE(b[6]);
2023
2024
    /* output 7 */
2025
2.42k
    CARRY_FORWARD;
2026
2.42k
    SQRADDSC(a[0], a[7]);
2027
2.42k
    SQRADDAC(a[1], a[6]);
2028
2.42k
    SQRADDAC(a[2], a[5]);
2029
2.42k
    SQRADDAC(a[3], a[4]);
2030
2.42k
    SQRADDDB;
2031
2.42k
    COMBA_STORE(b[7]);
2032
2033
    /* output 8 */
2034
2.42k
    CARRY_FORWARD;
2035
2.42k
    SQRADDSC(a[1], a[7]);
2036
2.42k
    SQRADDAC(a[2], a[6]);
2037
2.42k
    SQRADDAC(a[3], a[5]);
2038
2.42k
    SQRADDDB;
2039
2.42k
    SQRADD(a[4], a[4]);
2040
2.42k
    COMBA_STORE(b[8]);
2041
2042
    /* output 9 */
2043
2.42k
    CARRY_FORWARD;
2044
2.42k
    SQRADDSC(a[2], a[7]);
2045
2.42k
    SQRADDAC(a[3], a[6]);
2046
2.42k
    SQRADDAC(a[4], a[5]);
2047
2.42k
    SQRADDDB;
2048
2.42k
    COMBA_STORE(b[9]);
2049
2050
    /* output 10 */
2051
2.42k
    CARRY_FORWARD;
2052
2.42k
    SQRADD2(a[3], a[7]);
2053
2.42k
    SQRADD2(a[4], a[6]);
2054
2.42k
    SQRADD(a[5], a[5]);
2055
2.42k
    COMBA_STORE(b[10]);
2056
2057
    /* output 11 */
2058
2.42k
    CARRY_FORWARD;
2059
2.42k
    SQRADD2(a[4], a[7]);
2060
2.42k
    SQRADD2(a[5], a[6]);
2061
2.42k
    COMBA_STORE(b[11]);
2062
2063
    /* output 12 */
2064
2.42k
    CARRY_FORWARD;
2065
2.42k
    SQRADD2(a[5], a[7]);
2066
2.42k
    SQRADD(a[6], a[6]);
2067
2.42k
    COMBA_STORE(b[12]);
2068
2069
    /* output 13 */
2070
2.42k
    CARRY_FORWARD;
2071
2.42k
    SQRADD2(a[6], a[7]);
2072
2.42k
    COMBA_STORE(b[13]);
2073
2074
    /* output 14 */
2075
2.42k
    CARRY_FORWARD;
2076
2.42k
    SQRADD(a[7], a[7]);
2077
2.42k
    COMBA_STORE(b[14]);
2078
2.42k
    COMBA_STORE2(b[15]);
2079
2.42k
    COMBA_FINI;
2080
2081
2.42k
    B->used = 16;
2082
2.42k
    B->sign = ZPOS;
2083
2.42k
    memcpy(B->dp, b, 16 * sizeof(mp_digit));
2084
2.42k
    mp_clamp(B);
2085
2.42k
}
2086
2087
void
2088
s_mp_sqr_comba_16(const mp_int *A, mp_int *B)
2089
15.4k
{
2090
15.4k
    mp_digit *a, b[32], c0, c1, c2, sc0, sc1, sc2;
2091
2092
15.4k
    a = A->dp;
2093
15.4k
    COMBA_START;
2094
2095
    /* clear carries */
2096
15.4k
    CLEAR_CARRY;
2097
2098
    /* output 0 */
2099
15.4k
    SQRADD(a[0], a[0]);
2100
15.4k
    COMBA_STORE(b[0]);
2101
2102
    /* output 1 */
2103
15.4k
    CARRY_FORWARD;
2104
15.4k
    SQRADD2(a[0], a[1]);
2105
15.4k
    COMBA_STORE(b[1]);
2106
2107
    /* output 2 */
2108
15.4k
    CARRY_FORWARD;
2109
15.4k
    SQRADD2(a[0], a[2]);
2110
15.4k
    SQRADD(a[1], a[1]);
2111
15.4k
    COMBA_STORE(b[2]);
2112
2113
    /* output 3 */
2114
15.4k
    CARRY_FORWARD;
2115
15.4k
    SQRADD2(a[0], a[3]);
2116
15.4k
    SQRADD2(a[1], a[2]);
2117
15.4k
    COMBA_STORE(b[3]);
2118
2119
    /* output 4 */
2120
15.4k
    CARRY_FORWARD;
2121
15.4k
    SQRADD2(a[0], a[4]);
2122
15.4k
    SQRADD2(a[1], a[3]);
2123
15.4k
    SQRADD(a[2], a[2]);
2124
15.4k
    COMBA_STORE(b[4]);
2125
2126
    /* output 5 */
2127
15.4k
    CARRY_FORWARD;
2128
15.4k
    SQRADDSC(a[0], a[5]);
2129
15.4k
    SQRADDAC(a[1], a[4]);
2130
15.4k
    SQRADDAC(a[2], a[3]);
2131
15.4k
    SQRADDDB;
2132
15.4k
    COMBA_STORE(b[5]);
2133
2134
    /* output 6 */
2135
15.4k
    CARRY_FORWARD;
2136
15.4k
    SQRADDSC(a[0], a[6]);
2137
15.4k
    SQRADDAC(a[1], a[5]);
2138
15.4k
    SQRADDAC(a[2], a[4]);
2139
15.4k
    SQRADDDB;
2140
15.4k
    SQRADD(a[3], a[3]);
2141
15.4k
    COMBA_STORE(b[6]);
2142
2143
    /* output 7 */
2144
15.4k
    CARRY_FORWARD;
2145
15.4k
    SQRADDSC(a[0], a[7]);
2146
15.4k
    SQRADDAC(a[1], a[6]);
2147
15.4k
    SQRADDAC(a[2], a[5]);
2148
15.4k
    SQRADDAC(a[3], a[4]);
2149
15.4k
    SQRADDDB;
2150
15.4k
    COMBA_STORE(b[7]);
2151
2152
    /* output 8 */
2153
15.4k
    CARRY_FORWARD;
2154
15.4k
    SQRADDSC(a[0], a[8]);
2155
15.4k
    SQRADDAC(a[1], a[7]);
2156
15.4k
    SQRADDAC(a[2], a[6]);
2157
15.4k
    SQRADDAC(a[3], a[5]);
2158
15.4k
    SQRADDDB;
2159
15.4k
    SQRADD(a[4], a[4]);
2160
15.4k
    COMBA_STORE(b[8]);
2161
2162
    /* output 9 */
2163
15.4k
    CARRY_FORWARD;
2164
15.4k
    SQRADDSC(a[0], a[9]);
2165
15.4k
    SQRADDAC(a[1], a[8]);
2166
15.4k
    SQRADDAC(a[2], a[7]);
2167
15.4k
    SQRADDAC(a[3], a[6]);
2168
15.4k
    SQRADDAC(a[4], a[5]);
2169
15.4k
    SQRADDDB;
2170
15.4k
    COMBA_STORE(b[9]);
2171
2172
    /* output 10 */
2173
15.4k
    CARRY_FORWARD;
2174
15.4k
    SQRADDSC(a[0], a[10]);
2175
15.4k
    SQRADDAC(a[1], a[9]);
2176
15.4k
    SQRADDAC(a[2], a[8]);
2177
15.4k
    SQRADDAC(a[3], a[7]);
2178
15.4k
    SQRADDAC(a[4], a[6]);
2179
15.4k
    SQRADDDB;
2180
15.4k
    SQRADD(a[5], a[5]);
2181
15.4k
    COMBA_STORE(b[10]);
2182
2183
    /* output 11 */
2184
15.4k
    CARRY_FORWARD;
2185
15.4k
    SQRADDSC(a[0], a[11]);
2186
15.4k
    SQRADDAC(a[1], a[10]);
2187
15.4k
    SQRADDAC(a[2], a[9]);
2188
15.4k
    SQRADDAC(a[3], a[8]);
2189
15.4k
    SQRADDAC(a[4], a[7]);
2190
15.4k
    SQRADDAC(a[5], a[6]);
2191
15.4k
    SQRADDDB;
2192
15.4k
    COMBA_STORE(b[11]);
2193
2194
    /* output 12 */
2195
15.4k
    CARRY_FORWARD;
2196
15.4k
    SQRADDSC(a[0], a[12]);
2197
15.4k
    SQRADDAC(a[1], a[11]);
2198
15.4k
    SQRADDAC(a[2], a[10]);
2199
15.4k
    SQRADDAC(a[3], a[9]);
2200
15.4k
    SQRADDAC(a[4], a[8]);
2201
15.4k
    SQRADDAC(a[5], a[7]);
2202
15.4k
    SQRADDDB;
2203
15.4k
    SQRADD(a[6], a[6]);
2204
15.4k
    COMBA_STORE(b[12]);
2205
2206
    /* output 13 */
2207
15.4k
    CARRY_FORWARD;
2208
15.4k
    SQRADDSC(a[0], a[13]);
2209
15.4k
    SQRADDAC(a[1], a[12]);
2210
15.4k
    SQRADDAC(a[2], a[11]);
2211
15.4k
    SQRADDAC(a[3], a[10]);
2212
15.4k
    SQRADDAC(a[4], a[9]);
2213
15.4k
    SQRADDAC(a[5], a[8]);
2214
15.4k
    SQRADDAC(a[6], a[7]);
2215
15.4k
    SQRADDDB;
2216
15.4k
    COMBA_STORE(b[13]);
2217
2218
    /* output 14 */
2219
15.4k
    CARRY_FORWARD;
2220
15.4k
    SQRADDSC(a[0], a[14]);
2221
15.4k
    SQRADDAC(a[1], a[13]);
2222
15.4k
    SQRADDAC(a[2], a[12]);
2223
15.4k
    SQRADDAC(a[3], a[11]);
2224
15.4k
    SQRADDAC(a[4], a[10]);
2225
15.4k
    SQRADDAC(a[5], a[9]);
2226
15.4k
    SQRADDAC(a[6], a[8]);
2227
15.4k
    SQRADDDB;
2228
15.4k
    SQRADD(a[7], a[7]);
2229
15.4k
    COMBA_STORE(b[14]);
2230
2231
    /* output 15 */
2232
15.4k
    CARRY_FORWARD;
2233
15.4k
    SQRADDSC(a[0], a[15]);
2234
15.4k
    SQRADDAC(a[1], a[14]);
2235
15.4k
    SQRADDAC(a[2], a[13]);
2236
15.4k
    SQRADDAC(a[3], a[12]);
2237
15.4k
    SQRADDAC(a[4], a[11]);
2238
15.4k
    SQRADDAC(a[5], a[10]);
2239
15.4k
    SQRADDAC(a[6], a[9]);
2240
15.4k
    SQRADDAC(a[7], a[8]);
2241
15.4k
    SQRADDDB;
2242
15.4k
    COMBA_STORE(b[15]);
2243
2244
    /* output 16 */
2245
15.4k
    CARRY_FORWARD;
2246
15.4k
    SQRADDSC(a[1], a[15]);
2247
15.4k
    SQRADDAC(a[2], a[14]);
2248
15.4k
    SQRADDAC(a[3], a[13]);
2249
15.4k
    SQRADDAC(a[4], a[12]);
2250
15.4k
    SQRADDAC(a[5], a[11]);
2251
15.4k
    SQRADDAC(a[6], a[10]);
2252
15.4k
    SQRADDAC(a[7], a[9]);
2253
15.4k
    SQRADDDB;
2254
15.4k
    SQRADD(a[8], a[8]);
2255
15.4k
    COMBA_STORE(b[16]);
2256
2257
    /* output 17 */
2258
15.4k
    CARRY_FORWARD;
2259
15.4k
    SQRADDSC(a[2], a[15]);
2260
15.4k
    SQRADDAC(a[3], a[14]);
2261
15.4k
    SQRADDAC(a[4], a[13]);
2262
15.4k
    SQRADDAC(a[5], a[12]);
2263
15.4k
    SQRADDAC(a[6], a[11]);
2264
15.4k
    SQRADDAC(a[7], a[10]);
2265
15.4k
    SQRADDAC(a[8], a[9]);
2266
15.4k
    SQRADDDB;
2267
15.4k
    COMBA_STORE(b[17]);
2268
2269
    /* output 18 */
2270
15.4k
    CARRY_FORWARD;
2271
15.4k
    SQRADDSC(a[3], a[15]);
2272
15.4k
    SQRADDAC(a[4], a[14]);
2273
15.4k
    SQRADDAC(a[5], a[13]);
2274
15.4k
    SQRADDAC(a[6], a[12]);
2275
15.4k
    SQRADDAC(a[7], a[11]);
2276
15.4k
    SQRADDAC(a[8], a[10]);
2277
15.4k
    SQRADDDB;
2278
15.4k
    SQRADD(a[9], a[9]);
2279
15.4k
    COMBA_STORE(b[18]);
2280
2281
    /* output 19 */
2282
15.4k
    CARRY_FORWARD;
2283
15.4k
    SQRADDSC(a[4], a[15]);
2284
15.4k
    SQRADDAC(a[5], a[14]);
2285
15.4k
    SQRADDAC(a[6], a[13]);
2286
15.4k
    SQRADDAC(a[7], a[12]);
2287
15.4k
    SQRADDAC(a[8], a[11]);
2288
15.4k
    SQRADDAC(a[9], a[10]);
2289
15.4k
    SQRADDDB;
2290
15.4k
    COMBA_STORE(b[19]);
2291
2292
    /* output 20 */
2293
15.4k
    CARRY_FORWARD;
2294
15.4k
    SQRADDSC(a[5], a[15]);
2295
15.4k
    SQRADDAC(a[6], a[14]);
2296
15.4k
    SQRADDAC(a[7], a[13]);
2297
15.4k
    SQRADDAC(a[8], a[12]);
2298
15.4k
    SQRADDAC(a[9], a[11]);
2299
15.4k
    SQRADDDB;
2300
15.4k
    SQRADD(a[10], a[10]);
2301
15.4k
    COMBA_STORE(b[20]);
2302
2303
    /* output 21 */
2304
15.4k
    CARRY_FORWARD;
2305
15.4k
    SQRADDSC(a[6], a[15]);
2306
15.4k
    SQRADDAC(a[7], a[14]);
2307
15.4k
    SQRADDAC(a[8], a[13]);
2308
15.4k
    SQRADDAC(a[9], a[12]);
2309
15.4k
    SQRADDAC(a[10], a[11]);
2310
15.4k
    SQRADDDB;
2311
15.4k
    COMBA_STORE(b[21]);
2312
2313
    /* output 22 */
2314
15.4k
    CARRY_FORWARD;
2315
15.4k
    SQRADDSC(a[7], a[15]);
2316
15.4k
    SQRADDAC(a[8], a[14]);
2317
15.4k
    SQRADDAC(a[9], a[13]);
2318
15.4k
    SQRADDAC(a[10], a[12]);
2319
15.4k
    SQRADDDB;
2320
15.4k
    SQRADD(a[11], a[11]);
2321
15.4k
    COMBA_STORE(b[22]);
2322
2323
    /* output 23 */
2324
15.4k
    CARRY_FORWARD;
2325
15.4k
    SQRADDSC(a[8], a[15]);
2326
15.4k
    SQRADDAC(a[9], a[14]);
2327
15.4k
    SQRADDAC(a[10], a[13]);
2328
15.4k
    SQRADDAC(a[11], a[12]);
2329
15.4k
    SQRADDDB;
2330
15.4k
    COMBA_STORE(b[23]);
2331
2332
    /* output 24 */
2333
15.4k
    CARRY_FORWARD;
2334
15.4k
    SQRADDSC(a[9], a[15]);
2335
15.4k
    SQRADDAC(a[10], a[14]);
2336
15.4k
    SQRADDAC(a[11], a[13]);
2337
15.4k
    SQRADDDB;
2338
15.4k
    SQRADD(a[12], a[12]);
2339
15.4k
    COMBA_STORE(b[24]);
2340
2341
    /* output 25 */
2342
15.4k
    CARRY_FORWARD;
2343
15.4k
    SQRADDSC(a[10], a[15]);
2344
15.4k
    SQRADDAC(a[11], a[14]);
2345
15.4k
    SQRADDAC(a[12], a[13]);
2346
15.4k
    SQRADDDB;
2347
15.4k
    COMBA_STORE(b[25]);
2348
2349
    /* output 26 */
2350
15.4k
    CARRY_FORWARD;
2351
15.4k
    SQRADD2(a[11], a[15]);
2352
15.4k
    SQRADD2(a[12], a[14]);
2353
15.4k
    SQRADD(a[13], a[13]);
2354
15.4k
    COMBA_STORE(b[26]);
2355
2356
    /* output 27 */
2357
15.4k
    CARRY_FORWARD;
2358
15.4k
    SQRADD2(a[12], a[15]);
2359
15.4k
    SQRADD2(a[13], a[14]);
2360
15.4k
    COMBA_STORE(b[27]);
2361
2362
    /* output 28 */
2363
15.4k
    CARRY_FORWARD;
2364
15.4k
    SQRADD2(a[13], a[15]);
2365
15.4k
    SQRADD(a[14], a[14]);
2366
15.4k
    COMBA_STORE(b[28]);
2367
2368
    /* output 29 */
2369
15.4k
    CARRY_FORWARD;
2370
15.4k
    SQRADD2(a[14], a[15]);
2371
15.4k
    COMBA_STORE(b[29]);
2372
2373
    /* output 30 */
2374
15.4k
    CARRY_FORWARD;
2375
15.4k
    SQRADD(a[15], a[15]);
2376
15.4k
    COMBA_STORE(b[30]);
2377
15.4k
    COMBA_STORE2(b[31]);
2378
15.4k
    COMBA_FINI;
2379
2380
15.4k
    B->used = 32;
2381
15.4k
    B->sign = ZPOS;
2382
15.4k
    memcpy(B->dp, b, 32 * sizeof(mp_digit));
2383
15.4k
    mp_clamp(B);
2384
15.4k
}
2385
2386
void
2387
s_mp_sqr_comba_32(const mp_int *A, mp_int *B)
2388
28.8k
{
2389
28.8k
    mp_digit *a, b[64], c0, c1, c2, sc0, sc1, sc2;
2390
2391
28.8k
    a = A->dp;
2392
28.8k
    COMBA_START;
2393
2394
    /* clear carries */
2395
28.8k
    CLEAR_CARRY;
2396
2397
    /* output 0 */
2398
28.8k
    SQRADD(a[0], a[0]);
2399
28.8k
    COMBA_STORE(b[0]);
2400
2401
    /* output 1 */
2402
28.8k
    CARRY_FORWARD;
2403
28.8k
    SQRADD2(a[0], a[1]);
2404
28.8k
    COMBA_STORE(b[1]);
2405
2406
    /* output 2 */
2407
28.8k
    CARRY_FORWARD;
2408
28.8k
    SQRADD2(a[0], a[2]);
2409
28.8k
    SQRADD(a[1], a[1]);
2410
28.8k
    COMBA_STORE(b[2]);
2411
2412
    /* output 3 */
2413
28.8k
    CARRY_FORWARD;
2414
28.8k
    SQRADD2(a[0], a[3]);
2415
28.8k
    SQRADD2(a[1], a[2]);
2416
28.8k
    COMBA_STORE(b[3]);
2417
2418
    /* output 4 */
2419
28.8k
    CARRY_FORWARD;
2420
28.8k
    SQRADD2(a[0], a[4]);
2421
28.8k
    SQRADD2(a[1], a[3]);
2422
28.8k
    SQRADD(a[2], a[2]);
2423
28.8k
    COMBA_STORE(b[4]);
2424
2425
    /* output 5 */
2426
28.8k
    CARRY_FORWARD;
2427
28.8k
    SQRADDSC(a[0], a[5]);
2428
28.8k
    SQRADDAC(a[1], a[4]);
2429
28.8k
    SQRADDAC(a[2], a[3]);
2430
28.8k
    SQRADDDB;
2431
28.8k
    COMBA_STORE(b[5]);
2432
2433
    /* output 6 */
2434
28.8k
    CARRY_FORWARD;
2435
28.8k
    SQRADDSC(a[0], a[6]);
2436
28.8k
    SQRADDAC(a[1], a[5]);
2437
28.8k
    SQRADDAC(a[2], a[4]);
2438
28.8k
    SQRADDDB;
2439
28.8k
    SQRADD(a[3], a[3]);
2440
28.8k
    COMBA_STORE(b[6]);
2441
2442
    /* output 7 */
2443
28.8k
    CARRY_FORWARD;
2444
28.8k
    SQRADDSC(a[0], a[7]);
2445
28.8k
    SQRADDAC(a[1], a[6]);
2446
28.8k
    SQRADDAC(a[2], a[5]);
2447
28.8k
    SQRADDAC(a[3], a[4]);
2448
28.8k
    SQRADDDB;
2449
28.8k
    COMBA_STORE(b[7]);
2450
2451
    /* output 8 */
2452
28.8k
    CARRY_FORWARD;
2453
28.8k
    SQRADDSC(a[0], a[8]);
2454
28.8k
    SQRADDAC(a[1], a[7]);
2455
28.8k
    SQRADDAC(a[2], a[6]);
2456
28.8k
    SQRADDAC(a[3], a[5]);
2457
28.8k
    SQRADDDB;
2458
28.8k
    SQRADD(a[4], a[4]);
2459
28.8k
    COMBA_STORE(b[8]);
2460
2461
    /* output 9 */
2462
28.8k
    CARRY_FORWARD;
2463
28.8k
    SQRADDSC(a[0], a[9]);
2464
28.8k
    SQRADDAC(a[1], a[8]);
2465
28.8k
    SQRADDAC(a[2], a[7]);
2466
28.8k
    SQRADDAC(a[3], a[6]);
2467
28.8k
    SQRADDAC(a[4], a[5]);
2468
28.8k
    SQRADDDB;
2469
28.8k
    COMBA_STORE(b[9]);
2470
2471
    /* output 10 */
2472
28.8k
    CARRY_FORWARD;
2473
28.8k
    SQRADDSC(a[0], a[10]);
2474
28.8k
    SQRADDAC(a[1], a[9]);
2475
28.8k
    SQRADDAC(a[2], a[8]);
2476
28.8k
    SQRADDAC(a[3], a[7]);
2477
28.8k
    SQRADDAC(a[4], a[6]);
2478
28.8k
    SQRADDDB;
2479
28.8k
    SQRADD(a[5], a[5]);
2480
28.8k
    COMBA_STORE(b[10]);
2481
2482
    /* output 11 */
2483
28.8k
    CARRY_FORWARD;
2484
28.8k
    SQRADDSC(a[0], a[11]);
2485
28.8k
    SQRADDAC(a[1], a[10]);
2486
28.8k
    SQRADDAC(a[2], a[9]);
2487
28.8k
    SQRADDAC(a[3], a[8]);
2488
28.8k
    SQRADDAC(a[4], a[7]);
2489
28.8k
    SQRADDAC(a[5], a[6]);
2490
28.8k
    SQRADDDB;
2491
28.8k
    COMBA_STORE(b[11]);
2492
2493
    /* output 12 */
2494
28.8k
    CARRY_FORWARD;
2495
28.8k
    SQRADDSC(a[0], a[12]);
2496
28.8k
    SQRADDAC(a[1], a[11]);
2497
28.8k
    SQRADDAC(a[2], a[10]);
2498
28.8k
    SQRADDAC(a[3], a[9]);
2499
28.8k
    SQRADDAC(a[4], a[8]);
2500
28.8k
    SQRADDAC(a[5], a[7]);
2501
28.8k
    SQRADDDB;
2502
28.8k
    SQRADD(a[6], a[6]);
2503
28.8k
    COMBA_STORE(b[12]);
2504
2505
    /* output 13 */
2506
28.8k
    CARRY_FORWARD;
2507
28.8k
    SQRADDSC(a[0], a[13]);
2508
28.8k
    SQRADDAC(a[1], a[12]);
2509
28.8k
    SQRADDAC(a[2], a[11]);
2510
28.8k
    SQRADDAC(a[3], a[10]);
2511
28.8k
    SQRADDAC(a[4], a[9]);
2512
28.8k
    SQRADDAC(a[5], a[8]);
2513
28.8k
    SQRADDAC(a[6], a[7]);
2514
28.8k
    SQRADDDB;
2515
28.8k
    COMBA_STORE(b[13]);
2516
2517
    /* output 14 */
2518
28.8k
    CARRY_FORWARD;
2519
28.8k
    SQRADDSC(a[0], a[14]);
2520
28.8k
    SQRADDAC(a[1], a[13]);
2521
28.8k
    SQRADDAC(a[2], a[12]);
2522
28.8k
    SQRADDAC(a[3], a[11]);
2523
28.8k
    SQRADDAC(a[4], a[10]);
2524
28.8k
    SQRADDAC(a[5], a[9]);
2525
28.8k
    SQRADDAC(a[6], a[8]);
2526
28.8k
    SQRADDDB;
2527
28.8k
    SQRADD(a[7], a[7]);
2528
28.8k
    COMBA_STORE(b[14]);
2529
2530
    /* output 15 */
2531
28.8k
    CARRY_FORWARD;
2532
28.8k
    SQRADDSC(a[0], a[15]);
2533
28.8k
    SQRADDAC(a[1], a[14]);
2534
28.8k
    SQRADDAC(a[2], a[13]);
2535
28.8k
    SQRADDAC(a[3], a[12]);
2536
28.8k
    SQRADDAC(a[4], a[11]);
2537
28.8k
    SQRADDAC(a[5], a[10]);
2538
28.8k
    SQRADDAC(a[6], a[9]);
2539
28.8k
    SQRADDAC(a[7], a[8]);
2540
28.8k
    SQRADDDB;
2541
28.8k
    COMBA_STORE(b[15]);
2542
2543
    /* output 16 */
2544
28.8k
    CARRY_FORWARD;
2545
28.8k
    SQRADDSC(a[0], a[16]);
2546
28.8k
    SQRADDAC(a[1], a[15]);
2547
28.8k
    SQRADDAC(a[2], a[14]);
2548
28.8k
    SQRADDAC(a[3], a[13]);
2549
28.8k
    SQRADDAC(a[4], a[12]);
2550
28.8k
    SQRADDAC(a[5], a[11]);
2551
28.8k
    SQRADDAC(a[6], a[10]);
2552
28.8k
    SQRADDAC(a[7], a[9]);
2553
28.8k
    SQRADDDB;
2554
28.8k
    SQRADD(a[8], a[8]);
2555
28.8k
    COMBA_STORE(b[16]);
2556
2557
    /* output 17 */
2558
28.8k
    CARRY_FORWARD;
2559
28.8k
    SQRADDSC(a[0], a[17]);
2560
28.8k
    SQRADDAC(a[1], a[16]);
2561
28.8k
    SQRADDAC(a[2], a[15]);
2562
28.8k
    SQRADDAC(a[3], a[14]);
2563
28.8k
    SQRADDAC(a[4], a[13]);
2564
28.8k
    SQRADDAC(a[5], a[12]);
2565
28.8k
    SQRADDAC(a[6], a[11]);
2566
28.8k
    SQRADDAC(a[7], a[10]);
2567
28.8k
    SQRADDAC(a[8], a[9]);
2568
28.8k
    SQRADDDB;
2569
28.8k
    COMBA_STORE(b[17]);
2570
2571
    /* output 18 */
2572
28.8k
    CARRY_FORWARD;
2573
28.8k
    SQRADDSC(a[0], a[18]);
2574
28.8k
    SQRADDAC(a[1], a[17]);
2575
28.8k
    SQRADDAC(a[2], a[16]);
2576
28.8k
    SQRADDAC(a[3], a[15]);
2577
28.8k
    SQRADDAC(a[4], a[14]);
2578
28.8k
    SQRADDAC(a[5], a[13]);
2579
28.8k
    SQRADDAC(a[6], a[12]);
2580
28.8k
    SQRADDAC(a[7], a[11]);
2581
28.8k
    SQRADDAC(a[8], a[10]);
2582
28.8k
    SQRADDDB;
2583
28.8k
    SQRADD(a[9], a[9]);
2584
28.8k
    COMBA_STORE(b[18]);
2585
2586
    /* output 19 */
2587
28.8k
    CARRY_FORWARD;
2588
28.8k
    SQRADDSC(a[0], a[19]);
2589
28.8k
    SQRADDAC(a[1], a[18]);
2590
28.8k
    SQRADDAC(a[2], a[17]);
2591
28.8k
    SQRADDAC(a[3], a[16]);
2592
28.8k
    SQRADDAC(a[4], a[15]);
2593
28.8k
    SQRADDAC(a[5], a[14]);
2594
28.8k
    SQRADDAC(a[6], a[13]);
2595
28.8k
    SQRADDAC(a[7], a[12]);
2596
28.8k
    SQRADDAC(a[8], a[11]);
2597
28.8k
    SQRADDAC(a[9], a[10]);
2598
28.8k
    SQRADDDB;
2599
28.8k
    COMBA_STORE(b[19]);
2600
2601
    /* output 20 */
2602
28.8k
    CARRY_FORWARD;
2603
28.8k
    SQRADDSC(a[0], a[20]);
2604
28.8k
    SQRADDAC(a[1], a[19]);
2605
28.8k
    SQRADDAC(a[2], a[18]);
2606
28.8k
    SQRADDAC(a[3], a[17]);
2607
28.8k
    SQRADDAC(a[4], a[16]);
2608
28.8k
    SQRADDAC(a[5], a[15]);
2609
28.8k
    SQRADDAC(a[6], a[14]);
2610
28.8k
    SQRADDAC(a[7], a[13]);
2611
28.8k
    SQRADDAC(a[8], a[12]);
2612
28.8k
    SQRADDAC(a[9], a[11]);
2613
28.8k
    SQRADDDB;
2614
28.8k
    SQRADD(a[10], a[10]);
2615
28.8k
    COMBA_STORE(b[20]);
2616
2617
    /* output 21 */
2618
28.8k
    CARRY_FORWARD;
2619
28.8k
    SQRADDSC(a[0], a[21]);
2620
28.8k
    SQRADDAC(a[1], a[20]);
2621
28.8k
    SQRADDAC(a[2], a[19]);
2622
28.8k
    SQRADDAC(a[3], a[18]);
2623
28.8k
    SQRADDAC(a[4], a[17]);
2624
28.8k
    SQRADDAC(a[5], a[16]);
2625
28.8k
    SQRADDAC(a[6], a[15]);
2626
28.8k
    SQRADDAC(a[7], a[14]);
2627
28.8k
    SQRADDAC(a[8], a[13]);
2628
28.8k
    SQRADDAC(a[9], a[12]);
2629
28.8k
    SQRADDAC(a[10], a[11]);
2630
28.8k
    SQRADDDB;
2631
28.8k
    COMBA_STORE(b[21]);
2632
2633
    /* output 22 */
2634
28.8k
    CARRY_FORWARD;
2635
28.8k
    SQRADDSC(a[0], a[22]);
2636
28.8k
    SQRADDAC(a[1], a[21]);
2637
28.8k
    SQRADDAC(a[2], a[20]);
2638
28.8k
    SQRADDAC(a[3], a[19]);
2639
28.8k
    SQRADDAC(a[4], a[18]);
2640
28.8k
    SQRADDAC(a[5], a[17]);
2641
28.8k
    SQRADDAC(a[6], a[16]);
2642
28.8k
    SQRADDAC(a[7], a[15]);
2643
28.8k
    SQRADDAC(a[8], a[14]);
2644
28.8k
    SQRADDAC(a[9], a[13]);
2645
28.8k
    SQRADDAC(a[10], a[12]);
2646
28.8k
    SQRADDDB;
2647
28.8k
    SQRADD(a[11], a[11]);
2648
28.8k
    COMBA_STORE(b[22]);
2649
2650
    /* output 23 */
2651
28.8k
    CARRY_FORWARD;
2652
28.8k
    SQRADDSC(a[0], a[23]);
2653
28.8k
    SQRADDAC(a[1], a[22]);
2654
28.8k
    SQRADDAC(a[2], a[21]);
2655
28.8k
    SQRADDAC(a[3], a[20]);
2656
28.8k
    SQRADDAC(a[4], a[19]);
2657
28.8k
    SQRADDAC(a[5], a[18]);
2658
28.8k
    SQRADDAC(a[6], a[17]);
2659
28.8k
    SQRADDAC(a[7], a[16]);
2660
28.8k
    SQRADDAC(a[8], a[15]);
2661
28.8k
    SQRADDAC(a[9], a[14]);
2662
28.8k
    SQRADDAC(a[10], a[13]);
2663
28.8k
    SQRADDAC(a[11], a[12]);
2664
28.8k
    SQRADDDB;
2665
28.8k
    COMBA_STORE(b[23]);
2666
2667
    /* output 24 */
2668
28.8k
    CARRY_FORWARD;
2669
28.8k
    SQRADDSC(a[0], a[24]);
2670
28.8k
    SQRADDAC(a[1], a[23]);
2671
28.8k
    SQRADDAC(a[2], a[22]);
2672
28.8k
    SQRADDAC(a[3], a[21]);
2673
28.8k
    SQRADDAC(a[4], a[20]);
2674
28.8k
    SQRADDAC(a[5], a[19]);
2675
28.8k
    SQRADDAC(a[6], a[18]);
2676
28.8k
    SQRADDAC(a[7], a[17]);
2677
28.8k
    SQRADDAC(a[8], a[16]);
2678
28.8k
    SQRADDAC(a[9], a[15]);
2679
28.8k
    SQRADDAC(a[10], a[14]);
2680
28.8k
    SQRADDAC(a[11], a[13]);
2681
28.8k
    SQRADDDB;
2682
28.8k
    SQRADD(a[12], a[12]);
2683
28.8k
    COMBA_STORE(b[24]);
2684
2685
    /* output 25 */
2686
28.8k
    CARRY_FORWARD;
2687
28.8k
    SQRADDSC(a[0], a[25]);
2688
28.8k
    SQRADDAC(a[1], a[24]);
2689
28.8k
    SQRADDAC(a[2], a[23]);
2690
28.8k
    SQRADDAC(a[3], a[22]);
2691
28.8k
    SQRADDAC(a[4], a[21]);
2692
28.8k
    SQRADDAC(a[5], a[20]);
2693
28.8k
    SQRADDAC(a[6], a[19]);
2694
28.8k
    SQRADDAC(a[7], a[18]);
2695
28.8k
    SQRADDAC(a[8], a[17]);
2696
28.8k
    SQRADDAC(a[9], a[16]);
2697
28.8k
    SQRADDAC(a[10], a[15]);
2698
28.8k
    SQRADDAC(a[11], a[14]);
2699
28.8k
    SQRADDAC(a[12], a[13]);
2700
28.8k
    SQRADDDB;
2701
28.8k
    COMBA_STORE(b[25]);
2702
2703
    /* output 26 */
2704
28.8k
    CARRY_FORWARD;
2705
28.8k
    SQRADDSC(a[0], a[26]);
2706
28.8k
    SQRADDAC(a[1], a[25]);
2707
28.8k
    SQRADDAC(a[2], a[24]);
2708
28.8k
    SQRADDAC(a[3], a[23]);
2709
28.8k
    SQRADDAC(a[4], a[22]);
2710
28.8k
    SQRADDAC(a[5], a[21]);
2711
28.8k
    SQRADDAC(a[6], a[20]);
2712
28.8k
    SQRADDAC(a[7], a[19]);
2713
28.8k
    SQRADDAC(a[8], a[18]);
2714
28.8k
    SQRADDAC(a[9], a[17]);
2715
28.8k
    SQRADDAC(a[10], a[16]);
2716
28.8k
    SQRADDAC(a[11], a[15]);
2717
28.8k
    SQRADDAC(a[12], a[14]);
2718
28.8k
    SQRADDDB;
2719
28.8k
    SQRADD(a[13], a[13]);
2720
28.8k
    COMBA_STORE(b[26]);
2721
2722
    /* output 27 */
2723
28.8k
    CARRY_FORWARD;
2724
28.8k
    SQRADDSC(a[0], a[27]);
2725
28.8k
    SQRADDAC(a[1], a[26]);
2726
28.8k
    SQRADDAC(a[2], a[25]);
2727
28.8k
    SQRADDAC(a[3], a[24]);
2728
28.8k
    SQRADDAC(a[4], a[23]);
2729
28.8k
    SQRADDAC(a[5], a[22]);
2730
28.8k
    SQRADDAC(a[6], a[21]);
2731
28.8k
    SQRADDAC(a[7], a[20]);
2732
28.8k
    SQRADDAC(a[8], a[19]);
2733
28.8k
    SQRADDAC(a[9], a[18]);
2734
28.8k
    SQRADDAC(a[10], a[17]);
2735
28.8k
    SQRADDAC(a[11], a[16]);
2736
28.8k
    SQRADDAC(a[12], a[15]);
2737
28.8k
    SQRADDAC(a[13], a[14]);
2738
28.8k
    SQRADDDB;
2739
28.8k
    COMBA_STORE(b[27]);
2740
2741
    /* output 28 */
2742
28.8k
    CARRY_FORWARD;
2743
28.8k
    SQRADDSC(a[0], a[28]);
2744
28.8k
    SQRADDAC(a[1], a[27]);
2745
28.8k
    SQRADDAC(a[2], a[26]);
2746
28.8k
    SQRADDAC(a[3], a[25]);
2747
28.8k
    SQRADDAC(a[4], a[24]);
2748
28.8k
    SQRADDAC(a[5], a[23]);
2749
28.8k
    SQRADDAC(a[6], a[22]);
2750
28.8k
    SQRADDAC(a[7], a[21]);
2751
28.8k
    SQRADDAC(a[8], a[20]);
2752
28.8k
    SQRADDAC(a[9], a[19]);
2753
28.8k
    SQRADDAC(a[10], a[18]);
2754
28.8k
    SQRADDAC(a[11], a[17]);
2755
28.8k
    SQRADDAC(a[12], a[16]);
2756
28.8k
    SQRADDAC(a[13], a[15]);
2757
28.8k
    SQRADDDB;
2758
28.8k
    SQRADD(a[14], a[14]);
2759
28.8k
    COMBA_STORE(b[28]);
2760
2761
    /* output 29 */
2762
28.8k
    CARRY_FORWARD;
2763
28.8k
    SQRADDSC(a[0], a[29]);
2764
28.8k
    SQRADDAC(a[1], a[28]);
2765
28.8k
    SQRADDAC(a[2], a[27]);
2766
28.8k
    SQRADDAC(a[3], a[26]);
2767
28.8k
    SQRADDAC(a[4], a[25]);
2768
28.8k
    SQRADDAC(a[5], a[24]);
2769
28.8k
    SQRADDAC(a[6], a[23]);
2770
28.8k
    SQRADDAC(a[7], a[22]);
2771
28.8k
    SQRADDAC(a[8], a[21]);
2772
28.8k
    SQRADDAC(a[9], a[20]);
2773
28.8k
    SQRADDAC(a[10], a[19]);
2774
28.8k
    SQRADDAC(a[11], a[18]);
2775
28.8k
    SQRADDAC(a[12], a[17]);
2776
28.8k
    SQRADDAC(a[13], a[16]);
2777
28.8k
    SQRADDAC(a[14], a[15]);
2778
28.8k
    SQRADDDB;
2779
28.8k
    COMBA_STORE(b[29]);
2780
2781
    /* output 30 */
2782
28.8k
    CARRY_FORWARD;
2783
28.8k
    SQRADDSC(a[0], a[30]);
2784
28.8k
    SQRADDAC(a[1], a[29]);
2785
28.8k
    SQRADDAC(a[2], a[28]);
2786
28.8k
    SQRADDAC(a[3], a[27]);
2787
28.8k
    SQRADDAC(a[4], a[26]);
2788
28.8k
    SQRADDAC(a[5], a[25]);
2789
28.8k
    SQRADDAC(a[6], a[24]);
2790
28.8k
    SQRADDAC(a[7], a[23]);
2791
28.8k
    SQRADDAC(a[8], a[22]);
2792
28.8k
    SQRADDAC(a[9], a[21]);
2793
28.8k
    SQRADDAC(a[10], a[20]);
2794
28.8k
    SQRADDAC(a[11], a[19]);
2795
28.8k
    SQRADDAC(a[12], a[18]);
2796
28.8k
    SQRADDAC(a[13], a[17]);
2797
28.8k
    SQRADDAC(a[14], a[16]);
2798
28.8k
    SQRADDDB;
2799
28.8k
    SQRADD(a[15], a[15]);
2800
28.8k
    COMBA_STORE(b[30]);
2801
2802
    /* output 31 */
2803
28.8k
    CARRY_FORWARD;
2804
28.8k
    SQRADDSC(a[0], a[31]);
2805
28.8k
    SQRADDAC(a[1], a[30]);
2806
28.8k
    SQRADDAC(a[2], a[29]);
2807
28.8k
    SQRADDAC(a[3], a[28]);
2808
28.8k
    SQRADDAC(a[4], a[27]);
2809
28.8k
    SQRADDAC(a[5], a[26]);
2810
28.8k
    SQRADDAC(a[6], a[25]);
2811
28.8k
    SQRADDAC(a[7], a[24]);
2812
28.8k
    SQRADDAC(a[8], a[23]);
2813
28.8k
    SQRADDAC(a[9], a[22]);
2814
28.8k
    SQRADDAC(a[10], a[21]);
2815
28.8k
    SQRADDAC(a[11], a[20]);
2816
28.8k
    SQRADDAC(a[12], a[19]);
2817
28.8k
    SQRADDAC(a[13], a[18]);
2818
28.8k
    SQRADDAC(a[14], a[17]);
2819
28.8k
    SQRADDAC(a[15], a[16]);
2820
28.8k
    SQRADDDB;
2821
28.8k
    COMBA_STORE(b[31]);
2822
2823
    /* output 32 */
2824
28.8k
    CARRY_FORWARD;
2825
28.8k
    SQRADDSC(a[1], a[31]);
2826
28.8k
    SQRADDAC(a[2], a[30]);
2827
28.8k
    SQRADDAC(a[3], a[29]);
2828
28.8k
    SQRADDAC(a[4], a[28]);
2829
28.8k
    SQRADDAC(a[5], a[27]);
2830
28.8k
    SQRADDAC(a[6], a[26]);
2831
28.8k
    SQRADDAC(a[7], a[25]);
2832
28.8k
    SQRADDAC(a[8], a[24]);
2833
28.8k
    SQRADDAC(a[9], a[23]);
2834
28.8k
    SQRADDAC(a[10], a[22]);
2835
28.8k
    SQRADDAC(a[11], a[21]);
2836
28.8k
    SQRADDAC(a[12], a[20]);
2837
28.8k
    SQRADDAC(a[13], a[19]);
2838
28.8k
    SQRADDAC(a[14], a[18]);
2839
28.8k
    SQRADDAC(a[15], a[17]);
2840
28.8k
    SQRADDDB;
2841
28.8k
    SQRADD(a[16], a[16]);
2842
28.8k
    COMBA_STORE(b[32]);
2843
2844
    /* output 33 */
2845
28.8k
    CARRY_FORWARD;
2846
28.8k
    SQRADDSC(a[2], a[31]);
2847
28.8k
    SQRADDAC(a[3], a[30]);
2848
28.8k
    SQRADDAC(a[4], a[29]);
2849
28.8k
    SQRADDAC(a[5], a[28]);
2850
28.8k
    SQRADDAC(a[6], a[27]);
2851
28.8k
    SQRADDAC(a[7], a[26]);
2852
28.8k
    SQRADDAC(a[8], a[25]);
2853
28.8k
    SQRADDAC(a[9], a[24]);
2854
28.8k
    SQRADDAC(a[10], a[23]);
2855
28.8k
    SQRADDAC(a[11], a[22]);
2856
28.8k
    SQRADDAC(a[12], a[21]);
2857
28.8k
    SQRADDAC(a[13], a[20]);
2858
28.8k
    SQRADDAC(a[14], a[19]);
2859
28.8k
    SQRADDAC(a[15], a[18]);
2860
28.8k
    SQRADDAC(a[16], a[17]);
2861
28.8k
    SQRADDDB;
2862
28.8k
    COMBA_STORE(b[33]);
2863
2864
    /* output 34 */
2865
28.8k
    CARRY_FORWARD;
2866
28.8k
    SQRADDSC(a[3], a[31]);
2867
28.8k
    SQRADDAC(a[4], a[30]);
2868
28.8k
    SQRADDAC(a[5], a[29]);
2869
28.8k
    SQRADDAC(a[6], a[28]);
2870
28.8k
    SQRADDAC(a[7], a[27]);
2871
28.8k
    SQRADDAC(a[8], a[26]);
2872
28.8k
    SQRADDAC(a[9], a[25]);
2873
28.8k
    SQRADDAC(a[10], a[24]);
2874
28.8k
    SQRADDAC(a[11], a[23]);
2875
28.8k
    SQRADDAC(a[12], a[22]);
2876
28.8k
    SQRADDAC(a[13], a[21]);
2877
28.8k
    SQRADDAC(a[14], a[20]);
2878
28.8k
    SQRADDAC(a[15], a[19]);
2879
28.8k
    SQRADDAC(a[16], a[18]);
2880
28.8k
    SQRADDDB;
2881
28.8k
    SQRADD(a[17], a[17]);
2882
28.8k
    COMBA_STORE(b[34]);
2883
2884
    /* output 35 */
2885
28.8k
    CARRY_FORWARD;
2886
28.8k
    SQRADDSC(a[4], a[31]);
2887
28.8k
    SQRADDAC(a[5], a[30]);
2888
28.8k
    SQRADDAC(a[6], a[29]);
2889
28.8k
    SQRADDAC(a[7], a[28]);
2890
28.8k
    SQRADDAC(a[8], a[27]);
2891
28.8k
    SQRADDAC(a[9], a[26]);
2892
28.8k
    SQRADDAC(a[10], a[25]);
2893
28.8k
    SQRADDAC(a[11], a[24]);
2894
28.8k
    SQRADDAC(a[12], a[23]);
2895
28.8k
    SQRADDAC(a[13], a[22]);
2896
28.8k
    SQRADDAC(a[14], a[21]);
2897
28.8k
    SQRADDAC(a[15], a[20]);
2898
28.8k
    SQRADDAC(a[16], a[19]);
2899
28.8k
    SQRADDAC(a[17], a[18]);
2900
28.8k
    SQRADDDB;
2901
28.8k
    COMBA_STORE(b[35]);
2902
2903
    /* output 36 */
2904
28.8k
    CARRY_FORWARD;
2905
28.8k
    SQRADDSC(a[5], a[31]);
2906
28.8k
    SQRADDAC(a[6], a[30]);
2907
28.8k
    SQRADDAC(a[7], a[29]);
2908
28.8k
    SQRADDAC(a[8], a[28]);
2909
28.8k
    SQRADDAC(a[9], a[27]);
2910
28.8k
    SQRADDAC(a[10], a[26]);
2911
28.8k
    SQRADDAC(a[11], a[25]);
2912
28.8k
    SQRADDAC(a[12], a[24]);
2913
28.8k
    SQRADDAC(a[13], a[23]);
2914
28.8k
    SQRADDAC(a[14], a[22]);
2915
28.8k
    SQRADDAC(a[15], a[21]);
2916
28.8k
    SQRADDAC(a[16], a[20]);
2917
28.8k
    SQRADDAC(a[17], a[19]);
2918
28.8k
    SQRADDDB;
2919
28.8k
    SQRADD(a[18], a[18]);
2920
28.8k
    COMBA_STORE(b[36]);
2921
2922
    /* output 37 */
2923
28.8k
    CARRY_FORWARD;
2924
28.8k
    SQRADDSC(a[6], a[31]);
2925
28.8k
    SQRADDAC(a[7], a[30]);
2926
28.8k
    SQRADDAC(a[8], a[29]);
2927
28.8k
    SQRADDAC(a[9], a[28]);
2928
28.8k
    SQRADDAC(a[10], a[27]);
2929
28.8k
    SQRADDAC(a[11], a[26]);
2930
28.8k
    SQRADDAC(a[12], a[25]);
2931
28.8k
    SQRADDAC(a[13], a[24]);
2932
28.8k
    SQRADDAC(a[14], a[23]);
2933
28.8k
    SQRADDAC(a[15], a[22]);
2934
28.8k
    SQRADDAC(a[16], a[21]);
2935
28.8k
    SQRADDAC(a[17], a[20]);
2936
28.8k
    SQRADDAC(a[18], a[19]);
2937
28.8k
    SQRADDDB;
2938
28.8k
    COMBA_STORE(b[37]);
2939
2940
    /* output 38 */
2941
28.8k
    CARRY_FORWARD;
2942
28.8k
    SQRADDSC(a[7], a[31]);
2943
28.8k
    SQRADDAC(a[8], a[30]);
2944
28.8k
    SQRADDAC(a[9], a[29]);
2945
28.8k
    SQRADDAC(a[10], a[28]);
2946
28.8k
    SQRADDAC(a[11], a[27]);
2947
28.8k
    SQRADDAC(a[12], a[26]);
2948
28.8k
    SQRADDAC(a[13], a[25]);
2949
28.8k
    SQRADDAC(a[14], a[24]);
2950
28.8k
    SQRADDAC(a[15], a[23]);
2951
28.8k
    SQRADDAC(a[16], a[22]);
2952
28.8k
    SQRADDAC(a[17], a[21]);
2953
28.8k
    SQRADDAC(a[18], a[20]);
2954
28.8k
    SQRADDDB;
2955
28.8k
    SQRADD(a[19], a[19]);
2956
28.8k
    COMBA_STORE(b[38]);
2957
2958
    /* output 39 */
2959
28.8k
    CARRY_FORWARD;
2960
28.8k
    SQRADDSC(a[8], a[31]);
2961
28.8k
    SQRADDAC(a[9], a[30]);
2962
28.8k
    SQRADDAC(a[10], a[29]);
2963
28.8k
    SQRADDAC(a[11], a[28]);
2964
28.8k
    SQRADDAC(a[12], a[27]);
2965
28.8k
    SQRADDAC(a[13], a[26]);
2966
28.8k
    SQRADDAC(a[14], a[25]);
2967
28.8k
    SQRADDAC(a[15], a[24]);
2968
28.8k
    SQRADDAC(a[16], a[23]);
2969
28.8k
    SQRADDAC(a[17], a[22]);
2970
28.8k
    SQRADDAC(a[18], a[21]);
2971
28.8k
    SQRADDAC(a[19], a[20]);
2972
28.8k
    SQRADDDB;
2973
28.8k
    COMBA_STORE(b[39]);
2974
2975
    /* output 40 */
2976
28.8k
    CARRY_FORWARD;
2977
28.8k
    SQRADDSC(a[9], a[31]);
2978
28.8k
    SQRADDAC(a[10], a[30]);
2979
28.8k
    SQRADDAC(a[11], a[29]);
2980
28.8k
    SQRADDAC(a[12], a[28]);
2981
28.8k
    SQRADDAC(a[13], a[27]);
2982
28.8k
    SQRADDAC(a[14], a[26]);
2983
28.8k
    SQRADDAC(a[15], a[25]);
2984
28.8k
    SQRADDAC(a[16], a[24]);
2985
28.8k
    SQRADDAC(a[17], a[23]);
2986
28.8k
    SQRADDAC(a[18], a[22]);
2987
28.8k
    SQRADDAC(a[19], a[21]);
2988
28.8k
    SQRADDDB;
2989
28.8k
    SQRADD(a[20], a[20]);
2990
28.8k
    COMBA_STORE(b[40]);
2991
2992
    /* output 41 */
2993
28.8k
    CARRY_FORWARD;
2994
28.8k
    SQRADDSC(a[10], a[31]);
2995
28.8k
    SQRADDAC(a[11], a[30]);
2996
28.8k
    SQRADDAC(a[12], a[29]);
2997
28.8k
    SQRADDAC(a[13], a[28]);
2998
28.8k
    SQRADDAC(a[14], a[27]);
2999
28.8k
    SQRADDAC(a[15], a[26]);
3000
28.8k
    SQRADDAC(a[16], a[25]);
3001
28.8k
    SQRADDAC(a[17], a[24]);
3002
28.8k
    SQRADDAC(a[18], a[23]);
3003
28.8k
    SQRADDAC(a[19], a[22]);
3004
28.8k
    SQRADDAC(a[20], a[21]);
3005
28.8k
    SQRADDDB;
3006
28.8k
    COMBA_STORE(b[41]);
3007
3008
    /* output 42 */
3009
28.8k
    CARRY_FORWARD;
3010
28.8k
    SQRADDSC(a[11], a[31]);
3011
28.8k
    SQRADDAC(a[12], a[30]);
3012
28.8k
    SQRADDAC(a[13], a[29]);
3013
28.8k
    SQRADDAC(a[14], a[28]);
3014
28.8k
    SQRADDAC(a[15], a[27]);
3015
28.8k
    SQRADDAC(a[16], a[26]);
3016
28.8k
    SQRADDAC(a[17], a[25]);
3017
28.8k
    SQRADDAC(a[18], a[24]);
3018
28.8k
    SQRADDAC(a[19], a[23]);
3019
28.8k
    SQRADDAC(a[20], a[22]);
3020
28.8k
    SQRADDDB;
3021
28.8k
    SQRADD(a[21], a[21]);
3022
28.8k
    COMBA_STORE(b[42]);
3023
3024
    /* output 43 */
3025
28.8k
    CARRY_FORWARD;
3026
28.8k
    SQRADDSC(a[12], a[31]);
3027
28.8k
    SQRADDAC(a[13], a[30]);
3028
28.8k
    SQRADDAC(a[14], a[29]);
3029
28.8k
    SQRADDAC(a[15], a[28]);
3030
28.8k
    SQRADDAC(a[16], a[27]);
3031
28.8k
    SQRADDAC(a[17], a[26]);
3032
28.8k
    SQRADDAC(a[18], a[25]);
3033
28.8k
    SQRADDAC(a[19], a[24]);
3034
28.8k
    SQRADDAC(a[20], a[23]);
3035
28.8k
    SQRADDAC(a[21], a[22]);
3036
28.8k
    SQRADDDB;
3037
28.8k
    COMBA_STORE(b[43]);
3038
3039
    /* output 44 */
3040
28.8k
    CARRY_FORWARD;
3041
28.8k
    SQRADDSC(a[13], a[31]);
3042
28.8k
    SQRADDAC(a[14], a[30]);
3043
28.8k
    SQRADDAC(a[15], a[29]);
3044
28.8k
    SQRADDAC(a[16], a[28]);
3045
28.8k
    SQRADDAC(a[17], a[27]);
3046
28.8k
    SQRADDAC(a[18], a[26]);
3047
28.8k
    SQRADDAC(a[19], a[25]);
3048
28.8k
    SQRADDAC(a[20], a[24]);
3049
28.8k
    SQRADDAC(a[21], a[23]);
3050
28.8k
    SQRADDDB;
3051
28.8k
    SQRADD(a[22], a[22]);
3052
28.8k
    COMBA_STORE(b[44]);
3053
3054
    /* output 45 */
3055
28.8k
    CARRY_FORWARD;
3056
28.8k
    SQRADDSC(a[14], a[31]);
3057
28.8k
    SQRADDAC(a[15], a[30]);
3058
28.8k
    SQRADDAC(a[16], a[29]);
3059
28.8k
    SQRADDAC(a[17], a[28]);
3060
28.8k
    SQRADDAC(a[18], a[27]);
3061
28.8k
    SQRADDAC(a[19], a[26]);
3062
28.8k
    SQRADDAC(a[20], a[25]);
3063
28.8k
    SQRADDAC(a[21], a[24]);
3064
28.8k
    SQRADDAC(a[22], a[23]);
3065
28.8k
    SQRADDDB;
3066
28.8k
    COMBA_STORE(b[45]);
3067
3068
    /* output 46 */
3069
28.8k
    CARRY_FORWARD;
3070
28.8k
    SQRADDSC(a[15], a[31]);
3071
28.8k
    SQRADDAC(a[16], a[30]);
3072
28.8k
    SQRADDAC(a[17], a[29]);
3073
28.8k
    SQRADDAC(a[18], a[28]);
3074
28.8k
    SQRADDAC(a[19], a[27]);
3075
28.8k
    SQRADDAC(a[20], a[26]);
3076
28.8k
    SQRADDAC(a[21], a[25]);
3077
28.8k
    SQRADDAC(a[22], a[24]);
3078
28.8k
    SQRADDDB;
3079
28.8k
    SQRADD(a[23], a[23]);
3080
28.8k
    COMBA_STORE(b[46]);
3081
3082
    /* output 47 */
3083
28.8k
    CARRY_FORWARD;
3084
28.8k
    SQRADDSC(a[16], a[31]);
3085
28.8k
    SQRADDAC(a[17], a[30]);
3086
28.8k
    SQRADDAC(a[18], a[29]);
3087
28.8k
    SQRADDAC(a[19], a[28]);
3088
28.8k
    SQRADDAC(a[20], a[27]);
3089
28.8k
    SQRADDAC(a[21], a[26]);
3090
28.8k
    SQRADDAC(a[22], a[25]);
3091
28.8k
    SQRADDAC(a[23], a[24]);
3092
28.8k
    SQRADDDB;
3093
28.8k
    COMBA_STORE(b[47]);
3094
3095
    /* output 48 */
3096
28.8k
    CARRY_FORWARD;
3097
28.8k
    SQRADDSC(a[17], a[31]);
3098
28.8k
    SQRADDAC(a[18], a[30]);
3099
28.8k
    SQRADDAC(a[19], a[29]);
3100
28.8k
    SQRADDAC(a[20], a[28]);
3101
28.8k
    SQRADDAC(a[21], a[27]);
3102
28.8k
    SQRADDAC(a[22], a[26]);
3103
28.8k
    SQRADDAC(a[23], a[25]);
3104
28.8k
    SQRADDDB;
3105
28.8k
    SQRADD(a[24], a[24]);
3106
28.8k
    COMBA_STORE(b[48]);
3107
3108
    /* output 49 */
3109
28.8k
    CARRY_FORWARD;
3110
28.8k
    SQRADDSC(a[18], a[31]);
3111
28.8k
    SQRADDAC(a[19], a[30]);
3112
28.8k
    SQRADDAC(a[20], a[29]);
3113
28.8k
    SQRADDAC(a[21], a[28]);
3114
28.8k
    SQRADDAC(a[22], a[27]);
3115
28.8k
    SQRADDAC(a[23], a[26]);
3116
28.8k
    SQRADDAC(a[24], a[25]);
3117
28.8k
    SQRADDDB;
3118
28.8k
    COMBA_STORE(b[49]);
3119
3120
    /* output 50 */
3121
28.8k
    CARRY_FORWARD;
3122
28.8k
    SQRADDSC(a[19], a[31]);
3123
28.8k
    SQRADDAC(a[20], a[30]);
3124
28.8k
    SQRADDAC(a[21], a[29]);
3125
28.8k
    SQRADDAC(a[22], a[28]);
3126
28.8k
    SQRADDAC(a[23], a[27]);
3127
28.8k
    SQRADDAC(a[24], a[26]);
3128
28.8k
    SQRADDDB;
3129
28.8k
    SQRADD(a[25], a[25]);
3130
28.8k
    COMBA_STORE(b[50]);
3131
3132
    /* output 51 */
3133
28.8k
    CARRY_FORWARD;
3134
28.8k
    SQRADDSC(a[20], a[31]);
3135
28.8k
    SQRADDAC(a[21], a[30]);
3136
28.8k
    SQRADDAC(a[22], a[29]);
3137
28.8k
    SQRADDAC(a[23], a[28]);
3138
28.8k
    SQRADDAC(a[24], a[27]);
3139
28.8k
    SQRADDAC(a[25], a[26]);
3140
28.8k
    SQRADDDB;
3141
28.8k
    COMBA_STORE(b[51]);
3142
3143
    /* output 52 */
3144
28.8k
    CARRY_FORWARD;
3145
28.8k
    SQRADDSC(a[21], a[31]);
3146
28.8k
    SQRADDAC(a[22], a[30]);
3147
28.8k
    SQRADDAC(a[23], a[29]);
3148
28.8k
    SQRADDAC(a[24], a[28]);
3149
28.8k
    SQRADDAC(a[25], a[27]);
3150
28.8k
    SQRADDDB;
3151
28.8k
    SQRADD(a[26], a[26]);
3152
28.8k
    COMBA_STORE(b[52]);
3153
3154
    /* output 53 */
3155
28.8k
    CARRY_FORWARD;
3156
28.8k
    SQRADDSC(a[22], a[31]);
3157
28.8k
    SQRADDAC(a[23], a[30]);
3158
28.8k
    SQRADDAC(a[24], a[29]);
3159
28.8k
    SQRADDAC(a[25], a[28]);
3160
28.8k
    SQRADDAC(a[26], a[27]);
3161
28.8k
    SQRADDDB;
3162
28.8k
    COMBA_STORE(b[53]);
3163
3164
    /* output 54 */
3165
28.8k
    CARRY_FORWARD;
3166
28.8k
    SQRADDSC(a[23], a[31]);
3167
28.8k
    SQRADDAC(a[24], a[30]);
3168
28.8k
    SQRADDAC(a[25], a[29]);
3169
28.8k
    SQRADDAC(a[26], a[28]);
3170
28.8k
    SQRADDDB;
3171
28.8k
    SQRADD(a[27], a[27]);
3172
28.8k
    COMBA_STORE(b[54]);
3173
3174
    /* output 55 */
3175
28.8k
    CARRY_FORWARD;
3176
28.8k
    SQRADDSC(a[24], a[31]);
3177
28.8k
    SQRADDAC(a[25], a[30]);
3178
28.8k
    SQRADDAC(a[26], a[29]);
3179
28.8k
    SQRADDAC(a[27], a[28]);
3180
28.8k
    SQRADDDB;
3181
28.8k
    COMBA_STORE(b[55]);
3182
3183
    /* output 56 */
3184
28.8k
    CARRY_FORWARD;
3185
28.8k
    SQRADDSC(a[25], a[31]);
3186
28.8k
    SQRADDAC(a[26], a[30]);
3187
28.8k
    SQRADDAC(a[27], a[29]);
3188
28.8k
    SQRADDDB;
3189
28.8k
    SQRADD(a[28], a[28]);
3190
28.8k
    COMBA_STORE(b[56]);
3191
3192
    /* output 57 */
3193
28.8k
    CARRY_FORWARD;
3194
28.8k
    SQRADDSC(a[26], a[31]);
3195
28.8k
    SQRADDAC(a[27], a[30]);
3196
28.8k
    SQRADDAC(a[28], a[29]);
3197
28.8k
    SQRADDDB;
3198
28.8k
    COMBA_STORE(b[57]);
3199
3200
    /* output 58 */
3201
28.8k
    CARRY_FORWARD;
3202
28.8k
    SQRADD2(a[27], a[31]);
3203
28.8k
    SQRADD2(a[28], a[30]);
3204
28.8k
    SQRADD(a[29], a[29]);
3205
28.8k
    COMBA_STORE(b[58]);
3206
3207
    /* output 59 */
3208
28.8k
    CARRY_FORWARD;
3209
28.8k
    SQRADD2(a[28], a[31]);
3210
28.8k
    SQRADD2(a[29], a[30]);
3211
28.8k
    COMBA_STORE(b[59]);
3212
3213
    /* output 60 */
3214
28.8k
    CARRY_FORWARD;
3215
28.8k
    SQRADD2(a[29], a[31]);
3216
28.8k
    SQRADD(a[30], a[30]);
3217
28.8k
    COMBA_STORE(b[60]);
3218
3219
    /* output 61 */
3220
28.8k
    CARRY_FORWARD;
3221
28.8k
    SQRADD2(a[30], a[31]);
3222
28.8k
    COMBA_STORE(b[61]);
3223
3224
    /* output 62 */
3225
28.8k
    CARRY_FORWARD;
3226
28.8k
    SQRADD(a[31], a[31]);
3227
28.8k
    COMBA_STORE(b[62]);
3228
28.8k
    COMBA_STORE2(b[63]);
3229
28.8k
    COMBA_FINI;
3230
3231
28.8k
    B->used = 64;
3232
28.8k
    B->sign = ZPOS;
3233
28.8k
    memcpy(B->dp, b, 64 * sizeof(mp_digit));
3234
28.8k
    mp_clamp(B);
3235
28.8k
}