Statistics
| Branch: | Revision:

root / synthbench / euroben-ports / base / C / mod2am / mxm.c @ 0:839f52ef7657

History | View | Annotate | Download (1.2 kB)

1
void mxm( int lda, int m, int l, int n, double a[][lda], double b[][n],
2
          double c[][n] )
3
// ---------------------------------------------------------------------
4
// --- Routine 'mvddot' does a matrix-vector multiplication 'Ab = c'
5
//     using an dotproduct implementation.
6
// ---------------------------------------------------------------------
7
{
8
   int    i, j, k, lf, mf;
9
// ---------------------------------------------------------------------
10
   mf = m - m%4;
11
   for( i = 0; i < mf; i+= 4 ) {
12
      for( j = 0; j < n; j++ ) {
13
         c[i][j] = 0.0; c[i+1][j] = 0.0; c[i+2][j] = 0.0; c[i+3][j] = 0.0;
14
      }
15
    }
16
   for( i = mf; i < m; i++ ) {
17
      for( j = 0; j < n; j++ ) {
18
         c[i][j] = 0.0;
19
      }
20
   }
21
   lf = l - l%4;
22
   for( i = 0 ; i < m; i++ ) {
23
      for( j = 0; j < lf; j+= 4 ) {
24
         for( k = 0; k < n; k++ ) {
25
            c[i][k] = c[i][k] + a[i][j]  *b[j][k]   + a[i][j+1]*b[j+1][k]
26
                              + a[i][j+2]*b[j+2][k] + a[i][j+3]*b[j+3][k];
27
         }
28
      }
29
   }
30
   for( i = 0 ; i < m; i++ ){
31
      for( j = lf; j < n; j++ ) {
32
         for( k = 0; k < n; k++ ) {
33
            c[i][k] = c[i][k] + a[i][j]*b[j][k];
34
         }
35
      }
36
   }
37
}