aboutsummaryrefslogtreecommitdiffstats
path: root/Transceiver52M/sigProcLib.cpp
diff options
context:
space:
mode:
authorThomas Tsou <tom@tsou.cc>2013-10-30 21:18:55 -0400
committerThomas Tsou <tom@tsou.cc>2013-11-15 23:32:35 -0500
commit7e4e536b1bfc9b20df6b30d427de29e3cc5bf5cf (patch)
tree31b73f9d77cc616c57cd9cc61ca9d608533205e9 /Transceiver52M/sigProcLib.cpp
parent204a9f135ac2408dd62b55462ebe4b2d10be4f56 (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.cpp17
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 */