From 44e9eeb55c9d5ef65d32abe73ab0d1a6dfb2817e Mon Sep 17 00:00:00 2001 From: Paul Brossier Date: Sat, 5 Sep 2015 21:14:47 +0200 Subject: [PATCH] src/fvec.c: move alias to aubio_priv.h, add cblas copy --- src/aubio_priv.h | 37 +++++++++++++++++++++++++++++++++++++ src/fvec.c | 29 +++++++++-------------------- 2 files changed, 46 insertions(+), 20 deletions(-) diff --git a/src/aubio_priv.h b/src/aubio_priv.h index 83d36989..d5bd21f1 100644 --- a/src/aubio_priv.h +++ b/src/aubio_priv.h @@ -64,6 +64,43 @@ #include // for CHAR_BIT, in C99 standard #endif +#ifdef HAVE_ACCELERATE +#define HAVE_ATLAS 1 +#include +#elif HAVE_ATLAS_CBLAS_H +#define HAVE_ATLAS 1 +#include +#else +#undef HAVE_ATLAS +#endif + +#ifdef HAVE_ACCELERATE +#include +#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 diff --git a/src/fvec.c b/src/fvec.c index abdf3d1b..25772c9b 100644 --- a/src/fvec.c +++ b/src/fvec.c @@ -21,19 +21,6 @@ #include "aubio_priv.h" #include "fvec.h" -#ifdef HAVE_ACCELERATE -#include -#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) { @@ -73,12 +60,14 @@ void fvec_print(fvec_t *s) { } 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; } -#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 } @@ -124,16 +113,16 @@ void fvec_copy(fvec_t *s, fvec_t *t) { 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]; } -#else -#if defined(HAVE_MEMCPY_HACKS) +#elif defined(HAVE_MEMCPY_HACKS) 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 -#endif } -- 2.11.0