Mercurial > dropbear
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 */ |