ARM Shanghai IoT Team (Internal) / newMiniTLS-GPL

Fork of MiniTLS-GPL by Donatien Garnier

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers fp_sqr_comba_24.c Source File

fp_sqr_comba_24.c

00001 #define TFM_DEFINES
00002 #include "fp_sqr_comba.c"
00003 
00004 #ifdef TFM_SQR24
00005 void fp_sqr_comba24(fp_int *A, fp_int *B)
00006 {
00007    fp_digit *a, b[48], c0, c1, c2, sc0, sc1, sc2;
00008 #ifdef TFM_ISO
00009    fp_word tt;
00010 #endif
00011 
00012    a = A->dp;
00013    COMBA_START; 
00014 
00015    /* clear carries */
00016    CLEAR_CARRY;
00017 
00018    /* output 0 */
00019    SQRADD(a[0],a[0]);
00020    COMBA_STORE(b[0]);
00021 
00022    /* output 1 */
00023    CARRY_FORWARD;
00024    SQRADD2(a[0], a[1]); 
00025    COMBA_STORE(b[1]);
00026 
00027    /* output 2 */
00028    CARRY_FORWARD;
00029    SQRADD2(a[0], a[2]); SQRADD(a[1], a[1]); 
00030    COMBA_STORE(b[2]);
00031 
00032    /* output 3 */
00033    CARRY_FORWARD;
00034    SQRADD2(a[0], a[3]); SQRADD2(a[1], a[2]); 
00035    COMBA_STORE(b[3]);
00036 
00037    /* output 4 */
00038    CARRY_FORWARD;
00039    SQRADD2(a[0], a[4]); SQRADD2(a[1], a[3]); SQRADD(a[2], a[2]); 
00040    COMBA_STORE(b[4]);
00041 
00042    /* output 5 */
00043    CARRY_FORWARD;
00044    SQRADDSC(a[0], a[5]); SQRADDAC(a[1], a[4]); SQRADDAC(a[2], a[3]); SQRADDDB; 
00045    COMBA_STORE(b[5]);
00046 
00047    /* output 6 */
00048    CARRY_FORWARD;
00049    SQRADDSC(a[0], a[6]); SQRADDAC(a[1], a[5]); SQRADDAC(a[2], a[4]); SQRADDDB; SQRADD(a[3], a[3]); 
00050    COMBA_STORE(b[6]);
00051 
00052    /* output 7 */
00053    CARRY_FORWARD;
00054    SQRADDSC(a[0], a[7]); SQRADDAC(a[1], a[6]); SQRADDAC(a[2], a[5]); SQRADDAC(a[3], a[4]); SQRADDDB; 
00055    COMBA_STORE(b[7]);
00056 
00057    /* output 8 */
00058    CARRY_FORWARD;
00059    SQRADDSC(a[0], a[8]); SQRADDAC(a[1], a[7]); SQRADDAC(a[2], a[6]); SQRADDAC(a[3], a[5]); SQRADDDB; SQRADD(a[4], a[4]); 
00060    COMBA_STORE(b[8]);
00061 
00062    /* output 9 */
00063    CARRY_FORWARD;
00064    SQRADDSC(a[0], a[9]); SQRADDAC(a[1], a[8]); SQRADDAC(a[2], a[7]); SQRADDAC(a[3], a[6]); SQRADDAC(a[4], a[5]); SQRADDDB; 
00065    COMBA_STORE(b[9]);
00066 
00067    /* output 10 */
00068    CARRY_FORWARD;
00069    SQRADDSC(a[0], a[10]); SQRADDAC(a[1], a[9]); SQRADDAC(a[2], a[8]); SQRADDAC(a[3], a[7]); SQRADDAC(a[4], a[6]); SQRADDDB; SQRADD(a[5], a[5]); 
00070    COMBA_STORE(b[10]);
00071 
00072    /* output 11 */
00073    CARRY_FORWARD;
00074    SQRADDSC(a[0], a[11]); SQRADDAC(a[1], a[10]); SQRADDAC(a[2], a[9]); SQRADDAC(a[3], a[8]); SQRADDAC(a[4], a[7]); SQRADDAC(a[5], a[6]); SQRADDDB; 
00075    COMBA_STORE(b[11]);
00076 
00077    /* output 12 */
00078    CARRY_FORWARD;
00079    SQRADDSC(a[0], a[12]); SQRADDAC(a[1], a[11]); SQRADDAC(a[2], a[10]); SQRADDAC(a[3], a[9]); SQRADDAC(a[4], a[8]); SQRADDAC(a[5], a[7]); SQRADDDB; SQRADD(a[6], a[6]); 
00080    COMBA_STORE(b[12]);
00081 
00082    /* output 13 */
00083    CARRY_FORWARD;
00084    SQRADDSC(a[0], a[13]); SQRADDAC(a[1], a[12]); SQRADDAC(a[2], a[11]); SQRADDAC(a[3], a[10]); SQRADDAC(a[4], a[9]); SQRADDAC(a[5], a[8]); SQRADDAC(a[6], a[7]); SQRADDDB; 
00085    COMBA_STORE(b[13]);
00086 
00087    /* output 14 */
00088    CARRY_FORWARD;
00089    SQRADDSC(a[0], a[14]); SQRADDAC(a[1], a[13]); SQRADDAC(a[2], a[12]); SQRADDAC(a[3], a[11]); SQRADDAC(a[4], a[10]); SQRADDAC(a[5], a[9]); SQRADDAC(a[6], a[8]); SQRADDDB; SQRADD(a[7], a[7]); 
00090    COMBA_STORE(b[14]);
00091 
00092    /* output 15 */
00093    CARRY_FORWARD;
00094    SQRADDSC(a[0], a[15]); SQRADDAC(a[1], a[14]); SQRADDAC(a[2], a[13]); SQRADDAC(a[3], a[12]); SQRADDAC(a[4], a[11]); SQRADDAC(a[5], a[10]); SQRADDAC(a[6], a[9]); SQRADDAC(a[7], a[8]); SQRADDDB; 
00095    COMBA_STORE(b[15]);
00096 
00097    /* output 16 */
00098    CARRY_FORWARD;
00099    SQRADDSC(a[0], a[16]); SQRADDAC(a[1], a[15]); SQRADDAC(a[2], a[14]); SQRADDAC(a[3], a[13]); SQRADDAC(a[4], a[12]); SQRADDAC(a[5], a[11]); SQRADDAC(a[6], a[10]); SQRADDAC(a[7], a[9]); SQRADDDB; SQRADD(a[8], a[8]); 
00100    COMBA_STORE(b[16]);
00101 
00102    /* output 17 */
00103    CARRY_FORWARD;
00104    SQRADDSC(a[0], a[17]); SQRADDAC(a[1], a[16]); SQRADDAC(a[2], a[15]); SQRADDAC(a[3], a[14]); SQRADDAC(a[4], a[13]); SQRADDAC(a[5], a[12]); SQRADDAC(a[6], a[11]); SQRADDAC(a[7], a[10]); SQRADDAC(a[8], a[9]); SQRADDDB; 
00105    COMBA_STORE(b[17]);
00106 
00107    /* output 18 */
00108    CARRY_FORWARD;
00109    SQRADDSC(a[0], a[18]); SQRADDAC(a[1], a[17]); SQRADDAC(a[2], a[16]); SQRADDAC(a[3], a[15]); SQRADDAC(a[4], a[14]); SQRADDAC(a[5], a[13]); SQRADDAC(a[6], a[12]); SQRADDAC(a[7], a[11]); SQRADDAC(a[8], a[10]); SQRADDDB; SQRADD(a[9], a[9]); 
00110    COMBA_STORE(b[18]);
00111 
00112    /* output 19 */
00113    CARRY_FORWARD;
00114    SQRADDSC(a[0], a[19]); SQRADDAC(a[1], a[18]); SQRADDAC(a[2], a[17]); SQRADDAC(a[3], a[16]); SQRADDAC(a[4], a[15]); SQRADDAC(a[5], a[14]); SQRADDAC(a[6], a[13]); SQRADDAC(a[7], a[12]); SQRADDAC(a[8], a[11]); SQRADDAC(a[9], a[10]); SQRADDDB; 
00115    COMBA_STORE(b[19]);
00116 
00117    /* output 20 */
00118    CARRY_FORWARD;
00119    SQRADDSC(a[0], a[20]); SQRADDAC(a[1], a[19]); SQRADDAC(a[2], a[18]); SQRADDAC(a[3], a[17]); SQRADDAC(a[4], a[16]); SQRADDAC(a[5], a[15]); SQRADDAC(a[6], a[14]); SQRADDAC(a[7], a[13]); SQRADDAC(a[8], a[12]); SQRADDAC(a[9], a[11]); SQRADDDB; SQRADD(a[10], a[10]); 
00120    COMBA_STORE(b[20]);
00121 
00122    /* output 21 */
00123    CARRY_FORWARD;
00124    SQRADDSC(a[0], a[21]); SQRADDAC(a[1], a[20]); SQRADDAC(a[2], a[19]); SQRADDAC(a[3], a[18]); SQRADDAC(a[4], a[17]); SQRADDAC(a[5], a[16]); SQRADDAC(a[6], a[15]); SQRADDAC(a[7], a[14]); SQRADDAC(a[8], a[13]); SQRADDAC(a[9], a[12]); SQRADDAC(a[10], a[11]); SQRADDDB; 
00125    COMBA_STORE(b[21]);
00126 
00127    /* output 22 */
00128    CARRY_FORWARD;
00129    SQRADDSC(a[0], a[22]); SQRADDAC(a[1], a[21]); SQRADDAC(a[2], a[20]); SQRADDAC(a[3], a[19]); SQRADDAC(a[4], a[18]); SQRADDAC(a[5], a[17]); SQRADDAC(a[6], a[16]); SQRADDAC(a[7], a[15]); SQRADDAC(a[8], a[14]); SQRADDAC(a[9], a[13]); SQRADDAC(a[10], a[12]); SQRADDDB; SQRADD(a[11], a[11]); 
00130    COMBA_STORE(b[22]);
00131 
00132    /* output 23 */
00133    CARRY_FORWARD;
00134    SQRADDSC(a[0], a[23]); SQRADDAC(a[1], a[22]); SQRADDAC(a[2], a[21]); SQRADDAC(a[3], a[20]); SQRADDAC(a[4], a[19]); SQRADDAC(a[5], a[18]); SQRADDAC(a[6], a[17]); SQRADDAC(a[7], a[16]); SQRADDAC(a[8], a[15]); SQRADDAC(a[9], a[14]); SQRADDAC(a[10], a[13]); SQRADDAC(a[11], a[12]); SQRADDDB; 
00135    COMBA_STORE(b[23]);
00136 
00137    /* output 24 */
00138    CARRY_FORWARD;
00139    SQRADDSC(a[1], a[23]); SQRADDAC(a[2], a[22]); SQRADDAC(a[3], a[21]); SQRADDAC(a[4], a[20]); SQRADDAC(a[5], a[19]); SQRADDAC(a[6], a[18]); SQRADDAC(a[7], a[17]); SQRADDAC(a[8], a[16]); SQRADDAC(a[9], a[15]); SQRADDAC(a[10], a[14]); SQRADDAC(a[11], a[13]); SQRADDDB; SQRADD(a[12], a[12]); 
00140    COMBA_STORE(b[24]);
00141 
00142    /* output 25 */
00143    CARRY_FORWARD;
00144    SQRADDSC(a[2], a[23]); SQRADDAC(a[3], a[22]); SQRADDAC(a[4], a[21]); SQRADDAC(a[5], a[20]); SQRADDAC(a[6], a[19]); SQRADDAC(a[7], a[18]); SQRADDAC(a[8], a[17]); SQRADDAC(a[9], a[16]); SQRADDAC(a[10], a[15]); SQRADDAC(a[11], a[14]); SQRADDAC(a[12], a[13]); SQRADDDB; 
00145    COMBA_STORE(b[25]);
00146 
00147    /* output 26 */
00148    CARRY_FORWARD;
00149    SQRADDSC(a[3], a[23]); SQRADDAC(a[4], a[22]); SQRADDAC(a[5], a[21]); SQRADDAC(a[6], a[20]); SQRADDAC(a[7], a[19]); SQRADDAC(a[8], a[18]); SQRADDAC(a[9], a[17]); SQRADDAC(a[10], a[16]); SQRADDAC(a[11], a[15]); SQRADDAC(a[12], a[14]); SQRADDDB; SQRADD(a[13], a[13]); 
00150    COMBA_STORE(b[26]);
00151 
00152    /* output 27 */
00153    CARRY_FORWARD;
00154    SQRADDSC(a[4], a[23]); SQRADDAC(a[5], a[22]); SQRADDAC(a[6], a[21]); SQRADDAC(a[7], a[20]); SQRADDAC(a[8], a[19]); SQRADDAC(a[9], a[18]); SQRADDAC(a[10], a[17]); SQRADDAC(a[11], a[16]); SQRADDAC(a[12], a[15]); SQRADDAC(a[13], a[14]); SQRADDDB; 
00155    COMBA_STORE(b[27]);
00156 
00157    /* output 28 */
00158    CARRY_FORWARD;
00159    SQRADDSC(a[5], a[23]); SQRADDAC(a[6], a[22]); SQRADDAC(a[7], a[21]); SQRADDAC(a[8], a[20]); SQRADDAC(a[9], a[19]); SQRADDAC(a[10], a[18]); SQRADDAC(a[11], a[17]); SQRADDAC(a[12], a[16]); SQRADDAC(a[13], a[15]); SQRADDDB; SQRADD(a[14], a[14]); 
00160    COMBA_STORE(b[28]);
00161 
00162    /* output 29 */
00163    CARRY_FORWARD;
00164    SQRADDSC(a[6], a[23]); SQRADDAC(a[7], a[22]); SQRADDAC(a[8], a[21]); SQRADDAC(a[9], a[20]); SQRADDAC(a[10], a[19]); SQRADDAC(a[11], a[18]); SQRADDAC(a[12], a[17]); SQRADDAC(a[13], a[16]); SQRADDAC(a[14], a[15]); SQRADDDB; 
00165    COMBA_STORE(b[29]);
00166 
00167    /* output 30 */
00168    CARRY_FORWARD;
00169    SQRADDSC(a[7], a[23]); SQRADDAC(a[8], a[22]); SQRADDAC(a[9], a[21]); SQRADDAC(a[10], a[20]); SQRADDAC(a[11], a[19]); SQRADDAC(a[12], a[18]); SQRADDAC(a[13], a[17]); SQRADDAC(a[14], a[16]); SQRADDDB; SQRADD(a[15], a[15]); 
00170    COMBA_STORE(b[30]);
00171 
00172    /* output 31 */
00173    CARRY_FORWARD;
00174    SQRADDSC(a[8], a[23]); SQRADDAC(a[9], a[22]); SQRADDAC(a[10], a[21]); SQRADDAC(a[11], a[20]); SQRADDAC(a[12], a[19]); SQRADDAC(a[13], a[18]); SQRADDAC(a[14], a[17]); SQRADDAC(a[15], a[16]); SQRADDDB; 
00175    COMBA_STORE(b[31]);
00176 
00177    /* output 32 */
00178    CARRY_FORWARD;
00179    SQRADDSC(a[9], a[23]); SQRADDAC(a[10], a[22]); SQRADDAC(a[11], a[21]); SQRADDAC(a[12], a[20]); SQRADDAC(a[13], a[19]); SQRADDAC(a[14], a[18]); SQRADDAC(a[15], a[17]); SQRADDDB; SQRADD(a[16], a[16]); 
00180    COMBA_STORE(b[32]);
00181 
00182    /* output 33 */
00183    CARRY_FORWARD;
00184    SQRADDSC(a[10], a[23]); SQRADDAC(a[11], a[22]); SQRADDAC(a[12], a[21]); SQRADDAC(a[13], a[20]); SQRADDAC(a[14], a[19]); SQRADDAC(a[15], a[18]); SQRADDAC(a[16], a[17]); SQRADDDB; 
00185    COMBA_STORE(b[33]);
00186 
00187    /* output 34 */
00188    CARRY_FORWARD;
00189    SQRADDSC(a[11], a[23]); SQRADDAC(a[12], a[22]); SQRADDAC(a[13], a[21]); SQRADDAC(a[14], a[20]); SQRADDAC(a[15], a[19]); SQRADDAC(a[16], a[18]); SQRADDDB; SQRADD(a[17], a[17]); 
00190    COMBA_STORE(b[34]);
00191 
00192    /* output 35 */
00193    CARRY_FORWARD;
00194    SQRADDSC(a[12], a[23]); SQRADDAC(a[13], a[22]); SQRADDAC(a[14], a[21]); SQRADDAC(a[15], a[20]); SQRADDAC(a[16], a[19]); SQRADDAC(a[17], a[18]); SQRADDDB; 
00195    COMBA_STORE(b[35]);
00196 
00197    /* output 36 */
00198    CARRY_FORWARD;
00199    SQRADDSC(a[13], a[23]); SQRADDAC(a[14], a[22]); SQRADDAC(a[15], a[21]); SQRADDAC(a[16], a[20]); SQRADDAC(a[17], a[19]); SQRADDDB; SQRADD(a[18], a[18]); 
00200    COMBA_STORE(b[36]);
00201 
00202    /* output 37 */
00203    CARRY_FORWARD;
00204    SQRADDSC(a[14], a[23]); SQRADDAC(a[15], a[22]); SQRADDAC(a[16], a[21]); SQRADDAC(a[17], a[20]); SQRADDAC(a[18], a[19]); SQRADDDB; 
00205    COMBA_STORE(b[37]);
00206 
00207    /* output 38 */
00208    CARRY_FORWARD;
00209    SQRADDSC(a[15], a[23]); SQRADDAC(a[16], a[22]); SQRADDAC(a[17], a[21]); SQRADDAC(a[18], a[20]); SQRADDDB; SQRADD(a[19], a[19]); 
00210    COMBA_STORE(b[38]);
00211 
00212    /* output 39 */
00213    CARRY_FORWARD;
00214    SQRADDSC(a[16], a[23]); SQRADDAC(a[17], a[22]); SQRADDAC(a[18], a[21]); SQRADDAC(a[19], a[20]); SQRADDDB; 
00215    COMBA_STORE(b[39]);
00216 
00217    /* output 40 */
00218    CARRY_FORWARD;
00219    SQRADDSC(a[17], a[23]); SQRADDAC(a[18], a[22]); SQRADDAC(a[19], a[21]); SQRADDDB; SQRADD(a[20], a[20]); 
00220    COMBA_STORE(b[40]);
00221 
00222    /* output 41 */
00223    CARRY_FORWARD;
00224    SQRADDSC(a[18], a[23]); SQRADDAC(a[19], a[22]); SQRADDAC(a[20], a[21]); SQRADDDB; 
00225    COMBA_STORE(b[41]);
00226 
00227    /* output 42 */
00228    CARRY_FORWARD;
00229    SQRADD2(a[19], a[23]); SQRADD2(a[20], a[22]); SQRADD(a[21], a[21]); 
00230    COMBA_STORE(b[42]);
00231 
00232    /* output 43 */
00233    CARRY_FORWARD;
00234    SQRADD2(a[20], a[23]); SQRADD2(a[21], a[22]); 
00235    COMBA_STORE(b[43]);
00236 
00237    /* output 44 */
00238    CARRY_FORWARD;
00239    SQRADD2(a[21], a[23]); SQRADD(a[22], a[22]); 
00240    COMBA_STORE(b[44]);
00241 
00242    /* output 45 */
00243    CARRY_FORWARD;
00244    SQRADD2(a[22], a[23]); 
00245    COMBA_STORE(b[45]);
00246 
00247    /* output 46 */
00248    CARRY_FORWARD;
00249    SQRADD(a[23], a[23]); 
00250    COMBA_STORE(b[46]);
00251    COMBA_STORE2(b[47]);
00252    COMBA_FINI;
00253 
00254    B->used = 48;
00255    B->sign = FP_ZPOS;
00256    memcpy(B->dp, b, 48 * sizeof(fp_digit));
00257    fp_clamp(B);
00258 }
00259 #endif
00260 
00261 
00262 /* $Source: /cvs/libtom/tomsfastmath/src/sqr/fp_sqr_comba_24.c,v $ */
00263 /* $Revision: 1.2 $ */
00264 /* $Date: 2007/02/17 03:39:01 $ */