summaryrefslogtreecommitdiffstats
path: root/libFDK/include/arm/cplx_mul.h
diff options
context:
space:
mode:
Diffstat (limited to 'libFDK/include/arm/cplx_mul.h')
-rw-r--r--libFDK/include/arm/cplx_mul.h19
1 files changed, 16 insertions, 3 deletions
diff --git a/libFDK/include/arm/cplx_mul.h b/libFDK/include/arm/cplx_mul.h
index 2416f98..5d11e3d 100644
--- a/libFDK/include/arm/cplx_mul.h
+++ b/libFDK/include/arm/cplx_mul.h
@@ -97,6 +97,15 @@ amm-info@iis.fraunhofer.de
//#define FUNCTION_cplxMult_32x16X2
#endif
+#if defined(__thumb__) && !defined(__thumb2__)
+# define __SWITCH_TO_ARM \
+ ".align\n" \
+ ".arm\n"
+
+#else
+# define __SWITCH_TO_ARM /* nothing */
+#endif
+
#define FUNCTION_cplxMultDiv2_32x32X2
//#define FUNCTION_cplxMult_32x32X2
@@ -110,7 +119,8 @@ inline void cplxMultDiv2( FIXP_DBL *c_Re,
LONG tmp1,tmp2;
const LONG w = wpk.w;
- asm("smulwt %0, %3, %4;\n"
+ asm(__SWITCH_TO_ARM
+ "smulwt %0, %3, %4;\n"
"rsb %1,%0,#0;\n"
"smlawb %0, %2, %4, %1;\n"
"smulwt %1, %2, %4;\n"
@@ -134,7 +144,8 @@ inline void cplxMultDiv2( FIXP_DBL *c_Re,
{
LONG tmp1, tmp2;
- asm("smulwb %0, %3, %5;\n" /* %7 = -a_Im * b_Im */
+ asm(__SWITCH_TO_ARM
+ "smulwb %0, %3, %5;\n" /* %7 = -a_Im * b_Im */
"rsb %1,%0,#0;\n"
"smlawb %0, %2, %4, %1;\n" /* tmp1 = a_Re * b_Re - a_Im * b_Im */
"smulwb %1, %2, %5;\n" /* %7 = a_Re * b_Im */
@@ -158,7 +169,8 @@ inline void cplxMultAddDiv2( FIXP_DBL *c_Re,
{
LONG tmp1, tmp2;
- asm("smulwb %0, %3, %5;\n"
+ asm(__SWITCH_TO_ARM
+ "smulwb %0, %3, %5;\n"
"rsb %1,%0,#0;\n"
"smlawb %0, %2, %4, %1;\n"
"smulwb %1, %2, %5;\n"
@@ -185,6 +197,7 @@ inline void cplxMultDiv2( FIXP_DBL *c_Re,
#ifdef __ARM_ARCH_6__
asm(
+ __SWITCH_TO_ARM
"smmul %0, %2, %4;\n" /* tmp1 = a_Re * b_Re */
"smmls %0, %3, %5, %0;\n" /* tmp1 -= a_Im * b_Im */
"smmul %1, %2, %5;\n" /* tmp2 = a_Re * b_Im */