/*
 * Author:  G. Jungman
 * RCS:     $Id: blas_raw_cblas_cm.c,v 1.2 1999/10/19 22:02:20 jungman Exp $
 */
/* Implementation of gsl_blas_raw_cm interface which
 * defers to a CBLAS conformant interface. This includes
 * only the level 2 and level 3 functions, since the level 1
 * functions are insensitive to the storage scheme.
 */
#include "gsl_blas_raw_cm.h"


/*
 * ===========================================================================
 * level 2 BLAS
 * ===========================================================================
 */

 
/* GEMV */

void gsl_blas_raw_sgemv_cm (CBLAS_TRANSPOSE_t TransA,
                            size_t M, size_t N,
                            float alpha,
                            const float A[], int lda,
                            const float X[], int incX,
                            float beta,
                            float Y[], int incY)
{
  cblas_sgemv(CblasColMajor, TransA, M, N, alpha, A, lda, X, incX, beta, Y, incY);
}


void gsl_blas_raw_dgemv_cm (CBLAS_TRANSPOSE_t TransA,
                            size_t M, size_t N,
                            double alpha,
                            const double A[], int lda,
                            const double X[], int incX,
                            double beta,
                            double Y[], int incY)
{
  cblas_dgemv(CblasColMajor, TransA, M, N, alpha, A, lda, X, incX, beta, Y, incY);
}


void gsl_blas_raw_cgemv_cm (CBLAS_TRANSPOSE_t TransA,
                            size_t M, size_t N,
                            const void * alpha,
                            const void * A, int lda,
                            const void * X, int incX,
                            const void * beta,
                            void * Y, int incY)
{
  cblas_cgemv(CblasColMajor, TransA, M, N, alpha, A, lda, X, incX, beta, Y, incY);
}


void gsl_blas_raw_zgemv_cm (CBLAS_TRANSPOSE_t TransA,
                            size_t M, size_t N,
                            const void * alpha,
                            const void * A, int lda,
                            const void * X, int incX,
                            const void * beta,
                            void * Y, int incY)
{
  cblas_zgemv(CblasColMajor, TransA, M, N, alpha, A, lda, X, incX, beta, Y, incY);
}


/* GBMV */

void gsl_blas_raw_sgbmv_cm (CBLAS_TRANSPOSE_t TransA,
                            size_t M, size_t N, size_t KL, size_t KU,
                            float alpha,
                            const float A[], int lda,
                            const float X[], int incX,
                            float beta,
                            float Y[], int incY)
{
  cblas_sgbmv(CblasColMajor, TransA, M, N, KL, KU, alpha, A, lda, X, incX, beta, Y, incY);
}


void gsl_blas_raw_dgbmv_cm (CBLAS_TRANSPOSE_t TransA,
                            size_t M, size_t N, size_t KL, size_t KU,
                            double alpha,
                            const double A[], int lda,
                            const double X[], int incX,
                            double beta,
                            double Y[], int incY)
{
  cblas_dgbmv(CblasColMajor, TransA, M, N, KL, KU, alpha, A, lda, X, incX, beta, Y, incY);
}


void gsl_blas_raw_cgbmv_cm (CBLAS_TRANSPOSE_t TransA,
                            size_t M, size_t N, size_t KL, size_t KU,
                            const void * alpha,
                            const void * A, int lda,
                            const void * X, int incX,
                            const void * beta,
                            void * Y, int incY)
{
  cblas_cgbmv(CblasColMajor, TransA, M, N, KL, KU, alpha, A, lda, X, incX, beta, Y, incY);
}


void gsl_blas_raw_zgbmv_cm (CBLAS_TRANSPOSE_t TransA,
                            size_t M, size_t N, size_t KL, size_t KU,
                            const void * alpha,
                            const void * A, int lda,
                            const void * X, int incX,
                            const void * beta,
                            void * Y, int incY)
{
  cblas_zgbmv(CblasColMajor, TransA, M, N, KL, KU, alpha, A, lda, X, incX, beta, Y, incY);
}


/* TRMV */

void gsl_blas_raw_strmv_cm (CBLAS_UPLO_t Uplo,
                            CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag,
                            size_t N,
                            const float A[], int lda,
                            float X[], int incX)
{
  cblas_strmv(CblasColMajor, Uplo, TransA, Diag, N, A, lda, X, incX);
}


void gsl_blas_raw_dtrmv_cm (CBLAS_UPLO_t Uplo,
                            CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag,
                            size_t N,
                            const double A[], int lda,
                            double X[], int incX)
{
  cblas_dtrmv(CblasColMajor, Uplo, TransA, Diag, N, A, lda, X, incX);
}


