[PATCH] osmo-trx[master]: cosmetic: remove code duplication

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

dexter gerrit-no-reply at lists.osmocom.org
Thu Mar 16 18:00:02 UTC 2017


Review at  https://gerrit.osmocom.org/2103

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
---
M Transceiver52M/arm/convert.c
M Transceiver52M/common/convert.h
A Transceiver52M/common/convert_base.c
M Transceiver52M/x86/Makefile.am
M Transceiver52M/x86/convert.c
5 files changed, 49 insertions(+), 35 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-trx refs/changes/03/2103/1

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 @@
 	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 @@
 	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 at 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 @@
 
 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 @@
 }
 #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")) {

-- 
To view, visit https://gerrit.osmocom.org/2103
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic8d8534a343e27cde79ddc85be4998ebd0cb6e5c
Gerrit-PatchSet: 1
Gerrit-Project: osmo-trx
Gerrit-Branch: master
Gerrit-Owner: dexter <pmaier at sysmocom.de>



More information about the gerrit-log mailing list