Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of MiniTLS-GPL by
fp_mul_comba_small_set.c
00001 #define TFM_DEFINES 00002 #include "fp_mul_comba.c" 00003 00004 #if defined(TFM_SMALL_SET) 00005 void fp_mul_comba_small(fp_int *A, fp_int *B, fp_int *C) 00006 { 00007 fp_digit c0, c1, c2, at[32]; 00008 switch (MAX(A->used, B->used)) { 00009 00010 case 1: 00011 memcpy(at, A->dp, 1 * sizeof(fp_digit)); 00012 memcpy(at+1, B->dp, 1 * sizeof(fp_digit)); 00013 COMBA_START; 00014 00015 COMBA_CLEAR; 00016 /* 0 */ 00017 MULADD(at[0], at[1]); 00018 COMBA_STORE(C->dp[0]); 00019 COMBA_STORE2(C->dp[1]); 00020 C->used = 2; 00021 C->sign = A->sign ^ B->sign; 00022 fp_clamp(C); 00023 COMBA_FINI; 00024 break; 00025 00026 case 2: 00027 memcpy(at, A->dp, 2 * sizeof(fp_digit)); 00028 memcpy(at+2, B->dp, 2 * sizeof(fp_digit)); 00029 COMBA_START; 00030 00031 COMBA_CLEAR; 00032 /* 0 */ 00033 MULADD(at[0], at[2]); 00034 COMBA_STORE(C->dp[0]); 00035 /* 1 */ 00036 COMBA_FORWARD; 00037 MULADD(at[0], at[3]); MULADD(at[1], at[2]); 00038 COMBA_STORE(C->dp[1]); 00039 /* 2 */ 00040 COMBA_FORWARD; 00041 MULADD(at[1], at[3]); 00042 COMBA_STORE(C->dp[2]); 00043 COMBA_STORE2(C->dp[3]); 00044 C->used = 4; 00045 C->sign = A->sign ^ B->sign; 00046 fp_clamp(C); 00047 COMBA_FINI; 00048 break; 00049 00050 case 3: 00051 memcpy(at, A->dp, 3 * sizeof(fp_digit)); 00052 memcpy(at+3, B->dp, 3 * sizeof(fp_digit)); 00053 COMBA_START; 00054 00055 COMBA_CLEAR; 00056 /* 0 */ 00057 MULADD(at[0], at[3]); 00058 COMBA_STORE(C->dp[0]); 00059 /* 1 */ 00060 COMBA_FORWARD; 00061 MULADD(at[0], at[4]); MULADD(at[1], at[3]); 00062 COMBA_STORE(C->dp[1]); 00063 /* 2 */ 00064 COMBA_FORWARD; 00065 MULADD(at[0], at[5]); MULADD(at[1], at[4]); MULADD(at[2], at[3]); 00066 COMBA_STORE(C->dp[2]); 00067 /* 3 */ 00068 COMBA_FORWARD; 00069 MULADD(at[1], at[5]); MULADD(at[2], at[4]); 00070 COMBA_STORE(C->dp[3]); 00071 /* 4 */ 00072 COMBA_FORWARD; 00073 MULADD(at[2], at[5]); 00074 COMBA_STORE(C->dp[4]); 00075 COMBA_STORE2(C->dp[5]); 00076 C->used = 6; 00077 C->sign = A->sign ^ B->sign; 00078 fp_clamp(C); 00079 COMBA_FINI; 00080 break; 00081 00082 case 4: 00083 memcpy(at, A->dp, 4 * sizeof(fp_digit)); 00084 memcpy(at+4, B->dp, 4 * sizeof(fp_digit)); 00085 COMBA_START; 00086 00087 COMBA_CLEAR; 00088 /* 0 */ 00089 MULADD(at[0], at[4]); 00090 COMBA_STORE(C->dp[0]); 00091 /* 1 */ 00092 COMBA_FORWARD; 00093 MULADD(at[0], at[5]); MULADD(at[1], at[4]); 00094 COMBA_STORE(C->dp[1]); 00095 /* 2 */ 00096 COMBA_FORWARD; 00097 MULADD(at[0], at[6]); MULADD(at[1], at[5]); MULADD(at[2], at[4]); 00098 COMBA_STORE(C->dp[2]); 00099 /* 3 */ 00100 COMBA_FORWARD; 00101 MULADD(at[0], at[7]); MULADD(at[1], at[6]); MULADD(at[2], at[5]); MULADD(at[3], at[4]); 00102 COMBA_STORE(C->dp[3]); 00103 /* 4 */ 00104 COMBA_FORWARD; 00105 MULADD(at[1], at[7]); MULADD(at[2], at[6]); MULADD(at[3], at[5]); 00106 COMBA_STORE(C->dp[4]); 00107 /* 5 */ 00108 COMBA_FORWARD; 00109 MULADD(at[2], at[7]); MULADD(at[3], at[6]); 00110 COMBA_STORE(C->dp[5]); 00111 /* 6 */ 00112 COMBA_FORWARD; 00113 MULADD(at[3], at[7]); 00114 COMBA_STORE(C->dp[6]); 00115 COMBA_STORE2(C->dp[7]); 00116 C->used = 8; 00117 C->sign = A->sign ^ B->sign; 00118 fp_clamp(C); 00119 COMBA_FINI; 00120 break; 00121 00122 case 5: 00123 memcpy(at, A->dp, 5 * sizeof(fp_digit)); 00124 memcpy(at+5, B->dp, 5 * sizeof(fp_digit)); 00125 COMBA_START; 00126 00127 COMBA_CLEAR; 00128 /* 0 */ 00129 MULADD(at[0], at[5]); 00130 COMBA_STORE(C->dp[0]); 00131 /* 1 */ 00132 COMBA_FORWARD; 00133 MULADD(at[0], at[6]); MULADD(at[1], at[5]); 00134 COMBA_STORE(C->dp[1]); 00135 /* 2 */ 00136 COMBA_FORWARD; 00137 MULADD(at[0], at[7]); MULADD(at[1], at[6]); MULADD(at[2], at[5]); 00138 COMBA_STORE(C->dp[2]); 00139 /* 3 */ 00140 COMBA_FORWARD; 00141 MULADD(at[0], at[8]); MULADD(at[1], at[7]); MULADD(at[2], at[6]); MULADD(at[3], at[5]); 00142 COMBA_STORE(C->dp[3]); 00143 /* 4 */ 00144 COMBA_FORWARD; 00145 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]); 00146 COMBA_STORE(C->dp[4]); 00147 /* 5 */ 00148 COMBA_FORWARD; 00149 MULADD(at[1], at[9]); MULADD(at[2], at[8]); MULADD(at[3], at[7]); MULADD(at[4], at[6]); 00150 COMBA_STORE(C->dp[5]); 00151 /* 6 */ 00152 COMBA_FORWARD; 00153 MULADD(at[2], at[9]); MULADD(at[3], at[8]); MULADD(at[4], at[7]); 00154 COMBA_STORE(C->dp[6]); 00155 /* 7 */ 00156 COMBA_FORWARD; 00157 MULADD(at[3], at[9]); MULADD(at[4], at[8]); 00158 COMBA_STORE(C->dp[7]); 00159 /* 8 */ 00160 COMBA_FORWARD; 00161 MULADD(at[4], at[9]); 00162 COMBA_STORE(C->dp[8]); 00163 COMBA_STORE2(C->dp[9]); 00164 C->used = 10; 00165 C->sign = A->sign ^ B->sign; 00166 fp_clamp(C); 00167 COMBA_FINI; 00168 break; 00169 00170 case 6: 00171 memcpy(at, A->dp, 6 * sizeof(fp_digit)); 00172 memcpy(at+6, B->dp, 6 * sizeof(fp_digit)); 00173 COMBA_START; 00174 00175 COMBA_CLEAR; 00176 /* 0 */ 00177 MULADD(at[0], at[6]); 00178 COMBA_STORE(C->dp[0]); 00179 /* 1 */ 00180 COMBA_FORWARD; 00181 MULADD(at[0], at[7]); MULADD(at[1], at[6]); 00182 COMBA_STORE(C->dp[1]); 00183 /* 2 */ 00184 COMBA_FORWARD; 00185 MULADD(at[0], at[8]); MULADD(at[1], at[7]); MULADD(at[2], at[6]); 00186 COMBA_STORE(C->dp[2]); 00187 /* 3 */ 00188 COMBA_FORWARD; 00189 MULADD(at[0], at[9]); MULADD(at[1], at[8]); MULADD(at[2], at[7]); MULADD(at[3], at[6]); 00190 COMBA_STORE(C->dp[3]); 00191 /* 4 */ 00192 COMBA_FORWARD; 00193 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]); 00194 COMBA_STORE(C->dp[4]); 00195 /* 5 */ 00196 COMBA_FORWARD; 00197 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]); 00198 COMBA_STORE(C->dp[5]); 00199 /* 6 */ 00200 COMBA_FORWARD; 00201 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]); 00202 COMBA_STORE(C->dp[6]); 00203 /* 7 */ 00204 COMBA_FORWARD; 00205 MULADD(at[2], at[11]); MULADD(at[3], at[10]); MULADD(at[4], at[9]); MULADD(at[5], at[8]); 00206 COMBA_STORE(C->dp[7]); 00207 /* 8 */ 00208 COMBA_FORWARD; 00209 MULADD(at[3], at[11]); MULADD(at[4], at[10]); MULADD(at[5], at[9]); 00210 COMBA_STORE(C->dp[8]); 00211 /* 9 */ 00212 COMBA_FORWARD; 00213 MULADD(at[4], at[11]); MULADD(at[5], at[10]); 00214 COMBA_STORE(C->dp[9]); 00215 /* 10 */ 00216 COMBA_FORWARD; 00217 MULADD(at[5], at[11]); 00218 COMBA_STORE(C->dp[10]); 00219 COMBA_STORE2(C->dp[11]); 00220 C->used = 12; 00221 C->sign = A->sign ^ B->sign; 00222 fp_clamp(C); 00223 COMBA_FINI; 00224 break; 00225 00226 case 7: 00227 memcpy(at, A->dp, 7 * sizeof(fp_digit)); 00228 memcpy(at+7, B->dp, 7 * sizeof(fp_digit)); 00229 COMBA_START; 00230 00231 COMBA_CLEAR; 00232 /* 0 */ 00233 MULADD(at[0], at[7]); 00234 COMBA_STORE(C->dp[0]); 00235 /* 1 */ 00236 COMBA_FORWARD; 00237 MULADD(at[0], at[8]); MULADD(at[1], at[7]); 00238 COMBA_STORE(C->dp[1]); 00239 /* 2 */ 00240 COMBA_FORWARD; 00241 MULADD(at[0], at[9]); MULADD(at[1], at[8]); MULADD(at[2], at[7]); 00242 COMBA_STORE(C->dp[2]); 00243 /* 3 */ 00244 COMBA_FORWARD; 00245 MULADD(at[0], at[10]); MULADD(at[1], at[9]); MULADD(at[2], at[8]); MULADD(at[3], at[7]); 00246 COMBA_STORE(C->dp[3]); 00247 /* 4 */ 00248 COMBA_FORWARD; 00249 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]); 00250 COMBA_STORE(C->dp[4]); 00251 /* 5 */ 00252 COMBA_FORWARD; 00253 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]); 00254 COMBA_STORE(C->dp[5]); 00255 /* 6 */ 00256 COMBA_FORWARD; 00257 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]); 00258 COMBA_STORE(C->dp[6]); 00259 /* 7 */ 00260 COMBA_FORWARD; 00261 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]); 00262 COMBA_STORE(C->dp[7]); 00263 /* 8 */ 00264 COMBA_FORWARD; 00265 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]); 00266 COMBA_STORE(C->dp[8]); 00267 /* 9 */ 00268 COMBA_FORWARD; 00269 MULADD(at[3], at[13]); MULADD(at[4], at[12]); MULADD(at[5], at[11]); MULADD(at[6], at[10]); 00270 COMBA_STORE(C->dp[9]); 00271 /* 10 */ 00272 COMBA_FORWARD; 00273 MULADD(at[4], at[13]); MULADD(at[5], at[12]); MULADD(at[6], at[11]); 00274 COMBA_STORE(C->dp[10]); 00275 /* 11 */ 00276 COMBA_FORWARD; 00277 MULADD(at[5], at[13]); MULADD(at[6], at[12]); 00278 COMBA_STORE(C->dp[11]); 00279 /* 12 */ 00280 COMBA_FORWARD; 00281 MULADD(at[6], at[13]); 00282 COMBA_STORE(C->dp[12]); 00283 COMBA_STORE2(C->dp[13]); 00284 C->used = 14; 00285 C->sign = A->sign ^ B->sign; 00286 fp_clamp(C); 00287 COMBA_FINI; 00288 break; 00289 00290 case 8: 00291 memcpy(at, A->dp, 8 * sizeof(fp_digit)); 00292 memcpy(at+8, B->dp, 8 * sizeof(fp_digit)); 00293 COMBA_START; 00294 00295 COMBA_CLEAR; 00296 /* 0 */ 00297 MULADD(at[0], at[8]); 00298 COMBA_STORE(C->dp[0]); 00299 /* 1 */ 00300 COMBA_FORWARD; 00301 MULADD(at[0], at[9]); MULADD(at[1], at[8]); 00302 COMBA_STORE(C->dp[1]); 00303 /* 2 */ 00304 COMBA_FORWARD; 00305 MULADD(at[0], at[10]); MULADD(at[1], at[9]); MULADD(at[2], at[8]); 00306 COMBA_STORE(C->dp[2]); 00307 /* 3 */ 00308 COMBA_FORWARD; 00309 MULADD(at[0], at[11]); MULADD(at[1], at[10]); MULADD(at[2], at[9]); MULADD(at[3], at[8]); 00310 COMBA_STORE(C->dp[3]); 00311 /* 4 */ 00312 COMBA_FORWARD; 00313 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]); 00314 COMBA_STORE(C->dp[4]); 00315 /* 5 */ 00316 COMBA_FORWARD; 00317 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]); 00318 COMBA_STORE(C->dp[5]); 00319 /* 6 */ 00320 COMBA_FORWARD; 00321 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]); 00322 COMBA_STORE(C->dp[6]); 00323 /* 7 */ 00324 COMBA_FORWARD; 00325 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]); 00326 COMBA_STORE(C->dp[7]); 00327 /* 8 */ 00328 COMBA_FORWARD; 00329 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]); 00330 COMBA_STORE(C->dp[8]); 00331 /* 9 */ 00332 COMBA_FORWARD; 00333 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]); 00334 COMBA_STORE(C->dp[9]); 00335 /* 10 */ 00336 COMBA_FORWARD; 00337 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]); 00338 COMBA_STORE(C->dp[10]); 00339 /* 11 */ 00340 COMBA_FORWARD; 00341 MULADD(at[4], at[15]); MULADD(at[5], at[14]); MULADD(at[6], at[13]); MULADD(at[7], at[12]); 00342 COMBA_STORE(C->dp[11]); 00343 /* 12 */ 00344 COMBA_FORWARD; 00345 MULADD(at[5], at[15]); MULADD(at[6], at[14]); MULADD(at[7], at[13]); 00346 COMBA_STORE(C->dp[12]); 00347 /* 13 */ 00348 COMBA_FORWARD; 00349 MULADD(at[6], at[15]); MULADD(at[7], at[14]); 00350 COMBA_STORE(C->dp[13]); 00351 /* 14 */ 00352 COMBA_FORWARD; 00353 MULADD(at[7], at[15]); 00354 COMBA_STORE(C->dp[14]); 00355 COMBA_STORE2(C->dp[15]); 00356 C->used = 16; 00357 C->sign = A->sign ^ B->sign; 00358 fp_clamp(C); 00359 COMBA_FINI; 00360 break; 00361 00362 case 9: 00363 memcpy(at, A->dp, 9 * sizeof(fp_digit)); 00364 memcpy(at+9, B->dp, 9 * sizeof(fp_digit)); 00365 COMBA_START; 00366 00367 COMBA_CLEAR; 00368 /* 0 */ 00369 MULADD(at[0], at[9]); 00370 COMBA_STORE(C->dp[0]); 00371 /* 1 */ 00372 COMBA_FORWARD; 00373 MULADD(at[0], at[10]); MULADD(at[1], at[9]); 00374 COMBA_STORE(C->dp[1]); 00375 /* 2 */ 00376 COMBA_FORWARD; 00377 MULADD(at[0], at[11]); MULADD(at[1], at[10]); MULADD(at[2], at[9]); 00378 COMBA_STORE(C->dp[2]); 00379 /* 3 */ 00380 COMBA_FORWARD; 00381 MULADD(at[0], at[12]); MULADD(at[1], at[11]); MULADD(at[2], at[10]); MULADD(at[3], at[9]); 00382 COMBA_STORE(C->dp[3]); 00383 /* 4 */ 00384 COMBA_FORWARD; 00385 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]); 00386 COMBA_STORE(C->dp[4]); 00387 /* 5 */ 00388 COMBA_FORWARD; 00389 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]); 00390 COMBA_STORE(C->dp[5]); 00391 /* 6 */ 00392 COMBA_FORWARD; 00393 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]); 00394 COMBA_STORE(C->dp[6]); 00395 /* 7 */ 00396 COMBA_FORWARD; 00397 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]); 00398 COMBA_STORE(C->dp[7]); 00399 /* 8 */ 00400 COMBA_FORWARD; 00401 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]); 00402 COMBA_STORE(C->dp[8]); 00403 /* 9 */ 00404 COMBA_FORWARD; 00405 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]); 00406 COMBA_STORE(C->dp[9]); 00407 /* 10 */ 00408 COMBA_FORWARD; 00409 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]); 00410 COMBA_STORE(C->dp[10]); 00411 /* 11 */ 00412 COMBA_FORWARD; 00413 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]); 00414 COMBA_STORE(C->dp[11]); 00415 /* 12 */ 00416 COMBA_FORWARD; 00417 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]); 00418 COMBA_STORE(C->dp[12]); 00419 /* 13 */ 00420 COMBA_FORWARD; 00421 MULADD(at[5], at[17]); MULADD(at[6], at[16]); MULADD(at[7], at[15]); MULADD(at[8], at[14]); 00422 COMBA_STORE(C->dp[13]); 00423 /* 14 */ 00424 COMBA_FORWARD; 00425 MULADD(at[6], at[17]); MULADD(at[7], at[16]); MULADD(at[8], at[15]); 00426 COMBA_STORE(C->dp[14]); 00427 /* 15 */ 00428 COMBA_FORWARD; 00429 MULADD(at[7], at[17]); MULADD(at[8], at[16]); 00430 COMBA_STORE(C->dp[15]); 00431 /* 16 */ 00432 COMBA_FORWARD; 00433 MULADD(at[8], at[17]); 00434 COMBA_STORE(C->dp[16]); 00435 COMBA_STORE2(C->dp[17]); 00436 C->used = 18; 00437 C->sign = A->sign ^ B->sign; 00438 fp_clamp(C); 00439 COMBA_FINI; 00440 break; 00441 00442 case 10: 00443 memcpy(at, A->dp, 10 * sizeof(fp_digit)); 00444 memcpy(at+10, B->dp, 10 * sizeof(fp_digit)); 00445 COMBA_START; 00446 00447 COMBA_CLEAR; 00448 /* 0 */ 00449 MULADD(at[0], at[10]); 00450 COMBA_STORE(C->dp[0]); 00451 /* 1 */ 00452 COMBA_FORWARD; 00453 MULADD(at[0], at[11]); MULADD(at[1], at[10]); 00454 COMBA_STORE(C->dp[1]); 00455 /* 2 */ 00456 COMBA_FORWARD; 00457 MULADD(at[0], at[12]); MULADD(at[1], at[11]); MULADD(at[2], at[10]); 00458 COMBA_STORE(C->dp[2]); 00459 /* 3 */ 00460 COMBA_FORWARD; 00461 MULADD(at[0], at[13]); MULADD(at[1], at[12]); MULADD(at[2], at[11]); MULADD(at[3], at[10]); 00462 COMBA_STORE(C->dp[3]); 00463 /* 4 */ 00464 COMBA_FORWARD; 00465 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]); 00466 COMBA_STORE(C->dp[4]); 00467 /* 5 */ 00468 COMBA_FORWARD; 00469 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]); 00470 COMBA_STORE(C->dp[5]); 00471 /* 6 */ 00472 COMBA_FORWARD; 00473 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]); 00474 COMBA_STORE(C->dp[6]); 00475 /* 7 */ 00476 COMBA_FORWARD; 00477 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]); 00478 COMBA_STORE(C->dp[7]); 00479 /* 8 */ 00480 COMBA_FORWARD; 00481 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]); 00482 COMBA_STORE(C->dp[8]); 00483 /* 9 */ 00484 COMBA_FORWARD; 00485 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]); 00486 COMBA_STORE(C->dp[9]); 00487 /* 10 */ 00488 COMBA_FORWARD; 00489 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]); 00490 COMBA_STORE(C->dp[10]); 00491 /* 11 */ 00492 COMBA_FORWARD; 00493 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]); 00494 COMBA_STORE(C->dp[11]); 00495 /* 12 */ 00496 COMBA_FORWARD; 00497 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]); 00498 COMBA_STORE(C->dp[12]); 00499 /* 13 */ 00500 COMBA_FORWARD; 00501 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]); 00502 COMBA_STORE(C->dp[13]); 00503 /* 14 */ 00504 COMBA_FORWARD; 00505 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]); 00506 COMBA_STORE(C->dp[14]); 00507 /* 15 */ 00508 COMBA_FORWARD; 00509 MULADD(at[6], at[19]); MULADD(at[7], at[18]); MULADD(at[8], at[17]); MULADD(at[9], at[16]); 00510 COMBA_STORE(C->dp[15]); 00511 /* 16 */ 00512 COMBA_FORWARD; 00513 MULADD(at[7], at[19]); MULADD(at[8], at[18]); MULADD(at[9], at[17]); 00514 COMBA_STORE(C->dp[16]); 00515 /* 17 */ 00516 COMBA_FORWARD; 00517 MULADD(at[8], at[19]); MULADD(at[9], at[18]); 00518 COMBA_STORE(C->dp[17]); 00519 /* 18 */ 00520 COMBA_FORWARD; 00521 MULADD(at[9], at[19]); 00522 COMBA_STORE(C->dp[18]); 00523 COMBA_STORE2(C->dp[19]); 00524 C->used = 20; 00525 C->sign = A->sign ^ B->sign; 00526 fp_clamp(C); 00527 COMBA_FINI; 00528 break; 00529 00530 case 11: 00531 memcpy(at, A->dp, 11 * sizeof(fp_digit)); 00532 memcpy(at+11, B->dp, 11 * sizeof(fp_digit)); 00533 COMBA_START; 00534 00535 COMBA_CLEAR; 00536 /* 0 */ 00537 MULADD(at[0], at[11]); 00538 COMBA_STORE(C->dp[0]); 00539 /* 1 */ 00540 COMBA_FORWARD; 00541 MULADD(at[0], at[12]); MULADD(at[1], at[11]); 00542 COMBA_STORE(C->dp[1]); 00543 /* 2 */ 00544 COMBA_FORWARD; 00545 MULADD(at[0], at[13]); MULADD(at[1], at[12]); MULADD(at[2], at[11]); 00546 COMBA_STORE(C->dp[2]); 00547 /* 3 */ 00548 COMBA_FORWARD; 00549 MULADD(at[0], at[14]); MULADD(at[1], at[13]); MULADD(at[2], at[12]); MULADD(at[3], at[11]); 00550 COMBA_STORE(C->dp[3]); 00551 /* 4 */ 00552 COMBA_FORWARD; 00553 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]); 00554 COMBA_STORE(C->dp[4]); 00555 /* 5 */ 00556 COMBA_FORWARD; 00557 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]); 00558 COMBA_STORE(C->dp[5]); 00559 /* 6 */ 00560 COMBA_FORWARD; 00561 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]); 00562 COMBA_STORE(C->dp[6]); 00563 /* 7 */ 00564 COMBA_FORWARD; 00565 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]); 00566 COMBA_STORE(C->dp[7]); 00567 /* 8 */ 00568 COMBA_FORWARD; 00569 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]); 00570 COMBA_STORE(C->dp[8]); 00571 /* 9 */ 00572 COMBA_FORWARD; 00573 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]); 00574 COMBA_STORE(C->dp[9]); 00575 /* 10 */ 00576 COMBA_FORWARD; 00577 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]); 00578 COMBA_STORE(C->dp[10]); 00579 /* 11 */ 00580 COMBA_FORWARD; 00581 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]); 00582 COMBA_STORE(C->dp[11]); 00583 /* 12 */ 00584 COMBA_FORWARD; 00585 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]); 00586 COMBA_STORE(C->dp[12]); 00587 /* 13 */ 00588 COMBA_FORWARD; 00589 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]); 00590 COMBA_STORE(C->dp[13]); 00591 /* 14 */ 00592 COMBA_FORWARD; 00593 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]); 00594 COMBA_STORE(C->dp[14]); 00595 /* 15 */ 00596 COMBA_FORWARD; 00597 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]); 00598 COMBA_STORE(C->dp[15]); 00599 /* 16 */ 00600 COMBA_FORWARD; 00601 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]); 00602 COMBA_STORE(C->dp[16]); 00603 /* 17 */ 00604 COMBA_FORWARD; 00605 MULADD(at[7], at[21]); MULADD(at[8], at[20]); MULADD(at[9], at[19]); MULADD(at[10], at[18]); 00606 COMBA_STORE(C->dp[17]); 00607 /* 18 */ 00608 COMBA_FORWARD; 00609 MULADD(at[8], at[21]); MULADD(at[9], at[20]); MULADD(at[10], at[19]); 00610 COMBA_STORE(C->dp[18]); 00611 /* 19 */ 00612 COMBA_FORWARD; 00613 MULADD(at[9], at[21]); MULADD(at[10], at[20]); 00614 COMBA_STORE(C->dp[19]); 00615 /* 20 */ 00616 COMBA_FORWARD; 00617 MULADD(at[10], at[21]); 00618 COMBA_STORE(C->dp[20]); 00619 COMBA_STORE2(C->dp[21]); 00620 C->used = 22; 00621 C->sign = A->sign ^ B->sign; 00622 fp_clamp(C); 00623 COMBA_FINI; 00624 break; 00625 00626 case 12: 00627 memcpy(at, A->dp, 12 * sizeof(fp_digit)); 00628 memcpy(at+12, B->dp, 12 * sizeof(fp_digit)); 00629 COMBA_START; 00630 00631 COMBA_CLEAR; 00632 /* 0 */ 00633 MULADD(at[0], at[12]); 00634 COMBA_STORE(C->dp[0]); 00635 /* 1 */ 00636 COMBA_FORWARD; 00637 MULADD(at[0], at[13]); MULADD(at[1], at[12]); 00638 COMBA_STORE(C->dp[1]); 00639 /* 2 */ 00640 COMBA_FORWARD; 00641 MULADD(at[0], at[14]); MULADD(at[1], at[13]); MULADD(at[2], at[12]); 00642 COMBA_STORE(C->dp[2]); 00643 /* 3 */ 00644 COMBA_FORWARD; 00645 MULADD(at[0], at[15]); MULADD(at[1], at[14]); MULADD(at[2], at[13]); MULADD(at[3], at[12]); 00646 COMBA_STORE(C->dp[3]); 00647 /* 4 */ 00648 COMBA_FORWARD; 00649 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]); 00650 COMBA_STORE(C->dp[4]); 00651 /* 5 */ 00652 COMBA_FORWARD; 00653 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]); 00654 COMBA_STORE(C->dp[5]); 00655 /* 6 */ 00656 COMBA_FORWARD; 00657 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]); 00658 COMBA_STORE(C->dp[6]); 00659 /* 7 */ 00660 COMBA_FORWARD; 00661 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]); 00662 COMBA_STORE(C->dp[7]); 00663 /* 8 */ 00664 COMBA_FORWARD; 00665 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]); 00666 COMBA_STORE(C->dp[8]); 00667 /* 9 */ 00668 COMBA_FORWARD; 00669 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]); 00670 COMBA_STORE(C->dp[9]); 00671 /* 10 */ 00672 COMBA_FORWARD; 00673 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]); 00674 COMBA_STORE(C->dp[10]); 00675 /* 11 */ 00676 COMBA_FORWARD; 00677 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]); 00678 COMBA_STORE(C->dp[11]); 00679 /* 12 */ 00680 COMBA_FORWARD; 00681 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]); 00682 COMBA_STORE(C->dp[12]); 00683 /* 13 */ 00684 COMBA_FORWARD; 00685 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]); 00686 COMBA_STORE(C->dp[13]); 00687 /* 14 */ 00688 COMBA_FORWARD; 00689 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]); 00690 COMBA_STORE(C->dp[14]); 00691 /* 15 */ 00692 COMBA_FORWARD; 00693 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]); 00694 COMBA_STORE(C->dp[15]); 00695 /* 16 */ 00696 COMBA_FORWARD; 00697 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]); 00698 COMBA_STORE(C->dp[16]); 00699 /* 17 */ 00700 COMBA_FORWARD; 00701 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]); 00702 COMBA_STORE(C->dp[17]); 00703 /* 18 */ 00704 COMBA_FORWARD; 00705 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]); 00706 COMBA_STORE(C->dp[18]); 00707 /* 19 */ 00708 COMBA_FORWARD; 00709 MULADD(at[8], at[23]); MULADD(at[9], at[22]); MULADD(at[10], at[21]); MULADD(at[11], at[20]); 00710 COMBA_STORE(C->dp[19]); 00711 /* 20 */ 00712 COMBA_FORWARD; 00713 MULADD(at[9], at[23]); MULADD(at[10], at[22]); MULADD(at[11], at[21]); 00714 COMBA_STORE(C->dp[20]); 00715 /* 21 */ 00716 COMBA_FORWARD; 00717 MULADD(at[10], at[23]); MULADD(at[11], at[22]); 00718 COMBA_STORE(C->dp[21]); 00719 /* 22 */ 00720 COMBA_FORWARD; 00721 MULADD(at[11], at[23]); 00722 COMBA_STORE(C->dp[22]); 00723 COMBA_STORE2(C->dp[23]); 00724 C->used = 24; 00725 C->sign = A->sign ^ B->sign; 00726 fp_clamp(C); 00727 COMBA_FINI; 00728 break; 00729 00730 case 13: 00731 memcpy(at, A->dp, 13 * sizeof(fp_digit)); 00732 memcpy(at+13, B->dp, 13 * sizeof(fp_digit)); 00733 COMBA_START; 00734 00735 COMBA_CLEAR; 00736 /* 0 */ 00737 MULADD(at[0], at[13]); 00738 COMBA_STORE(C->dp[0]); 00739 /* 1 */ 00740 COMBA_FORWARD; 00741 MULADD(at[0], at[14]); MULADD(at[1], at[13]); 00742 COMBA_STORE(C->dp[1]); 00743 /* 2 */ 00744 COMBA_FORWARD; 00745 MULADD(at[0], at[15]); MULADD(at[1], at[14]); MULADD(at[2], at[13]); 00746 COMBA_STORE(C->dp[2]); 00747 /* 3 */ 00748 COMBA_FORWARD; 00749 MULADD(at[0], at[16]); MULADD(at[1], at[15]); MULADD(at[2], at[14]); MULADD(at[3], at[13]); 00750 COMBA_STORE(C->dp[3]); 00751 /* 4 */ 00752 COMBA_FORWARD; 00753 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]); 00754 COMBA_STORE(C->dp[4]); 00755 /* 5 */ 00756 COMBA_FORWARD; 00757 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]); 00758 COMBA_STORE(C->dp[5]); 00759 /* 6 */ 00760 COMBA_FORWARD; 00761 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]); 00762 COMBA_STORE(C->dp[6]); 00763 /* 7 */ 00764 COMBA_FORWARD; 00765 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]); 00766 COMBA_STORE(C->dp[7]); 00767 /* 8 */ 00768 COMBA_FORWARD; 00769 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]); 00770 COMBA_STORE(C->dp[8]); 00771 /* 9 */ 00772 COMBA_FORWARD; 00773 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]); 00774 COMBA_STORE(C->dp[9]); 00775 /* 10 */ 00776 COMBA_FORWARD; 00777 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]); 00778 COMBA_STORE(C->dp[10]); 00779 /* 11 */ 00780 COMBA_FORWARD; 00781 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]); 00782 COMBA_STORE(C->dp[11]); 00783 /* 12 */ 00784 COMBA_FORWARD; 00785 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]); 00786 COMBA_STORE(C->dp[12]); 00787 /* 13 */ 00788 COMBA_FORWARD; 00789 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]); 00790 COMBA_STORE(C->dp[13]); 00791 /* 14 */ 00792 COMBA_FORWARD; 00793 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]); 00794 COMBA_STORE(C->dp[14]); 00795 /* 15 */ 00796 COMBA_FORWARD; 00797 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]); 00798 COMBA_STORE(C->dp[15]); 00799 /* 16 */ 00800 COMBA_FORWARD; 00801 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]); 00802 COMBA_STORE(C->dp[16]); 00803 /* 17 */ 00804 COMBA_FORWARD; 00805 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]); 00806 COMBA_STORE(C->dp[17]); 00807 /* 18 */ 00808 COMBA_FORWARD; 00809 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]); 00810 COMBA_STORE(C->dp[18]); 00811 /* 19 */ 00812 COMBA_FORWARD; 00813 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]); 00814 COMBA_STORE(C->dp[19]); 00815 /* 20 */ 00816 COMBA_FORWARD; 00817 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]); 00818 COMBA_STORE(C->dp[20]); 00819 /* 21 */ 00820 COMBA_FORWARD; 00821 MULADD(at[9], at[25]); MULADD(at[10], at[24]); MULADD(at[11], at[23]); MULADD(at[12], at[22]); 00822 COMBA_STORE(C->dp[21]); 00823 /* 22 */ 00824 COMBA_FORWARD; 00825 MULADD(at[10], at[25]); MULADD(at[11], at[24]); MULADD(at[12], at[23]); 00826 COMBA_STORE(C->dp[22]); 00827 /* 23 */ 00828 COMBA_FORWARD; 00829 MULADD(at[11], at[25]); MULADD(at[12], at[24]); 00830 COMBA_STORE(C->dp[23]); 00831 /* 24 */ 00832 COMBA_FORWARD; 00833 MULADD(at[12], at[25]); 00834 COMBA_STORE(C->dp[24]); 00835 COMBA_STORE2(C->dp[25]); 00836 C->used = 26; 00837 C->sign = A->sign ^ B->sign; 00838 fp_clamp(C); 00839 COMBA_FINI; 00840 break; 00841 00842 case 14: 00843 memcpy(at, A->dp, 14 * sizeof(fp_digit)); 00844 memcpy(at+14, B->dp, 14 * sizeof(fp_digit)); 00845 COMBA_START; 00846 00847 COMBA_CLEAR; 00848 /* 0 */ 00849 MULADD(at[0], at[14]); 00850 COMBA_STORE(C->dp[0]); 00851 /* 1 */ 00852 COMBA_FORWARD; 00853 MULADD(at[0], at[15]); MULADD(at[1], at[14]); 00854 COMBA_STORE(C->dp[1]); 00855 /* 2 */ 00856 COMBA_FORWARD; 00857 MULADD(at[0], at[16]); MULADD(at[1], at[15]); MULADD(at[2], at[14]); 00858 COMBA_STORE(C->dp[2]); 00859 /* 3 */ 00860 COMBA_FORWARD; 00861 MULADD(at[0], at[17]); MULADD(at[1], at[16]); MULADD(at[2], at[15]); MULADD(at[3], at[14]); 00862 COMBA_STORE(C->dp[3]); 00863 /* 4 */ 00864 COMBA_FORWARD; 00865 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]); 00866 COMBA_STORE(C->dp[4]); 00867 /* 5 */ 00868 COMBA_FORWARD; 00869 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]); 00870 COMBA_STORE(C->dp[5]); 00871 /* 6 */ 00872 COMBA_FORWARD; 00873 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]); 00874 COMBA_STORE(C->dp[6]); 00875 /* 7 */ 00876 COMBA_FORWARD; 00877 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]); 00878 COMBA_STORE(C->dp[7]); 00879 /* 8 */ 00880 COMBA_FORWARD; 00881 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]); 00882 COMBA_STORE(C->dp[8]); 00883 /* 9 */ 00884 COMBA_FORWARD; 00885 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]); 00886 COMBA_STORE(C->dp[9]); 00887 /* 10 */ 00888 COMBA_FORWARD; 00889 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]); 00890 COMBA_STORE(C->dp[10]); 00891 /* 11 */ 00892 COMBA_FORWARD; 00893 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]); 00894 COMBA_STORE(C->dp[11]); 00895 /* 12 */ 00896 COMBA_FORWARD; 00897 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]); 00898 COMBA_STORE(C->dp[12]); 00899 /* 13 */ 00900 COMBA_FORWARD; 00901 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]); 00902 COMBA_STORE(C->dp[13]); 00903 /* 14 */ 00904 COMBA_FORWARD; 00905 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]); 00906 COMBA_STORE(C->dp[14]); 00907 /* 15 */ 00908 COMBA_FORWARD; 00909 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]); 00910 COMBA_STORE(C->dp[15]); 00911 /* 16 */ 00912 COMBA_FORWARD; 00913 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]); 00914 COMBA_STORE(C->dp[16]); 00915 /* 17 */ 00916 COMBA_FORWARD; 00917 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]); 00918 COMBA_STORE(C->dp[17]); 00919 /* 18 */ 00920 COMBA_FORWARD; 00921 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]); 00922 COMBA_STORE(C->dp[18]); 00923 /* 19 */ 00924 COMBA_FORWARD; 00925 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]); 00926 COMBA_STORE(C->dp[19]); 00927 /* 20 */ 00928 COMBA_FORWARD; 00929 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]); 00930 COMBA_STORE(C->dp[20]); 00931 /* 21 */ 00932 COMBA_FORWARD; 00933 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]); 00934 COMBA_STORE(C->dp[21]); 00935 /* 22 */ 00936 COMBA_FORWARD; 00937 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]); 00938 COMBA_STORE(C->dp[22]); 00939 /* 23 */ 00940 COMBA_FORWARD; 00941 MULADD(at[10], at[27]); MULADD(at[11], at[26]); MULADD(at[12], at[25]); MULADD(at[13], at[24]); 00942 COMBA_STORE(C->dp[23]); 00943 /* 24 */ 00944 COMBA_FORWARD; 00945 MULADD(at[11], at[27]); MULADD(at[12], at[26]); MULADD(at[13], at[25]); 00946 COMBA_STORE(C->dp[24]); 00947 /* 25 */ 00948 COMBA_FORWARD; 00949 MULADD(at[12], at[27]); MULADD(at[13], at[26]); 00950 COMBA_STORE(C->dp[25]); 00951 /* 26 */ 00952 COMBA_FORWARD; 00953 MULADD(at[13], at[27]); 00954 COMBA_STORE(C->dp[26]); 00955 COMBA_STORE2(C->dp[27]); 00956 C->used = 28; 00957 C->sign = A->sign ^ B->sign; 00958 fp_clamp(C); 00959 COMBA_FINI; 00960 break; 00961 00962 case 15: 00963 memcpy(at, A->dp, 15 * sizeof(fp_digit)); 00964 memcpy(at+15, B->dp, 15 * sizeof(fp_digit)); 00965 COMBA_START; 00966 00967 COMBA_CLEAR; 00968 /* 0 */ 00969 MULADD(at[0], at[15]); 00970 COMBA_STORE(C->dp[0]); 00971 /* 1 */ 00972 COMBA_FORWARD; 00973 MULADD(at[0], at[16]); MULADD(at[1], at[15]); 00974 COMBA_STORE(C->dp[1]); 00975 /* 2 */ 00976 COMBA_FORWARD; 00977 MULADD(at[0], at[17]); MULADD(at[1], at[16]); MULADD(at[2], at[15]); 00978 COMBA_STORE(C->dp[2]); 00979 /* 3 */ 00980 COMBA_FORWARD; 00981 MULADD(at[0], at[18]); MULADD(at[1], at[17]); MULADD(at[2], at[16]); MULADD(at[3], at[15]); 00982 COMBA_STORE(C->dp[3]); 00983 /* 4 */ 00984 COMBA_FORWARD; 00985 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]); 00986 COMBA_STORE(C->dp[4]); 00987 /* 5 */ 00988 COMBA_FORWARD; 00989 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]); 00990 COMBA_STORE(C->dp[5]); 00991 /* 6 */ 00992 COMBA_FORWARD; 00993 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]); 00994 COMBA_STORE(C->dp[6]); 00995 /* 7 */ 00996 COMBA_FORWARD; 00997 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]); 00998 COMBA_STORE(C->dp[7]); 00999 /* 8 */ 01000 COMBA_FORWARD; 01001 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]); 01002 COMBA_STORE(C->dp[8]); 01003 /* 9 */ 01004 COMBA_FORWARD; 01005 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]); 01006 COMBA_STORE(C->dp[9]); 01007 /* 10 */ 01008 COMBA_FORWARD; 01009 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]); 01010 COMBA_STORE(C->dp[10]); 01011 /* 11 */ 01012 COMBA_FORWARD; 01013 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]); 01014 COMBA_STORE(C->dp[11]); 01015 /* 12 */ 01016 COMBA_FORWARD; 01017 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]); 01018 COMBA_STORE(C->dp[12]); 01019 /* 13 */ 01020 COMBA_FORWARD; 01021 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]); 01022 COMBA_STORE(C->dp[13]); 01023 /* 14 */ 01024 COMBA_FORWARD; 01025 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]); 01026 COMBA_STORE(C->dp[14]); 01027 /* 15 */ 01028 COMBA_FORWARD; 01029 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]); 01030 COMBA_STORE(C->dp[15]); 01031 /* 16 */ 01032 COMBA_FORWARD; 01033 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]); 01034 COMBA_STORE(C->dp[16]); 01035 /* 17 */ 01036 COMBA_FORWARD; 01037 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]); 01038 COMBA_STORE(C->dp[17]); 01039 /* 18 */ 01040 COMBA_FORWARD; 01041 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]); 01042 COMBA_STORE(C->dp[18]); 01043 /* 19 */ 01044 COMBA_FORWARD; 01045 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]); 01046 COMBA_STORE(C->dp[19]); 01047 /* 20 */ 01048 COMBA_FORWARD; 01049 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]); 01050 COMBA_STORE(C->dp[20]); 01051 /* 21 */ 01052 COMBA_FORWARD; 01053 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]); 01054 COMBA_STORE(C->dp[21]); 01055 /* 22 */ 01056 COMBA_FORWARD; 01057 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]); 01058 COMBA_STORE(C->dp[22]); 01059 /* 23 */ 01060 COMBA_FORWARD; 01061 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]); 01062 COMBA_STORE(C->dp[23]); 01063 /* 24 */ 01064 COMBA_FORWARD; 01065 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]); 01066 COMBA_STORE(C->dp[24]); 01067 /* 25 */ 01068 COMBA_FORWARD; 01069 MULADD(at[11], at[29]); MULADD(at[12], at[28]); MULADD(at[13], at[27]); MULADD(at[14], at[26]); 01070 COMBA_STORE(C->dp[25]); 01071 /* 26 */ 01072 COMBA_FORWARD; 01073 MULADD(at[12], at[29]); MULADD(at[13], at[28]); MULADD(at[14], at[27]); 01074 COMBA_STORE(C->dp[26]); 01075 /* 27 */ 01076 COMBA_FORWARD; 01077 MULADD(at[13], at[29]); MULADD(at[14], at[28]); 01078 COMBA_STORE(C->dp[27]); 01079 /* 28 */ 01080 COMBA_FORWARD; 01081 MULADD(at[14], at[29]); 01082 COMBA_STORE(C->dp[28]); 01083 COMBA_STORE2(C->dp[29]); 01084 C->used = 30; 01085 C->sign = A->sign ^ B->sign; 01086 fp_clamp(C); 01087 COMBA_FINI; 01088 break; 01089 01090 case 16: 01091 memcpy(at, A->dp, 16 * sizeof(fp_digit)); 01092 memcpy(at+16, B->dp, 16 * sizeof(fp_digit)); 01093 COMBA_START; 01094 01095 COMBA_CLEAR; 01096 /* 0 */ 01097 MULADD(at[0], at[16]); 01098 COMBA_STORE(C->dp[0]); 01099 /* 1 */ 01100 COMBA_FORWARD; 01101 MULADD(at[0], at[17]); MULADD(at[1], at[16]); 01102 COMBA_STORE(C->dp[1]); 01103 /* 2 */ 01104 COMBA_FORWARD; 01105 MULADD(at[0], at[18]); MULADD(at[1], at[17]); MULADD(at[2], at[16]); 01106 COMBA_STORE(C->dp[2]); 01107 /* 3 */ 01108 COMBA_FORWARD; 01109 MULADD(at[0], at[19]); MULADD(at[1], at[18]); MULADD(at[2], at[17]); MULADD(at[3], at[16]); 01110 COMBA_STORE(C->dp[3]); 01111 /* 4 */ 01112 COMBA_FORWARD; 01113 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]); 01114 COMBA_STORE(C->dp[4]); 01115 /* 5 */ 01116 COMBA_FORWARD; 01117 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]); 01118 COMBA_STORE(C->dp[5]); 01119 /* 6 */ 01120 COMBA_FORWARD; 01121 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]); 01122 COMBA_STORE(C->dp[6]); 01123 /* 7 */ 01124 COMBA_FORWARD; 01125 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]); 01126 COMBA_STORE(C->dp[7]); 01127 /* 8 */ 01128 COMBA_FORWARD; 01129 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]); 01130 COMBA_STORE(C->dp[8]); 01131 /* 9 */ 01132 COMBA_FORWARD; 01133 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]); 01134 COMBA_STORE(C->dp[9]); 01135 /* 10 */ 01136 COMBA_FORWARD; 01137 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]); 01138 COMBA_STORE(C->dp[10]); 01139 /* 11 */ 01140 COMBA_FORWARD; 01141 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]); 01142 COMBA_STORE(C->dp[11]); 01143 /* 12 */ 01144 COMBA_FORWARD; 01145 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]); 01146 COMBA_STORE(C->dp[12]); 01147 /* 13 */ 01148 COMBA_FORWARD; 01149 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]); 01150 COMBA_STORE(C->dp[13]); 01151 /* 14 */ 01152 COMBA_FORWARD; 01153 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]); 01154 COMBA_STORE(C->dp[14]); 01155 /* 15 */ 01156 COMBA_FORWARD; 01157 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]); 01158 COMBA_STORE(C->dp[15]); 01159 /* 16 */ 01160 COMBA_FORWARD; 01161 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]); 01162 COMBA_STORE(C->dp[16]); 01163 /* 17 */ 01164 COMBA_FORWARD; 01165 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]); 01166 COMBA_STORE(C->dp[17]); 01167 /* 18 */ 01168 COMBA_FORWARD; 01169 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]); 01170 COMBA_STORE(C->dp[18]); 01171 /* 19 */ 01172 COMBA_FORWARD; 01173 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]); 01174 COMBA_STORE(C->dp[19]); 01175 /* 20 */ 01176 COMBA_FORWARD; 01177 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]); 01178 COMBA_STORE(C->dp[20]); 01179 /* 21 */ 01180 COMBA_FORWARD; 01181 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]); 01182 COMBA_STORE(C->dp[21]); 01183 /* 22 */ 01184 COMBA_FORWARD; 01185 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]); 01186 COMBA_STORE(C->dp[22]); 01187 /* 23 */ 01188 COMBA_FORWARD; 01189 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]); 01190 COMBA_STORE(C->dp[23]); 01191 /* 24 */ 01192 COMBA_FORWARD; 01193 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]); 01194 COMBA_STORE(C->dp[24]); 01195 /* 25 */ 01196 COMBA_FORWARD; 01197 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]); 01198 COMBA_STORE(C->dp[25]); 01199 /* 26 */ 01200 COMBA_FORWARD; 01201 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]); 01202 COMBA_STORE(C->dp[26]); 01203 /* 27 */ 01204 COMBA_FORWARD; 01205 MULADD(at[12], at[31]); MULADD(at[13], at[30]); MULADD(at[14], at[29]); MULADD(at[15], at[28]); 01206 COMBA_STORE(C->dp[27]); 01207 /* 28 */ 01208 COMBA_FORWARD; 01209 MULADD(at[13], at[31]); MULADD(at[14], at[30]); MULADD(at[15], at[29]); 01210 COMBA_STORE(C->dp[28]); 01211 /* 29 */ 01212 COMBA_FORWARD; 01213 MULADD(at[14], at[31]); MULADD(at[15], at[30]); 01214 COMBA_STORE(C->dp[29]); 01215 /* 30 */ 01216 COMBA_FORWARD; 01217 MULADD(at[15], at[31]); 01218 COMBA_STORE(C->dp[30]); 01219 COMBA_STORE2(C->dp[31]); 01220 C->used = 32; 01221 C->sign = A->sign ^ B->sign; 01222 fp_clamp(C); 01223 COMBA_FINI; 01224 break; 01225 } 01226 } 01227 01228 #endif
Generated on Tue Jul 12 2022 19:20:10 by
1.7.2
