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