summaryrefslogtreecommitdiff
path: root/apps/codecs/lib/mdct_arm.S
diff options
context:
space:
mode:
Diffstat (limited to 'apps/codecs/lib/mdct_arm.S')
-rw-r--r--apps/codecs/lib/mdct_arm.S437
1 files changed, 0 insertions, 437 deletions
diff --git a/apps/codecs/lib/mdct_arm.S b/apps/codecs/lib/mdct_arm.S
deleted file mode 100644
index 515b859b44..0000000000
--- a/apps/codecs/lib/mdct_arm.S
+++ /dev/null
@@ -1,437 +0,0 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2007 by Tomasz Malesinski
11 *
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
16 *
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
19 *
20 ****************************************************************************/
21
22#include "config.h"
23/* Codecs should not normally do this, but we need to check a macro, and
24 * codecs.h would confuse the assembler. */
25
26#define cPI3_8 (0x30fbc54d)
27#define cPI2_8 (0x5a82799a)
28#define cPI1_8 (0x7641af3d)
29
30#ifdef USE_IRAM
31 .section .icode,"ax",%progbits
32#else
33 .text
34#endif
35 .align
36
37 .global mdct_butterfly_32
38 .global mdct_butterfly_generic_loop
39
40mdct_butterfly_8:
41@ inputs: r0,r1,r2,r3,r4,r5,r6,r10,r11 &lr
42@ uses: r8,r9,r12(scratch)
43@ modifies: r0,r1,r2,r3,r4,r5,r6,r10,r11. increments r0 by #8*4
44 add r9, r5, r1 @ x4 + x0
45 sub r5, r5, r1 @ x4 - x0
46 add r7, r6, r2 @ x5 + x1
47 sub r6, r6, r2 @ x5 - x1
48 add r8, r10, r3 @ x6 + x2
49 sub r10, r10, r3 @ x6 - x2
50 add r12, r11, r4 @ x7 + x3
51 sub r11, r11, r4 @ x7 - x3
52
53 add r1, r10, r6 @ y0 = (x6 - x2) + (x5 - x1)
54 sub r2, r11, r5 @ y1 = (x7 - x3) - (x4 - x0)
55 sub r3, r10, r6 @ y2 = (x6 - x2) - (x5 - x1)
56 add r4, r11, r5 @ y3 = (x7 - x3) + (x4 - x0)
57 sub r5, r8, r9 @ y4 = (x6 + x2) - (x4 + x0)
58 sub r6, r12, r7 @ y5 = (x7 + x3) - (x5 + x1)
59 add r10, r8, r9 @ y6 = (x6 + x2) + (x4 + x0)
60 add r11, r12, r7 @ y7 = (x7 + x3) + (x5 + x1)
61 stmia r0!, {r1, r2, r3, r4, r5, r6, r10, r11}
62
63 bx lr
64
65mdct_butterfly_16:
66@ inputs: r0,r1 &lr
67@ uses: r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12
68@ modifies: r0. increments r0 by #16*4
69@ calls mdct_butterfly_8 via bl so need to stack lr for return address
70 str lr, [sp, #-4]!
71 add r1, r0, #8*4
72
73 ldmia r0, {r2, r3, r4, r5}
74 ldmia r1, {r6, r7, r8, r9}
75 add r6, r6, r2 @ y8 = x8 + x0
76 rsb r2, r6, r2, asl #1 @ x0 - x8
77 add r7, r7, r3 @ y9 = x9 + x1
78 rsb r3, r7, r3, asl #1 @ x1 - x9
79 add r8, r8, r4 @ y10 = x10 + x2
80 sub r11, r8, r4, asl #1 @ x10 - x2
81 add r9, r9, r5 @ y11 = x11 + x3
82 rsb r10, r9, r5, asl #1 @ x3 - x11
83
84 stmia r1!, {r6, r7, r8, r9}
85
86 add r2, r2, r3 @ (x0 - x8) + (x1 - x9)
87 rsb r3, r2, r3, asl #1 @ (x1 - x9) - (x0 - x8)
88
89 ldr r12, =cPI2_8
90 smull r8, r5, r12, r2
91 smull r8, r6, r12, r3
92 mov r5, r5, asl #1
93 mov r6, r6, asl #1
94
95 stmia r0!, {r5, r6, r10, r11}
96
97 ldmia r0, {r2, r3, r4, r5}
98 ldmia r1, {r6, r7, r8, r9}
99 add r6, r6, r2 @ y12 = x12 + x4
100 sub r2, r6, r2, asl #1 @ x12 - x4
101 add r7, r7, r3 @ y13 = x13 + x5
102 sub r3, r7, r3, asl #1 @ x13 - x5
103 add r8, r8, r4 @ y10 = x14 + x6
104 sub r10, r8, r4, asl #1 @ x14 - x6
105 add r9, r9, r5 @ y11 = x15 + x7
106 sub r11, r9, r5, asl #1 @ x15 - x7
107
108 stmia r1, {r6, r7, r8, r9}
109
110 sub r2, r2, r3 @ (x12 - x4) - (x13 - x5)
111 add r3, r2, r3, asl #1 @ (x12 - x4) + (x13 - x5)
112
113 smull r8, r5, r12, r2
114 smull r8, r6, r12, r3
115 mov r5, r5, asl #1
116 mov r6, r6, asl #1
117 @ no stmia here, r5, r6, r10, r11 are passed to mdct_butterfly_8
118
119 sub r0, r0, #4*4
120 ldmia r0, {r1, r2, r3, r4}
121 bl mdct_butterfly_8
122
123 @ mdct_butterfly_8 will have incremented r0 by #8*4 already
124 ldmia r0, {r1, r2, r3, r4, r5, r6, r10, r11}
125
126 bl mdct_butterfly_8
127 @ mdct_butterfly_8 increments r0 by another #8*4 here
128 @ at end, r0 has been incremented by #16*4
129
130 ldrpc
131
132mdct_butterfly_32:
133 stmdb sp!, {r4-r11, lr}
134
135 add r1, r0, #16*4
136
137 ldmia r0, {r2, r3, r4, r5}
138 ldmia r1, {r6, r7, r8, r9}
139 add r6, r6, r2 @ y16 = x16 + x0
140 rsb r2, r6, r2, asl #1 @ x0 - x16
141 add r7, r7, r3 @ y17 = x17 + x1
142 rsb r3, r7, r3, asl #1 @ x1 - x17
143 add r8, r8, r4 @ y18 = x18 + x2
144 rsb r4, r8, r4, asl #1 @ x2 - x18
145 add r9, r9, r5 @ y19 = x19 + x3
146 rsb r5, r9, r5, asl #1 @ x3 - x19
147
148 stmia r1!, {r6, r7, r8, r9}
149
150 ldr r12, =cPI1_8
151 ldr lr, =cPI3_8
152 smull r10, r6, r12, r2
153 rsb r2, r2, #0
154 smlal r10, r6, lr, r3
155 smull r10, r7, r12, r3
156 smlal r10, r7, lr, r2
157 mov r6, r6, asl #1
158 mov r7, r7, asl #1
159
160 add r4, r4, r5 @ (x3 - x19) + (x2 - x18)
161 rsb r5, r4, r5, asl #1 @ (x3 - x19) - (x2 - x18)
162
163 ldr r11, =cPI2_8
164 smull r10, r8, r4, r11
165 smull r10, r9, r5, r11
166 mov r8, r8, asl #1
167 mov r9, r9, asl #1
168
169 stmia r0!, {r6, r7, r8, r9}
170
171 ldmia r0, {r2, r3, r4, r5}
172 ldmia r1, {r6, r7, r8, r9}
173 add r6, r6, r2 @ y20 = x20 + x4
174 rsb r2, r6, r2, asl #1 @ x4 - x20
175 add r7, r7, r3 @ y21 = x21 + x5
176 rsb r3, r7, r3, asl #1 @ x5 - x21
177 add r8, r8, r4 @ y22 = x22 + x6
178 sub r11, r8, r4, asl #1 @ x22 - x6
179 add r9, r9, r5 @ y23 = x23 + x7
180 rsb r10, r9, r5, asl #1 @ x7 - x23
181 stmia r1!, {r6, r7, r8, r9}
182
183 @r4,r5,r6,r7,r8,r9 now free
184 @ we don't use r5, r8, r9 below
185
186 smull r4, r6, lr, r2
187 rsb r2, r2, #0
188 smlal r4, r6, r12, r3
189 smull r4, r7, lr, r3
190 smlal r4, r7, r12, r2
191 mov r6, r6, asl #1
192 mov r7, r7, asl #1
193
194 stmia r0!, {r6, r7, r10, r11}
195
196 ldmia r0, {r2, r3, r4, r5}
197 ldmia r1, {r6, r7, r8, r9}
198 add r6, r6, r2 @ y24 = x24 + x8
199 sub r2, r6, r2, asl #1 @ x24 - x8
200 add r7, r7, r3 @ y25 = x25 + x9
201 sub r3, r7, r3, asl #1 @ x25 - x9
202 add r8, r8, r4 @ y26 = x26 + x10
203 sub r4, r8, r4, asl #1 @ x26 - x10
204 add r9, r9, r5 @ y27 = x27 + x11
205 sub r5, r9, r5, asl #1 @ x27 - x11
206
207 stmia r1!, {r6, r7, r8, r9}
208
209 smull r10, r7, lr, r3
210 rsb r3, r3, #0
211 smlal r10, r7, r12, r2
212 smull r10, r6, r12, r3
213 smlal r10, r6, lr, r2
214 mov r6, r6, asl #1
215 mov r7, r7, asl #1
216
217 sub r4, r4, r5 @ (x26 - x10) - (x27 - x11)
218 add r5, r4, r5, asl #1 @ (x26 - x10) + (x27 - x11)
219
220 ldr r11, =cPI2_8
221 smull r10, r8, r11, r4
222 smull r10, r9, r11, r5
223 mov r8, r8, asl #1
224 mov r9, r9, asl #1
225
226 stmia r0!, {r6, r7, r8, r9}
227
228 ldmia r0, {r2, r3, r4, r5}
229 ldmia r1, {r6, r7, r8, r9}
230 add r6, r6, r2 @ y28 = x28 + x12
231 sub r2, r6, r2, asl #1 @ x28 - x12
232 add r7, r7, r3 @ y29 = x29 + x13
233 sub r3, r7, r3, asl #1 @ x29 - x13
234 add r8, r8, r4 @ y30 = x30 + x14
235 sub r10, r8, r4, asl #1 @ x30 - x14
236 add r9, r9, r5 @ y31 = x31 + x15
237 sub r11, r9, r5, asl #1 @ x31 - x15
238 stmia r1, {r6, r7, r8, r9}
239
240 @ r4,r5,r6,r7,r8,r9 now free
241 @ we don't use r5,r8,r9 below
242
243 smull r4, r7, r12, r3
244 rsb r3, r3, #0
245 smlal r4, r7, lr, r2
246 smull r4, r6, lr, r3
247 smlal r4, r6, r12, r2
248 mov r6, r6, asl #1
249 mov r7, r7, asl #1
250
251 stmia r0, {r6, r7, r10, r11}
252
253 sub r0, r0, #12*4
254 bl mdct_butterfly_16
255
256 @ we know mdct_butterfly_16 increments r0 by #16*4
257 @ and we wanted to advance by #16*4 anyway, so just call again
258 bl mdct_butterfly_16
259
260 ldmpc regs=r4-r11
261
262 @ mdct_butterfly_generic_loop(x1, x2, T0, step, Ttop)
263mdct_butterfly_generic_loop:
264 stmdb sp!, {r4-r11, lr}
265 str r2, [sp, #-4]
266 ldr r4, [sp, #36]
2671:
268 ldmdb r0, {r6, r7, r8, r9}
269 ldmdb r1, {r10, r11, r12, r14}
270
271 add r6, r6, r10
272 sub r10, r6, r10, asl #1
273 add r7, r7, r11
274 rsb r11, r7, r11, asl #1
275 add r8, r8, r12
276 sub r12, r8, r12, asl #1
277 add r9, r9, r14
278 rsb r14, r9, r14, asl #1
279
280 stmdb r0!, {r6, r7, r8, r9}
281
282 ldmia r2, {r6, r7}
283 smull r5, r8, r6, r14
284 rsb r14, r14, #0
285 smlal r5, r8, r7, r12
286 smull r5, r9, r6, r12
287 smlal r5, r9, r7, r14
288
289 mov r8, r8, asl #1
290 mov r9, r9, asl #1
291 add r2, r2, r3, asl #2
292
293 ldmia r2, {r12, r14}
294 smull r5, r6, r12, r11
295 rsb r11, r11, #0
296 smlal r5, r6, r14, r10
297 smull r5, r7, r12, r10
298 smlal r5, r7, r14, r11
299
300 mov r6, r6, asl #1
301 mov r7, r7, asl #1
302 stmdb r1!, {r6, r7, r8, r9}
303 add r2, r2, r3, asl #2
304
305 cmp r2, r4
306 blo 1b
307
308 ldr r4, [sp, #-4]
3091:
310 ldmdb r0, {r6, r7, r8, r9}
311 ldmdb r1, {r10, r11, r12, r14}
312
313 add r6, r6, r10
314 sub r10, r6, r10, asl #1
315 add r7, r7, r11
316 sub r11, r7, r11, asl #1
317 add r8, r8, r12
318 sub r12, r8, r12, asl #1
319 add r9, r9, r14
320 sub r14, r9, r14, asl #1
321
322 stmdb r0!, {r6, r7, r8, r9}
323
324 ldmia r2, {r6, r7}
325 smull r5, r9, r6, r14
326 rsb r14, r14, #0
327 smlal r5, r9, r7, r12
328 smull r5, r8, r6, r12
329 smlal r5, r8, r7, r14
330
331 mov r8, r8, asl #1
332 mov r9, r9, asl #1
333
334 sub r2, r2, r3, asl #2
335
336 ldmia r2, {r12, r14}
337 smull r5, r7, r12, r11
338 rsb r11, r11, #0
339 smlal r5, r7, r14, r10
340 smull r5, r6, r12, r10
341 smlal r5, r6, r14, r11
342
343 mov r6, r6, asl #1
344 mov r7, r7, asl #1
345 stmdb r1!, {r6, r7, r8, r9}
346 sub r2, r2, r3, asl #2
347
348 cmp r2, r4
349 bhi 1b
350
351 ldr r4, [sp, #36]
3521:
353 ldmdb r0, {r6, r7, r8, r9}
354 ldmdb r1, {r10, r11, r12, r14}
355
356 add r6, r6, r10
357 rsb r10, r6, r10, asl #1
358 add r7, r7, r11
359 rsb r11, r7, r11, asl #1
360 add r8, r8, r12
361 rsb r12, r8, r12, asl #1
362 add r9, r9, r14
363 rsb r14, r9, r14, asl #1
364
365 stmdb r0!, {r6, r7, r8, r9}
366
367 ldmia r2, {r6, r7}
368 smull r5, r8, r6, r12
369 rsb r12, r12, #0
370 smlal r5, r8, r7, r14
371 smull r5, r9, r6, r14
372 smlal r5, r9, r7, r12
373
374 mov r8, r8, asl #1
375 mov r9, r9, asl #1
376
377 add r2, r2, r3, asl #2
378
379 ldmia r2, {r12, r14}
380 smull r5, r6, r12, r10
381 rsb r10, r10, #0
382 smlal r5, r6, r14, r11
383 smull r5, r7, r12, r11
384 smlal r5, r7, r14, r10
385
386 mov r6, r6, asl #1
387 mov r7, r7, asl #1
388 stmdb r1!, {r6, r7, r8, r9}
389 add r2, r2, r3, asl #2
390
391 cmp r2, r4
392 blo 1b
393
394 ldr r4, [sp, #-4]
3951:
396 ldmdb r0, {r6, r7, r8, r9}
397 ldmdb r1, {r10, r11, r12, r14}
398
399 add r6, r6, r10
400 sub r10, r6, r10, asl #1
401 add r7, r7, r11
402 rsb r11, r7, r11, asl #1
403 add r8, r8, r12
404 sub r12, r8, r12, asl #1
405 add r9, r9, r14
406 rsb r14, r9, r14, asl #1
407
408 stmdb r0!, {r6, r7, r8, r9}
409
410 ldmia r2, {r6, r7}
411 smull r5, r9, r6, r12
412 smlal r5, r9, r7, r14
413 rsb r12, r12, #0
414 smull r5, r8, r6, r14
415 smlal r5, r8, r7, r12
416
417 mov r8, r8, asl #1
418 mov r9, r9, asl #1
419 sub r2, r2, r3, asl #2
420
421 ldmia r2, {r12, r14}
422 smull r5, r7, r12, r10
423 rsb r10, r10, #0
424 smlal r5, r7, r14, r11
425 smull r5, r6, r12, r11
426 smlal r5, r6, r14, r10
427
428 mov r6, r6, asl #1
429 mov r7, r7, asl #1
430 stmdb r1!, {r6, r7, r8, r9}
431 sub r2, r2, r3, asl #2
432
433 cmp r2, r4
434 bhi 1b
435
436 ldmpc regs=r4-r11
437