comparison tomsfastmath/src/sqr/fp_sqr_comba_small_set.c @ 643:a362b62d38b2 dropbear-tfm

Add tomsfastmath from git rev bfa4582842bc3bab42e4be4aed5703437049502a with Makefile.in renamed
author Matt Johnston <matt@ucc.asn.au>
date Wed, 23 Nov 2011 18:10:20 +0700
parents
children
comparison
equal deleted inserted replaced
642:33fd2f3499d2 643:a362b62d38b2
1 #define TFM_DEFINES
2 #include "fp_sqr_comba.c"
3
4 #if defined(TFM_SMALL_SET)
5 void fp_sqr_comba_small(fp_int *A, fp_int *B)
6 {
7 fp_digit *a, b[32], c0, c1, c2, sc0, sc1, sc2;
8 #ifdef TFM_ISO
9 fp_word tt;
10 #endif
11 switch (A->used) {
12 case 1:
13 a = A->dp;
14 COMBA_START;
15
16 /* clear carries */
17 CLEAR_CARRY;
18
19 /* output 0 */
20 SQRADD(a[0],a[0]);
21 COMBA_STORE(b[0]);
22 COMBA_STORE2(b[1]);
23 COMBA_FINI;
24
25 B->used = 2;
26 B->sign = FP_ZPOS;
27 memcpy(B->dp, b, 2 * sizeof(fp_digit));
28 memset(B->dp + 2, 0, (FP_SIZE - 2) * sizeof(fp_digit));
29 fp_clamp(B);
30 break;
31
32 case 2:
33 a = A->dp;
34 COMBA_START;
35
36 /* clear carries */
37 CLEAR_CARRY;
38
39 /* output 0 */
40 SQRADD(a[0],a[0]);
41 COMBA_STORE(b[0]);
42
43 /* output 1 */
44 CARRY_FORWARD;
45 SQRADD2(a[0], a[1]);
46 COMBA_STORE(b[1]);
47
48 /* output 2 */
49 CARRY_FORWARD;
50 SQRADD(a[1], a[1]);
51 COMBA_STORE(b[2]);
52 COMBA_STORE2(b[3]);
53 COMBA_FINI;
54
55 B->used = 4;
56 B->sign = FP_ZPOS;
57 memcpy(B->dp, b, 4 * sizeof(fp_digit));
58 memset(B->dp + 4, 0, (FP_SIZE - 4) * sizeof(fp_digit));
59 fp_clamp(B);
60 break;
61
62 case 3:
63 a = A->dp;
64 COMBA_START;
65
66 /* clear carries */
67 CLEAR_CARRY;
68
69 /* output 0 */
70 SQRADD(a[0],a[0]);
71 COMBA_STORE(b[0]);
72
73 /* output 1 */
74 CARRY_FORWARD;
75 SQRADD2(a[0], a[1]);
76 COMBA_STORE(b[1]);
77
78 /* output 2 */
79 CARRY_FORWARD;
80 SQRADD2(a[0], a[2]); SQRADD(a[1], a[1]);
81 COMBA_STORE(b[2]);
82
83 /* output 3 */
84 CARRY_FORWARD;
85 SQRADD2(a[1], a[2]);
86 COMBA_STORE(b[3]);
87
88 /* output 4 */
89 CARRY_FORWARD;
90 SQRADD(a[2], a[2]);
91 COMBA_STORE(b[4]);
92 COMBA_STORE2(b[5]);
93 COMBA_FINI;
94
95 B->used = 6;
96 B->sign = FP_ZPOS;
97 memcpy(B->dp, b, 6 * sizeof(fp_digit));
98 memset(B->dp + 6, 0, (FP_SIZE - 6) * sizeof(fp_digit));
99 fp_clamp(B);
100 break;
101
102 case 4:
103 a = A->dp;
104 COMBA_START;
105
106 /* clear carries */
107 CLEAR_CARRY;
108
109 /* output 0 */
110 SQRADD(a[0],a[0]);
111 COMBA_STORE(b[0]);
112
113 /* output 1 */
114 CARRY_FORWARD;
115 SQRADD2(a[0], a[1]);
116 COMBA_STORE(b[1]);
117
118 /* output 2 */
119 CARRY_FORWARD;
120 SQRADD2(a[0], a[2]); SQRADD(a[1], a[1]);
121 COMBA_STORE(b[2]);
122
123 /* output 3 */
124 CARRY_FORWARD;
125 SQRADD2(a[0], a[3]); SQRADD2(a[1], a[2]);
126 COMBA_STORE(b[3]);
127
128 /* output 4 */
129 CARRY_FORWARD;
130 SQRADD2(a[1], a[3]); SQRADD(a[2], a[2]);
131 COMBA_STORE(b[4]);
132
133 /* output 5 */
134 CARRY_FORWARD;
135 SQRADD2(a[2], a[3]);
136 COMBA_STORE(b[5]);
137
138 /* output 6 */
139 CARRY_FORWARD;
140 SQRADD(a[3], a[3]);
141 COMBA_STORE(b[6]);
142 COMBA_STORE2(b[7]);
143 COMBA_FINI;
144
145 B->used = 8;
146 B->sign = FP_ZPOS;
147 memcpy(B->dp, b, 8 * sizeof(fp_digit));
148 memset(B->dp + 8, 0, (FP_SIZE - 8) * sizeof(fp_digit));
149 fp_clamp(B);
150 break;
151
152 case 5:
153 a = A->dp;
154 COMBA_START;
155
156 /* clear carries */
157 CLEAR_CARRY;
158
159 /* output 0 */
160 SQRADD(a[0],a[0]);
161 COMBA_STORE(b[0]);
162
163 /* output 1 */
164 CARRY_FORWARD;
165 SQRADD2(a[0], a[1]);
166 COMBA_STORE(b[1]);
167
168 /* output 2 */
169 CARRY_FORWARD;
170 SQRADD2(a[0], a[2]); SQRADD(a[1], a[1]);
171 COMBA_STORE(b[2]);
172
173 /* output 3 */
174 CARRY_FORWARD;
175 SQRADD2(a[0], a[3]); SQRADD2(a[1], a[2]);
176 COMBA_STORE(b[3]);
177
178 /* output 4 */
179 CARRY_FORWARD;
180 SQRADD2(a[0], a[4]); SQRADD2(a[1], a[3]); SQRADD(a[2], a[2]);
181 COMBA_STORE(b[4]);
182
183 /* output 5 */
184 CARRY_FORWARD;
185 SQRADD2(a[1], a[4]); SQRADD2(a[2], a[3]);
186 COMBA_STORE(b[5]);
187
188 /* output 6 */
189 CARRY_FORWARD;
190 SQRADD2(a[2], a[4]); SQRADD(a[3], a[3]);
191 COMBA_STORE(b[6]);
192
193 /* output 7 */
194 CARRY_FORWARD;
195 SQRADD2(a[3], a[4]);
196 COMBA_STORE(b[7]);
197
198 /* output 8 */
199 CARRY_FORWARD;
200 SQRADD(a[4], a[4]);
201 COMBA_STORE(b[8]);
202 COMBA_STORE2(b[9]);
203 COMBA_FINI;
204
205 B->used = 10;
206 B->sign = FP_ZPOS;
207 memcpy(B->dp, b, 10 * sizeof(fp_digit));
208 memset(B->dp + 10, 0, (FP_SIZE - 10) * sizeof(fp_digit));
209 fp_clamp(B);
210 break;
211
212 case 6:
213 a = A->dp;
214 COMBA_START;
215
216 /* clear carries */
217 CLEAR_CARRY;
218
219 /* output 0 */
220 SQRADD(a[0],a[0]);
221 COMBA_STORE(b[0]);
222
223 /* output 1 */
224 CARRY_FORWARD;
225 SQRADD2(a[0], a[1]);
226 COMBA_STORE(b[1]);
227
228 /* output 2 */
229 CARRY_FORWARD;
230 SQRADD2(a[0], a[2]); SQRADD(a[1], a[1]);
231 COMBA_STORE(b[2]);
232
233 /* output 3 */
234 CARRY_FORWARD;
235 SQRADD2(a[0], a[3]); SQRADD2(a[1], a[2]);
236 COMBA_STORE(b[3]);
237
238 /* output 4 */
239 CARRY_FORWARD;
240 SQRADD2(a[0], a[4]); SQRADD2(a[1], a[3]); SQRADD(a[2], a[2]);
241 COMBA_STORE(b[4]);
242
243 /* output 5 */
244 CARRY_FORWARD;
245 SQRADDSC(a[0], a[5]); SQRADDAC(a[1], a[4]); SQRADDAC(a[2], a[3]); SQRADDDB;
246 COMBA_STORE(b[5]);
247
248 /* output 6 */
249 CARRY_FORWARD;
250 SQRADD2(a[1], a[5]); SQRADD2(a[2], a[4]); SQRADD(a[3], a[3]);
251 COMBA_STORE(b[6]);
252
253 /* output 7 */
254 CARRY_FORWARD;
255 SQRADD2(a[2], a[5]); SQRADD2(a[3], a[4]);
256 COMBA_STORE(b[7]);
257
258 /* output 8 */
259 CARRY_FORWARD;
260 SQRADD2(a[3], a[5]); SQRADD(a[4], a[4]);
261 COMBA_STORE(b[8]);
262
263 /* output 9 */
264 CARRY_FORWARD;
265 SQRADD2(a[4], a[5]);
266 COMBA_STORE(b[9]);
267
268 /* output 10 */
269 CARRY_FORWARD;
270 SQRADD(a[5], a[5]);
271 COMBA_STORE(b[10]);
272 COMBA_STORE2(b[11]);
273 COMBA_FINI;
274
275 B->used = 12;
276 B->sign = FP_ZPOS;
277 memcpy(B->dp, b, 12 * sizeof(fp_digit));
278 memset(B->dp + 12, 0, (FP_SIZE - 12) * sizeof(fp_digit));
279 fp_clamp(B);
280 break;
281
282 case 7:
283 a = A->dp;
284 COMBA_START;
285
286 /* clear carries */
287 CLEAR_CARRY;
288
289 /* output 0 */
290 SQRADD(a[0],a[0]);
291 COMBA_STORE(b[0]);
292
293 /* output 1 */
294 CARRY_FORWARD;
295 SQRADD2(a[0], a[1]);
296 COMBA_STORE(b[1]);
297
298 /* output 2 */
299 CARRY_FORWARD;
300 SQRADD2(a[0], a[2]); SQRADD(a[1], a[1]);
301 COMBA_STORE(b[2]);
302
303 /* output 3 */
304 CARRY_FORWARD;
305 SQRADD2(a[0], a[3]); SQRADD2(a[1], a[2]);
306 COMBA_STORE(b[3]);
307
308 /* output 4 */
309 CARRY_FORWARD;
310 SQRADD2(a[0], a[4]); SQRADD2(a[1], a[3]); SQRADD(a[2], a[2]);
311 COMBA_STORE(b[4]);
312
313 /* output 5 */
314 CARRY_FORWARD;
315 SQRADDSC(a[0], a[5]); SQRADDAC(a[1], a[4]); SQRADDAC(a[2], a[3]); SQRADDDB;
316 COMBA_STORE(b[5]);
317
318 /* output 6 */
319 CARRY_FORWARD;
320 SQRADDSC(a[0], a[6]); SQRADDAC(a[1], a[5]); SQRADDAC(a[2], a[4]); SQRADDDB; SQRADD(a[3], a[3]);
321 COMBA_STORE(b[6]);
322
323 /* output 7 */
324 CARRY_FORWARD;
325 SQRADDSC(a[1], a[6]); SQRADDAC(a[2], a[5]); SQRADDAC(a[3], a[4]); SQRADDDB;
326 COMBA_STORE(b[7]);
327
328 /* output 8 */
329 CARRY_FORWARD;
330 SQRADD2(a[2], a[6]); SQRADD2(a[3], a[5]); SQRADD(a[4], a[4]);
331 COMBA_STORE(b[8]);
332
333 /* output 9 */
334 CARRY_FORWARD;
335 SQRADD2(a[3], a[6]); SQRADD2(a[4], a[5]);
336 COMBA_STORE(b[9]);
337
338 /* output 10 */
339 CARRY_FORWARD;
340 SQRADD2(a[4], a[6]); SQRADD(a[5], a[5]);
341 COMBA_STORE(b[10]);
342
343 /* output 11 */
344 CARRY_FORWARD;
345 SQRADD2(a[5], a[6]);
346 COMBA_STORE(b[11]);
347
348 /* output 12 */
349 CARRY_FORWARD;
350 SQRADD(a[6], a[6]);
351 COMBA_STORE(b[12]);
352 COMBA_STORE2(b[13]);
353 COMBA_FINI;
354
355 B->used = 14;
356 B->sign = FP_ZPOS;
357 memcpy(B->dp, b, 14 * sizeof(fp_digit));
358 memset(B->dp + 14, 0, (FP_SIZE - 14) * sizeof(fp_digit));
359 fp_clamp(B);
360 break;
361
362 case 8:
363 a = A->dp;
364 COMBA_START;
365
366 /* clear carries */
367 CLEAR_CARRY;
368
369 /* output 0 */
370 SQRADD(a[0],a[0]);
371 COMBA_STORE(b[0]);
372
373 /* output 1 */
374 CARRY_FORWARD;
375 SQRADD2(a[0], a[1]);
376 COMBA_STORE(b[1]);
377
378 /* output 2 */
379 CARRY_FORWARD;
380 SQRADD2(a[0], a[2]); SQRADD(a[1], a[1]);
381 COMBA_STORE(b[2]);
382
383 /* output 3 */
384 CARRY_FORWARD;
385 SQRADD2(a[0], a[3]); SQRADD2(a[1], a[2]);
386 COMBA_STORE(b[3]);
387
388 /* output 4 */
389 CARRY_FORWARD;
390 SQRADD2(a[0], a[4]); SQRADD2(a[1], a[3]); SQRADD(a[2], a[2]);
391 COMBA_STORE(b[4]);
392
393 /* output 5 */
394 CARRY_FORWARD;
395 SQRADDSC(a[0], a[5]); SQRADDAC(a[1], a[4]); SQRADDAC(a[2], a[3]); SQRADDDB;
396 COMBA_STORE(b[5]);
397
398 /* output 6 */
399 CARRY_FORWARD;
400 SQRADDSC(a[0], a[6]); SQRADDAC(a[1], a[5]); SQRADDAC(a[2], a[4]); SQRADDDB; SQRADD(a[3], a[3]);
401 COMBA_STORE(b[6]);
402
403 /* output 7 */
404 CARRY_FORWARD;
405 SQRADDSC(a[0], a[7]); SQRADDAC(a[1], a[6]); SQRADDAC(a[2], a[5]); SQRADDAC(a[3], a[4]); SQRADDDB;
406 COMBA_STORE(b[7]);
407
408 /* output 8 */
409 CARRY_FORWARD;
410 SQRADDSC(a[1], a[7]); SQRADDAC(a[2], a[6]); SQRADDAC(a[3], a[5]); SQRADDDB; SQRADD(a[4], a[4]);
411 COMBA_STORE(b[8]);
412
413 /* output 9 */
414 CARRY_FORWARD;
415 SQRADDSC(a[2], a[7]); SQRADDAC(a[3], a[6]); SQRADDAC(a[4], a[5]); SQRADDDB;
416 COMBA_STORE(b[9]);
417
418 /* output 10 */
419 CARRY_FORWARD;
420 SQRADD2(a[3], a[7]); SQRADD2(a[4], a[6]); SQRADD(a[5], a[5]);
421 COMBA_STORE(b[10]);
422
423 /* output 11 */
424 CARRY_FORWARD;
425 SQRADD2(a[4], a[7]); SQRADD2(a[5], a[6]);
426 COMBA_STORE(b[11]);
427
428 /* output 12 */
429 CARRY_FORWARD;
430 SQRADD2(a[5], a[7]); SQRADD(a[6], a[6]);
431 COMBA_STORE(b[12]);
432
433 /* output 13 */
434 CARRY_FORWARD;
435 SQRADD2(a[6], a[7]);
436 COMBA_STORE(b[13]);
437
438 /* output 14 */
439 CARRY_FORWARD;
440 SQRADD(a[7], a[7]);
441 COMBA_STORE(b[14]);
442 COMBA_STORE2(b[15]);
443 COMBA_FINI;
444
445 B->used = 16;
446 B->sign = FP_ZPOS;
447 memcpy(B->dp, b, 16 * sizeof(fp_digit));
448 memset(B->dp + 16, 0, (FP_SIZE - 16) * sizeof(fp_digit));
449 fp_clamp(B);
450 break;
451
452 case 9:
453 a = A->dp;
454 COMBA_START;
455
456 /* clear carries */
457 CLEAR_CARRY;
458
459 /* output 0 */
460 SQRADD(a[0],a[0]);
461 COMBA_STORE(b[0]);
462
463 /* output 1 */
464 CARRY_FORWARD;
465 SQRADD2(a[0], a[1]);
466 COMBA_STORE(b[1]);
467
468 /* output 2 */
469 CARRY_FORWARD;
470 SQRADD2(a[0], a[2]); SQRADD(a[1], a[1]);
471 COMBA_STORE(b[2]);
472
473 /* output 3 */
474 CARRY_FORWARD;
475 SQRADD2(a[0], a[3]); SQRADD2(a[1], a[2]);
476 COMBA_STORE(b[3]);
477
478 /* output 4 */
479 CARRY_FORWARD;
480 SQRADD2(a[0], a[4]); SQRADD2(a[1], a[3]); SQRADD(a[2], a[2]);
481 COMBA_STORE(b[4]);
482
483 /* output 5 */
484 CARRY_FORWARD;
485 SQRADDSC(a[0], a[5]); SQRADDAC(a[1], a[4]); SQRADDAC(a[2], a[3]); SQRADDDB;
486 COMBA_STORE(b[5]);
487
488 /* output 6 */
489 CARRY_FORWARD;
490 SQRADDSC(a[0], a[6]); SQRADDAC(a[1], a[5]); SQRADDAC(a[2], a[4]); SQRADDDB; SQRADD(a[3], a[3]);
491 COMBA_STORE(b[6]);
492
493 /* output 7 */
494 CARRY_FORWARD;
495 SQRADDSC(a[0], a[7]); SQRADDAC(a[1], a[6]); SQRADDAC(a[2], a[5]); SQRADDAC(a[3], a[4]); SQRADDDB;
496 COMBA_STORE(b[7]);
497
498 /* output 8 */
499 CARRY_FORWARD;
500 SQRADDSC(a[0], a[8]); SQRADDAC(a[1], a[7]); SQRADDAC(a[2], a[6]); SQRADDAC(a[3], a[5]); SQRADDDB; SQRADD(a[4], a[4]);
501 COMBA_STORE(b[8]);
502
503 /* output 9 */
504 CARRY_FORWARD;
505 SQRADDSC(a[1], a[8]); SQRADDAC(a[2], a[7]); SQRADDAC(a[3], a[6]); SQRADDAC(a[4], a[5]); SQRADDDB;
506 COMBA_STORE(b[9]);
507
508 /* output 10 */
509 CARRY_FORWARD;
510 SQRADDSC(a[2], a[8]); SQRADDAC(a[3], a[7]); SQRADDAC(a[4], a[6]); SQRADDDB; SQRADD(a[5], a[5]);
511 COMBA_STORE(b[10]);
512
513 /* output 11 */
514 CARRY_FORWARD;
515 SQRADDSC(a[3], a[8]); SQRADDAC(a[4], a[7]); SQRADDAC(a[5], a[6]); SQRADDDB;
516 COMBA_STORE(b[11]);
517
518 /* output 12 */
519 CARRY_FORWARD;
520 SQRADD2(a[4], a[8]); SQRADD2(a[5], a[7]); SQRADD(a[6], a[6]);
521 COMBA_STORE(b[12]);
522
523 /* output 13 */
524 CARRY_FORWARD;
525 SQRADD2(a[5], a[8]); SQRADD2(a[6], a[7]);
526 COMBA_STORE(b[13]);
527
528 /* output 14 */
529 CARRY_FORWARD;
530 SQRADD2(a[6], a[8]); SQRADD(a[7], a[7]);
531 COMBA_STORE(b[14]);
532
533 /* output 15 */
534 CARRY_FORWARD;
535 SQRADD2(a[7], a[8]);
536 COMBA_STORE(b[15]);
537
538 /* output 16 */
539 CARRY_FORWARD;
540 SQRADD(a[8], a[8]);
541 COMBA_STORE(b[16]);
542 COMBA_STORE2(b[17]);
543 COMBA_FINI;
544
545 B->used = 18;
546 B->sign = FP_ZPOS;
547 memcpy(B->dp, b, 18 * sizeof(fp_digit));
548 memset(B->dp + 18, 0, (FP_SIZE - 18) * sizeof(fp_digit));
549 fp_clamp(B);
550 break;
551
552 case 10:
553 a = A->dp;
554 COMBA_START;
555
556 /* clear carries */
557 CLEAR_CARRY;
558
559 /* output 0 */
560 SQRADD(a[0],a[0]);
561 COMBA_STORE(b[0]);
562
563 /* output 1 */
564 CARRY_FORWARD;
565 SQRADD2(a[0], a[1]);
566 COMBA_STORE(b[1]);
567
568 /* output 2 */
569 CARRY_FORWARD;
570 SQRADD2(a[0], a[2]); SQRADD(a[1], a[1]);
571 COMBA_STORE(b[2]);
572
573 /* output 3 */
574 CARRY_FORWARD;
575 SQRADD2(a[0], a[3]); SQRADD2(a[1], a[2]);
576 COMBA_STORE(b[3]);
577
578 /* output 4 */
579 CARRY_FORWARD;
580 SQRADD2(a[0], a[4]); SQRADD2(a[1], a[3]); SQRADD(a[2], a[2]);
581 COMBA_STORE(b[4]);
582
583 /* output 5 */
584 CARRY_FORWARD;
585 SQRADDSC(a[0], a[5]); SQRADDAC(a[1], a[4]); SQRADDAC(a[2], a[3]); SQRADDDB;
586 COMBA_STORE(b[5]);
587
588 /* output 6 */
589 CARRY_FORWARD;
590 SQRADDSC(a[0], a[6]); SQRADDAC(a[1], a[5]); SQRADDAC(a[2], a[4]); SQRADDDB; SQRADD(a[3], a[3]);
591 COMBA_STORE(b[6]);
592
593 /* output 7 */
594 CARRY_FORWARD;
595 SQRADDSC(a[0], a[7]); SQRADDAC(a[1], a[6]); SQRADDAC(a[2], a[5]); SQRADDAC(a[3], a[4]); SQRADDDB;
596 COMBA_STORE(b[7]);
597
598 /* output 8 */
599 CARRY_FORWARD;
600 SQRADDSC(a[0], a[8]); SQRADDAC(a[1], a[7]); SQRADDAC(a[2], a[6]); SQRADDAC(a[3], a[5]); SQRADDDB; SQRADD(a[4], a[4]);
601 COMBA_STORE(b[8]);
602
603 /* output 9 */
604 CARRY_FORWARD;
605 SQRADDSC(a[0], a[9]); SQRADDAC(a[1], a[8]); SQRADDAC(a[2], a[7]); SQRADDAC(a[3], a[6]); SQRADDAC(a[4], a[5]); SQRADDDB;
606 COMBA_STORE(b[9]);
607
608 /* output 10 */
609 CARRY_FORWARD;
610 SQRADDSC(a[1], a[9]); SQRADDAC(a[2], a[8]); SQRADDAC(a[3], a[7]); SQRADDAC(a[4], a[6]); SQRADDDB; SQRADD(a[5], a[5]);
611 COMBA_STORE(b[10]);
612
613 /* output 11 */
614 CARRY_FORWARD;
615 SQRADDSC(a[2], a[9]); SQRADDAC(a[3], a[8]); SQRADDAC(a[4], a[7]); SQRADDAC(a[5], a[6]); SQRADDDB;
616 COMBA_STORE(b[11]);
617
618 /* output 12 */
619 CARRY_FORWARD;
620 SQRADDSC(a[3], a[9]); SQRADDAC(a[4], a[8]); SQRADDAC(a[5], a[7]); SQRADDDB; SQRADD(a[6], a[6]);
621 COMBA_STORE(b[12]);
622
623 /* output 13 */
624 CARRY_FORWARD;
625 SQRADDSC(a[4], a[9]); SQRADDAC(a[5], a[8]); SQRADDAC(a[6], a[7]); SQRADDDB;
626 COMBA_STORE(b[13]);
627
628 /* output 14 */
629 CARRY_FORWARD;
630 SQRADD2(a[5], a[9]); SQRADD2(a[6], a[8]); SQRADD(a[7], a[7]);
631 COMBA_STORE(b[14]);
632
633 /* output 15 */
634 CARRY_FORWARD;
635 SQRADD2(a[6], a[9]); SQRADD2(a[7], a[8]);
636 COMBA_STORE(b[15]);
637
638 /* output 16 */
639 CARRY_FORWARD;
640 SQRADD2(a[7], a[9]); SQRADD(a[8], a[8]);
641 COMBA_STORE(b[16]);
642
643 /* output 17 */
644 CARRY_FORWARD;
645 SQRADD2(a[8], a[9]);
646 COMBA_STORE(b[17]);
647
648 /* output 18 */
649 CARRY_FORWARD;
650 SQRADD(a[9], a[9]);
651 COMBA_STORE(b[18]);
652 COMBA_STORE2(b[19]);
653 COMBA_FINI;
654
655 B->used = 20;
656 B->sign = FP_ZPOS;
657 memcpy(B->dp, b, 20 * sizeof(fp_digit));
658 memset(B->dp + 20, 0, (FP_SIZE - 20) * sizeof(fp_digit));
659 fp_clamp(B);
660 break;
661
662 case 11:
663 a = A->dp;
664 COMBA_START;
665
666 /* clear carries */
667 CLEAR_CARRY;
668
669 /* output 0 */
670 SQRADD(a[0],a[0]);
671 COMBA_STORE(b[0]);
672
673 /* output 1 */
674 CARRY_FORWARD;
675 SQRADD2(a[0], a[1]);
676 COMBA_STORE(b[1]);
677
678 /* output 2 */
679 CARRY_FORWARD;
680 SQRADD2(a[0], a[2]); SQRADD(a[1], a[1]);
681 COMBA_STORE(b[2]);
682
683 /* output 3 */
684 CARRY_FORWARD;
685 SQRADD2(a[0], a[3]); SQRADD2(a[1], a[2]);
686 COMBA_STORE(b[3]);
687
688 /* output 4 */
689 CARRY_FORWARD;
690 SQRADD2(a[0], a[4]); SQRADD2(a[1], a[3]); SQRADD(a[2], a[2]);
691 COMBA_STORE(b[4]);
692
693 /* output 5 */
694 CARRY_FORWARD;
695 SQRADDSC(a[0], a[5]); SQRADDAC(a[1], a[4]); SQRADDAC(a[2], a[3]); SQRADDDB;
696 COMBA_STORE(b[5]);
697
698 /* output 6 */
699 CARRY_FORWARD;
700 SQRADDSC(a[0], a[6]); SQRADDAC(a[1], a[5]); SQRADDAC(a[2], a[4]); SQRADDDB; SQRADD(a[3], a[3]);
701 COMBA_STORE(b[6]);
702
703 /* output 7 */
704 CARRY_FORWARD;
705 SQRADDSC(a[0], a[7]); SQRADDAC(a[1], a[6]); SQRADDAC(a[2], a[5]); SQRADDAC(a[3], a[4]); SQRADDDB;
706 COMBA_STORE(b[7]);
707
708 /* output 8 */
709 CARRY_FORWARD;
710 SQRADDSC(a[0], a[8]); SQRADDAC(a[1], a[7]); SQRADDAC(a[2], a[6]); SQRADDAC(a[3], a[5]); SQRADDDB; SQRADD(a[4], a[4]);
711 COMBA_STORE(b[8]);
712
713 /* output 9 */
714 CARRY_FORWARD;
715 SQRADDSC(a[0], a[9]); SQRADDAC(a[1], a[8]); SQRADDAC(a[2], a[7]); SQRADDAC(a[3], a[6]); SQRADDAC(a[4], a[5]); SQRADDDB;
716 COMBA_STORE(b[9]);
717
718 /* output 10 */
719 CARRY_FORWARD;
720 SQRADDSC(a[0], a[10]); SQRADDAC(a[1], a[9]); SQRADDAC(a[2], a[8]); SQRADDAC(a[3], a[7]); SQRADDAC(a[4], a[6]); SQRADDDB; SQRADD(a[5], a[5]);
721 COMBA_STORE(b[10]);
722
723 /* output 11 */
724 CARRY_FORWARD;
725 SQRADDSC(a[1], a[10]); SQRADDAC(a[2], a[9]); SQRADDAC(a[3], a[8]); SQRADDAC(a[4], a[7]); SQRADDAC(a[5], a[6]); SQRADDDB;
726 COMBA_STORE(b[11]);
727
728 /* output 12 */
729 CARRY_FORWARD;
730 SQRADDSC(a[2], a[10]); SQRADDAC(a[3], a[9]); SQRADDAC(a[4], a[8]); SQRADDAC(a[5], a[7]); SQRADDDB; SQRADD(a[6], a[6]);
731 COMBA_STORE(b[12]);
732
733 /* output 13 */
734 CARRY_FORWARD;
735 SQRADDSC(a[3], a[10]); SQRADDAC(a[4], a[9]); SQRADDAC(a[5], a[8]); SQRADDAC(a[6], a[7]); SQRADDDB;
736 COMBA_STORE(b[13]);
737
738 /* output 14 */
739 CARRY_FORWARD;
740 SQRADDSC(a[4], a[10]); SQRADDAC(a[5], a[9]); SQRADDAC(a[6], a[8]); SQRADDDB; SQRADD(a[7], a[7]);
741 COMBA_STORE(b[14]);
742
743 /* output 15 */
744 CARRY_FORWARD;
745 SQRADDSC(a[5], a[10]); SQRADDAC(a[6], a[9]); SQRADDAC(a[7], a[8]); SQRADDDB;
746 COMBA_STORE(b[15]);
747
748 /* output 16 */
749 CARRY_FORWARD;
750 SQRADD2(a[6], a[10]); SQRADD2(a[7], a[9]); SQRADD(a[8], a[8]);
751 COMBA_STORE(b[16]);
752
753 /* output 17 */
754 CARRY_FORWARD;
755 SQRADD2(a[7], a[10]); SQRADD2(a[8], a[9]);
756 COMBA_STORE(b[17]);
757
758 /* output 18 */
759 CARRY_FORWARD;
760 SQRADD2(a[8], a[10]); SQRADD(a[9], a[9]);
761 COMBA_STORE(b[18]);
762
763 /* output 19 */
764 CARRY_FORWARD;
765 SQRADD2(a[9], a[10]);
766 COMBA_STORE(b[19]);
767
768 /* output 20 */
769 CARRY_FORWARD;
770 SQRADD(a[10], a[10]);
771 COMBA_STORE(b[20]);
772 COMBA_STORE2(b[21]);
773 COMBA_FINI;
774
775 B->used = 22;
776 B->sign = FP_ZPOS;
777 memcpy(B->dp, b, 22 * sizeof(fp_digit));
778 memset(B->dp + 22, 0, (FP_SIZE - 22) * sizeof(fp_digit));
779 fp_clamp(B);
780 break;
781
782 case 12:
783 a = A->dp;
784 COMBA_START;
785
786 /* clear carries */
787 CLEAR_CARRY;
788
789 /* output 0 */
790 SQRADD(a[0],a[0]);
791 COMBA_STORE(b[0]);
792
793 /* output 1 */
794 CARRY_FORWARD;
795 SQRADD2(a[0], a[1]);
796 COMBA_STORE(b[1]);
797
798 /* output 2 */
799 CARRY_FORWARD;
800 SQRADD2(a[0], a[2]); SQRADD(a[1], a[1]);
801 COMBA_STORE(b[2]);
802
803 /* output 3 */
804 CARRY_FORWARD;
805 SQRADD2(a[0], a[3]); SQRADD2(a[1], a[2]);
806 COMBA_STORE(b[3]);
807
808 /* output 4 */
809 CARRY_FORWARD;
810 SQRADD2(a[0], a[4]); SQRADD2(a[1], a[3]); SQRADD(a[2], a[2]);
811 COMBA_STORE(b[4]);
812
813 /* output 5 */
814 CARRY_FORWARD;
815 SQRADDSC(a[0], a[5]); SQRADDAC(a[1], a[4]); SQRADDAC(a[2], a[3]); SQRADDDB;
816 COMBA_STORE(b[5]);
817
818 /* output 6 */
819 CARRY_FORWARD;
820 SQRADDSC(a[0], a[6]); SQRADDAC(a[1], a[5]); SQRADDAC(a[2], a[4]); SQRADDDB; SQRADD(a[3], a[3]);
821 COMBA_STORE(b[6]);
822
823 /* output 7 */
824 CARRY_FORWARD;
825 SQRADDSC(a[0], a[7]); SQRADDAC(a[1], a[6]); SQRADDAC(a[2], a[5]); SQRADDAC(a[3], a[4]); SQRADDDB;
826 COMBA_STORE(b[7]);
827
828 /* output 8 */
829 CARRY_FORWARD;
830 SQRADDSC(a[0], a[8]); SQRADDAC(a[1], a[7]); SQRADDAC(a[2], a[6]); SQRADDAC(a[3], a[5]); SQRADDDB; SQRADD(a[4], a[4]);
831 COMBA_STORE(b[8]);
832
833 /* output 9 */
834 CARRY_FORWARD;
835 SQRADDSC(a[0], a[9]); SQRADDAC(a[1], a[8]); SQRADDAC(a[2], a[7]); SQRADDAC(a[3], a[6]); SQRADDAC(a[4], a[5]); SQRADDDB;
836 COMBA_STORE(b[9]);
837
838 /* output 10 */
839 CARRY_FORWARD;
840 SQRADDSC(a[0], a[10]); SQRADDAC(a[1], a[9]); SQRADDAC(a[2], a[8]); SQRADDAC(a[3], a[7]); SQRADDAC(a[4], a[6]); SQRADDDB; SQRADD(a[5], a[5]);
841 COMBA_STORE(b[10]);
842
843 /* output 11 */
844 CARRY_FORWARD;
845 SQRADDSC(a[0], a[11]); SQRADDAC(a[1], a[10]); SQRADDAC(a[2], a[9]); SQRADDAC(a[3], a[8]); SQRADDAC(a[4], a[7]); SQRADDAC(a[5], a[6]); SQRADDDB;
846 COMBA_STORE(b[11]);
847
848 /* output 12 */
849 CARRY_FORWARD;
850 SQRADDSC(a[1], a[11]); SQRADDAC(a[2], a[10]); SQRADDAC(a[3], a[9]); SQRADDAC(a[4], a[8]); SQRADDAC(a[5], a[7]); SQRADDDB; SQRADD(a[6], a[6]);
851 COMBA_STORE(b[12]);
852
853 /* output 13 */
854 CARRY_FORWARD;
855 SQRADDSC(a[2], a[11]); SQRADDAC(a[3], a[10]); SQRADDAC(a[4], a[9]); SQRADDAC(a[5], a[8]); SQRADDAC(a[6], a[7]); SQRADDDB;
856 COMBA_STORE(b[13]);
857
858 /* output 14 */
859 CARRY_FORWARD;
860 SQRADDSC(a[3], a[11]); SQRADDAC(a[4], a[10]); SQRADDAC(a[5], a[9]); SQRADDAC(a[6], a[8]); SQRADDDB; SQRADD(a[7], a[7]);
861 COMBA_STORE(b[14]);
862
863 /* output 15 */
864 CARRY_FORWARD;
865 SQRADDSC(a[4], a[11]); SQRADDAC(a[5], a[10]); SQRADDAC(a[6], a[9]); SQRADDAC(a[7], a[8]); SQRADDDB;
866 COMBA_STORE(b[15]);
867
868 /* output 16 */
869 CARRY_FORWARD;
870 SQRADDSC(a[5], a[11]); SQRADDAC(a[6], a[10]); SQRADDAC(a[7], a[9]); SQRADDDB; SQRADD(a[8], a[8]);
871 COMBA_STORE(b[16]);
872
873 /* output 17 */
874 CARRY_FORWARD;
875 SQRADDSC(a[6], a[11]); SQRADDAC(a[7], a[10]); SQRADDAC(a[8], a[9]); SQRADDDB;
876 COMBA_STORE(b[17]);
877
878 /* output 18 */
879 CARRY_FORWARD;
880 SQRADD2(a[7], a[11]); SQRADD2(a[8], a[10]); SQRADD(a[9], a[9]);
881 COMBA_STORE(b[18]);
882
883 /* output 19 */
884 CARRY_FORWARD;
885 SQRADD2(a[8], a[11]); SQRADD2(a[9], a[10]);
886 COMBA_STORE(b[19]);
887
888 /* output 20 */
889 CARRY_FORWARD;
890 SQRADD2(a[9], a[11]); SQRADD(a[10], a[10]);
891 COMBA_STORE(b[20]);
892
893 /* output 21 */
894 CARRY_FORWARD;
895 SQRADD2(a[10], a[11]);
896 COMBA_STORE(b[21]);
897
898 /* output 22 */
899 CARRY_FORWARD;
900 SQRADD(a[11], a[11]);
901 COMBA_STORE(b[22]);
902 COMBA_STORE2(b[23]);
903 COMBA_FINI;
904
905 B->used = 24;
906 B->sign = FP_ZPOS;
907 memcpy(B->dp, b, 24 * sizeof(fp_digit));
908 memset(B->dp + 24, 0, (FP_SIZE - 24) * sizeof(fp_digit));
909 fp_clamp(B);
910 break;
911
912 case 13:
913 a = A->dp;
914 COMBA_START;
915
916 /* clear carries */
917 CLEAR_CARRY;
918
919 /* output 0 */
920 SQRADD(a[0],a[0]);
921 COMBA_STORE(b[0]);
922
923 /* output 1 */
924 CARRY_FORWARD;
925 SQRADD2(a[0], a[1]);
926 COMBA_STORE(b[1]);
927
928 /* output 2 */
929 CARRY_FORWARD;
930 SQRADD2(a[0], a[2]); SQRADD(a[1], a[1]);
931 COMBA_STORE(b[2]);
932
933 /* output 3 */
934 CARRY_FORWARD;
935 SQRADD2(a[0], a[3]); SQRADD2(a[1], a[2]);
936 COMBA_STORE(b[3]);
937
938 /* output 4 */
939 CARRY_FORWARD;
940 SQRADD2(a[0], a[4]); SQRADD2(a[1], a[3]); SQRADD(a[2], a[2]);
941 COMBA_STORE(b[4]);
942
943 /* output 5 */
944 CARRY_FORWARD;
945 SQRADDSC(a[0], a[5]); SQRADDAC(a[1], a[4]); SQRADDAC(a[2], a[3]); SQRADDDB;
946 COMBA_STORE(b[5]);
947
948 /* output 6 */
949 CARRY_FORWARD;
950 SQRADDSC(a[0], a[6]); SQRADDAC(a[1], a[5]); SQRADDAC(a[2], a[4]); SQRADDDB; SQRADD(a[3], a[3]);
951 COMBA_STORE(b[6]);
952
953 /* output 7 */
954 CARRY_FORWARD;
955 SQRADDSC(a[0], a[7]); SQRADDAC(a[1], a[6]); SQRADDAC(a[2], a[5]); SQRADDAC(a[3], a[4]); SQRADDDB;
956 COMBA_STORE(b[7]);
957
958 /* output 8 */
959 CARRY_FORWARD;
960 SQRADDSC(a[0], a[8]); SQRADDAC(a[1], a[7]); SQRADDAC(a[2], a[6]); SQRADDAC(a[3], a[5]); SQRADDDB; SQRADD(a[4], a[4]);
961 COMBA_STORE(b[8]);
962
963 /* output 9 */
964 CARRY_FORWARD;
965 SQRADDSC(a[0], a[9]); SQRADDAC(a[1], a[8]); SQRADDAC(a[2], a[7]); SQRADDAC(a[3], a[6]); SQRADDAC(a[4], a[5]); SQRADDDB;
966 COMBA_STORE(b[9]);
967
968 /* output 10 */
969 CARRY_FORWARD;
970 SQRADDSC(a[0], a[10]); SQRADDAC(a[1], a[9]); SQRADDAC(a[2], a[8]); SQRADDAC(a[3], a[7]); SQRADDAC(a[4], a[6]); SQRADDDB; SQRADD(a[5], a[5]);
971 COMBA_STORE(b[10]);
972
973 /* output 11 */
974 CARRY_FORWARD;
975 SQRADDSC(a[0], a[11]); SQRADDAC(a[1], a[10]); SQRADDAC(a[2], a[9]); SQRADDAC(a[3], a[8]); SQRADDAC(a[4], a[7]); SQRADDAC(a[5], a[6]); SQRADDDB;
976 COMBA_STORE(b[11]);
977
978 /* output 12 */
979 CARRY_FORWARD;
980 SQRADDSC(a[0], a[12]); SQRADDAC(a[1], a[11]); SQRADDAC(a[2], a[10]); SQRADDAC(a[3], a[9]); SQRADDAC(a[4], a[8]); SQRADDAC(a[5], a[7]); SQRADDDB; SQRADD(a[6], a[6]);
981 COMBA_STORE(b[12]);
982
983 /* output 13 */
984 CARRY_FORWARD;
985 SQRADDSC(a[1], a[12]); SQRADDAC(a[2], a[11]); SQRADDAC(a[3], a[10]); SQRADDAC(a[4], a[9]); SQRADDAC(a[5], a[8]); SQRADDAC(a[6], a[7]); SQRADDDB;
986 COMBA_STORE(b[13]);
987
988 /* output 14 */
989 CARRY_FORWARD;
990 SQRADDSC(a[2], a[12]); SQRADDAC(a[3], a[11]); SQRADDAC(a[4], a[10]); SQRADDAC(a[5], a[9]); SQRADDAC(a[6], a[8]); SQRADDDB; SQRADD(a[7], a[7]);
991 COMBA_STORE(b[14]);
992
993 /* output 15 */
994 CARRY_FORWARD;
995 SQRADDSC(a[3], a[12]); SQRADDAC(a[4], a[11]); SQRADDAC(a[5], a[10]); SQRADDAC(a[6], a[9]); SQRADDAC(a[7], a[8]); SQRADDDB;
996 COMBA_STORE(b[15]);
997
998 /* output 16 */
999 CARRY_FORWARD;
1000 SQRADDSC(a[4], a[12]); SQRADDAC(a[5], a[11]); SQRADDAC(a[6], a[10]); SQRADDAC(a[7], a[9]); SQRADDDB; SQRADD(a[8], a[8]);
1001 COMBA_STORE(b[16]);
1002
1003 /* output 17 */
1004 CARRY_FORWARD;
1005 SQRADDSC(a[5], a[12]); SQRADDAC(a[6], a[11]); SQRADDAC(a[7], a[10]); SQRADDAC(a[8], a[9]); SQRADDDB;
1006 COMBA_STORE(b[17]);
1007
1008 /* output 18 */
1009 CARRY_FORWARD;
1010 SQRADDSC(a[6], a[12]); SQRADDAC(a[7], a[11]); SQRADDAC(a[8], a[10]); SQRADDDB; SQRADD(a[9], a[9]);
1011 COMBA_STORE(b[18]);
1012
1013 /* output 19 */
1014 CARRY_FORWARD;
1015 SQRADDSC(a[7], a[12]); SQRADDAC(a[8], a[11]); SQRADDAC(a[9], a[10]); SQRADDDB;
1016 COMBA_STORE(b[19]);
1017
1018 /* output 20 */
1019 CARRY_FORWARD;
1020 SQRADD2(a[8], a[12]); SQRADD2(a[9], a[11]); SQRADD(a[10], a[10]);
1021 COMBA_STORE(b[20]);
1022
1023 /* output 21 */
1024 CARRY_FORWARD;
1025 SQRADD2(a[9], a[12]); SQRADD2(a[10], a[11]);
1026 COMBA_STORE(b[21]);
1027
1028 /* output 22 */
1029 CARRY_FORWARD;
1030 SQRADD2(a[10], a[12]); SQRADD(a[11], a[11]);
1031 COMBA_STORE(b[22]);
1032
1033 /* output 23 */
1034 CARRY_FORWARD;
1035 SQRADD2(a[11], a[12]);
1036 COMBA_STORE(b[23]);
1037
1038 /* output 24 */
1039 CARRY_FORWARD;
1040 SQRADD(a[12], a[12]);
1041 COMBA_STORE(b[24]);
1042 COMBA_STORE2(b[25]);
1043 COMBA_FINI;
1044
1045 B->used = 26;
1046 B->sign = FP_ZPOS;
1047 memcpy(B->dp, b, 26 * sizeof(fp_digit));
1048 memset(B->dp + 26, 0, (FP_SIZE - 26) * sizeof(fp_digit));
1049 fp_clamp(B);
1050 break;
1051
1052 case 14:
1053 a = A->dp;
1054 COMBA_START;
1055
1056 /* clear carries */
1057 CLEAR_CARRY;
1058
1059 /* output 0 */
1060 SQRADD(a[0],a[0]);
1061 COMBA_STORE(b[0]);
1062
1063 /* output 1 */
1064 CARRY_FORWARD;
1065 SQRADD2(a[0], a[1]);
1066 COMBA_STORE(b[1]);
1067
1068 /* output 2 */
1069 CARRY_FORWARD;
1070 SQRADD2(a[0], a[2]); SQRADD(a[1], a[1]);
1071 COMBA_STORE(b[2]);
1072
1073 /* output 3 */
1074 CARRY_FORWARD;
1075 SQRADD2(a[0], a[3]); SQRADD2(a[1], a[2]);
1076 COMBA_STORE(b[3]);
1077
1078 /* output 4 */
1079 CARRY_FORWARD;
1080 SQRADD2(a[0], a[4]); SQRADD2(a[1], a[3]); SQRADD(a[2], a[2]);
1081 COMBA_STORE(b[4]);
1082
1083 /* output 5 */
1084 CARRY_FORWARD;
1085 SQRADDSC(a[0], a[5]); SQRADDAC(a[1], a[4]); SQRADDAC(a[2], a[3]); SQRADDDB;
1086 COMBA_STORE(b[5]);
1087
1088 /* output 6 */
1089 CARRY_FORWARD;
1090 SQRADDSC(a[0], a[6]); SQRADDAC(a[1], a[5]); SQRADDAC(a[2], a[4]); SQRADDDB; SQRADD(a[3], a[3]);
1091 COMBA_STORE(b[6]);
1092
1093 /* output 7 */
1094 CARRY_FORWARD;
1095 SQRADDSC(a[0], a[7]); SQRADDAC(a[1], a[6]); SQRADDAC(a[2], a[5]); SQRADDAC(a[3], a[4]); SQRADDDB;
1096 COMBA_STORE(b[7]);
1097
1098 /* output 8 */
1099 CARRY_FORWARD;
1100 SQRADDSC(a[0], a[8]); SQRADDAC(a[1], a[7]); SQRADDAC(a[2], a[6]); SQRADDAC(a[3], a[5]); SQRADDDB; SQRADD(a[4], a[4]);
1101 COMBA_STORE(b[8]);
1102
1103 /* output 9 */
1104 CARRY_FORWARD;
1105 SQRADDSC(a[0], a[9]); SQRADDAC(a[1], a[8]); SQRADDAC(a[2], a[7]); SQRADDAC(a[3], a[6]); SQRADDAC(a[4], a[5]); SQRADDDB;
1106 COMBA_STORE(b[9]);
1107
1108 /* output 10 */
1109 CARRY_FORWARD;
1110 SQRADDSC(a[0], a[10]); SQRADDAC(a[1], a[9]); SQRADDAC(a[2], a[8]); SQRADDAC(a[3], a[7]); SQRADDAC(a[4], a[6]); SQRADDDB; SQRADD(a[5], a[5]);
1111 COMBA_STORE(b[10]);
1112
1113 /* output 11 */
1114 CARRY_FORWARD;
1115 SQRADDSC(a[0], a[11]); SQRADDAC(a[1], a[10]); SQRADDAC(a[2], a[9]); SQRADDAC(a[3], a[8]); SQRADDAC(a[4], a[7]); SQRADDAC(a[5], a[6]); SQRADDDB;
1116 COMBA_STORE(b[11]);
1117
1118 /* output 12 */
1119 CARRY_FORWARD;
1120 SQRADDSC(a[0], a[12]); SQRADDAC(a[1], a[11]); SQRADDAC(a[2], a[10]); SQRADDAC(a[3], a[9]); SQRADDAC(a[4], a[8]); SQRADDAC(a[5], a[7]); SQRADDDB; SQRADD(a[6], a[6]);
1121 COMBA_STORE(b[12]);
1122
1123 /* output 13 */
1124 CARRY_FORWARD;
1125 SQRADDSC(a[0], a[13]); SQRADDAC(a[1], a[12]); SQRADDAC(a[2], a[11]); SQRADDAC(a[3], a[10]); SQRADDAC(a[4], a[9]); SQRADDAC(a[5], a[8]); SQRADDAC(a[6], a[7]); SQRADDDB;
1126 COMBA_STORE(b[13]);
1127
1128 /* output 14 */
1129 CARRY_FORWARD;
1130 SQRADDSC(a[1], a[13]); SQRADDAC(a[2], a[12]); SQRADDAC(a[3], a[11]); SQRADDAC(a[4], a[10]); SQRADDAC(a[5], a[9]); SQRADDAC(a[6], a[8]); SQRADDDB; SQRADD(a[7], a[7]);
1131 COMBA_STORE(b[14]);
1132
1133 /* output 15 */
1134 CARRY_FORWARD;
1135 SQRADDSC(a[2], a[13]); SQRADDAC(a[3], a[12]); SQRADDAC(a[4], a[11]); SQRADDAC(a[5], a[10]); SQRADDAC(a[6], a[9]); SQRADDAC(a[7], a[8]); SQRADDDB;
1136 COMBA_STORE(b[15]);
1137
1138 /* output 16 */
1139 CARRY_FORWARD;
1140 SQRADDSC(a[3], a[13]); SQRADDAC(a[4], a[12]); SQRADDAC(a[5], a[11]); SQRADDAC(a[6], a[10]); SQRADDAC(a[7], a[9]); SQRADDDB; SQRADD(a[8], a[8]);
1141 COMBA_STORE(b[16]);
1142
1143 /* output 17 */
1144 CARRY_FORWARD;
1145 SQRADDSC(a[4], a[13]); SQRADDAC(a[5], a[12]); SQRADDAC(a[6], a[11]); SQRADDAC(a[7], a[10]); SQRADDAC(a[8], a[9]); SQRADDDB;
1146 COMBA_STORE(b[17]);
1147
1148 /* output 18 */
1149 CARRY_FORWARD;
1150 SQRADDSC(a[5], a[13]); SQRADDAC(a[6], a[12]); SQRADDAC(a[7], a[11]); SQRADDAC(a[8], a[10]); SQRADDDB; SQRADD(a[9], a[9]);
1151 COMBA_STORE(b[18]);
1152
1153 /* output 19 */
1154 CARRY_FORWARD;
1155 SQRADDSC(a[6], a[13]); SQRADDAC(a[7], a[12]); SQRADDAC(a[8], a[11]); SQRADDAC(a[9], a[10]); SQRADDDB;
1156 COMBA_STORE(b[19]);
1157
1158 /* output 20 */
1159 CARRY_FORWARD;
1160 SQRADDSC(a[7], a[13]); SQRADDAC(a[8], a[12]); SQRADDAC(a[9], a[11]); SQRADDDB; SQRADD(a[10], a[10]);
1161 COMBA_STORE(b[20]);
1162
1163 /* output 21 */
1164 CARRY_FORWARD;
1165 SQRADDSC(a[8], a[13]); SQRADDAC(a[9], a[12]); SQRADDAC(a[10], a[11]); SQRADDDB;
1166 COMBA_STORE(b[21]);
1167
1168 /* output 22 */
1169 CARRY_FORWARD;
1170 SQRADD2(a[9], a[13]); SQRADD2(a[10], a[12]); SQRADD(a[11], a[11]);
1171 COMBA_STORE(b[22]);
1172
1173 /* output 23 */
1174 CARRY_FORWARD;
1175 SQRADD2(a[10], a[13]); SQRADD2(a[11], a[12]);
1176 COMBA_STORE(b[23]);
1177
1178 /* output 24 */
1179 CARRY_FORWARD;
1180 SQRADD2(a[11], a[13]); SQRADD(a[12], a[12]);
1181 COMBA_STORE(b[24]);
1182
1183 /* output 25 */
1184 CARRY_FORWARD;
1185 SQRADD2(a[12], a[13]);
1186 COMBA_STORE(b[25]);
1187
1188 /* output 26 */
1189 CARRY_FORWARD;
1190 SQRADD(a[13], a[13]);
1191 COMBA_STORE(b[26]);
1192 COMBA_STORE2(b[27]);
1193 COMBA_FINI;
1194
1195 B->used = 28;
1196 B->sign = FP_ZPOS;
1197 memcpy(B->dp, b, 28 * sizeof(fp_digit));
1198 memset(B->dp + 28, 0, (FP_SIZE - 28) * sizeof(fp_digit));
1199 fp_clamp(B);
1200 break;
1201
1202 case 15:
1203 a = A->dp;
1204 COMBA_START;
1205
1206 /* clear carries */
1207 CLEAR_CARRY;
1208
1209 /* output 0 */
1210 SQRADD(a[0],a[0]);
1211 COMBA_STORE(b[0]);
1212
1213 /* output 1 */
1214 CARRY_FORWARD;
1215 SQRADD2(a[0], a[1]);
1216 COMBA_STORE(b[1]);
1217
1218 /* output 2 */
1219 CARRY_FORWARD;
1220 SQRADD2(a[0], a[2]); SQRADD(a[1], a[1]);
1221 COMBA_STORE(b[2]);
1222
1223 /* output 3 */
1224 CARRY_FORWARD;
1225 SQRADD2(a[0], a[3]); SQRADD2(a[1], a[2]);
1226 COMBA_STORE(b[3]);
1227
1228 /* output 4 */
1229 CARRY_FORWARD;
1230 SQRADD2(a[0], a[4]); SQRADD2(a[1], a[3]); SQRADD(a[2], a[2]);
1231 COMBA_STORE(b[4]);
1232
1233 /* output 5 */
1234 CARRY_FORWARD;
1235 SQRADDSC(a[0], a[5]); SQRADDAC(a[1], a[4]); SQRADDAC(a[2], a[3]); SQRADDDB;
1236 COMBA_STORE(b[5]);
1237
1238 /* output 6 */
1239 CARRY_FORWARD;
1240 SQRADDSC(a[0], a[6]); SQRADDAC(a[1], a[5]); SQRADDAC(a[2], a[4]); SQRADDDB; SQRADD(a[3], a[3]);
1241 COMBA_STORE(b[6]);
1242
1243 /* output 7 */
1244 CARRY_FORWARD;
1245 SQRADDSC(a[0], a[7]); SQRADDAC(a[1], a[6]); SQRADDAC(a[2], a[5]); SQRADDAC(a[3], a[4]); SQRADDDB;
1246 COMBA_STORE(b[7]);
1247
1248 /* output 8 */
1249 CARRY_FORWARD;
1250 SQRADDSC(a[0], a[8]); SQRADDAC(a[1], a[7]); SQRADDAC(a[2], a[6]); SQRADDAC(a[3], a[5]); SQRADDDB; SQRADD(a[4], a[4]);
1251 COMBA_STORE(b[8]);
1252
1253 /* output 9 */
1254 CARRY_FORWARD;
1255 SQRADDSC(a[0], a[9]); SQRADDAC(a[1], a[8]); SQRADDAC(a[2], a[7]); SQRADDAC(a[3], a[6]); SQRADDAC(a[4], a[5]); SQRADDDB;
1256 COMBA_STORE(b[9]);
1257
1258 /* output 10 */
1259 CARRY_FORWARD;
1260 SQRADDSC(a[0], a[10]); SQRADDAC(a[1], a[9]); SQRADDAC(a[2], a[8]); SQRADDAC(a[3], a[7]); SQRADDAC(a[4], a[6]); SQRADDDB; SQRADD(a[5], a[5]);
1261 COMBA_STORE(b[10]);
1262
1263 /* output 11 */
1264 CARRY_FORWARD;
1265 SQRADDSC(a[0], a[11]); SQRADDAC(a[1], a[10]); SQRADDAC(a[2], a[9]); SQRADDAC(a[3], a[8]); SQRADDAC(a[4], a[7]); SQRADDAC(a[5], a[6]); SQRADDDB;
1266 COMBA_STORE(b[11]);
1267
1268 /* output 12 */
1269 CARRY_FORWARD;
1270 SQRADDSC(a[0], a[12]); SQRADDAC(a[1], a[11]); SQRADDAC(a[2], a[10]); SQRADDAC(a[3], a[9]); SQRADDAC(a[4], a[8]); SQRADDAC(a[5], a[7]); SQRADDDB; SQRADD(a[6], a[6]);
1271 COMBA_STORE(b[12]);
1272
1273 /* output 13 */
1274 CARRY_FORWARD;
1275 SQRADDSC(a[0], a[13]); SQRADDAC(a[1], a[12]); SQRADDAC(a[2], a[11]); SQRADDAC(a[3], a[10]); SQRADDAC(a[4], a[9]); SQRADDAC(a[5], a[8]); SQRADDAC(a[6], a[7]); SQRADDDB;
1276 COMBA_STORE(b[13]);
1277
1278 /* output 14 */
1279 CARRY_FORWARD;
1280 SQRADDSC(a[0], a[14]); SQRADDAC(a[1], a[13]); SQRADDAC(a[2], a[12]); SQRADDAC(a[3], a[11]); SQRADDAC(a[4], a[10]); SQRADDAC(a[5], a[9]); SQRADDAC(a[6], a[8]); SQRADDDB; SQRADD(a[7], a[7]);
1281 COMBA_STORE(b[14]);
1282
1283 /* output 15 */
1284 CARRY_FORWARD;
1285 SQRADDSC(a[1], a[14]); SQRADDAC(a[2], a[13]); SQRADDAC(a[3], a[12]); SQRADDAC(a[4], a[11]); SQRADDAC(a[5], a[10]); SQRADDAC(a[6], a[9]); SQRADDAC(a[7], a[8]); SQRADDDB;
1286 COMBA_STORE(b[15]);
1287
1288 /* output 16 */
1289 CARRY_FORWARD;
1290 SQRADDSC(a[2], a[14]); SQRADDAC(a[3], a[13]); SQRADDAC(a[4], a[12]); SQRADDAC(a[5], a[11]); SQRADDAC(a[6], a[10]); SQRADDAC(a[7], a[9]); SQRADDDB; SQRADD(a[8], a[8]);
1291 COMBA_STORE(b[16]);
1292
1293 /* output 17 */
1294 CARRY_FORWARD;
1295 SQRADDSC(a[3], a[14]); SQRADDAC(a[4], a[13]); SQRADDAC(a[5], a[12]); SQRADDAC(a[6], a[11]); SQRADDAC(a[7], a[10]); SQRADDAC(a[8], a[9]); SQRADDDB;
1296 COMBA_STORE(b[17]);
1297
1298 /* output 18 */
1299 CARRY_FORWARD;
1300 SQRADDSC(a[4], a[14]); SQRADDAC(a[5], a[13]); SQRADDAC(a[6], a[12]); SQRADDAC(a[7], a[11]); SQRADDAC(a[8], a[10]); SQRADDDB; SQRADD(a[9], a[9]);
1301 COMBA_STORE(b[18]);
1302
1303 /* output 19 */
1304 CARRY_FORWARD;
1305 SQRADDSC(a[5], a[14]); SQRADDAC(a[6], a[13]); SQRADDAC(a[7], a[12]); SQRADDAC(a[8], a[11]); SQRADDAC(a[9], a[10]); SQRADDDB;
1306 COMBA_STORE(b[19]);
1307
1308 /* output 20 */
1309 CARRY_FORWARD;
1310 SQRADDSC(a[6], a[14]); SQRADDAC(a[7], a[13]); SQRADDAC(a[8], a[12]); SQRADDAC(a[9], a[11]); SQRADDDB; SQRADD(a[10], a[10]);
1311 COMBA_STORE(b[20]);
1312
1313 /* output 21 */
1314 CARRY_FORWARD;
1315 SQRADDSC(a[7], a[14]); SQRADDAC(a[8], a[13]); SQRADDAC(a[9], a[12]); SQRADDAC(a[10], a[11]); SQRADDDB;
1316 COMBA_STORE(b[21]);
1317
1318 /* output 22 */
1319 CARRY_FORWARD;
1320 SQRADDSC(a[8], a[14]); SQRADDAC(a[9], a[13]); SQRADDAC(a[10], a[12]); SQRADDDB; SQRADD(a[11], a[11]);
1321 COMBA_STORE(b[22]);
1322
1323 /* output 23 */
1324 CARRY_FORWARD;
1325 SQRADDSC(a[9], a[14]); SQRADDAC(a[10], a[13]); SQRADDAC(a[11], a[12]); SQRADDDB;
1326 COMBA_STORE(b[23]);
1327
1328 /* output 24 */
1329 CARRY_FORWARD;
1330 SQRADD2(a[10], a[14]); SQRADD2(a[11], a[13]); SQRADD(a[12], a[12]);
1331 COMBA_STORE(b[24]);
1332
1333 /* output 25 */
1334 CARRY_FORWARD;
1335 SQRADD2(a[11], a[14]); SQRADD2(a[12], a[13]);
1336 COMBA_STORE(b[25]);
1337
1338 /* output 26 */
1339 CARRY_FORWARD;
1340 SQRADD2(a[12], a[14]); SQRADD(a[13], a[13]);
1341 COMBA_STORE(b[26]);
1342
1343 /* output 27 */
1344 CARRY_FORWARD;
1345 SQRADD2(a[13], a[14]);
1346 COMBA_STORE(b[27]);
1347
1348 /* output 28 */
1349 CARRY_FORWARD;
1350 SQRADD(a[14], a[14]);
1351 COMBA_STORE(b[28]);
1352 COMBA_STORE2(b[29]);
1353 COMBA_FINI;
1354
1355 B->used = 30;
1356 B->sign = FP_ZPOS;
1357 memcpy(B->dp, b, 30 * sizeof(fp_digit));
1358 memset(B->dp + 30, 0, (FP_SIZE - 30) * sizeof(fp_digit));
1359 fp_clamp(B);
1360 break;
1361
1362 case 16:
1363 a = A->dp;
1364 COMBA_START;
1365
1366 /* clear carries */
1367 CLEAR_CARRY;
1368
1369 /* output 0 */
1370 SQRADD(a[0],a[0]);
1371 COMBA_STORE(b[0]);
1372
1373 /* output 1 */
1374 CARRY_FORWARD;
1375 SQRADD2(a[0], a[1]);
1376 COMBA_STORE(b[1]);
1377
1378 /* output 2 */
1379 CARRY_FORWARD;
1380 SQRADD2(a[0], a[2]); SQRADD(a[1], a[1]);
1381 COMBA_STORE(b[2]);
1382
1383 /* output 3 */
1384 CARRY_FORWARD;
1385 SQRADD2(a[0], a[3]); SQRADD2(a[1], a[2]);
1386 COMBA_STORE(b[3]);
1387
1388 /* output 4 */
1389 CARRY_FORWARD;
1390 SQRADD2(a[0], a[4]); SQRADD2(a[1], a[3]); SQRADD(a[2], a[2]);
1391 COMBA_STORE(b[4]);
1392
1393 /* output 5 */
1394 CARRY_FORWARD;
1395 SQRADDSC(a[0], a[5]); SQRADDAC(a[1], a[4]); SQRADDAC(a[2], a[3]); SQRADDDB;
1396 COMBA_STORE(b[5]);
1397
1398 /* output 6 */
1399 CARRY_FORWARD;
1400 SQRADDSC(a[0], a[6]); SQRADDAC(a[1], a[5]); SQRADDAC(a[2], a[4]); SQRADDDB; SQRADD(a[3], a[3]);
1401 COMBA_STORE(b[6]);
1402
1403 /* output 7 */
1404 CARRY_FORWARD;
1405 SQRADDSC(a[0], a[7]); SQRADDAC(a[1], a[6]); SQRADDAC(a[2], a[5]); SQRADDAC(a[3], a[4]); SQRADDDB;
1406 COMBA_STORE(b[7]);
1407
1408 /* output 8 */
1409 CARRY_FORWARD;
1410 SQRADDSC(a[0], a[8]); SQRADDAC(a[1], a[7]); SQRADDAC(a[2], a[6]); SQRADDAC(a[3], a[5]); SQRADDDB; SQRADD(a[4], a[4]);
1411 COMBA_STORE(b[8]);
1412
1413 /* output 9 */
1414 CARRY_FORWARD;
1415 SQRADDSC(a[0], a[9]); SQRADDAC(a[1], a[8]); SQRADDAC(a[2], a[7]); SQRADDAC(a[3], a[6]); SQRADDAC(a[4], a[5]); SQRADDDB;
1416 COMBA_STORE(b[9]);
1417
1418 /* output 10 */
1419 CARRY_FORWARD;
1420 SQRADDSC(a[0], a[10]); SQRADDAC(a[1], a[9]); SQRADDAC(a[2], a[8]); SQRADDAC(a[3], a[7]); SQRADDAC(a[4], a[6]); SQRADDDB; SQRADD(a[5], a[5]);
1421 COMBA_STORE(b[10]);
1422
1423 /* output 11 */
1424 CARRY_FORWARD;
1425 SQRADDSC(a[0], a[11]); SQRADDAC(a[1], a[10]); SQRADDAC(a[2], a[9]); SQRADDAC(a[3], a[8]); SQRADDAC(a[4], a[7]); SQRADDAC(a[5], a[6]); SQRADDDB;
1426 COMBA_STORE(b[11]);
1427
1428 /* output 12 */
1429 CARRY_FORWARD;
1430 SQRADDSC(a[0], a[12]); SQRADDAC(a[1], a[11]); SQRADDAC(a[2], a[10]); SQRADDAC(a[3], a[9]); SQRADDAC(a[4], a[8]); SQRADDAC(a[5], a[7]); SQRADDDB; SQRADD(a[6], a[6]);
1431 COMBA_STORE(b[12]);
1432
1433 /* output 13 */
1434 CARRY_FORWARD;
1435 SQRADDSC(a[0], a[13]); SQRADDAC(a[1], a[12]); SQRADDAC(a[2], a[11]); SQRADDAC(a[3], a[10]); SQRADDAC(a[4], a[9]); SQRADDAC(a[5], a[8]); SQRADDAC(a[6], a[7]); SQRADDDB;
1436 COMBA_STORE(b[13]);
1437
1438 /* output 14 */
1439 CARRY_FORWARD;
1440 SQRADDSC(a[0], a[14]); SQRADDAC(a[1], a[13]); SQRADDAC(a[2], a[12]); SQRADDAC(a[3], a[11]); SQRADDAC(a[4], a[10]); SQRADDAC(a[5], a[9]); SQRADDAC(a[6], a[8]); SQRADDDB; SQRADD(a[7], a[7]);
1441 COMBA_STORE(b[14]);
1442
1443 /* output 15 */
1444 CARRY_FORWARD;
1445 SQRADDSC(a[0], a[15]); SQRADDAC(a[1], a[14]); SQRADDAC(a[2], a[13]); SQRADDAC(a[3], a[12]); SQRADDAC(a[4], a[11]); SQRADDAC(a[5], a[10]); SQRADDAC(a[6], a[9]); SQRADDAC(a[7], a[8]); SQRADDDB;
1446 COMBA_STORE(b[15]);
1447
1448 /* output 16 */
1449 CARRY_FORWARD;
1450 SQRADDSC(a[1], a[15]); SQRADDAC(a[2], a[14]); SQRADDAC(a[3], a[13]); SQRADDAC(a[4], a[12]); SQRADDAC(a[5], a[11]); SQRADDAC(a[6], a[10]); SQRADDAC(a[7], a[9]); SQRADDDB; SQRADD(a[8], a[8]);
1451 COMBA_STORE(b[16]);
1452
1453 /* output 17 */
1454 CARRY_FORWARD;
1455 SQRADDSC(a[2], a[15]); SQRADDAC(a[3], a[14]); SQRADDAC(a[4], a[13]); SQRADDAC(a[5], a[12]); SQRADDAC(a[6], a[11]); SQRADDAC(a[7], a[10]); SQRADDAC(a[8], a[9]); SQRADDDB;
1456 COMBA_STORE(b[17]);
1457
1458 /* output 18 */
1459 CARRY_FORWARD;
1460 SQRADDSC(a[3], a[15]); SQRADDAC(a[4], a[14]); SQRADDAC(a[5], a[13]); SQRADDAC(a[6], a[12]); SQRADDAC(a[7], a[11]); SQRADDAC(a[8], a[10]); SQRADDDB; SQRADD(a[9], a[9]);
1461 COMBA_STORE(b[18]);
1462
1463 /* output 19 */
1464 CARRY_FORWARD;
1465 SQRADDSC(a[4], a[15]); SQRADDAC(a[5], a[14]); SQRADDAC(a[6], a[13]); SQRADDAC(a[7], a[12]); SQRADDAC(a[8], a[11]); SQRADDAC(a[9], a[10]); SQRADDDB;
1466 COMBA_STORE(b[19]);
1467
1468 /* output 20 */
1469 CARRY_FORWARD;
1470 SQRADDSC(a[5], a[15]); SQRADDAC(a[6], a[14]); SQRADDAC(a[7], a[13]); SQRADDAC(a[8], a[12]); SQRADDAC(a[9], a[11]); SQRADDDB; SQRADD(a[10], a[10]);
1471 COMBA_STORE(b[20]);
1472
1473 /* output 21 */
1474 CARRY_FORWARD;
1475 SQRADDSC(a[6], a[15]); SQRADDAC(a[7], a[14]); SQRADDAC(a[8], a[13]); SQRADDAC(a[9], a[12]); SQRADDAC(a[10], a[11]); SQRADDDB;
1476 COMBA_STORE(b[21]);
1477
1478 /* output 22 */
1479 CARRY_FORWARD;
1480 SQRADDSC(a[7], a[15]); SQRADDAC(a[8], a[14]); SQRADDAC(a[9], a[13]); SQRADDAC(a[10], a[12]); SQRADDDB; SQRADD(a[11], a[11]);
1481 COMBA_STORE(b[22]);
1482
1483 /* output 23 */
1484 CARRY_FORWARD;
1485 SQRADDSC(a[8], a[15]); SQRADDAC(a[9], a[14]); SQRADDAC(a[10], a[13]); SQRADDAC(a[11], a[12]); SQRADDDB;
1486 COMBA_STORE(b[23]);
1487
1488 /* output 24 */
1489 CARRY_FORWARD;
1490 SQRADDSC(a[9], a[15]); SQRADDAC(a[10], a[14]); SQRADDAC(a[11], a[13]); SQRADDDB; SQRADD(a[12], a[12]);
1491 COMBA_STORE(b[24]);
1492
1493 /* output 25 */
1494 CARRY_FORWARD;
1495 SQRADDSC(a[10], a[15]); SQRADDAC(a[11], a[14]); SQRADDAC(a[12], a[13]); SQRADDDB;
1496 COMBA_STORE(b[25]);
1497
1498 /* output 26 */
1499 CARRY_FORWARD;
1500 SQRADD2(a[11], a[15]); SQRADD2(a[12], a[14]); SQRADD(a[13], a[13]);
1501 COMBA_STORE(b[26]);
1502
1503 /* output 27 */
1504 CARRY_FORWARD;
1505 SQRADD2(a[12], a[15]); SQRADD2(a[13], a[14]);
1506 COMBA_STORE(b[27]);
1507
1508 /* output 28 */
1509 CARRY_FORWARD;
1510 SQRADD2(a[13], a[15]); SQRADD(a[14], a[14]);
1511 COMBA_STORE(b[28]);
1512
1513 /* output 29 */
1514 CARRY_FORWARD;
1515 SQRADD2(a[14], a[15]);
1516 COMBA_STORE(b[29]);
1517
1518 /* output 30 */
1519 CARRY_FORWARD;
1520 SQRADD(a[15], a[15]);
1521 COMBA_STORE(b[30]);
1522 COMBA_STORE2(b[31]);
1523 COMBA_FINI;
1524
1525 B->used = 32;
1526 B->sign = FP_ZPOS;
1527 memcpy(B->dp, b, 32 * sizeof(fp_digit));
1528 memset(B->dp + 32, 0, (FP_SIZE - 32) * sizeof(fp_digit));
1529 fp_clamp(B);
1530 break;
1531
1532 }
1533 }
1534
1535 #endif /* TFM_SMALL_SET */