diff options
author | Diego Biurrun <diego@biurrun.de> | 2013-04-23 18:36:25 +0200 |
---|---|---|
committer | Diego Biurrun <diego@biurrun.de> | 2013-05-06 11:02:08 +0200 |
commit | 110796739ab32854dc0b6b0a1c95e6ae98889062 (patch) | |
tree | 791ef80e5624c0641e94b1c6c97a088b3038d68c /libavcodec/x86/hpeldsp_mmx.c | |
parent | dc1b328d0df6e5ad5ff0ca4ae031e08466624f9c (diff) | |
download | ffmpeg-110796739ab32854dc0b6b0a1c95e6ae98889062.tar.gz |
x86: hpeldsp: Move avg_pixels8_x2_mmx() out of hpeldsp_rnd_template.c
The function is only instantiated once, so there is no point
in keeping it in a template file.
Diffstat (limited to 'libavcodec/x86/hpeldsp_mmx.c')
-rw-r--r-- | libavcodec/x86/hpeldsp_mmx.c | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/libavcodec/x86/hpeldsp_mmx.c b/libavcodec/x86/hpeldsp_mmx.c new file mode 100644 index 0000000000..36d4dccb54 --- /dev/null +++ b/libavcodec/x86/hpeldsp_mmx.c @@ -0,0 +1,52 @@ +/* + * MMX-optimized avg/put pixel routines + * + * Copyright (c) 2001 Fabrice Bellard + * + * This file is part of Libav. + * + * Libav 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. + * + * Libav 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 Libav; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <stddef.h> +#include <stdint.h> + +#include "config.h" +#include "dsputil_mmx.h" + +#if HAVE_MMX_INLINE + +void ff_avg_pixels8_x2_mmx(uint8_t *block, const uint8_t *pixels, + ptrdiff_t line_size, int h) +{ + MOVQ_BFE(mm6); + JUMPALIGN(); + do { + __asm__ volatile( + "movq %1, %%mm0 \n\t" + "movq 1%1, %%mm1 \n\t" + "movq %0, %%mm3 \n\t" + PAVGB_MMX(%%mm0, %%mm1, %%mm2, %%mm6) + PAVGB_MMX(%%mm3, %%mm2, %%mm0, %%mm6) + "movq %%mm0, %0 \n\t" + :"+m"(*block) + :"m"(*pixels) + :"memory"); + pixels += line_size; + block += line_size; + } while (--h); +} + +#endif /* HAVE_MMX_INLINE */ |