int Mjoin(PATL,syr2kLN) #endif (const int N, const int K, const void *valpha, const void *A, const int lda, const void *B, const int ldb, const void *vbeta, void *C, const int ldc) { int i; void *vc=NULL; TYPE *c; #ifdef TREAL const SCALAR alpha=*( (const SCALAR *)valpha ); const SCALAR beta =*( (const SCALAR *)vbeta ); const SCALAR one=1.0, zero=0.0; #else #define alpha valpha const TYPE *beta=vbeta; const TYPE one[2]={1.0,0.0}, zero[2]={0.0,0.0}; #endif i = ATL_MulBySize(N)*N; if (i <= ATL_MaxMalloc) vc = malloc(ATL_Cachelen+i); if (vc == NULL) return(1); c = ATL_AlignPtr(vc); CgemmNT(N, N, K, alpha, A, lda, B, ldb, zero, c, N); if ( SCALAR_IS_ONE(beta) ) Mjoin(syr2k_put,_b1)(N, c, beta, C, ldc); else if ( SCALAR_IS_ZERO(beta) ) Mjoin(syr2k_put,_b0)(N, c, beta, C, ldc); #ifdef TCPLX else if (SCALAR_IS_NONE(beta)) Mjoin(syr2k_put,_bn1)(N, c, beta, C, ldc); else if (beta[1] == *zero) Mjoin(syr2k_put,_bXi0)(N, c, beta, C, ldc); #endif else Mjoin(syr2k_put,_bX)(N, c, beta, C, ldc); free(vc); return(0); }
void Cgemm(const enum ATLAS_TRANS TA, const enum ATLAS_TRANS TB, const int M, const int N, const int K, const SCALAR alpha, const TYPE *A, const int lda, const TYPE *B, const int ldb, const SCALAR beta, TYPE *C, const int ldc) /* * Error checks have been done by interface routine */ { if (!M || !N) return; /* quick return */ if ( SCALAR_IS_ZERO(alpha) || !K) { #ifdef TREAL if (beta == ATL_rzero) Mjoin(PATL,gezero)(M, N, C, ldc); else if (beta != ATL_rone) Mjoin(PATL,gescal_bX)(M, N, beta, C, ldc); #else if (beta[1] == ATL_rzero) { if (*beta == ATL_rzero) Mjoin(PATL,gezero)(M, N, C, ldc); else if (*beta != ATL_rone) Mjoin(PATL,gescal_bXi0)(M, N, beta, C, ldc); } else Mjoin(PATL,gescal_bX)(M, N, beta, C, ldc); #endif return; } if (TA == AtlasNoTrans) { if (TB == AtlasNoTrans) CgemmNN(M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); #ifdef TCPLX else if (TB == AtlasConjTrans) CgemmNC(M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); #endif else CgemmNT(M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); } #ifdef TCPLX else if (TA == AtlasConjTrans) { if (TB == AtlasNoTrans) CgemmCN(M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); else if (TB == AtlasConjTrans) CgemmCC(M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); else CgemmCT(M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); } #endif else { if (TB == AtlasNoTrans) CgemmTN(M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); #ifdef TCPLX else if (TB == AtlasConjTrans) CgemmTC(M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); #endif else CgemmTT(M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); } }