diff options
Diffstat (limited to 'lib/rbcodec')
-rw-r--r-- | lib/rbcodec/codecs/libopus/celt/_kiss_fft_guts.h | 22 |
1 files changed, 22 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 6e806bbc23..b1fe8fbeb7 100644 --- a/lib/rbcodec/codecs/libopus/celt/_kiss_fft_guts.h +++ b/lib/rbcodec/codecs/libopus/celt/_kiss_fft_guts.h | |||
@@ -80,6 +80,28 @@ | |||
80 | : [ap] "a" (&(a)), [bp] "a" (&(b)) \ | 80 | : [ap] "a" (&(a)), [bp] "a" (&(b)) \ |
81 | : "d0", "d1", "d2", "d3", "cc"); \ | 81 | : "d0", "d1", "d2", "d3", "cc"); \ |
82 | } | 82 | } |
83 | #elif defined(CPU_ARM) | ||
84 | # define C_MULC(m,a,b) \ | ||
85 | { \ | ||
86 | asm volatile( \ | ||
87 | "ldmia %[ap], {r0,r1} \n\t" \ | ||
88 | "ldrsh r2, [%[bp], #0] \n\t" \ | ||
89 | "ldrsh r3, [%[bp], #2] \n\t" \ | ||
90 | \ | ||
91 | "smull r4, %[mr], r0, r2 \n\t" \ | ||
92 | "smlal r4, %[mr], r1, r3 \n\t" \ | ||
93 | "mov r4, r4, lsr #15 \n\t" \ | ||
94 | "orr %[mr], r4, %[mr], lsl #17 \n\t" \ | ||
95 | \ | ||
96 | "smull r4, %[mi], r1, r2 \n\t" \ | ||
97 | "rsb r3, r3, #0 \n\t" \ | ||
98 | "smlal r4, %[mi], r0, r3 \n\t" \ | ||
99 | "mov r4, r4, lsr #15 \n\t" \ | ||
100 | "orr %[mi], r4, %[mi], lsl #17 \n\t" \ | ||
101 | : [mr] "=r" ((m).r), [mi] "=r" ((m).i) \ | ||
102 | : [ap] "r" (&(a)), [bp] "r" (&(b)) \ | ||
103 | : "r0", "r1", "r2", "r3", "r4"); \ | ||
104 | } | ||
83 | #else | 105 | #else |
84 | # define C_MULC(m,a,b) \ | 106 | # define C_MULC(m,a,b) \ |
85 | do{ (m).r = ADD32(S_MUL((a).r,(b).r) , S_MUL((a).i,(b).i)); \ | 107 | do{ (m).r = ADD32(S_MUL((a).r,(b).r) , S_MUL((a).i,(b).i)); \ |