2 * Copyright (c) 2009 Mans Rullgard <mans@mansr.com>
4 * This file is part of Libav.
6 * Libav 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 * Libav 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 Libav; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
27 .macro call_2x_pixels type, subp
28 function ff_\type\()_pixels16\subp\()_armv6, export=1
30 bl ff_\type\()_pixels8\subp\()_armv6
34 b ff_\type\()_pixels8\subp\()_armv6
39 call_2x_pixels put, _x2
40 call_2x_pixels put, _y2
41 call_2x_pixels put, _x2_no_rnd
42 call_2x_pixels put, _y2_no_rnd
44 function ff_put_pixels16_armv6, export=1
53 strd_post r4, r5, r0, r2
57 strd r10, r11, [r0, #8]
59 strd_post r8, r9, r0, r2
66 function ff_put_pixels8_armv6, export=1
72 strd_post r4, r5, r0, r2
75 strd_post r6, r7, r0, r2
82 function ff_put_pixels8_x2_armv6, export=1
85 orr r12, r12, r12, lsl #8
86 orr r12, r12, r12, lsl #16
94 orr r6, r6, r5, lsl #24
99 orr r10, r10, r9, lsl #24
115 strd_post r4, r5, r0, r2
117 strd_post r8, r9, r0, r2
123 function ff_put_pixels8_y2_armv6, export=1
126 orr r12, r12, r12, lsl #8
127 orr r12, r12, r12, lsl #16
153 strd_post r8, r9, r0, r2
155 strd_post r10, r11, r0, r2
162 function ff_put_pixels8_x2_no_rnd_armv6, export=1
174 orr r6, r6, r5, lsl #24
176 orr r12, r12, r9, lsl #24
190 function ff_put_pixels8_y2_no_rnd_armv6, export=1
215 function ff_avg_pixels8_armv6, export=1
219 orr lr, lr, lr, lsl #8
220 orr lr, lr, lr, lsl #16
230 ldrd_reg r6, r7, r0, r2
242 strd_post r4, r5, r0, r2
246 ldrd_reg r4, r5, r0, r2
253 strd_post r6, r7, r0, r2
260 strd_post r6, r7, r0, r2
265 function ff_add_pixels_clamped_armv6, export=1
269 ldm r0!, {r4,r5,r12,lr}
271 pkhbt r8, r4, r5, lsl #16
272 pkhtb r5, r5, r4, asr #16
273 pkhbt r4, r12, lr, lsl #16
274 pkhtb lr, lr, r12, asr #16
277 uxtab16 r5, r5, r6, ror #8
279 uxtab16 lr, lr, r7, ror #8
284 orr r6, r8, r5, lsl #8
285 orr r7, r4, lr, lsl #8
287 strd_post r6, r7, r1, r2
292 function ff_get_pixels_armv6, export=1
297 ldrd_post r4, r5, r1, r2
300 uxtb16 r4, r4, ror #8
302 uxtb16 r8, r5, ror #8
304 pkhbt r5, r6, r4, lsl #16
305 pkhtb r6, r4, r6, asr #16
306 pkhbt r7, r12, r8, lsl #16
307 pkhtb r12, r8, r12, asr #16
308 stm r0!, {r5,r6,r7,r12}
314 function ff_diff_pixels_armv6, export=1
320 ldrd_post r4, r5, r1, r3
321 ldrd_post r6, r7, r2, r3
323 uxtb16 r4, r4, ror #8
325 uxtb16 r6, r6, ror #8
330 uxtb16 r5, r5, ror #8
332 pkhbt r4, r9, r6, lsl #16
333 pkhtb r6, r6, r9, asr #16
335 uxtb16 r7, r7, ror #8
339 pkhbt r8, r9, r5, lsl #16
340 pkhtb r9, r5, r9, asr #16
341 stm r0!, {r4,r6,r8,r9}
347 function ff_pix_abs16_armv6, export=1
357 usada8 r12, r4, r8, r12
360 usada8 lr, r5, r9, lr
362 usada8 r12, r6, r8, r12
364 usada8 lr, r7, r9, lr
376 function ff_pix_abs16_x2_armv6, export=1
381 orr lr, lr, lr, lsl #8
382 orr lr, lr, lr, lsl #16
389 orr r10, r10, r9, lsl #24
393 orr r6, r6, r5, lsl #24
397 usada8 r0, r4, r7, r0
405 orr r10, r10, r6, lsl #24
406 usada8 r0, r8, r4, r0
416 usada8 r0, r4, r8, r0
417 orr r10, r10, r7, lsl #24
425 usada8 r0, r5, r9, r0
431 .macro usad_y2 p0, p1, p2, p3, n0, n1, n2, n3
439 usada8 r0, \p0, \n2, r0
447 usada8 r0, \p1, \p0, r0
455 usada8 r0, \p2, \p1, r0
462 usada8 r0, \p3, \p0, r0
466 function ff_pix_abs16_y2_armv6, export=1
473 orr lr, lr, lr, lsl #8
474 orr lr, lr, lr, lsl #16
481 usad_y2 r4, r5, r6, r7, r8, r9, r10, r11
483 usad_y2 r8, r9, r10, r11, r4, r5, r6, r7
489 function ff_pix_abs8_armv6, export=1
495 ldrd_post r4, r5, r1, r3
500 ldrd_post r8, r9, r1, r3
501 usada8 r0, r4, r6, r0
503 usada8 lr, r5, r7, lr
507 ldrd_post r4, r5, r1, r3
508 usada8 r0, r8, r6, r0
510 usada8 lr, r9, r7, lr
513 usada8 r0, r8, r6, r0
514 usada8 lr, r9, r7, lr
519 function ff_sse16_armv6, export=1
527 uxtb16 r4, r4, ror #8
529 uxtb16 r8, r8, ror #8
535 uxtb16 lr, r5, ror #8
537 uxtb16 r9, r7, ror #8
539 ldrd r4, r5, [r1, #8]
545 uxtb16 r4, r4, ror #8
547 uxtb16 r7, r7, ror #8
554 uxtb16 r5, r5, ror #8
556 uxtb16 r8, r8, ror #8
570 function ff_pix_norm1_armv6, export=1
577 uxtb16 r2, r2, ror #8
581 uxtb16 r3, r3, ror #8
585 uxtb16 r4, r4, ror #8
589 uxtb16 r5, r5, ror #8
600 function ff_pix_sum_armv6, export=1
610 usada8 r2, r4, lr, r2
612 usada8 r3, r5, lr, r3
614 usada8 r2, r6, lr, r2
617 usada8 r3, r7, lr, r3
620 usada8 r3, r7, lr, r3