Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
4349 | Serge | 1 | /* |
2 | * Simple IDCT |
||
3 | * |
||
4 | * Copyright (c) 2001 Michael Niedermayer |
||
5 | * Copyright (c) 2006 Mans Rullgard |
||
6 | * |
||
7 | * This file is part of FFmpeg. |
||
8 | * |
||
9 | * FFmpeg is free software; you can redistribute it and/or |
||
10 | * modify it under the terms of the GNU Lesser General Public |
||
11 | * License as published by the Free Software Foundation; either |
||
12 | * version 2.1 of the License, or (at your option) any later version. |
||
13 | * |
||
14 | * FFmpeg is distributed in the hope that it will be useful, |
||
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
||
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||
17 | * Lesser General Public License for more details. |
||
18 | * |
||
19 | * You should have received a copy of the GNU Lesser General Public |
||
20 | * License along with FFmpeg; if not, write to the Free Software |
||
21 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||
22 | */ |
||
23 | |||
24 | #include "libavutil/arm/asm.S" |
||
25 | |||
26 | #define W1 22725 /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */ |
||
27 | #define W2 21407 /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */ |
||
28 | #define W3 19266 /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */ |
||
29 | #define W4 16383 /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */ |
||
30 | #define W5 12873 /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */ |
||
31 | #define W6 8867 /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */ |
||
32 | #define W7 4520 /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */ |
||
33 | #define ROW_SHIFT 11 |
||
34 | #define COL_SHIFT 20 |
||
35 | |||
36 | #define W13 (W1 | (W3 << 16)) |
||
37 | #define W26 (W2 | (W6 << 16)) |
||
38 | #define W57 (W5 | (W7 << 16)) |
||
39 | |||
40 | function idct_row_armv5te |
||
41 | str lr, [sp, #-4]! |
||
42 | |||
43 | ldrd v1, v2, [a1, #8] |
||
44 | ldrd a3, a4, [a1] /* a3 = row[1:0], a4 = row[3:2] */ |
||
45 | orrs v1, v1, v2 |
||
46 | itt eq |
||
47 | cmpeq v1, a4 |
||
48 | cmpeq v1, a3, lsr #16 |
||
49 | beq row_dc_only |
||
50 | |||
51 | mov v1, #(1<<(ROW_SHIFT-1)) |
||
52 | mov ip, #16384 |
||
53 | sub ip, ip, #1 /* ip = W4 */ |
||
54 | smlabb v1, ip, a3, v1 /* v1 = W4*row[0]+(1<<(RS-1)) */ |
||
55 | ldr ip, =W26 /* ip = W2 | (W6 << 16) */ |
||
56 | smultb a2, ip, a4 |
||
57 | smulbb lr, ip, a4 |
||
58 | add v2, v1, a2 |
||
59 | sub v3, v1, a2 |
||
60 | sub v4, v1, lr |
||
61 | add v1, v1, lr |
||
62 | |||
63 | ldr ip, =W13 /* ip = W1 | (W3 << 16) */ |
||
64 | ldr lr, =W57 /* lr = W5 | (W7 << 16) */ |
||
65 | smulbt v5, ip, a3 |
||
66 | smultt v6, lr, a4 |
||
67 | smlatt v5, ip, a4, v5 |
||
68 | smultt a2, ip, a3 |
||
69 | smulbt v7, lr, a3 |
||
70 | sub v6, v6, a2 |
||
71 | smulbt a2, ip, a4 |
||
72 | smultt fp, lr, a3 |
||
73 | sub v7, v7, a2 |
||
74 | smulbt a2, lr, a4 |
||
75 | ldrd a3, a4, [a1, #8] /* a3=row[5:4] a4=row[7:6] */ |
||
76 | sub fp, fp, a2 |
||
77 | |||
78 | orrs a2, a3, a4 |
||
79 | beq 1f |
||
80 | |||
81 | smlabt v5, lr, a3, v5 |
||
82 | smlabt v6, ip, a3, v6 |
||
83 | smlatt v5, lr, a4, v5 |
||
84 | smlabt v6, lr, a4, v6 |
||
85 | smlatt v7, lr, a3, v7 |
||
86 | smlatt fp, ip, a3, fp |
||
87 | smulbt a2, ip, a4 |
||
88 | smlatt v7, ip, a4, v7 |
||
89 | sub fp, fp, a2 |
||
90 | |||
91 | ldr ip, =W26 /* ip = W2 | (W6 << 16) */ |
||
92 | mov a2, #16384 |
||
93 | sub a2, a2, #1 /* a2 = W4 */ |
||
94 | smulbb a2, a2, a3 /* a2 = W4*row[4] */ |
||
95 | smultb lr, ip, a4 /* lr = W6*row[6] */ |
||
96 | add v1, v1, a2 /* v1 += W4*row[4] */ |
||
97 | add v1, v1, lr /* v1 += W6*row[6] */ |
||
98 | add v4, v4, a2 /* v4 += W4*row[4] */ |
||
99 | sub v4, v4, lr /* v4 -= W6*row[6] */ |
||
100 | smulbb lr, ip, a4 /* lr = W2*row[6] */ |
||
101 | sub v2, v2, a2 /* v2 -= W4*row[4] */ |
||
102 | sub v2, v2, lr /* v2 -= W2*row[6] */ |
||
103 | sub v3, v3, a2 /* v3 -= W4*row[4] */ |
||
104 | add v3, v3, lr /* v3 += W2*row[6] */ |
||
105 | |||
106 | 1: add a2, v1, v5 |
||
107 | mov a3, a2, lsr #11 |
||
108 | bic a3, a3, #0x1f0000 |
||
109 | sub a2, v2, v6 |
||
110 | mov a2, a2, lsr #11 |
||
111 | add a3, a3, a2, lsl #16 |
||
112 | add a2, v3, v7 |
||
113 | mov a4, a2, lsr #11 |
||
114 | bic a4, a4, #0x1f0000 |
||
115 | add a2, v4, fp |
||
116 | mov a2, a2, lsr #11 |
||
117 | add a4, a4, a2, lsl #16 |
||
118 | strd a3, a4, [a1] |
||
119 | |||
120 | sub a2, v4, fp |
||
121 | mov a3, a2, lsr #11 |
||
122 | bic a3, a3, #0x1f0000 |
||
123 | sub a2, v3, v7 |
||
124 | mov a2, a2, lsr #11 |
||
125 | add a3, a3, a2, lsl #16 |
||
126 | add a2, v2, v6 |
||
127 | mov a4, a2, lsr #11 |
||
128 | bic a4, a4, #0x1f0000 |
||
129 | sub a2, v1, v5 |
||
130 | mov a2, a2, lsr #11 |
||
131 | add a4, a4, a2, lsl #16 |
||
132 | strd a3, a4, [a1, #8] |
||
133 | |||
134 | ldr pc, [sp], #4 |
||
135 | |||
136 | row_dc_only: |
||
137 | orr a3, a3, a3, lsl #16 |
||
138 | bic a3, a3, #0xe000 |
||
139 | mov a3, a3, lsl #3 |
||
140 | mov a4, a3 |
||
141 | strd a3, a4, [a1] |
||
142 | strd a3, a4, [a1, #8] |
||
143 | |||
144 | ldr pc, [sp], #4 |
||
145 | endfunc |
||
146 | |||
147 | .macro idct_col |
||
148 | ldr a4, [a1] /* a4 = col[1:0] */ |
||
149 | mov ip, #16384 |
||
150 | sub ip, ip, #1 /* ip = W4 */ |
||
151 | #if 0 |
||
152 | mov v1, #(1<<(COL_SHIFT-1)) |
||
153 | smlabt v2, ip, a4, v1 /* v2 = W4*col[1] + (1<<(COL_SHIFT-1)) */ |
||
154 | smlabb v1, ip, a4, v1 /* v1 = W4*col[0] + (1<<(COL_SHIFT-1)) */ |
||
155 | ldr a4, [a1, #(16*4)] |
||
156 | #else |
||
157 | mov v1, #((1<<(COL_SHIFT-1))/W4) /* this matches the C version */ |
||
158 | add v2, v1, a4, asr #16 |
||
159 | rsb v2, v2, v2, lsl #14 |
||
160 | mov a4, a4, lsl #16 |
||
161 | add v1, v1, a4, asr #16 |
||
162 | ldr a4, [a1, #(16*4)] |
||
163 | rsb v1, v1, v1, lsl #14 |
||
164 | #endif |
||
165 | |||
166 | smulbb lr, ip, a4 |
||
167 | smulbt a3, ip, a4 |
||
168 | sub v3, v1, lr |
||
169 | sub v5, v1, lr |
||
170 | add v7, v1, lr |
||
171 | add v1, v1, lr |
||
172 | sub v4, v2, a3 |
||
173 | sub v6, v2, a3 |
||
174 | add fp, v2, a3 |
||
175 | ldr ip, =W26 |
||
176 | ldr a4, [a1, #(16*2)] |
||
177 | add v2, v2, a3 |
||
178 | |||
179 | smulbb lr, ip, a4 |
||
180 | smultb a3, ip, a4 |
||
181 | add v1, v1, lr |
||
182 | sub v7, v7, lr |
||
183 | add v3, v3, a3 |
||
184 | sub v5, v5, a3 |
||
185 | smulbt lr, ip, a4 |
||
186 | smultt a3, ip, a4 |
||
187 | add v2, v2, lr |
||
188 | sub fp, fp, lr |
||
189 | add v4, v4, a3 |
||
190 | ldr a4, [a1, #(16*6)] |
||
191 | sub v6, v6, a3 |
||
192 | |||
193 | smultb lr, ip, a4 |
||
194 | smulbb a3, ip, a4 |
||
195 | add v1, v1, lr |
||
196 | sub v7, v7, lr |
||
197 | sub v3, v3, a3 |
||
198 | add v5, v5, a3 |
||
199 | smultt lr, ip, a4 |
||
200 | smulbt a3, ip, a4 |
||
201 | add v2, v2, lr |
||
202 | sub fp, fp, lr |
||
203 | sub v4, v4, a3 |
||
204 | add v6, v6, a3 |
||
205 | |||
206 | stmfd sp!, {v1, v2, v3, v4, v5, v6, v7, fp} |
||
207 | |||
208 | ldr ip, =W13 |
||
209 | ldr a4, [a1, #(16*1)] |
||
210 | ldr lr, =W57 |
||
211 | smulbb v1, ip, a4 |
||
212 | smultb v3, ip, a4 |
||
213 | smulbb v5, lr, a4 |
||
214 | smultb v7, lr, a4 |
||
215 | smulbt v2, ip, a4 |
||
216 | smultt v4, ip, a4 |
||
217 | smulbt v6, lr, a4 |
||
218 | smultt fp, lr, a4 |
||
219 | rsb v4, v4, #0 |
||
220 | ldr a4, [a1, #(16*3)] |
||
221 | rsb v3, v3, #0 |
||
222 | |||
223 | smlatb v1, ip, a4, v1 |
||
224 | smlatb v3, lr, a4, v3 |
||
225 | smulbb a3, ip, a4 |
||
226 | smulbb a2, lr, a4 |
||
227 | sub v5, v5, a3 |
||
228 | sub v7, v7, a2 |
||
229 | smlatt v2, ip, a4, v2 |
||
230 | smlatt v4, lr, a4, v4 |
||
231 | smulbt a3, ip, a4 |
||
232 | smulbt a2, lr, a4 |
||
233 | sub v6, v6, a3 |
||
234 | ldr a4, [a1, #(16*5)] |
||
235 | sub fp, fp, a2 |
||
236 | |||
237 | smlabb v1, lr, a4, v1 |
||
238 | smlabb v3, ip, a4, v3 |
||
239 | smlatb v5, lr, a4, v5 |
||
240 | smlatb v7, ip, a4, v7 |
||
241 | smlabt v2, lr, a4, v2 |
||
242 | smlabt v4, ip, a4, v4 |
||
243 | smlatt v6, lr, a4, v6 |
||
244 | ldr a3, [a1, #(16*7)] |
||
245 | smlatt fp, ip, a4, fp |
||
246 | |||
247 | smlatb v1, lr, a3, v1 |
||
248 | smlabb v3, lr, a3, v3 |
||
249 | smlatb v5, ip, a3, v5 |
||
250 | smulbb a4, ip, a3 |
||
251 | smlatt v2, lr, a3, v2 |
||
252 | sub v7, v7, a4 |
||
253 | smlabt v4, lr, a3, v4 |
||
254 | smulbt a4, ip, a3 |
||
255 | smlatt v6, ip, a3, v6 |
||
256 | sub fp, fp, a4 |
||
257 | .endm |
||
258 | |||
259 | function idct_col_armv5te |
||
260 | str lr, [sp, #-4]! |
||
261 | |||
262 | idct_col |
||
263 | |||
264 | ldmfd sp!, {a3, a4} |
||
265 | adds a2, a3, v1 |
||
266 | mov a2, a2, lsr #20 |
||
267 | it mi |
||
268 | orrmi a2, a2, #0xf000 |
||
269 | add ip, a4, v2 |
||
270 | mov ip, ip, asr #20 |
||
271 | orr a2, a2, ip, lsl #16 |
||
272 | str a2, [a1] |
||
273 | subs a3, a3, v1 |
||
274 | mov a2, a3, lsr #20 |
||
275 | it mi |
||
276 | orrmi a2, a2, #0xf000 |
||
277 | sub a4, a4, v2 |
||
278 | mov a4, a4, asr #20 |
||
279 | orr a2, a2, a4, lsl #16 |
||
280 | ldmfd sp!, {a3, a4} |
||
281 | str a2, [a1, #(16*7)] |
||
282 | |||
283 | subs a2, a3, v3 |
||
284 | mov a2, a2, lsr #20 |
||
285 | it mi |
||
286 | orrmi a2, a2, #0xf000 |
||
287 | sub ip, a4, v4 |
||
288 | mov ip, ip, asr #20 |
||
289 | orr a2, a2, ip, lsl #16 |
||
290 | str a2, [a1, #(16*1)] |
||
291 | adds a3, a3, v3 |
||
292 | mov a2, a3, lsr #20 |
||
293 | it mi |
||
294 | orrmi a2, a2, #0xf000 |
||
295 | add a4, a4, v4 |
||
296 | mov a4, a4, asr #20 |
||
297 | orr a2, a2, a4, lsl #16 |
||
298 | ldmfd sp!, {a3, a4} |
||
299 | str a2, [a1, #(16*6)] |
||
300 | |||
301 | adds a2, a3, v5 |
||
302 | mov a2, a2, lsr #20 |
||
303 | it mi |
||
304 | orrmi a2, a2, #0xf000 |
||
305 | add ip, a4, v6 |
||
306 | mov ip, ip, asr #20 |
||
307 | orr a2, a2, ip, lsl #16 |
||
308 | str a2, [a1, #(16*2)] |
||
309 | subs a3, a3, v5 |
||
310 | mov a2, a3, lsr #20 |
||
311 | it mi |
||
312 | orrmi a2, a2, #0xf000 |
||
313 | sub a4, a4, v6 |
||
314 | mov a4, a4, asr #20 |
||
315 | orr a2, a2, a4, lsl #16 |
||
316 | ldmfd sp!, {a3, a4} |
||
317 | str a2, [a1, #(16*5)] |
||
318 | |||
319 | adds a2, a3, v7 |
||
320 | mov a2, a2, lsr #20 |
||
321 | it mi |
||
322 | orrmi a2, a2, #0xf000 |
||
323 | add ip, a4, fp |
||
324 | mov ip, ip, asr #20 |
||
325 | orr a2, a2, ip, lsl #16 |
||
326 | str a2, [a1, #(16*3)] |
||
327 | subs a3, a3, v7 |
||
328 | mov a2, a3, lsr #20 |
||
329 | it mi |
||
330 | orrmi a2, a2, #0xf000 |
||
331 | sub a4, a4, fp |
||
332 | mov a4, a4, asr #20 |
||
333 | orr a2, a2, a4, lsl #16 |
||
334 | str a2, [a1, #(16*4)] |
||
335 | |||
336 | ldr pc, [sp], #4 |
||
337 | endfunc |
||
338 | |||
339 | .macro clip dst, src:vararg |
||
340 | movs \dst, \src |
||
341 | it mi |
||
342 | movmi \dst, #0 |
||
343 | cmp \dst, #255 |
||
344 | it gt |
||
345 | movgt \dst, #255 |
||
346 | .endm |
||
347 | |||
348 | .macro aclip dst, src:vararg |
||
349 | adds \dst, \src |
||
350 | it mi |
||
351 | movmi \dst, #0 |
||
352 | cmp \dst, #255 |
||
353 | it gt |
||
354 | movgt \dst, #255 |
||
355 | .endm |
||
356 | |||
357 | function idct_col_put_armv5te |
||
358 | str lr, [sp, #-4]! |
||
359 | |||
360 | idct_col |
||
361 | |||
362 | ldmfd sp!, {a3, a4} |
||
363 | ldr lr, [sp, #32] |
||
364 | add a2, a3, v1 |
||
365 | clip a2, a2, asr #20 |
||
366 | add ip, a4, v2 |
||
367 | clip ip, ip, asr #20 |
||
368 | orr a2, a2, ip, lsl #8 |
||
369 | sub a3, a3, v1 |
||
370 | clip a3, a3, asr #20 |
||
371 | sub a4, a4, v2 |
||
372 | clip a4, a4, asr #20 |
||
373 | ldr v1, [sp, #28] |
||
374 | strh a2, [v1] |
||
375 | add a2, v1, #2 |
||
376 | str a2, [sp, #28] |
||
377 | orr a2, a3, a4, lsl #8 |
||
378 | rsb v2, lr, lr, lsl #3 |
||
379 | ldmfd sp!, {a3, a4} |
||
380 | strh_pre a2, v2, v1 |
||
381 | |||
382 | sub a2, a3, v3 |
||
383 | clip a2, a2, asr #20 |
||
384 | sub ip, a4, v4 |
||
385 | clip ip, ip, asr #20 |
||
386 | orr a2, a2, ip, lsl #8 |
||
387 | strh_pre a2, v1, lr |
||
388 | add a3, a3, v3 |
||
389 | clip a2, a3, asr #20 |
||
390 | add a4, a4, v4 |
||
391 | clip a4, a4, asr #20 |
||
392 | orr a2, a2, a4, lsl #8 |
||
393 | ldmfd sp!, {a3, a4} |
||
394 | strh_dpre a2, v2, lr |
||
395 | |||
396 | add a2, a3, v5 |
||
397 | clip a2, a2, asr #20 |
||
398 | add ip, a4, v6 |
||
399 | clip ip, ip, asr #20 |
||
400 | orr a2, a2, ip, lsl #8 |
||
401 | strh_pre a2, v1, lr |
||
402 | sub a3, a3, v5 |
||
403 | clip a2, a3, asr #20 |
||
404 | sub a4, a4, v6 |
||
405 | clip a4, a4, asr #20 |
||
406 | orr a2, a2, a4, lsl #8 |
||
407 | ldmfd sp!, {a3, a4} |
||
408 | strh_dpre a2, v2, lr |
||
409 | |||
410 | add a2, a3, v7 |
||
411 | clip a2, a2, asr #20 |
||
412 | add ip, a4, fp |
||
413 | clip ip, ip, asr #20 |
||
414 | orr a2, a2, ip, lsl #8 |
||
415 | strh a2, [v1, lr] |
||
416 | sub a3, a3, v7 |
||
417 | clip a2, a3, asr #20 |
||
418 | sub a4, a4, fp |
||
419 | clip a4, a4, asr #20 |
||
420 | orr a2, a2, a4, lsl #8 |
||
421 | strh_dpre a2, v2, lr |
||
422 | |||
423 | ldr pc, [sp], #4 |
||
424 | endfunc |
||
425 | |||
426 | function idct_col_add_armv5te |
||
427 | str lr, [sp, #-4]! |
||
428 | |||
429 | idct_col |
||
430 | |||
431 | ldr lr, [sp, #36] |
||
432 | |||
433 | ldmfd sp!, {a3, a4} |
||
434 | ldrh ip, [lr] |
||
435 | add a2, a3, v1 |
||
436 | sub a3, a3, v1 |
||
437 | and v1, ip, #255 |
||
438 | aclip a2, v1, a2, asr #20 |
||
439 | add v1, a4, v2 |
||
440 | mov v1, v1, asr #20 |
||
441 | aclip v1, v1, ip, lsr #8 |
||
442 | orr a2, a2, v1, lsl #8 |
||
443 | ldr v1, [sp, #32] |
||
444 | sub a4, a4, v2 |
||
445 | rsb v2, v1, v1, lsl #3 |
||
446 | ldrh_pre ip, v2, lr |
||
447 | strh a2, [lr] |
||
448 | and a2, ip, #255 |
||
449 | aclip a3, a2, a3, asr #20 |
||
450 | mov a4, a4, asr #20 |
||
451 | aclip a4, a4, ip, lsr #8 |
||
452 | add a2, lr, #2 |
||
453 | str a2, [sp, #28] |
||
454 | orr a2, a3, a4, lsl #8 |
||
455 | strh a2, [v2] |
||
456 | |||
457 | ldmfd sp!, {a3, a4} |
||
458 | ldrh_pre ip, lr, v1 |
||
459 | sub a2, a3, v3 |
||
460 | add a3, a3, v3 |
||
461 | and v3, ip, #255 |
||
462 | aclip a2, v3, a2, asr #20 |
||
463 | sub v3, a4, v4 |
||
464 | mov v3, v3, asr #20 |
||
465 | aclip v3, v3, ip, lsr #8 |
||
466 | orr a2, a2, v3, lsl #8 |
||
467 | add a4, a4, v4 |
||
468 | ldrh_dpre ip, v2, v1 |
||
469 | strh a2, [lr] |
||
470 | and a2, ip, #255 |
||
471 | aclip a3, a2, a3, asr #20 |
||
472 | mov a4, a4, asr #20 |
||
473 | aclip a4, a4, ip, lsr #8 |
||
474 | orr a2, a3, a4, lsl #8 |
||
475 | strh a2, [v2] |
||
476 | |||
477 | ldmfd sp!, {a3, a4} |
||
478 | ldrh_pre ip, lr, v1 |
||
479 | add a2, a3, v5 |
||
480 | sub a3, a3, v5 |
||
481 | and v3, ip, #255 |
||
482 | aclip a2, v3, a2, asr #20 |
||
483 | add v3, a4, v6 |
||
484 | mov v3, v3, asr #20 |
||
485 | aclip v3, v3, ip, lsr #8 |
||
486 | orr a2, a2, v3, lsl #8 |
||
487 | sub a4, a4, v6 |
||
488 | ldrh_dpre ip, v2, v1 |
||
489 | strh a2, [lr] |
||
490 | and a2, ip, #255 |
||
491 | aclip a3, a2, a3, asr #20 |
||
492 | mov a4, a4, asr #20 |
||
493 | aclip a4, a4, ip, lsr #8 |
||
494 | orr a2, a3, a4, lsl #8 |
||
495 | strh a2, [v2] |
||
496 | |||
497 | ldmfd sp!, {a3, a4} |
||
498 | ldrh_pre ip, lr, v1 |
||
499 | add a2, a3, v7 |
||
500 | sub a3, a3, v7 |
||
501 | and v3, ip, #255 |
||
502 | aclip a2, v3, a2, asr #20 |
||
503 | add v3, a4, fp |
||
504 | mov v3, v3, asr #20 |
||
505 | aclip v3, v3, ip, lsr #8 |
||
506 | orr a2, a2, v3, lsl #8 |
||
507 | sub a4, a4, fp |
||
508 | ldrh_dpre ip, v2, v1 |
||
509 | strh a2, [lr] |
||
510 | and a2, ip, #255 |
||
511 | aclip a3, a2, a3, asr #20 |
||
512 | mov a4, a4, asr #20 |
||
513 | aclip a4, a4, ip, lsr #8 |
||
514 | orr a2, a3, a4, lsl #8 |
||
515 | strh a2, [v2] |
||
516 | |||
517 | ldr pc, [sp], #4 |
||
518 | endfunc |
||
519 | |||
520 | function ff_simple_idct_armv5te, export=1 |
||
521 | stmfd sp!, {v1, v2, v3, v4, v5, v6, v7, fp, lr} |
||
522 | |||
523 | bl idct_row_armv5te |
||
524 | add a1, a1, #16 |
||
525 | bl idct_row_armv5te |
||
526 | add a1, a1, #16 |
||
527 | bl idct_row_armv5te |
||
528 | add a1, a1, #16 |
||
529 | bl idct_row_armv5te |
||
530 | add a1, a1, #16 |
||
531 | bl idct_row_armv5te |
||
532 | add a1, a1, #16 |
||
533 | bl idct_row_armv5te |
||
534 | add a1, a1, #16 |
||
535 | bl idct_row_armv5te |
||
536 | add a1, a1, #16 |
||
537 | bl idct_row_armv5te |
||
538 | |||
539 | sub a1, a1, #(16*7) |
||
540 | |||
541 | bl idct_col_armv5te |
||
542 | add a1, a1, #4 |
||
543 | bl idct_col_armv5te |
||
544 | add a1, a1, #4 |
||
545 | bl idct_col_armv5te |
||
546 | add a1, a1, #4 |
||
547 | bl idct_col_armv5te |
||
548 | |||
549 | ldmfd sp!, {v1, v2, v3, v4, v5, v6, v7, fp, pc} |
||
550 | endfunc |
||
551 | |||
552 | function ff_simple_idct_add_armv5te, export=1 |
||
553 | stmfd sp!, {a1, a2, v1, v2, v3, v4, v5, v6, v7, fp, lr} |
||
554 | |||
555 | mov a1, a3 |
||
556 | |||
557 | bl idct_row_armv5te |
||
558 | add a1, a1, #16 |
||
559 | bl idct_row_armv5te |
||
560 | add a1, a1, #16 |
||
561 | bl idct_row_armv5te |
||
562 | add a1, a1, #16 |
||
563 | bl idct_row_armv5te |
||
564 | add a1, a1, #16 |
||
565 | bl idct_row_armv5te |
||
566 | add a1, a1, #16 |
||
567 | bl idct_row_armv5te |
||
568 | add a1, a1, #16 |
||
569 | bl idct_row_armv5te |
||
570 | add a1, a1, #16 |
||
571 | bl idct_row_armv5te |
||
572 | |||
573 | sub a1, a1, #(16*7) |
||
574 | |||
575 | bl idct_col_add_armv5te |
||
576 | add a1, a1, #4 |
||
577 | bl idct_col_add_armv5te |
||
578 | add a1, a1, #4 |
||
579 | bl idct_col_add_armv5te |
||
580 | add a1, a1, #4 |
||
581 | bl idct_col_add_armv5te |
||
582 | |||
583 | add sp, sp, #8 |
||
584 | ldmfd sp!, {v1, v2, v3, v4, v5, v6, v7, fp, pc} |
||
585 | endfunc |
||
586 | |||
587 | function ff_simple_idct_put_armv5te, export=1 |
||
588 | stmfd sp!, {a1, a2, v1, v2, v3, v4, v5, v6, v7, fp, lr} |
||
589 | |||
590 | mov a1, a3 |
||
591 | |||
592 | bl idct_row_armv5te |
||
593 | add a1, a1, #16 |
||
594 | bl idct_row_armv5te |
||
595 | add a1, a1, #16 |
||
596 | bl idct_row_armv5te |
||
597 | add a1, a1, #16 |
||
598 | bl idct_row_armv5te |
||
599 | add a1, a1, #16 |
||
600 | bl idct_row_armv5te |
||
601 | add a1, a1, #16 |
||
602 | bl idct_row_armv5te |
||
603 | add a1, a1, #16 |
||
604 | bl idct_row_armv5te |
||
605 | add a1, a1, #16 |
||
606 | bl idct_row_armv5te |
||
607 | |||
608 | sub a1, a1, #(16*7) |
||
609 | |||
610 | bl idct_col_put_armv5te |
||
611 | add a1, a1, #4 |
||
612 | bl idct_col_put_armv5te |
||
613 | add a1, a1, #4 |
||
614 | bl idct_col_put_armv5te |
||
615 | add a1, a1, #4 |
||
616 | bl idct_col_put_armv5te |
||
617 | |||
618 | add sp, sp, #8 |
||
619 | ldmfd sp!, {v1, v2, v3, v4, v5, v6, v7, fp, pc} |
||
620 | endfunc(COL_SHIFT-1))/W4)><(COL_SHIFT-1))/W4)>(COL_SHIFT-1))><(COL_SHIFT-1))>(COL_SHIFT-1))><(COL_SHIFT-1))>(COL_SHIFT-1)) |