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