ARM: replace some #if with if()
[ffmpeg.git] / libavcodec / arm / simple_idct_armv5te.S
1 /*
2  * Simple IDCT
3  *
4  * Copyright (c) 2001 Michael Niedermayer <michaelni@gmx.at>
5  * Copyright (c) 2006 Mans Rullgard <mans@mansr.com>
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 "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         .text
41         .align
42 w13:    .long W13
43 w26:    .long W26
44 w57:    .long W57
45
46 function idct_row_armv5te
47         str    lr, [sp, #-4]!
48
49         ldrd   v1, [a1, #8]
50         ldrd   a3, [a1]              /* a3 = row[1:0], a4 = row[3:2] */
51         orrs   v1, v1, v2
52         cmpeq  v1, a4
53         cmpeq  v1, a3, lsr #16
54         beq    row_dc_only
55
56         mov    v1, #(1<<(ROW_SHIFT-1))
57         mov    ip, #16384
58         sub    ip, ip, #1            /* ip = W4 */
59         smlabb v1, ip, a3, v1        /* v1 = W4*row[0]+(1<<(RS-1)) */
60         ldr    ip, w26               /* ip = W2 | (W6 << 16) */
61         smultb a2, ip, a4
62         smulbb lr, ip, a4
63         add    v2, v1, a2
64         sub    v3, v1, a2
65         sub    v4, v1, lr
66         add    v1, v1, lr
67
68         ldr    ip, w13               /* ip = W1 | (W3 << 16) */
69         ldr    lr, w57               /* lr = W5 | (W7 << 16) */
70         smulbt v5, ip, a3
71         smultt v6, lr, a4
72         smlatt v5, ip, a4, v5
73         smultt a2, ip, a3
74         smulbt v7, lr, a3
75         sub    v6, v6, a2
76         smulbt a2, ip, a4
77         smultt fp, lr, a3
78         sub    v7, v7, a2
79         smulbt a2, lr, a4
80         ldrd   a3, [a1, #8]          /* a3=row[5:4] a4=row[7:6] */
81         sub    fp, fp, a2
82
83         orrs   a2, a3, a4
84         beq    1f
85
86         smlabt v5, lr, a3, v5
87         smlabt v6, ip, a3, v6
88         smlatt v5, lr, a4, v5
89         smlabt v6, lr, a4, v6
90         smlatt v7, lr, a3, v7
91         smlatt fp, ip, a3, fp
92         smulbt a2, ip, a4
93         smlatt v7, ip, a4, v7
94         sub    fp, fp, a2
95
96         ldr    ip, w26               /* ip = W2 | (W6 << 16) */
97         mov    a2, #16384
98         sub    a2, a2, #1            /* a2 =  W4 */
99         smulbb a2, a2, a3            /* a2 =  W4*row[4] */
100         smultb lr, ip, a4            /* lr =  W6*row[6] */
101         add    v1, v1, a2            /* v1 += W4*row[4] */
102         add    v1, v1, lr            /* v1 += W6*row[6] */
103         add    v4, v4, a2            /* v4 += W4*row[4] */
104         sub    v4, v4, lr            /* v4 -= W6*row[6] */
105         smulbb lr, ip, a4            /* lr =  W2*row[6] */
106         sub    v2, v2, a2            /* v2 -= W4*row[4] */
107         sub    v2, v2, lr            /* v2 -= W2*row[6] */
108         sub    v3, v3, a2            /* v3 -= W4*row[4] */
109         add    v3, v3, lr            /* v3 += W2*row[6] */
110
111 1:      add    a2, v1, v5
112         mov    a3, a2, lsr #11
113         bic    a3, a3, #0x1f0000
114         sub    a2, v2, v6
115         mov    a2, a2, lsr #11
116         add    a3, a3, a2, lsl #16
117         add    a2, v3, v7
118         mov    a4, a2, lsr #11
119         bic    a4, a4, #0x1f0000
120         add    a2, v4, fp
121         mov    a2, a2, lsr #11
122         add    a4, a4, a2, lsl #16
123         strd   a3, [a1]
124
125         sub    a2, v4, fp
126         mov    a3, a2, lsr #11
127         bic    a3, a3, #0x1f0000
128         sub    a2, v3, v7
129         mov    a2, a2, lsr #11
130         add    a3, a3, a2, lsl #16
131         add    a2, v2, v6
132         mov    a4, a2, lsr #11
133         bic    a4, a4, #0x1f0000
134         sub    a2, v1, v5
135         mov    a2, a2, lsr #11
136         add    a4, a4, a2, lsl #16
137         strd   a3, [a1, #8]
138
139         ldr    pc, [sp], #4
140
141 row_dc_only:
142         orr    a3, a3, a3, lsl #16
143         bic    a3, a3, #0xe000
144         mov    a3, a3, lsl #3
145         mov    a4, a3
146         strd   a3, [a1]
147         strd   a3, [a1, #8]
148
149         ldr    pc, [sp], #4
150         .endfunc
151
152         .macro idct_col
153         ldr    a4, [a1]              /* a4 = col[1:0] */
154         mov    ip, #16384
155         sub    ip, ip, #1            /* ip = W4 */
156 #if 0
157         mov    v1, #(1<<(COL_SHIFT-1))
158         smlabt v2, ip, a4, v1        /* v2 = W4*col[1] + (1<<(COL_SHIFT-1)) */
159         smlabb v1, ip, a4, v1        /* v1 = W4*col[0] + (1<<(COL_SHIFT-1)) */
160         ldr    a4, [a1, #(16*4)]
161 #else
162         mov    v1, #((1<<(COL_SHIFT-1))/W4) /* this matches the C version */
163         add    v2, v1, a4, asr #16
164         rsb    v2, v2, v2, lsl #14
165         mov    a4, a4, lsl #16
166         add    v1, v1, a4, asr #16
167         ldr    a4, [a1, #(16*4)]
168         rsb    v1, v1, v1, lsl #14
169 #endif
170
171         smulbb lr, ip, a4
172         smulbt a3, ip, a4
173         sub    v3, v1, lr
174         sub    v5, v1, lr
175         add    v7, v1, lr
176         add    v1, v1, lr
177         sub    v4, v2, a3
178         sub    v6, v2, a3
179         add    fp, v2, a3
180         ldr    ip, w26
181         ldr    a4, [a1, #(16*2)]
182         add    v2, v2, a3
183
184         smulbb lr, ip, a4
185         smultb a3, ip, a4
186         add    v1, v1, lr
187         sub    v7, v7, lr
188         add    v3, v3, a3
189         sub    v5, v5, a3
190         smulbt lr, ip, a4
191         smultt a3, ip, a4
192         add    v2, v2, lr
193         sub    fp, fp, lr
194         add    v4, v4, a3
195         ldr    a4, [a1, #(16*6)]
196         sub    v6, v6, a3
197
198         smultb lr, ip, a4
199         smulbb a3, ip, a4
200         add    v1, v1, lr
201         sub    v7, v7, lr
202         sub    v3, v3, a3
203         add    v5, v5, a3
204         smultt lr, ip, a4
205         smulbt a3, ip, a4
206         add    v2, v2, lr
207         sub    fp, fp, lr
208         sub    v4, v4, a3
209         add    v6, v6, a3
210
211         stmfd  sp!, {v1, v2, v3, v4, v5, v6, v7, fp}
212
213         ldr    ip, w13
214         ldr    a4, [a1, #(16*1)]
215         ldr    lr, w57
216         smulbb v1, ip, a4
217         smultb v3, ip, a4
218         smulbb v5, lr, a4
219         smultb v7, lr, a4
220         smulbt v2, ip, a4
221         smultt v4, ip, a4
222         smulbt v6, lr, a4
223         smultt fp, lr, a4
224         rsb    v4, v4, #0
225         ldr    a4, [a1, #(16*3)]
226         rsb    v3, v3, #0
227
228         smlatb v1, ip, a4, v1
229         smlatb v3, lr, a4, v3
230         smulbb a3, ip, a4
231         smulbb a2, lr, a4
232         sub    v5, v5, a3
233         sub    v7, v7, a2
234         smlatt v2, ip, a4, v2
235         smlatt v4, lr, a4, v4
236         smulbt a3, ip, a4
237         smulbt a2, lr, a4
238         sub    v6, v6, a3
239         ldr    a4, [a1, #(16*5)]
240         sub    fp, fp, a2
241
242         smlabb v1, lr, a4, v1
243         smlabb v3, ip, a4, v3
244         smlatb v5, lr, a4, v5
245         smlatb v7, ip, a4, v7
246         smlabt v2, lr, a4, v2
247         smlabt v4, ip, a4, v4
248         smlatt v6, lr, a4, v6
249         ldr    a3, [a1, #(16*7)]
250         smlatt fp, ip, a4, fp
251
252         smlatb v1, lr, a3, v1
253         smlabb v3, lr, a3, v3
254         smlatb v5, ip, a3, v5
255         smulbb a4, ip, a3
256         smlatt v2, lr, a3, v2
257         sub    v7, v7, a4
258         smlabt v4, lr, a3, v4
259         smulbt a4, ip, a3
260         smlatt v6, ip, a3, v6
261         sub    fp, fp, a4
262         .endm
263
264 function idct_col_armv5te
265         str    lr, [sp, #-4]!
266
267         idct_col
268
269         ldmfd  sp!, {a3, a4}
270         adds   a2, a3, v1
271         mov    a2, a2, lsr #20
272         orrmi  a2, a2, #0xf000
273         add    ip, a4, v2
274         mov    ip, ip, asr #20
275         orr    a2, a2, ip, lsl #16
276         str    a2, [a1]
277         subs   a3, a3, v1
278         mov    a2, a3, lsr #20
279         orrmi  a2, a2, #0xf000
280         sub    a4, a4, v2
281         mov    a4, a4, asr #20
282         orr    a2, a2, a4, lsl #16
283         ldmfd  sp!, {a3, a4}
284         str    a2, [a1, #(16*7)]
285
286         subs   a2, a3, v3
287         mov    a2, a2, lsr #20
288         orrmi  a2, a2, #0xf000
289         sub    ip, a4, v4
290         mov    ip, ip, asr #20
291         orr    a2, a2, ip, lsl #16
292         str    a2, [a1, #(16*1)]
293         adds   a3, a3, v3
294         mov    a2, a3, lsr #20
295         orrmi  a2, a2, #0xf000
296         add    a4, a4, v4
297         mov    a4, a4, asr #20
298         orr    a2, a2, a4, lsl #16
299         ldmfd  sp!, {a3, a4}
300         str    a2, [a1, #(16*6)]
301
302         adds   a2, a3, v5
303         mov    a2, a2, lsr #20
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         orrmi  a2, a2, #0xf000
312         sub    a4, a4, v6
313         mov    a4, a4, asr #20
314         orr    a2, a2, a4, lsl #16
315         ldmfd  sp!, {a3, a4}
316         str    a2, [a1, #(16*5)]
317
318         adds   a2, a3, v7
319         mov    a2, a2, lsr #20
320         orrmi  a2, a2, #0xf000
321         add    ip, a4, fp
322         mov    ip, ip, asr #20
323         orr    a2, a2, ip, lsl #16
324         str    a2, [a1, #(16*3)]
325         subs   a3, a3, v7
326         mov    a2, a3, lsr #20
327         orrmi  a2, a2, #0xf000
328         sub    a4, a4, fp
329         mov    a4, a4, asr #20
330         orr    a2, a2, a4, lsl #16
331         str    a2, [a1, #(16*4)]
332
333         ldr    pc, [sp], #4
334         .endfunc
335
336 function idct_col_put_armv5te
337         str    lr, [sp, #-4]!
338
339         idct_col
340
341         ldmfd  sp!, {a3, a4}
342         ldr    lr, [sp, #32]
343         add    a2, a3, v1
344         movs   a2, a2, asr #20
345         movmi  a2, #0
346         cmp    a2, #255
347         movgt  a2, #255
348         add    ip, a4, v2
349         movs   ip, ip, asr #20
350         movmi  ip, #0
351         cmp    ip, #255
352         movgt  ip, #255
353         orr    a2, a2, ip, lsl #8
354         sub    a3, a3, v1
355         movs   a3, a3, asr #20
356         movmi  a3, #0
357         cmp    a3, #255
358         movgt  a3, #255
359         sub    a4, a4, v2
360         movs   a4, a4, asr #20
361         movmi  a4, #0
362         cmp    a4, #255
363         ldr    v1, [sp, #28]
364         movgt  a4, #255
365         strh   a2, [v1]
366         add    a2, v1, #2
367         str    a2, [sp, #28]
368         orr    a2, a3, a4, lsl #8
369         rsb    v2, lr, lr, lsl #3
370         ldmfd  sp!, {a3, a4}
371         strh   a2, [v2, v1]!
372
373         sub    a2, a3, v3
374         movs   a2, a2, asr #20
375         movmi  a2, #0
376         cmp    a2, #255
377         movgt  a2, #255
378         sub    ip, a4, v4
379         movs   ip, ip, asr #20
380         movmi  ip, #0
381         cmp    ip, #255
382         movgt  ip, #255
383         orr    a2, a2, ip, lsl #8
384         strh   a2, [v1, lr]!
385         add    a3, a3, v3
386         movs   a2, a3, asr #20
387         movmi  a2, #0
388         cmp    a2, #255
389         movgt  a2, #255
390         add    a4, a4, v4
391         movs   a4, a4, asr #20
392         movmi  a4, #0
393         cmp    a4, #255
394         movgt  a4, #255
395         orr    a2, a2, a4, lsl #8
396         ldmfd  sp!, {a3, a4}
397         strh   a2, [v2, -lr]!
398
399         add    a2, a3, v5
400         movs   a2, a2, asr #20
401         movmi  a2, #0
402         cmp    a2, #255
403         movgt  a2, #255
404         add    ip, a4, v6
405         movs   ip, ip, asr #20
406         movmi  ip, #0
407         cmp    ip, #255
408         movgt  ip, #255
409         orr    a2, a2, ip, lsl #8
410         strh   a2, [v1, lr]!
411         sub    a3, a3, v5
412         movs   a2, a3, asr #20
413         movmi  a2, #0
414         cmp    a2, #255
415         movgt  a2, #255
416         sub    a4, a4, v6
417         movs   a4, a4, asr #20
418         movmi  a4, #0
419         cmp    a4, #255
420         movgt  a4, #255
421         orr    a2, a2, a4, lsl #8
422         ldmfd  sp!, {a3, a4}
423         strh   a2, [v2, -lr]!
424
425         add    a2, a3, v7
426         movs   a2, a2, asr #20
427         movmi  a2, #0
428         cmp    a2, #255
429         movgt  a2, #255
430         add    ip, a4, fp
431         movs   ip, ip, asr #20
432         movmi  ip, #0
433         cmp    ip, #255
434         movgt  ip, #255
435         orr    a2, a2, ip, lsl #8
436         strh   a2, [v1, lr]
437         sub    a3, a3, v7
438         movs   a2, a3, asr #20
439         movmi  a2, #0
440         cmp    a2, #255
441         movgt  a2, #255
442         sub    a4, a4, fp
443         movs   a4, a4, asr #20
444         movmi  a4, #0
445         cmp    a4, #255
446         movgt  a4, #255
447         orr    a2, a2, a4, lsl #8
448         strh   a2, [v2, -lr]
449
450         ldr    pc, [sp], #4
451         .endfunc
452
453 function idct_col_add_armv5te
454         str    lr, [sp, #-4]!
455
456         idct_col
457
458         ldr    lr, [sp, #36]
459
460         ldmfd  sp!, {a3, a4}
461         ldrh   ip, [lr]
462         add    a2, a3, v1
463         mov    a2, a2, asr #20
464         sub    a3, a3, v1
465         and    v1, ip, #255
466         adds   a2, a2, v1
467         movmi  a2, #0
468         cmp    a2, #255
469         movgt  a2, #255
470         add    v1, a4, v2
471         mov    v1, v1, asr #20
472         adds   v1, v1, ip, lsr #8
473         movmi  v1, #0
474         cmp    v1, #255
475         movgt  v1, #255
476         orr    a2, a2, v1, lsl #8
477         ldr    v1, [sp, #32]
478         sub    a4, a4, v2
479         rsb    v2, v1, v1, lsl #3
480         ldrh   ip, [v2, lr]!
481         strh   a2, [lr]
482         mov    a3, a3, asr #20
483         and    a2, ip, #255
484         adds   a3, a3, a2
485         movmi  a3, #0
486         cmp    a3, #255
487         movgt  a3, #255
488         mov    a4, a4, asr #20
489         adds   a4, a4, ip, lsr #8
490         movmi  a4, #0
491         cmp    a4, #255
492         movgt  a4, #255
493         add    a2, lr, #2
494         str    a2, [sp, #28]
495         orr    a2, a3, a4, lsl #8
496         strh   a2, [v2]
497
498         ldmfd  sp!, {a3, a4}
499         ldrh   ip, [lr, v1]!
500         sub    a2, a3, v3
501         mov    a2, a2, asr #20
502         add    a3, a3, v3
503         and    v3, ip, #255
504         adds   a2, a2, v3
505         movmi  a2, #0
506         cmp    a2, #255
507         movgt  a2, #255
508         sub    v3, a4, v4
509         mov    v3, v3, asr #20
510         adds   v3, v3, ip, lsr #8
511         movmi  v3, #0
512         cmp    v3, #255
513         movgt  v3, #255
514         orr    a2, a2, v3, lsl #8
515         add    a4, a4, v4
516         ldrh   ip, [v2, -v1]!
517         strh   a2, [lr]
518         mov    a3, a3, asr #20
519         and    a2, ip, #255
520         adds   a3, a3, a2
521         movmi  a3, #0
522         cmp    a3, #255
523         movgt  a3, #255
524         mov    a4, a4, asr #20
525         adds   a4, a4, ip, lsr #8
526         movmi  a4, #0
527         cmp    a4, #255
528         movgt  a4, #255
529         orr    a2, a3, a4, lsl #8
530         strh   a2, [v2]
531
532         ldmfd  sp!, {a3, a4}
533         ldrh   ip, [lr, v1]!
534         add    a2, a3, v5
535         mov    a2, a2, asr #20
536         sub    a3, a3, v5
537         and    v3, ip, #255
538         adds   a2, a2, v3
539         movmi  a2, #0
540         cmp    a2, #255
541         movgt  a2, #255
542         add    v3, a4, v6
543         mov    v3, v3, asr #20
544         adds   v3, v3, ip, lsr #8
545         movmi  v3, #0
546         cmp    v3, #255
547         movgt  v3, #255
548         orr    a2, a2, v3, lsl #8
549         sub    a4, a4, v6
550         ldrh   ip, [v2, -v1]!
551         strh   a2, [lr]
552         mov    a3, a3, asr #20
553         and    a2, ip, #255
554         adds   a3, a3, a2
555         movmi  a3, #0
556         cmp    a3, #255
557         movgt  a3, #255
558         mov    a4, a4, asr #20
559         adds   a4, a4, ip, lsr #8
560         movmi  a4, #0
561         cmp    a4, #255
562         movgt  a4, #255
563         orr    a2, a3, a4, lsl #8
564         strh   a2, [v2]
565
566         ldmfd  sp!, {a3, a4}
567         ldrh   ip, [lr, v1]!
568         add    a2, a3, v7
569         mov    a2, a2, asr #20
570         sub    a3, a3, v7
571         and    v3, ip, #255
572         adds   a2, a2, v3
573         movmi  a2, #0
574         cmp    a2, #255
575         movgt  a2, #255
576         add    v3, a4, fp
577         mov    v3, v3, asr #20
578         adds   v3, v3, ip, lsr #8
579         movmi  v3, #0
580         cmp    v3, #255
581         movgt  v3, #255
582         orr    a2, a2, v3, lsl #8
583         sub    a4, a4, fp
584         ldrh   ip, [v2, -v1]!
585         strh   a2, [lr]
586         mov    a3, a3, asr #20
587         and    a2, ip, #255
588         adds   a3, a3, a2
589         movmi  a3, #0
590         cmp    a3, #255
591         movgt  a3, #255
592         mov    a4, a4, asr #20
593         adds   a4, a4, ip, lsr #8
594         movmi  a4, #0
595         cmp    a4, #255
596         movgt  a4, #255
597         orr    a2, a3, a4, lsl #8
598         strh   a2, [v2]
599
600         ldr    pc, [sp], #4
601         .endfunc
602
603 function simple_idct_armv5te, export=1
604         stmfd  sp!, {v1, v2, v3, v4, v5, v6, v7, fp, lr}
605
606         bl     idct_row_armv5te
607         add    a1, a1, #16
608         bl     idct_row_armv5te
609         add    a1, a1, #16
610         bl     idct_row_armv5te
611         add    a1, a1, #16
612         bl     idct_row_armv5te
613         add    a1, a1, #16
614         bl     idct_row_armv5te
615         add    a1, a1, #16
616         bl     idct_row_armv5te
617         add    a1, a1, #16
618         bl     idct_row_armv5te
619         add    a1, a1, #16
620         bl     idct_row_armv5te
621
622         sub    a1, a1, #(16*7)
623
624         bl     idct_col_armv5te
625         add    a1, a1, #4
626         bl     idct_col_armv5te
627         add    a1, a1, #4
628         bl     idct_col_armv5te
629         add    a1, a1, #4
630         bl     idct_col_armv5te
631
632         ldmfd  sp!, {v1, v2, v3, v4, v5, v6, v7, fp, pc}
633         .endfunc
634
635 function simple_idct_add_armv5te, export=1
636         stmfd  sp!, {a1, a2, v1, v2, v3, v4, v5, v6, v7, fp, lr}
637
638         mov    a1, a3
639
640         bl     idct_row_armv5te
641         add    a1, a1, #16
642         bl     idct_row_armv5te
643         add    a1, a1, #16
644         bl     idct_row_armv5te
645         add    a1, a1, #16
646         bl     idct_row_armv5te
647         add    a1, a1, #16
648         bl     idct_row_armv5te
649         add    a1, a1, #16
650         bl     idct_row_armv5te
651         add    a1, a1, #16
652         bl     idct_row_armv5te
653         add    a1, a1, #16
654         bl     idct_row_armv5te
655
656         sub    a1, a1, #(16*7)
657
658         bl     idct_col_add_armv5te
659         add    a1, a1, #4
660         bl     idct_col_add_armv5te
661         add    a1, a1, #4
662         bl     idct_col_add_armv5te
663         add    a1, a1, #4
664         bl     idct_col_add_armv5te
665
666         add    sp, sp, #8
667         ldmfd  sp!, {v1, v2, v3, v4, v5, v6, v7, fp, pc}
668         .endfunc
669
670 function simple_idct_put_armv5te, export=1
671         stmfd  sp!, {a1, a2, v1, v2, v3, v4, v5, v6, v7, fp, lr}
672
673         mov    a1, a3
674
675         bl     idct_row_armv5te
676         add    a1, a1, #16
677         bl     idct_row_armv5te
678         add    a1, a1, #16
679         bl     idct_row_armv5te
680         add    a1, a1, #16
681         bl     idct_row_armv5te
682         add    a1, a1, #16
683         bl     idct_row_armv5te
684         add    a1, a1, #16
685         bl     idct_row_armv5te
686         add    a1, a1, #16
687         bl     idct_row_armv5te
688         add    a1, a1, #16
689         bl     idct_row_armv5te
690
691         sub    a1, a1, #(16*7)
692
693         bl     idct_col_put_armv5te
694         add    a1, a1, #4
695         bl     idct_col_put_armv5te
696         add    a1, a1, #4
697         bl     idct_col_put_armv5te
698         add    a1, a1, #4
699         bl     idct_col_put_armv5te
700
701         add    sp, sp, #8
702         ldmfd  sp!, {v1, v2, v3, v4, v5, v6, v7, fp, pc}
703         .endfunc