void gsl_blas_raw_ctrmv_cm (CBLAS_UPLO_t Uplo,
                            CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag,
                            size_t N,
                            const void * A, int lda,
                            void * X, int incX)
{
  cblas_ctrmv(CblasColMajor, Uplo, TransA, Diag, N, A, lda, X, incX);
}


void gsl_blas_raw_ztrmv_cm (CBLAS_UPLO_t Uplo,
                            CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag,
                            size_t N,
                            const void * A, int lda,
                            void * X, int incX)
{
  cblas_ztrmv(CblasColMajor, Uplo, TransA, Diag, N, A, lda, X, incX);
}


/* TBMV */

void gsl_blas_raw_stbmv_cm (CBLAS_UPLO_t Uplo,
                            CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag,
                            size_t N, size_t K,
                            const float A[], int lda,
                            float X[], int incX)
{
  cblas_stbmv(CblasColMajor, Uplo, TransA, Diag, N, K, A, lda, X, incX);
}


void gsl_blas_raw_dtbmv_cm (CBLAS_UPLO_t Uplo,
                            CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag,
                            size_t N, size_t K,
                            const double A[], int lda,
                            double X[], int incX)
{
  cblas_dtbmv(CblasColMajor, Uplo, TransA, Diag, N, K, A, lda, X, incX);
}


void gsl_blas_raw_ctbmv_cm (CBLAS_UPLO_t Uplo,
                            CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag,
                            size_t N, size_t K,
                            const void * A, int lda,
                            void * X, int incX)
{
  cblas_ctbmv(CblasColMajor, Uplo, TransA, Diag, N, K, A, lda, X, incX);
}


void gsl_blas_raw_ztbmv_cm (CBLAS_UPLO_t Uplo,
                            CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag,
                            size_t N, size_t K,
                            const void * A, int lda,
                            void * X, int incX)
{
  cblas_ztbmv(CblasColMajor, Uplo, TransA, Diag, N, K, A, lda, X, incX);
}


/* TPMV */

void gsl_blas_raw_stpmv_cm (CBLAS_UPLO_t Uplo,
                            CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag,
                            size_t N,
                            const float Ap[],
                            float X[], int incX)
{
  cblas_stpmv(CblasColMajor, Uplo, TransA, Diag, N, Ap, X, incX);
}


void gsl_blas_raw_dtpmv_cm (CBLAS_UPLO_t Uplo,
                            CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag,
                            size_t N,
                            const double Ap[],
                            double X[], int incX)
{
  cblas_dtpmv(CblasColMajor, Uplo, TransA, Diag, N, Ap, X, incX);
}


void gsl_blas_raw_ctpmv_cm (CBLAS_UPLO_t Uplo,
                            CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag,
                            size_t N,
                            const void * Ap,
                            void * X, int incX)
{
  cblas_ctpmv(CblasColMajor, Uplo, TransA, Diag, N, Ap, X, incX);
}


void gsl_blas_raw_ztpmv_cm (CBLAS_UPLO_t Uplo,
                            CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag,
                            size_t N,
                            const void * Ap,
                            void * X, int incX)
{
  cblas_ztpmv(CblasColMajor, Uplo, TransA, Diag, N, Ap, X, incX);
}


/* TRSV */

void gsl_blas_raw_strsv_cm (CBLAS_UPLO_t Uplo,
                            CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag,
                            size_t N,
                            const float A[], int lda,
                            float X[], int incX)
{
  cblas_strsv(CblasColMajor, Uplo, TransA, Diag, N, A, lda, X, incX);
}


void gsl_blas_raw_dtrsv_cm (CBLAS_UPLO_t Uplo,
                            CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag,
                            size_t N,
                            const double A[], int lda,
                            double X[], int incX)
{
  cblas_dtrsv(CblasColMajor, Uplo, TransA, Diag, N, A, lda, X, incX);
}


void gsl_blas_raw_ctrsv_cm (CBLAS_UPLO_t Uplo,
                            CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag,
                            size_t N,
                            const void * A, int lda,
                            void * X, int incX)
{
  cblas_ctrsv(CblasColMajor, Uplo, TransA, Diag, N, A, lda, X, incX);
}


void gsl_blas_raw_ztrsv_cm (CBLAS_UPLO_t Uplo,
                            CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag,
                            size_t N,
                            const void * A, int lda,
                            void * X, int incX)
{
  cblas_ztrsv(CblasColMajor, Uplo, TransA, Diag, N, A, lda, X, incX);
}


