src/fvec.c: move alias to aubio_priv.h, add cblas copy
authorPaul Brossier <piem@piem.org>
Sat, 5 Sep 2015 19:14:47 +0000 (21:14 +0200)
committerPaul Brossier <piem@piem.org>
Sat, 5 Sep 2015 19:14:47 +0000 (21:14 +0200)
src/aubio_priv.h
src/fvec.c

index 83d3698..d5bd21f 100644 (file)
 #include <limits.h> // for CHAR_BIT, in C99 standard
 #endif
 
 #include <limits.h> // for CHAR_BIT, in C99 standard
 #endif
 
+#ifdef HAVE_ACCELERATE
+#define HAVE_ATLAS 1
+#include <Accelerate/Accelerate.h>
+#elif HAVE_ATLAS_CBLAS_H
+#define HAVE_ATLAS 1
+#include <atlas/cblas.h>
+#else
+#undef HAVE_ATLAS
+#endif
+
+#ifdef HAVE_ACCELERATE
+#include <Accelerate/Accelerate.h>
+#define aubio_vDSP_mmov       vDSP_mmov
+#define aubio_vDSP_vmul       vDSP_vmul
+#define aubio_vDSP_vfill      vDSP_vfill
+#else /* HAVE_AUBIO_DOUBLE */
+#define aubio_vDSP_mmov       vDSP_mmovD
+#define aubio_vDSP_vmul       vDSP_vmulD
+#define aubio_vDSP_vfill      vDSP_vfillD
+#endif /* HAVE_AUBIO_DOUBLE */
+#endif
+
+#ifdef HAVE_ATLAS
+#if !HAVE_AUBIO_DOUBLE
+#define aubio_catlas_set      catlas_sset
+#define aubio_cblas_copy      cblas_scopy
+#else /* HAVE_AUBIO_DOUBLE */
+#define aubio_catlas_set      catlas_dset
+#define aubio_cblas_copy      cblas_dcopy
+#endif /* HAVE_AUBIO_DOUBLE */
+
+#if !defined(HAVE_MEMCPY_HACKS) && !defined(HAVE_ACCELERATE) && !defined(HAVE_ATLAS)
+#define HAVE_NOOPT 1
+#else
+#undef HAVE_NOOPT
+#endif
+
 #include "types.h"
 
 #define AUBIO_UNSTABLE 1
 #include "types.h"
 
 #define AUBIO_UNSTABLE 1
index abdf3d1..25772c9 100644 (file)
 #include "aubio_priv.h"
 #include "fvec.h"
 
 #include "aubio_priv.h"
 #include "fvec.h"
 
-#ifdef HAVE_ACCELERATE
-#include <Accelerate/Accelerate.h>
-#if !HAVE_AUBIO_DOUBLE
-#define aubio_vDSP_mmov       vDSP_mmov
-#define aubio_vDSP_vmul       vDSP_vmul
-#define aubio_vDSP_vfill      vDSP_vfill
-#else /* HAVE_AUBIO_DOUBLE */
-#define aubio_vDSP_mmov       vDSP_mmovD
-#define aubio_vDSP_vmul       vDSP_vmulD
-#define aubio_vDSP_vfill      vDSP_vfillD
-#endif /* HAVE_AUBIO_DOUBLE */
-#endif
-
 fvec_t * new_fvec( uint_t length) {
   fvec_t * s;
   if ((sint_t)length <= 0) {
 fvec_t * new_fvec( uint_t length) {
   fvec_t * s;
   if ((sint_t)length <= 0) {
@@ -73,12 +60,14 @@ void fvec_print(fvec_t *s) {
 }
 
 void fvec_set_all (fvec_t *s, smpl_t val) {
 }
 
 void fvec_set_all (fvec_t *s, smpl_t val) {
-#ifndef HAVE_ACCELERATE
+#if !defined(HAVE_ACCELERATE) && !defined(HAVE_ATLAS)
   uint_t j;
   for (j=0; j< s->length; j++) {
     s->data[j] = val;
   }
   uint_t j;
   for (j=0; j< s->length; j++) {
     s->data[j] = val;
   }
-#else
+#elif defined(HAVE_ATLAS)
+  aubio_catlas_set(s->length, val, s->data, 1);
+#elif defined(HAVE_ACCELERATE)
   aubio_vDSP_vfill(&val, s->data, 1, s->length);
 #endif
 }
   aubio_vDSP_vfill(&val, s->data, 1, s->length);
 #endif
 }
@@ -124,16 +113,16 @@ void fvec_copy(fvec_t *s, fvec_t *t) {
         s->length, t->length);
     return;
   }
         s->length, t->length);
     return;
   }
-#if !defined(HAVE_MEMCPY_HACKS) && !defined(HAVE_ACCELERATE)
+#if HAVE_NOOPT
   uint_t j;
   for (j=0; j< t->length; j++) {
     t->data[j] = s->data[j];
   }
   uint_t j;
   for (j=0; j< t->length; j++) {
     t->data[j] = s->data[j];
   }
-#else
-#if defined(HAVE_MEMCPY_HACKS)
+#elif defined(HAVE_MEMCPY_HACKS)
   memcpy(t->data, s->data, t->length * sizeof(smpl_t));
   memcpy(t->data, s->data, t->length * sizeof(smpl_t));
-#else
+#elif defined(HAVE_ATLAS)
+  aubio_cblas_copy(s->length, s->data, 1, t->data, 1);
+#elif defined(HAVE_ACCELERATE)
   aubio_vDSP_mmov(s->data, t->data, 1, s->length, 1, 1);
 #endif
   aubio_vDSP_mmov(s->data, t->data, 1, s->length, 1, 1);
 #endif
-#endif
 }
 }