2 @ ARMv4 optimized DSP utils
3 @ Copyright (c) 2004 AGAWA Koji <i (AT) atty (DOT) jp>
5 @ This file is part of FFmpeg.
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.
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.
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
23 #include "libavutil/arm/asm.S"
25 #if !HAVE_ARMV5TE_EXTERNAL
30 @ void ff_add_pixels_clamped_arm(int16_t *block, uint8_t *dest, int stride)
31 function ff_add_pixels_clamped_arm, export=1
35 ldr r4, [r1] /* load dest */
36 /* block[0] and block[1]*/
42 add r8, r7, r8, lsr #8
52 ldrsh r5, [r0, #4] /* moved form [A] */
53 orr r9, r9, r8, lsl #8
54 /* block[2] and block[3] */
58 and r8, r4, #0xFF000000
59 add r6, r5, r6, lsr #16
60 add r8, r7, r8, lsr #24
69 orr r9, r9, r6, lsl #16
70 ldr r4, [r1, #4] /* moved form [B] */
71 orr r9, r9, r8, lsl #24
73 ldrsh r5, [r0, #8] /* moved form [C] */
78 /* block[4] and block[5] */
84 add r8, r7, r8, lsr #8
94 ldrsh r5, [r0, #12] /* moved from [D] */
95 orr r9, r9, r8, lsl #8
96 /* block[6] and block[7] */
100 and r8, r4, #0xFF000000
101 add r6, r5, r6, lsr #16
102 add r8, r7, r8, lsr #24
107 movne r6, r5, lsr #24
110 movne r8, r7, lsr #24
111 orr r9, r9, r6, lsl #16
112 add r0, r0, #16 /* moved from [E] */
113 orr r9, r9, r8, lsl #24
114 subs r10, r10, #1 /* moved from [F] */