/* TBSV */

void gsl_blas_raw_stbsv_cm (CBLAS_UPLO_t Uplo,
                            CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag,
                            size_t N, size_t K,
                            const float A[], int lda,
                            float X[], int incX)
{
  cblas_stbsv(CblasColMajor, Uplo, TransA, Diag, N, K, A, lda, X, incX);
}


void gsl_blas_raw_dtbsv_cm (CBLAS_UPLO_t Uplo,
                            CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag,
                            size_t N, size_t K,
                            const double A[], int lda,
                            double X[], int incX)
{
  cblas_dtbsv(CblasColMajor, Uplo, TransA, Diag, N, K, A, lda, X, incX);
}


void gsl_blas_raw_ctbsv_cm (CBLAS_UPLO_t Uplo,
                            CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag,
                            size_t N, size_t K,
                            const void * A, int lda,
                            void * X, int incX)
{
  cblas_ctbsv(CblasColMajor, Uplo, TransA, Diag, N, K, A, lda, X, incX);
}


void gsl_blas_raw_ztbsv_cm (CBLAS_UPLO_t Uplo,
                            CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag,
                            size_t N, size_t K,
                            const void * A, int lda,
                            void * X, int incX)
{
  cblas_ztbsv(CblasColMajor, Uplo, TransA, Diag, N, K, A, lda, X, incX);
}


/* TPSV */

void gsl_blas_raw_stpsv_cm (CBLAS_UPLO_t Uplo,
                            CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag,
                            size_t N,
                            const float Ap[],
                            float X[], int incX)
{
  cblas_stpsv(CblasColMajor, Uplo, TransA, Diag, N, Ap, X, incX);
}


void gsl_blas_raw_dtpsv_cm (CBLAS_UPLO_t Uplo,
                            CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag,
                            size_t N,
                            const double Ap[],
                            double X[], int incX)
{
  cblas_dtpsv(CblasColMajor, Uplo, TransA, Diag, N, Ap, X, incX);
}


void gsl_blas_raw_ctpsv_cm (CBLAS_UPLO_t Uplo,
                            CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag,
                            size_t N,
                            const void * Ap,
                            void * X, int incX)
{
  cblas_ctpsv(CblasColMajor, Uplo, TransA, Diag, N, Ap, X, incX);
}


void gsl_blas_raw_ztpsv_cm (CBLAS_UPLO_t Uplo,
                            CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag,
                            size_t N,
                            const void * Ap,
                            void * X, int incX)
{
  cblas_ztpsv(CblasColMajor, Uplo, TransA, Diag, N, Ap, X, incX);
}


/* SYMV */

void gsl_blas_raw_ssymv_cm (CBLAS_UPLO_t Uplo,
                            size_t N,
                            float alpha,
                            const float A[], int lda,
                            const float X[], int incX,
                            float beta,
                            float Y[], int incY)
{
  cblas_ssymv(CblasColMajor, Uplo, N, alpha, A, lda, X, incX, beta, Y, incY);
}


void gsl_blas_raw_dsymv_cm (CBLAS_UPLO_t Uplo,
                            size_t N,
                            double alpha,
                            const double A[], int lda,
                            const double X[], int incX,
                            double beta,
                            double Y[], int incY)
{
  cblas_dsymv(CblasColMajor, Uplo, N, alpha, A, lda, X, incX, beta, Y, incY);
}


/* SBMV */

void gsl_blas_raw_ssbmv_cm (CBLAS_UPLO_t Uplo,
                            size_t N, size_t K,
                            float alpha,
                            const float A[], int lda, 
                            const float X[], int incX,
                            float beta,
                            float Y[], int incY)
{
  cblas_ssbmv(CblasColMajor, Uplo, N, K, alpha, A, lda, X, incX, beta, Y, incY);
}


void gsl_blas_raw_dsbmv_cm (CBLAS_UPLO_t Uplo,
                            size_t N, size_t K,
                            double alpha,
                            const double A[], int lda,
                            const double X[], int incX,
                            double beta,
                            double Y[], int incY)
{
  cblas_dsbmv(CblasColMajor, Uplo, N, K, alpha, A, lda, X, incX, beta, Y, incY);
}


/* SPMV */

