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>
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 @@
 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 @@
       xP++;
     }
   }
+#endif
 }
 
 /** in-place conjugation */