[FFmpeg-devel] [PATCH 2/4] huffyuvencdsp: Convert ff_diff_bytes_mmx to yasm

James Almer jamrial at gmail.com
Mon Oct 19 22:32:23 CEST 2015


On 10/19/2015 5:00 PM, Timothy Gu wrote:
> ---
>  libavcodec/x86/Makefile            |  1 +
>  libavcodec/x86/huffyuvencdsp.asm   | 58 ++++++++++++++++++++++++++++++++++++++
>  libavcodec/x86/huffyuvencdsp_mmx.c | 37 ++++--------------------
>  3 files changed, 65 insertions(+), 31 deletions(-)
>  create mode 100644 libavcodec/x86/huffyuvencdsp.asm
> 
> diff --git a/libavcodec/x86/Makefile b/libavcodec/x86/Makefile
> index 4591e4b..e1b1f0c 100644
> --- a/libavcodec/x86/Makefile
> +++ b/libavcodec/x86/Makefile
> @@ -115,6 +115,7 @@ YASM-OBJS-$(CONFIG_H264QPEL)           += x86/h264_qpel_8bit.o          \
>  YASM-OBJS-$(CONFIG_HPELDSP)            += x86/fpel.o                    \
>                                            x86/hpeldsp.o
>  YASM-OBJS-$(CONFIG_HUFFYUVDSP)         += x86/huffyuvdsp.o
> +YASM-OBJS-$(CONFIG_HUFFYUVENCDSP)      += x86/huffyuvencdsp.o
>  YASM-OBJS-$(CONFIG_IDCTDSP)            += x86/idctdsp.o
>  YASM-OBJS-$(CONFIG_LLAUDDSP)           += x86/lossless_audiodsp.o
>  YASM-OBJS-$(CONFIG_LLVIDDSP)           += x86/lossless_videodsp.o
> diff --git a/libavcodec/x86/huffyuvencdsp.asm b/libavcodec/x86/huffyuvencdsp.asm
> new file mode 100644
> index 0000000..97de7e9
> --- /dev/null
> +++ b/libavcodec/x86/huffyuvencdsp.asm
> @@ -0,0 +1,58 @@
> +;************************************************************************
> +;* SIMD-optimized HuffYUV encoding functions
> +;* Copyright (c) 2000, 2001 Fabrice Bellard
> +;* Copyright (c) 2002-2004 Michael Niedermayer <michaelni at gmx.at>
> +;*
> +;* MMX optimization by Nick Kurshev <nickols_k at mail.ru>
> +;* Conversion to NASM format by Tiancheng "Timothy" Gu <timothygu99 at gmail.com>
> +;*
> +;* This file is part of FFmpeg.
> +;*
> +;* FFmpeg is free software; you can redistribute it and/or
> +;* modify it under the terms of the GNU Lesser General Public
> +;* License as published by the Free Software Foundation; either
> +;* version 2.1 of the License, or (at your option) any later version.
> +;*
> +;* FFmpeg is distributed in the hope that it will be useful,
> +;* but WITHOUT ANY WARRANTY; without even the implied warranty of
> +;* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +;* Lesser General Public License for more details.
> +;*
> +;* You should have received a copy of the GNU Lesser General Public
> +;* License along with FFmpeg; if not, write to the Free Software
> +;* 51, Inc., Foundation Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
> +;******************************************************************************
> +
> +%include "libavutil/x86/x86util.asm"
> +
> +section .text
> +
> +INIT_MMX mmx
> +; void ff_diff_bytes_mmx(uint8_t *dst, const uint8_t *src1, const uint8_t *src2,
> +;                        intptr_t w);
> +cglobal diff_bytes, 4,6,0, dst, src1, src2, w, i
> +    xor               iq, iq
> +    cmp               wq, 16
> +        jb        .loop2
> +    sub               wq, 15

Check how this and the loop below are handled in ff_add_bytes (huffyuvdsp.asm).

> +.loop:
> +    mova              m0, [src2q + iq]
> +    mova              m1, [src1q + iq]
> +    psubb             m1, m0



More information about the ffmpeg-devel mailing list