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
2585f10da2
commit
047376af8c
@ -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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user