2 * Copyright (c) 2009 Mans Rullgard <mans@mansr.com>
4 * This file is part of FFmpeg.
6 * FFmpeg is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * FFmpeg is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with FFmpeg; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 #include "libavutil/arm/asm.S"
23 function ff_add_pixels_clamped_armv6, export=1
27 ldm r0!, {r4,r5,r12,lr}
29 pkhbt r8, r4, r5, lsl #16
30 pkhtb r5, r5, r4, asr #16
31 pkhbt r4, r12, lr, lsl #16
32 pkhtb lr, lr, r12, asr #16
35 uxtab16 r5, r5, r6, ror #8
37 uxtab16 lr, lr, r7, ror #8
42 orr r6, r8, r5, lsl #8
43 orr r7, r4, lr, lsl #8
45 strd_post r6, r7, r1, r2
50 function ff_get_pixels_armv6, export=1
55 ldrd_post r4, r5, r1, r2
62 pkhbt r5, r6, r4, lsl #16
63 pkhtb r6, r4, r6, asr #16
64 pkhbt r7, r12, r8, lsl #16
65 pkhtb r12, r8, r12, asr #16
66 stm r0!, {r5,r6,r7,r12}
72 function ff_diff_pixels_armv6, export=1
78 ldrd_post r4, r5, r1, r3
79 ldrd_post r6, r7, r2, r3
90 pkhbt r4, r9, r6, lsl #16
91 pkhtb r6, r6, r9, asr #16
97 pkhbt r8, r9, r5, lsl #16
98 pkhtb r9, r5, r9, asr #16
99 stm r0!, {r4,r6,r8,r9}
105 function ff_pix_abs16_armv6, export=1
115 usada8 r12, r4, r8, r12
118 usada8 lr, r5, r9, lr
120 usada8 r12, r6, r8, r12
122 usada8 lr, r7, r9, lr
134 function ff_pix_abs16_x2_armv6, export=1
139 orr lr, lr, lr, lsl #8
140 orr lr, lr, lr, lsl #16
147 orr r10, r10, r9, lsl #24
151 orr r6, r6, r5, lsl #24
155 usada8 r0, r4, r7, r0
163 orr r10, r10, r6, lsl #24
164 usada8 r0, r8, r4, r0
174 usada8 r0, r4, r8, r0
175 orr r10, r10, r7, lsl #24
183 usada8 r0, r5, r9, r0
189 .macro usad_y2 p0, p1, p2, p3, n0, n1, n2, n3
197 usada8 r0, \p0, \n2, r0
205 usada8 r0, \p1, \p0, r0
213 usada8 r0, \p2, \p1, r0
220 usada8 r0, \p3, \p0, r0
224 function ff_pix_abs16_y2_armv6, export=1
231 orr lr, lr, lr, lsl #8
232 orr lr, lr, lr, lsl #16
239 usad_y2 r4, r5, r6, r7, r8, r9, r10, r11
241 usad_y2 r8, r9, r10, r11, r4, r5, r6, r7
247 function ff_pix_abs8_armv6, export=1
253 ldrd_post r4, r5, r1, r3
258 ldrd_post r8, r9, r1, r3
259 usada8 r0, r4, r6, r0
261 usada8 lr, r5, r7, lr
265 ldrd_post r4, r5, r1, r3
266 usada8 r0, r8, r6, r0
268 usada8 lr, r9, r7, lr
271 usada8 r0, r8, r6, r0
272 usada8 lr, r9, r7, lr
277 function ff_sse16_armv6, export=1
285 uxtb16 r4, r4, ror #8
287 uxtb16 r8, r8, ror #8
293 uxtb16 lr, r5, ror #8
295 uxtb16 r9, r7, ror #8
297 ldrd r4, r5, [r1, #8]
303 uxtb16 r4, r4, ror #8
305 uxtb16 r7, r7, ror #8
312 uxtb16 r5, r5, ror #8
314 uxtb16 r8, r8, ror #8
328 function ff_pix_norm1_armv6, export=1
335 uxtb16 r2, r2, ror #8
339 uxtb16 r3, r3, ror #8
343 uxtb16 r4, r4, ror #8
347 uxtb16 r5, r5, ror #8
358 function ff_pix_sum_armv6, export=1
368 usada8 r2, r4, lr, r2
370 usada8 r3, r5, lr, r3
372 usada8 r2, r6, lr, r2
375 usada8 r3, r7, lr, r3
378 usada8 r3, r7, lr, r3