1 ;******************************************************************************
3 ;* Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at>
4 ;* Copyright (c) 2008 Loren Merritt
6 ;* This file is part of FFmpeg.
8 ;* FFmpeg is free software; you can redistribute it and/or
9 ;* modify it under the terms of the GNU Lesser General Public
10 ;* License as published by the Free Software Foundation; either
11 ;* version 2.1 of the License, or (at your option) any later version.
13 ;* FFmpeg is distributed in the hope that it will be useful,
14 ;* but WITHOUT ANY WARRANTY; without even the implied warranty of
15 ;* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 ;* Lesser General Public License for more details.
18 ;* You should have received a copy of the GNU Lesser General Public
19 ;* License along with FFmpeg; if not, write to the Free Software
20 ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 ;******************************************************************************
23 %include "libavutil/x86/x86util.asm"
35 ; put_no_rnd_pixels8_l2(uint8_t *dst, uint8_t *src1, uint8_t *src2, int dstStride, int src1Stride, int h)
36 %macro PUT_NO_RND_PIXELS8_L2 0
37 cglobal put_no_rnd_pixels8_l2, 6,6
101 ; put_no_rnd_pixels16_l2(uint8_t *dst, uint8_t *src1, uint8_t *src2, int dstStride, int src1Stride, int h)
102 %macro PUT_NO_RND_PIXELS16_l2 0
103 cglobal put_no_rnd_pixels16_l2, 6,6
167 PUT_NO_RND_PIXELS16_l2
169 PUT_NO_RND_PIXELS16_l2
171 %macro MPEG4_QPEL16_H_LOWPASS 1
172 cglobal %1_mpeg4_qpel16_h_lowpass, 5, 5, 0, 16
273 OP_MOV [r0+8], m0, m4
292 %define PW_ROUND pw_16
293 %define OP_MOV PUT_OP
294 MPEG4_QPEL16_H_LOWPASS put
295 %define PW_ROUND pw_16
296 %define OP_MOV AVG_OP
297 MPEG4_QPEL16_H_LOWPASS avg
298 %define PW_ROUND pw_15
299 %define OP_MOV PUT_OP
300 MPEG4_QPEL16_H_LOWPASS put_no_rnd
304 %macro MPEG4_QPEL8_H_LOWPASS 1
305 cglobal %1_mpeg4_qpel8_h_lowpass, 5, 5, 0, 8
365 %define PW_ROUND pw_16
366 %define OP_MOV PUT_OP
367 MPEG4_QPEL8_H_LOWPASS put
368 %define PW_ROUND pw_16
369 %define OP_MOV AVG_OP
370 MPEG4_QPEL8_H_LOWPASS avg
371 %define PW_ROUND pw_15
372 %define OP_MOV PUT_OP
373 MPEG4_QPEL8_H_LOWPASS put_no_rnd
400 %macro MPEG4_QPEL16_V_LOWPASS 1
401 cglobal %1_mpeg4_qpel16_v_lowpass, 4, 6, 0, 544
427 ; NOTE: r1 CHANGES VALUES: r1 -> 4 - 14*dstStride
442 QPEL_V_LOW [r5+0x10], [r5+ 0x8], [r5+ 0x0], [r5+0x20], [r0]
443 QPEL_V_LOW [r5+ 0x8], [r5+ 0x0], [r5+ 0x0], [r5+0x28], [r0+r2]
445 QPEL_V_LOW [r5+ 0x0], [r5+ 0x0], [r5+ 0x8], [r5+0x30], [r0]
446 QPEL_V_LOW [r5+ 0x0], [r5+ 0x8], [r5+0x10], [r5+0x38], [r0+r2]
448 QPEL_V_LOW [r5+ 0x8], [r5+0x10], [r5+0x18], [r5+0x40], [r0]
449 QPEL_V_LOW [r5+0x10], [r5+0x18], [r5+0x20], [r5+0x48], [r0+r2]
451 QPEL_V_LOW [r5+0x18], [r5+0x20], [r5+0x28], [r5+0x50], [r0]
452 QPEL_V_LOW [r5+0x20], [r5+0x28], [r5+0x30], [r5+0x58], [r0+r2]
454 QPEL_V_LOW [r5+0x28], [r5+0x30], [r5+0x38], [r5+0x60], [r0]
455 QPEL_V_LOW [r5+0x30], [r5+0x38], [r5+0x40], [r5+0x68], [r0+r2]
457 QPEL_V_LOW [r5+0x38], [r5+0x40], [r5+0x48], [r5+0x70], [r0]
458 QPEL_V_LOW [r5+0x40], [r5+0x48], [r5+0x50], [r5+0x78], [r0+r2]
460 QPEL_V_LOW [r5+0x48], [r5+0x50], [r5+0x58], [r5+0x80], [r0]
461 QPEL_V_LOW [r5+0x50], [r5+0x58], [r5+0x60], [r5+0x80], [r0+r2]
463 QPEL_V_LOW [r5+0x58], [r5+0x60], [r5+0x68], [r5+0x78], [r0]
464 QPEL_V_LOW [r5+0x60], [r5+0x68], [r5+0x70], [r5+0x70], [r0+r2]
484 %define PW_ROUND pw_16
485 %define OP_MOV PUT_OPH
486 MPEG4_QPEL16_V_LOWPASS put
487 %define PW_ROUND pw_16
488 %define OP_MOV AVG_OPH
489 MPEG4_QPEL16_V_LOWPASS avg
490 %define PW_ROUND pw_15
491 %define OP_MOV PUT_OPH
492 MPEG4_QPEL16_V_LOWPASS put_no_rnd
496 %macro MPEG4_QPEL8_V_LOWPASS 1
497 cglobal %1_mpeg4_qpel8_v_lowpass, 4, 6, 0, 288
517 ; NOTE: r1 CHANGES VALUES: r1 -> 4 - 6*dstStride
531 QPEL_V_LOW [r5+0x10], [r5+ 0x8], [r5+ 0x0], [r5+0x20], [r0]
532 QPEL_V_LOW [r5+ 0x8], [r5+ 0x0], [r5+ 0x0], [r5+0x28], [r0+r2]
534 QPEL_V_LOW [r5+ 0x0], [r5+ 0x0], [r5+ 0x8], [r5+0x30], [r0]
535 QPEL_V_LOW [r5+ 0x0], [r5+ 0x8], [r5+0x10], [r5+0x38], [r0+r2]
537 QPEL_V_LOW [r5+ 0x8], [r5+0x10], [r5+0x18], [r5+0x40], [r0]
538 QPEL_V_LOW [r5+0x10], [r5+0x18], [r5+0x20], [r5+0x40], [r0+r2]
540 QPEL_V_LOW [r5+0x18], [r5+0x20], [r5+0x28], [r5+0x38], [r0]
541 QPEL_V_LOW [r5+0x20], [r5+0x28], [r5+0x30], [r5+0x30], [r0+r2]
551 %define PW_ROUND pw_16
552 %define OP_MOV PUT_OPH
553 MPEG4_QPEL8_V_LOWPASS put
554 %define PW_ROUND pw_16
555 %define OP_MOV AVG_OPH
556 MPEG4_QPEL8_V_LOWPASS avg
557 %define PW_ROUND pw_15
558 %define OP_MOV PUT_OPH
559 MPEG4_QPEL8_V_LOWPASS put_no_rnd