diff options
author | Thomas Tsou <tom@tsou.cc> | 2013-10-30 21:18:55 -0400 |
---|---|---|
committer | Thomas Tsou <tom@tsou.cc> | 2013-11-15 23:32:35 -0500 |
commit | 7e4e536b1bfc9b20df6b30d427de29e3cc5bf5cf (patch) | |
tree | 31b73f9d77cc616c57cd9cc61ca9d608533205e9 /Transceiver52M/sigProcLib.cpp | |
parent | 204a9f135ac2408dd62b55462ebe4b2d10be4f56 (diff) |
Transceiver52M: Add ARM NEON support
Similar to the existing Intel SSE cases, add support for NEON vector
floating point SIMD processing. In this case, use ARM assembly
directly as the NEON intrinsics do not generate preferential code
output.
Currently support NEON vectorized convolution and floating point
integer conversions.
Signed-off-by: Thomas Tsou <tom@tsou.cc>
Diffstat (limited to 'Transceiver52M/sigProcLib.cpp')
-rw-r--r-- | Transceiver52M/sigProcLib.cpp | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/Transceiver52M/sigProcLib.cpp b/Transceiver52M/sigProcLib.cpp index 595efa3..5a1ab77 100644 --- a/Transceiver52M/sigProcLib.cpp +++ b/Transceiver52M/sigProcLib.cpp @@ -22,15 +22,20 @@ */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + #include "sigProcLib.h" #include "GSMCommon.h" -using namespace GSM; - extern "C" { #include "convolve.h" +#include "scale.h" } +using namespace GSM; + #define TABLESIZE 1024 /** Lookup tables for trigonometric approximation */ @@ -958,6 +963,13 @@ complex peakDetect(const signalVector &rxBurst, void scaleVector(signalVector &x, complex scale) { +#ifdef HAVE_NEON + int len = x.size(); + + scale_complex((float *) x.begin(), + (float *) x.begin(), + (float *) &scale, len); +#else signalVector::iterator xP = x.begin(); signalVector::iterator xPEnd = x.end(); if (!x.isRealOnly()) { @@ -972,6 +984,7 @@ void scaleVector(signalVector &x, xP++; } } +#endif } /** in-place conjugation */ |