Imported Debian version 2.5.0~trusty1.1
[deb_ffmpeg.git] / ffmpeg / libavcodec / arm / idctdsp_arm.S
CommitLineData
2ba45a60
DM
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
f6fa7814 25@ void ff_add_pixels_clamped_arm(int16_t *block, uint8_t *dest, ptrdiff_t stride)
2ba45a60
DM
26function ff_add_pixels_clamped_arm, export=1, align=5
27 push {r4-r10}
28 mov r10, #8
291:
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
120endfunc