#if HAVE_YASM
-static void ff_avg_pixels16_mmxext(uint8_t *block, const uint8_t *pixels,
- int line_size, int h)
-{
- ff_avg_pixels8_mmxext(block, pixels, line_size, h);
- ff_avg_pixels8_mmxext(block + 8, pixels + 8, line_size, h);
-}
-static void ff_put_pixels16_mmxext(uint8_t *block, const uint8_t *pixels,
- ptrdiff_t line_size, int h)
-{
- ff_put_pixels8_mmxext(block, pixels, line_size, h);
- ff_put_pixels8_mmxext(block + 8, pixels + 8, line_size, h);
-}
+PIXELS16(static, ff_avg, , , _mmxext)
+PIXELS16(static, ff_put, , , _mmxext)
#define QPEL_OP(OPNAME, RND, MMX) \
static void OPNAME ## qpel8_mc00_ ## MMX (uint8_t *dst, uint8_t *src, \
const uint8_t *lum_m1,
const uint8_t *lum, int size);
+#define PIXELS16(STATIC, PFX1, PFX2, TYPE, CPUEXT) \
+STATIC void PFX1 ## _pixels16 ## TYPE ## CPUEXT(uint8_t *block, \
+ const uint8_t *pixels, \
+ ptrdiff_t line_size, \
+ int h) \
+{ \
+ PFX2 ## PFX1 ## _pixels8 ## TYPE ## CPUEXT(block, pixels, \
+ line_size, h); \
+ PFX2 ## PFX1 ## _pixels8 ## TYPE ## CPUEXT(block + 8, pixels + 8, \
+ line_size, h); \
+}
+
#endif /* AVCODEC_X86_DSPUTIL_MMX_H */
ptrdiff_t line_size, int h);
void ff_avg_pixels4_mmxext(uint8_t *block, const uint8_t *pixels,
ptrdiff_t line_size, int h);
-static void ff_put_pixels16_mmxext(uint8_t *block, const uint8_t *pixels,
- ptrdiff_t line_size, int h)
-{
- ff_put_pixels8_mmxext(block, pixels, line_size, h);
- ff_put_pixels8_mmxext(block + 8, pixels + 8, line_size, h);
-}
-static void ff_avg_pixels16_mmxext(uint8_t *block, const uint8_t *pixels,
- ptrdiff_t line_size, int h)
-{
- ff_avg_pixels8_mmxext(block, pixels, line_size, h);
- ff_avg_pixels8_mmxext(block + 8, pixels + 8, line_size, h);
-}
void ff_put_pixels4_l2_mmxext(uint8_t *dst, uint8_t *src1, uint8_t *src2,
int dstStride, int src1Stride, int h);
void ff_avg_pixels4_l2_mmxext(uint8_t *dst, uint8_t *src1, uint8_t *src2,
#define ff_put_pixels16_l2_sse2 ff_put_pixels16_l2_mmxext
#define ff_avg_pixels16_l2_sse2 ff_avg_pixels16_l2_mmxext
+PIXELS16(static, ff_avg, , , _mmxext)
+PIXELS16(static, ff_put, , , _mmxext)
+
#define DEF_QPEL(OPNAME)\
void ff_ ## OPNAME ## _h264_qpel4_h_lowpass_mmxext(uint8_t *dst, uint8_t *src, int dstStride, int srcStride);\
void ff_ ## OPNAME ## _h264_qpel8_h_lowpass_mmxext(uint8_t *dst, uint8_t *src, int dstStride, int srcStride);\
+++ /dev/null
-/*
- * DSP utils : average functions are compiled twice for 3dnow/mmxext
- * Copyright (c) 2000, 2001 Fabrice Bellard
- * Copyright (c) 2002-2004 Michael Niedermayer
- *
- * MMX optimization by Nick Kurshev <nickols_k@mail.ru>
- * mostly rewritten by Michael Niedermayer <michaelni@gmx.at>
- * and improved by Zdenek Kabelac <kabi@users.sf.net>
- *
- * 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
- */
-
-//FIXME the following could be optimized too ...
-static void DEF(put_no_rnd_pixels16_x2)(uint8_t *block,
- const uint8_t *pixels,
- ptrdiff_t line_size, int h)
-{
- DEF(ff_put_no_rnd_pixels8_x2)(block, pixels, line_size, h);
- DEF(ff_put_no_rnd_pixels8_x2)(block + 8, pixels + 8, line_size, h);
-}
-
-static void DEF(put_pixels16_y2)(uint8_t *block, const uint8_t *pixels,
- ptrdiff_t line_size, int h)
-{
- DEF(ff_put_pixels8_y2)(block, pixels, line_size, h);
- DEF(ff_put_pixels8_y2)(block + 8, pixels + 8, line_size, h);
-}
-
-static void DEF(put_no_rnd_pixels16_y2)(uint8_t *block,
- const uint8_t *pixels,
- ptrdiff_t line_size, int h)
-{
- DEF(ff_put_no_rnd_pixels8_y2)(block, pixels, line_size, h);
- DEF(ff_put_no_rnd_pixels8_y2)(block + 8, pixels + 8, line_size, h);
-}
-
-static void DEF(avg_pixels16)(uint8_t *block, const uint8_t *pixels,
- ptrdiff_t line_size, int h)
-{
- DEF(ff_avg_pixels8)(block, pixels, line_size, h);
- DEF(ff_avg_pixels8)(block + 8, pixels + 8, line_size, h);
-}
-
-static void DEF(avg_pixels16_x2)(uint8_t *block, const uint8_t *pixels,
- ptrdiff_t line_size, int h)
-{
- DEF(ff_avg_pixels8_x2)(block, pixels, line_size, h);
- DEF(ff_avg_pixels8_x2)(block + 8, pixels + 8, line_size, h);
-}
-
-static void DEF(avg_pixels16_y2)(uint8_t *block, const uint8_t *pixels,
- ptrdiff_t line_size, int h)
-{
- DEF(ff_avg_pixels8_y2)(block, pixels, line_size, h);
- DEF(ff_avg_pixels8_y2)(block + 8, pixels + 8, line_size, h);
-}
-
-static void DEF(avg_pixels16_xy2)(uint8_t *block, const uint8_t *pixels,
- ptrdiff_t line_size, int h)
-{
- DEF(ff_avg_pixels8_xy2)(block, pixels, line_size, h);
- DEF(ff_avg_pixels8_xy2)(block + 8, pixels + 8, line_size, h);
-}
#undef PAVGBP
#undef PAVGB
#undef STATIC
+
+PIXELS16(static, avg_no_rnd, , _y2, _mmx)
+PIXELS16(static, put_no_rnd, , _y2, _mmx)
+
+PIXELS16(static, avg_no_rnd, , _xy2, _mmx)
+PIXELS16(static, put_no_rnd, , _xy2, _mmx)
+
/***********************************/
/* MMX rounding */
#undef PAVGBP
#undef PAVGB
+PIXELS16(static, avg, , _y2, _mmx)
+PIXELS16(static, put, , _y2, _mmx)
+
#endif /* HAVE_INLINE_ASM */
#if HAVE_YASM
-/***********************************/
-/* 3Dnow specific */
-
-#define DEF(x) x ## _3dnow
-
-#include "hpeldsp_avg_template.c"
-#undef DEF
-
-/***********************************/
-/* MMXEXT specific */
-
-#define DEF(x) x ## _mmxext
-
-#include "hpeldsp_avg_template.c"
-
-#undef DEF
+#define HPELDSP_AVG_PIXELS16(CPUEXT) \
+ PIXELS16(static, put_no_rnd, ff_, _x2, CPUEXT) \
+ PIXELS16(static, put, ff_, _y2, CPUEXT) \
+ PIXELS16(static, put_no_rnd, ff_, _y2, CPUEXT) \
+ PIXELS16(static, avg, ff_, , CPUEXT) \
+ PIXELS16(static, avg, ff_, _x2, CPUEXT) \
+ PIXELS16(static, avg, ff_, _y2, CPUEXT) \
+ PIXELS16(static, avg, ff_, _xy2, CPUEXT)
+
+HPELDSP_AVG_PIXELS16(_3dnow)
+HPELDSP_AVG_PIXELS16(_mmxext)
#endif /* HAVE_YASM */
:"r"((x86_reg)line_size)
:REG_a, "memory");
}
-
-//FIXME optimize
-static void DEF(put, pixels16_y2)(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h){
- DEF(put, pixels8_y2)(block , pixels , line_size, h);
- DEF(put, pixels8_y2)(block+8, pixels+8, line_size, h);
-}
-
-static void DEF(avg, pixels16_y2)(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h){
- DEF(avg, pixels8_y2)(block , pixels , line_size, h);
- DEF(avg, pixels8_y2)(block+8, pixels+8, line_size, h);
-}
#include "rnd_template.c"
+PIXELS16(, ff_avg, , _xy2, _mmx)
+PIXELS16(, ff_put, , _xy2, _mmx)
+
#endif /* HAVE_INLINE_ASM */
:"D"(block), "r"((x86_reg)line_size)
:REG_a, "memory");
}
-
-//FIXME optimize
-STATIC void DEF(put, pixels16_xy2)(uint8_t *block, const uint8_t *pixels,
- ptrdiff_t line_size, int h)
-{
- DEF(put, pixels8_xy2)(block , pixels , line_size, h);
- DEF(put, pixels8_xy2)(block+8, pixels+8, line_size, h);
-}
-
-STATIC void DEF(avg, pixels16_xy2)(uint8_t *block, const uint8_t *pixels,
- ptrdiff_t line_size, int h)
-{
- DEF(avg, pixels8_xy2)(block , pixels , line_size, h);
- DEF(avg, pixels8_xy2)(block+8, pixels+8, line_size, h);
-}