1 ;******************************************************************************
3 ;* Copyright (c) 2008 Loren Merritt
5 ;* This file is part of Libav.
7 ;* Libav 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 ;* Libav 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 Libav; if not, write to the Free Software
19 ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 ;******************************************************************************
22 %include "libavutil/x86/x86util.asm"
34 ; void ff_put_no_rnd_pixels8_l2(uint8_t *dst, uint8_t *src1, uint8_t *src2, int dstStride, int src1Stride, int h)
35 %macro PUT_NO_RND_PIXELS8_L2 0
36 cglobal put_no_rnd_pixels8_l2, 6,6
100 ; void ff_put_no_rnd_pixels16_l2(uint8_t *dst, uint8_t *src1, uint8_t *src2, int dstStride, int src1Stride, int h)
101 %macro PUT_NO_RND_PIXELS16_l2 0
102 cglobal put_no_rnd_pixels16_l2, 6,6
166 PUT_NO_RND_PIXELS16_l2
168 PUT_NO_RND_PIXELS16_l2
170 %macro MPEG4_QPEL16_H_LOWPASS 1
171 cglobal %1_mpeg4_qpel16_h_lowpass, 5, 5, 0, 16
272 OP_MOV [r0+8], m0, m4
291 %define PW_ROUND pw_16
292 %define OP_MOV PUT_OP
293 MPEG4_QPEL16_H_LOWPASS put
294 %define PW_ROUND pw_16
295 %define OP_MOV AVG_OP
296 MPEG4_QPEL16_H_LOWPASS avg
297 %define PW_ROUND pw_15
298 %define OP_MOV PUT_OP
299 MPEG4_QPEL16_H_LOWPASS put_no_rnd
303 %macro MPEG4_QPEL8_H_LOWPASS 1
304 cglobal %1_mpeg4_qpel8_h_lowpass, 5, 5, 0, 8
364 %define PW_ROUND pw_16
365 %define OP_MOV PUT_OP
366 MPEG4_QPEL8_H_LOWPASS put
367 %define PW_ROUND pw_16
368 %define OP_MOV AVG_OP
369 MPEG4_QPEL8_H_LOWPASS avg
370 %define PW_ROUND pw_15
371 %define OP_MOV PUT_OP
372 MPEG4_QPEL8_H_LOWPASS put_no_rnd
399 %macro MPEG4_QPEL16_V_LOWPASS 1
400 cglobal %1_mpeg4_qpel16_v_lowpass, 4, 6, 0, 544
426 ; NOTE: r1 CHANGES VALUES: r1 -> 4 - 14*dstStride
441 QPEL_V_LOW [r5+0x10], [r5+ 0x8], [r5+ 0x0], [r5+0x20], [r0]
442 QPEL_V_LOW [r5+ 0x8], [r5+ 0x0], [r5+ 0x0], [r5+0x28], [r0+r2]
444 QPEL_V_LOW [r5+ 0x0], [r5+ 0x0], [r5+ 0x8], [r5+0x30], [r0]
445 QPEL_V_LOW [r5+ 0x0], [r5+ 0x8], [r5+0x10], [r5+0x38], [r0+r2]
447 QPEL_V_LOW [r5+ 0x8], [r5+0x10], [r5+0x18], [r5+0x40], [r0]
448 QPEL_V_LOW [r5+0x10], [r5+0x18], [r5+0x20], [r5+0x48], [r0+r2]
450 QPEL_V_LOW [r5+0x18], [r5+0x20], [r5+0x28], [r5+0x50], [r0]
451 QPEL_V_LOW [r5+0x20], [r5+0x28], [r5+0x30], [r5+0x58], [r0+r2]
453 QPEL_V_LOW [r5+0x28], [r5+0x30], [r5+0x38], [r5+0x60], [r0]
454 QPEL_V_LOW [r5+0x30], [r5+0x38], [r5+0x40], [r5+0x68], [r0+r2]
456 QPEL_V_LOW [r5+0x38], [r5+0x40], [r5+0x48], [r5+0x70], [r0]
457 QPEL_V_LOW [r5+0x40], [r5+0x48], [r5+0x50], [r5+0x78], [r0+r2]
459 QPEL_V_LOW [r5+0x48], [r5+0x50], [r5+0x58], [r5+0x80], [r0]
460 QPEL_V_LOW [r5+0x50], [r5+0x58], [r5+0x60], [r5+0x80], [r0+r2]
462 QPEL_V_LOW [r5+0x58], [r5+0x60], [r5+0x68], [r5+0x78], [r0]
463 QPEL_V_LOW [r5+0x60], [r5+0x68], [r5+0x70], [r5+0x70], [r0+r2]
483 %define PW_ROUND pw_16
484 %define OP_MOV PUT_OPH
485 MPEG4_QPEL16_V_LOWPASS put
486 %define PW_ROUND pw_16
487 %define OP_MOV AVG_OPH
488 MPEG4_QPEL16_V_LOWPASS avg
489 %define PW_ROUND pw_15
490 %define OP_MOV PUT_OPH
491 MPEG4_QPEL16_V_LOWPASS put_no_rnd
495 %macro MPEG4_QPEL8_V_LOWPASS 1
496 cglobal %1_mpeg4_qpel8_v_lowpass, 4, 6, 0, 288
516 ; NOTE: r1 CHANGES VALUES: r1 -> 4 - 6*dstStride
530 QPEL_V_LOW [r5+0x10], [r5+ 0x8], [r5+ 0x0], [r5+0x20], [r0]
531 QPEL_V_LOW [r5+ 0x8], [r5+ 0x0], [r5+ 0x0], [r5+0x28], [r0+r2]
533 QPEL_V_LOW [r5+ 0x0], [r5+ 0x0], [r5+ 0x8], [r5+0x30], [r0]
534 QPEL_V_LOW [r5+ 0x0], [r5+ 0x8], [r5+0x10], [r5+0x38], [r0+r2]
536 QPEL_V_LOW [r5+ 0x8], [r5+0x10], [r5+0x18], [r5+0x40], [r0]
537 QPEL_V_LOW [r5+0x10], [r5+0x18], [r5+0x20], [r5+0x40], [r0+r2]
539 QPEL_V_LOW [r5+0x18], [r5+0x20], [r5+0x28], [r5+0x38], [r0]
540 QPEL_V_LOW [r5+0x20], [r5+0x28], [r5+0x30], [r5+0x30], [r0+r2]
550 %define PW_ROUND pw_16
551 %define OP_MOV PUT_OPH
552 MPEG4_QPEL8_V_LOWPASS put
553 %define PW_ROUND pw_16
554 %define OP_MOV AVG_OPH
555 MPEG4_QPEL8_V_LOWPASS avg
556 %define PW_ROUND pw_15
557 %define OP_MOV PUT_OPH
558 MPEG4_QPEL8_V_LOWPASS put_no_rnd