~ubuntu-branches/ubuntu/vivid/atlas/vivid

« back to all changes in this revision

Viewing changes to src/blas/level2/ATL_hbmv.c

  • Committer: Package Import Robot
  • Author(s): Sébastien Villemot
  • Date: 2013-06-11 15:58:16 UTC
  • mfrom: (1.1.3 upstream)
  • mto: (2.2.21 experimental)
  • mto: This revision was merged to the branch mainline in revision 26.
  • Revision ID: package-import@ubuntu.com-20130611155816-b72z8f621tuhbzn0
Tags: upstream-3.10.1
Import upstream version 3.10.1

Show diffs side-by-side

added added

removed removed

Lines of Context:
3
3
 * -- Automatically Tuned Linear Algebra Software (ATLAS)
4
4
 *    (C) Copyright 2000 All Rights Reserved
5
5
 *
6
 
 * -- ATLAS routine -- Version 3.2 -- December 25, 2000
 
6
 * -- ATLAS routine -- Version 3.9.24 -- December 25, 2000
7
7
 *
8
8
 * Author         : Antoine P. Petitet
9
9
 * Contributor(s) : R. Clint Whaley
132
132
      if( !( SCALAR_IS_ONE( BETA ) ) ) Mjoin( PATL, scal )( N, BETA, Y, INCY );
133
133
      return;
134
134
   }
135
 
 
136
 
   if( ( INCX != 1 ) || ( ( INCY == 1 ) && !( SCALAR_IS_ONE( ALPHA ) ) ) )
137
 
   {
138
 
      vx = (void *)malloc( ATL_Cachelen + ATL_MulBySize( N ) );
139
 
      ATL_assert( vx ); x = ATL_AlignPtr( vx );
140
 
      Mjoin( PATL, cpsc )( N, ALPHA, X, INCX, x, 1 );
141
 
      alphaY = one;
142
 
   }
143
 
   else { x = (TYPE *)(X); alphaY = ALPHA; }
144
 
 
145
 
   if( ( INCY != 1 ) || !( SCALAR_IS_ONE( alphaY ) ) )
146
 
   {
147
 
      vy = malloc( ATL_Cachelen + ATL_MulBySize( N ) );
148
 
      ATL_assert( vy ); y00 = y = ATL_AlignPtr( vy );
149
 
      beta0 = zero;
150
 
   }
151
 
   else { y00 = y = (TYPE *)(Y); beta0 = BETA; }
152
 
 
153
 
   if(      SCALAR_IS_ZERO( beta0 ) ) gbmv0 = Mjoin( PATL, gbmvC_a1_x1_b0_y1 );
154
 
   else if( SCALAR_IS_ONE ( beta0 ) ) gbmv0 = Mjoin( PATL, gbmvC_a1_x1_b1_y1 );
155
 
   else                               gbmv0 = Mjoin( PATL, gbmvC_a1_x1_bX_y1 );
156
 
   gbmv1 = Mjoin( PATL, gbmvC_a1_x1_b1_y1 );
157
 
   gbmvN = Mjoin( PATL, gbmvN_a1_x1_b1_y1 );
158
 
 
159
 
   ATL_GetPartSBMV( A, LDA, &mb, &nb );
160
 
 
161
 
   mb1 = N - ( ( N - 1 ) / mb ) * mb;
162
 
 
163
 
   if( UPLO == AtlasUpper )
164
 
   {
165
 
      for( n = N - mb, j = 0; n > 0; n -= mb, j += mb )
166
 
      {
167
 
         Mjoin( PATL, hbmvU )( mb, K, A+j*lda2, LDA, x+(j SHIFT),
168
 
                               beta0, y+(j SHIFT) );
169
 
         na = N - j - mb; na = Mmin( na, K );
170
 
         for( k = 0; k < na; k += nb )
171
 
         {
172
 
            kb  = na - k; kb = Mmin( kb, nb );
173
 
            ian = j + mb + k; ia = mb - K + k; ia = j + Mmax( ia, 0 );
174
 
            ma  = ian - ia - k; kl = ma - 1;   kl = Mmax( kl, 0 );
175
 
            ku  = K - k - 1 - kl; ku = Mmax( ku, 0 );
176
 
            gbmv0( kb, ma, kl, ku, one, A+ian*lda2, LDA, x+(ia  SHIFT), 1,
177
 
                   beta0, y+(ian SHIFT), 1 );
178
 
            gbmvN( ma, kb, kl, ku, one, A+ian*lda2, LDA, x+(ian SHIFT), 1,
179
 
                   one,   y+(ia  SHIFT), 1 );
180
 
         }
181
 
         if( !( SCALAR_IS_ONE( beta0 ) ) && ( n > na ) )
182
 
            Mjoin( PATL, scal )( n-na, beta0, y+((j+mb+na) SHIFT), 1 );
183
 
         beta0 = one; gbmv0 = gbmv1;
184
 
      }
185
 
      Mjoin( PATL, hbmvU )( mb1, K, A+j*lda2, LDA, x+(j SHIFT), beta0,
186
 
                            y+(j SHIFT) );
187
 
   }
188
 
   else
189
 
   {
190
 
      for( jan = N - mb; jan > 0; jan -= mb )
191
 
      {
192
 
         Mjoin( PATL, hbmvL )( mb, K, A+jan*lda2, LDA, x+(jan SHIFT),
193
 
                               beta0, y+(jan SHIFT) );
194
 
         ja = jan - K; na = jan - ( ja = Mmax( ja, 0 ) );
195
 
         if( !( SCALAR_IS_ONE( beta0 ) ) && ( ja > 0 ) )
196
 
            Mjoin( PATL, scal )( ja, beta0, y, 1 );
197
 
 
198
 
         for( k = 0; k < na; k += nb )
199
 
         {
200
 
            kb = na - k; kb = Mmin( kb, nb );
201
 
            ja = jan - K; ja = k + Mmax( ja, 0 ); ku = jan - ja; kl = K - ku;
202
 
            kl = Mmax( kl, 0 ); ma = k + kl + kb; ma = Mmin( ma, mb );
203
 
            gbmv0( kb, ma, kl, ku, one, A+ja*lda2, LDA, x+(jan SHIFT), 1,
204
 
                   beta0, y+(ja  SHIFT), 1 );
205
 
            gbmvN( ma, kb, kl, ku, one, A+ja*lda2, LDA, x+(ja  SHIFT), 1,
206
 
                   one,   y+(jan SHIFT), 1 );
207
 
         }
208
 
         beta0 = one; gbmv0 = gbmv1;
209
 
      }
210
 
      Mjoin( PATL, hbmvL )( mb1, K, A, LDA, x, beta0, y );
211
 
   }
212
 
 
213
 
   if( vx ) free( vx );
214
 
   if( vy )
215
 
   { Mjoin( PATL, axpby )( N, alphaY, y00, 1, BETA, Y, INCY ); free( vy ); }
 
135
   Mjoin(PATL,refhbmv)(UPLO, N, K, ALPHA, A, LDA, X, INCX, BETA, Y, INCY);
 
136
 
216
137
/*
217
138
 * End of Mjoin( PATL, hbmv )
218
139
 */