From fe9769833fa74ea841f78c0e931130a70fc3aca9 Mon Sep 17 00:00:00 2001 From: Philipp Maier Date: Thu, 16 Mar 2017 14:50:25 +0100 Subject: 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 --- Transceiver52M/arm/convert.c | 17 ++--------------- Transceiver52M/common/convert.h | 7 +++++++ Transceiver52M/common/convert_base.c | 34 ++++++++++++++++++++++++++++++++++ Transceiver52M/x86/Makefile.am | 1 + Transceiver52M/x86/convert.c | 25 +++++-------------------- 5 files changed, 49 insertions(+), 35 deletions(-) create mode 100644 Transceiver52M/common/convert_base.c 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 + * + * 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")) { -- cgit v1.2.3