aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorNicholas Noll <nbnoll@eml.cc>2020-05-14 18:15:23 -0700
committerNicholas Noll <nbnoll@eml.cc>2020-05-14 18:15:23 -0700
commit463ed852261da4d1dd1b859fa717a1d683306c9d (patch)
treed832d08663dcb53f86073d4fbb1609712fe5513f /include
parentd982e7c2fdebf560ccce193cb98b85d4fac28a45 (diff)
feat: begun work on final blas level 2
Diffstat (limited to 'include')
-rw-r--r--include/libmath/blas.h79
1 files changed, 79 insertions, 0 deletions
diff --git a/include/libmath/blas.h b/include/libmath/blas.h
new file mode 100644
index 0000000..b331a8d
--- /dev/null
+++ b/include/libmath/blas.h
@@ -0,0 +1,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
+ */