Another logf fix in voice_thread.c
[kugel-rb.git] / apps / codecs / lib / mdct_arm.S
blob76139838a68a0c7616058a382a5d037870c676f1
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  ****************************************************************************/
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. */
26 #define cPI3_8 (0x30fbc54d)
27 #define cPI2_8 (0x5a82799a)
28 #define cPI1_8 (0x7641af3d)
30 #ifdef USE_IRAM
31     .section    .icode,"ax",%progbits
32 #else
33     .text
34 #endif
35     .align
37     .global mdct_butterfly_32
38     .global mdct_butterfly_generic_loop
40 mdct_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
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}
63     mov     pc, lr
65 mdct_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
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
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)
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
95     stmia   r0!, {r5, r6, r10, r11}
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
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)
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
119     sub     r0, r0, #4*4
120     ldmia   r0, {r1, r2, r3, r4}
121     bl      mdct_butterfly_8
123     @ mdct_butterfly_8 will have incremented r0 by #8*4 already
124     ldmia   r0, {r1, r2, r3, r4, r5, r6, r10, r11}
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
130     ldr     pc, [sp], #4
132 mdct_butterfly_32:
133     stmdb   sp!, {r4-r11, lr}
135     add     r1, r0, #16*4
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
148     stmia   r1!, {r6, r7, r8, r9}
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
160     add     r4, r4, r5                  @ (x3 - x19) + (x2 - x18) 
161     rsb     r5, r4, r5, asl #1          @ (x3 - x19) - (x2 - x18)
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
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}
183     @r4,r5,r6,r7,r8,r9 now free
184     @ we don't use r5, r8, r9 below
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
194     stmia   r0!, {r6, r7, r10, r11}
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
207     stmia   r1!, {r6, r7, r8, r9}
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
217     sub     r4, r4, r5                  @ (x26 - x10) - (x27 - x11) 
218     add     r5, r4, r5, asl #1          @ (x26 - x10) + (x27 - x11)
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
226     stmia   r0!, {r6, r7, r8, r9}
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}
240     @ r4,r5,r6,r7,r8,r9 now free
241     @ we don't use r5,r8,r9 below
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
251     stmia   r0, {r6, r7, r10, r11}
253     sub     r0, r0, #12*4
254     bl      mdct_butterfly_16
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
260     ldmia   sp!, {r4-r11, pc}
262     @ mdct_butterfly_generic_loop(x1, x2, T0, step, Ttop)
263 mdct_butterfly_generic_loop:
264     stmdb   sp!, {r4-r11, lr}
265     str     r2, [sp, #-4]
266     ldr     r4, [sp, #36]
268     ldmdb   r0, {r6, r7, r8, r9}
269     ldmdb   r1, {r10, r11, r12, r14}
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
280     stmdb   r0!, {r6, r7, r8, r9}
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
289     mov     r8, r8, asl #1
290     mov     r9, r9, asl #1
291     add     r2, r2, r3, asl #2
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
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
305     cmp     r2, r4
306     blo     1b
308     ldr     r4, [sp, #-4]
310     ldmdb   r0, {r6, r7, r8, r9}
311     ldmdb   r1, {r10, r11, r12, r14}
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
322     stmdb   r0!, {r6, r7, r8, r9}
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
331     mov     r8, r8, asl #1
332     mov     r9, r9, asl #1
334     sub     r2, r2, r3, asl #2
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
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
348     cmp     r2, r4
349     bhi     1b
351     ldr     r4, [sp, #36]
353     ldmdb   r0, {r6, r7, r8, r9}
354     ldmdb   r1, {r10, r11, r12, r14}
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
365     stmdb   r0!, {r6, r7, r8, r9}
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
374     mov     r8, r8, asl #1
375     mov     r9, r9, asl #1
377     add     r2, r2, r3, asl #2
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
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
391     cmp     r2, r4
392     blo     1b
394     ldr     r4, [sp, #-4]
396     ldmdb   r0, {r6, r7, r8, r9}
397     ldmdb   r1, {r10, r11, r12, r14}
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
408     stmdb   r0!, {r6, r7, r8, r9}
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
417     mov     r8, r8, asl #1
418     mov     r9, r9, asl #1
419     sub     r2, r2, r3, asl #2
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
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
433     cmp     r2, r4
434     bhi     1b
436     ldmia   sp!, {r4-r11, pc}