aboutsummaryrefslogtreecommitdiff
path: root/include/libmath/blas.h
blob: b8930a87da97c41f3ff3c2efe2e4f32fac3e422d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#pragma once

// TODO: think of better names
enum
{
    blas·LowerTri      = 1u,
    blas·Transpose     = 2u,
    blas·ConjTranspose = 4u,
    blas·DiagOnes      = 8u,
    blas·LeftSide      = 16u,
};

/* 
 * Floats
 */

// level 1
void   blas·frot(int len, float *x, int incx, float *y, int incy, float cos, float sin);
void   blas·frotg(float *a, float *b, float *cos, float *sin);
error  blas·frotm(int len, float *x, int incx, float *y, int incy, float p[5]);
void   blas·fscale(int len, float a, float *x, int inc);
void   blas·fcopy(int len, float *x, int incx, float *y, int incy);
void   blas·fswap(int len, float *x, int incx, float *y, int incy);
void   blas·faxpy(int len, float a, float *x, int incx, float *y, int incy);
float  blas·fdot(int len, float *x, int incx, float *y, int incy);
float  blas·fnorm(int len, float *x, int inc);
float  blas·fasum(int len, float *x, int inc);
int    blas·fargmax(int len, float *x, int inc);
int    blas·fargmin(int len, float *x, int inc);

// level 2
error  blas·fgemv(uint f, int nrow, int ncol, float a, float *m, int incm, float *x, int incx, float b, float *y, int incy);
void   blas·fsymv(uint f, int n, float a, float* m, int incm, float *x, int incx, float b, float *y, int incy);
void   blas·fspmv(uint f, int n, float a, float* m, float *x, int incx, float b, float *y, int incm);
void   blas·ftrmv(uint f, int n, float* m, int incm, float *x, int incx);
void   blas·ftpmv(uint f, int n, float *m, float *x, int incx);
void   blas·ftrsv(uint f, int n, float *m, int incm, float *x, int incx);
void   blas·ftpsv(uint f, int n, float *m, float *x, int incx);
void   blas·fger(int nrow, int ncol, float a, float *x, int incx, float *y, int incy, float *m, int incm);
void   blas·fsyr(uint f, int n, float a, float *x, int incx, float *m, int incm);
void   blas·fspr(uint f, int n, float a, float *x, int incx, float *m);

// level 3
void   blas·fgemm(uint tr1, uint tr2, int n1, int n2, int n3, float a, float *m1, int inc1, float *m2, int inc2, float b, float *m3, int inc3);
void   blas·ftrmm(uint f, int nrow, int ncol, float a, float *m1, float *m2);
void   blas·ftrsm(uint f, int nrow, int ncol, float a, float *m1, float *m2);

/* 
 * Doubles 
 */

// level 1
void   blas·drot(int len, double *x, int incx, double *y, int incy, double cos, double sin);
void   blas·drotg(double *a, double *b, double *cos, double *sin);
error  blas·drotm(int len, double *x, int incx, double *y, int incy, double p[5]);
void   blas·dscale(int len, double a, double *x, int inc);
void   blas·dcopy(int len, double *x, int incx, double *y, int incy);
void   blas·dswap(int len, double *x, int incx, double *y, int incy);
void   blas·daxpy(int len, double a, double *x, int incx, double *y, int incy);
double blas·ddot(int len, double *x, int incx, double *y, int incy);
double blas·dnorm(int len, double *x, int inc);
double blas·dasum(int len, double *x, int inc);
int    blas·dargmax(int len, double *x, int inc);
int    blas·dargmin(int len, double *x, int inc);

// level 2
error  blas·dgemv(uint f, int nrow, int ncol, double a, double *m, int incm, double *x, int incx, double b, double *y, int incy);
void   blas·dsymv(uint f, int n, double a, double* m, int incm, double *x, int incx, double b, double *y, int incy);
void   blas·dspmv(uint f, int n, double a, double* m, double *x, int incx, double b, double *y, int incy);
void   blas·dtrmv(uint f, int n, double *m, int incm, double *x, int incx);
void   blas·dtpmv(uint f, int n, double *m, double *x, int incx);
void   blas·dtrsv(uint f, int n, double *m, int incm, double *x, int incx);
void   blas·dtpsv(uint f, int n, double *m, double *x, int incx);
void   blas·dger(int nrow, int ncol, double a, double *x, int incx, double *y, int incy, double *m, int incm);
void   blas·dsyr(uint flag, int n, double a, double *x, int incx, double *m, int incm);
void   blas·dspr(uint flag, int n, double a, double *x, int incx, double *m);

// level 3
void   blas·dgemm(uint tr1, uint tr2, int n1, int n2, int n3, double a, double *m1, int inc1, double *m2, int inc2, double b, double *m3, int inc3);
void   blas·dtrmm(uint f, int nrow, int ncol, double a, double *m1, double *m2);
void   blas·dtrsm(uint f, int nrow, int ncol, double a, double *m1, double *m2);

/* 
 * TODO: Complex
 */