diff options
Diffstat (limited to 'lib/rbcodec/codecs/libmad/dct32_arm.S')
-rw-r--r-- | lib/rbcodec/codecs/libmad/dct32_arm.S | 328 |
1 files changed, 328 insertions, 0 deletions
diff --git a/lib/rbcodec/codecs/libmad/dct32_arm.S b/lib/rbcodec/codecs/libmad/dct32_arm.S new file mode 100644 index 0000000000..440841bb5e --- /dev/null +++ b/lib/rbcodec/codecs/libmad/dct32_arm.S | |||
@@ -0,0 +1,328 @@ | |||
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 "mad_iram.h" | ||
23 | |||
24 | .global dct32 | ||
25 | |||
26 | .section ICODE_SECTION_MPA_ARM,"ax",%progbits | ||
27 | |||
28 | dct32: | ||
29 | stmdb sp!, {r4-r11, lr} | ||
30 | sub sp, sp, #144 | ||
31 | str r0, [sp, #12] | ||
32 | str r1, [sp, #8] | ||
33 | str r2, [sp, #4] | ||
34 | str r3, [sp] | ||
35 | add r0, sp, #16 | ||
36 | add r1, r0, #128 | ||
37 | ldr r2, =bitrev | ||
38 | .shuffle: | ||
39 | ldr r5, [sp, #12] | ||
40 | ldr r3, [r2], #4 | ||
41 | sub r4, r5, r3, lsl #4 | ||
42 | add r3, r5, r3, lsl #4 | ||
43 | ldr r6, [r3] | ||
44 | ldr r8, [r4, #124] | ||
45 | add r6, r6, r8 | ||
46 | sub r8, r6, r8, lsl #1 | ||
47 | ldr r7, [r3, #8] | ||
48 | ldr lr, [r4, #116] | ||
49 | add r7, r7, lr | ||
50 | sub lr, r7, lr, lsl #1 | ||
51 | ldr r10, [r3, #64] | ||
52 | ldr r9, [r4, #60] | ||
53 | add r10, r10, r9 | ||
54 | sub r9, r10, r9, lsl #1 | ||
55 | ldr r11, [r3, #72] | ||
56 | ldr r12, [r4, #52] | ||
57 | add r11, r11, r12 | ||
58 | sub r12, r11, r12, lsl #1 | ||
59 | add r6, r6, r10 | ||
60 | sub r10, r6, r10, lsl #1 | ||
61 | add r7, r7, r11 | ||
62 | sub r11, r7, r11, lsl #1 | ||
63 | add r8, r8, r12 | ||
64 | sub r12, r8, r12, lsl #1 | ||
65 | add lr, lr, r9 | ||
66 | sub r9, lr, r9, lsl #1 | ||
67 | stmia r0!, {r6, r7, r8, r9, r10, r11, r12, lr} | ||
68 | cmp r0, r1 | ||
69 | bne .shuffle | ||
70 | ldr r0, =189812531 | ||
71 | add r1, sp, #16 | ||
72 | add r3, r1, #128 | ||
73 | .l2: | ||
74 | add r2, r1, #32 | ||
75 | ldmia r2, {r4, r5, r8, r9} | ||
76 | ldmia r1, {r6, r7, r10, r11} | ||
77 | add r6, r6, r4 | ||
78 | sub r4, r6, r4, lsl #1 | ||
79 | add r7, r7, r5 | ||
80 | sub r5, r7, r5, lsl #1 | ||
81 | stmia r2!, {r4, r5} | ||
82 | stmia r1!, {r6, r7} | ||
83 | add r9, r9, r8 | ||
84 | sub r8, r9, r8, lsl #1 | ||
85 | smull r4, r6, r9, r0 | ||
86 | movs r4, r4, lsr #28 | ||
87 | adc r4, r4, r6, lsl #4 | ||
88 | smull r5, r6, r8, r0 | ||
89 | movs r5, r5, lsr #28 | ||
90 | adc r5, r5, r6, lsl #4 | ||
91 | add r10, r10, r4 | ||
92 | sub r4, r10, r4, lsl #1 | ||
93 | add r11, r11, r5 | ||
94 | sub r5, r11, r5, lsl #1 | ||
95 | stmia r2!, {r4, r5} | ||
96 | stmia r1!, {r10, r11} | ||
97 | ldmia r2, {r5, r6, r8, r11} | ||
98 | ldmia r1, {r4, r7, r9, r10} | ||
99 | add r4, r4, r6 | ||
100 | sub r6, r4, r6, lsl #1 | ||
101 | add r7, r7, r5 | ||
102 | sub r5, r7, r5, lsl #1 | ||
103 | stmia r2!, {r6, r7} | ||
104 | stmia r1!, {r4, r5} | ||
105 | add r11, r11, r8 | ||
106 | sub r8, r11, r8, lsl #1 | ||
107 | smull r5, r4, r8, r0 | ||
108 | movs r5, r5, lsr #28 | ||
109 | adc r5, r5, r4, lsl #4 | ||
110 | smull r6, r4, r11, r0 | ||
111 | movs r6, r6, lsr #28 | ||
112 | adc r6, r6, r4, lsl #4 | ||
113 | add r9, r9, r5 | ||
114 | sub r5, r9, r5, lsl #1 | ||
115 | sub r10, r10, r6 | ||
116 | add r6, r10, r6, lsl #1 | ||
117 | stmia r2!, {r5, r6} | ||
118 | stmia r1!, {r9, r10} | ||
119 | add r1, r1, #32 | ||
120 | cmp r1, r3 | ||
121 | bne .l2 | ||
122 | add r2, sp, #16 | ||
123 | add r3, r2, #64 | ||
124 | ldr r0, =sincos | ||
125 | add r1, r0, #128 | ||
126 | .lbut8: | ||
127 | ldmia r3, {r7, r8} | ||
128 | ldmia r0, {r9, r10} | ||
129 | add r0, r0, #16 | ||
130 | smull r6, r5, r7, r9 | ||
131 | smlal r6, r5, r10, r8 | ||
132 | movs r6, r6, lsr #28 | ||
133 | adc r6, r6, r5, lsl #4 | ||
134 | smull r10, r5, r7, r10 | ||
135 | rsb r9, r9, #0 | ||
136 | smlal r10, r5, r8, r9 | ||
137 | movs r10, r10, lsr #28 | ||
138 | adc r5, r10, r5, lsl #4 | ||
139 | ldmia r2, {r7, r8} | ||
140 | add r7, r7, r5 | ||
141 | sub r5, r7, r5, lsl #1 | ||
142 | add r8, r8, r6 | ||
143 | sub r6, r8, r6, lsl #1 | ||
144 | stmia r3!, {r5, r6} | ||
145 | stmia r2!, {r7, r8} | ||
146 | cmp r0, r1 | ||
147 | bne .lbut8 | ||
148 | add r1, sp, #16 | ||
149 | ldr r2, =sincos | ||
150 | ldr r3, =sincos2 | ||
151 | ldr r0, [sp, #8] | ||
152 | mov r0, r0, lsl #2 | ||
153 | ldr r4, [sp, #4] | ||
154 | add r4, r4, r0 | ||
155 | ldr r5, [sp] | ||
156 | add r5, r5, #480 | ||
157 | add r5, r5, r0 | ||
158 | mov r0, #0 | ||
159 | .l4: | ||
160 | rsb r12, r0, #16 | ||
161 | and r12, r12, #15 | ||
162 | add lr, sp, #16 | ||
163 | add r12, lr, r12, lsl #3 | ||
164 | ldmia r1!, {r10, r11} | ||
165 | ldmia r12, {r6, r7} | ||
166 | add r6, r6, r10 | ||
167 | sub r10, r6, r10, lsl #1 | ||
168 | add r11, r11, r7 | ||
169 | sub r7, r11, r7, lsl #1 | ||
170 | ldmia r2!, {r12, lr} | ||
171 | smull r9, r8, r11, r12 | ||
172 | smlal r9, r8, lr, r10 | ||
173 | movs r9, r9, lsr #28 | ||
174 | adc r9, r9, r8, lsl #4 | ||
175 | smull lr, r8, r11, lr | ||
176 | rsb r12, r12, #0 | ||
177 | smlal lr, r8, r10, r12 | ||
178 | movs lr, lr, lsr #28 | ||
179 | adc r8, lr, r8, lsl #4 | ||
180 | add r6, r6, r8 | ||
181 | sub r8, r6, r8, lsl #1 | ||
182 | add r7, r7, r9 | ||
183 | sub r9, r7, r9, lsl #1 | ||
184 | add lr, r3, #128 | ||
185 | ldmia lr, {r10, r11} | ||
186 | smull lr, r12, r8, r11 | ||
187 | smlal lr, r12, r9, r10 | ||
188 | movs lr, lr, lsr #28 | ||
189 | adc r12, lr, r12, lsl #4 | ||
190 | str r12, [r4], #32 | ||
191 | cmp r0, #0 | ||
192 | cmpne r0, #8 | ||
193 | beq .skip1 | ||
194 | smull lr, r12, r8, r10 | ||
195 | rsb r9, r9, #0 | ||
196 | smlal lr, r12, r9, r11 | ||
197 | movs lr, lr, lsr #28 | ||
198 | adc r12, lr, r12, lsl #4 | ||
199 | add lr, r5, r0, lsl #6 | ||
200 | str r12, [lr, #-512] | ||
201 | .skip1: | ||
202 | ldmia r3!, {r10, r11} | ||
203 | smull lr, r12, r7, r10 | ||
204 | smlal lr, r12, r6, r11 | ||
205 | movs lr, lr, lsr #28 | ||
206 | adc r12, lr, r12, lsl #4 | ||
207 | str r12, [r5], #-32 | ||
208 | cmp r0, #0 | ||
209 | cmpne r0, #8 | ||
210 | beq .skip2 | ||
211 | smull lr, r12, r6, r10 | ||
212 | rsb r7, r7, #0 | ||
213 | smlal lr, r12, r7, r11 | ||
214 | movs lr, lr, lsr #28 | ||
215 | adc r12, lr, r12, lsl #4 | ||
216 | sub lr, r4, r0, lsl #6 | ||
217 | str r12, [lr, #480] | ||
218 | .skip2: | ||
219 | add r0, r0, #1 | ||
220 | cmp r0, #9 | ||
221 | bne .l4 | ||
222 | add sp, sp, #144 | ||
223 | ldmpc regs=r4-r11 | ||
224 | bitrev: | ||
225 | .word 0x0 | ||
226 | .word 0x2 | ||
227 | .word 0x1 | ||
228 | .word 0x3 | ||
229 | |||
230 | sincos: | ||
231 | .word 0x0 | ||
232 | .word 0x10000000 | ||
233 | .word -0x31f1708 | ||
234 | .word 0xfb14be8 | ||
235 | .word -0x61f78aa | ||
236 | .word 0xec835e8 | ||
237 | .word -0x8e39d9d | ||
238 | .word 0xd4db315 | ||
239 | .word -0xb504f33 | ||
240 | .word 0xb504f33 | ||
241 | .word -0xd4db315 | ||
242 | .word 0x8e39d9d | ||
243 | .word -0xec835e8 | ||
244 | .word 0x61f78aa | ||
245 | .word -0xfb14be8 | ||
246 | .word 0x31f1708 | ||
247 | .word -0x10000000 | ||
248 | .word 0x0 | ||
249 | .word -0xfb14be8 | ||
250 | .word -0x31f1708 | ||
251 | .word -0xec835e8 | ||
252 | .word -0x61f78aa | ||
253 | .word -0xd4db315 | ||
254 | .word -0x8e39d9d | ||
255 | .word -0xb504f33 | ||
256 | .word -0xb504f33 | ||
257 | .word -0x8e39d9d | ||
258 | .word -0xd4db315 | ||
259 | .word -0x61f78aa | ||
260 | .word -0xec835e8 | ||
261 | .word -0x31f1708 | ||
262 | .word -0xfb14be8 | ||
263 | |||
264 | sincos2: | ||
265 | .word 0x0 | ||
266 | .word 0x8000000 | ||
267 | .word 0x647d98 | ||
268 | .word 0x7fd8879 | ||
269 | .word 0xc8bd36 | ||
270 | .word 0x7f62369 | ||
271 | .word 0x12c8107 | ||
272 | .word 0x7e9d560 | ||
273 | .word 0x18f8b84 | ||
274 | .word 0x7d8a5f4 | ||
275 | .word 0x1f19f98 | ||
276 | .word 0x7c29fbf | ||
277 | .word 0x25280c6 | ||
278 | .word 0x7a7d056 | ||
279 | .word 0x2b1f34f | ||
280 | .word 0x7884841 | ||
281 | .word 0x30fbc55 | ||
282 | .word 0x7641af4 | ||
283 | .word 0x36ba201 | ||
284 | .word 0x73b5ebd | ||
285 | .word 0x3c56ba7 | ||
286 | .word 0x70e2cbc | ||
287 | .word 0x41ce1e6 | ||
288 | .word 0x6dca0d1 | ||
289 | .word 0x471cece | ||
290 | .word 0x6a6d98a | ||
291 | .word 0x4c3fdff | ||
292 | .word 0x66cf812 | ||
293 | .word 0x5133cc9 | ||
294 | .word 0x62f201b | ||
295 | .word 0x55f5a4d | ||
296 | .word 0x5ed77c9 | ||
297 | .word 0x5a8279a | ||
298 | .word 0x5a8279a | ||
299 | .word 0x5ed77c9 | ||
300 | .word 0x55f5a4d | ||
301 | .word 0x62f201b | ||
302 | .word 0x5133cc9 | ||
303 | .word 0x66cf812 | ||
304 | .word 0x4c3fdff | ||
305 | .word 0x6a6d98a | ||
306 | .word 0x471cece | ||
307 | .word 0x6dca0d1 | ||
308 | .word 0x41ce1e6 | ||
309 | .word 0x70e2cbc | ||
310 | .word 0x3c56ba7 | ||
311 | .word 0x73b5ebd | ||
312 | .word 0x36ba201 | ||
313 | .word 0x7641af4 | ||
314 | .word 0x30fbc55 | ||
315 | .word 0x7884841 | ||
316 | .word 0x2b1f34f | ||
317 | .word 0x7a7d056 | ||
318 | .word 0x25280c6 | ||
319 | .word 0x7c29fbf | ||
320 | .word 0x1f19f98 | ||
321 | .word 0x7d8a5f4 | ||
322 | .word 0x18f8b84 | ||
323 | .word 0x7e9d560 | ||
324 | .word 0x12c8107 | ||
325 | .word 0x7f62369 | ||
326 | .word 0xc8bd36 | ||
327 | .word 0x7fd8879 | ||
328 | .word 0x647d98 | ||