Imported Debian version 2.5.0~trusty1.1
[deb_ffmpeg.git] / ffmpeg / libavcodec / arm / idctdsp_arm.S
1 @
2 @ ARMv4-optimized IDCT functions
3 @ Copyright (c) 2004 AGAWA Koji <i (AT) atty (DOT) jp>
4 @
5 @ This file is part of FFmpeg.
6 @
7 @ FFmpeg is free software; you can redistribute it and/or
8 @ modify it under the terms of the GNU Lesser General Public
9 @ License as published by the Free Software Foundation; either
10 @ version 2.1 of the License, or (at your option) any later version.
11 @
12 @ FFmpeg is distributed in the hope that it will be useful,
13 @ but WITHOUT ANY WARRANTY; without even the implied warranty of
14 @ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 @ Lesser General Public License for more details.
16 @
17 @ You should have received a copy of the GNU Lesser General Public
18 @ License along with FFmpeg; if not, write to the Free Software
19 @ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 @
21
22 #include "config.h"
23 #include "libavutil/arm/asm.S"
24
25 @ void ff_add_pixels_clamped_arm(int16_t *block, uint8_t *dest, ptrdiff_t stride)
26 function ff_add_pixels_clamped_arm, export=1, align=5
27 push {r4-r10}
28 mov r10, #8
29 1:
30 ldr r4, [r1] /* load dest */
31 /* block[0] and block[1]*/
32 ldrsh r5, [r0]
33 ldrsh r7, [r0, #2]
34 and r6, r4, #0xFF
35 and r8, r4, #0xFF00
36 add r6, r6, r5
37 add r8, r7, r8, lsr #8
38 mvn r5, r5
39 mvn r7, r7
40 tst r6, #0x100
41 it ne
42 movne r6, r5, lsr #24
43 tst r8, #0x100
44 it ne
45 movne r8, r7, lsr #24
46 mov r9, r6
47 ldrsh r5, [r0, #4] /* moved form [A] */
48 orr r9, r9, r8, lsl #8
49 /* block[2] and block[3] */
50 /* [A] */
51 ldrsh r7, [r0, #6]
52 and r6, r4, #0xFF0000
53 and r8, r4, #0xFF000000
54 add r6, r5, r6, lsr #16
55 add r8, r7, r8, lsr #24
56 mvn r5, r5
57 mvn r7, r7
58 tst r6, #0x100
59 it ne
60 movne r6, r5, lsr #24
61 tst r8, #0x100
62 it ne
63 movne r8, r7, lsr #24
64 orr r9, r9, r6, lsl #16
65 ldr r4, [r1, #4] /* moved form [B] */
66 orr r9, r9, r8, lsl #24
67 /* store dest */
68 ldrsh r5, [r0, #8] /* moved form [C] */
69 str r9, [r1]
70
71 /* load dest */
72 /* [B] */
73 /* block[4] and block[5] */
74 /* [C] */
75 ldrsh r7, [r0, #10]
76 and r6, r4, #0xFF
77 and r8, r4, #0xFF00
78 add r6, r6, r5
79 add r8, r7, r8, lsr #8
80 mvn r5, r5
81 mvn r7, r7
82 tst r6, #0x100
83 it ne
84 movne r6, r5, lsr #24
85 tst r8, #0x100
86 it ne
87 movne r8, r7, lsr #24
88 mov r9, r6
89 ldrsh r5, [r0, #12] /* moved from [D] */
90 orr r9, r9, r8, lsl #8
91 /* block[6] and block[7] */
92 /* [D] */
93 ldrsh r7, [r0, #14]
94 and r6, r4, #0xFF0000
95 and r8, r4, #0xFF000000
96 add r6, r5, r6, lsr #16
97 add r8, r7, r8, lsr #24
98 mvn r5, r5
99 mvn r7, r7
100 tst r6, #0x100
101 it ne
102 movne r6, r5, lsr #24
103 tst r8, #0x100
104 it ne
105 movne r8, r7, lsr #24
106 orr r9, r9, r6, lsl #16
107 add r0, r0, #16 /* moved from [E] */
108 orr r9, r9, r8, lsl #24
109 subs r10, r10, #1 /* moved from [F] */
110 /* store dest */
111 str r9, [r1, #4]
112
113 /* [E] */
114 /* [F] */
115 add r1, r1, r2
116 bne 1b
117
118 pop {r4-r10}
119 bx lr
120 endfunc