diff options
Diffstat (limited to 'apps/codecs/libmad/synth_full_arm.S')
-rw-r--r-- | apps/codecs/libmad/synth_full_arm.S | 343 |
1 files changed, 343 insertions, 0 deletions
diff --git a/apps/codecs/libmad/synth_full_arm.S b/apps/codecs/libmad/synth_full_arm.S new file mode 100644 index 0000000000..b880a7b3c6 --- /dev/null +++ b/apps/codecs/libmad/synth_full_arm.S | |||
@@ -0,0 +1,343 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2007 by Tomasz Malesinski | ||
11 | * | ||
12 | * All files in this archive are subject to the GNU General Public License. | ||
13 | * See the file COPYING in the source tree root for full license agreement. | ||
14 | * | ||
15 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
16 | * KIND, either express or implied. | ||
17 | * | ||
18 | ****************************************************************************/ | ||
19 | |||
20 | #include "config.h" | ||
21 | |||
22 | /* This performs slower in IRAM on PP502x and there is no space in | ||
23 | mpegplayer on the PP5002 */ | ||
24 | #if defined(CPU_PP502x) || (CONFIG_CPU == PP5002 && defined(MPEGPLAYER)) | ||
25 | .section .text,"ax",%progbits | ||
26 | #else | ||
27 | .section .icode,"ax",%progbits | ||
28 | #endif | ||
29 | |||
30 | .global synth_full1 | ||
31 | .global synth_full2 | ||
32 | |||
33 | ;; r0 = pcm | ||
34 | ;; r1 = fo | ||
35 | ;; r2 = fe | ||
36 | ;; r3 = D0ptr | ||
37 | ;; r4 = D1ptr | ||
38 | synth_full1: | ||
39 | stmdb sp!, {r4, r5, r6, r7, r8, r9, r10, r11, r12, lr} | ||
40 | ldr r4, [sp, #40] | ||
41 | ldr r5, =synth_full_sp | ||
42 | str sp, [r5] | ||
43 | mov r5, #15 | ||
44 | add r2, r2, #32 | ||
45 | .l: | ||
46 | add r3, r3, #128 | ||
47 | add r4, r4, #128 | ||
48 | ldmia r1!, {r10, r11, r12, lr} | ||
49 | ldr r7, [r3, #4] | ||
50 | smull r6, r7, r10, r7 | ||
51 | ldr r9, [r4, #120] | ||
52 | smull r8, r9, r10, r9 | ||
53 | |||
54 | ldr r10, [r3, #60] | ||
55 | smlal r6, r7, r11, r10 | ||
56 | ldr r10, [r3, #52] | ||
57 | smlal r6, r7, r12, r10 | ||
58 | ldr r10, [r3, #44] | ||
59 | smlal r6, r7, lr, r10 | ||
60 | |||
61 | ldr r10, [r4, #64] | ||
62 | smlal r8, r9, r11, r10 | ||
63 | ldr r10, [r4, #72] | ||
64 | smlal r8, r9, r12, r10 | ||
65 | ldr r10, [r4, #80] | ||
66 | smlal r8, r9, lr, r10 | ||
67 | |||
68 | ldmia r1!, {r11, r12, sp, lr} | ||
69 | ldr r10, [r3, #36] | ||
70 | smlal r6, r7, r11, r10 | ||
71 | ldr r10, [r3, #28] | ||
72 | smlal r6, r7, r12, r10 | ||
73 | ldr r10, [r3, #20] | ||
74 | smlal r6, r7, sp, r10 | ||
75 | ldr r10, [r3, #12] | ||
76 | smlal r6, r7, lr, r10 | ||
77 | |||
78 | ldr r10, [r4, #88] | ||
79 | smlal r8, r9, r11, r10 | ||
80 | ldr r10, [r4, #96] | ||
81 | smlal r8, r9, r12, r10 | ||
82 | ldr r10, [r4, #104] | ||
83 | smlal r8, r9, sp, r10 | ||
84 | ldr r10, [r4, #112] | ||
85 | smlal r8, r9, lr, r10 | ||
86 | |||
87 | rsbs r6, r6, #0 | ||
88 | rsc r7, r7, #0 | ||
89 | |||
90 | ldmia r2!, {r11, r12, sp, lr} | ||
91 | |||
92 | ldr r10, [r3, #0] | ||
93 | smlal r6, r7, r11, r10 | ||
94 | ldr r10, [r3, #56] | ||
95 | smlal r6, r7, r12, r10 | ||
96 | ldr r10, [r3, #48] | ||
97 | smlal r6, r7, sp, r10 | ||
98 | ldr r10, [r3, #40] | ||
99 | smlal r6, r7, lr, r10 | ||
100 | |||
101 | ldr r10, [r4, #60] | ||
102 | smlal r8, r9, r11, r10 | ||
103 | ldr r10, [r4, #68] | ||
104 | smlal r8, r9, r12, r10 | ||
105 | ldr r10, [r4, #76] | ||
106 | smlal r8, r9, sp, r10 | ||
107 | ldr r10, [r4, #84] | ||
108 | smlal r8, r9, lr, r10 | ||
109 | |||
110 | ldmia r2!, {r11, r12, sp, lr} | ||
111 | ldr r10, [r3, #32] | ||
112 | smlal r6, r7, r11, r10 | ||
113 | ldr r10, [r3, #24] | ||
114 | smlal r6, r7, r12, r10 | ||
115 | ldr r10, [r3, #16] | ||
116 | smlal r6, r7, sp, r10 | ||
117 | ldr r10, [r3, #8] | ||
118 | smlal r6, r7, lr, r10 | ||
119 | |||
120 | ldr r10, [r4, #92] | ||
121 | smlal r8, r9, r11, r10 | ||
122 | ldr r10, [r4, #100] | ||
123 | smlal r8, r9, r12, r10 | ||
124 | ldr r10, [r4, #108] | ||
125 | smlal r8, r9, sp, r10 | ||
126 | ldr r10, [r4, #116] | ||
127 | smlal r8, r9, lr, r10 | ||
128 | |||
129 | movs r6, r6, lsr #16 | ||
130 | adc r6, r6, r7, lsl #16 | ||
131 | str r6, [r0, -r5, lsl #2] | ||
132 | |||
133 | movs r8, r8, lsr #16 | ||
134 | adc r8, r8, r9, lsl #16 | ||
135 | str r8, [r0, r5, lsl #2] | ||
136 | |||
137 | subs r5, r5, #1 | ||
138 | bne .l | ||
139 | |||
140 | ldr r5, =synth_full_sp | ||
141 | ldr sp, [r5] | ||
142 | ldmia sp!, {r4, r5, r6, r7, r8, r9, r10, r11, r12, pc} | ||
143 | |||
144 | synth_full2: | ||
145 | stmdb sp!, {r4, r5, r6, r7, r8, r9, r10, r11, r12, lr} | ||
146 | ldr r4, [sp, #40] | ||
147 | ldr r5, =synth_full_sp | ||
148 | str sp, [r5] | ||
149 | mov r5, #15 | ||
150 | add r2, r2, #32 | ||
151 | .l2: | ||
152 | add r3, r3, #128 | ||
153 | add r4, r4, #128 | ||
154 | ldmia r1!, {r10, r11, r12, lr} | ||
155 | ldr r7, [r3, #0] | ||
156 | smull r6, r7, r10, r7 | ||
157 | ldr r9, [r4, #60] | ||
158 | smull r8, r9, r10, r9 | ||
159 | |||
160 | ldr r10, [r3, #56] | ||
161 | smlal r6, r7, r11, r10 | ||
162 | ldr r10, [r3, #48] | ||
163 | smlal r6, r7, r12, r10 | ||
164 | ldr r10, [r3, #40] | ||
165 | smlal r6, r7, lr, r10 | ||
166 | |||
167 | ldr r10, [r4, #68] | ||
168 | smlal r8, r9, r11, r10 | ||
169 | ldr r10, [r4, #76] | ||
170 | smlal r8, r9, r12, r10 | ||
171 | ldr r10, [r4, #84] | ||
172 | smlal r8, r9, lr, r10 | ||
173 | |||
174 | ldmia r1!, {r11, r12, sp, lr} | ||
175 | ldr r10, [r3, #32] | ||
176 | smlal r6, r7, r11, r10 | ||
177 | ldr r10, [r3, #24] | ||
178 | smlal r6, r7, r12, r10 | ||
179 | ldr r10, [r3, #16] | ||
180 | smlal r6, r7, sp, r10 | ||
181 | ldr r10, [r3, #8] | ||
182 | smlal r6, r7, lr, r10 | ||
183 | |||
184 | ldr r10, [r4, #92] | ||
185 | smlal r8, r9, r11, r10 | ||
186 | ldr r10, [r4, #100] | ||
187 | smlal r8, r9, r12, r10 | ||
188 | ldr r10, [r4, #108] | ||
189 | smlal r8, r9, sp, r10 | ||
190 | ldr r10, [r4, #116] | ||
191 | smlal r8, r9, lr, r10 | ||
192 | |||
193 | rsbs r6, r6, #0 | ||
194 | rsc r7, r7, #0 | ||
195 | |||
196 | ldmia r2!, {r11, r12, sp, lr} | ||
197 | |||
198 | ldr r10, [r3, #4] | ||
199 | smlal r6, r7, r11, r10 | ||
200 | ldr r10, [r3, #60] | ||
201 | smlal r6, r7, r12, r10 | ||
202 | ldr r10, [r3, #52] | ||
203 | smlal r6, r7, sp, r10 | ||
204 | ldr r10, [r3, #44] | ||
205 | smlal r6, r7, lr, r10 | ||
206 | |||
207 | ldr r10, [r4, #120] | ||
208 | smlal r8, r9, r11, r10 | ||
209 | ldr r10, [r4, #64] | ||
210 | smlal r8, r9, r12, r10 | ||
211 | ldr r10, [r4, #72] | ||
212 | smlal r8, r9, sp, r10 | ||
213 | ldr r10, [r4, #80] | ||
214 | smlal r8, r9, lr, r10 | ||
215 | |||
216 | ldmia r2!, {r11, r12, sp, lr} | ||
217 | ldr r10, [r3, #36] | ||
218 | smlal r6, r7, r11, r10 | ||
219 | ldr r10, [r3, #28] | ||
220 | smlal r6, r7, r12, r10 | ||
221 | ldr r10, [r3, #20] | ||
222 | smlal r6, r7, sp, r10 | ||
223 | ldr r10, [r3, #12] | ||
224 | smlal r6, r7, lr, r10 | ||
225 | |||
226 | ldr r10, [r4, #88] | ||
227 | smlal r8, r9, r11, r10 | ||
228 | ldr r10, [r4, #96] | ||
229 | smlal r8, r9, r12, r10 | ||
230 | ldr r10, [r4, #104] | ||
231 | smlal r8, r9, sp, r10 | ||
232 | ldr r10, [r4, #112] | ||
233 | smlal r8, r9, lr, r10 | ||
234 | |||
235 | movs r6, r6, lsr #16 | ||
236 | adc r6, r6, r7, lsl #16 | ||
237 | str r6, [r0, -r5, lsl #2] | ||
238 | |||
239 | movs r8, r8, lsr #16 | ||
240 | adc r8, r8, r9, lsl #16 | ||
241 | str r8, [r0, r5, lsl #2] | ||
242 | |||
243 | subs r5, r5, #1 | ||
244 | bne .l2 | ||
245 | |||
246 | ldr r5, =synth_full_sp | ||
247 | ldr sp, [r5] | ||
248 | ldmia sp!, {r4, r5, r6, r7, r8, r9, r10, r11, r12, pc} | ||
249 | |||
250 | .global III_aliasreduce | ||
251 | |||
252 | III_aliasreduce: | ||
253 | stmdb sp!, {r4, r5, r6, r7, r8, r9, r10, r11, r12, lr} | ||
254 | add r1, r0, r1, lsl #2 | ||
255 | add r0, r0, #72 | ||
256 | .arl1: | ||
257 | mov r2, #8 | ||
258 | mov r3, r0 @ a | ||
259 | mov r4, r0 @ b | ||
260 | ldr r5, =csa @ cs/ca | ||
261 | .arl2: | ||
262 | ldmdb r3, {r6, r12} | ||
263 | ldmia r4, {r7, lr} | ||
264 | |||
265 | ldmia r5!, {r8, r9} | ||
266 | smull r10, r11, r7, r8 | ||
267 | smlal r10, r11, r12, r9 | ||
268 | movs r10, r10, lsr #28 | ||
269 | adc r10, r10, r11, lsl #4 | ||
270 | |||
271 | rsb r7, r7, #0 | ||
272 | smull r11, r8, r12, r8 | ||
273 | smlal r11, r8, r7, r9 | ||
274 | movs r11, r11, lsr #28 | ||
275 | adc r11, r11, r8, lsl #4 | ||
276 | |||
277 | ldmia r5!, {r8, r9} | ||
278 | smull r12, r7, lr, r8 | ||
279 | smlal r12, r7, r6, r9 | ||
280 | movs r12, r12, lsr #28 | ||
281 | adc r12, r12, r7, lsl #4 | ||
282 | stmia r4!, {r10, r12} | ||
283 | |||
284 | rsb lr, lr, #0 | ||
285 | smull r7, r10, r6, r8 | ||
286 | smlal r7, r10, lr, r9 | ||
287 | movs r7, r7, lsr #28 | ||
288 | adc r7, r7, r10, lsl #4 | ||
289 | stmdb r3!, {r7, r11} | ||
290 | |||
291 | subs r2, r2, #2 | ||
292 | bne .arl2 | ||
293 | add r0, r0, #72 | ||
294 | cmp r0, r1 | ||
295 | blo .arl1 | ||
296 | ldmia sp!, {r4, r5, r6, r7, r8, r9, r10, r11, r12, pc} | ||
297 | |||
298 | csa: | ||
299 | .word +0x0db84a81 | ||
300 | .word -0x083b5fe7 | ||
301 | .word +0x0e1b9d7f | ||
302 | .word -0x078c36d2 | ||
303 | .word +0x0f31adcf | ||
304 | .word -0x05039814 | ||
305 | .word +0x0fbba815 | ||
306 | .word -0x02e91dd1 | ||
307 | .word +0x0feda417 | ||
308 | .word -0x0183603a | ||
309 | .word +0x0ffc8fc8 | ||
310 | .word -0x00a7cb87 | ||
311 | .word +0x0fff964c | ||
312 | .word -0x003a2847 | ||
313 | .word +0x0ffff8d3 | ||
314 | .word -0x000f27b4 | ||
315 | |||
316 | .global III_overlap | ||
317 | III_overlap: | ||
318 | stmdb sp!, {r4, r5, r6, r7, r8, lr} | ||
319 | add r2, r2, r3, lsl #2 | ||
320 | mov r3, #6 | ||
321 | .ol: | ||
322 | ldmia r0!, {r4, r5, r6} | ||
323 | ldmia r1!, {r7, r8, lr} | ||
324 | add r4, r4, r7 | ||
325 | add r5, r5, r8 | ||
326 | add r6, r6, lr | ||
327 | str r4, [r2], #128 | ||
328 | str r5, [r2], #128 | ||
329 | str r6, [r2], #128 | ||
330 | subs r3, r3, #1 | ||
331 | bne .ol | ||
332 | sub r1, r1, #72 | ||
333 | ldmia r0!, {r4, r5, r6, r7, r8, lr} | ||
334 | stmia r1!, {r4, r5, r6, r7, r8, lr} | ||
335 | ldmia r0!, {r4, r5, r6, r7, r8, lr} | ||
336 | stmia r1!, {r4, r5, r6, r7, r8, lr} | ||
337 | ldmia r0!, {r4, r5, r6, r7, r8, lr} | ||
338 | stmia r1!, {r4, r5, r6, r7, r8, lr} | ||
339 | ldmia sp!, {r4, r5, r6, r7, r8, pc} | ||
340 | |||
341 | .section .ibss,"aw",%nobits | ||
342 | synth_full_sp: | ||
343 | .space 4 | ||