diff options
Diffstat (limited to 'lib/rbcodec')
-rw-r--r-- | lib/rbcodec/codecs/libopus/celt/_kiss_fft_guts.h | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/lib/rbcodec/codecs/libopus/celt/_kiss_fft_guts.h b/lib/rbcodec/codecs/libopus/celt/_kiss_fft_guts.h index 33e62c6b3d..6e806bbc23 100644 --- a/lib/rbcodec/codecs/libopus/celt/_kiss_fft_guts.h +++ b/lib/rbcodec/codecs/libopus/celt/_kiss_fft_guts.h | |||
@@ -61,9 +61,30 @@ | |||
61 | do{ (m).r = SUB32(S_MUL((a).r,(b).r) , S_MUL((a).i,(b).i)); \ | 61 | do{ (m).r = SUB32(S_MUL((a).r,(b).r) , S_MUL((a).i,(b).i)); \ |
62 | (m).i = ADD32(S_MUL((a).r,(b).i) , S_MUL((a).i,(b).r)); }while(0) | 62 | (m).i = ADD32(S_MUL((a).r,(b).i) , S_MUL((a).i,(b).r)); }while(0) |
63 | 63 | ||
64 | #if defined (CPU_COLDFIRE) | ||
65 | # define C_MULC(m,a,b) \ | ||
66 | { \ | ||
67 | asm volatile("move.l (%[bp]), %%d2;" \ | ||
68 | "clr.l %%d3;" \ | ||
69 | "move.w %%d2, %%d3;" \ | ||
70 | "swap %%d3;" \ | ||
71 | "clr.w %%d2;" \ | ||
72 | "movem.l (%[ap]), %%d0-%%d1;" \ | ||
73 | "mac.l %%d0, %%d2, %%acc0;" \ | ||
74 | "mac.l %%d1, %%d3, %%acc0;" \ | ||
75 | "mac.l %%d1, %%d2, %%acc1;" \ | ||
76 | "msac.l %%d0, %%d3, %%acc1;" \ | ||
77 | "movclr.l %%acc0, %[mr];" \ | ||
78 | "movclr.l %%acc1, %[mi];" \ | ||
79 | : [mr] "=r" ((m).r), [mi] "=r" ((m).i) \ | ||
80 | : [ap] "a" (&(a)), [bp] "a" (&(b)) \ | ||
81 | : "d0", "d1", "d2", "d3", "cc"); \ | ||
82 | } | ||
83 | #else | ||
64 | # define C_MULC(m,a,b) \ | 84 | # define C_MULC(m,a,b) \ |
65 | do{ (m).r = ADD32(S_MUL((a).r,(b).r) , S_MUL((a).i,(b).i)); \ | 85 | do{ (m).r = ADD32(S_MUL((a).r,(b).r) , S_MUL((a).i,(b).i)); \ |
66 | (m).i = SUB32(S_MUL((a).i,(b).r) , S_MUL((a).r,(b).i)); }while(0) | 86 | (m).i = SUB32(S_MUL((a).i,(b).r) , S_MUL((a).r,(b).i)); }while(0) |
87 | #endif | ||
67 | 88 | ||
68 | # define C_MUL4(m,a,b) \ | 89 | # define C_MUL4(m,a,b) \ |
69 | do{ (m).r = SHR32(SUB32(S_MUL((a).r,(b).r) , S_MUL((a).i,(b).i)),2); \ | 90 | do{ (m).r = SHR32(SUB32(S_MUL((a).r,(b).r) , S_MUL((a).i,(b).i)),2); \ |