void gsl_blas_raw_sspmv_cm (CBLAS_UPLO_t Uplo,
                            size_t N,
                            float alpha,
                            const float Ap[],
                            const float X[], int incX,
                            float beta,
                            float Y[], int incY)
{
  cblas_sspmv(CblasColMajor, Uplo, N, alpha, Ap, X, incX, beta, Y, incY);
}


void gsl_blas_raw_dspmv_cm (CBLAS_UPLO_t Uplo,
                            size_t N,
                            double alpha,
                            const double Ap[],
                            const double X[], int incX,
                            double beta,
                            double Y[], int incY)
{
  cblas_dspmv(CblasColMajor, Uplo, N, alpha, Ap, X, incX, beta, Y, incY);
}


/* GER */

void gsl_blas_raw_sger_cm (size_t M, size_t N,
                           float alpha,
                           const float X[], int incX,
                           const float Y[], int incY,
                           float A[], int lda)
{
  cblas_sger(CblasColMajor, M, N, alpha, X, incX, Y, incY, A, lda);
}


void gsl_blas_raw_dger_cm (size_t M, size_t N,
                           double alpha,
                           const double X[], int incX,
                           const double Y[], int incY,
                           double A[], int lda)
{
  cblas_dger(CblasColMajor, M, N, alpha, X, incX, Y, incY, A, lda);
}


/* SYR */

void gsl_blas_raw_ssyr_cm (CBLAS_UPLO_t Uplo,
                           size_t N,
                           float alpha,
                           const float X[], int incX,
                           float A[], int lda)
{
  cblas_ssyr(CblasColMajor, Uplo, N,alpha, X, incX, A, lda);
}


void gsl_blas_raw_dsyr_cm (CBLAS_UPLO_t Uplo,
                           size_t N,
                           double alpha,
                           const double X[], int incX,
                           double A[], int lda)
{
  cblas_dsyr(CblasColMajor, Uplo, N, alpha, X, incX, A, lda);
}


/* SPR */

void gsl_blas_raw_sspr_cm (CBLAS_UPLO_t Uplo,
                           size_t N,
                           float alpha,
                           const float X[], int incX,
                           float Ap[])
{
  cblas_sspr(CblasColMajor, Uplo, N, alpha, X, incX, Ap);
}


void gsl_blas_raw_dspr_cm (CBLAS_UPLO_t Uplo,
                           size_t N,
                           double alpha,
                           const double X[], int incX,
                           double Ap[])
{
  cblas_dspr(CblasColMajor, Uplo, N, alpha, X, incX, Ap);
}


/* SYR2 */

void gsl_blas_raw_ssyr2_cm (CBLAS_UPLO_t Uplo,
                            size_t N,
                            float alpha,
                            const float X[], int incX, 
                            const float Y[], int incY,
                            float A[], int lda)
{
  cblas_ssyr2(CblasColMajor, Uplo, N, alpha, X, incX, Y, incY, A, lda);
}


void gsl_blas_raw_dsyr2_cm (CBLAS_UPLO_t Uplo,
                            size_t N,
                            double alpha,
                            const double X[], int incX,
                            const double Y[], int incY,
                            double A[], int lda)
{
  cblas_dsyr2(CblasColMajor, Uplo, N, alpha, X, incX, Y, incY, A, lda);
}


/* SPR2 */

void gsl_blas_raw_sspr2_cm (CBLAS_UPLO_t Uplo,
                            size_t N,
                            float alpha,
                            const float X[], int incX,
                            const float Y[], int incY,
                            float A[])
{
  cblas_sspr2(CblasColMajor, Uplo, N, alpha, X, incX, Y, incY, A);
}


void gsl_blas_raw_dspr2_cm (CBLAS_UPLO_t Uplo,
                            size_t N,
                            double alpha,
                            const double X[], int incX,
                            const double Y[], int incY,
                            double A[])
{
  cblas_sspr2(CblasColMajor, Uplo, N, alpha, X, incX, Y, incY, A);
}


/* HEMV */

void gsl_blas_raw_chemv_cm (CBLAS_UPLO_t Uplo,
                            size_t N,
                            const void * alpha,
                            const void * A, int lda,
                            const void * X, int incX,
                            const void * beta,
                            void * Y, int incY)
{
  cblas_chemv(CblasColMajor, Uplo, N, alpha, A, lda, X, incX, beta, Y, incY);
}


void gsl_blas_raw_zhemv_cm (CBLAS_UPLO_t Uplo,
                            size_t N,
                            const void * alpha,
                            const void * A, int lda,
                            const void * X, int incX,
                            const void * beta,
                            void * Y, int incY)
{
  cblas_zhemv(CblasColMajor, Uplo, N, alpha, A, lda, X, incX, beta, Y, incY);
}


