"Fast-Regs" GCC extensions proposal: part #1 [missing attachments!]

Benedetto Proietti benedetto73@iol.it
Fri May 25 00:37:00 GMT 2001


Ooops!
Sorry,
here are two attachments missing in the first mail!
;)

bye
bp
// dirac_qphi.cc  --  phi[j] = Q phi[k]
//
// where Q is gamma_5 times Wilson-Dirac opeartor with boundary phases
//
// hs 12/98
//
// $Id: $
// ---------------------------------------------------------

#include "dirac_qphi.h"


void  dirac_qphi2(int k,int j) 
{

  int ipx, ipy, ipz, imx, imy, imz;
  int is, ix, it;

#ifdef GCC_COMPLEX
  COMPLEX_TYPE  rc0,rk0,rk1,rk2;
#else
  FLOAT_TYPE  rc0,rk0,rk1,rk2;
#endif
  su3*        pu;
  su3_spinor  *pp, *pres;
  su3_vector  psi_a, psi_b, chi_a, chi_b;


#define P1 (*pp).v1
#define P2 (*pp).v2
#define P3 (*pp).v3
#define P4 (*pp).v4

#define R1 (*pres).v1
#define R2 (*pres).v2
#define R3 (*pres).v3
#define R4 (*pres).v4

#define CHI_A chi_a
#define CHI_B chi_b
#define PSI_A psi_a
#define PSI_B psi_b

  for (ix=0; ix < vol3-1; ix++ ) 
    {
      ipx = next_px[ix];
      ipy = next_py[ix];
      ipz = next_pz[ix];
      imx = next_mx[ix];
      imy = next_my[ix];
      imz = next_mz[ix];
       
      for (it = 0; it < time_size-1; it++ ) 
	{ // it=1 ... for SFBC
	  rk2 = dirac_k2;
	  rk1 = dirac_k1;
	  rc0 = dirac_c0;  // rk0 = dirac_k0   //!! was for SFBC
	 
	  // contribution of the direction +1 (+x):
	  // --------------------------------------
	  pp = &phi[k][it][ipx];
	  pu = &u[it][ix][1];
	  pres = &phi[j][it][ix];
	  *(pres) = phi[k][it][ix]; 
#ifdef SWAP
	  V_V_F_V( PSI_A, = P1, +I , P4 );
	  V_M_V( CHI_A, (*pu), PSI_A );

	  V_V_F_R_V( PSI_A, = CHI_A, +IR, rk2, CHI_A );
	  V_V (     R1, -=      rk1 * PSI_A );

	  V_F_R_V ( R4, +=  IR, rk1 , PSI_A );

	  V_V_F_V( PSI_B, = P2, +I , P3 );
	  V_M_V( CHI_B, (*pu), PSI_B );
	  V_V_F_R_V( PSI_B, = CHI_B, +IR, rk2, CHI_B );

	  V_V (     R2, -=      rk1 * PSI_B );
	  V_F_R_V ( R3, +=  IR, rk1 , PSI_B );
#else
	  V_V_F_V( PSI_A, = P1, +I , P4 );
	  V_V_F_V( PSI_B, = P2, +I , P3 );

	  V_M_V( CHI_A, (*pu), PSI_A );
	  V_M_V( CHI_B, (*pu), PSI_B );

	  V_V_F_R_V( PSI_A, = CHI_A, +IR, rk2, CHI_A );
	  V_V_F_R_V( PSI_B, = CHI_B, +IR, rk2, CHI_B );

	  V_V (     R1, -=      rk1 * PSI_A );
	  V_V (     R2, -=      rk1 * PSI_B );
	  V_F_R_V ( R3, +=  IR, rk1 , PSI_B );
	  V_F_R_V ( R4, +=  IR, rk1 , PSI_A );
#endif

	  // contribution of the direction -1 (-x):
	  // --------------------------------------
	       
	  pp = &phi[k][it][imx];
	  pu   = &u[it][imx][1];
	       
#ifdef SWAP
	  V_V_F_V( PSI_A, = P1, -I, P4 );
	  V_MC_V( CHI_A, (*pu), PSI_A );
	  V_V_F_R_V( PSI_A, = CHI_A, - IR, rk2, CHI_A );
	  V_V (     R1, -=     rk1* PSI_A );

	  V_F_R_V ( R4, -= IR, rk1, PSI_A );

	  V_V_F_V( PSI_B, = P2, -I, P3 );
	  V_MC_V( CHI_B, (*pu), PSI_B );
	  V_V_F_R_V( PSI_B, = CHI_B, - IR, rk2, CHI_B );

	  V_V (     R2, -=     rk1* PSI_B );
	  V_F_R_V ( R3, -= IR, rk1, PSI_B );
#else
	  V_V_F_V( PSI_A, = P1, -I, P4 );
	  V_V_F_V( PSI_B, = P2, -I, P3 );

	  V_MC_V( CHI_A, (*pu), PSI_A );
	  V_MC_V( CHI_B, (*pu), PSI_B );

	  V_V_F_R_V( PSI_A, = CHI_A, - IR, rk2, CHI_A );
	  V_V_F_R_V( PSI_B, = CHI_B, - IR, rk2, CHI_B );

	  V_V (     R1, -=     rk1* PSI_A );
	  V_V (     R2, -=     rk1* PSI_B );
	  V_F_R_V ( R3, -= IR, rk1, PSI_B );
	  V_F_R_V ( R4, -= IR, rk1, PSI_A );
#endif	      

	  // contribution of the direction +2 (+y):
	  // --------------------------------------

	  pp = &phi[k][it][ipy];
	  pu   = &u[it][ix][2];

#ifdef SWAP
	  V_V_F_V( PSI_A, = P1, +, P4);
	  V_M_V( CHI_A, (*pu), PSI_A );
	  V_V_F_R_V( PSI_A, = CHI_A, + IR, rk2, CHI_A );

	  V_V ( R1, -= rk1 * PSI_A );
	  V_V ( R4, -= rk1 * PSI_A );

	  V_V_F_V( PSI_B, = P2, -, P3);
	  V_M_V( CHI_B, (*pu), PSI_B );
	  V_V_F_R_V( PSI_B, = CHI_B, + IR, rk2, CHI_B );

	  V_V ( R2, -= rk1 * PSI_B );
	  V_V ( R3, += rk1 * PSI_B );
#else
	  V_V_F_V( PSI_A, = P1, +, P4);
	  V_V_F_V( PSI_B, = P2, -, P3);

	  V_M_V( CHI_A, (*pu), PSI_A );
	  V_M_V( CHI_B, (*pu), PSI_B );

	  V_V_F_R_V( PSI_A, = CHI_A, + IR, rk2, CHI_A );
	  V_V_F_R_V( PSI_B, = CHI_B, + IR, rk2, CHI_B );

	  V_V ( R1, -= rk1 * PSI_A );
	  V_V ( R2, -= rk1 * PSI_B );
	  V_V ( R3, += rk1 * PSI_B );
	  V_V ( R4, -= rk1 * PSI_A );
#endif

	  // contribution of the direction  -2 (-y):
	  // ---------------------------------------
	  pp = &phi[k][it][imy];
	  pu   = &u[it][imy][2];

#ifdef SWAP
	  V_V_F_V( PSI_A, = P1, -, P4 );
	  V_MC_V( CHI_A, (*pu), PSI_A );
	  V_V_F_R_V( PSI_A, = CHI_A, - IR, rk2, CHI_A );

	  V_V ( R1, -= rk1*PSI_A );
	  V_V ( R4, += rk1*PSI_A );

	  V_V_F_V( PSI_B, = P2, +, P3 );
	  V_MC_V( CHI_B, (*pu), PSI_B );
	  V_V_F_R_V( PSI_B, = CHI_B, - IR, rk2, CHI_B );

	  V_V ( R2, -= rk1*PSI_B );
	  V_V ( R3, -= rk1*PSI_B );
#else
	  V_V_F_V( PSI_A, = P1, -, P4 );
	  V_V_F_V( PSI_B, = P2, +, P3 );

	  V_MC_V( CHI_A, (*pu), PSI_A );
	  V_MC_V( CHI_B, (*pu), PSI_B );

	  V_V_F_R_V( PSI_A, = CHI_A, - IR, rk2, CHI_A );
	  V_V_F_R_V( PSI_B, = CHI_B, - IR, rk2, CHI_B );

	  V_V ( R1, -= rk1*PSI_A );
	  V_V ( R2, -= rk1*PSI_B );
	  V_V ( R3, -= rk1*PSI_B );
	  V_V ( R4, += rk1*PSI_A );
#endif

	  // contribution of the direction +3 (+z):
	  // --------------------------------------
	  pp = &phi[k][it][ipz];
	  pu   = &u[it][ix][3];

#ifdef SWAP
	  V_V_F_V( PSI_A, = P1, +I, P3 );
	  V_M_V( CHI_A, (*pu), PSI_A );
	  V_V_F_R_V( PSI_A, = CHI_A, + IR, rk2, CHI_A );

	  V_V (     R1, -=     rk1 * PSI_A );
	  V_F_R_V ( R3, += IR, rk1 , PSI_A );

	  V_V_F_V( PSI_B, = P2, -I, P4 );
	  V_M_V( CHI_B, (*pu), PSI_B );
	  V_V_F_R_V( PSI_B, = CHI_B, + IR, rk2, CHI_B );

	  V_V (     R2, -=     rk1 * PSI_B );
	  V_F_R_V ( R4, -= IR, rk1 , PSI_B );
#else
	  V_V_F_V( PSI_A, = P1, +I, P3 );
	  V_V_F_V( PSI_B, = P2, -I, P4 );

	  V_M_V( CHI_A, (*pu), PSI_A );
	  V_M_V( CHI_B, (*pu), PSI_B );

	  V_V_F_R_V( PSI_A, = CHI_A, + IR, rk2, CHI_A );
	  V_V_F_R_V( PSI_B, = CHI_B, + IR, rk2, CHI_B );

	  V_V (     R1, -=     rk1 * PSI_A );
	  V_V (     R2, -=     rk1 * PSI_B );
	  V_F_R_V ( R3, += IR, rk1 , PSI_A );
	  V_F_R_V ( R4, -= IR, rk1 , PSI_B );
#endif
	  // contribution of the direction  -3 (-z):
	  // ---------------------------------------
	  pp = &phi[k][it][imz];
	  pu   = &u[it][imz][3];

#ifdef SWAP
	  V_V_F_V( PSI_A, = P1, -I, P3 );
	  V_MC_V( CHI_A, (*pu), PSI_A );
	  V_V_F_R_V( PSI_A, = CHI_A, - IR, rk2, CHI_A );

	  V_V (     R1, -=     rk1 * PSI_A );
	  V_F_R_V ( R3, -= IR, rk1 , PSI_A );

	  V_V_F_V( PSI_B, = P2, +I, P4 );
	  V_MC_V( CHI_B, (*pu), PSI_B );
	  V_V_F_R_V( PSI_B, = CHI_B, - IR, rk2, CHI_B );

	  V_V (     R2, -=     rk1 * PSI_B );
	  V_F_R_V ( R4, += IR, rk1 , PSI_B );
#else
	  V_V_F_V( PSI_A, = P1, -I, P3 );
	  V_V_F_V( PSI_B, = P2, +I, P4 );

	  V_MC_V( CHI_A, (*pu), PSI_A );
	  V_MC_V( CHI_B, (*pu), PSI_B );

	  V_V_F_R_V( PSI_A, = CHI_A, - IR, rk2, CHI_A );
	  V_V_F_R_V( PSI_B, = CHI_B, - IR, rk2, CHI_B );

	  V_V (     R1, -=     rk1 * PSI_A );
	  V_V (     R2, -=     rk1 * PSI_B );
	  V_F_R_V ( R3, -= IR, rk1 , PSI_A );
	  V_F_R_V ( R4, += IR, rk1 , PSI_B );
#endif

	  // contribution of the direction +0 (+t):
	  // --------------------------------------
	  rk0 = dirac_k0*dirac_apbcp[it];
	  is  = next_pt[it];

	  pp = &phi[k][is][ix];
	  pu = &u[it][ix][0];

#ifdef SWAP
	  V_V_F_V( PSI_A, = P1, +, P3 );
	  V_M_V( CHI_A, (*pu), PSI_A );

	  V_V ( R1, -= rk0*CHI_A );
	  V_V ( R3, -= rk0*CHI_A );
	  V_V_F_V( PSI_B, = P2, +, P4 );
	  V_M_V( CHI_B, (*pu), PSI_B );

	  V_V ( R2, -= rk0*CHI_B );
	  V_V ( R4, -= rk0*CHI_B );
#else
	  V_V_F_V( PSI_A, = P1, +, P3 );
	  V_V_F_V( PSI_B, = P2, +, P4 );

	  V_M_V( CHI_A, (*pu), PSI_A );
	  V_M_V( CHI_B, (*pu), PSI_B );

	  V_V ( R1, -= rk0*CHI_A );
	  V_V ( R2, -= rk0*CHI_B );
	  V_V ( R3, -= rk0*CHI_A );
	  V_V ( R4, -= rk0*CHI_B );
#endif

	  // contribution of the direction -0 (-t):
	  // --------------------------------------
	  rk0 = dirac_k0*dirac_apbcm[it];
	  is = next_mt[it];

	  pp = &phi[k][is][ix];
	  pu = &u[is][ix][0];
	       
#ifdef SWAP
	  V_V_F_V( PSI_A, = P1, -, P3 );
	  V_MC_V( CHI_A, (*pu), PSI_A );
	       
	  V_V ( R1, -= rk0*CHI_A );
	  V_V ( R3, += rk0*CHI_A );
	       
	  V_V_F_V( PSI_B, = P2, -, P4 ); // ca
	  V_MC_V( CHI_B, (*pu), PSI_B );

	  V_V ( R2, -= rk0*CHI_B );
	  V_V ( R4, += rk0*CHI_B ); 
#else
	  V_V_F_V( PSI_A, = P1, -, P3 );
	  V_V_F_V( PSI_B, = P2, -, P4 );

	  V_MC_V( CHI_A, (*pu), PSI_A );
	  V_MC_V( CHI_B, (*pu), PSI_B );

	  V_V ( R1, -= rk0*CHI_A );
	  V_V ( R2, -= rk0*CHI_B );
	  V_V ( R3, += rk0*CHI_A );
	  V_V ( R4, += rk0*CHI_B ); 
#endif
	  // multiplication with prefactor and gamma_5:
	  // ------------------------------------------
	  V_V ( R1,  =   rc0 * R1 );
	  V_V ( R2,  =   rc0 * R2 );
	  V_V ( R3,  = - rc0 * R3 );
	  V_V ( R4,  = - rc0 * R4 );  

	  phi[j][it][ix] = *pres;
	}
    }        
}
// ------------------------------ EOF ---------------------------------




More information about the Gcc mailing list