[MERGED] 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/.

Tom Tsou gerrit-no-reply at lists.osmocom.org
Fri May 19 17:17:16 UTC 2017


Tom Tsou has submitted this change and it was merged.

Change subject: cosmetic: remove code duplication
......................................................................


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(-)

Approvals:
  Tom Tsou: Looks good to me, approved
  Max: Looks good to me, but someone else must approve
  Harald Welte: Looks good to me, but someone else must approve
  Jenkins Builder: Verified



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: merged
Gerrit-Change-Id: Ic8d8534a343e27cde79ddc85be4998ebd0cb6e5c
Gerrit-PatchSet: 5
Gerrit-Project: osmo-trx
Gerrit-Branch: master
Gerrit-Owner: dexter <pmaier at sysmocom.de>
Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: Max <msuraev at sysmocom.de>
Gerrit-Reviewer: Tom Tsou <tom at tsou.cc>



More information about the gerrit-log mailing list