/* HBMV */

void gsl_blas_raw_chbmv_cm (CBLAS_UPLO_t Uplo,
                            size_t N, size_t K,
                            const void * alpha,
                            const void * A, int lda,
                            const void * X, int incX,
                            const void * beta,
                            void * Y, int incY)
{
  cblas_chbmv(CblasColMajor, Uplo, N, K, alpha, A, lda, X, incX, beta, Y, incY);
}


void gsl_blas_raw_zhbmv_cm (CBLAS_UPLO_t Uplo,
                            size_t N, size_t K,
                            const void * alpha,
                            const void * A, int lda,
                            const void * X, int incX,
                            const void * beta,
                            void * Y, int incY)
{
  cblas_zhbmv(CblasColMajor, Uplo, N, K, alpha, A, lda, X, incX, beta, Y, incY);
}


/* HPMV */

void gsl_blas_raw_chpmv_cm (CBLAS_UPLO_t Uplo,
                            size_t N,
                            const void * alpha, const void * Ap,
                            const void * X, int incX,
                            const void * beta,
                            void * Y, int incY)
{
  cblas_chpmv(CblasColMajor, Uplo, N, alpha, Ap, X, incX, beta, Y, incY);
}


void gsl_blas_raw_zhpmv_cm (CBLAS_UPLO_t Uplo,
                            size_t N,
                            const void * alpha,
                            const void * Ap,
                            const void * X, int incX,
                            const void * beta,
                            void * Y, int incY)
{
  cblas_zhpmv(CblasColMajor, Uplo, N, alpha, Ap, X, incX, beta, Y, incY);
}


/* GERU */

void gsl_blas_raw_cgeru_cm (size_t M, size_t N,
                            const void * alpha,
                            const void * X, int incX,
                            const void * Y, int incY,
                            void * A, int lda)
{
  cblas_cgeru(CblasColMajor, M, N, alpha, X, incX, Y, incY, A, lda);
}


void gsl_blas_raw_zgeru_cm (size_t M, size_t N,
                            const void * alpha,
                            const void * X, int incX,
                            const void * Y, int incY,
                            void * A, int lda)
{
  cblas_zgeru(CblasColMajor, M, N, alpha, X, incX, Y, incY, A, lda);
}


/* GERC */

void gsl_blas_raw_cgerc_cm (size_t M, size_t N,
                            const void * alpha,
                            const void * X, int incX,
                            const void * Y, int incY,
                            void * A, int lda)
{
  cblas_cgerc(CblasColMajor, M, N, alpha, X, incX, Y, incY, A, lda);
}


void gsl_blas_raw_zgerc_cm (size_t M, size_t N,
                            const void * alpha,
                            const void * X, int incX,
                            const void * Y, int incY,
                            void * A, int lda)
{
  cblas_zgerc(CblasColMajor, M, N, alpha, X, incX, Y, incY, A, lda);
}


/* HER */

void gsl_blas_raw_cher_cm (CBLAS_UPLO_t Uplo,
                           size_t N,
                           float alpha,
                           const void * X, int incX,
                           void * A, int lda)
{
  cblas_cher(CblasColMajor, Uplo, N, X, incX, A, lda);
}


void gsl_blas_raw_zher_cm (CBLAS_UPLO_t Uplo,
                           size_t N,
                           double alpha,
                           const void * X, int incX,
                           void * A, int lda)
{
  cblas_zher(CblasColMajor, Uplo, N, X, incX, A, lda);
}


/* HPR */

void gsl_blas_raw_chpr_cm (CBLAS_UPLO_t Uplo,
                           size_t N,
                           float alpha,
                           const void * X, int incX,
                           void * A)
{
  cblas_chpr(CblasColMajor, Uplo, N, alpha, X, incX, A);
}


void gsl_blas_raw_zhpr_cm (CBLAS_UPLO_t Uplo,
                           size_t N,
                           double alpha,
                           const void * X, int incX,
                           void * A)
{
  cblas_zhpr(CblasColMajor, Uplo, N, alpha, X, incX, A);
}


/* HER2 */

void gsl_blas_raw_cher2_cm (CBLAS_UPLO_t Uplo,
                            size_t N,
                            const void * alpha,
                            const void * X, int incX,
                            const void * Y, int incY,
                            void * A, int lda)
{
  cblas_cher2(CblasColMajor, Uplo, N, alpha, X, incX, Y, incY, A, lda);
}


