mirror of https://github.com/mstorsjo/fdk-aac.git
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:
parent
89dd198533
commit
6eb248d1a4
|
@ -103,7 +103,7 @@ amm-info@iis.fraunhofer.de
|
||||||
#if !defined(CPLX_MUL_MIPS_H)
|
#if !defined(CPLX_MUL_MIPS_H)
|
||||||
#define 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_32x16
|
||||||
//#define FUNCTION_cplxMultDiv2_32x16X2
|
//#define FUNCTION_cplxMultDiv2_32x16X2
|
||||||
|
@ -115,53 +115,16 @@ amm-info@iis.fraunhofer.de
|
||||||
#if defined(FUNCTION_cplxMultDiv2_32x32X2)
|
#if defined(FUNCTION_cplxMultDiv2_32x32X2)
|
||||||
inline void cplxMultDiv2(FIXP_DBL *c_Re, FIXP_DBL *c_Im, FIXP_DBL a_Re,
|
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) {
|
FIXP_DBL a_Im, FIXP_DBL b_Re, FIXP_DBL b_Im) {
|
||||||
INT 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;
|
||||||
__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;
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(FUNCTION_cplxMult_32x32X2)
|
#if defined(FUNCTION_cplxMult_32x32X2)
|
||||||
inline void cplxMult(FIXP_DBL *c_Re, FIXP_DBL *c_Im, FIXP_DBL a_Re,
|
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) {
|
FIXP_DBL a_Im, FIXP_DBL b_Re, FIXP_DBL b_Im) {
|
||||||
INT result;
|
*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;
|
||||||
__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;
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue