aboutsummaryrefslogtreecommitdiff
path: root/include/libmath/blas.h
blob: b331a8d47a348998a77e39feb96bc2128919ce6a (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
#pragma once

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

typedef uint32 blas·Flag;

/* 
 * Floats
 */

// level 1
void   blas·rotf(int len, float *x, int incx, float *y, int incy, float cos, float sin);
void   blas·rotgf(float *a, float *b, float *cos, float *sin);
error  blas·rotmf(int len, float *x, int incx, float *y, int incy, float p[5]);
void   blas·scalef(int len, float a, float *x, int inc);
void   blas·copyf(int len, float *x, int incx, float *y, int incy);
void   blas·swapf(int len, float *x, int incx, float *y, int incy);
void   blas·axpyf(int len, float a, float *x, int incx, float *y, int incy);
float  blas·dotf(int len, float *x, int incx, float *y, int incy);
float  blas·normf(int len, float *x, int inc);
float  blas·sumf(int len, float *x, int inc);
int    blas·argmaxf(int len, float *x, int inc);
int    blas·argminf(int len, float *x, int inc);

// level 2
void   blas·tpmvf(blas·Flag f, int n, float *m, float *x);
error  blas·gemvf(int nrow, int ncol, float a, float *m, int incm, float *x, int incx, float b, float *y, int incy) ;
void   blas·tpsvf(blas·Flag f, int n, float *m, float *x);
void   blas·gerf(int nrow, int ncol, float a, float *x, int incx, float *y, int incy, float *m, int incm);
void   blas·herf(int n, float a, float *x, float *m);
void   blas·syrf(int nrow, int ncol, float a, float *x, float *m);

// level 3
void   blas·gemmf(int n1, int n2, int n3, float a, float *m1, float *m2, float b, float *m3);
void   blas·trmmf(blas·Flag f, int nrow, int ncol, float a, float *m1, float *m2);
void   blas·trsmf(blas·Flag f, int nrow, int ncol, float a, float *m1, float *m2);

/* 
 * Doubles 
 */

// level 1
void   blas·rotd(int len, double *x, int incx, double *y, int incy, double cos, double sin);
void   blas·rotgd(double *a, double *b, double *cos, double *sin);
error  blas·rotmd(int len, double *x, int incx, double *y, int incy, double p[5]);
void   blas·scaled(int len, double a, double *x, int inc);
void   blas·copyd(int len, double *x, int incx, double *y, int incy);
void   blas·swapd(int len, double *x, int incx, double *y, int incy);
void   blas·axpyd(int len, double a, double *x, int incx, double *y, int incy);
double blas·dotd(int len, double *x, int incx, double *y, int incy);
double blas·normd(int len, double *x, int inc);
double blas·sumd(int len, double *x, int inc);
int    blas·argmaxd(int len, double *x, int inc);
int    blas·argmind(int len, double *x, int inc);

// level 2
void   blas·tpmvd(blas·Flag f, int n, double *m, double *x);
error  blas·gemvd(int nrow, int ncol, double a, double *m, int incm, double *x, int incx, double b, double *y, int incy) ;
void   blas·tpsvd(blas·Flag f, int n, double *m, double *x);
void   blas·gerd(int nrow, int ncol, double a, double *x, int incx, double *y, int incy, double *m, int incm);
void   blas·herd(int n, double a, double *x, double *m);
void   blas·syrd(int nrow, int ncol, double a, double *x, double *m);

// level 3
void   blas·gemmd(int n1, int n2, int n3, double a, double *m1, double *m2, double b, double *m3);
void   blas·trmmd(blas·Flag f, int nrow, int ncol, double a, double *m1, double *m2);
void   blas·trsmd(blas·Flag f, int nrow, int ncol, double a, double *m1, double *m2);

/* 
 * TODO: Complex
 */