void gsl_blas_raw_zher2_cm (CBLAS_UPLO_t Uplo,
                            size_t N,
                            const void * alpha,
                            const void * X, int incX,
                            const void * Y, int incY,
                            void * A, int lda)
{
  cblas_zher2(CblasColMajor, Uplo, N, alpha, X, incX, Y, incY, A, lda);
}


/* HPR2 */

void gsl_blas_raw_chpr2_cm (CBLAS_UPLO_t Uplo,
                            size_t N,
                            const void * alpha,
                            const void * X, int incX,
                            const void * Y, int incY,
                            void * Ap)
{
  cblas_chpr2(CblasColMajor, Uplo, N, alpha, X, incX, Y, incY, Ap);
}


void gsl_blas_raw_zhpr2_cm (CBLAS_UPLO_t Uplo,
                            size_t N,
                            const void * alpha,
                            const void * X, int incX,
                            const void * Y, int incY,
                            void * Ap)
{
  cblas_zhpr2(CblasColMajor, Uplo, N, alpha, X, incX, Y, incY, Ap);
}



/*
 * ===========================================================================
 * level 3 BLAS
 * ===========================================================================
 */


/* GEMM */

void gsl_blas_raw_sgemm_cm (CBLAS_TRANSPOSE_t TransA,
                            CBLAS_TRANSPOSE_t TransB,
                            size_t M, size_t N, size_t K,
                            float alpha,
                            const float A[], int lda,
                            const float B[], int ldb,
                            float beta,
                            float C[], int ldc)
{
  cblas_sgemm(CblasColMajor, TransA, TransB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc);
}


void gsl_blas_raw_dgemm_cm (CBLAS_TRANSPOSE_t TransA,
                            CBLAS_TRANSPOSE_t TransB,
                            size_t M, size_t N, size_t K,
                            double alpha,
                            const double A[], int lda,
                            const double B[], int ldb,
                            double beta,
                            double C[], int ldc)
{
  cblas_dgemm(CblasColMajor, TransA, TransB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc);
}


void gsl_blas_raw_cgemm_cm (CBLAS_TRANSPOSE_t TransA,
                            CBLAS_TRANSPOSE_t TransB,
                            size_t M, size_t N, size_t K,
                            const void * alpha,
                            const void * A, int lda, 
                            const void * B, int ldb,
                            const void * beta,
                            void * C, int ldc)
{
  cblas_cgemm(CblasColMajor, TransA, TransB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc);
}


void gsl_blas_raw_zgemm_cm (CBLAS_TRANSPOSE_t TransA,
                            CBLAS_TRANSPOSE_t TransB,
                            size_t M, size_t N, size_t K,
                            const void * alpha,
                            const void * A, int lda,
                            const void * B, int ldb,
                            const void * beta,
                            void * C, int ldc)
{
  cblas_zgemm(CblasColMajor, TransA, TransB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc);
}


/* SYMM */

void gsl_blas_raw_ssymm_cm (CBLAS_SIDE_t Side, CBLAS_UPLO_t Uplo,
                            size_t M, size_t N,
                            float alpha,
                            const float A[], int lda,
                            const float B[], int ldb,
                            float beta,
                            float C[], int ldc)
{
  cblas_ssymm(CblasColMajor, Side, Uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc);
}


void gsl_blas_raw_dsymm_cm (CBLAS_SIDE_t Side,
                            CBLAS_UPLO_t Uplo,
                            size_t M, size_t N,
                            double alpha,
                            const double A[], int lda,
                            const double B[], int ldb,
                            double beta,
                            double C[], int ldc)
{
  cblas_dsymm(CblasColMajor, Side, Uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc);

}


void gsl_blas_raw_csymm_cm (CBLAS_SIDE_t Side,
                            CBLAS_UPLO_t Uplo,
                            size_t M, size_t N,
                            const void * alpha,
                            const void * A, int lda,
                            const void * B, int ldb,
                            const void * beta,
                            void * C, int ldc)
{
  cblas_csymm(CblasColMajor, Side, Uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc);
}


void gsl_blas_raw_zsymm_cm (CBLAS_SIDE_t Side,
                            CBLAS_UPLO_t Uplo,
                            size_t M, size_t N,
                            const void * alpha,
                            const void * A, int lda,
                            const void * B, int ldb,
                            const void * beta,
                            void * C, int ldc)
{
  cblas_zsymm(CblasColMajor, Side, Uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc);
}


/* SYRK */

