From 047376af8c47d45c78204112a7d1b873c93822bc Mon Sep 17 00:00:00 2001 From: Vicente Olivert Riera Date: Mon, 21 Sep 2015 11:59:02 +0100 Subject: libFDK/include/mips/cplx_mul.h: use C code instead of ASM Replace the assembler code by the equivalent in C. This way it will work for every MIPS ISA. Now the check for __mips_isa_rev < 6 is no longer necessary, so remove it. Signed-off-by: Vicente Olivert Riera --- libFDK/include/mips/cplx_mul.h | 43 +++++------------------------------------- 1 file changed, 5 insertions(+), 38 deletions(-) diff --git a/libFDK/include/mips/cplx_mul.h b/libFDK/include/mips/cplx_mul.h index c933911..e921d21 100644 --- a/libFDK/include/mips/cplx_mul.h +++ b/libFDK/include/mips/cplx_mul.h @@ -89,7 +89,7 @@ amm-info@iis.fraunhofer.de ******************************************************************************/ -#if defined(__GNUC__) && defined(__mips_isa_rev) && __mips_isa_rev < 6 +#if defined(__GNUC__) && defined(__mips__) //#define FUNCTION_cplxMultDiv2_32x16 @@ -107,24 +107,8 @@ inline void cplxMultDiv2( FIXP_DBL *c_Re, FIXP_DBL b_Re, FIXP_DBL b_Im) { - INT result; - - __asm__ ("mult %[a_Re], %[b_Re];\n" - "msub %[a_Im], %[b_Im];\n" - "mfhi %[result];\n" - : [result]"=r"(result) - : [a_Re]"d"(a_Re), [b_Re]"d"(b_Re), [a_Im]"d"(a_Im), [b_Im]"d"(b_Im) - : "lo"); - - *c_Re = result; - - __asm__ ("mult %[a_Re], %[b_Im];\n" - "madd %[a_Im], %[b_Re];\n" - "mfhi %[result];\n" - : [result]"=r"(result) - : [a_Re]"r"(a_Re), [b_Im]"r"(b_Im), [a_Im]"r"(a_Im), [b_Re]"r"(b_Re) - : "lo"); - *c_Im = result; + *c_Re = (((long long)a_Re * (long long)b_Re) - ((long long)a_Im * (long long)b_Im))>>32; + *c_Im = (((long long)a_Re * (long long)b_Im) + ((long long)a_Im * (long long)b_Re))>>32; } #endif @@ -136,25 +120,8 @@ inline void cplxMult( FIXP_DBL *c_Re, FIXP_DBL b_Re, FIXP_DBL b_Im) { - INT result; - - __asm__ ("mult %[a_Re], %[b_Re];\n" - "msub %[a_Im], %[b_Im];\n" - "mfhi %[result];\n" - //"extr_w %[result], 31;\n" - : [result]"=r"(result) - : [a_Re]"r"(a_Re), [b_Re]"r"(b_Re), [a_Im]"r"(a_Im), [b_Im]"r"(b_Im) - : "lo"); - *c_Re = result<<1; - - __asm__ ("mult %[a_Re], %[b_Im];\n" - "madd %[a_Im], %[b_Re];\n" - "mfhi %[result];\n" - //"extr_w %[result], 31;\n" - : [result]"=r"(result) - : [a_Re]"r"(a_Re), [b_Im]"r"(b_Im), [a_Im]"r"(a_Im), [b_Re]"r"(b_Re) - : "lo"); - *c_Im = result<<1; + *c_Re = ((((long long)a_Re * (long long)b_Re) - ((long long)a_Im * (long long)b_Im))>>32)<<1; + *c_Im = ((((long long)a_Re * (long long)b_Im) + ((long long)a_Im * (long long)b_Re))>>32)<<1; } #endif -- cgit v1.2.3