FS#8961 - Anti-Aliased Fonts.
[kugel-rb/myfork.git] / apps / codecs / lib / mdct_arm.S
blobbacc049f6bc5938f1f2696adbebf124a042fd864
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     add     r9,  r5,  r1                @ x4 + x0
42     sub     r5,  r5,  r1                @ x4 - x0
43     add     r7,  r6,  r2                @ x5 + x1
44     sub     r6,  r6,  r2                @ x5 - x1
45     add     r8,  r10, r3                @ x6 + x2
46     sub     r10, r10, r3                @ x6 - x2
47     add     r12, r11, r4                @ x7 + x3
48     sub     r11, r11, r4                @ x7 - x3
50     add     r1,  r10, r6                @ y0 = (x6 - x2) + (x5 - x1)
51     sub     r2,  r11, r5                @ y1 = (x7 - x3) - (x4 - x0)
52     sub     r3,  r10, r6                @ y2 = (x6 - x2) - (x5 - x1)
53     add     r4,  r11, r5                @ y3 = (x7 - x3) + (x4 - x0)
54     sub     r5,  r8,  r9                @ y4 = (x6 + x2) - (x4 + x0)
55     sub     r6,  r12, r7                @ y5 = (x7 + x3) - (x5 + x1)
56     add     r10, r8,  r9                @ y6 = (x6 + x2) + (x4 + x0)
57     add     r11, r12, r7                @ y7 = (x7 + x3) + (x5 + x1)
58     stmia   r0, {r1, r2, r3, r4, r5, r6, r10, r11}
60     mov     pc, lr
62 mdct_butterfly_16:
63     str     lr, [sp, #-4]!
64     add     r1, r0, #8*4
66     ldmia   r0, {r2, r3, r4, r5}
67     ldmia   r1, {r6, r7, r8, r9}
68     add     r6, r6, r2                  @ y8 = x8 + x0
69     rsb     r2, r6, r2, asl #1          @ x0 - x8
70     add     r7, r7, r3                  @ y9 = x9 + x1
71     rsb     r3, r7, r3, asl #1          @ x1 - x9
72     add     r8, r8, r4                  @ y10 = x10 + x2
73     sub     r11, r8, r4, asl #1         @ x10 - x2
74     add     r9, r9, r5                  @ y11 = x11 + x3
75     rsb     r10, r9, r5, asl #1         @ x3 - x11
77     stmia   r1!, {r6, r7, r8, r9}
78     
79     add     r2, r2, r3                  @ (x0 - x8) + (x1 - x9)
80     rsb     r3, r2, r3, asl #1          @ (x1 - x9) - (x0 - x8)
82     ldr     r12, =cPI2_8
83     smull   r8, r5, r12, r2
84     smull   r8, r6, r12, r3
85     mov     r5, r5, asl #1
86     mov     r6, r6, asl #1
88     stmia   r0!, {r5, r6, r10, r11}
90     ldmia   r0, {r2, r3, r4, r5}
91     ldmia   r1, {r6, r7, r8, r9}
92     add     r6, r6, r2                  @ y12 = x12 + x4
93     sub     r2, r6, r2, asl #1          @ x12 - x4
94     add     r7, r7, r3                  @ y13 = x13 + x5
95     sub     r3, r7, r3, asl #1          @ x13 - x5
96     add     r8, r8, r4                  @ y10 = x14 + x6
97     sub     r10, r8, r4, asl #1         @ x14 - x6
98     add     r9, r9, r5                  @ y11 = x15 + x7
99     sub     r11, r9, r5, asl #1         @ x15 - x7
101     stmia   r1, {r6, r7, r8, r9}
102     
103     sub     r2, r2, r3                  @ (x12 - x4) - (x13 - x5)
104     add     r3, r2, r3, asl #1          @ (x12 - x4) + (x13 - x5)
106     smull   r8, r5, r12, r2
107     smull   r8, r6, r12, r3
108     mov     r5, r5, asl #1
109     mov     r6, r6, asl #1
110     @ no stmia here, r5, r6, r10, r11 are passed to mdct_butterfly_8
112     sub     r0, r0, #4*4
113     ldmia   r0, {r1, r2, r3, r4}
114     bl      mdct_butterfly_8
115     add     r0, r0, #8*4
116     ldmia   r0, {r1, r2, r3, r4, r5, r6, r10, r11}
117     bl      mdct_butterfly_8
119     ldr     pc, [sp], #4
121 mdct_butterfly_32:
122     stmdb   sp!, {r4-r11, lr}
124     add     r1, r0, #16*4
126     ldmia   r0, {r2, r3, r4, r5}
127     ldmia   r1, {r6, r7, r8, r9}
128     add     r6, r6, r2                  @ y16 = x16 + x0
129     rsb     r2, r6, r2, asl #1          @ x0 - x16
130     add     r7, r7, r3                  @ y17 = x17 + x1
131     rsb     r3, r7, r3, asl #1          @ x1 - x17
132     add     r8, r8, r4                  @ y18 = x18 + x2
133     rsb     r4, r8, r4, asl #1          @ x2 - x18
134     add     r9, r9, r5                  @ y19 = x19 + x3
135     rsb     r5, r9, r5, asl #1          @ x3 - x19
137     stmia   r1!, {r6, r7, r8, r9}
139     ldr     r12, =cPI1_8
140     ldr     lr, =cPI3_8
141     smull   r10, r6, r12, r2
142     rsb     r2, r2, #0
143     smlal   r10, r6, lr, r3
144     smull   r10, r7, r12, r3
145     smlal   r10, r7, lr, r2
146     mov     r6, r6, asl #1
147     mov     r7, r7, asl #1
149     add     r4, r4, r5                  @ (x3 - x19) + (x2 - x18) 
150     rsb     r5, r4, r5, asl #1          @ (x3 - x19) - (x2 - x18)
152     ldr     r11, =cPI2_8
153     smull   r10, r8, r4, r11
154     smull   r10, r9, r5, r11
155     mov     r8, r8, asl #1
156     mov     r9, r9, asl #1
158     stmia   r0!, {r6, r7, r8, r9}
159     
160     ldmia   r0, {r2, r3, r4, r5}
161     ldmia   r1, {r6, r7, r8, r9}
162     add     r6, r6, r2                  @ y20 = x20 + x4
163     rsb     r2, r6, r2, asl #1          @ x4 - x20
164     add     r7, r7, r3                  @ y21 = x21 + x5
165     rsb     r3, r7, r3, asl #1          @ x5 - x21
166     add     r8, r8, r4                  @ y22 = x22 + x6
167     sub     r4, r8, r4, asl #1          @ x22 - x6
168     add     r9, r9, r5                  @ y23 = x23 + x7
169     rsb     r5, r9, r5, asl #1          @ x7 - x23
171     stmia   r1!, {r6, r7, r8, r9}
173     smull   r10, r6, lr, r2
174     rsb     r2, r2, #0
175     smlal   r10, r6, r12, r3
176     smull   r10, r7, lr, r3
177     smlal   r10, r7, r12, r2
178     mov     r6, r6, asl #1
179     mov     r7, r7, asl #1
181     mov     r8, r5
182     mov     r9, r4
183     stmia   r0!, {r6, r7, r8, r9}
185     ldmia   r0, {r2, r3, r4, r5}
186     ldmia   r1, {r6, r7, r8, r9}
187     add     r6, r6, r2                  @ y24 = x24 + x8
188     sub     r2, r6, r2, asl #1          @ x24 - x8
189     add     r7, r7, r3                  @ y25 = x25 + x9
190     sub     r3, r7, r3, asl #1          @ x25 - x9
191     add     r8, r8, r4                  @ y26 = x26 + x10
192     sub     r4, r8, r4, asl #1          @ x26 - x10
193     add     r9, r9, r5                  @ y27 = x27 + x11
194     sub     r5, r9, r5, asl #1          @ x27 - x11
196     stmia   r1!, {r6, r7, r8, r9}
198     smull   r10, r7, lr, r3
199     rsb     r3, r3, #0
200     smlal   r10, r7, r12, r2
201     smull   r10, r6, r12, r3
202     smlal   r10, r6, lr, r2
203     mov     r6, r6, asl #1
204     mov     r7, r7, asl #1
206     sub     r4, r4, r5                  @ (x26 - x10) - (x27 - x11) 
207     add     r5, r4, r5, asl #1          @ (x26 - x10) + (x27 - x11)
209     ldr     r11, =cPI2_8
210     smull   r10, r8, r11, r4
211     smull   r10, r9, r11, r5
212     mov     r8, r8, asl #1
213     mov     r9, r9, asl #1
215     stmia   r0!, {r6, r7, r8, r9}
217     ldmia   r0, {r2, r3, r4, r5}
218     ldmia   r1, {r6, r7, r8, r9}
219     add     r6, r6, r2                  @ y28 = x28 + x12
220     sub     r2, r6, r2, asl #1          @ x28 - x12
221     add     r7, r7, r3                  @ y29 = x29 + x13
222     sub     r3, r7, r3, asl #1          @ x29 - x13
223     add     r8, r8, r4                  @ y30 = x30 + x14
224     sub     r4, r8, r4, asl #1          @ x30 - x14
225     add     r9, r9, r5                  @ y31 = x31 + x15
226     sub     r5, r9, r5, asl #1          @ x31 - x15
228     stmia   r1, {r6, r7, r8, r9}
230     smull   r10, r7, r12, r3
231     rsb     r3, r3, #0
232     smlal   r10, r7, lr, r2
233     smull   r10, r6, lr, r3
234     smlal   r10, r6, r12, r2
235     mov     r6, r6, asl #1
236     mov     r7, r7, asl #1
238     mov     r8, r4
239     mov     r9, r5
240     stmia   r0, {r6, r7, r8, r9}
242     sub     r0, r0, #12*4
243     str     r0, [sp, #-4]!
244     bl      mdct_butterfly_16
246     ldr     r0, [sp], #4
247     add     r0, r0, #16*4
248     bl      mdct_butterfly_16
250     ldmia   sp!, {r4-r11, pc}
252     @ mdct_butterfly_generic_loop(x1, x2, T0, step, Ttop)
253 mdct_butterfly_generic_loop:
254     stmdb   sp!, {r4-r11, lr}
255     str     r2, [sp, #-4]
256     ldr     r4, [sp, #36]
258     ldmdb   r0, {r6, r7, r8, r9}
259     ldmdb   r1, {r10, r11, r12, r14}
261     add     r6, r6, r10
262     sub     r10, r6, r10, asl #1
263     add     r7, r7, r11
264     rsb     r11, r7, r11, asl #1
265     add     r8, r8, r12
266     sub     r12, r8, r12, asl #1
267     add     r9, r9, r14
268     rsb     r14, r9, r14, asl #1
270     stmdb   r0!, {r6, r7, r8, r9}
272     ldmia   r2, {r6, r7}
273     smull   r5, r8, r6, r14
274     rsb     r14, r14, #0
275     smlal   r5, r8, r7, r12
276     smull   r5, r9, r6, r12
277     smlal   r5, r9, r7, r14
279     mov     r8, r8, asl #1
280     mov     r9, r9, asl #1
281     stmdb   r1!, {r8, r9}
282     add     r2, r2, r3, asl #2
284     ldmia   r2, {r6, r7}
285     smull   r5, r8, r6, r11
286     rsb     r11, r11, #0
287     smlal   r5, r8, r7, r10
288     smull   r5, r9, r6, r10
289     smlal   r5, r9, r7, r11
291     mov     r8, r8, asl #1
292     mov     r9, r9, asl #1
293     stmdb   r1!, {r8, r9}
294     add     r2, r2, r3, asl #2
296     cmp     r2, r4
297     blo     1b
299     ldr     r4, [sp, #-4]
301     ldmdb   r0, {r6, r7, r8, r9}
302     ldmdb   r1, {r10, r11, r12, r14}
304     add     r6, r6, r10
305     sub     r10, r6, r10, asl #1
306     add     r7, r7, r11
307     sub     r11, r7, r11, asl #1
308     add     r8, r8, r12
309     sub     r12, r8, r12, asl #1
310     add     r9, r9, r14
311     sub     r14, r9, r14, asl #1
313     stmdb   r0!, {r6, r7, r8, r9}
315     ldmia   r2, {r6, r7}
316     smull   r5, r9, r6, r14
317     rsb     r14, r14, #0
318     smlal   r5, r9, r7, r12
319     smull   r5, r8, r6, r12
320     smlal   r5, r8, r7, r14
322     mov     r8, r8, asl #1
323     mov     r9, r9, asl #1
324     stmdb   r1!, {r8, r9}
325     sub     r2, r2, r3, asl #2
327     ldmia   r2, {r6, r7}
328     smull   r5, r9, r6, r11
329     rsb     r11, r11, #0
330     smlal   r5, r9, r7, r10
331     smull   r5, r8, r6, r10
332     smlal   r5, r8, r7, r11
334     mov     r8, r8, asl #1
335     mov     r9, r9, asl #1
336     stmdb   r1!, {r8, r9}
337     sub     r2, r2, r3, asl #2
339     cmp     r2, r4
340     bhi     1b
342     ldr     r4, [sp, #36]
344     ldmdb   r0, {r6, r7, r8, r9}
345     ldmdb   r1, {r10, r11, r12, r14}
347     add     r6, r6, r10
348     rsb     r10, r6, r10, asl #1
349     add     r7, r7, r11
350     rsb     r11, r7, r11, asl #1
351     add     r8, r8, r12
352     rsb     r12, r8, r12, asl #1
353     add     r9, r9, r14
354     rsb     r14, r9, r14, asl #1
356     stmdb   r0!, {r6, r7, r8, r9}
358     ldmia   r2, {r6, r7}
359     smull   r5, r8, r6, r12
360     rsb     r12, r12, #0
361     smlal   r5, r8, r7, r14
362     smull   r5, r9, r6, r14
363     smlal   r5, r9, r7, r12
365     mov     r8, r8, asl #1
366     mov     r9, r9, asl #1
367     stmdb   r1!, {r8, r9}
368     add     r2, r2, r3, asl #2
370     ldmia   r2, {r6, r7}
371     smull   r5, r8, r6, r10
372     rsb     r10, r10, #0
373     smlal   r5, r8, r7, r11
374     smull   r5, r9, r6, r11
375     smlal   r5, r9, r7, r10
377     mov     r8, r8, asl #1
378     mov     r9, r9, asl #1
379     stmdb   r1!, {r8, r9}
380     add     r2, r2, r3, asl #2
382     cmp     r2, r4
383     blo     1b
385     ldr     r4, [sp, #-4]
387     ldmdb   r0, {r6, r7, r8, r9}
388     ldmdb   r1, {r10, r11, r12, r14}
390     add     r6, r6, r10
391     sub     r10, r6, r10, asl #1
392     add     r7, r7, r11
393     rsb     r11, r7, r11, asl #1
394     add     r8, r8, r12
395     sub     r12, r8, r12, asl #1
396     add     r9, r9, r14
397     rsb     r14, r9, r14, asl #1
399     stmdb   r0!, {r6, r7, r8, r9}
401     ldmia   r2, {r6, r7}
402     smull   r5, r9, r6, r12
403     smlal   r5, r9, r7, r14
404     rsb     r12, r12, #0
405     smull   r5, r8, r6, r14
406     smlal   r5, r8, r7, r12
408     mov     r8, r8, asl #1
409     mov     r9, r9, asl #1
410     stmdb   r1!, {r8, r9}
411     sub     r2, r2, r3, asl #2
413     ldmia   r2, {r6, r7}
414     smull   r5, r9, r6, r10
415     rsb     r10, r10, #0
416     smlal   r5, r9, r7, r11
417     smull   r5, r8, r6, r11
418     smlal   r5, r8, r7, r10
420     mov     r8, r8, asl #1
421     mov     r9, r9, asl #1
422     stmdb   r1!, {r8, r9}
423     sub     r2, r2, r3, asl #2
425     cmp     r2, r4
426     bhi     1b
428     ldmia   sp!, {r4-r11, pc}