summaryrefslogtreecommitdiff
path: root/lib/rbcodec/codecs/libmad/dct32_arm.S
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rbcodec/codecs/libmad/dct32_arm.S')
-rw-r--r--lib/rbcodec/codecs/libmad/dct32_arm.S328
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
28dct32:
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
224bitrev:
225 .word 0x0
226 .word 0x2
227 .word 0x1
228 .word 0x3
229
230sincos:
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
264sincos2:
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