void gsl_blas_raw_ssyrk_cm (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t Trans,
                            size_t N, size_t K,
                            float alpha,
                            const float A[], int lda,
                            float beta,
                            float C[], int ldc)
{
  cblas_ssyrk(CblasColMajor, Uplo, Trans, N, K, alpha, A, lda, beta, C, ldc);
}


void gsl_blas_raw_dsyrk_cm (CBLAS_UPLO_t Uplo,
                            CBLAS_TRANSPOSE_t Trans,
                            size_t N, size_t K,
                            double alpha,
                            const double A[], int lda,
                            double beta,
                            double C[], int ldc)
{
  cblas_dsyrk(CblasColMajor, Uplo, Trans, N, K, alpha, A, lda, beta, C, ldc);
}


void gsl_blas_raw_csyrk_cm (CBLAS_UPLO_t Uplo,
                            CBLAS_TRANSPOSE_t Trans,
                            size_t N, size_t K,
                            const void * alpha,
                            const void * A, int lda,
                            const void * beta,
                            void * C, int ldc)
{
  cblas_csyrk(CblasColMajor, Uplo, Trans, N, K, alpha, A, lda, beta, C, ldc);
}


void gsl_blas_raw_zsyrk_cm (CBLAS_UPLO_t Uplo,
                            CBLAS_TRANSPOSE_t Trans,
                            size_t N, size_t K,
                            const void * alpha,
                            const void * A, int lda,
                            const void * beta,
                            void * C, int ldc)
{
  cblas_zsyrk(CblasColMajor, Uplo, Trans, N, K, alpha, A, lda, beta, C, ldc);
}


/* SYR2K */

void gsl_blas_raw_ssyr2k_cm (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t Trans,
                             size_t N, size_t K,
                             float alpha,
                             const float A[], int lda,
                             const float B[], int ldb,
                             float beta,
                             float C[], int ldc)
{
  cblas_ssyr2k(CblasColMajor, Uplo, Trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc);
}


void gsl_blas_raw_dsyr2k_cm (CBLAS_UPLO_t Uplo,
                             CBLAS_TRANSPOSE_t Trans,
                             size_t N, size_t K,
                             double alpha,
                             const double A[], int lda,
                             const double B[], int ldb,
                             double beta,
                             double C[], int ldc)
{
  cblas_dsyr2k(CblasColMajor, Uplo, Trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc);
}


void gsl_blas_raw_csyr2k_cm (CBLAS_UPLO_t Uplo,
                             CBLAS_TRANSPOSE_t Trans,
                             size_t N, size_t K,
                             const void * alpha,
                             const void * A, int lda,
                             const void * B, int ldb,
                             const void * beta,
                             void * C, int ldc)
{
  cblas_csyr2k(CblasColMajor, Uplo, Trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc);
}


void gsl_blas_raw_zsyr2k_cm (CBLAS_UPLO_t Uplo,
                             CBLAS_TRANSPOSE_t Trans,
                             size_t N, size_t K,
                             const void * alpha,
                             const void * A, int lda,
                             const void * B, int ldb,
                             const void * beta,
                             void * C, int ldc)
{
  cblas_zsyr2k(CblasColMajor, Uplo, Trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc);
}


/* TRMM */

void gsl_blas_raw_strmm_cm (CBLAS_SIDE_t Side,
                            CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA,
                            CBLAS_DIAG_t Diag,
                            size_t M, size_t N,
                            float alpha,
                            const float A[], int lda,
                            float B[], int ldb)
{
  cblas_strmm(CblasColMajor, Side, Uplo, TransA, Diag, M, N, alpha, A, lda, B, ldb);
}


void gsl_blas_raw_dtrmm_cm (CBLAS_SIDE_t Side,
                            CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA,
                            CBLAS_DIAG_t Diag,
                            size_t M, size_t N,
                            double alpha,
                            const double A[], int lda,
                            double B[], int ldb)
{
  cblas_dtrmm(CblasColMajor, Side, Uplo, TransA, Diag, M, N, alpha, A, lda, B, ldb);
}


void gsl_blas_raw_ctrmm_cm (CBLAS_SIDE_t Side,
                            CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA,
                            CBLAS_DIAG_t Diag,
                            size_t M, size_t N,
                            const void * alpha,
                            const void * A, int lda,
                            void * B, int ldb)
{
  cblas_ctrmm(CblasColMajor, Side, Uplo, TransA, Diag, M, N, alpha, A, lda, B, ldb);
}


