diff options
author | Timothy Gu <timothygu99@gmail.com> | 2015-10-19 02:25:11 +0100 |
---|---|---|
committer | Timothy Gu <timothygu99@gmail.com> | 2015-10-20 18:24:54 -0700 |
commit | 6b41b4414934cc930468ccd5db598dd6ef643987 (patch) | |
tree | 152bc72c963923e5546525bb6081819e15f4c1e6 /libavcodec/x86/huffyuvencdsp.asm | |
parent | 1ec8c1554ed81a31ac4f82621121405de067b21e (diff) | |
download | ffmpeg-6b41b4414934cc930468ccd5db598dd6ef643987.tar.gz |
huffyuvencdsp: Convert ff_diff_bytes_mmx to yasm
Heavily based upon ff_add_bytes by Christophe Gisquet.
Reviewed-by: James Almer <jamrial@gmail.com>
Signed-off-by: Timothy Gu <timothygu99@gmail.com>
Diffstat (limited to 'libavcodec/x86/huffyuvencdsp.asm')
-rw-r--r-- | libavcodec/x86/huffyuvencdsp.asm | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/libavcodec/x86/huffyuvencdsp.asm b/libavcodec/x86/huffyuvencdsp.asm new file mode 100644 index 0000000000..e001906742 --- /dev/null +++ b/libavcodec/x86/huffyuvencdsp.asm @@ -0,0 +1,73 @@ +;************************************************************************ +;* SIMD-optimized HuffYUV encoding functions +;* Copyright (c) 2000, 2001 Fabrice Bellard +;* Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at> +;* +;* MMX optimization by Nick Kurshev <nickols_k@mail.ru> +;* Conversion to NASM format by Tiancheng "Timothy" Gu <timothygu99@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); +%if ARCH_X86_32 +cglobal diff_bytes, 3,5,2, dst, src1, src2 +%define wq r4q + DECLARE_REG_TMP 3 + mov wq, r3mp +%else +cglobal diff_bytes, 4,5,2, dst, src1, src2, w + DECLARE_REG_TMP 4 +%endif ; ARCH_X86_32 +%define i t0q + mov i, wq + and i, -2 * mmsize + jz .setup_loop2 + add dstq, i + add src1q, i + add src2q, i + neg i +.loop: + mova m0, [src1q + i] + mova m1, [src1q + i + mmsize] + psubb m0, [src2q + i] + psubb m1, [src2q + i + mmsize] + mova [dstq + i], m0 + mova [mmsize + dstq + i], m1 + add i, 2 * mmsize + jl .loop +.setup_loop2: + and wq, 2 * mmsize - 1 + jz .end + add dstq, wq + add src1q, wq + add src2q, wq + neg wq +.loop2: + mov t0b, [src1q + wq] + sub t0b, [src2q + wq] + mov [dstq + wq], t0b + inc wq + jl .loop2 +.end: + REP_RET |