00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #include "StMicky.h"
00037 #if ROOT_VERSION_CODE < ROOT_VERSION(5,13,0)
00038 #include "TCL.h"
00039 #else
00040 #include "TCernLib.h"
00041 #endif
00042 #include "Stiostream.h"
00043
00044
00045 void StMicky::Tmxm()
00046 {
00047
00048
00049
00050
00051 float ac[6] = { 0.,1.,2.,3.,4.,5. };
00052 float bc[8] = { 10.,20.,30.,40.,50.,60.,70.,80. };
00053 float c1c[12] = { 50.,60.,70.,80.,170.,220.,270.,320.,290., 380.,470.,560. };
00054 float c2c[9] = { 3.,4.,5.,9.,14.,19.,15.,24.,33. };
00055 float d__[12] = { 2.,4.,6.,8.,102.,104.,106.,108.,202.,204.,206.,208. };
00056 struct {
00057 int e_1;
00058 char e_2[4];
00059 int e_3;
00060 char e_4[4];
00061 } equiv_30 = { 1000, {'X', 'M', 'P', 'Y'}, 0, {'3', '2', '4', ' '} };
00062
00063 #ifndef tinf
00064 #define tinf ((int *)&equiv_30)
00065 #endif
00066
00067 static struct {
00068 char e_1[4];
00069 int e_2;
00070 } equiv_31 = { {'X', 'M', 'A', 'D'}, 0 };
00071
00072
00073 #ifndef tinfa
00074 #define tinfa (*(int *)&equiv_31)
00075 #endif
00076
00077 static struct {
00078 char e_1[4];
00079 int e_2;
00080 } equiv_32 = { {'X', 'M', 'U', 'B'}, 0 };
00081
00082 #ifndef tinfu
00083 #define tinfu (*(int *)&equiv_32)
00084 #endif
00085
00086 static struct {
00087 char e_1[4];
00088 int e_2;
00089 } equiv_33 = { {'M', 'P', 'Y', '1'}, 0 };
00090
00091 #ifndef tinfy1
00092 #define tinfy1 (*(int *)&equiv_33)
00093 #endif
00094
00095 static struct {
00096 char e_1[4];
00097 int e_2;
00098 } equiv_34 = { {'M', 'A', 'D', '1'}, 0 };
00099
00100 #ifndef tinfa1
00101 #define tinfa1 (*(int *)&equiv_34)
00102 #endif
00103
00104 static struct {
00105 char e_1[4];
00106 int e_2;
00107 } equiv_35 = { {'M', 'U', 'B', '1'}, 0 };
00108
00109 #ifndef tinfu1
00110 #define tinfu1 (*(int *)&equiv_35)
00111 #endif
00112
00113 static struct {
00114 char e_1[4];
00115 int e_2;
00116 } equiv_36 = { {'M', 'P', 'Y', '2'}, 0 };
00117
00118 #ifndef tinfy2
00119 #define tinfy2 (*(int *)&equiv_36)
00120 #endif
00121
00122
00123 static struct {
00124 char e_1[4];
00125 int e_2;
00126 } equiv_37 = { {'M', 'A', 'D', '2'}, 0 };
00127
00128 #ifndef tinfa2
00129 #define tinfa2 (*(int *)&equiv_37)
00130 #endif
00131
00132 static struct {
00133 char e_1[4];
00134 int e_2;
00135 } equiv_38 = { {'M', 'U', 'B', '2'}, 0 };
00136
00137 #ifndef tinfu2
00138 #define tinfu2 (*(int *)&equiv_38)
00139 #endif
00140
00141 static struct {
00142 char e_1[4];
00143 int e_2;
00144 } equiv_39 = { {'M', 'P', 'Y', '3'}, 0 };
00145
00146 #ifndef tinfy3
00147 #define tinfy3 (*(int *)&equiv_39)
00148 #endif
00149
00150 static struct {
00151 char e_1[4];
00152 int e_2;
00153 } equiv_40 = { {'M', 'A', 'D', '3'}, 0 };
00154
00155 #ifndef tinfa3
00156 #define tinfa3 (*(int *)&equiv_40)
00157 #endif
00158
00159 static struct {
00160 char e_1[4];
00161 int e_2;
00162 } equiv_41 = { {'M', 'U', 'B', '3'}, 0 };
00163
00164 #ifndef tinfu3
00165 #define tinfu3 (*(int *)&equiv_41)
00166 #endif
00167
00168 static int j;
00169 static int ntimes;
00170
00171
00172 #ifndef _LOCALMICKYVARS_
00173 #define _LOCALMICKYVARS_
00174
00175 #define amin ((float *)&_BLNK__1 + 1399)
00176 #define dmin__ ((float *)&_BLNK__1 + 1699)
00177 #define amin2 ((float *)&_BLNK__1 + 1599)
00178 #define aplus ((float *)&_BLNK__1 + 1299)
00179
00180 #define aplus1 ((float *)&_BLNK__1 + 1499)
00181 #define ia ((int *)&_BLNK__1)
00182 #define ib ((int *)&_BLNK__1 + 1000)
00183
00184 #define act ((float *)&_BLNK__1 + 1099)
00185 #define bct ((float *)&_BLNK__1 + 1199)
00186 #define zer ((float *)&_BLNK__1 + 1000)
00187
00188 #endif
00189
00190
00191 param_1.zerlev = param_1.zerov[1];
00192 TCL::vzero(zer,12);
00193 TCL::mxtrp(bc, bct, 2, 4);
00194 TCL::mxtrp(ac, act, 3, 2);
00195
00196 Newguy("MXMPY-1-2-3.", "TMXM ");
00197 TCL::mxmpy(ac, bc, _BLNK__1.a, 3, 2, 4);
00198 Mverif(1, _BLNK__1.a, c1c, 12);
00199
00200 TCL::mxmpy1(ac, bct, _BLNK__1.a, 3, 2, 4);
00201 Mverif(11, _BLNK__1.a, c1c, 12);
00202
00203 TCL::mxmpy2(act, bc, _BLNK__1.a, 3, 2, 4);
00204 Mverif(21, _BLNK__1.a, c1c, 12);
00205
00206 TCL::mxmpy3(act, bct, _BLNK__1.a, 3, 2, 4);
00207 Mverif(31, _BLNK__1.a, c1c, 12);
00208
00209 TCL::mxmpy(ac, bc, _BLNK__1.a, 3, 0, 4);
00210 Mverif(10, _BLNK__1.a, zer, 12);
00211
00212 TCL::mxmpy1(ac, bct, _BLNK__1.a, 3, 0, 4);
00213 Mverif(110, _BLNK__1.a, zer, 12);
00214
00215 TCL::mxmpy2(act, bc, _BLNK__1.a, 3, 0, 4);
00216 Mverif(210, _BLNK__1.a, zer, 12);
00217
00218 TCL::mxmpy3(act, bct, _BLNK__1.a, 3, 0, 4);
00219 Mverif(310, _BLNK__1.a, zer, 12);
00220
00221 TCL::mxmpy(ac, ac, _BLNK__1.a, 3, 2, 3);
00222 Mverif(12, _BLNK__1.a, c2c, 9);
00223
00224 if (param_1.itimes == 0) {
00225 goto L100;
00226 }
00227 ntimes = param_1.itimes * tinf[0];
00228 tinf[0] = ntimes;
00229 Timed(¶m_1.timerd);
00230 for (j = 1; j <= ntimes; ++j)
00231 TCL::mxmpy(ac, bc, _BLNK__1.a, 3, 2, 4);
00232
00233 Timing(tinf);
00234 tinf[1] = tinfy1;
00235 Timed(¶m_1.timerd);
00236 for (j = 1; j <= ntimes; ++j)
00237 TCL::mxmpy1(ac, bct, _BLNK__1.a, 3, 2, 4);
00238
00239 Timing(tinf);
00240 tinf[1] = tinfy2;
00241 Timed(¶m_1.timerd);
00242 for (j = 1; j <= ntimes; ++j)
00243 TCL::mxmpy2(act, bc, _BLNK__1.a, 3, 2, 4);
00244
00245 Timing(tinf);
00246 tinf[1] = tinfy3;
00247 Timed(¶m_1.timerd);
00248 for (j = 1; j <= ntimes; ++j)
00249 TCL::mxmpy3(act, bct, _BLNK__1.a, 3, 2, 4);
00250
00251 Timing(tinf);
00252
00253 L100:
00254 Newguy("MXMAD-1-2-3.", "TMXM ");
00255 TCL::ucopy(c1c, _BLNK__1.a, 12);
00256 TCL::vadd(_BLNK__1.a, d__, aplus, 12);
00257 TCL::vsub(_BLNK__1.a, d__, amin, 12);
00258 TCL::mxmpy(ac, ac, _BLNK__1.a, 3, 2, 3);
00259 TCL::vadd(_BLNK__1.a, d__, aplus1, 9);
00260 TCL::vsub(_BLNK__1.a, d__, amin2, 9);
00261
00262 TCL::ucopy(d__, _BLNK__1.a, 12);
00263 TCL::mxmad(ac, bc, _BLNK__1.a, 3, 2, 4);
00264 Mverif(1, _BLNK__1.a, aplus, 12);
00265
00266 TCL::ucopy(d__, _BLNK__1.a, 12);
00267 TCL::mxmad1(ac, bct, _BLNK__1.a, 3, 2, 4);
00268 Mverif(11, _BLNK__1.a, aplus, 12);
00269
00270 TCL::ucopy(d__, _BLNK__1.a, 12);
00271 TCL::mxmad2(act, bc, _BLNK__1.a, 3, 2, 4);
00272 Mverif(21, _BLNK__1.a, aplus, 12);
00273
00274 TCL::ucopy(d__, _BLNK__1.a, 12);
00275 TCL::mxmad3(act, bct, _BLNK__1.a, 3, 2, 4);
00276 Mverif(31, _BLNK__1.a, aplus, 12);
00277
00278 TCL::ucopy(d__, _BLNK__1.a, 12);
00279 TCL::mxmad(ac, bc, _BLNK__1.a, 3, 0, 4);
00280 Mverif(10, _BLNK__1.a, d__, 12);
00281
00282 TCL::mxmad1(ac, bct, _BLNK__1.a, 3, 0, 4);
00283 Mverif(110, _BLNK__1.a, d__, 12);
00284
00285 TCL::mxmad2(act, bc, _BLNK__1.a, 3, 0, 4);
00286 Mverif(210, _BLNK__1.a, d__, 12);
00287
00288 TCL::mxmad3(act, bct, _BLNK__1.a, 3, 0, 4);
00289 Mverif(310, _BLNK__1.a, d__, 12);
00290
00291 TCL::ucopy(d__, _BLNK__1.a, 9);
00292 TCL::mxmad(ac, ac, _BLNK__1.a, 3, 2, 3);
00293 Mverif(12, _BLNK__1.a, aplus1, 9);
00294
00295 TCL::ucopy(d__, _BLNK__1.a, 9);
00296
00297 if (param_1.itimes == 0) {
00298 goto L200;
00299 }
00300 tinf[1] = tinfa;
00301 Timed(¶m_1.timerd);
00302 for (j = 1; j <= ntimes; ++j) {
00303 TCL::ucopy(d__, _BLNK__1.a, 12);
00304 TCL::mxmad(ac, bc, _BLNK__1.a, 3, 2, 4);
00305 }
00306
00307 Timing(tinf);
00308 tinf[1] = tinfa1;
00309 Timed(¶m_1.timerd);
00310
00311 for (j = 1; j <= ntimes; ++j) {
00312 TCL::ucopy(d__, _BLNK__1.a, 12);
00313 TCL::mxmad1(ac, bct, _BLNK__1.a, 3, 2, 4);
00314 }
00315
00316 Timing(tinf);
00317 tinf[1] = tinfa2;
00318 Timed(¶m_1.timerd);
00319
00320 for (j = 1; j <= ntimes; ++j) {
00321 TCL::ucopy(d__, _BLNK__1.a, 12);
00322 TCL::mxmad2(act, bc, _BLNK__1.a, 3, 2, 4);
00323 }
00324
00325 Timing(tinf);
00326 tinf[1] = tinfa3;
00327 Timed(¶m_1.timerd);
00328
00329 for (j = 1; j <= ntimes; ++j) {
00330 TCL::ucopy(d__, _BLNK__1.a, 12);
00331 TCL::mxmad3(act, bct, _BLNK__1.a, 3, 2, 4);
00332 }
00333
00334 Timing(tinf);
00335
00336
00337 L200:
00338 Newguy("MXMUB-1-2-3.", "TMXM ");
00339 TCL::vcopyn(d__, dmin__, 12);
00340 TCL::ucopy(d__, _BLNK__1.a, 12);
00341 TCL::mxmub(ac, bc, _BLNK__1.a, 3, 2, 4);
00342 Mverif(1, _BLNK__1.a, amin, 12);
00343
00344 TCL::ucopy(d__, _BLNK__1.a, 12);
00345 TCL::mxmub1(ac, bct, _BLNK__1.a, 3, 2, 4);
00346 Mverif(11, _BLNK__1.a, amin, 12);
00347
00348 TCL::ucopy(d__, _BLNK__1.a, 12);
00349 TCL::mxmub2(act, bc, _BLNK__1.a, 3, 2, 4);
00350 Mverif(21, _BLNK__1.a, amin, 12);
00351
00352 TCL::ucopy(d__, _BLNK__1.a, 12);
00353 TCL::mxmub3(act, bct, _BLNK__1.a, 3, 2, 4);
00354 Mverif(31, _BLNK__1.a, amin, 12);
00355
00356 TCL::ucopy(d__, _BLNK__1.a, 12);
00357 TCL::mxmub(ac, bc, _BLNK__1.a, 3, 0, 4);
00358 Mverif(10, _BLNK__1.a, dmin__, 12);
00359
00360 TCL::ucopy(d__, _BLNK__1.a, 12);
00361 TCL::mxmub1(ac, bct, _BLNK__1.a, 3, 0, 4);
00362 Mverif(110, _BLNK__1.a, dmin__, 12);
00363
00364 TCL::ucopy(d__, _BLNK__1.a, 12);
00365 TCL::mxmub2(act, bc, _BLNK__1.a, 3, 0, 4);
00366 Mverif(210, _BLNK__1.a, dmin__, 12);
00367
00368 TCL::ucopy(d__, _BLNK__1.a, 12);
00369 TCL::mxmub3(act, bct, _BLNK__1.a, 3, 0, 4);
00370 Mverif(310, _BLNK__1.a, dmin__, 12);
00371
00372 TCL::ucopy(d__, _BLNK__1.a, 9);
00373 TCL::mxmub(ac, ac, _BLNK__1.a, 3, 2, 3);
00374 Mverif(12, _BLNK__1.a, amin2, 9);
00375
00376 if (param_1.itimes == 0) goto L300;
00377
00378 tinf[1] = tinfu;
00379 Timed(¶m_1.timerd);
00380
00381 for (j = 1; j <= ntimes; ++j) {
00382 TCL::ucopy(d__, _BLNK__1.a, 12);
00383 TCL::mxmub(ac, bc, _BLNK__1.a, 3, 2, 4);
00384 }
00385
00386 Timing(tinf);
00387 tinf[1] = tinfu1;
00388 Timed(¶m_1.timerd);
00389
00390 for (j = 1; j <= ntimes; ++j) {
00391 TCL::ucopy(d__, _BLNK__1.a, 12);
00392 TCL::mxmub1(ac, bct, _BLNK__1.a, 3, 2, 4);
00393 }
00394
00395 Timing(tinf);
00396 tinf[1] = tinfu2;
00397 Timed(¶m_1.timerd);
00398
00399 for (j = 1; j <= ntimes; ++j) {
00400 TCL::ucopy(d__, _BLNK__1.a, 12);
00401 TCL::mxmub2(act, bc, _BLNK__1.a, 3, 2, 4);
00402 }
00403
00404 Timing(tinf);
00405 tinf[1] = tinfu3;
00406 Timed(¶m_1.timerd);
00407
00408 for (j = 1; j <= ntimes; ++j) {
00409 TCL::ucopy(d__, _BLNK__1.a, 12);
00410 TCL::mxmub3(act, bct, _BLNK__1.a, 3, 2, 4);
00411 }
00412
00413 Timing(tinf);
00414
00415
00416 L300:
00417 Newguy("MXMLRT - MXMLTR.", "TMXM ");
00418 TCL::mxmpy(ac, c2c, _BLNK__1.a, 2, 3, 3);
00419 TCL::mxmpy1(_BLNK__1.a, ac, _BLNK__1.b, 2, 3, 2);
00420 TCL::mxmpy1(c2c, ac, &_BLNK__1.a[100], 3, 3, 2);
00421 TCL::mxmpy(ac, &_BLNK__1.a[100], &_BLNK__1.b[100], 2, 3, 2);
00422 Mverif(0, _BLNK__1.b, &_BLNK__1.b[100], 4);
00423
00424 TCL::mxmlrt(ac, c2c, _BLNK__1.a, 2, 3);
00425 Mverif(1, _BLNK__1.a, _BLNK__1.b, 4);
00426
00427 TCL::mxmpy2(c1c, c2c, _BLNK__1.a, 4, 3, 3);
00428 TCL::mxmpy(_BLNK__1.a, c1c, _BLNK__1.b, 4, 3, 4);
00429 TCL::mxmpy(c2c, c1c, &_BLNK__1.a[100], 3, 3, 4);
00430 TCL::mxmpy2(c1c, &_BLNK__1.a[100], &_BLNK__1.b[100], 4, 3, 4);
00431 Mverif(10, _BLNK__1.b, &_BLNK__1.b[100], 16);
00432
00433 TCL::mxmltr(c1c, c2c, _BLNK__1.a, 4, 3);
00434 Mverif(11, _BLNK__1.a, _BLNK__1.b, 16);
00435
00436 }
00437 #undef tinf
00438 #undef tinfa
00439 #undef tinfu
00440 #undef tinfy1
00441 #undef tinfa1
00442 #undef tinfu1
00443 #undef tinfy2
00444 #undef tinfa2
00445 #undef tinfu2
00446 #undef tinfy3
00447 #undef tinfa3
00448 #undef tinfu3
00449