home *** CD-ROM | disk | FTP | other *** search
- /*
- * This file is part of the Livermore Loops transliteration into C.
- * Copyright (C) 1991 by Martin Fouts
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 1, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
- #include "types.h"
- #include "externs.h"
-
- #define isign(i,j) ((j < 0) ? -i : i)
- #define mod2n(i,j) (i % j) + (j / 2) - isign((j/2),i)
-
- #define amax1(a,b) ((a < b) ? b : a)
- #define amin1(a,b) ((a > b) ? b : a)
-
- #define TEST(x) if ((DoTest & (1<<(x-1))) == (1<<(x-1)))
-
- extern long int DoTest;
-
- Void test();
- double sqrt();
- double exp();
-
- Void kernel()
- {
- Int i, l, k, il, ipntp, ipnt, lw, j, nl1, nl2, kx, ky, ip, i1, j1;
- Int i2, j2, nr, nz;
- Int ii, lb, j4, ink;
- Int kn, jn, kb5i;
- Float xtemp;
-
- test((Int)0);
- TEST(1) {
- for (l = 0; l < lp; l++)
- for (k = 0; k < n; k++)
- x[k]= q + y[k]*(r*z[k+10] + t*z[k+11]);
- }
- test((Int)1);
- TEST(2) {
- for (l = 0; l < lp; l++) {
- il= n;
- ipntp= 0;
- l_222: ipnt= ipntp;
- ipntp= ipntp+il;
- il= il/2;
- i= ipntp;
- for (k = ipnt+1; k < ipntp; k += 2) {
- i= i+1;
- x[i]= x[k] - v[k]*x[k-1] - v[k+1]*x[k+1];
- }
- if( il>1) goto l_222;
- }
- }
- test((Int)2);
- TEST(3) {
- for (l = 0; l < lp; l++) {
- q = 0.0;
- for (k = 0; k < n; k++) {
- q += z[k]*x[k];
- }
- }
- }
- test((Int)3);
- TEST(4) {
- m= (1001-7)/2;
- for (l = 0; l < lp; l++) {
- for (k = 6; k < 1001; k += m) {
- lw= k-6;
- for (j = 4; j < n; j += 5) {
- x[k-1]= x[k-1] - x[lw]*y[j];
- lw= lw+1;
- }
- x[k-1]= y[4]*x[k-1];
- }
- }
- }
- test((Int)4);
- TEST(5) {
- for (l = 0; l < lp; l++)
- for (i = 1; i < n; i++)
- x[i]= z[i]*(y[i] - x[i-1]);
- }
- test((Int)5);
- TEST(6) {
- for (l = 0; l < lp; l++)
- for (i = 1; i < n; i++)
- for (k = 0; k < i; k++)
- w[i] += b[i][k] * w[i-k-1];
- }
- test((Int)6);
- TEST(7) {
- for (l = 0; l < lp; l++)
- for (k = 0; k < n; k++)
- x[k]= u[k ] + r*( z[k ] + r*y[k ]) +
- t*( u[k+3] + r*( u[k+2] + r*u[k+1]) +
- t*( u[k+6] + r*( u[k+5] + r*u[k+4])));
- }
- test((Int)7);
- TEST(8) {
- for (l = 0; l < lp; l++) {
- nl1 = 0;
- nl2 = 1;
- for (kx = 1; kx < 3; kx++) {
- for (ky = 1; ky < n; ky++) {
- du1[ky]= u1[kx][ky+1][nl1] - u1[kx][ky-1][nl1];
- du2[ky]= u2[kx][ky+1][nl1] - u2[kx][ky-1][nl1];
- du3[ky]= u3[kx][ky+1][nl1] - u3[kx][ky-1][nl1];
- u1[kx][ky][nl2]= u1[kx][ky][nl1]+a11*du1[ky]+a12*du2[ky]+a13*du3[ky]+
- sig*(u1[kx+1][ky][nl1]-2.*u1[kx][ky][nl1]+u1[kx-1][ky][nl1]);
- u2[kx][ky][nl2]= u2[kx][ky][nl1]+a21*du1[ky]+a22*du2[ky]+a23*du3[ky]+
- sig*(u2[kx+1][ky][nl1]-2.*u2[kx][ky][nl1]+u2[kx-1][ky][nl1]);
- u3[kx][ky][nl2]= u3[kx][ky][nl1]+a31*du1[ky]+a32*du2[ky]+a33*du3[ky]+
- sig*(u3[kx+1][ky][nl1]-2.*u3[kx][ky][nl1]+u3[kx-1][ky][nl1]);
- }
- }
- }
- }
- test((Int)8);
- TEST(9) {
- for (l = 0; l < lp; l++)
- for (i = 0; i < n; i++)
- px[ 0][i]= dm28*px[12][i] + dm27*px[11][i] + dm26*px[10][i] +
- dm25*px[9][i] + dm24*px[8][i] + dm23*px[7][i] +
- dm22*px[6][i] + c0*(px[4][i] + px[5][i])+ px[ 2][i];
- }
- test((Int)9);
- TEST(10) {
- for (l = 0; l < lp; l++) {
- for (i = 0; i < n; i++) {
- ar = cx[4][i];
- br = ar - px[4][i];
- px[4][i] = ar;
- cr = br - px[5][i];
- px[5][i] = br;
- ar = cr - px[6][i];
- px[6][i] = cr;
- br = ar - px[7][i];
- px[7][i] = ar;
- cr = br - px[8][i];
- px[8][i] = br;
- ar = cr - px[9][i];
- px[9][i]= cr;
- br = ar - px[10][i];
- px[10][i]= ar;
- cr = br - px[11][i];
- px[11][i]= br;
- px[13][i]= cr - px[12][i];
- px[12][i]= cr;
- }
- }
- }
- test((Int)10);
- TEST(11) {
- for (l = 0; l < lp; l++) {
- x[0]= y[0];
- for (k = 1; k < n; k++) {
- x[k]= x[k-1] + y[k];
- }
- }
- }
- test((Int)11);
- TEST(12) {
- for (l = 0; l < lp; l++) {
- for (k = 0; k < n; k++) {
- x[k]= y[k+1] - y[k];
- }
- }
- }
- test((Int)12);
- TEST(13) {
- for (l = 0; l < lp; l++) {
- for (ip = 0; ip < n; ip++) {
- i1= p[0][ip];
- j1= p[1][ip];
- i1= mod2n(i1,64);
- j1= mod2n(j1,64);
- p[2][ip]= p[2][ip] + b[i1][j1];
- p[3][ip]= p[3][ip] + c[i1][j1];
- p[0][ip]= p[0][ip] + p[2][ip];
- p[1][ip]= p[1][ip] + p[3][ip];
- i2= p[0][ip];
- j2= p[1][ip];
- i2= mod2n(i2,64) - 1;
- j2= mod2n(j2,64) - 1;
- p[0][ip]= p[0][ip] + y[i2+32];
- p[1][ip]= p[1][ip] + z[j2+32];
- i2= i2 + e[i2+32];
- j2= j2 + f[j2+32];
- h[i2][j2]= h[i2][j2] + 1.0;
- }
- }
- }
- test((Int)13);
- TEST(14) {
- for (l = 0; l < lp; l++) {
- for (k = 0; k < n; k++) {
- ix[k]= (Int) grd[k];
- xi[k]= (Float) ix[k];
- ex1[k]= ex [ ix[k]-1 ];
- dex1[k]= dex [ ix[k]-1 ];
- }
- for (k = 0; k < n; k++) {
- vx[k]= vx[k] + ex1[k] + (xx[k] - xi[k])*dex1[k];
- xx[k]= xx[k] + vx[k] + flx;
- ir[k]= xx[k];
- rx[k]= xx[k] - ir[k];
- ir[k]= mod2n( ir[k],512) + 1;
- xx[k]= rx[k] + ir[k];
- }
- for (k = 0; k < n; k++) {
- rh[ir[k]-1]= rh[ir[k]-1] + 1.0 - rx[k];
- rh[ir[k]]= rh[ir[k]] + rx[k];
- }
- }
- }
- test((Int)14);
- TEST(15) {
- for (l = 0; l < lp; l++) {
- nr= 7;
- nz= n;
- ar= 0.053;
- br= 0.073;
- for (j = 1; j < nr; j++) {
- for (k = 1; k < nz; k++) {
- if (j >= (nr-1)) {
- vy[k][j] = 0.0;
- continue;
- }
- if (vh[k][j+1] > vh[k][j]) {
- t = ar;
- } else {
- t = br;
- }
- if (vf[k][j] < vf[k-1][j]) {
- r= amax1(vh[k-1][j], vh[k-1][j+1]);
- s= vf[k-1][j];
- } else {
- r= amax1( vh[k][j], vh[k][j+1]);
- s= vf[k][j];
- }
- vy[k][j]= sqrt((double) (vg[k][j]*vg[k][j] +r*r))*t/s;
- if (k >= (nz-1)) {
- vs[k][j] = 0.;
- continue;
- }
- if (vf[k][j] < vf[k][j-1]) {
- r= amax1( vg[k][j-1], vg[k+1][j-1]);
- s= vf[k][j-1];
- t= br;
- } else {
- r= amax1( vg[k][j], vg[k+1][j]);
- s= vf[k][j];
- t= ar;
- }
- vs[k][j]= sqrt((double) (vh[k][j]*vh[k][j] +r*r))*t/s;
- }
- }
- }
- }
- test((Int)15);
- TEST(16) {
- ii= n/3;
- lb= ii+ii;
- k2= 0;
- k3= 0;
- for (l = 0; l < lp; l++) {
- m= 0;
- i1= m;
- l_410:
- j2= ((n+n)*m) + 1;
- for (k = 0; k < n; k++) {
- k2= k2+1;
- j4= j2+k+k+1;
- j5= zone[j4];
- if (j5-n+1 < 0) goto l_420;
- if (j5-n+1 == 0) goto l_475;
- goto l_450;
- l_415:
- if (j5-n+ii+1 < 0) goto l_430;
- if (j5-n+ii+1 == 0) goto l_425;
- goto l_425;
- l_420:
- if (j5-n+lb+1 < 0) goto l_435;
- if (j5-n+lb+1 == 0) goto l_415;
- goto l_415;
- l_425:
- if (plan[j5] - r < 0) goto l_445;
- if (plan[j5] - r == 0) goto l_480;
- goto l_440;
- l_430:
- if (plan[j5] - s < 0) goto l_445;
- if (plan[j5] - s == 0) goto l_480;
- goto l_440;
- l_435:
- if (plan[j5] - t < 0) goto l_445;
- if (plan[j5] - t == 0) goto l_480;
- goto l_440;
- l_440:
- if (zone[j4-1]+1 < 0) goto l_455;
- if (zone[j4-1]+1 == 0) goto l_485;
- goto l_470;
- l_445:
- if (zone[j4-1]+1 < 0) goto l_470;
- if (zone[j4-1]+1 == 0) goto l_485;
- goto l_455;
- l_450:
- k3= k3+1;
- xtemp = d[j5] - (d[j5-1]*((t-d[j5-2])*(t-d[j5-2])
- +(s-d[j5-3])*(s-d[j5-3])
- +(r-d[j5-4])*(r-d[j5-4])));
- if (xtemp < 0) goto l_445;
- if (xtemp == 0) goto l_480;
- goto l_440;
- l_455:
- m= m+1;
- if (m < zone[0]) goto l_465;
- if (m == zone[0]) goto l_465;
- goto l_460;
- l_460:
- m= 0;
- l_465:
- if (i1 - m < 0) goto l_410;
- if (i1 - m == 0) goto l_480;
- goto l_410;
- l_470: ;
- }
- l_475:
- l_480:
- l_485: ;
- }
- }
- test((Int)16);
- TEST(17) {
- for (l = 0; l < lp; l++) {
- i= n-1;
- j= 0;
- ink= -1;
- scale= 5./3.;
- xnm= 1./3.;
- e6= 1.03/3.07;
- goto l_61;
- l_60:
- e6= xnm*vsp[i]+vstp[i];
- vxne[i]= e6;
- xnm= e6;
- ve3[i]= e6;
- i= i+ink;
- if (i == j) goto l_62;
- l_61:
- e3= xnm*vlr[i] +vlin[i];
- xnei= vxne[i];
- vxnd[i]= e6;
- xnc= scale*e3;
- if ( xnm >xnc) goto l_60;
- if ( xnei>xnc) goto l_60;
- ve3[i]= e3;
- e6= e3+e3-xnm;
- vxne[i]= e3+e3-xnei;
- xnm= e6;
- i= i+ink;
- if ( i != j) goto l_61;
- l_62:
- ;
- }
- }
- test((Int)17);
- TEST(18) {
- for (l = 0; l < lp; l++) {
- t= 0.0037;
- s= 0.0041;
- kn= 6;
- jn= n;
- for (k = 1; k < kn; k++) {
- for (j = 1; j < jn; j++) {
- za[j][k]= (zp[j-1][k+1]+zq[j-1][k+1]-zp[j-1][k]-zq[j-1][k])
- *(zr[j][k]+zr[j-1][k])/(zm[j-1][k]+zm[j-1][k+1]);
- zb[j][k]= (zp[j-1][k]+zq[j-1][k]-zp[j][k]-zq[j][k])
- *(zr[j][k]+zr[j][k-1])/(zm[j][k]+zm[j-1][k]);
- }
- }
- for (k = 1; k < kn; k++) {
- for (j = 1; j < jn; j++) {
- #ifdef CRAY2
- temp1 = za[j][k] *(zz[j][k]-zz[j+1][k]);
- temp2 = -za[j-1][k] *(zz[j][k]-zz[j-1][k]);
- temp3 = -zb[j][k] *(zz[j][k]-zz[j][k-1]);
- temp4 = zb[j][k+1] *(zz[j][k]-zz[j][k+1]);
- zu[j][k] += s*(temp1+temp2+temp3+temp4);
- temp1 =za[j][k]*(zr[j][k]-zr[j+1][k]);
- temp2 = -za[j-1][k] *(zr[j][k]-zr[j-1][k]);
- temp3 = -zb[j][k] *(zr[j][k]-zr[j][k-1]);
- temp4 = zb[j][k+1] *(zr[j][k]-zr[j][k+1]);
- zv[j][k] += s*(temp1+temp2+temp3+temp4);
- #else
- zu[j][k]= zu[j][k]+s*(za[j][k]*(zz[j][k]-zz[j+1][k])
- -za[j-1][k] *(zz[j][k]-zz[j-1][k])
- -zb[j][k] *(zz[j][k]-zz[j][k-1])
- +zb[j][k+1] *(zz[j][k]-zz[j][k+1]));
- zv[j][k]= zv[j][k]+s*(za[j][k]*(zr[j][k]-zr[j+1][k])
- -za[j-1][k] *(zr[j][k]-zr[j-1][k])
- -zb[j][k] *(zr[j][k]-zr[j][k-1])
- +zb[j][k+1] *(zr[j][k]-zr[j][k+1]));
- #endif
- }
- }
- for (k = 1; k < kn; k++) {
- for (j = 1; j < jn; j++) {
- zr[j][k]= zr[j][k]+t*zu[j][k];
- zz[j][k]= zz[j][k]+t*zv[j][k];
- }
- }
- }
- }
- test((Int)18);
- TEST(19) {
- kb5i= 0;
- for (l = 0; l < lp; l++) {
- for (k = 0; k < n; k++) {
- b5[k+kb5i]= sa[k] +stb5*sb[k];
- stb5= b5[k+kb5i] -stb5;
- }
- for (i = 0; i < n; i++) {
- k= n-i+1;
- b5[k+kb5i]= sa[k] +stb5*sb[k];
- stb5= b5[k+kb5i] -stb5;
- }
- }
- }
- test((Int)19);
- TEST(20) {
- for (l = 0; l < lp; l++) {
- for (k = 0; k < n; k++) {
- di= y[k]-g[k]/( xx[k]+dk);
- dn= 0.2;
- if ( di != 0.0) dn= amax1( 0.1,amin1( z[k]/di, 0.2));
- x[k]= ((w[k]+v[k]*dn)* xx[k]+u[k])/(vx[k]+v[k]*dn);
- xx[k+1]= (x[k]- xx[k])*dn+ xx[k];
- }
- }
- }
- test((Int)20);
- TEST(21) {
- for (l = 0; l < lp; l++)
- for (i = 0; i < n; i++)
- for (k = 0; k < n; k++)
- for (j = 0; j < n; j++)
- px[i][j]= px[i][j] +vy[i][k] * cx[k][j];
- }
- test((Int)21);
- TEST(22) {
- expmax= 20.0;
- u[n-1]= 0.99*expmax*v[n-1];
- for (l = 0; l < lp; l++) {
- for (k = 0; k < n; k++) {
- y[k]= u[k]/v[k];
- w[k]= x[k]/( exp((double) y[k]) -1.0);
- }
- }
- }
- test((Int)22);
- TEST(23) {
- for (l = 0; l < lp; l++) {
- for (j = 1; j < 6; j++) {
- for (k = 1; k < n; k++) {
- qa= za[k][j+1]*zr[k][j] +za[k][j-1]*zb[k][j] +
- za[k+1][j]*zu[k][j] +za[k-1][j]*zv[k][j] +zz[k][j];
- za[k][j]= za[k][j] +.175*(qa -za[k][j]);
- }
- }
- }
- }
- test((Int)23);
- TEST(24) {
- x[ n/2]= -1.0e+10;
- for (l = 0; l < lp; l++) {
- m= 1;
- for (k = 1; k < n; k++) {
- if ( x[k] < x[m]) m= k;
- }
- }
- }
- test((Int)24);
- return;
- }
-