comparison tomsfastmath/src/mul/fp_mul_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_mul_comba.c"
3
4 #if defined(TFM_SMALL_SET)
5 void fp_mul_comba_small(fp_int *A, fp_int *B, fp_int *C)
6 {
7 fp_digit c0, c1, c2, at[32];
8 switch (MAX(A->used, B->used)) {
9
10 case 1:
11 memcpy(at, A->dp, 1 * sizeof(fp_digit));
12 memcpy(at+1, B->dp, 1 * sizeof(fp_digit));
13 COMBA_START;
14
15 COMBA_CLEAR;
16 /* 0 */
17 MULADD(at[0], at[1]);
18 COMBA_STORE(C->dp[0]);
19 COMBA_STORE2(C->dp[1]);
20 C->used = 2;
21 C->sign = A->sign ^ B->sign;
22 fp_clamp(C);
23 COMBA_FINI;
24 break;
25
26 case 2:
27 memcpy(at, A->dp, 2 * sizeof(fp_digit));
28 memcpy(at+2, B->dp, 2 * sizeof(fp_digit));
29 COMBA_START;
30
31 COMBA_CLEAR;
32 /* 0 */
33 MULADD(at[0], at[2]);
34 COMBA_STORE(C->dp[0]);
35 /* 1 */
36 COMBA_FORWARD;
37 MULADD(at[0], at[3]); MULADD(at[1], at[2]);
38 COMBA_STORE(C->dp[1]);
39 /* 2 */
40 COMBA_FORWARD;
41 MULADD(at[1], at[3]);
42 COMBA_STORE(C->dp[2]);
43 COMBA_STORE2(C->dp[3]);
44 C->used = 4;
45 C->sign = A->sign ^ B->sign;
46 fp_clamp(C);
47 COMBA_FINI;
48 break;
49
50 case 3:
51 memcpy(at, A->dp, 3 * sizeof(fp_digit));
52 memcpy(at+3, B->dp, 3 * sizeof(fp_digit));
53 COMBA_START;
54
55 COMBA_CLEAR;
56 /* 0 */
57 MULADD(at[0], at[3]);
58 COMBA_STORE(C->dp[0]);
59 /* 1 */
60 COMBA_FORWARD;
61 MULADD(at[0], at[4]); MULADD(at[1], at[3]);
62 COMBA_STORE(C->dp[1]);
63 /* 2 */
64 COMBA_FORWARD;
65 MULADD(at[0], at[5]); MULADD(at[1], at[4]); MULADD(at[2], at[3]);
66 COMBA_STORE(C->dp[2]);
67 /* 3 */
68 COMBA_FORWARD;
69 MULADD(at[1], at[5]); MULADD(at[2], at[4]);
70 COMBA_STORE(C->dp[3]);
71 /* 4 */
72 COMBA_FORWARD;
73 MULADD(at[2], at[5]);
74 COMBA_STORE(C->dp[4]);
75 COMBA_STORE2(C->dp[5]);
76 C->used = 6;
77 C->sign = A->sign ^ B->sign;
78 fp_clamp(C);
79 COMBA_FINI;
80 break;
81
82 case 4:
83 memcpy(at, A->dp, 4 * sizeof(fp_digit));
84 memcpy(at+4, B->dp, 4 * sizeof(fp_digit));
85 COMBA_START;
86
87 COMBA_CLEAR;
88 /* 0 */
89 MULADD(at[0], at[4]);
90 COMBA_STORE(C->dp[0]);
91 /* 1 */
92 COMBA_FORWARD;
93 MULADD(at[0], at[5]); MULADD(at[1], at[4]);
94 COMBA_STORE(C->dp[1]);
95 /* 2 */
96 COMBA_FORWARD;
97 MULADD(at[0], at[6]); MULADD(at[1], at[5]); MULADD(at[2], at[4]);
98 COMBA_STORE(C->dp[2]);
99 /* 3 */
100 COMBA_FORWARD;
101 MULADD(at[0], at[7]); MULADD(at[1], at[6]); MULADD(at[2], at[5]); MULADD(at[3], at[4]);
102 COMBA_STORE(C->dp[3]);
103 /* 4 */
104 COMBA_FORWARD;
105 MULADD(at[1], at[7]); MULADD(at[2], at[6]); MULADD(at[3], at[5]);
106 COMBA_STORE(C->dp[4]);
107 /* 5 */
108 COMBA_FORWARD;
109 MULADD(at[2], at[7]); MULADD(at[3], at[6]);
110 COMBA_STORE(C->dp[5]);
111 /* 6 */
112 COMBA_FORWARD;
113 MULADD(at[3], at[7]);
114 COMBA_STORE(C->dp[6]);
115 COMBA_STORE2(C->dp[7]);
116 C->used = 8;
117 C->sign = A->sign ^ B->sign;
118 fp_clamp(C);
119 COMBA_FINI;
120 break;
121
122 case 5:
123 memcpy(at, A->dp, 5 * sizeof(fp_digit));
124 memcpy(at+5, B->dp, 5 * sizeof(fp_digit));
125 COMBA_START;
126
127 COMBA_CLEAR;
128 /* 0 */
129 MULADD(at[0], at[5]);
130 COMBA_STORE(C->dp[0]);
131 /* 1 */
132 COMBA_FORWARD;
133 MULADD(at[0], at[6]); MULADD(at[1], at[5]);
134 COMBA_STORE(C->dp[1]);
135 /* 2 */
136 COMBA_FORWARD;
137 MULADD(at[0], at[7]); MULADD(at[1], at[6]); MULADD(at[2], at[5]);
138 COMBA_STORE(C->dp[2]);
139 /* 3 */
140 COMBA_FORWARD;
141 MULADD(at[0], at[8]); MULADD(at[1], at[7]); MULADD(at[2], at[6]); MULADD(at[3], at[5]);
142 COMBA_STORE(C->dp[3]);
143 /* 4 */
144 COMBA_FORWARD;
145 MULADD(at[0], at[9]); MULADD(at[1], at[8]); MULADD(at[2], at[7]); MULADD(at[3], at[6]); MULADD(at[4], at[5]);
146 COMBA_STORE(C->dp[4]);
147 /* 5 */
148 COMBA_FORWARD;
149 MULADD(at[1], at[9]); MULADD(at[2], at[8]); MULADD(at[3], at[7]); MULADD(at[4], at[6]);
150 COMBA_STORE(C->dp[5]);
151 /* 6 */
152 COMBA_FORWARD;
153 MULADD(at[2], at[9]); MULADD(at[3], at[8]); MULADD(at[4], at[7]);
154 COMBA_STORE(C->dp[6]);
155 /* 7 */
156 COMBA_FORWARD;
157 MULADD(at[3], at[9]); MULADD(at[4], at[8]);
158 COMBA_STORE(C->dp[7]);
159 /* 8 */
160 COMBA_FORWARD;
161 MULADD(at[4], at[9]);
162 COMBA_STORE(C->dp[8]);
163 COMBA_STORE2(C->dp[9]);
164 C->used = 10;
165 C->sign = A->sign ^ B->sign;
166 fp_clamp(C);
167 COMBA_FINI;
168 break;
169
170 case 6:
171 memcpy(at, A->dp, 6 * sizeof(fp_digit));
172 memcpy(at+6, B->dp, 6 * sizeof(fp_digit));
173 COMBA_START;
174
175 COMBA_CLEAR;
176 /* 0 */
177 MULADD(at[0], at[6]);
178 COMBA_STORE(C->dp[0]);
179 /* 1 */
180 COMBA_FORWARD;
181 MULADD(at[0], at[7]); MULADD(at[1], at[6]);
182 COMBA_STORE(C->dp[1]);
183 /* 2 */
184 COMBA_FORWARD;
185 MULADD(at[0], at[8]); MULADD(at[1], at[7]); MULADD(at[2], at[6]);
186 COMBA_STORE(C->dp[2]);
187 /* 3 */
188 COMBA_FORWARD;
189 MULADD(at[0], at[9]); MULADD(at[1], at[8]); MULADD(at[2], at[7]); MULADD(at[3], at[6]);
190 COMBA_STORE(C->dp[3]);
191 /* 4 */
192 COMBA_FORWARD;
193 MULADD(at[0], at[10]); MULADD(at[1], at[9]); MULADD(at[2], at[8]); MULADD(at[3], at[7]); MULADD(at[4], at[6]);
194 COMBA_STORE(C->dp[4]);
195 /* 5 */
196 COMBA_FORWARD;
197 MULADD(at[0], at[11]); MULADD(at[1], at[10]); MULADD(at[2], at[9]); MULADD(at[3], at[8]); MULADD(at[4], at[7]); MULADD(at[5], at[6]);
198 COMBA_STORE(C->dp[5]);
199 /* 6 */
200 COMBA_FORWARD;
201 MULADD(at[1], at[11]); MULADD(at[2], at[10]); MULADD(at[3], at[9]); MULADD(at[4], at[8]); MULADD(at[5], at[7]);
202 COMBA_STORE(C->dp[6]);
203 /* 7 */
204 COMBA_FORWARD;
205 MULADD(at[2], at[11]); MULADD(at[3], at[10]); MULADD(at[4], at[9]); MULADD(at[5], at[8]);
206 COMBA_STORE(C->dp[7]);
207 /* 8 */
208 COMBA_FORWARD;
209 MULADD(at[3], at[11]); MULADD(at[4], at[10]); MULADD(at[5], at[9]);
210 COMBA_STORE(C->dp[8]);
211 /* 9 */
212 COMBA_FORWARD;
213 MULADD(at[4], at[11]); MULADD(at[5], at[10]);
214 COMBA_STORE(C->dp[9]);
215 /* 10 */
216 COMBA_FORWARD;
217 MULADD(at[5], at[11]);
218 COMBA_STORE(C->dp[10]);
219 COMBA_STORE2(C->dp[11]);
220 C->used = 12;
221 C->sign = A->sign ^ B->sign;
222 fp_clamp(C);
223 COMBA_FINI;
224 break;
225
226 case 7:
227 memcpy(at, A->dp, 7 * sizeof(fp_digit));
228 memcpy(at+7, B->dp, 7 * sizeof(fp_digit));
229 COMBA_START;
230
231 COMBA_CLEAR;
232 /* 0 */
233 MULADD(at[0], at[7]);
234 COMBA_STORE(C->dp[0]);
235 /* 1 */
236 COMBA_FORWARD;
237 MULADD(at[0], at[8]); MULADD(at[1], at[7]);
238 COMBA_STORE(C->dp[1]);
239 /* 2 */
240 COMBA_FORWARD;
241 MULADD(at[0], at[9]); MULADD(at[1], at[8]); MULADD(at[2], at[7]);
242 COMBA_STORE(C->dp[2]);
243 /* 3 */
244 COMBA_FORWARD;
245 MULADD(at[0], at[10]); MULADD(at[1], at[9]); MULADD(at[2], at[8]); MULADD(at[3], at[7]);
246 COMBA_STORE(C->dp[3]);
247 /* 4 */
248 COMBA_FORWARD;
249 MULADD(at[0], at[11]); MULADD(at[1], at[10]); MULADD(at[2], at[9]); MULADD(at[3], at[8]); MULADD(at[4], at[7]);
250 COMBA_STORE(C->dp[4]);
251 /* 5 */
252 COMBA_FORWARD;
253 MULADD(at[0], at[12]); MULADD(at[1], at[11]); MULADD(at[2], at[10]); MULADD(at[3], at[9]); MULADD(at[4], at[8]); MULADD(at[5], at[7]);
254 COMBA_STORE(C->dp[5]);
255 /* 6 */
256 COMBA_FORWARD;
257 MULADD(at[0], at[13]); MULADD(at[1], at[12]); MULADD(at[2], at[11]); MULADD(at[3], at[10]); MULADD(at[4], at[9]); MULADD(at[5], at[8]); MULADD(at[6], at[7]);
258 COMBA_STORE(C->dp[6]);
259 /* 7 */
260 COMBA_FORWARD;
261 MULADD(at[1], at[13]); MULADD(at[2], at[12]); MULADD(at[3], at[11]); MULADD(at[4], at[10]); MULADD(at[5], at[9]); MULADD(at[6], at[8]);
262 COMBA_STORE(C->dp[7]);
263 /* 8 */
264 COMBA_FORWARD;
265 MULADD(at[2], at[13]); MULADD(at[3], at[12]); MULADD(at[4], at[11]); MULADD(at[5], at[10]); MULADD(at[6], at[9]);
266 COMBA_STORE(C->dp[8]);
267 /* 9 */
268 COMBA_FORWARD;
269 MULADD(at[3], at[13]); MULADD(at[4], at[12]); MULADD(at[5], at[11]); MULADD(at[6], at[10]);
270 COMBA_STORE(C->dp[9]);
271 /* 10 */
272 COMBA_FORWARD;
273 MULADD(at[4], at[13]); MULADD(at[5], at[12]); MULADD(at[6], at[11]);
274 COMBA_STORE(C->dp[10]);
275 /* 11 */
276 COMBA_FORWARD;
277 MULADD(at[5], at[13]); MULADD(at[6], at[12]);
278 COMBA_STORE(C->dp[11]);
279 /* 12 */
280 COMBA_FORWARD;
281 MULADD(at[6], at[13]);
282 COMBA_STORE(C->dp[12]);
283 COMBA_STORE2(C->dp[13]);
284 C->used = 14;
285 C->sign = A->sign ^ B->sign;
286 fp_clamp(C);
287 COMBA_FINI;
288 break;
289
290 case 8:
291 memcpy(at, A->dp, 8 * sizeof(fp_digit));
292 memcpy(at+8, B->dp, 8 * sizeof(fp_digit));
293 COMBA_START;
294
295 COMBA_CLEAR;
296 /* 0 */
297 MULADD(at[0], at[8]);
298 COMBA_STORE(C->dp[0]);
299 /* 1 */
300 COMBA_FORWARD;
301 MULADD(at[0], at[9]); MULADD(at[1], at[8]);
302 COMBA_STORE(C->dp[1]);
303 /* 2 */
304 COMBA_FORWARD;
305 MULADD(at[0], at[10]); MULADD(at[1], at[9]); MULADD(at[2], at[8]);
306 COMBA_STORE(C->dp[2]);
307 /* 3 */
308 COMBA_FORWARD;
309 MULADD(at[0], at[11]); MULADD(at[1], at[10]); MULADD(at[2], at[9]); MULADD(at[3], at[8]);
310 COMBA_STORE(C->dp[3]);
311 /* 4 */
312 COMBA_FORWARD;
313 MULADD(at[0], at[12]); MULADD(at[1], at[11]); MULADD(at[2], at[10]); MULADD(at[3], at[9]); MULADD(at[4], at[8]);
314 COMBA_STORE(C->dp[4]);
315 /* 5 */
316 COMBA_FORWARD;
317 MULADD(at[0], at[13]); MULADD(at[1], at[12]); MULADD(at[2], at[11]); MULADD(at[3], at[10]); MULADD(at[4], at[9]); MULADD(at[5], at[8]);
318 COMBA_STORE(C->dp[5]);
319 /* 6 */
320 COMBA_FORWARD;
321 MULADD(at[0], at[14]); MULADD(at[1], at[13]); MULADD(at[2], at[12]); MULADD(at[3], at[11]); MULADD(at[4], at[10]); MULADD(at[5], at[9]); MULADD(at[6], at[8]);
322 COMBA_STORE(C->dp[6]);
323 /* 7 */
324 COMBA_FORWARD;
325 MULADD(at[0], at[15]); MULADD(at[1], at[14]); MULADD(at[2], at[13]); MULADD(at[3], at[12]); MULADD(at[4], at[11]); MULADD(at[5], at[10]); MULADD(at[6], at[9]); MULADD(at[7], at[8]);
326 COMBA_STORE(C->dp[7]);
327 /* 8 */
328 COMBA_FORWARD;
329 MULADD(at[1], at[15]); MULADD(at[2], at[14]); MULADD(at[3], at[13]); MULADD(at[4], at[12]); MULADD(at[5], at[11]); MULADD(at[6], at[10]); MULADD(at[7], at[9]);
330 COMBA_STORE(C->dp[8]);
331 /* 9 */
332 COMBA_FORWARD;
333 MULADD(at[2], at[15]); MULADD(at[3], at[14]); MULADD(at[4], at[13]); MULADD(at[5], at[12]); MULADD(at[6], at[11]); MULADD(at[7], at[10]);
334 COMBA_STORE(C->dp[9]);
335 /* 10 */
336 COMBA_FORWARD;
337 MULADD(at[3], at[15]); MULADD(at[4], at[14]); MULADD(at[5], at[13]); MULADD(at[6], at[12]); MULADD(at[7], at[11]);
338 COMBA_STORE(C->dp[10]);
339 /* 11 */
340 COMBA_FORWARD;
341 MULADD(at[4], at[15]); MULADD(at[5], at[14]); MULADD(at[6], at[13]); MULADD(at[7], at[12]);
342 COMBA_STORE(C->dp[11]);
343 /* 12 */
344 COMBA_FORWARD;
345 MULADD(at[5], at[15]); MULADD(at[6], at[14]); MULADD(at[7], at[13]);
346 COMBA_STORE(C->dp[12]);
347 /* 13 */
348 COMBA_FORWARD;
349 MULADD(at[6], at[15]); MULADD(at[7], at[14]);
350 COMBA_STORE(C->dp[13]);
351 /* 14 */
352 COMBA_FORWARD;
353 MULADD(at[7], at[15]);
354 COMBA_STORE(C->dp[14]);
355 COMBA_STORE2(C->dp[15]);
356 C->used = 16;
357 C->sign = A->sign ^ B->sign;
358 fp_clamp(C);
359 COMBA_FINI;
360 break;
361
362 case 9:
363 memcpy(at, A->dp, 9 * sizeof(fp_digit));
364 memcpy(at+9, B->dp, 9 * sizeof(fp_digit));
365 COMBA_START;
366
367 COMBA_CLEAR;
368 /* 0 */
369 MULADD(at[0], at[9]);
370 COMBA_STORE(C->dp[0]);
371 /* 1 */
372 COMBA_FORWARD;
373 MULADD(at[0], at[10]); MULADD(at[1], at[9]);
374 COMBA_STORE(C->dp[1]);
375 /* 2 */
376 COMBA_FORWARD;
377 MULADD(at[0], at[11]); MULADD(at[1], at[10]); MULADD(at[2], at[9]);
378 COMBA_STORE(C->dp[2]);
379 /* 3 */
380 COMBA_FORWARD;
381 MULADD(at[0], at[12]); MULADD(at[1], at[11]); MULADD(at[2], at[10]); MULADD(at[3], at[9]);
382 COMBA_STORE(C->dp[3]);
383 /* 4 */
384 COMBA_FORWARD;
385 MULADD(at[0], at[13]); MULADD(at[1], at[12]); MULADD(at[2], at[11]); MULADD(at[3], at[10]); MULADD(at[4], at[9]);
386 COMBA_STORE(C->dp[4]);
387 /* 5 */
388 COMBA_FORWARD;
389 MULADD(at[0], at[14]); MULADD(at[1], at[13]); MULADD(at[2], at[12]); MULADD(at[3], at[11]); MULADD(at[4], at[10]); MULADD(at[5], at[9]);
390 COMBA_STORE(C->dp[5]);
391 /* 6 */
392 COMBA_FORWARD;
393 MULADD(at[0], at[15]); MULADD(at[1], at[14]); MULADD(at[2], at[13]); MULADD(at[3], at[12]); MULADD(at[4], at[11]); MULADD(at[5], at[10]); MULADD(at[6], at[9]);
394 COMBA_STORE(C->dp[6]);
395 /* 7 */
396 COMBA_FORWARD;
397 MULADD(at[0], at[16]); MULADD(at[1], at[15]); MULADD(at[2], at[14]); MULADD(at[3], at[13]); MULADD(at[4], at[12]); MULADD(at[5], at[11]); MULADD(at[6], at[10]); MULADD(at[7], at[9]);
398 COMBA_STORE(C->dp[7]);
399 /* 8 */
400 COMBA_FORWARD;
401 MULADD(at[0], at[17]); MULADD(at[1], at[16]); MULADD(at[2], at[15]); MULADD(at[3], at[14]); MULADD(at[4], at[13]); MULADD(at[5], at[12]); MULADD(at[6], at[11]); MULADD(at[7], at[10]); MULADD(at[8], at[9]);
402 COMBA_STORE(C->dp[8]);
403 /* 9 */
404 COMBA_FORWARD;
405 MULADD(at[1], at[17]); MULADD(at[2], at[16]); MULADD(at[3], at[15]); MULADD(at[4], at[14]); MULADD(at[5], at[13]); MULADD(at[6], at[12]); MULADD(at[7], at[11]); MULADD(at[8], at[10]);
406 COMBA_STORE(C->dp[9]);
407 /* 10 */
408 COMBA_FORWARD;
409 MULADD(at[2], at[17]); MULADD(at[3], at[16]); MULADD(at[4], at[15]); MULADD(at[5], at[14]); MULADD(at[6], at[13]); MULADD(at[7], at[12]); MULADD(at[8], at[11]);
410 COMBA_STORE(C->dp[10]);
411 /* 11 */
412 COMBA_FORWARD;
413 MULADD(at[3], at[17]); MULADD(at[4], at[16]); MULADD(at[5], at[15]); MULADD(at[6], at[14]); MULADD(at[7], at[13]); MULADD(at[8], at[12]);
414 COMBA_STORE(C->dp[11]);
415 /* 12 */
416 COMBA_FORWARD;
417 MULADD(at[4], at[17]); MULADD(at[5], at[16]); MULADD(at[6], at[15]); MULADD(at[7], at[14]); MULADD(at[8], at[13]);
418 COMBA_STORE(C->dp[12]);
419 /* 13 */
420 COMBA_FORWARD;
421 MULADD(at[5], at[17]); MULADD(at[6], at[16]); MULADD(at[7], at[15]); MULADD(at[8], at[14]);
422 COMBA_STORE(C->dp[13]);
423 /* 14 */
424 COMBA_FORWARD;
425 MULADD(at[6], at[17]); MULADD(at[7], at[16]); MULADD(at[8], at[15]);
426 COMBA_STORE(C->dp[14]);
427 /* 15 */
428 COMBA_FORWARD;
429 MULADD(at[7], at[17]); MULADD(at[8], at[16]);
430 COMBA_STORE(C->dp[15]);
431 /* 16 */
432 COMBA_FORWARD;
433 MULADD(at[8], at[17]);
434 COMBA_STORE(C->dp[16]);
435 COMBA_STORE2(C->dp[17]);
436 C->used = 18;
437 C->sign = A->sign ^ B->sign;
438 fp_clamp(C);
439 COMBA_FINI;
440 break;
441
442 case 10:
443 memcpy(at, A->dp, 10 * sizeof(fp_digit));
444 memcpy(at+10, B->dp, 10 * sizeof(fp_digit));
445 COMBA_START;
446
447 COMBA_CLEAR;
448 /* 0 */
449 MULADD(at[0], at[10]);
450 COMBA_STORE(C->dp[0]);
451 /* 1 */
452 COMBA_FORWARD;
453 MULADD(at[0], at[11]); MULADD(at[1], at[10]);
454 COMBA_STORE(C->dp[1]);
455 /* 2 */
456 COMBA_FORWARD;
457 MULADD(at[0], at[12]); MULADD(at[1], at[11]); MULADD(at[2], at[10]);
458 COMBA_STORE(C->dp[2]);
459 /* 3 */
460 COMBA_FORWARD;
461 MULADD(at[0], at[13]); MULADD(at[1], at[12]); MULADD(at[2], at[11]); MULADD(at[3], at[10]);
462 COMBA_STORE(C->dp[3]);
463 /* 4 */
464 COMBA_FORWARD;
465 MULADD(at[0], at[14]); MULADD(at[1], at[13]); MULADD(at[2], at[12]); MULADD(at[3], at[11]); MULADD(at[4], at[10]);
466 COMBA_STORE(C->dp[4]);
467 /* 5 */
468 COMBA_FORWARD;
469 MULADD(at[0], at[15]); MULADD(at[1], at[14]); MULADD(at[2], at[13]); MULADD(at[3], at[12]); MULADD(at[4], at[11]); MULADD(at[5], at[10]);
470 COMBA_STORE(C->dp[5]);
471 /* 6 */
472 COMBA_FORWARD;
473 MULADD(at[0], at[16]); MULADD(at[1], at[15]); MULADD(at[2], at[14]); MULADD(at[3], at[13]); MULADD(at[4], at[12]); MULADD(at[5], at[11]); MULADD(at[6], at[10]);
474 COMBA_STORE(C->dp[6]);
475 /* 7 */
476 COMBA_FORWARD;
477 MULADD(at[0], at[17]); MULADD(at[1], at[16]); MULADD(at[2], at[15]); MULADD(at[3], at[14]); MULADD(at[4], at[13]); MULADD(at[5], at[12]); MULADD(at[6], at[11]); MULADD(at[7], at[10]);
478 COMBA_STORE(C->dp[7]);
479 /* 8 */
480 COMBA_FORWARD;
481 MULADD(at[0], at[18]); MULADD(at[1], at[17]); MULADD(at[2], at[16]); MULADD(at[3], at[15]); MULADD(at[4], at[14]); MULADD(at[5], at[13]); MULADD(at[6], at[12]); MULADD(at[7], at[11]); MULADD(at[8], at[10]);
482 COMBA_STORE(C->dp[8]);
483 /* 9 */
484 COMBA_FORWARD;
485 MULADD(at[0], at[19]); MULADD(at[1], at[18]); MULADD(at[2], at[17]); MULADD(at[3], at[16]); MULADD(at[4], at[15]); MULADD(at[5], at[14]); MULADD(at[6], at[13]); MULADD(at[7], at[12]); MULADD(at[8], at[11]); MULADD(at[9], at[10]);
486 COMBA_STORE(C->dp[9]);
487 /* 10 */
488 COMBA_FORWARD;
489 MULADD(at[1], at[19]); MULADD(at[2], at[18]); MULADD(at[3], at[17]); MULADD(at[4], at[16]); MULADD(at[5], at[15]); MULADD(at[6], at[14]); MULADD(at[7], at[13]); MULADD(at[8], at[12]); MULADD(at[9], at[11]);
490 COMBA_STORE(C->dp[10]);
491 /* 11 */
492 COMBA_FORWARD;
493 MULADD(at[2], at[19]); MULADD(at[3], at[18]); MULADD(at[4], at[17]); MULADD(at[5], at[16]); MULADD(at[6], at[15]); MULADD(at[7], at[14]); MULADD(at[8], at[13]); MULADD(at[9], at[12]);
494 COMBA_STORE(C->dp[11]);
495 /* 12 */
496 COMBA_FORWARD;
497 MULADD(at[3], at[19]); MULADD(at[4], at[18]); MULADD(at[5], at[17]); MULADD(at[6], at[16]); MULADD(at[7], at[15]); MULADD(at[8], at[14]); MULADD(at[9], at[13]);
498 COMBA_STORE(C->dp[12]);
499 /* 13 */
500 COMBA_FORWARD;
501 MULADD(at[4], at[19]); MULADD(at[5], at[18]); MULADD(at[6], at[17]); MULADD(at[7], at[16]); MULADD(at[8], at[15]); MULADD(at[9], at[14]);
502 COMBA_STORE(C->dp[13]);
503 /* 14 */
504 COMBA_FORWARD;
505 MULADD(at[5], at[19]); MULADD(at[6], at[18]); MULADD(at[7], at[17]); MULADD(at[8], at[16]); MULADD(at[9], at[15]);
506 COMBA_STORE(C->dp[14]);
507 /* 15 */
508 COMBA_FORWARD;
509 MULADD(at[6], at[19]); MULADD(at[7], at[18]); MULADD(at[8], at[17]); MULADD(at[9], at[16]);
510 COMBA_STORE(C->dp[15]);
511 /* 16 */
512 COMBA_FORWARD;
513 MULADD(at[7], at[19]); MULADD(at[8], at[18]); MULADD(at[9], at[17]);
514 COMBA_STORE(C->dp[16]);
515 /* 17 */
516 COMBA_FORWARD;
517 MULADD(at[8], at[19]); MULADD(at[9], at[18]);
518 COMBA_STORE(C->dp[17]);
519 /* 18 */
520 COMBA_FORWARD;
521 MULADD(at[9], at[19]);
522 COMBA_STORE(C->dp[18]);
523 COMBA_STORE2(C->dp[19]);
524 C->used = 20;
525 C->sign = A->sign ^ B->sign;
526 fp_clamp(C);
527 COMBA_FINI;
528 break;
529
530 case 11:
531 memcpy(at, A->dp, 11 * sizeof(fp_digit));
532 memcpy(at+11, B->dp, 11 * sizeof(fp_digit));
533 COMBA_START;
534
535 COMBA_CLEAR;
536 /* 0 */
537 MULADD(at[0], at[11]);
538 COMBA_STORE(C->dp[0]);
539 /* 1 */
540 COMBA_FORWARD;
541 MULADD(at[0], at[12]); MULADD(at[1], at[11]);
542 COMBA_STORE(C->dp[1]);
543 /* 2 */
544 COMBA_FORWARD;
545 MULADD(at[0], at[13]); MULADD(at[1], at[12]); MULADD(at[2], at[11]);
546 COMBA_STORE(C->dp[2]);
547 /* 3 */
548 COMBA_FORWARD;
549 MULADD(at[0], at[14]); MULADD(at[1], at[13]); MULADD(at[2], at[12]); MULADD(at[3], at[11]);
550 COMBA_STORE(C->dp[3]);
551 /* 4 */
552 COMBA_FORWARD;
553 MULADD(at[0], at[15]); MULADD(at[1], at[14]); MULADD(at[2], at[13]); MULADD(at[3], at[12]); MULADD(at[4], at[11]);
554 COMBA_STORE(C->dp[4]);
555 /* 5 */
556 COMBA_FORWARD;
557 MULADD(at[0], at[16]); MULADD(at[1], at[15]); MULADD(at[2], at[14]); MULADD(at[3], at[13]); MULADD(at[4], at[12]); MULADD(at[5], at[11]);
558 COMBA_STORE(C->dp[5]);
559 /* 6 */
560 COMBA_FORWARD;
561 MULADD(at[0], at[17]); MULADD(at[1], at[16]); MULADD(at[2], at[15]); MULADD(at[3], at[14]); MULADD(at[4], at[13]); MULADD(at[5], at[12]); MULADD(at[6], at[11]);
562 COMBA_STORE(C->dp[6]);
563 /* 7 */
564 COMBA_FORWARD;
565 MULADD(at[0], at[18]); MULADD(at[1], at[17]); MULADD(at[2], at[16]); MULADD(at[3], at[15]); MULADD(at[4], at[14]); MULADD(at[5], at[13]); MULADD(at[6], at[12]); MULADD(at[7], at[11]);
566 COMBA_STORE(C->dp[7]);
567 /* 8 */
568 COMBA_FORWARD;
569 MULADD(at[0], at[19]); MULADD(at[1], at[18]); MULADD(at[2], at[17]); MULADD(at[3], at[16]); MULADD(at[4], at[15]); MULADD(at[5], at[14]); MULADD(at[6], at[13]); MULADD(at[7], at[12]); MULADD(at[8], at[11]);
570 COMBA_STORE(C->dp[8]);
571 /* 9 */
572 COMBA_FORWARD;
573 MULADD(at[0], at[20]); MULADD(at[1], at[19]); MULADD(at[2], at[18]); MULADD(at[3], at[17]); MULADD(at[4], at[16]); MULADD(at[5], at[15]); MULADD(at[6], at[14]); MULADD(at[7], at[13]); MULADD(at[8], at[12]); MULADD(at[9], at[11]);
574 COMBA_STORE(C->dp[9]);
575 /* 10 */
576 COMBA_FORWARD;
577 MULADD(at[0], at[21]); MULADD(at[1], at[20]); MULADD(at[2], at[19]); MULADD(at[3], at[18]); MULADD(at[4], at[17]); MULADD(at[5], at[16]); MULADD(at[6], at[15]); MULADD(at[7], at[14]); MULADD(at[8], at[13]); MULADD(at[9], at[12]); MULADD(at[10], at[11]);
578 COMBA_STORE(C->dp[10]);
579 /* 11 */
580 COMBA_FORWARD;
581 MULADD(at[1], at[21]); MULADD(at[2], at[20]); MULADD(at[3], at[19]); MULADD(at[4], at[18]); MULADD(at[5], at[17]); MULADD(at[6], at[16]); MULADD(at[7], at[15]); MULADD(at[8], at[14]); MULADD(at[9], at[13]); MULADD(at[10], at[12]);
582 COMBA_STORE(C->dp[11]);
583 /* 12 */
584 COMBA_FORWARD;
585 MULADD(at[2], at[21]); MULADD(at[3], at[20]); MULADD(at[4], at[19]); MULADD(at[5], at[18]); MULADD(at[6], at[17]); MULADD(at[7], at[16]); MULADD(at[8], at[15]); MULADD(at[9], at[14]); MULADD(at[10], at[13]);
586 COMBA_STORE(C->dp[12]);
587 /* 13 */
588 COMBA_FORWARD;
589 MULADD(at[3], at[21]); MULADD(at[4], at[20]); MULADD(at[5], at[19]); MULADD(at[6], at[18]); MULADD(at[7], at[17]); MULADD(at[8], at[16]); MULADD(at[9], at[15]); MULADD(at[10], at[14]);
590 COMBA_STORE(C->dp[13]);
591 /* 14 */
592 COMBA_FORWARD;
593 MULADD(at[4], at[21]); MULADD(at[5], at[20]); MULADD(at[6], at[19]); MULADD(at[7], at[18]); MULADD(at[8], at[17]); MULADD(at[9], at[16]); MULADD(at[10], at[15]);
594 COMBA_STORE(C->dp[14]);
595 /* 15 */
596 COMBA_FORWARD;
597 MULADD(at[5], at[21]); MULADD(at[6], at[20]); MULADD(at[7], at[19]); MULADD(at[8], at[18]); MULADD(at[9], at[17]); MULADD(at[10], at[16]);
598 COMBA_STORE(C->dp[15]);
599 /* 16 */
600 COMBA_FORWARD;
601 MULADD(at[6], at[21]); MULADD(at[7], at[20]); MULADD(at[8], at[19]); MULADD(at[9], at[18]); MULADD(at[10], at[17]);
602 COMBA_STORE(C->dp[16]);
603 /* 17 */
604 COMBA_FORWARD;
605 MULADD(at[7], at[21]); MULADD(at[8], at[20]); MULADD(at[9], at[19]); MULADD(at[10], at[18]);
606 COMBA_STORE(C->dp[17]);
607 /* 18 */
608 COMBA_FORWARD;
609 MULADD(at[8], at[21]); MULADD(at[9], at[20]); MULADD(at[10], at[19]);
610 COMBA_STORE(C->dp[18]);
611 /* 19 */
612 COMBA_FORWARD;
613 MULADD(at[9], at[21]); MULADD(at[10], at[20]);
614 COMBA_STORE(C->dp[19]);
615 /* 20 */
616 COMBA_FORWARD;
617 MULADD(at[10], at[21]);
618 COMBA_STORE(C->dp[20]);
619 COMBA_STORE2(C->dp[21]);
620 C->used = 22;
621 C->sign = A->sign ^ B->sign;
622 fp_clamp(C);
623 COMBA_FINI;
624 break;
625
626 case 12:
627 memcpy(at, A->dp, 12 * sizeof(fp_digit));
628 memcpy(at+12, B->dp, 12 * sizeof(fp_digit));
629 COMBA_START;
630
631 COMBA_CLEAR;
632 /* 0 */
633 MULADD(at[0], at[12]);
634 COMBA_STORE(C->dp[0]);
635 /* 1 */
636 COMBA_FORWARD;
637 MULADD(at[0], at[13]); MULADD(at[1], at[12]);
638 COMBA_STORE(C->dp[1]);
639 /* 2 */
640 COMBA_FORWARD;
641 MULADD(at[0], at[14]); MULADD(at[1], at[13]); MULADD(at[2], at[12]);
642 COMBA_STORE(C->dp[2]);
643 /* 3 */
644 COMBA_FORWARD;
645 MULADD(at[0], at[15]); MULADD(at[1], at[14]); MULADD(at[2], at[13]); MULADD(at[3], at[12]);
646 COMBA_STORE(C->dp[3]);
647 /* 4 */
648 COMBA_FORWARD;
649 MULADD(at[0], at[16]); MULADD(at[1], at[15]); MULADD(at[2], at[14]); MULADD(at[3], at[13]); MULADD(at[4], at[12]);
650 COMBA_STORE(C->dp[4]);
651 /* 5 */
652 COMBA_FORWARD;
653 MULADD(at[0], at[17]); MULADD(at[1], at[16]); MULADD(at[2], at[15]); MULADD(at[3], at[14]); MULADD(at[4], at[13]); MULADD(at[5], at[12]);
654 COMBA_STORE(C->dp[5]);
655 /* 6 */
656 COMBA_FORWARD;
657 MULADD(at[0], at[18]); MULADD(at[1], at[17]); MULADD(at[2], at[16]); MULADD(at[3], at[15]); MULADD(at[4], at[14]); MULADD(at[5], at[13]); MULADD(at[6], at[12]);
658 COMBA_STORE(C->dp[6]);
659 /* 7 */
660 COMBA_FORWARD;
661 MULADD(at[0], at[19]); MULADD(at[1], at[18]); MULADD(at[2], at[17]); MULADD(at[3], at[16]); MULADD(at[4], at[15]); MULADD(at[5], at[14]); MULADD(at[6], at[13]); MULADD(at[7], at[12]);
662 COMBA_STORE(C->dp[7]);
663 /* 8 */
664 COMBA_FORWARD;
665 MULADD(at[0], at[20]); MULADD(at[1], at[19]); MULADD(at[2], at[18]); MULADD(at[3], at[17]); MULADD(at[4], at[16]); MULADD(at[5], at[15]); MULADD(at[6], at[14]); MULADD(at[7], at[13]); MULADD(at[8], at[12]);
666 COMBA_STORE(C->dp[8]);
667 /* 9 */
668 COMBA_FORWARD;
669 MULADD(at[0], at[21]); MULADD(at[1], at[20]); MULADD(at[2], at[19]); MULADD(at[3], at[18]); MULADD(at[4], at[17]); MULADD(at[5], at[16]); MULADD(at[6], at[15]); MULADD(at[7], at[14]); MULADD(at[8], at[13]); MULADD(at[9], at[12]);
670 COMBA_STORE(C->dp[9]);
671 /* 10 */
672 COMBA_FORWARD;
673 MULADD(at[0], at[22]); MULADD(at[1], at[21]); MULADD(at[2], at[20]); MULADD(at[3], at[19]); MULADD(at[4], at[18]); MULADD(at[5], at[17]); MULADD(at[6], at[16]); MULADD(at[7], at[15]); MULADD(at[8], at[14]); MULADD(at[9], at[13]); MULADD(at[10], at[12]);
674 COMBA_STORE(C->dp[10]);
675 /* 11 */
676 COMBA_FORWARD;
677 MULADD(at[0], at[23]); MULADD(at[1], at[22]); MULADD(at[2], at[21]); MULADD(at[3], at[20]); MULADD(at[4], at[19]); MULADD(at[5], at[18]); MULADD(at[6], at[17]); MULADD(at[7], at[16]); MULADD(at[8], at[15]); MULADD(at[9], at[14]); MULADD(at[10], at[13]); MULADD(at[11], at[12]);
678 COMBA_STORE(C->dp[11]);
679 /* 12 */
680 COMBA_FORWARD;
681 MULADD(at[1], at[23]); MULADD(at[2], at[22]); MULADD(at[3], at[21]); MULADD(at[4], at[20]); MULADD(at[5], at[19]); MULADD(at[6], at[18]); MULADD(at[7], at[17]); MULADD(at[8], at[16]); MULADD(at[9], at[15]); MULADD(at[10], at[14]); MULADD(at[11], at[13]);
682 COMBA_STORE(C->dp[12]);
683 /* 13 */
684 COMBA_FORWARD;
685 MULADD(at[2], at[23]); MULADD(at[3], at[22]); MULADD(at[4], at[21]); MULADD(at[5], at[20]); MULADD(at[6], at[19]); MULADD(at[7], at[18]); MULADD(at[8], at[17]); MULADD(at[9], at[16]); MULADD(at[10], at[15]); MULADD(at[11], at[14]);
686 COMBA_STORE(C->dp[13]);
687 /* 14 */
688 COMBA_FORWARD;
689 MULADD(at[3], at[23]); MULADD(at[4], at[22]); MULADD(at[5], at[21]); MULADD(at[6], at[20]); MULADD(at[7], at[19]); MULADD(at[8], at[18]); MULADD(at[9], at[17]); MULADD(at[10], at[16]); MULADD(at[11], at[15]);
690 COMBA_STORE(C->dp[14]);
691 /* 15 */
692 COMBA_FORWARD;
693 MULADD(at[4], at[23]); MULADD(at[5], at[22]); MULADD(at[6], at[21]); MULADD(at[7], at[20]); MULADD(at[8], at[19]); MULADD(at[9], at[18]); MULADD(at[10], at[17]); MULADD(at[11], at[16]);
694 COMBA_STORE(C->dp[15]);
695 /* 16 */
696 COMBA_FORWARD;
697 MULADD(at[5], at[23]); MULADD(at[6], at[22]); MULADD(at[7], at[21]); MULADD(at[8], at[20]); MULADD(at[9], at[19]); MULADD(at[10], at[18]); MULADD(at[11], at[17]);
698 COMBA_STORE(C->dp[16]);
699 /* 17 */
700 COMBA_FORWARD;
701 MULADD(at[6], at[23]); MULADD(at[7], at[22]); MULADD(at[8], at[21]); MULADD(at[9], at[20]); MULADD(at[10], at[19]); MULADD(at[11], at[18]);
702 COMBA_STORE(C->dp[17]);
703 /* 18 */
704 COMBA_FORWARD;
705 MULADD(at[7], at[23]); MULADD(at[8], at[22]); MULADD(at[9], at[21]); MULADD(at[10], at[20]); MULADD(at[11], at[19]);
706 COMBA_STORE(C->dp[18]);
707 /* 19 */
708 COMBA_FORWARD;
709 MULADD(at[8], at[23]); MULADD(at[9], at[22]); MULADD(at[10], at[21]); MULADD(at[11], at[20]);
710 COMBA_STORE(C->dp[19]);
711 /* 20 */
712 COMBA_FORWARD;
713 MULADD(at[9], at[23]); MULADD(at[10], at[22]); MULADD(at[11], at[21]);
714 COMBA_STORE(C->dp[20]);
715 /* 21 */
716 COMBA_FORWARD;
717 MULADD(at[10], at[23]); MULADD(at[11], at[22]);
718 COMBA_STORE(C->dp[21]);
719 /* 22 */
720 COMBA_FORWARD;
721 MULADD(at[11], at[23]);
722 COMBA_STORE(C->dp[22]);
723 COMBA_STORE2(C->dp[23]);
724 C->used = 24;
725 C->sign = A->sign ^ B->sign;
726 fp_clamp(C);
727 COMBA_FINI;
728 break;
729
730 case 13:
731 memcpy(at, A->dp, 13 * sizeof(fp_digit));
732 memcpy(at+13, B->dp, 13 * sizeof(fp_digit));
733 COMBA_START;
734
735 COMBA_CLEAR;
736 /* 0 */
737 MULADD(at[0], at[13]);
738 COMBA_STORE(C->dp[0]);
739 /* 1 */
740 COMBA_FORWARD;
741 MULADD(at[0], at[14]); MULADD(at[1], at[13]);
742 COMBA_STORE(C->dp[1]);
743 /* 2 */
744 COMBA_FORWARD;
745 MULADD(at[0], at[15]); MULADD(at[1], at[14]); MULADD(at[2], at[13]);
746 COMBA_STORE(C->dp[2]);
747 /* 3 */
748 COMBA_FORWARD;
749 MULADD(at[0], at[16]); MULADD(at[1], at[15]); MULADD(at[2], at[14]); MULADD(at[3], at[13]);
750 COMBA_STORE(C->dp[3]);
751 /* 4 */
752 COMBA_FORWARD;
753 MULADD(at[0], at[17]); MULADD(at[1], at[16]); MULADD(at[2], at[15]); MULADD(at[3], at[14]); MULADD(at[4], at[13]);
754 COMBA_STORE(C->dp[4]);
755 /* 5 */
756 COMBA_FORWARD;
757 MULADD(at[0], at[18]); MULADD(at[1], at[17]); MULADD(at[2], at[16]); MULADD(at[3], at[15]); MULADD(at[4], at[14]); MULADD(at[5], at[13]);
758 COMBA_STORE(C->dp[5]);
759 /* 6 */
760 COMBA_FORWARD;
761 MULADD(at[0], at[19]); MULADD(at[1], at[18]); MULADD(at[2], at[17]); MULADD(at[3], at[16]); MULADD(at[4], at[15]); MULADD(at[5], at[14]); MULADD(at[6], at[13]);
762 COMBA_STORE(C->dp[6]);
763 /* 7 */
764 COMBA_FORWARD;
765 MULADD(at[0], at[20]); MULADD(at[1], at[19]); MULADD(at[2], at[18]); MULADD(at[3], at[17]); MULADD(at[4], at[16]); MULADD(at[5], at[15]); MULADD(at[6], at[14]); MULADD(at[7], at[13]);
766 COMBA_STORE(C->dp[7]);
767 /* 8 */
768 COMBA_FORWARD;
769 MULADD(at[0], at[21]); MULADD(at[1], at[20]); MULADD(at[2], at[19]); MULADD(at[3], at[18]); MULADD(at[4], at[17]); MULADD(at[5], at[16]); MULADD(at[6], at[15]); MULADD(at[7], at[14]); MULADD(at[8], at[13]);
770 COMBA_STORE(C->dp[8]);
771 /* 9 */
772 COMBA_FORWARD;
773 MULADD(at[0], at[22]); MULADD(at[1], at[21]); MULADD(at[2], at[20]); MULADD(at[3], at[19]); MULADD(at[4], at[18]); MULADD(at[5], at[17]); MULADD(at[6], at[16]); MULADD(at[7], at[15]); MULADD(at[8], at[14]); MULADD(at[9], at[13]);
774 COMBA_STORE(C->dp[9]);
775 /* 10 */
776 COMBA_FORWARD;
777 MULADD(at[0], at[23]); MULADD(at[1], at[22]); MULADD(at[2], at[21]); MULADD(at[3], at[20]); MULADD(at[4], at[19]); MULADD(at[5], at[18]); MULADD(at[6], at[17]); MULADD(at[7], at[16]); MULADD(at[8], at[15]); MULADD(at[9], at[14]); MULADD(at[10], at[13]);
778 COMBA_STORE(C->dp[10]);
779 /* 11 */
780 COMBA_FORWARD;
781 MULADD(at[0], at[24]); MULADD(at[1], at[23]); MULADD(at[2], at[22]); MULADD(at[3], at[21]); MULADD(at[4], at[20]); MULADD(at[5], at[19]); MULADD(at[6], at[18]); MULADD(at[7], at[17]); MULADD(at[8], at[16]); MULADD(at[9], at[15]); MULADD(at[10], at[14]); MULADD(at[11], at[13]);
782 COMBA_STORE(C->dp[11]);
783 /* 12 */
784 COMBA_FORWARD;
785 MULADD(at[0], at[25]); MULADD(at[1], at[24]); MULADD(at[2], at[23]); MULADD(at[3], at[22]); MULADD(at[4], at[21]); MULADD(at[5], at[20]); MULADD(at[6], at[19]); MULADD(at[7], at[18]); MULADD(at[8], at[17]); MULADD(at[9], at[16]); MULADD(at[10], at[15]); MULADD(at[11], at[14]); MULADD(at[12], at[13]);
786 COMBA_STORE(C->dp[12]);
787 /* 13 */
788 COMBA_FORWARD;
789 MULADD(at[1], at[25]); MULADD(at[2], at[24]); MULADD(at[3], at[23]); MULADD(at[4], at[22]); MULADD(at[5], at[21]); MULADD(at[6], at[20]); MULADD(at[7], at[19]); MULADD(at[8], at[18]); MULADD(at[9], at[17]); MULADD(at[10], at[16]); MULADD(at[11], at[15]); MULADD(at[12], at[14]);
790 COMBA_STORE(C->dp[13]);
791 /* 14 */
792 COMBA_FORWARD;
793 MULADD(at[2], at[25]); MULADD(at[3], at[24]); MULADD(at[4], at[23]); MULADD(at[5], at[22]); MULADD(at[6], at[21]); MULADD(at[7], at[20]); MULADD(at[8], at[19]); MULADD(at[9], at[18]); MULADD(at[10], at[17]); MULADD(at[11], at[16]); MULADD(at[12], at[15]);
794 COMBA_STORE(C->dp[14]);
795 /* 15 */
796 COMBA_FORWARD;
797 MULADD(at[3], at[25]); MULADD(at[4], at[24]); MULADD(at[5], at[23]); MULADD(at[6], at[22]); MULADD(at[7], at[21]); MULADD(at[8], at[20]); MULADD(at[9], at[19]); MULADD(at[10], at[18]); MULADD(at[11], at[17]); MULADD(at[12], at[16]);
798 COMBA_STORE(C->dp[15]);
799 /* 16 */
800 COMBA_FORWARD;
801 MULADD(at[4], at[25]); MULADD(at[5], at[24]); MULADD(at[6], at[23]); MULADD(at[7], at[22]); MULADD(at[8], at[21]); MULADD(at[9], at[20]); MULADD(at[10], at[19]); MULADD(at[11], at[18]); MULADD(at[12], at[17]);
802 COMBA_STORE(C->dp[16]);
803 /* 17 */
804 COMBA_FORWARD;
805 MULADD(at[5], at[25]); MULADD(at[6], at[24]); MULADD(at[7], at[23]); MULADD(at[8], at[22]); MULADD(at[9], at[21]); MULADD(at[10], at[20]); MULADD(at[11], at[19]); MULADD(at[12], at[18]);
806 COMBA_STORE(C->dp[17]);
807 /* 18 */
808 COMBA_FORWARD;
809 MULADD(at[6], at[25]); MULADD(at[7], at[24]); MULADD(at[8], at[23]); MULADD(at[9], at[22]); MULADD(at[10], at[21]); MULADD(at[11], at[20]); MULADD(at[12], at[19]);
810 COMBA_STORE(C->dp[18]);
811 /* 19 */
812 COMBA_FORWARD;
813 MULADD(at[7], at[25]); MULADD(at[8], at[24]); MULADD(at[9], at[23]); MULADD(at[10], at[22]); MULADD(at[11], at[21]); MULADD(at[12], at[20]);
814 COMBA_STORE(C->dp[19]);
815 /* 20 */
816 COMBA_FORWARD;
817 MULADD(at[8], at[25]); MULADD(at[9], at[24]); MULADD(at[10], at[23]); MULADD(at[11], at[22]); MULADD(at[12], at[21]);
818 COMBA_STORE(C->dp[20]);
819 /* 21 */
820 COMBA_FORWARD;
821 MULADD(at[9], at[25]); MULADD(at[10], at[24]); MULADD(at[11], at[23]); MULADD(at[12], at[22]);
822 COMBA_STORE(C->dp[21]);
823 /* 22 */
824 COMBA_FORWARD;
825 MULADD(at[10], at[25]); MULADD(at[11], at[24]); MULADD(at[12], at[23]);
826 COMBA_STORE(C->dp[22]);
827 /* 23 */
828 COMBA_FORWARD;
829 MULADD(at[11], at[25]); MULADD(at[12], at[24]);
830 COMBA_STORE(C->dp[23]);
831 /* 24 */
832 COMBA_FORWARD;
833 MULADD(at[12], at[25]);
834 COMBA_STORE(C->dp[24]);
835 COMBA_STORE2(C->dp[25]);
836 C->used = 26;
837 C->sign = A->sign ^ B->sign;
838 fp_clamp(C);
839 COMBA_FINI;
840 break;
841
842 case 14:
843 memcpy(at, A->dp, 14 * sizeof(fp_digit));
844 memcpy(at+14, B->dp, 14 * sizeof(fp_digit));
845 COMBA_START;
846
847 COMBA_CLEAR;
848 /* 0 */
849 MULADD(at[0], at[14]);
850 COMBA_STORE(C->dp[0]);
851 /* 1 */
852 COMBA_FORWARD;
853 MULADD(at[0], at[15]); MULADD(at[1], at[14]);
854 COMBA_STORE(C->dp[1]);
855 /* 2 */
856 COMBA_FORWARD;
857 MULADD(at[0], at[16]); MULADD(at[1], at[15]); MULADD(at[2], at[14]);
858 COMBA_STORE(C->dp[2]);
859 /* 3 */
860 COMBA_FORWARD;
861 MULADD(at[0], at[17]); MULADD(at[1], at[16]); MULADD(at[2], at[15]); MULADD(at[3], at[14]);
862 COMBA_STORE(C->dp[3]);
863 /* 4 */
864 COMBA_FORWARD;
865 MULADD(at[0], at[18]); MULADD(at[1], at[17]); MULADD(at[2], at[16]); MULADD(at[3], at[15]); MULADD(at[4], at[14]);
866 COMBA_STORE(C->dp[4]);
867 /* 5 */
868 COMBA_FORWARD;
869 MULADD(at[0], at[19]); MULADD(at[1], at[18]); MULADD(at[2], at[17]); MULADD(at[3], at[16]); MULADD(at[4], at[15]); MULADD(at[5], at[14]);
870 COMBA_STORE(C->dp[5]);
871 /* 6 */
872 COMBA_FORWARD;
873 MULADD(at[0], at[20]); MULADD(at[1], at[19]); MULADD(at[2], at[18]); MULADD(at[3], at[17]); MULADD(at[4], at[16]); MULADD(at[5], at[15]); MULADD(at[6], at[14]);
874 COMBA_STORE(C->dp[6]);
875 /* 7 */
876 COMBA_FORWARD;
877 MULADD(at[0], at[21]); MULADD(at[1], at[20]); MULADD(at[2], at[19]); MULADD(at[3], at[18]); MULADD(at[4], at[17]); MULADD(at[5], at[16]); MULADD(at[6], at[15]); MULADD(at[7], at[14]);
878 COMBA_STORE(C->dp[7]);
879 /* 8 */
880 COMBA_FORWARD;
881 MULADD(at[0], at[22]); MULADD(at[1], at[21]); MULADD(at[2], at[20]); MULADD(at[3], at[19]); MULADD(at[4], at[18]); MULADD(at[5], at[17]); MULADD(at[6], at[16]); MULADD(at[7], at[15]); MULADD(at[8], at[14]);
882 COMBA_STORE(C->dp[8]);
883 /* 9 */
884 COMBA_FORWARD;
885 MULADD(at[0], at[23]); MULADD(at[1], at[22]); MULADD(at[2], at[21]); MULADD(at[3], at[20]); MULADD(at[4], at[19]); MULADD(at[5], at[18]); MULADD(at[6], at[17]); MULADD(at[7], at[16]); MULADD(at[8], at[15]); MULADD(at[9], at[14]);
886 COMBA_STORE(C->dp[9]);
887 /* 10 */
888 COMBA_FORWARD;
889 MULADD(at[0], at[24]); MULADD(at[1], at[23]); MULADD(at[2], at[22]); MULADD(at[3], at[21]); MULADD(at[4], at[20]); MULADD(at[5], at[19]); MULADD(at[6], at[18]); MULADD(at[7], at[17]); MULADD(at[8], at[16]); MULADD(at[9], at[15]); MULADD(at[10], at[14]);
890 COMBA_STORE(C->dp[10]);
891 /* 11 */
892 COMBA_FORWARD;
893 MULADD(at[0], at[25]); MULADD(at[1], at[24]); MULADD(at[2], at[23]); MULADD(at[3], at[22]); MULADD(at[4], at[21]); MULADD(at[5], at[20]); MULADD(at[6], at[19]); MULADD(at[7], at[18]); MULADD(at[8], at[17]); MULADD(at[9], at[16]); MULADD(at[10], at[15]); MULADD(at[11], at[14]);
894 COMBA_STORE(C->dp[11]);
895 /* 12 */
896 COMBA_FORWARD;
897 MULADD(at[0], at[26]); MULADD(at[1], at[25]); MULADD(at[2], at[24]); MULADD(at[3], at[23]); MULADD(at[4], at[22]); MULADD(at[5], at[21]); MULADD(at[6], at[20]); MULADD(at[7], at[19]); MULADD(at[8], at[18]); MULADD(at[9], at[17]); MULADD(at[10], at[16]); MULADD(at[11], at[15]); MULADD(at[12], at[14]);
898 COMBA_STORE(C->dp[12]);
899 /* 13 */
900 COMBA_FORWARD;
901 MULADD(at[0], at[27]); MULADD(at[1], at[26]); MULADD(at[2], at[25]); MULADD(at[3], at[24]); MULADD(at[4], at[23]); MULADD(at[5], at[22]); MULADD(at[6], at[21]); MULADD(at[7], at[20]); MULADD(at[8], at[19]); MULADD(at[9], at[18]); MULADD(at[10], at[17]); MULADD(at[11], at[16]); MULADD(at[12], at[15]); MULADD(at[13], at[14]);
902 COMBA_STORE(C->dp[13]);
903 /* 14 */
904 COMBA_FORWARD;
905 MULADD(at[1], at[27]); MULADD(at[2], at[26]); MULADD(at[3], at[25]); MULADD(at[4], at[24]); MULADD(at[5], at[23]); MULADD(at[6], at[22]); MULADD(at[7], at[21]); MULADD(at[8], at[20]); MULADD(at[9], at[19]); MULADD(at[10], at[18]); MULADD(at[11], at[17]); MULADD(at[12], at[16]); MULADD(at[13], at[15]);
906 COMBA_STORE(C->dp[14]);
907 /* 15 */
908 COMBA_FORWARD;
909 MULADD(at[2], at[27]); MULADD(at[3], at[26]); MULADD(at[4], at[25]); MULADD(at[5], at[24]); MULADD(at[6], at[23]); MULADD(at[7], at[22]); MULADD(at[8], at[21]); MULADD(at[9], at[20]); MULADD(at[10], at[19]); MULADD(at[11], at[18]); MULADD(at[12], at[17]); MULADD(at[13], at[16]);
910 COMBA_STORE(C->dp[15]);
911 /* 16 */
912 COMBA_FORWARD;
913 MULADD(at[3], at[27]); MULADD(at[4], at[26]); MULADD(at[5], at[25]); MULADD(at[6], at[24]); MULADD(at[7], at[23]); MULADD(at[8], at[22]); MULADD(at[9], at[21]); MULADD(at[10], at[20]); MULADD(at[11], at[19]); MULADD(at[12], at[18]); MULADD(at[13], at[17]);
914 COMBA_STORE(C->dp[16]);
915 /* 17 */
916 COMBA_FORWARD;
917 MULADD(at[4], at[27]); MULADD(at[5], at[26]); MULADD(at[6], at[25]); MULADD(at[7], at[24]); MULADD(at[8], at[23]); MULADD(at[9], at[22]); MULADD(at[10], at[21]); MULADD(at[11], at[20]); MULADD(at[12], at[19]); MULADD(at[13], at[18]);
918 COMBA_STORE(C->dp[17]);
919 /* 18 */
920 COMBA_FORWARD;
921 MULADD(at[5], at[27]); MULADD(at[6], at[26]); MULADD(at[7], at[25]); MULADD(at[8], at[24]); MULADD(at[9], at[23]); MULADD(at[10], at[22]); MULADD(at[11], at[21]); MULADD(at[12], at[20]); MULADD(at[13], at[19]);
922 COMBA_STORE(C->dp[18]);
923 /* 19 */
924 COMBA_FORWARD;
925 MULADD(at[6], at[27]); MULADD(at[7], at[26]); MULADD(at[8], at[25]); MULADD(at[9], at[24]); MULADD(at[10], at[23]); MULADD(at[11], at[22]); MULADD(at[12], at[21]); MULADD(at[13], at[20]);
926 COMBA_STORE(C->dp[19]);
927 /* 20 */
928 COMBA_FORWARD;
929 MULADD(at[7], at[27]); MULADD(at[8], at[26]); MULADD(at[9], at[25]); MULADD(at[10], at[24]); MULADD(at[11], at[23]); MULADD(at[12], at[22]); MULADD(at[13], at[21]);
930 COMBA_STORE(C->dp[20]);
931 /* 21 */
932 COMBA_FORWARD;
933 MULADD(at[8], at[27]); MULADD(at[9], at[26]); MULADD(at[10], at[25]); MULADD(at[11], at[24]); MULADD(at[12], at[23]); MULADD(at[13], at[22]);
934 COMBA_STORE(C->dp[21]);
935 /* 22 */
936 COMBA_FORWARD;
937 MULADD(at[9], at[27]); MULADD(at[10], at[26]); MULADD(at[11], at[25]); MULADD(at[12], at[24]); MULADD(at[13], at[23]);
938 COMBA_STORE(C->dp[22]);
939 /* 23 */
940 COMBA_FORWARD;
941 MULADD(at[10], at[27]); MULADD(at[11], at[26]); MULADD(at[12], at[25]); MULADD(at[13], at[24]);
942 COMBA_STORE(C->dp[23]);
943 /* 24 */
944 COMBA_FORWARD;
945 MULADD(at[11], at[27]); MULADD(at[12], at[26]); MULADD(at[13], at[25]);
946 COMBA_STORE(C->dp[24]);
947 /* 25 */
948 COMBA_FORWARD;
949 MULADD(at[12], at[27]); MULADD(at[13], at[26]);
950 COMBA_STORE(C->dp[25]);
951 /* 26 */
952 COMBA_FORWARD;
953 MULADD(at[13], at[27]);
954 COMBA_STORE(C->dp[26]);
955 COMBA_STORE2(C->dp[27]);
956 C->used = 28;
957 C->sign = A->sign ^ B->sign;
958 fp_clamp(C);
959 COMBA_FINI;
960 break;
961
962 case 15:
963 memcpy(at, A->dp, 15 * sizeof(fp_digit));
964 memcpy(at+15, B->dp, 15 * sizeof(fp_digit));
965 COMBA_START;
966
967 COMBA_CLEAR;
968 /* 0 */
969 MULADD(at[0], at[15]);
970 COMBA_STORE(C->dp[0]);
971 /* 1 */
972 COMBA_FORWARD;
973 MULADD(at[0], at[16]); MULADD(at[1], at[15]);
974 COMBA_STORE(C->dp[1]);
975 /* 2 */
976 COMBA_FORWARD;
977 MULADD(at[0], at[17]); MULADD(at[1], at[16]); MULADD(at[2], at[15]);
978 COMBA_STORE(C->dp[2]);
979 /* 3 */
980 COMBA_FORWARD;
981 MULADD(at[0], at[18]); MULADD(at[1], at[17]); MULADD(at[2], at[16]); MULADD(at[3], at[15]);
982 COMBA_STORE(C->dp[3]);
983 /* 4 */
984 COMBA_FORWARD;
985 MULADD(at[0], at[19]); MULADD(at[1], at[18]); MULADD(at[2], at[17]); MULADD(at[3], at[16]); MULADD(at[4], at[15]);
986 COMBA_STORE(C->dp[4]);
987 /* 5 */
988 COMBA_FORWARD;
989 MULADD(at[0], at[20]); MULADD(at[1], at[19]); MULADD(at[2], at[18]); MULADD(at[3], at[17]); MULADD(at[4], at[16]); MULADD(at[5], at[15]);
990 COMBA_STORE(C->dp[5]);
991 /* 6 */
992 COMBA_FORWARD;
993 MULADD(at[0], at[21]); MULADD(at[1], at[20]); MULADD(at[2], at[19]); MULADD(at[3], at[18]); MULADD(at[4], at[17]); MULADD(at[5], at[16]); MULADD(at[6], at[15]);
994 COMBA_STORE(C->dp[6]);
995 /* 7 */
996 COMBA_FORWARD;
997 MULADD(at[0], at[22]); MULADD(at[1], at[21]); MULADD(at[2], at[20]); MULADD(at[3], at[19]); MULADD(at[4], at[18]); MULADD(at[5], at[17]); MULADD(at[6], at[16]); MULADD(at[7], at[15]);
998 COMBA_STORE(C->dp[7]);
999 /* 8 */
1000 COMBA_FORWARD;
1001 MULADD(at[0], at[23]); MULADD(at[1], at[22]); MULADD(at[2], at[21]); MULADD(at[3], at[20]); MULADD(at[4], at[19]); MULADD(at[5], at[18]); MULADD(at[6], at[17]); MULADD(at[7], at[16]); MULADD(at[8], at[15]);
1002 COMBA_STORE(C->dp[8]);
1003 /* 9 */
1004 COMBA_FORWARD;
1005 MULADD(at[0], at[24]); MULADD(at[1], at[23]); MULADD(at[2], at[22]); MULADD(at[3], at[21]); MULADD(at[4], at[20]); MULADD(at[5], at[19]); MULADD(at[6], at[18]); MULADD(at[7], at[17]); MULADD(at[8], at[16]); MULADD(at[9], at[15]);
1006 COMBA_STORE(C->dp[9]);
1007 /* 10 */
1008 COMBA_FORWARD;
1009 MULADD(at[0], at[25]); MULADD(at[1], at[24]); MULADD(at[2], at[23]); MULADD(at[3], at[22]); MULADD(at[4], at[21]); MULADD(at[5], at[20]); MULADD(at[6], at[19]); MULADD(at[7], at[18]); MULADD(at[8], at[17]); MULADD(at[9], at[16]); MULADD(at[10], at[15]);
1010 COMBA_STORE(C->dp[10]);
1011 /* 11 */
1012 COMBA_FORWARD;
1013 MULADD(at[0], at[26]); MULADD(at[1], at[25]); MULADD(at[2], at[24]); MULADD(at[3], at[23]); MULADD(at[4], at[22]); MULADD(at[5], at[21]); MULADD(at[6], at[20]); MULADD(at[7], at[19]); MULADD(at[8], at[18]); MULADD(at[9], at[17]); MULADD(at[10], at[16]); MULADD(at[11], at[15]);
1014 COMBA_STORE(C->dp[11]);
1015 /* 12 */
1016 COMBA_FORWARD;
1017 MULADD(at[0], at[27]); MULADD(at[1], at[26]); MULADD(at[2], at[25]); MULADD(at[3], at[24]); MULADD(at[4], at[23]); MULADD(at[5], at[22]); MULADD(at[6], at[21]); MULADD(at[7], at[20]); MULADD(at[8], at[19]); MULADD(at[9], at[18]); MULADD(at[10], at[17]); MULADD(at[11], at[16]); MULADD(at[12], at[15]);
1018 COMBA_STORE(C->dp[12]);
1019 /* 13 */
1020 COMBA_FORWARD;
1021 MULADD(at[0], at[28]); MULADD(at[1], at[27]); MULADD(at[2], at[26]); MULADD(at[3], at[25]); MULADD(at[4], at[24]); MULADD(at[5], at[23]); MULADD(at[6], at[22]); MULADD(at[7], at[21]); MULADD(at[8], at[20]); MULADD(at[9], at[19]); MULADD(at[10], at[18]); MULADD(at[11], at[17]); MULADD(at[12], at[16]); MULADD(at[13], at[15]);
1022 COMBA_STORE(C->dp[13]);
1023 /* 14 */
1024 COMBA_FORWARD;
1025 MULADD(at[0], at[29]); MULADD(at[1], at[28]); MULADD(at[2], at[27]); MULADD(at[3], at[26]); MULADD(at[4], at[25]); MULADD(at[5], at[24]); MULADD(at[6], at[23]); MULADD(at[7], at[22]); MULADD(at[8], at[21]); MULADD(at[9], at[20]); MULADD(at[10], at[19]); MULADD(at[11], at[18]); MULADD(at[12], at[17]); MULADD(at[13], at[16]); MULADD(at[14], at[15]);
1026 COMBA_STORE(C->dp[14]);
1027 /* 15 */
1028 COMBA_FORWARD;
1029 MULADD(at[1], at[29]); MULADD(at[2], at[28]); MULADD(at[3], at[27]); MULADD(at[4], at[26]); MULADD(at[5], at[25]); MULADD(at[6], at[24]); MULADD(at[7], at[23]); MULADD(at[8], at[22]); MULADD(at[9], at[21]); MULADD(at[10], at[20]); MULADD(at[11], at[19]); MULADD(at[12], at[18]); MULADD(at[13], at[17]); MULADD(at[14], at[16]);
1030 COMBA_STORE(C->dp[15]);
1031 /* 16 */
1032 COMBA_FORWARD;
1033 MULADD(at[2], at[29]); MULADD(at[3], at[28]); MULADD(at[4], at[27]); MULADD(at[5], at[26]); MULADD(at[6], at[25]); MULADD(at[7], at[24]); MULADD(at[8], at[23]); MULADD(at[9], at[22]); MULADD(at[10], at[21]); MULADD(at[11], at[20]); MULADD(at[12], at[19]); MULADD(at[13], at[18]); MULADD(at[14], at[17]);
1034 COMBA_STORE(C->dp[16]);
1035 /* 17 */
1036 COMBA_FORWARD;
1037 MULADD(at[3], at[29]); MULADD(at[4], at[28]); MULADD(at[5], at[27]); MULADD(at[6], at[26]); MULADD(at[7], at[25]); MULADD(at[8], at[24]); MULADD(at[9], at[23]); MULADD(at[10], at[22]); MULADD(at[11], at[21]); MULADD(at[12], at[20]); MULADD(at[13], at[19]); MULADD(at[14], at[18]);
1038 COMBA_STORE(C->dp[17]);
1039 /* 18 */
1040 COMBA_FORWARD;
1041 MULADD(at[4], at[29]); MULADD(at[5], at[28]); MULADD(at[6], at[27]); MULADD(at[7], at[26]); MULADD(at[8], at[25]); MULADD(at[9], at[24]); MULADD(at[10], at[23]); MULADD(at[11], at[22]); MULADD(at[12], at[21]); MULADD(at[13], at[20]); MULADD(at[14], at[19]);
1042 COMBA_STORE(C->dp[18]);
1043 /* 19 */
1044 COMBA_FORWARD;
1045 MULADD(at[5], at[29]); MULADD(at[6], at[28]); MULADD(at[7], at[27]); MULADD(at[8], at[26]); MULADD(at[9], at[25]); MULADD(at[10], at[24]); MULADD(at[11], at[23]); MULADD(at[12], at[22]); MULADD(at[13], at[21]); MULADD(at[14], at[20]);
1046 COMBA_STORE(C->dp[19]);
1047 /* 20 */
1048 COMBA_FORWARD;
1049 MULADD(at[6], at[29]); MULADD(at[7], at[28]); MULADD(at[8], at[27]); MULADD(at[9], at[26]); MULADD(at[10], at[25]); MULADD(at[11], at[24]); MULADD(at[12], at[23]); MULADD(at[13], at[22]); MULADD(at[14], at[21]);
1050 COMBA_STORE(C->dp[20]);
1051 /* 21 */
1052 COMBA_FORWARD;
1053 MULADD(at[7], at[29]); MULADD(at[8], at[28]); MULADD(at[9], at[27]); MULADD(at[10], at[26]); MULADD(at[11], at[25]); MULADD(at[12], at[24]); MULADD(at[13], at[23]); MULADD(at[14], at[22]);
1054 COMBA_STORE(C->dp[21]);
1055 /* 22 */
1056 COMBA_FORWARD;
1057 MULADD(at[8], at[29]); MULADD(at[9], at[28]); MULADD(at[10], at[27]); MULADD(at[11], at[26]); MULADD(at[12], at[25]); MULADD(at[13], at[24]); MULADD(at[14], at[23]);
1058 COMBA_STORE(C->dp[22]);
1059 /* 23 */
1060 COMBA_FORWARD;
1061 MULADD(at[9], at[29]); MULADD(at[10], at[28]); MULADD(at[11], at[27]); MULADD(at[12], at[26]); MULADD(at[13], at[25]); MULADD(at[14], at[24]);
1062 COMBA_STORE(C->dp[23]);
1063 /* 24 */
1064 COMBA_FORWARD;
1065 MULADD(at[10], at[29]); MULADD(at[11], at[28]); MULADD(at[12], at[27]); MULADD(at[13], at[26]); MULADD(at[14], at[25]);
1066 COMBA_STORE(C->dp[24]);
1067 /* 25 */
1068 COMBA_FORWARD;
1069 MULADD(at[11], at[29]); MULADD(at[12], at[28]); MULADD(at[13], at[27]); MULADD(at[14], at[26]);
1070 COMBA_STORE(C->dp[25]);
1071 /* 26 */
1072 COMBA_FORWARD;
1073 MULADD(at[12], at[29]); MULADD(at[13], at[28]); MULADD(at[14], at[27]);
1074 COMBA_STORE(C->dp[26]);
1075 /* 27 */
1076 COMBA_FORWARD;
1077 MULADD(at[13], at[29]); MULADD(at[14], at[28]);
1078 COMBA_STORE(C->dp[27]);
1079 /* 28 */
1080 COMBA_FORWARD;
1081 MULADD(at[14], at[29]);
1082 COMBA_STORE(C->dp[28]);
1083 COMBA_STORE2(C->dp[29]);
1084 C->used = 30;
1085 C->sign = A->sign ^ B->sign;
1086 fp_clamp(C);
1087 COMBA_FINI;
1088 break;
1089
1090 case 16:
1091 memcpy(at, A->dp, 16 * sizeof(fp_digit));
1092 memcpy(at+16, B->dp, 16 * sizeof(fp_digit));
1093 COMBA_START;
1094
1095 COMBA_CLEAR;
1096 /* 0 */
1097 MULADD(at[0], at[16]);
1098 COMBA_STORE(C->dp[0]);
1099 /* 1 */
1100 COMBA_FORWARD;
1101 MULADD(at[0], at[17]); MULADD(at[1], at[16]);
1102 COMBA_STORE(C->dp[1]);
1103 /* 2 */
1104 COMBA_FORWARD;
1105 MULADD(at[0], at[18]); MULADD(at[1], at[17]); MULADD(at[2], at[16]);
1106 COMBA_STORE(C->dp[2]);
1107 /* 3 */
1108 COMBA_FORWARD;
1109 MULADD(at[0], at[19]); MULADD(at[1], at[18]); MULADD(at[2], at[17]); MULADD(at[3], at[16]);
1110 COMBA_STORE(C->dp[3]);
1111 /* 4 */
1112 COMBA_FORWARD;
1113 MULADD(at[0], at[20]); MULADD(at[1], at[19]); MULADD(at[2], at[18]); MULADD(at[3], at[17]); MULADD(at[4], at[16]);
1114 COMBA_STORE(C->dp[4]);
1115 /* 5 */
1116 COMBA_FORWARD;
1117 MULADD(at[0], at[21]); MULADD(at[1], at[20]); MULADD(at[2], at[19]); MULADD(at[3], at[18]); MULADD(at[4], at[17]); MULADD(at[5], at[16]);
1118 COMBA_STORE(C->dp[5]);
1119 /* 6 */
1120 COMBA_FORWARD;
1121 MULADD(at[0], at[22]); MULADD(at[1], at[21]); MULADD(at[2], at[20]); MULADD(at[3], at[19]); MULADD(at[4], at[18]); MULADD(at[5], at[17]); MULADD(at[6], at[16]);
1122 COMBA_STORE(C->dp[6]);
1123 /* 7 */
1124 COMBA_FORWARD;
1125 MULADD(at[0], at[23]); MULADD(at[1], at[22]); MULADD(at[2], at[21]); MULADD(at[3], at[20]); MULADD(at[4], at[19]); MULADD(at[5], at[18]); MULADD(at[6], at[17]); MULADD(at[7], at[16]);
1126 COMBA_STORE(C->dp[7]);
1127 /* 8 */
1128 COMBA_FORWARD;
1129 MULADD(at[0], at[24]); MULADD(at[1], at[23]); MULADD(at[2], at[22]); MULADD(at[3], at[21]); MULADD(at[4], at[20]); MULADD(at[5], at[19]); MULADD(at[6], at[18]); MULADD(at[7], at[17]); MULADD(at[8], at[16]);
1130 COMBA_STORE(C->dp[8]);
1131 /* 9 */
1132 COMBA_FORWARD;
1133 MULADD(at[0], at[25]); MULADD(at[1], at[24]); MULADD(at[2], at[23]); MULADD(at[3], at[22]); MULADD(at[4], at[21]); MULADD(at[5], at[20]); MULADD(at[6], at[19]); MULADD(at[7], at[18]); MULADD(at[8], at[17]); MULADD(at[9], at[16]);
1134 COMBA_STORE(C->dp[9]);
1135 /* 10 */
1136 COMBA_FORWARD;
1137 MULADD(at[0], at[26]); MULADD(at[1], at[25]); MULADD(at[2], at[24]); MULADD(at[3], at[23]); MULADD(at[4], at[22]); MULADD(at[5], at[21]); MULADD(at[6], at[20]); MULADD(at[7], at[19]); MULADD(at[8], at[18]); MULADD(at[9], at[17]); MULADD(at[10], at[16]);
1138 COMBA_STORE(C->dp[10]);
1139 /* 11 */
1140 COMBA_FORWARD;
1141 MULADD(at[0], at[27]); MULADD(at[1], at[26]); MULADD(at[2], at[25]); MULADD(at[3], at[24]); MULADD(at[4], at[23]); MULADD(at[5], at[22]); MULADD(at[6], at[21]); MULADD(at[7], at[20]); MULADD(at[8], at[19]); MULADD(at[9], at[18]); MULADD(at[10], at[17]); MULADD(at[11], at[16]);
1142 COMBA_STORE(C->dp[11]);
1143 /* 12 */
1144 COMBA_FORWARD;
1145 MULADD(at[0], at[28]); MULADD(at[1], at[27]); MULADD(at[2], at[26]); MULADD(at[3], at[25]); MULADD(at[4], at[24]); MULADD(at[5], at[23]); MULADD(at[6], at[22]); MULADD(at[7], at[21]); MULADD(at[8], at[20]); MULADD(at[9], at[19]); MULADD(at[10], at[18]); MULADD(at[11], at[17]); MULADD(at[12], at[16]);
1146 COMBA_STORE(C->dp[12]);
1147 /* 13 */
1148 COMBA_FORWARD;
1149 MULADD(at[0], at[29]); MULADD(at[1], at[28]); MULADD(at[2], at[27]); MULADD(at[3], at[26]); MULADD(at[4], at[25]); MULADD(at[5], at[24]); MULADD(at[6], at[23]); MULADD(at[7], at[22]); MULADD(at[8], at[21]); MULADD(at[9], at[20]); MULADD(at[10], at[19]); MULADD(at[11], at[18]); MULADD(at[12], at[17]); MULADD(at[13], at[16]);
1150 COMBA_STORE(C->dp[13]);
1151 /* 14 */
1152 COMBA_FORWARD;
1153 MULADD(at[0], at[30]); MULADD(at[1], at[29]); MULADD(at[2], at[28]); MULADD(at[3], at[27]); MULADD(at[4], at[26]); MULADD(at[5], at[25]); MULADD(at[6], at[24]); MULADD(at[7], at[23]); MULADD(at[8], at[22]); MULADD(at[9], at[21]); MULADD(at[10], at[20]); MULADD(at[11], at[19]); MULADD(at[12], at[18]); MULADD(at[13], at[17]); MULADD(at[14], at[16]);
1154 COMBA_STORE(C->dp[14]);
1155 /* 15 */
1156 COMBA_FORWARD;
1157 MULADD(at[0], at[31]); MULADD(at[1], at[30]); MULADD(at[2], at[29]); MULADD(at[3], at[28]); MULADD(at[4], at[27]); MULADD(at[5], at[26]); MULADD(at[6], at[25]); MULADD(at[7], at[24]); MULADD(at[8], at[23]); MULADD(at[9], at[22]); MULADD(at[10], at[21]); MULADD(at[11], at[20]); MULADD(at[12], at[19]); MULADD(at[13], at[18]); MULADD(at[14], at[17]); MULADD(at[15], at[16]);
1158 COMBA_STORE(C->dp[15]);
1159 /* 16 */
1160 COMBA_FORWARD;
1161 MULADD(at[1], at[31]); MULADD(at[2], at[30]); MULADD(at[3], at[29]); MULADD(at[4], at[28]); MULADD(at[5], at[27]); MULADD(at[6], at[26]); MULADD(at[7], at[25]); MULADD(at[8], at[24]); MULADD(at[9], at[23]); MULADD(at[10], at[22]); MULADD(at[11], at[21]); MULADD(at[12], at[20]); MULADD(at[13], at[19]); MULADD(at[14], at[18]); MULADD(at[15], at[17]);
1162 COMBA_STORE(C->dp[16]);
1163 /* 17 */
1164 COMBA_FORWARD;
1165 MULADD(at[2], at[31]); MULADD(at[3], at[30]); MULADD(at[4], at[29]); MULADD(at[5], at[28]); MULADD(at[6], at[27]); MULADD(at[7], at[26]); MULADD(at[8], at[25]); MULADD(at[9], at[24]); MULADD(at[10], at[23]); MULADD(at[11], at[22]); MULADD(at[12], at[21]); MULADD(at[13], at[20]); MULADD(at[14], at[19]); MULADD(at[15], at[18]);
1166 COMBA_STORE(C->dp[17]);
1167 /* 18 */
1168 COMBA_FORWARD;
1169 MULADD(at[3], at[31]); MULADD(at[4], at[30]); MULADD(at[5], at[29]); MULADD(at[6], at[28]); MULADD(at[7], at[27]); MULADD(at[8], at[26]); MULADD(at[9], at[25]); MULADD(at[10], at[24]); MULADD(at[11], at[23]); MULADD(at[12], at[22]); MULADD(at[13], at[21]); MULADD(at[14], at[20]); MULADD(at[15], at[19]);
1170 COMBA_STORE(C->dp[18]);
1171 /* 19 */
1172 COMBA_FORWARD;
1173 MULADD(at[4], at[31]); MULADD(at[5], at[30]); MULADD(at[6], at[29]); MULADD(at[7], at[28]); MULADD(at[8], at[27]); MULADD(at[9], at[26]); MULADD(at[10], at[25]); MULADD(at[11], at[24]); MULADD(at[12], at[23]); MULADD(at[13], at[22]); MULADD(at[14], at[21]); MULADD(at[15], at[20]);
1174 COMBA_STORE(C->dp[19]);
1175 /* 20 */
1176 COMBA_FORWARD;
1177 MULADD(at[5], at[31]); MULADD(at[6], at[30]); MULADD(at[7], at[29]); MULADD(at[8], at[28]); MULADD(at[9], at[27]); MULADD(at[10], at[26]); MULADD(at[11], at[25]); MULADD(at[12], at[24]); MULADD(at[13], at[23]); MULADD(at[14], at[22]); MULADD(at[15], at[21]);
1178 COMBA_STORE(C->dp[20]);
1179 /* 21 */
1180 COMBA_FORWARD;
1181 MULADD(at[6], at[31]); MULADD(at[7], at[30]); MULADD(at[8], at[29]); MULADD(at[9], at[28]); MULADD(at[10], at[27]); MULADD(at[11], at[26]); MULADD(at[12], at[25]); MULADD(at[13], at[24]); MULADD(at[14], at[23]); MULADD(at[15], at[22]);
1182 COMBA_STORE(C->dp[21]);
1183 /* 22 */
1184 COMBA_FORWARD;
1185 MULADD(at[7], at[31]); MULADD(at[8], at[30]); MULADD(at[9], at[29]); MULADD(at[10], at[28]); MULADD(at[11], at[27]); MULADD(at[12], at[26]); MULADD(at[13], at[25]); MULADD(at[14], at[24]); MULADD(at[15], at[23]);
1186 COMBA_STORE(C->dp[22]);
1187 /* 23 */
1188 COMBA_FORWARD;
1189 MULADD(at[8], at[31]); MULADD(at[9], at[30]); MULADD(at[10], at[29]); MULADD(at[11], at[28]); MULADD(at[12], at[27]); MULADD(at[13], at[26]); MULADD(at[14], at[25]); MULADD(at[15], at[24]);
1190 COMBA_STORE(C->dp[23]);
1191 /* 24 */
1192 COMBA_FORWARD;
1193 MULADD(at[9], at[31]); MULADD(at[10], at[30]); MULADD(at[11], at[29]); MULADD(at[12], at[28]); MULADD(at[13], at[27]); MULADD(at[14], at[26]); MULADD(at[15], at[25]);
1194 COMBA_STORE(C->dp[24]);
1195 /* 25 */
1196 COMBA_FORWARD;
1197 MULADD(at[10], at[31]); MULADD(at[11], at[30]); MULADD(at[12], at[29]); MULADD(at[13], at[28]); MULADD(at[14], at[27]); MULADD(at[15], at[26]);
1198 COMBA_STORE(C->dp[25]);
1199 /* 26 */
1200 COMBA_FORWARD;
1201 MULADD(at[11], at[31]); MULADD(at[12], at[30]); MULADD(at[13], at[29]); MULADD(at[14], at[28]); MULADD(at[15], at[27]);
1202 COMBA_STORE(C->dp[26]);
1203 /* 27 */
1204 COMBA_FORWARD;
1205 MULADD(at[12], at[31]); MULADD(at[13], at[30]); MULADD(at[14], at[29]); MULADD(at[15], at[28]);
1206 COMBA_STORE(C->dp[27]);
1207 /* 28 */
1208 COMBA_FORWARD;
1209 MULADD(at[13], at[31]); MULADD(at[14], at[30]); MULADD(at[15], at[29]);
1210 COMBA_STORE(C->dp[28]);
1211 /* 29 */
1212 COMBA_FORWARD;
1213 MULADD(at[14], at[31]); MULADD(at[15], at[30]);
1214 COMBA_STORE(C->dp[29]);
1215 /* 30 */
1216 COMBA_FORWARD;
1217 MULADD(at[15], at[31]);
1218 COMBA_STORE(C->dp[30]);
1219 COMBA_STORE2(C->dp[31]);
1220 C->used = 32;
1221 C->sign = A->sign ^ B->sign;
1222 fp_clamp(C);
1223 COMBA_FINI;
1224 break;
1225 }
1226 }
1227
1228 #endif