/*
* Automatically Tuned Linear Algebra Software v3.8.3
* (C) Copyright 2003 R. Clint Whaley
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions, and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the ATLAS group or the names of its contributers may
* not be used to endorse or promote products derived from this
* software without specific written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ATLAS GROUP OR ITS CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
*/
#ifndef ATLAS_PKBLAS_H
#define ATLAS_PKBLAS_H
#include "atlas_misc.h"
#ifndef ATL_NOL3
#include "atlas_lvl3.h"
#endif
#define CBLAS_ENUM_ONLY
#include "cblas.h"
#undef CBLAS_ENUM_ONLY
enum PACK_UPLO {PackUpper=121, PackLower=122, PackGen=123};
#define PACK_ORDER CBLAS_ORDER
#define PackRowMajor CblasRowMajor
#define PackColMajor CblasColMajor
#define PACK_TRANS CBLAS_TRANSPOSE
#define PackNoTrans CblasNoTrans
#define PackTrans CblasTrans
#define PackConjTrans CblasConjTrans
#define PackConj AtlasConj
#define PACK_DIAG CBLAS_DIAG
#define PackNonUnit CblasNonUnit
#define PackUnit CblasUnit
#define PACK_SIDE CBLAS_SIDE
#define PackLeft CblasLeft
#define PackRight CblasRight
#ifndef ATL_pkMaxMalloc
#define ATL_pkMaxMalloc ATL_MaxMalloc
#endif
#ifdef TCPLX
#define MindexPL(I_,J_,lda_) ( (((J_)*((lda_)+(lda_)-(J_)-1))) + (I_)+(I_) )
#define MindexPU(I_,J_,lda_) ( ((((lda_)+(lda_)+(J_)-1)*(J_))) + (I_)+(I_) )
#else
#define MindexPL(I_,J_,lda_) ( (((J_)*((lda_)+(lda_)-(J_)-1))>>1) + (I_) )
#define MindexPU(I_,J_,lda_) ( ((((lda_)+(lda_)+(J_)-1)*(J_))>>1) + (I_) )
#endif
#define MindexP(uplo_,I_,J_,lda_) \
( (uplo_) == PackUpper ? MindexPU(I_,J_,lda_) : \
( (uplo_) == PackLower ? MindexPL(I_,J_,lda_) : \
(((J_)*(lda_)+(I_))SHIFT) ) )
#define Mpld(uplo_,J_,lda_) (uplo_) == PackUpper ? (lda_)+(J_) : \
( (uplo_) == PackLower ? (lda_)-(J_) : (lda_) )
void ATL_sgpmm(const enum PACK_UPLO UA, const enum PACK_TRANS TA,
const enum PACK_UPLO UB, const enum PACK_TRANS TB,
const enum PACK_UPLO UC,
const int M, const int N, const int K, const float alpha,
const float *A, const int IA, const int JA, const int lda,
const float *B, const int IB, const int JB, const int ldb,
const float beta, float *C, const int IC, const int JC,
const int ldc);
void ATL_sprankK(const enum PACK_UPLO UA, const enum ATLAS_TRANS TA,
const enum PACK_UPLO UB, const enum ATLAS_TRANS TB,
const int M, const int N, const int K, int R,
const SCALAR alpha, const TYPE *A, int lda,
const TYPE *B, int ldb, const SCALAR beta,
const enum PACK_UPLO UC, TYPE *C, int ldc);
int ATL_spmmJIKF(const enum PACK_UPLO UA, const enum ATLAS_TRANS TA,
const enum PACK_UPLO UB, 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, const enum PACK_UPLO UC,
TYPE *C, const int ldc);
int ATL_spmmJIK(const enum PACK_UPLO UA, const enum ATLAS_TRANS TA,
const enum PACK_UPLO UB, const enum ATLAS_TRANS TB,
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, const enum PACK_UPLO UC,
float *C, const int ldc);
void ATL_spcol2blkF(const int M, const int N, const float alpha,
const float *A, int lda, const int ldainc, float *V);
void ATL_sprow2blkTF(const int M, const int N, const float alpha,
const float *A, int lda, const int ldainc, float *V);
void ATL_spcol2blk_a1(const int M, const int N, const float alpha,
const float *A, int lda, const int ldainc, float *V);
void ATL_spcol2blk_aX(const int M, const int N, const float alpha,
const float *A, int lda, const int ldainc, float *V);
void ATL_sprow2blkT_a1(const int M, const int N, const float alpha,
const float *A, int lda, const int ldainc, float *V);
void ATL_sprow2blkT_aX(const int M, const int N, const float alpha,
const float *A, int lda, const int ldainc, float *V);
void ATL_spputblk(const int M, const int N, const TYPE *V, TYPE *C,
int ldc, int ldcinc, const SCALAR beta);
void ATL_spputblk_diag
(const int M, const int N, const float *V, const enum ATLAS_UPLO UC,
float *C, int ldc, int ldcinc, const float alpha, const float beta);
void ATL_spputblk_aX
(const int M, const int N, const float *V, float *C, int ldc, int ldcinc,
const float alpha, const float beta);
void ATL_ssprk(const enum PACK_UPLO UA, const enum PACK_TRANS TA,
const enum ATLAS_UPLO UC, const int CP,
const int N, const int K, const float alpha,
const float *A, const int IA, const int JA, const int lda,
const float beta,
float *C, const int IC, const int JC, const int ldc);
void ATL_shprk(const enum PACK_UPLO UA, const enum PACK_TRANS TA,
const enum ATLAS_UPLO UC, const int CP,
const int N, const int K, const float alpha,
const float *A, const int IA, const int JA, const int lda,
const float beta,
float *C, const int IC, const in