33#error "BLASCHAR must be defined before including blasproto.hpp"
37#error "BLASTYPE must be defined before including blasproto.hpp"
41#error "BLASCOMPLEX must be defined before including blasproto.hpp"
47#define UNI20_INTERNAL_CONCAT2(x, y) x##y
50#define UNI20_INTERNAL_CONCAT(x, y) UNI20_INTERNAL_CONCAT2(x, y)
55#define UNI20_INTERNAL_BLAS_FN(NAME) UNI20_INTERNAL_CONCAT(UNI20_INTERNAL_CONCAT(BLASCHAR, NAME), _)
69 void UNI20_INTERNAL_BLAS_FN(gemm)(
char const* transa,
char const* transb, blas_int
const* m, blas_int
const* n,
70 blas_int
const* k,
BLASTYPE const* alpha,
BLASTYPE const* A, blas_int
const* lda,
76 BLASTYPE const* A, blas_int
const* lda,
BLASTYPE const* x, blas_int
const* incx,
82#error "BLASREALTYPE must be defined before including blasproto.hpp for BLASCOMPLEX functions"
93 void UNI20_INTERNAL_BLAS_FN(herk)(
char const* uplo,
char const* trans, blas_int
const* n, blas_int
const* k,
97 void UNI20_INTERNAL_BLAS_FN(her2k)(
char const* uplo,
char const* trans, blas_int
const* n, blas_int
const* k,
105 blas_int
const* lda);
107 void UNI20_INTERNAL_BLAS_FN(syrk)(
char const* uplo,
char const* trans, blas_int
const* n, blas_int
const* k,
111 void UNI20_INTERNAL_BLAS_FN(syr2k)(
char const* uplo,
char const* trans, blas_int
const* n, blas_int
const* k,
121inline void gemm(
char transa,
char transb, blas_int m, blas_int n, blas_int k,
BLASTYPE alpha,
BLASTYPE const* A,
124 UNI20_EXTERNAL_API_CALL(BLAS,
UNI20_INTERNAL_BLAS_FN(
gemm), transa, transb, m, n, k, alpha, A, lda, B, ldb,
beta, C,
126 detail::UNI20_INTERNAL_BLAS_FN(
gemm)(&transa, &transb, &m, &n, &k, &alpha, A, &lda, B, &ldb, &
beta, C, &ldc);
132 UNI20_EXTERNAL_API_CALL(BLAS,
UNI20_INTERNAL_BLAS_FN(
gemv), trans, m, n, alpha, A, lda, x, incx,
beta, y, incy);
133 detail::UNI20_INTERNAL_BLAS_FN(
gemv)(&trans, &m, &n, &alpha, A, &lda, x, &incx, &
beta, y, &incy);
139 blas_int incy,
BLASTYPE* A, blas_int lda)
141 UNI20_EXTERNAL_API_CALL(BLAS,
UNI20_INTERNAL_BLAS_FN(geru), m, n, alpha, x, incx, y, incy, A, lda);
142 detail::UNI20_INTERNAL_BLAS_FN(geru)(&m, &n, &alpha, x, &incx, y, &incy, A, &lda);
146 blas_int incy,
BLASTYPE* A, blas_int lda)
148 UNI20_EXTERNAL_API_CALL(BLAS,
UNI20_INTERNAL_BLAS_FN(gerc), m, n, alpha, x, incx, y, incy, A, lda);
149 detail::UNI20_INTERNAL_BLAS_FN(gerc)(&m, &n, &alpha, x, &incx, y, &incy, A, &lda);
152inline void herk(
char uplo,
char trans, blas_int n, blas_int k,
BLASREALTYPE alpha,
BLASTYPE const* A, blas_int lda,
155 UNI20_EXTERNAL_API_CALL(BLAS,
UNI20_INTERNAL_BLAS_FN(herk), uplo, trans, n, k, alpha, A, lda,
beta, C, ldc);
156 detail::UNI20_INTERNAL_BLAS_FN(herk)(&uplo, &trans, &n, &k, &alpha, A, &lda, &
beta, C, &ldc);
159inline void her2k(
char uplo,
char trans, blas_int n, blas_int k,
BLASTYPE alpha,
BLASTYPE const* A, blas_int lda,
162 UNI20_EXTERNAL_API_CALL(BLAS,
UNI20_INTERNAL_BLAS_FN(her2k), uplo, trans, n, k, alpha, A, lda, B, ldb,
beta, C, ldc);
163 detail::UNI20_INTERNAL_BLAS_FN(her2k)(&uplo, &trans, &n, &k, &alpha, A, &lda, B, &ldb, &
beta, C, &ldc);
169 blas_int incy,
BLASTYPE* A, blas_int lda)
171 UNI20_EXTERNAL_API_CALL(BLAS,
UNI20_INTERNAL_BLAS_FN(
ger), m, n, alpha, x, incx, y, incy, A, lda);
172 detail::UNI20_INTERNAL_BLAS_FN(
ger)(&m, &n, &alpha, x, &incx, y, &incy, A, &lda);
175inline void syrk(
char uplo,
char trans, blas_int n, blas_int k,
BLASTYPE alpha,
BLASTYPE const* A, blas_int lda,
178 UNI20_EXTERNAL_API_CALL(BLAS,
UNI20_INTERNAL_BLAS_FN(
syrk), uplo, trans, n, k, alpha, A, lda,
beta, C, ldc);
179 detail::UNI20_INTERNAL_BLAS_FN(
syrk)(&uplo, &trans, &n, &k, &alpha, A, &lda, &
beta, C, &ldc);
185 UNI20_EXTERNAL_API_CALL(BLAS,
UNI20_INTERNAL_BLAS_FN(
syr2k), uplo, trans, n, k, alpha, A, lda, B, ldb,
beta, C, ldc);
186 detail::UNI20_INTERNAL_BLAS_FN(
syr2k)(&uplo, &trans, &n, &k, &alpha, A, &lda, B, &ldb, &
beta, C, &ldc);
193#undef UNI20_INTERNAL_CONCAT
194#undef UNI20_INTERNAL_CONCAT2
195#undef UNI20_INTERNAL_BLAS_FN
#define UNI20_EXTERNAL_API_CALL(module, func,...)
Emits a trace log entry for an outgoing backend API call.
Definition backend.hpp:90
#define BLASTYPE
Internal macro mapping the BLAS prefix to the associated Uni20 scalar type.
Definition reference_blas.hpp:24
#define UNI20_INTERNAL_BLAS_FN(NAME)
Builds the mangled Fortran symbol name for the current BLAS instantiation.
Definition blasproto.hpp:55
#define BLASREALTYPE
Internal macro naming the real-valued companion type for complex single-precision instantiations.
Definition reference_blas.hpp:55
Definition blas_int.hpp:18
void gemv(char trans, blas_int m, blas_int n, BLASTYPE alpha, BLASTYPE const *A, blas_int lda, BLASTYPE const *x, blas_int incx, BLASTYPE beta, BLASTYPE *y, blas_int incy)
Definition blasproto.hpp:129
void syr2k(char uplo, char trans, blas_int n, blas_int k, BLASTYPE alpha, BLASTYPE const *A, blas_int lda, BLASTYPE const *B, blas_int ldb, BLASTYPE beta, BLASTYPE *C, blas_int ldc)
Definition blasproto.hpp:182
void ger(blas_int m, blas_int n, BLASTYPE alpha, BLASTYPE const *x, blas_int incx, BLASTYPE const *y, blas_int incy, BLASTYPE *A, blas_int lda)
Definition blasproto.hpp:168
void gemm(char transa, char transb, blas_int m, blas_int n, blas_int k, BLASTYPE alpha, BLASTYPE const *A, blas_int lda, BLASTYPE const *B, blas_int ldb, BLASTYPE beta, BLASTYPE *C, blas_int ldc)
Definition blasproto.hpp:121
void syrk(char uplo, char trans, blas_int n, blas_int k, BLASTYPE alpha, BLASTYPE const *A, blas_int lda, BLASTYPE beta, BLASTYPE *C, blas_int ldc)
Definition blasproto.hpp:175
mpreal beta(mpreal const &a, mpreal const &x)
Real Beta function; positive rational/integer pairs retain exact values.
Definition mpreal_special.hpp:164