aboutsummaryrefslogtreecommitdiffstats
path: root/Transceiver52M
diff options
context:
space:
mode:
authorPhilipp Maier <pmaier@sysmocom.de>2017-03-16 14:50:25 +0100
committerTom Tsou <tom@tsou.cc>2017-05-19 17:16:37 +0000
commitfe9769833fa74ea841f78c0e931130a70fc3aca9 (patch)
tree5145cf70925bec2f634551ee0d7b1c8134078c4a /Transceiver52M
parent7e07cf23464532ca156fe4ea4430928da2cbbff1 (diff)
cosmetic: remove code duplication
The ARM and the X86 implementation of the conversion functions share the same, non cpu specific implementation in separate files. This commit removes the code duplication by putting the generic implementation into a convert_base.c, similar to to convolve_base.c Change-Id: Ic8d8534a343e27cde79ddc85be4998ebd0cb6e5c
Diffstat (limited to 'Transceiver52M')
-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")) {