void tm_times_Hopping_Matrix(const int ieo, spinor * const l, spinor * const k, double complex const cfactor) {
#  ifdef XLC
#    pragma disjoint(*l, *k)
#  endif
#  ifdef _GAUGE_COPY
  if(g_update_gauge_copy) {
    update_backward_gauge(g_gauge_field);
  }
#  endif

#  if (defined MPI)
  xchange_field(k, ieo);
#  endif
  
#  ifdef OMP
#    pragma omp parallel
  {
#  endif
#  define _MUL_G5_CMPLX
#  if (defined BGQ && defined XLC)
    complex double ALIGN bla = cfactor;
    vector4double ALIGN cf = vec_ld2(0, (double*) &bla);
#  elif (defined SSE2 || defined SSE3)
    _Complex double ALIGN cf = cfactor;
#  endif
#  include "operator/hopping_body_dbl.c"
#  undef _MUL_G5_CMPLX
#  ifdef OMP
  } /* OpenMP closing brace */
#  endif
  return;
}
void tm_times_Hopping_Matrix(const int ieo, spinor * const l, spinor * const k, complex double const cfactor) {
  
#  ifdef _GAUGE_COPY
  if(g_update_gauge_copy) {
    update_backward_gauge(g_gauge_field);
  }
#  endif
  
#  ifdef OMP
#  pragma omp parallel
  {
    su3 * restrict u0 ALIGN;
#  endif

#  define _MUL_G5_CMPLX
#  if (defined BGQ && defined XLC)
    complex double ALIGN bla = cfactor;
    vector4double ALIGN cf = vec_ld2(0, (double*) &bla);
#  elif (defined SSE2 || defined SSE3)
    _Complex double ALIGN cf = cfactor;
#  endif
#  include "operator/halfspinor_body.c"
#  undef _MUL_G5_CMPLX    
#  ifdef OMP
  } /* OpenMP closing brace */
#  endif
  return;
}
void tm_sub_Hopping_Matrix(const int ieo, spinor * const l, spinor * p, spinor * const k, 
			   complex double const cfactor) {
#  ifdef XLC
#    pragma disjoint(*l, *k)
#  endif
#  ifdef _GAUGE_COPY
  if(g_update_gauge_copy) {
    update_backward_gauge(g_gauge_field);
  }
#  endif

#  if (defined TM_USE_MPI)
  xchange_field(k, ieo);
#  endif
  
#  ifdef TM_USE_OMP
#    pragma omp parallel
  {
#  endif
#  define _TM_SUB_HOP
    spinor * pn;
#  if (defined BGQ && defined XLC)
    complex double ALIGN bla = cfactor;
    vector4double ALIGN cf = vec_ld2(0, (double*) &bla);
#  elif (defined SSE2 || defined SSE3)
    _Complex double ALIGN cf = cfactor;
    su3_vector ALIGN psi, psi2;
#  endif
#  include "operator/hopping_body_dbl.c"
#  undef _TM_SUB_HOP
#  ifdef TM_USE_OMP
  } /* OpenMP closing brace */
#  endif
  return;
}