From 46bb456853b197f4562de7acf5d42abf11ded9be Mon Sep 17 00:00:00 2001 From: Diego Biurrun Date: Sat, 20 Apr 2013 20:28:28 +0200 Subject: [PATCH] x86: dsputil: Refactor pixels16 wrapper functions with a macro --- libavcodec/x86/dsputil_mmx.c | 14 +---- libavcodec/x86/dsputil_mmx.h | 12 +++++ libavcodec/x86/h264_qpel.c | 15 ++---- libavcodec/x86/hpeldsp_avg_template.c | 77 --------------------------- libavcodec/x86/hpeldsp_init.c | 35 ++++++------ libavcodec/x86/hpeldsp_rnd_template.c | 11 ---- libavcodec/x86/rnd_mmx.c | 3 ++ libavcodec/x86/rnd_template.c | 15 ------ 8 files changed, 40 insertions(+), 142 deletions(-) delete mode 100644 libavcodec/x86/hpeldsp_avg_template.c diff --git a/libavcodec/x86/dsputil_mmx.c b/libavcodec/x86/dsputil_mmx.c index b6d9f62c1b..89da17890a 100644 --- a/libavcodec/x86/dsputil_mmx.c +++ b/libavcodec/x86/dsputil_mmx.c @@ -440,19 +440,9 @@ static void draw_edges_mmx(uint8_t *buf, int wrap, int width, int height, #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, \ diff --git a/libavcodec/x86/dsputil_mmx.h b/libavcodec/x86/dsputil_mmx.h index 9f62faa0b9..388916b895 100644 --- a/libavcodec/x86/dsputil_mmx.h +++ b/libavcodec/x86/dsputil_mmx.h @@ -153,4 +153,16 @@ void ff_deinterlace_line_inplace_mmx(const uint8_t *lum_m4, 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 */ diff --git a/libavcodec/x86/h264_qpel.c b/libavcodec/x86/h264_qpel.c index ef1b59d92b..a066b89e2b 100644 --- a/libavcodec/x86/h264_qpel.c +++ b/libavcodec/x86/h264_qpel.c @@ -32,18 +32,6 @@ void ff_put_pixels4_mmxext(uint8_t *block, const uint8_t *pixels, 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, @@ -61,6 +49,9 @@ void ff_avg_pixels16_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);\ diff --git a/libavcodec/x86/hpeldsp_avg_template.c b/libavcodec/x86/hpeldsp_avg_template.c deleted file mode 100644 index f7b6cccb64..0000000000 --- a/libavcodec/x86/hpeldsp_avg_template.c +++ /dev/null @@ -1,77 +0,0 @@ -/* - * 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 - * mostly rewritten by Michael Niedermayer - * and improved by Zdenek Kabelac - * - * 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); -} diff --git a/libavcodec/x86/hpeldsp_init.c b/libavcodec/x86/hpeldsp_init.c index 739099ee17..0617c22c6e 100644 --- a/libavcodec/x86/hpeldsp_init.c +++ b/libavcodec/x86/hpeldsp_init.c @@ -105,6 +105,13 @@ void ff_avg_pixels8_xy2_3dnow(uint8_t *block, const uint8_t *pixels, #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 */ @@ -120,27 +127,25 @@ void ff_avg_pixels8_xy2_3dnow(uint8_t *block, const uint8_t *pixels, #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 +#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) -#include "hpeldsp_avg_template.c" - -#undef DEF - -/***********************************/ -/* MMXEXT specific */ - -#define DEF(x) x ## _mmxext - -#include "hpeldsp_avg_template.c" - -#undef DEF +HPELDSP_AVG_PIXELS16(_3dnow) +HPELDSP_AVG_PIXELS16(_mmxext) #endif /* HAVE_YASM */ diff --git a/libavcodec/x86/hpeldsp_rnd_template.c b/libavcodec/x86/hpeldsp_rnd_template.c index 7ad54a7daa..516a03aec2 100644 --- a/libavcodec/x86/hpeldsp_rnd_template.c +++ b/libavcodec/x86/hpeldsp_rnd_template.c @@ -196,14 +196,3 @@ static void DEF(avg, pixels8_y2)(uint8_t *block, const uint8_t *pixels, ptrdiff_ :"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); -} diff --git a/libavcodec/x86/rnd_mmx.c b/libavcodec/x86/rnd_mmx.c index 791b911c9e..3f74200ff5 100644 --- a/libavcodec/x86/rnd_mmx.c +++ b/libavcodec/x86/rnd_mmx.c @@ -29,4 +29,7 @@ #include "rnd_template.c" +PIXELS16(, ff_avg, , _xy2, _mmx) +PIXELS16(, ff_put, , _xy2, _mmx) + #endif /* HAVE_INLINE_ASM */ diff --git a/libavcodec/x86/rnd_template.c b/libavcodec/x86/rnd_template.c index fb275f7954..e9a5a45799 100644 --- a/libavcodec/x86/rnd_template.c +++ b/libavcodec/x86/rnd_template.c @@ -171,18 +171,3 @@ STATIC void DEF(avg, pixels8_xy2)(uint8_t *block, const uint8_t *pixels, :"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); -}