void gsl_blas_raw_ztrmm_cm (CBLAS_SIDE_t Side,
                            CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA,
                            CBLAS_DIAG_t Diag,
                            size_t M, size_t N,
                            const void * alpha,
                            const void * A, int lda,
                            void * B, int ldb)
{
  cblas_ztrmm(CblasColMajor, Side, Uplo, TransA, Diag, M, N, alpha, A, lda, B, ldb);
}


/* TRSM */

void gsl_blas_raw_strsm_cm (CBLAS_SIDE_t Side,
                            CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA,
                            CBLAS_DIAG_t Diag,
                            size_t M, size_t N,
                            float alpha,
                            const float A[], int lda,
                            float B[], int ldb)
{
  cblas_strsm(CblasColMajor, Side, Uplo, TransA, Diag, M, N, alpha, A, lda, B, ldb);
}


void gsl_blas_raw_dtrsm_cm (CBLAS_SIDE_t Side,
                            CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA,
                            CBLAS_DIAG_t Diag,
                            size_t M, size_t N,
                            double alpha,
                            const double A[], int lda,
                            double B[], int ldb)
{
  cblas_dtrsm(CblasColMajor, Side, Uplo, TransA, Diag, M, N, alpha, A, lda, B, ldb);
}


void gsl_blas_raw_ctrsm_cm (CBLAS_SIDE_t Side,
                            CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA,
                            CBLAS_DIAG_t Diag,
                            size_t M, size_t N,
                            const void * alpha,
                            const void * A, int lda,
                            void * B, int ldb)
{
  cblas_ctrsm(CblasColMajor, Side, Uplo, TransA, Diag, M, N, alpha, A, lda, B, ldb);
}


void gsl_blas_raw_ztrsm_cm (CBLAS_SIDE_t Side,
                            CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA,
                            CBLAS_DIAG_t Diag,
                            size_t M, size_t N,
                            const void * alpha,
                            const void * A, int lda,
                            void * B, int ldb)
{
  cblas_ztrsm(CblasColMajor, Side, Uplo, TransA, Diag, M, N, alpha, A, lda, B, ldb);
}


/* HEMM */

void gsl_blas_raw_chemm_cm (CBLAS_SIDE_t Side,
                            CBLAS_UPLO_t Uplo,
                            size_t M, size_t N,
                            const void * alpha,
                            const void * A, int lda,
                            const void * B, int ldb,
                            const void * beta,
                            void * C, int ldc)
{
  cblas_chemm(CblasColMajor, Side, Uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc);
}


void gsl_blas_raw_zhemm_cm (CBLAS_SIDE_t Side,
                            CBLAS_UPLO_t Uplo,
                            size_t M, size_t N,
                            const void * alpha,
                            const void * A, int lda,
                            const void * B, int ldb,
                            const void * beta,
                            void * C, int ldc)
{
  cblas_zhemm(CblasColMajor, Side, Uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc);
}


/* HERK */

void gsl_blas_raw_cherk_cm (CBLAS_UPLO_t Uplo,
                            CBLAS_TRANSPOSE_t Trans,
                            size_t N, size_t K,
                            float alpha,
                            const void * A, int lda,
                            float beta,
                            void * C, int ldc)
{
  cblas_cherk(CblasColMajor, Uplo, Trans, N, K, alpha, A, lda, beta, C, ldc);
}


void gsl_blas_raw_zherk_cm (CBLAS_UPLO_t Uplo,
                            CBLAS_TRANSPOSE_t Trans,
                            size_t N, size_t K,
                            double alpha,
                            const void * A, int lda,
                            double beta,
                            void * C, int ldc)
{
  cblas_zherk(CblasColMajor, Uplo, Trans, N, K, alpha, A, lda, beta, C, ldc);
}


/* HER2K */

void gsl_blas_raw_cher2k_cm (CBLAS_UPLO_t Uplo,
                             CBLAS_TRANSPOSE_t Trans,
                             size_t N, size_t K,
                             const void * alpha,
                             const void * A, int lda,
                             const void * B, int ldb,
                             float beta,
                             void * C, int ldc)
{
  cblas_cher2k(CblasColMajor, Uplo, Trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc);
}


void gsl_blas_raw_zher2k_cm (CBLAS_UPLO_t Uplo,
                             CBLAS_TRANSPOSE_t Trans,
                             size_t N, size_t K,
                             const void * alpha,
                             const void * A, int lda,
                             const void * B, int ldb,
                             double beta,
                             void * C, int ldc)
{
  cblas_zher2k(CblasColMajor, Uplo, Trans, N, K, alpha, A, lda, B, ldb, beta, C, ldc);
}
