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 <Vincent.Riera@imgtec.com>
This commit is contained in:
Vicente Olivert Riera 2015-09-21 11:59:02 +01:00 committed by Martin Storsjo
parent 89dd198533
commit 6eb248d1a4
1 changed files with 5 additions and 42 deletions

View File

@ -103,7 +103,7 @@ amm-info@iis.fraunhofer.de
#if !defined(CPLX_MUL_MIPS_H)
#define CPLX_MUL_MIPS_H
#if defined(__GNUC__) && defined(__mips_isa_rev) && __mips_isa_rev < 6
#if defined(__GNUC__) && defined(__mips__)
//#define FUNCTION_cplxMultDiv2_32x16
//#define FUNCTION_cplxMultDiv2_32x16X2
@ -115,53 +115,16 @@ amm-info@iis.fraunhofer.de
#if defined(FUNCTION_cplxMultDiv2_32x32X2)
inline void cplxMultDiv2(FIXP_DBL *c_Re, FIXP_DBL *c_Im, FIXP_DBL a_Re,
FIXP_DBL a_Im, 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
#if defined(FUNCTION_cplxMult_32x32X2)
inline void cplxMult(FIXP_DBL *c_Re, FIXP_DBL *c_Im, FIXP_DBL a_Re,
FIXP_DBL a_Im, 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