diff options
Diffstat (limited to 'apps/plugins')
-rw-r--r-- | apps/plugins/pdbox/PDa/src/m_fixed.h | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/apps/plugins/pdbox/PDa/src/m_fixed.h b/apps/plugins/pdbox/PDa/src/m_fixed.h index 2a89a18b5a..d46299efe6 100644 --- a/apps/plugins/pdbox/PDa/src/m_fixed.h +++ b/apps/plugins/pdbox/PDa/src/m_fixed.h | |||
@@ -16,7 +16,8 @@ typedef int t_sample; | |||
16 | 16 | ||
17 | /* fixed point multiplication and division */ | 17 | /* fixed point multiplication and division */ |
18 | 18 | ||
19 | #if defined(ROCKBOX) && defined(CPU_ARM) | 19 | #ifdef ROCKBOX |
20 | #if defined(CPU_ARM) | ||
20 | #define mult(A,B) \ | 21 | #define mult(A,B) \ |
21 | ({ \ | 22 | ({ \ |
22 | t_fixed lo; \ | 23 | t_fixed lo; \ |
@@ -30,10 +31,28 @@ typedef int t_sample; | |||
30 | lo; \ | 31 | lo; \ |
31 | }) | 32 | }) |
32 | #define idiv(a,b) ((((long long) (a) )<<fix1)/(long long) (b) ) | 33 | #define idiv(a,b) ((((long long) (a) )<<fix1)/(long long) (b) ) |
33 | #else /* ROCKBOX && CPU_ARM */ | 34 | #elif defined(CPU_COLDFIRE) |
35 | #define mult(a,b) mult_cf((a),(b)) | ||
36 | static inline t_fixed mult_cf(t_fixed x, t_fixed y) | ||
37 | { | ||
38 | t_fixed t1, t2; | ||
39 | asm volatile ( | ||
40 | "mac.l %[x],%[y],%%acc0 \n" /* multiply */ | ||
41 | "mulu.l %[y],%[x] \n" /* get low half, avoid emac stall */ | ||
42 | "movclr.l %%acc0,%[t1] \n" /* get higher half */ | ||
43 | "asl.l %[shl],%[t1] \n" /* hi <<= 13, plus one free */ | ||
44 | "lsr.l %[shr],%[x] \n" /* (unsigned)lo >>= 18 */ | ||
45 | "or.l %[x],%[t1] \n" /* combine result */ | ||
46 | : [t1]"=&d"(t1), [t2]"=&d"(t2), [x]"+d"(x) | ||
47 | : [y]"d"(y), [shl]"d"(31-fix1), [shr]"d"(fix1)); | ||
48 | return t1; | ||
49 | } | ||
50 | #define idiv(a,b) ((((long long) (a) )<<fix1)/(long long) (b) ) | ||
51 | #endif /* CPU_... */ | ||
52 | #else /* ROCKBOX */ | ||
34 | #define mult(a,b) (long long)(((long long) (a) * (long long) (b))>>fix1) | 53 | #define mult(a,b) (long long)(((long long) (a) * (long long) (b))>>fix1) |
35 | #define idiv(a,b) ((((long long) (a) )<<fix1)/(long long) (b) ) | 54 | #define idiv(a,b) ((((long long) (a) )<<fix1)/(long long) (b) ) |
36 | #endif /* ROCKBOX && CPU_ARM */ | 55 | #endif /* ROCKBOX */ |
37 | 56 | ||
38 | /* conversion macros */ | 57 | /* conversion macros */ |
39 | 58 | ||