summaryrefslogtreecommitdiff
path: root/packages/base/src/Internal/C/lapack-aux.c
diff options
context:
space:
mode:
Diffstat (limited to 'packages/base/src/Internal/C/lapack-aux.c')
-rw-r--r--packages/base/src/Internal/C/lapack-aux.c87
1 files changed, 87 insertions, 0 deletions
diff --git a/packages/base/src/Internal/C/lapack-aux.c b/packages/base/src/Internal/C/lapack-aux.c
index dcce1c5..e42889d 100644
--- a/packages/base/src/Internal/C/lapack-aux.c
+++ b/packages/base/src/Internal/C/lapack-aux.c
@@ -4,6 +4,12 @@
4#include <math.h> 4#include <math.h>
5#include <time.h> 5#include <time.h>
6#include <inttypes.h> 6#include <inttypes.h>
7#include <complex.h>
8
9typedef double complex TCD;
10typedef float complex TCF;
11
12#undef complex
7 13
8#include "lapack-aux.h" 14#include "lapack-aux.h"
9 15
@@ -46,6 +52,10 @@
46#define NODEFPOS 2006 52#define NODEFPOS 2006
47#define NOSPRTD 2007 53#define NOSPRTD 2007
48 54
55inline int mod (int a, int b);
56
57inline int64_t mod_l (int64_t a, int64_t b);
58
49//--------------------------------------- 59//---------------------------------------
50void asm_finit() { 60void asm_finit() {
51#ifdef i386 61#ifdef i386
@@ -1310,6 +1320,83 @@ int multiplyQ(int ta, int tb, KQMAT(a),KQMAT(b),QMAT(r)) {
1310int multiplyI(int m, KOIMAT(a), KOIMAT(b), OIMAT(r)) MULT_IMP 1320int multiplyI(int m, KOIMAT(a), KOIMAT(b), OIMAT(r)) MULT_IMP
1311int multiplyL(int64_t m, KOLMAT(a), KOLMAT(b), OLMAT(r)) MULT_IMP 1321int multiplyL(int64_t m, KOLMAT(a), KOLMAT(b), OLMAT(r)) MULT_IMP
1312 1322
1323/////////////////////////////// inplace row ops ////////////////////////////////
1324
1325#define AXPY_IMP { \
1326 int j; \
1327 for(j=j1; j<=j2; j++) { \
1328 AT(r,i2,j) += a*AT(r,i1,j); \
1329 } OK }
1330
1331#define AXPY_MOD_IMP(M) { \
1332 int j; \
1333 for(j=j1; j<=j2; j++) { \
1334 AT(r,i2,j) = M(AT(r,i2,j) + M(a*AT(r,i1,j), m) , m); \
1335 } OK }
1336
1337
1338#define SCAL_IMP { \
1339 int i,j; \
1340 for(i=i1; i<=i2; i++) { \
1341 for(j=j1; j<=j2; j++) { \
1342 AT(r,i,j) = a*AT(r,i,j); \
1343 } \
1344 } OK }
1345
1346#define SCAL_MOD_IMP(M) { \
1347 int i,j; \
1348 for(i=i1; i<=i2; i++) { \
1349 for(j=j1; j<=j2; j++) { \
1350 AT(r,i,j) = M(a*AT(r,i,j) , m); \
1351 } \
1352 } OK }
1353
1354
1355#define SWAP_IMP(T) { \
1356 T aux; \
1357 int k; \
1358 if (i1 != i2) { \
1359 for (k=j1; k<=j2; k++) { \
1360 aux = AT(r,i1,k); \
1361 AT(r,i1,k) = AT(r,i2,k); \
1362 AT(r,i2,k) = aux; \
1363 } \
1364 } OK }
1365
1366
1367#define ROWOP_IMP(T) { \
1368 T a = *pa; \
1369 switch(code) { \
1370 case 0: AXPY_IMP \
1371 case 1: SCAL_IMP \
1372 case 2: SWAP_IMP(T) \
1373 default: ERROR(BAD_CODE); \
1374 } \
1375}
1376
1377#define ROWOP_MOD_IMP(T,M) { \
1378 T a = *pa; \
1379 switch(code) { \
1380 case 0: AXPY_MOD_IMP(M) \
1381 case 1: SCAL_MOD_IMP(M) \
1382 case 2: SWAP_IMP(T) \
1383 default: ERROR(BAD_CODE); \
1384 } \
1385}
1386
1387
1388#define ROWOP(T) int rowop_##T(int code, T* pa, int i1, int i2, int j1, int j2, MATG(T,r)) ROWOP_IMP(T)
1389
1390#define ROWOP_MOD(T,M) int rowop_mod_##T(T m, int code, T* pa, int i1, int i2, int j1, int j2, MATG(T,r)) ROWOP_MOD_IMP(T,M)
1391
1392ROWOP(double)
1393ROWOP(float)
1394ROWOP(TCD)
1395ROWOP(TCF)
1396ROWOP(int32_t)
1397ROWOP(int64_t)
1398ROWOP_MOD(int32_t,mod)
1399ROWOP_MOD(int64_t,mod_l)
1313 1400
1314////////////////// sparse matrix-product /////////////////////////////////////// 1401////////////////// sparse matrix-product ///////////////////////////////////////
1315 1402