aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Transceiver52M/arm/convert.c17
-rw-r--r--Transceiver52M/common/convert.h7
-rw-r--r--Transceiver52M/common/convert_base.c34
-rw-r--r--Transceiver52M/x86/Makefile.am1
-rw-r--r--Transceiver52M/x86/convert.c25
5 files changed, 49 insertions, 35 deletions
diff --git a/Transceiver52M/arm/convert.c b/Transceiver52M/arm/convert.c
index e489d22..57796ea 100644
--- a/Transceiver52M/arm/convert.c
+++ b/Transceiver52M/arm/convert.c
@@ -28,19 +28,6 @@
void neon_convert_ps_si16_4n(short *, const float *, const float *, int);
void neon_convert_si16_ps_4n(float *, const short *, int);
-#ifndef HAVE_NEON
-static void convert_si16_ps(float *out, const short *in, int len)
-{
- for (int i = 0; i < len; i++)
- out[i] = in[i];
-}
-
-static void convert_ps_si16(short *out, const float *in, float scale, int len)
-{
- for (int i = 0; i < len; i++)
- out[i] = in[i] * scale;
-}
-#else
/* 4*N 16-bit signed integer conversion with remainder */
static void neon_convert_si16_ps(float *out,
const short *in,
@@ -79,7 +66,7 @@ void convert_float_short(short *out, const float *in, float scale, int len)
else
neon_convert_ps_si16_4n(out, in, q, len >> 2);
#else
- convert_ps_si16(out, in, scale, len);
+ base_convert_float_short(out, in, scale, len);
#endif
}
@@ -91,6 +78,6 @@ void convert_short_float(float *out, const short *in, int len)
else
neon_convert_si16_ps_4n(out, in, len >> 2);
#else
- convert_si16_ps(out, in, len);
+ base_convert_short_float(out, in, len);
#endif
}
diff --git a/Transceiver52M/common/convert.h b/Transceiver52M/common/convert.h
index 1d3a180..73402b0 100644
--- a/Transceiver52M/common/convert.h
+++ b/Transceiver52M/common/convert.h
@@ -2,7 +2,14 @@
#define _CONVERT_H_
void convert_float_short(short *out, const float *in, float scale, int len);
+
void convert_short_float(float *out, const short *in, int len);
+
+void base_convert_float_short(short *out, const float *in,
+ float scale, int len);
+
+void base_convert_short_float(float *out, const short *in, int len);
+
void convert_init(void);
#endif /* _CONVERT_H_ */
diff --git a/Transceiver52M/common/convert_base.c b/Transceiver52M/common/convert_base.c
new file mode 100644
index 0000000..5251fb8
--- /dev/null
+++ b/Transceiver52M/common/convert_base.c
@@ -0,0 +1,34 @@
+/*
+ * Conversion
+ * Copyright (C) 2012, 2013 Thomas Tsou <tom@tsou.cc>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "convert.h"
+
+void base_convert_float_short(short *out, const float *in,
+ float scale, int len)
+{
+ for (int i = 0; i < len; i++)
+ out[i] = in[i] * scale;
+}
+
+void base_convert_short_float(float *out, const short *in, int len)
+{
+ for (int i = 0; i < len; i++)
+ out[i] = in[i];
+}
+
diff --git a/Transceiver52M/x86/Makefile.am b/Transceiver52M/x86/Makefile.am
index 699faad..7a0b75f 100644
--- a/Transceiver52M/x86/Makefile.am
+++ b/Transceiver52M/x86/Makefile.am
@@ -5,6 +5,7 @@ noinst_LTLIBRARIES = libarch.la
libarch_la_SOURCES = \
../common/convolve_base.c \
+ ../common/convert_base.c \
convert.c \
convolve.c
endif
diff --git a/Transceiver52M/x86/convert.c b/Transceiver52M/x86/convert.c
index db1c0fc..3f76b65 100644
--- a/Transceiver52M/x86/convert.c
+++ b/Transceiver52M/x86/convert.c
@@ -170,28 +170,13 @@ static void _sse_convert_scale_ps_si16_16n(short *restrict out,
}
#endif
-__attribute__((optimize("no-tree-vectorize")))
-static void convert_scale_ps_si16(short *out, const float *in,
- float scale, int len)
-{
- for (int i = 0; i < len; i++)
- out[i] = in[i] * scale;
-}
-
-__attribute__((optimize("no-tree-vectorize")))
-static void convert_si16_ps(float *out, const short *in, int len)
-{
- for (int i = 0; i < len; i++)
- out[i] = in[i];
-}
-
void convert_init(void)
{
- c.convert_scale_ps_si16_16n = convert_scale_ps_si16;
- c.convert_scale_ps_si16_8n = convert_scale_ps_si16;
- c.convert_scale_ps_si16 = convert_scale_ps_si16;
- c.convert_si16_ps_16n = convert_si16_ps;
- c.convert_si16_ps = convert_si16_ps;
+ c.convert_scale_ps_si16_16n = base_convert_float_short;
+ c.convert_scale_ps_si16_8n = base_convert_float_short;
+ c.convert_scale_ps_si16 = base_convert_float_short;
+ c.convert_si16_ps_16n = base_convert_short_float;
+ c.convert_si16_ps = base_convert_short_float;
#ifdef HAVE_SSE4_1
if (__builtin_cpu_supports("sse4.1")) {