void ATL_zrefhpmvL ( const int N, const double * ALPHA, const double * A, const int LDA, const double * X, const int INCX, const double * BETA, double * Y, const int INCY ) { /* * Purpose * ======= * * ATL_zrefhpmvL( ... ) * * <=> * * ATL_zrefhpmv( AtlasLower, ... ) * * See ATL_zrefhpmv for details. * * --------------------------------------------------------------------- */ /* * .. Local Variables .. */ register double t0_i, t0_r, t1_i, t1_r; int i, iaij, ix, iy, j, jaj = 0, jx, jy, lda2 = ( LDA << 1 ), incx2 = 2 * INCX, incy2 = 2 * INCY; /* .. * .. Executable Statements .. * */ Mzvscal( N, BETA, Y, INCY ); for( j = 0, jx = 0, jy = 0; j < N; j++, jx += incx2, jy += incy2 ) { Mmul( ALPHA[0], ALPHA[1], X[jx], X[jx+1], t0_r, t0_i ); Mset( ATL_dZERO, ATL_dZERO, t1_r, t1_i ); Mset( Y[jy] + A[jaj]*t0_r, Y[jy+1] + A[jaj]*t0_i, Y[jy], Y[jy+1] ); for( i = j+1, iaij = jaj+2, ix = jx+incx2, iy = jy+incy2; i < N; i++, iaij += 2, ix += incx2, iy += incy2 ) { Mmla( A[iaij], A[iaij+1], t0_r, t0_i, Y[iy], Y[iy+1] ); Mmla( A[iaij], -A[iaij+1], X[ix], X[ix+1], t1_r, t1_i ); } Mmla( ALPHA[0], ALPHA[1], t1_r, t1_i, Y[jy], Y[jy+1] ); jaj += lda2; lda2 -= 2; } /* * End of ATL_zrefhpmvL */ }
void ATL_zrefhpr2U ( const int N, const double * ALPHA, const double * X, const int INCX, const double * Y, const int INCY, double * A, const int LDA ) { /* * Purpose * ======= * * ATL_zrefhpr2U( ... ) * * <=> * * ATL_zrefhpr2( AtlasUpper, ... ) * * See ATL_zrefhpr2 for details. * * --------------------------------------------------------------------- */ /* * .. Local Variables .. */ register double t0_i, t0_r, t1_i, t1_r; int i, iaij, incx2 = 2 * INCX, incy2 = 2 * INCY, ix, iy, j, jaj, jx, jy, lda2 = ( LDA << 1 ); /* .. * .. Executable Statements .. * */ for( j = 0, jaj = 0, jx = 0, jy = 0; j < N; j++, jx += incx2, jy += incy2 ) { Mmul( ALPHA[0], ALPHA[1], Y[jy], -Y[jy+1], t0_r, t0_i ); Mmul( ALPHA[0], -ALPHA[1], X[jx], -X[jx+1], t1_r, t1_i ); for( i = 0, iaij = jaj, ix = 0, iy = 0; i < j; i++, iaij += 2, ix += incx2, iy += incy2 ) { Mmla( X[ix], X[ix+1], t0_r, t0_i, A[iaij], A[iaij+1] ); Mmla( Y[iy], Y[iy+1], t1_r, t1_i, A[iaij], A[iaij+1] ); } Mset( A[iaij] + X[jx] * t0_r - X[jx+1] * t0_i + Y[jy] * t1_r - Y[jy+1] * t1_i, ATL_dZERO, A[iaij], A[iaij+1] ); jaj += lda2; lda2 += 2; } /* * End of ATL_zrefhpr2U */ }
void ATL_crefhpr2L ( const int N, const float * ALPHA, const float * X, const int INCX, const float * Y, const int INCY, float * A, const int LDA ) { /* * Purpose * ======= * * ATL_crefhpr2L( ... ) * * <=> * * ATL_crefhpr2( AtlasLower, ... ) * * See ATL_crefhpr2 for details. * * --------------------------------------------------------------------- */ /* * .. Local Variables .. */ register float t0_i, t0_r, t1_i, t1_r; int i, iaij, incx2 = 2 * INCX, incy2 = 2 * INCY, ix, iy, j, jaj, jx, jy, lda2 = ( LDA << 1 ); /* .. * .. Executable Statements .. * */ for( j = 0, jaj = 0, jx = 0, jy = 0; j < N; j++, jx += incx2, jy += incy2 ) { Mmul( ALPHA[0], ALPHA[1], Y[jy], -Y[jy+1], t0_r, t0_i ); Mmul( ALPHA[0], -ALPHA[1], X[jx], -X[jx+1], t1_r, t1_i ); Mset( A[jaj] + X[jx] * t0_r - X[jx+1] * t0_i + Y[jy] * t1_r - Y[jy+1] * t1_i, ATL_sZERO, A[jaj], A[jaj+1] ); for( i = j+1, iaij = jaj+2, ix = jx + incx2, iy = jy + incy2; i < N; i++, iaij += 2, ix += incx2, iy += incy2 ) { Mmla( X[ix], X[ix+1], t0_r, t0_i, A[iaij], A[iaij+1] ); Mmla( Y[iy], Y[iy+1], t1_r, t1_i, A[iaij], A[iaij+1] ); } jaj += lda2; lda2 -= 2; } /* * End of ATL_crefhpr2L */ }
void ATL_zrefgbmvT ( const int M, const int N, const int KL, const int KU, const double * ALPHA, const double * A, const int LDA, const double * X, const int INCX, const double * BETA, double * Y, const int INCY ) { /* * Purpose * ======= * * ATL_zrefgbmvT( ... ) <=> ATL_zrefgbmv( AtlasTrans, ... ) * * See ATL_zrefgbmv for details. * * --------------------------------------------------------------------- */ /* * .. Local Variables .. */ register double t0_i, t0_r; int i, i0, i1, iaij, ix, j, jaj, jy, k, kx=0, ky=0; int incx2 = 2 * INCX, incy2 = 2 * INCY, lda2 = ( LDA << 1 ); /* .. * .. Executable Statements .. * */ for( j = 0, jaj = 0, jy = ky; j < M; j++, jaj += lda2, jy += incy2 ) { Mset( ATL_dZERO, ATL_dZERO, t0_r, t0_i ); k = KU - j; i0 = ( j - KU > 0 ? j - KU : 0 ); i1 = ( N - 1 > j + KL ? j + KL : N - 1 ); for( i = i0, iaij = ((k+i0) << 1)+jaj, ix = kx; i <= i1; i++, iaij += 2, ix += incx2 ) { Mmla( A[iaij], A[iaij+1], X[ix], X[ix+1], t0_r, t0_i ); } Mzelscal( BETA[0], BETA[1], Y[jy], Y[jy+1] ); Mmla( ALPHA[0], ALPHA[1], t0_r, t0_i, Y[jy], Y[jy+1] ); if( j >= KU ) kx += incx2; } /* * End of ATL_zrefgbmvT */ }
void ATL_zrefsyrkLT ( const int N, const int K, const double * ALPHA, const double * A, const int LDA, const double * BETA, double * C, const int LDC ) { /* * Purpose * ======= * * ATL_zrefsyrkLT( ... ) * * <=> * * ATL_zrefsyrk( AtlasLower, AtlasTrans, ... ) * * See ATL_zrefsyrk for details. * * --------------------------------------------------------------------- */ /* * .. Local Variables .. */ register double t0_i, t0_r; int i, iali, ialj, icij, j, jai, jaj, jcj, l, lda2 = ( LDA << 1 ), ldc2 = ( LDC << 1 ); /* .. * .. Executable Statements .. * */ for( j = 0, jaj = 0, jcj = 0; j < N; j++, jaj += lda2, jcj += ldc2 ) { for( i = j, jai = j*lda2, icij = (j << 1)+jcj; i < N; i++, jai += lda2, icij += 2 ) { Mset( ATL_dZERO, ATL_dZERO, t0_r, t0_i ); for( l = 0, iali = jai, ialj = jaj; l < K; l++, iali += 2, ialj += 2 ) { Mmla( A[iali], A[iali+1], A[ialj], A[ialj+1], t0_r, t0_i ); } Mzelscal( BETA[0], BETA[1], C[icij], C[icij+1] ); Mmla( ALPHA[0], ALPHA[1], t0_r, t0_i, C[icij], C[icij+1] ); } } /* * End of ATL_zrefsyrkLT */ }
void ATL_zrefgpmvUT ( const int M, const int N, const double * ALPHA, const double * A, const int LDA, const double * X, const int INCX, const double * BETA, double * Y, const int INCY ) { /* * Purpose * ======= * * ATL_zrefgpmvLT( ... ) * * <=> * * ATL_zrefgpmv( AtlasUpper, AtlasTrans, ... ) * * See ATL_zrefgpmv for details. * * --------------------------------------------------------------------- */ /* * .. Local Variables .. */ register double t0_i, t0_r; int i, iaij, incx2 = 2 * INCX, incy2 = 2 * INCY, ix, j, jaj, jy, lda2 = ( LDA << 1 ); /* .. * .. Executable Statements .. * */ for( j = 0, jaj = 0, jy = 0; j < M; j++, jy += incy2 ) { Mset( ATL_dZERO, ATL_dZERO, t0_r, t0_i ); for( i = 0, iaij = jaj, ix = 0; i < N; i++, iaij += 2, ix += incx2 ) { Mmla( A[iaij], A[iaij+1], X[ix], X[ix+1], t0_r, t0_i ); } Mzelscal( BETA[0], BETA[1], Y[jy], Y[jy+1] ); Mmla( ALPHA[0], ALPHA[1], t0_r, t0_i, Y[jy], Y[jy+1] ); jaj += lda2; lda2 += 2; } /* * End of ATL_zrefgpmvUT */ }
void ATL_crefgpmvLH ( const int M, const int N, const float * ALPHA, const float * A, const int LDA, const float * X, const int INCX, const float * BETA, float * Y, const int INCY ) { /* * Purpose * ======= * * ATL_crefgpmvLH( ... ) * * <=> * * ATL_crefgpmv( AtlasLower, AtlasConjTrans, ... ) * * See ATL_crefgpmv for details. * * --------------------------------------------------------------------- */ /* * .. Local Variables .. */ register float t0_i, t0_r; int i, iaij, incx2 = 2 * INCX, incy2 = 2 * INCY, ix, j, jaj, jy, lda2 = ( LDA << 1 ); /* .. * .. Executable Statements .. * */ for( j = 0, jaj = 0, jy = 0; j < M; j++, jy += incy2 ) { Mset( ATL_sZERO, ATL_sZERO, t0_r, t0_i ); for( i = 0, iaij = jaj, ix = 0; i < N; i++, iaij += 2, ix += incx2 ) { Mmla( A[iaij], -A[iaij+1], X[ix], X[ix+1], t0_r, t0_i ); } Mcelscal( BETA[0], BETA[1], Y[jy], Y[jy+1] ); Mmla( ALPHA[0], ALPHA[1], t0_r, t0_i, Y[jy], Y[jy+1] ); lda2 -= 2; jaj += lda2; } /* * End of ATL_crefgpmvLH */ }
void ATL_creftbmvUHN ( const int N, const int K, const float * A, const int LDA, float * X, const int INCX ) { /* * Purpose * ======= * * ATL_creftbmvUHN( ... ) * * <=> * * ATL_creftbmv( AtlasUpper, AtlasConjTrans, AtlasNonUnit, ... ) * * See ATL_creftbmv for details. * * --------------------------------------------------------------------- */ /* * .. Local Variables .. */ register float t0_i, t0_r; int i, i0, iaij, incx2 = 2 * INCX, ix, j, jaj, jx, kx = 0, l, lda2 = ( LDA << 1 ); /* .. * .. Executable Statements .. * */ for( j = N-1, jaj = (N-1)*lda2, jx = kx+(N-1)*incx2; j >= 0; j--, jaj -= lda2, jx -= incx2 ) { Mset( ATL_sZERO, ATL_sZERO, t0_r, t0_i ); l = K - j; i0 = ( j - K > 0 ? j - K : 0 ); for( i = i0, iaij = ((l+i0) << 1)+jaj, ix = kx+i0*incx2; i < j; i++, iaij += 2, ix += incx2 ) { Mmla( A[iaij], -A[iaij+1], X[ix] , X[ix+1], t0_r, t0_i ); } Mmla( A[iaij], -A[iaij+1], X[jx] , X[jx+1], t0_r, t0_i ); Mset( t0_r, t0_i, X[jx], X[jx+1] ); } /* * End of ATL_creftbmvUHN */ }
void ATL_zrefgpruU ( const int M, const int N, const double * ALPHA, const double * X, const int INCX, const double * Y, const int INCY, double * A, const int LDA ) { /* * .. Local Variables .. */ register double t0_i, t0_r; int i, iaij, incx2 = 2 * INCX, incy2 = 2 * INCY, ix, j, jaj, jy, lda2 = ( LDA << 1 ); /* .. * .. Executable Statements .. * */ for( j = 0, jaj = 0, jy = 0; j < N; j++, jy += incy2 ) { Mmul( ALPHA[0], ALPHA[1], Y[jy], Y[jy+1], t0_r, t0_i ); for( i = 0, iaij = jaj, ix = 0; i < M; i++, iaij += 2, ix += incx2 ) { Mmla( X[ix], X[ix+1], t0_r, t0_i, A[iaij], A[iaij+1] ); } jaj += lda2; lda2 += 2; } /* * End of ATL_zrefgpruU */ }
void ATL_crefherkLC ( const int N, const int K, const float ALPHA, const float * A, const int LDA, const float BETA, float * C, const int LDC ) { /* * Purpose * ======= * * ATL_crefherkLC( ... ) * * <=> * * ATL_crefherk( AtlasLower, AtlasConjTrans, ... ) * * See ATL_crefherk for details. * * --------------------------------------------------------------------- */ /* * .. Local Variables .. */ register float t0_i, t0_r; int i, iali, ialj, icij, j, jai, jaj, jcj, l, lda2 = ( LDA << 1 ), ldc2 = ( LDC << 1 ); /* .. * .. Executable Statements .. * */ for( j = 0, jaj = 0, jcj = 0; j < N; j++, jaj += lda2, jcj += ldc2 ) { jai = j * lda2; icij = ( j << 1 ) + jcj; t0_r = ATL_sZERO; for( l = 0, iali = jai, ialj = jaj; l < K; l++, iali += 2, ialj += 2 ) { t0_r += A[iali] * A[ialj] + A[iali+1] * A[ialj+1]; } Mselscal( BETA, C[icij] ); Mset( C[icij] + ALPHA * t0_r, ATL_sZERO, C[icij], C[icij+1] ); icij += 2; jai += lda2; for( i = j+1; i < N; i++, jai += lda2, icij += 2 ) { Mset( ATL_sZERO, ATL_sZERO, t0_r, t0_i ); for( l = 0, iali = jai, ialj = jaj; l < K; l++, iali += 2, ialj += 2 ) { Mmla( A[iali], -A[iali+1], A[ialj], A[ialj+1], t0_r, t0_i ); } Mselscal( BETA, C[icij ] ); Mselscal( BETA, C[icij+1] ); Mset( C[icij] + ALPHA * t0_r, C[icij+1] + ALPHA * t0_i, C[icij], C[icij+1] ); } } /* * End of ATL_crefherkLC */ }
void ATL_zreftrmvUTN ( const int N, const double * A, const int LDA, double * X, const int INCX ) { /* * Purpose * ======= * * ATL_zreftrmvUTN( ... ) * * <=> * * ATL_zreftrmv( AtlasUpper, AtlasTrans, AtlasNonUnit, ... ) * * See ATL_zreftrmv for details. * * --------------------------------------------------------------------- */ /* * .. Local Variables .. */ register double t0_i, t0_r; int i, iaij, incx2 = 2 * INCX, ix, j, jaj, jx, lda2 = ( LDA << 1 ); /* .. * .. Executable Statements .. * */ for( j = N-1, jaj = (N-1)*lda2, jx = (N-1)*incx2; j >= 0; j--, jaj -= lda2, jx -= incx2 ) { Mset( ATL_dZERO, ATL_dZERO, t0_r, t0_i ); for( i = 0, iaij = jaj, ix = 0; i < j; i++, iaij += 2, ix += incx2 ) { Mmla( A[iaij], A[iaij+1], X[ix] , X[ix+1], t0_r, t0_i ); } Mmla( A[iaij], A[iaij+1], X[jx] , X[jx+1], t0_r, t0_i ); Mset( t0_r, t0_i, X[jx], X[jx+1] ); } /* * End of ATL_zreftrmvUTN */ }
void ATL_creftrmmRUCU ( const int M, const int N, const float * ALPHA, const float * A, const int LDA, float * B, const int LDB ) { /* * Purpose * ======= * * ATL_creftrmmRUCU( ... ) * * <=> * * ATL_creftrmm * ( AtlasRight, AtlasUpper, AtlasConjTrans, AtlasUnit, ... ) * * See ATL_creftrmm for details. * * --------------------------------------------------------------------- */ /* * .. Local Variables .. */ float t0_i, t0_r; int i, iajk, ibij, ibik, j, jak, jbj, jbk, k, lda2 = ( LDA << 1 ), ldb2 = ( LDB << 1 ); /* .. * .. Executable Statements .. * */ for( k = 0, jak = 0, jbk = 0; k < N; k++, jak += lda2, jbk += ldb2 ) { for( j = 0, iajk = jak, jbj = 0; j < k; j++, iajk += 2, jbj += ldb2 ) { Mmul( ALPHA[0], ALPHA[1], A[iajk], -A[iajk+1], t0_r, t0_i ); for( i = 0, ibij = jbj, ibik = jbk; i < M; i++, ibij += 2, ibik += 2 ) { Mmla( t0_r, t0_i, B[ibik], B[ibik+1], B[ibij], B[ibij+1] ); } } Mset( ALPHA[0], ALPHA[1], t0_r, t0_i ); for( i = 0, ibik = jbk; i < M; i++, ibik += 2 ) { Msscl( t0_r, t0_i, B[ibik], B[ibik+1] ); } } /* * End of ATL_creftrmmRUCU */ }
void ATL_zrefherkLN ( const int N, const int K, const double ALPHA, const double * A, const int LDA, const double BETA, double * C, const int LDC ) { /* * Purpose * ======= * * ATL_zrefherkLN( ... ) * * <=> * * ATL_zrefherk( AtlasLower, AtlasNoTrans, ... ) * * See ATL_zrefherk for details. * * --------------------------------------------------------------------- */ /* * .. Local Variables .. */ register double t0_i, t0_r; int i, iail, iaj, iajl, icij, j, jal, jcj, l, lda2 = ( LDA << 1 ), ldc2 = ( LDC << 1 ); /* .. * .. Executable Statements .. * */ for( j = 0, iaj = 0, jcj = 0; j < N; j++, iaj += 2, jcj += ldc2 ) { icij = ( j << 1 ) + jcj; Mdelscal( BETA, C[icij] ); C[icij+1] = ATL_dZERO; Mdvscal( ((N-j-1) << 1), BETA, C+icij+2, 1 ); for( l = 0, iajl = iaj, jal = 0; l < K; l++, iajl += lda2, jal += lda2 ) { Mset( ALPHA * A[iajl], -ALPHA * A[iajl+1], t0_r, t0_i ); iail = ( j << 1 ) + jal; icij = ( j << 1 ) + jcj; Mset( C[icij] + t0_r * A[iail] - t0_i * A[iail+1], ATL_dZERO, C[icij], C[icij+1] ); iail += 2; icij += 2; for( i = j+1; i < N; i++, iail += 2, icij += 2 ) { Mmla( t0_r, t0_i, A[iail], A[iail+1], C[icij], C[icij+1] ); } } } /* * End of ATL_zrefherkLN */ }
void ATL_zreftrmmRLTN ( const int M, const int N, const double * ALPHA, const double * A, const int LDA, double * B, const int LDB ) { /* * Purpose * ======= * * ATL_zreftrmmRLTN( ... ) * * <=> * * ATL_zreftrmm * ( AtlasRight, AtlasLower, AtlasTrans, AtlasNonUnit, ... ) * * See ATL_zreftrmm for details. * * --------------------------------------------------------------------- */ /* * .. Local Variables .. */ double t0_i, t0_r; int i, iajk, ibij, ibik, j, jak, jbj, jbk, k, lda2 = ( LDA << 1 ), ldb2 = ( LDB << 1 ); /* .. * .. Executable Statements .. * */ for( k = N-1, jak = (N-1)*lda2, jbk = (N-1)*ldb2; k >= 0; k--, jak -= lda2, jbk -= ldb2 ) { for( j = k+1, iajk = ( (k+1) << 1 )+jak, jbj = (k+1)*ldb2; j < N; j++, iajk += 2, jbj += ldb2 ) { Mmul( ALPHA[0], ALPHA[1], A[iajk], A[iajk+1], t0_r, t0_i ); for( i = 0, ibij = jbj, ibik = jbk; i < M; i++, ibij += 2, ibik += 2 ) { Mmla( t0_r, t0_i, B[ibik], B[ibik+1], B[ibij], B[ibij+1] ); } } Mset( ALPHA[0], ALPHA[1], t0_r, t0_i ); i = ( k << 1 ) + jak; Mdscl( A[i], A[i+1], t0_r, t0_i ); for( i = 0, ibik = jbk; i < M; i++, ibik += 2 ) { Mdscl( t0_r, t0_i, B[ibik], B[ibik+1] ); } } /* * End of ATL_zreftrmmRLTN */ }
void ATL_crefherkUN ( const int N, const int K, const float ALPHA, const float * A, const int LDA, const float BETA, float * C, const int LDC ) { /* * Purpose * ======= * * ATL_crefherkUN( ... ) * * <=> * * ATL_crefherk( AtlasUpper, AtlasNoTrans, ... ) * * See ATL_crefherk for details. * * --------------------------------------------------------------------- */ /* * .. Local Variables .. */ register float t0_i, t0_r; int i, iail, iaj, iajl, icij, j, jal, jcj, l, lda2 = ( LDA << 1 ), ldc2 = ( LDC << 1 ); /* .. * .. Executable Statements .. * */ for( j = 0, iaj = 0, jcj = 0; j < N; j++, iaj += 2, jcj += ldc2 ) { Msvscal( (j << 1), BETA, C+jcj, 1 ); icij = ( j << 1 ) + jcj; Mselscal( BETA, C[icij] ); C[icij+1] = ATL_sZERO; for( l = 0, iajl = iaj, jal = 0; l < K; l++, iajl += lda2, jal += lda2 ) { Mset( ALPHA * A[iajl], -ALPHA * A[iajl+1], t0_r, t0_i ); for( i = 0, iail = jal, icij = jcj; i < j; i++, iail += 2, icij += 2 ) { Mmla( t0_r, t0_i, A[iail], A[iail+1], C[icij], C[icij+1] ); } Mset( C[icij] + t0_r * A[iail] - t0_i * A[iail+1], ATL_sZERO, C[icij], C[icij+1] ); } } /* * End of ATL_crefherkUN */ }
void ATL_crefgemmCT ( const int M, const int N, const int K, const float * ALPHA, const float * A, const int LDA, const float * B, const int LDB, const float * BETA, float * C, const int LDC ) { /* * .. Local Variables .. */ register float t0_i, t0_r; int i, iali, ibj, ibjl, icij, j, jai, jcj, l, lda2 = ( LDA << 1 ), ldb2 = ( LDB << 1 ), ldc2 = ( LDC << 1 ); /* .. * .. Executable Statements .. * */ for( j = 0, ibj = 0, jcj = 0; j < N; j++, ibj += 2, jcj += ldc2 ) { for( i = 0, icij = jcj, jai = 0; i < M; i++, icij += 2, jai += lda2 ) { Mset( ATL_sZERO, ATL_sZERO, t0_r, t0_i ); for( l = 0, iali = jai, ibjl = ibj; l < K; l++, iali += 2, ibjl += ldb2 ) { Mmla( A[iali], -A[iali+1], B[ibjl], B[ibjl+1], t0_r, t0_i ); } Mcelscal( BETA[0], BETA[1], C[icij], C[icij+1] ); Mmla( ALPHA[0], ALPHA[1], t0_r, t0_i, C[icij], C[icij+1] ); } } /* * End of ATL_crefgemmCT */ }
void ATL_zrefgbmvN ( const int M, const int N, const int KL, const int KU, const double * ALPHA, const double * A, const int LDA, const double * X, const int INCX, const double * BETA, double * Y, const int INCY ) { /* * Purpose * ======= * * ATL_zrefgbmvN( ... ) <=> ATL_zrefgbmv( AtlasNoTrans, ... ) * * See ATL_zrefgbmv for details. * * --------------------------------------------------------------------- */ /* * .. Local Variables .. */ register double t0_i, t0_r; int i, i0, i1, iaij, iy, j, jaj, jx, k, kx=0, ky=0; int incx2 = 2 * INCX, incy2 = 2 * INCY, lda2 = ( LDA << 1 ); /* .. * .. Executable Statements .. * */ Mzvscal( M, BETA, Y, INCY ); for( j = 0, jaj = 0, jx = kx; j < N; j++, jaj += lda2, jx += incx2 ) { Mmul( ALPHA[0], ALPHA[1], X[jx], X[jx+1], t0_r, t0_i ); k = KU - j; i0 = ( j - KU > 0 ? j - KU : 0 ); i1 = ( M - 1 > j + KL ? j + KL : M - 1 ); for( i = i0, iaij = ((k+i0) << 1)+jaj, iy = ky; i <= i1; i++, iaij += 2, iy += incy2 ) { Mmla( A[iaij], A[iaij+1], t0_r, t0_i, Y[iy], Y[iy+1] ); } if( j >= KU ) ky += incy2; } /* * End of ATL_zrefgbmvN */ }
void ATL_creftrmmRLNN ( const int M, const int N, const float * ALPHA, const float * A, const int LDA, float * B, const int LDB ) { /* * Purpose * ======= * * ATL_creftrmmRLNN( ... ) * * <=> * * ATL_creftrmm * ( AtlasRight, AtlasLower, AtlasNoTrans, AtlasNonUnit, ... ) * * See ATL_creftrmm for details. * * --------------------------------------------------------------------- */ /* * .. Local Variables .. */ float t0_i, t0_r; int i, iakj, ibij, ibik, j, jaj, jbj, jbk, k, lda2 = ( LDA << 1 ), ldb2 = ( LDB << 1 ); /* .. * .. Executable Statements .. * */ for( j = 0, jaj = 0, jbj = 0; j < N; j++, jaj += lda2, jbj += ldb2 ) { Mset( ALPHA[0], ALPHA[1], t0_r, t0_i ); i = ( j << 1 ) + jaj; Msscl( A[i], A[i+1], t0_r, t0_i ); for( i = 0, ibij = jbj; i < M; i++, ibij += 2 ) { Msscl( t0_r, t0_i, B[ibij], B[ibij+1] ); } for( k = j+1, iakj = ((j+1)<<1)+jaj, jbk = (j+1)*ldb2; k < N; k++, iakj += 2, jbk += ldb2 ) { Mmul( ALPHA[0], ALPHA[1], A[iakj], A[iakj+1], t0_r, t0_i ); for( i = 0, ibij = jbj, ibik = jbk; i < M; i++, ibij += 2, ibik += 2 ) { Mmla( t0_r, t0_i, B[ibik], B[ibik+1], B[ibij], B[ibij+1] ); } } } /* * End of ATL_creftrmmRLNN */ }
void ATL_zreftrmmRUNN ( const int M, const int N, const double * ALPHA, const double * A, const int LDA, double * B, const int LDB ) { /* * Purpose * ======= * * ATL_zreftrmmRUNN( ... ) * * <=> * * ATL_zreftrmm * ( AtlasRight, AtlasUpper, AtlasNoTrans, AtlasNonUnit, ... ) * * See ATL_zreftrmm for details. * * --------------------------------------------------------------------- */ /* * .. Local Variables .. */ double t0_i, t0_r; int i, iakj, ibij, ibik, j, jaj, jbj, jbk, k, lda2 = ( LDA << 1 ), ldb2 = ( LDB << 1 ); /* .. * .. Executable Statements .. * */ for( j = N-1, jaj = (N-1)*lda2, jbj = (N-1)*ldb2; j >= 0; j--, jaj -= lda2, jbj -= ldb2 ) { Mset( ALPHA[0], ALPHA[1], t0_r, t0_i ); i = ( j << 1 ) + jaj; Mdscl( A[i], A[i+1], t0_r, t0_i ); for( i = 0, ibij = jbj; i < M; i++, ibij += 2 ) { Mdscl( t0_r, t0_i, B[ibij], B[ibij+1] ); } for( k = 0, iakj = jaj, jbk = 0; k < j; k++, iakj += 2, jbk += ldb2 ) { Mmul( ALPHA[0], ALPHA[1], A[iakj], A[iakj+1], t0_r, t0_i ); for( i = 0, ibij = jbj, ibik = jbk; i < M; i++, ibij += 2, ibik += 2 ) { Mmla( t0_r, t0_i, B[ibik], B[ibik+1], B[ibij], B[ibij+1] ); } } } /* * End of ATL_zreftrmmRUNN */ }
void ATL_zrefgemmCN ( const int M, const int N, const int K, const double * ALPHA, const double * A, const int LDA, const double * B, const int LDB, const double * BETA, double * C, const int LDC ) { /* * .. Local Variables .. */ register double t0_i, t0_r; int i, iai, iail, iblj, icij, j, jbj, jcj, l, lda2 = ( LDA << 1 ), ldb2 = ( LDB << 1 ), ldc2 = ( LDC << 1 ); /* .. * .. Executable Statements .. * */ for( j = 0, jbj = 0, jcj = 0; j < N; j++, jbj += ldb2, jcj += ldc2 ) { for( i = 0, icij = jcj, iai = 0; i < M; i++, icij += 2, iai += lda2 ) { Mset( ATL_dZERO, ATL_dZERO, t0_r, t0_i ); for( l = 0, iail = iai, iblj = jbj; l < K; l++, iail += 2, iblj += 2 ) { Mmla( A[iail], -A[iail+1], B[iblj], B[iblj+1], t0_r, t0_i ); } Mzelscal( BETA[0], BETA[1], C[icij], C[icij+1] ); Mmla( ALPHA[0], ALPHA[1], t0_r, t0_i, C[icij], C[icij+1] ); } } /* * End of ATL_zrefgemmCN */ }
void ATL_creftrmmLUCN ( const int M, const int N, const float * ALPHA, const float * A, const int LDA, float * B, const int LDB ) { /* * Purpose * ======= * * ATL_creftrmmLUCN( ... ) * * <=> * * ATL_creftrmm * ( AtlasLeft, AtlasUpper, AtlasConjTrans, AtlasNonUnit, ... ) * * See ATL_creftrmm for details. * * --------------------------------------------------------------------- */ /* * .. Local Variables .. */ float t0_i, t0_r; int i, iaki, ibij, ibkj, j, jai, jbj, k, lda2 = ( LDA << 1 ), ldb2 = ( LDB << 1 ); /* .. * .. Executable Statements .. * */ for( j = 0, jbj = 0; j < N; j++, jbj += ldb2 ) { for( i = M-1, jai = (M-1)*lda2, ibij = ((M-1)<<1)+jbj; i >= 0; i--, jai -= lda2, ibij -= 2 ) { Mset( B[ibij], B[ibij+1], t0_r, t0_i ); k = ( i << 1 ) + jai; Msscl( A[k], -A[k+1], t0_r, t0_i ); for( k = 0, iaki = jai, ibkj = jbj; k < i; k++, iaki += 2, ibkj += 2 ) { Mmla( A[iaki], -A[iaki+1], B[ibkj], B[ibkj+1], t0_r, t0_i ); } Mmul( ALPHA[0], ALPHA[1], t0_r, t0_i, B[ibij], B[ibij+1] ); } } /* * End of ATL_creftrmmLUCN */ }
void ATL_crefgpmvLN ( const int M, const int N, const float * ALPHA, const float * A, const int LDA, const float * X, const int INCX, const float * BETA, float * Y, const int INCY ) { /* * Purpose * ======= * * ATL_crefgpmvLN( ... ) * * <=> * * ATL_crefgpmv( AtlasLower, AtlasNoTrans, ... ) * * See ATL_crefgpmv for details. * * --------------------------------------------------------------------- */ /* * .. Local Variables .. */ register float t0_i, t0_r; int i, iaij, incx2 = 2 * INCX, incy2 = 2 * INCY, iy, j, jaj, jx, lda2 = ( LDA << 1 ); /* .. * .. Executable Statements .. * */ Mcvscal( M, BETA, Y, INCY ); for( j = 0, jaj = 0, jx = 0; j < N; j++, jx += incx2 ) { Mmul( ALPHA[0], ALPHA[1], X[jx], X[jx+1], t0_r, t0_i ); for( i = 0, iaij = jaj, iy = 0; i < M; i++, iaij += 2, iy += incy2 ) { Mmla( A[iaij], A[iaij+1], t0_r, t0_i, Y[iy], Y[iy+1] ); } lda2 -= 2; jaj += lda2; } /* * End of ATL_crefgpmvLN */ }
void ATL_zreftrmmLLNU ( const int M, const int N, const double * ALPHA, const double * A, const int LDA, double * B, const int LDB ) { /* * Purpose * ======= * * ATL_zreftrmmLLNU( ... ) * * <=> * * ATL_zreftrmm * ( AtlasLeft, AtlasLower, AtlasNoTrans, AtlasUnit, ... ) * * See ATL_zreftrmm for details. * * --------------------------------------------------------------------- */ /* * .. Local Variables .. */ double t0_i, t0_r; int i, iaik, ibij, ibkj, j, jak, jbj, k, lda2 = ( LDA << 1 ), ldb2 = ( LDB << 1 ); /* .. * .. Executable Statements .. * */ for( j = 0, jbj = 0; j < N; j++, jbj += ldb2 ) { for( k = M-1, jak = (M-1)*lda2, ibkj = ((M-1)<<1)+jbj; k >= 0; k--, jak -= lda2, ibkj -= 2 ) { Mmul( ALPHA[0], ALPHA[1], B[ibkj], B[ibkj+1], t0_r, t0_i ); Mset( t0_r, t0_i, B[ibkj], B[ibkj+1] ); for( i = k+1, iaik = ((k+1)<<1)+jak, ibij = ((k+1)<<1)+jbj; i < M; i++, iaik += 2, ibij += 2 ) { Mmla( t0_r, t0_i, A[iaik], A[iaik+1], B[ibij], B[ibij+1] ); } } } /* * End of ATL_zreftrmmLLNU */ }
void ATL_zrefsyrkUN ( const int N, const int K, const double * ALPHA, const double * A, const int LDA, const double * BETA, double * C, const int LDC ) { /* * Purpose * ======= * * ATL_zrefsyrkUN( ... ) * * <=> * * ATL_zrefsyrk( AtlasUpper, AtlasNoTrans, ... ) * * See ATL_zrefsyrk for details. * * --------------------------------------------------------------------- */ /* * .. Local Variables .. */ register double t0_i, t0_r; int i, iail, iaj, iajl, icij, j, jal, jcj, l, lda2 = ( LDA << 1 ), ldc2 = ( LDC << 1 ); /* .. * .. Executable Statements .. * */ for( j = 0, iaj = 0, jcj = 0; j < N; j++, iaj += 2, jcj += ldc2 ) { Mzvscal( j+1, BETA, C+jcj, 1 ); for( l = 0, iajl = iaj, jal = 0; l < K; l++, iajl += lda2, jal += lda2 ) { Mmul( ALPHA[0], ALPHA[1], A[iajl], A[iajl+1], t0_r, t0_i ); for( i = 0, iail = jal, icij = jcj; i <= j; i++, iail += 2, icij += 2 ) { Mmla( t0_r, t0_i, A[iail], A[iail+1], C[icij], C[icij+1] ); } } } /* * End of ATL_zrefsyrkUN */ }
void ATL_crefsyrkLN ( const int N, const int K, const float * ALPHA, const float * A, const int LDA, const float * BETA, float * C, const int LDC ) { /* * Purpose * ======= * * ATL_crefsyrkLN( ... ) * * <=> * * ATL_crefsyrk( AtlasLower, AtlasNoTrans, ... ) * * See ATL_crefsyrk for details. * * --------------------------------------------------------------------- */ /* * .. Local Variables .. */ register float t0_i, t0_r; int i, iail, iaj, iajl, icij, j, jal, jcj, l, lda2 = ( LDA << 1 ), ldc2 = ( LDC << 1 ); /* .. * .. Executable Statements .. * */ for( j = 0, iaj = 0, jcj = 0; j < N; j++, iaj += 2, jcj += ldc2 ) { Mcvscal( N-j, BETA, C+(j << 1)+jcj, 1 ); for( l = 0, iajl = iaj, jal = 0; l < K; l++, iajl += lda2, jal += lda2 ) { Mmul( ALPHA[0], ALPHA[1], A[iajl], A[iajl+1], t0_r, t0_i ); for( i = j, iail = (j << 1)+jal, icij = (j << 1)+jcj; i < N; i++, iail += 2, icij += 2 ) { Mmla( t0_r, t0_i, A[iail], A[iail+1], C[icij], C[icij+1] ); } } } /* * End of ATL_crefsyrkLN */ }
void ATL_zreftrmmLLCU ( const int M, const int N, const double * ALPHA, const double * A, const int LDA, double * B, const int LDB ) { /* * Purpose * ======= * * ATL_zreftrmmLLCU( ... ) * * <=> * * ATL_zreftrmm * ( AtlasLeft, AtlasLower, AtlasConjTrans, AtlasUnit, ... ) * * See ATL_zreftrmm for details. * * --------------------------------------------------------------------- */ /* * .. Local Variables .. */ double t0_i, t0_r; int i, iaki, ibij, ibkj, j, jai, jbj, k, lda2 = ( LDA << 1 ), ldb2 = ( LDB << 1 ); /* .. * .. Executable Statements .. * */ for( j = 0, jbj = 0; j < N; j++, jbj += ldb2 ) { for( i = 0, jai = 0, ibij = jbj; i < M; i++, jai += lda2, ibij += 2 ) { Mset( B[ibij], B[ibij+1], t0_r, t0_i ); for( k = i+1, iaki = ((i+1)<<1)+jai, ibkj = ((i+1)<<1)+jbj; k < M; k++, iaki += 2, ibkj += 2 ) { Mmla( A[iaki], -A[iaki+1], B[ibkj], B[ibkj+1], t0_r, t0_i ); } Mmul( ALPHA[0], ALPHA[1], t0_r, t0_i, B[ibij], B[ibij+1] ); } } /* * End of ATL_zreftrmmLLCU */ }
void ATL_creftbmvUNN ( const int N, const int K, const float * A, const int LDA, float * X, const int INCX ) { /* * Purpose * ======= * * ATL_creftbmvUNN( ... ) * * <=> * * ATL_creftbmv( AtlasUpper, AtlasNoTrans, AtlasNonUnit, ... ) * * See ATL_creftbmv for details. * * --------------------------------------------------------------------- */ /* * .. Local Variables .. */ register float t0_i, t0_r; int i, i0, iaij, incx2 = 2 * INCX, ix, j, jaj, jx, kx = 0, l, lda2 = ( LDA << 1 ); /* .. * .. Executable Statements .. * */ for( j = 0, jaj = 0, jx = kx; j < N; j++, jaj += lda2, jx += incx2 ) { Mset( X[jx], X[jx+1], t0_r, t0_i ); l = K - j; i0 = ( j - K > 0 ? j - K : 0 ); for( i = i0, iaij = ((l+i0) << 1)+jaj, ix = kx; i < j; i++, iaij += 2, ix += incx2 ) { Mmla( A[iaij], A[iaij+1], t0_r, t0_i, X[ix] , X[ix+1] ); } Mmul( A[iaij], A[iaij+1], t0_r, t0_i, X[jx] , X[jx+1] ); if( j >= K ) { kx += incx2; } } /* * End of ATL_creftbmvUNN */ }
void ATL_crefhprL ( const int N, const float ALPHA, const float * X, const int INCX, float * A, const int LDA ) { /* * Purpose * ======= * * ATL_crefhprL( ... ) * * <=> * * ATL_crefhpr( AtlasLower, ... ) * * See ATL_crefhpr for details. * * --------------------------------------------------------------------- */ /* * .. Local Variables .. */ register float t0_i, t0_r; int i, jaj, iaij, ix, j, jx, lda2 = ( LDA << 1 ), incx2 = 2 * INCX; /* .. * .. Executable Statements .. * */ for( j = 0, jaj = 0, jx = 0; j < N; j++, jx += incx2 ) { Mset( ALPHA * X[jx], -ALPHA * X[jx+1], t0_r, t0_i ); Mset( A[jaj] + X[jx] * t0_r - X[jx+1] * t0_i, ATL_sZERO, A[jaj], A[jaj+1] ); for( i = j+1, iaij = jaj+2, ix = jx+incx2; i < N; i++, iaij += 2, ix += incx2 ) { Mmla( X[ix], X[ix+1], t0_r, t0_i, A[iaij], A[iaij+1] ); } jaj += lda2; lda2 -= 2; } /* * End of ATL_crefhprL */ }
void ATL_zreftpmvLCN ( const int N, const double * A, const int LDA, double * X, const int INCX ) { /* * Purpose * ======= * * ATL_zreftpmvLCN( ... ) * * <=> * * ATL_zreftpmv( AtlasLower, AtlasConj, AtlasNonUnit, ... ) * * See ATL_zreftpmv for details. * * --------------------------------------------------------------------- */ /* * .. Local Variables .. */ register double t0_i, t0_r; int i, iaij, incx2 = 2 * INCX, ix, j, jaj, jx, lda2 = ( ( LDA - N + 1 ) << 1 ); /* .. * .. Executable Statements .. * */ for( j = N-1, jaj = (((LDA+1)*(N-1)) << 1) - (N-1)*N, jx = (N-1)*incx2; j >= 0; j--, jx -= incx2 ) { Mset( X[jx], X[jx+1], t0_r, t0_i ); Mdscl( A[jaj], -A[jaj+1], X[jx], X[jx+1] ); for( i = j+1, iaij = jaj+2, ix = jx+incx2; i < N; i++, iaij += 2, ix += incx2 ) { Mmla( A[iaij], -A[iaij+1], t0_r, t0_i, X[ix] , X[ix+1] ); } lda2 += 2; jaj -= lda2; } /* * End of ATL_zreftpmvLCN */ }
void ATL_creftbmvLTN ( const int N, const int K, const float * A, const int LDA, float * X, const int INCX ) { /* * Purpose * ======= * * ATL_creftbmvLTN( ... ) * * <=> * * ATL_creftbmv( AtlasLower, AtlasTrans, AtlasNonUnit, ... ) * * See ATL_creftbmv for details. * * --------------------------------------------------------------------- */ /* * .. Local Variables .. */ register float t0_i, t0_r; int i, i1, iaij, incx2 = 2 * INCX, ix, j, jaj, jx, kx = 0, lda2 = ( LDA << 1 ); /* .. * .. Executable Statements .. * */ for( j = 0, jaj = 0, jx = kx; j < N; j++, jaj += lda2, jx += incx2 ) { Mmul( A[jaj], A[jaj+1], X[jx] , X[jx+1], t0_r, t0_i ); i1 = ( N - 1 > j + K ? j + K : N - 1 ); for( i = j+1, iaij = 2+jaj, ix = jx + incx2; i <= i1; i++, iaij += 2, ix += incx2 ) { Mmla( A[iaij], A[iaij+1], X[ix] , X[ix+1], t0_r, t0_i ); } Mset( t0_r, t0_i, X[jx], X[jx+1] ); } /* * End of ATL_creftbmvLTN */ }