summaryrefslogtreecommitdiff
path: root/apps/codecs/libmusepack/math.h
diff options
context:
space:
mode:
Diffstat (limited to 'apps/codecs/libmusepack/math.h')
-rw-r--r--apps/codecs/libmusepack/math.h16
1 files changed, 16 insertions, 0 deletions
diff --git a/apps/codecs/libmusepack/math.h b/apps/codecs/libmusepack/math.h
index 3965eec353..8d1e50dda5 100644
--- a/apps/codecs/libmusepack/math.h
+++ b/apps/codecs/libmusepack/math.h
@@ -99,8 +99,24 @@ static inline MPC_SAMPLE_FORMAT MPC_MULTIPLY_EX(MPC_SAMPLE_FORMAT item1,MPC_SAMP
99#ifdef MPC_HAVE_MULHIGH 99#ifdef MPC_HAVE_MULHIGH
100#define MPC_MULTIPLY_FRACT(X,Y) _MulHigh(X,Y) 100#define MPC_MULTIPLY_FRACT(X,Y) _MulHigh(X,Y)
101#else 101#else
102#if CONFIG_CPU==MCF5249 && !defined(SIMULATOR)
103/* loses one bit of accuracy.
104 the rest of the macros won't be as easy as this... */
105#define MPC_MULTIPLY_FRACT(X,Y) \
106 ({ \
107 MPC_SAMPLE_FORMAT t; \
108 asm volatile ( \
109 "mac.l %[A], %[B], %%acc0\n\t" \
110 "movclr.l %%acc0, %[t]\n\t" \
111 "asr.l #1, %[t]\n\t" \
112 : [t] "=d" (t) \
113 : [A] "r" ((X)), [B] "r" ((Y))); \
114 t; \
115 })
116#else
102#define MPC_MULTIPLY_FRACT(X,Y) MPC_MULTIPLY_EX(X,Y,32) 117#define MPC_MULTIPLY_FRACT(X,Y) MPC_MULTIPLY_EX(X,Y,32)
103#endif 118#endif
119#endif
104 120
105#define MPC_MAKE_FRACT_CONST(X) (MPC_SAMPLE_FORMAT)((X) * (double)(((mpc_int64_t)1)<<32) ) 121#define MPC_MAKE_FRACT_CONST(X) (MPC_SAMPLE_FORMAT)((X) * (double)(((mpc_int64_t)1)<<32) )
106#define MPC_MULTIPLY_FRACT_CONST(X,Y) MPC_MULTIPLY_FRACT(X,MPC_MAKE_FRACT_CONST(Y)) 122#define MPC_MULTIPLY_FRACT_CONST(X,Y) MPC_MULTIPLY_FRACT(X,MPC_MAKE_FRACT_CONST(Y))