* commit 'fa8fcab1e0d31074c0644c4ac5194474c6c26415': x86: h264_chromamc_10bit: drop pointless PAVG %define x86: mmx2 ---> mmxext in function names swscale: do not forget to swap data in formats with different endianness Conflicts: libavcodec/x86/dsputil_mmx.c libavfilter/x86/gradfun.c libswscale/input.c libswscale/utils.c libswscale/x86/swscale.c tests/ref/lavfi/pixfmts_scale Merged-by: Michael Niedermayer <michaelni@gmx.at>tags/n1.1
@@ -86,7 +86,7 @@ static const struct algo fdct_tab[] = { | |||
#if HAVE_MMX_INLINE | |||
{ "MMX", ff_fdct_mmx, NO_PERM, AV_CPU_FLAG_MMX }, | |||
{ "MMXEXT", ff_fdct_mmx2, NO_PERM, AV_CPU_FLAG_MMXEXT }, | |||
{ "MMXEXT", ff_fdct_mmxext, NO_PERM, AV_CPU_FLAG_MMXEXT }, | |||
{ "SSE2", ff_fdct_sse2, NO_PERM, AV_CPU_FLAG_SSE2 }, | |||
#endif | |||
@@ -131,7 +131,7 @@ static const struct algo idct_tab[] = { | |||
#endif | |||
{ "SIMPLE-MMX", ff_simple_idct_mmx, MMX_SIMPLE_PERM, AV_CPU_FLAG_MMX }, | |||
{ "XVID-MMX", ff_idct_xvid_mmx, NO_PERM, AV_CPU_FLAG_MMX, 1 }, | |||
{ "XVID-MMXEXT", ff_idct_xvid_mmx2, NO_PERM, AV_CPU_FLAG_MMXEXT, 1 }, | |||
{ "XVID-MMXEXT", ff_idct_xvid_mmxext, NO_PERM, AV_CPU_FLAG_MMXEXT, 1 }, | |||
{ "XVID-SSE2", ff_idct_xvid_sse2, SSE2_PERM, AV_CPU_FLAG_SSE2, 1 }, | |||
#if ARCH_X86_64 && HAVE_YASM | |||
{ "PR-SSE2", ff_prores_idct_put_10_sse2_wrap, TRANSPOSE_PERM, AV_CPU_FLAG_SSE2, 1 }, | |||
@@ -52,7 +52,7 @@ void ff_j_rev_dct1 (DCTELEM *data); | |||
void ff_wmv2_idct_c(DCTELEM *data); | |||
void ff_fdct_mmx(DCTELEM *block); | |||
void ff_fdct_mmx2(DCTELEM *block); | |||
void ff_fdct_mmxext(DCTELEM *block); | |||
void ff_fdct_sse2(DCTELEM *block); | |||
#define H264_IDCT(depth) \ | |||
@@ -438,21 +438,22 @@ static void ff_ ## OPNAME ## cavs_qpel ## SIZE ## _mc03_ ## MMX(uint8_t *dst, ui | |||
#endif /* (HAVE_MMXEXT_INLINE || HAVE_AMD3DNOW_INLINE) */ | |||
#if HAVE_MMXEXT_INLINE | |||
QPEL_CAVS(put_, PUT_OP, mmx2) | |||
QPEL_CAVS(avg_,AVG_MMXEXT_OP, mmx2) | |||
QPEL_CAVS(put_, PUT_OP, mmxext) | |||
QPEL_CAVS(avg_, AVG_MMXEXT_OP, mmxext) | |||
CAVS_MC(put_, 8, mmx2) | |||
CAVS_MC(put_, 16,mmx2) | |||
CAVS_MC(avg_, 8, mmx2) | |||
CAVS_MC(avg_, 16,mmx2) | |||
CAVS_MC(put_, 8, mmxext) | |||
CAVS_MC(put_, 16, mmxext) | |||
CAVS_MC(avg_, 8, mmxext) | |||
CAVS_MC(avg_, 16, mmxext) | |||
static void ff_cavsdsp_init_mmx2(CAVSDSPContext* c, AVCodecContext *avctx) { | |||
static void ff_cavsdsp_init_mmxext(CAVSDSPContext *c, AVCodecContext *avctx) | |||
{ | |||
#define dspfunc(PFX, IDX, NUM) \ | |||
c->PFX ## _pixels_tab[IDX][ 0] = ff_ ## PFX ## NUM ## _mc00_mmx2; \ | |||
c->PFX ## _pixels_tab[IDX][ 2] = ff_ ## PFX ## NUM ## _mc20_mmx2; \ | |||
c->PFX ## _pixels_tab[IDX][ 4] = ff_ ## PFX ## NUM ## _mc01_mmx2; \ | |||
c->PFX ## _pixels_tab[IDX][ 8] = ff_ ## PFX ## NUM ## _mc02_mmx2; \ | |||
c->PFX ## _pixels_tab[IDX][12] = ff_ ## PFX ## NUM ## _mc03_mmx2; \ | |||
c->PFX ## _pixels_tab[IDX][ 0] = ff_ ## PFX ## NUM ## _mc00_mmxext; \ | |||
c->PFX ## _pixels_tab[IDX][ 2] = ff_ ## PFX ## NUM ## _mc20_mmxext; \ | |||
c->PFX ## _pixels_tab[IDX][ 4] = ff_ ## PFX ## NUM ## _mc01_mmxext; \ | |||
c->PFX ## _pixels_tab[IDX][ 8] = ff_ ## PFX ## NUM ## _mc02_mmxext; \ | |||
c->PFX ## _pixels_tab[IDX][12] = ff_ ## PFX ## NUM ## _mc03_mmxext; \ | |||
dspfunc(put_cavs_qpel, 0, 16); | |||
dspfunc(put_cavs_qpel, 1, 8); | |||
@@ -475,7 +476,7 @@ CAVS_MC(avg_, 16,3dnow) | |||
static void ff_cavsdsp_init_3dnow(CAVSDSPContext* c, AVCodecContext *avctx) { | |||
#define dspfunc(PFX, IDX, NUM) \ | |||
c->PFX ## _pixels_tab[IDX][ 0] = ff_ ## PFX ## NUM ## _mc00_mmx2; \ | |||
c->PFX ## _pixels_tab[IDX][ 0] = ff_ ## PFX ## NUM ## _mc00_mmxext; \ | |||
c->PFX ## _pixels_tab[IDX][ 2] = ff_ ## PFX ## NUM ## _mc20_3dnow; \ | |||
c->PFX ## _pixels_tab[IDX][ 4] = ff_ ## PFX ## NUM ## _mc01_3dnow; \ | |||
c->PFX ## _pixels_tab[IDX][ 8] = ff_ ## PFX ## NUM ## _mc02_3dnow; \ | |||
@@ -496,7 +497,7 @@ av_cold void ff_cavsdsp_init_x86(CAVSDSPContext *c, AVCodecContext *avctx) | |||
int mm_flags = av_get_cpu_flags(); | |||
#if HAVE_MMXEXT_INLINE | |||
if (mm_flags & AV_CPU_FLAG_MMXEXT) ff_cavsdsp_init_mmx2(c, avctx); | |||
if (mm_flags & AV_CPU_FLAG_MMXEXT) ff_cavsdsp_init_mmxext(c, avctx); | |||
#endif /* HAVE_MMXEXT_INLINE */ | |||
#if HAVE_AMD3DNOW_INLINE | |||
if (mm_flags & AV_CPU_FLAG_3DNOW) ff_cavsdsp_init_3dnow(c, avctx); | |||
@@ -78,7 +78,7 @@ void ff_diracdsp_init_mmx(DiracDSPContext* c) | |||
#if HAVE_MMXEXT_INLINE | |||
if (mm_flags & AV_CPU_FLAG_MMX2) { | |||
PIXFUNC(avg, 0, mmx2); | |||
PIXFUNC(avg, 0, mmxext); | |||
} | |||
#endif | |||
@@ -27,7 +27,7 @@ void ff_diracdsp_init_mmx(DiracDSPContext* c); | |||
DECL_DIRAC_PIXOP(put, mmx); | |||
DECL_DIRAC_PIXOP(avg, mmx); | |||
DECL_DIRAC_PIXOP(avg, mmx2); | |||
DECL_DIRAC_PIXOP(avg, mmxext); | |||
void ff_put_dirac_pixels16_sse2(uint8_t *dst, const uint8_t *src[5], int stride, int h); | |||
void ff_avg_dirac_pixels16_sse2(uint8_t *dst, const uint8_t *src[5], int stride, int h); | |||
@@ -208,7 +208,7 @@ DECLARE_ALIGNED(16, const double, ff_pd_2)[2] = { 2.0, 2.0 }; | |||
/***********************************/ | |||
/* MMXEXT specific */ | |||
#define DEF(x) x ## _mmx2 | |||
#define DEF(x) x ## _mmxext | |||
/* Introduced only in MMXEXT set */ | |||
#define PAVGB "pavgb" | |||
@@ -222,11 +222,11 @@ DECLARE_ALIGNED(16, const double, ff_pd_2)[2] = { 2.0, 2.0 }; | |||
#define put_no_rnd_pixels16_mmx put_pixels16_mmx | |||
#define put_no_rnd_pixels8_mmx put_pixels8_mmx | |||
#define put_pixels16_mmx2 put_pixels16_mmx | |||
#define put_pixels8_mmx2 put_pixels8_mmx | |||
#define put_pixels4_mmx2 put_pixels4_mmx | |||
#define put_no_rnd_pixels16_mmx2 put_no_rnd_pixels16_mmx | |||
#define put_no_rnd_pixels8_mmx2 put_no_rnd_pixels8_mmx | |||
#define put_pixels16_mmxext put_pixels16_mmx | |||
#define put_pixels8_mmxext put_pixels8_mmx | |||
#define put_pixels4_mmxext put_pixels4_mmx | |||
#define put_no_rnd_pixels16_mmxext put_no_rnd_pixels16_mmx | |||
#define put_no_rnd_pixels8_mmxext put_no_rnd_pixels8_mmx | |||
#define put_pixels16_3dnow put_pixels16_mmx | |||
#define put_pixels8_3dnow put_pixels8_mmx | |||
#define put_pixels4_3dnow put_pixels4_mmx | |||
@@ -944,11 +944,11 @@ static void draw_edges_mmx(uint8_t *buf, int wrap, int width, int height, | |||
OP(%%mm5, out, %%mm7, d) | |||
#define QPEL_BASE(OPNAME, ROUNDER, RND, OP_MMXEXT, OP_3DNOW) \ | |||
static void OPNAME ## mpeg4_qpel16_h_lowpass_mmx2(uint8_t *dst, \ | |||
uint8_t *src, \ | |||
int dstStride, \ | |||
int srcStride, \ | |||
int h) \ | |||
static void OPNAME ## mpeg4_qpel16_h_lowpass_mmxext(uint8_t *dst, \ | |||
uint8_t *src, \ | |||
int dstStride, \ | |||
int srcStride, \ | |||
int h) \ | |||
{ \ | |||
uint64_t temp; \ | |||
\ | |||
@@ -1138,11 +1138,11 @@ static void OPNAME ## mpeg4_qpel16_h_lowpass_3dnow(uint8_t *dst, \ | |||
} \ | |||
} \ | |||
\ | |||
static void OPNAME ## mpeg4_qpel8_h_lowpass_mmx2(uint8_t *dst, \ | |||
uint8_t *src, \ | |||
int dstStride, \ | |||
int srcStride, \ | |||
int h) \ | |||
static void OPNAME ## mpeg4_qpel8_h_lowpass_mmxext(uint8_t *dst, \ | |||
uint8_t *src, \ | |||
int dstStride, \ | |||
int srcStride, \ | |||
int h) \ | |||
{ \ | |||
__asm__ volatile ( \ | |||
"pxor %%mm7, %%mm7 \n\t" \ | |||
@@ -1775,9 +1775,9 @@ QPEL_BASE(put_no_rnd_, ff_pw_15, _no_rnd_, PUT_OP, PUT_OP) | |||
QPEL_OP(put_, ff_pw_16, _, PUT_OP, 3dnow) | |||
QPEL_OP(avg_, ff_pw_16, _, AVG_3DNOW_OP, 3dnow) | |||
QPEL_OP(put_no_rnd_, ff_pw_15, _no_rnd_, PUT_OP, 3dnow) | |||
QPEL_OP(put_, ff_pw_16, _, PUT_OP, mmx2) | |||
QPEL_OP(avg_, ff_pw_16, _, AVG_MMXEXT_OP, mmx2) | |||
QPEL_OP(put_no_rnd_, ff_pw_15, _no_rnd_, PUT_OP, mmx2) | |||
QPEL_OP(put_, ff_pw_16, _, PUT_OP, mmxext) | |||
QPEL_OP(avg_, ff_pw_16, _, AVG_MMXEXT_OP, mmxext) | |||
QPEL_OP(put_no_rnd_, ff_pw_15, _no_rnd_, PUT_OP, mmxext) | |||
/***********************************/ | |||
/* bilinear qpel: not compliant to any spec, only for -lavdopts fast */ | |||
@@ -1831,10 +1831,10 @@ QPEL_2TAP_L3(OPNAME, SIZE, MMX, 31, 1, stride, -1) \ | |||
QPEL_2TAP_L3(OPNAME, SIZE, MMX, 13, stride, -stride, 1) \ | |||
QPEL_2TAP_L3(OPNAME, SIZE, MMX, 33, stride + 1, -stride, -1) \ | |||
QPEL_2TAP(put_, 16, mmx2) | |||
QPEL_2TAP(avg_, 16, mmx2) | |||
QPEL_2TAP(put_, 8, mmx2) | |||
QPEL_2TAP(avg_, 8, mmx2) | |||
QPEL_2TAP(put_, 16, mmxext) | |||
QPEL_2TAP(avg_, 16, mmxext) | |||
QPEL_2TAP(put_, 8, mmxext) | |||
QPEL_2TAP(avg_, 8, mmxext) | |||
QPEL_2TAP(put_, 16, 3dnow) | |||
QPEL_2TAP(avg_, 16, 3dnow) | |||
QPEL_2TAP(put_, 8, 3dnow) | |||
@@ -2099,7 +2099,7 @@ static void name(void *mem, int stride, int h) \ | |||
} while (--h); \ | |||
} | |||
PREFETCH(prefetch_mmx2, prefetcht0) | |||
PREFETCH(prefetch_mmxext, prefetcht0) | |||
PREFETCH(prefetch_3dnow, prefetch) | |||
#undef PREFETCH | |||
@@ -2153,22 +2153,22 @@ CHROMA_MC(avg, 8, 10, avx) | |||
#if HAVE_INLINE_ASM | |||
/* CAVS-specific */ | |||
void ff_put_cavs_qpel8_mc00_mmx2(uint8_t *dst, uint8_t *src, int stride) | |||
void ff_put_cavs_qpel8_mc00_mmxext(uint8_t *dst, uint8_t *src, int stride) | |||
{ | |||
put_pixels8_mmx(dst, src, stride, 8); | |||
} | |||
void ff_avg_cavs_qpel8_mc00_mmx2(uint8_t *dst, uint8_t *src, int stride) | |||
void ff_avg_cavs_qpel8_mc00_mmxext(uint8_t *dst, uint8_t *src, int stride) | |||
{ | |||
avg_pixels8_mmx(dst, src, stride, 8); | |||
} | |||
void ff_put_cavs_qpel16_mc00_mmx2(uint8_t *dst, uint8_t *src, int stride) | |||
void ff_put_cavs_qpel16_mc00_mmxext(uint8_t *dst, uint8_t *src, int stride) | |||
{ | |||
put_pixels16_mmx(dst, src, stride, 16); | |||
} | |||
void ff_avg_cavs_qpel16_mc00_mmx2(uint8_t *dst, uint8_t *src, int stride) | |||
void ff_avg_cavs_qpel16_mc00_mmxext(uint8_t *dst, uint8_t *src, int stride) | |||
{ | |||
avg_pixels16_mmx(dst, src, stride, 16); | |||
} | |||
@@ -2180,10 +2180,10 @@ void ff_put_vc1_mspel_mc00_mmx(uint8_t *dst, const uint8_t *src, | |||
put_pixels8_mmx(dst, src, stride, 8); | |||
} | |||
void ff_avg_vc1_mspel_mc00_mmx2(uint8_t *dst, const uint8_t *src, | |||
int stride, int rnd) | |||
void ff_avg_vc1_mspel_mc00_mmxext(uint8_t *dst, const uint8_t *src, | |||
int stride, int rnd) | |||
{ | |||
avg_pixels8_mmx2(dst, src, stride, 8); | |||
avg_pixels8_mmxext(dst, src, stride, 8); | |||
} | |||
/* only used in VP3/5/6 */ | |||
@@ -2242,7 +2242,7 @@ void ff_ ## OPNAME ## _dirac_pixels32_ ## EXT(uint8_t *dst, const uint8_t *src[5 | |||
DIRAC_PIXOP(put, mmx) | |||
DIRAC_PIXOP(avg, mmx) | |||
DIRAC_PIXOP(avg, mmx2) | |||
DIRAC_PIXOP(avg, mmxext) | |||
void ff_put_dirac_pixels16_sse2(uint8_t *dst, const uint8_t *src[5], int stride, int h) | |||
{ | |||
@@ -2620,68 +2620,68 @@ static void dsputil_init_mmx(DSPContext *c, AVCodecContext *avctx, int mm_flags) | |||
} | |||
static void dsputil_init_mmx2(DSPContext *c, AVCodecContext *avctx, | |||
int mm_flags) | |||
static void dsputil_init_mmxext(DSPContext *c, AVCodecContext *avctx, | |||
int mm_flags) | |||
{ | |||
const int bit_depth = avctx->bits_per_raw_sample; | |||
const int high_bit_depth = bit_depth > 8; | |||
#if HAVE_INLINE_ASM | |||
c->prefetch = prefetch_mmx2; | |||
c->prefetch = prefetch_mmxext; | |||
if (!high_bit_depth) { | |||
c->put_pixels_tab[0][1] = put_pixels16_x2_mmx2; | |||
c->put_pixels_tab[0][2] = put_pixels16_y2_mmx2; | |||
c->put_pixels_tab[0][1] = put_pixels16_x2_mmxext; | |||
c->put_pixels_tab[0][2] = put_pixels16_y2_mmxext; | |||
c->avg_pixels_tab[0][0] = avg_pixels16_mmx2; | |||
c->avg_pixels_tab[0][1] = avg_pixels16_x2_mmx2; | |||
c->avg_pixels_tab[0][2] = avg_pixels16_y2_mmx2; | |||
c->avg_pixels_tab[0][0] = avg_pixels16_mmxext; | |||
c->avg_pixels_tab[0][1] = avg_pixels16_x2_mmxext; | |||
c->avg_pixels_tab[0][2] = avg_pixels16_y2_mmxext; | |||
c->put_pixels_tab[1][1] = put_pixels8_x2_mmx2; | |||
c->put_pixels_tab[1][2] = put_pixels8_y2_mmx2; | |||
c->put_pixels_tab[1][1] = put_pixels8_x2_mmxext; | |||
c->put_pixels_tab[1][2] = put_pixels8_y2_mmxext; | |||
c->avg_pixels_tab[1][0] = avg_pixels8_mmx2; | |||
c->avg_pixels_tab[1][1] = avg_pixels8_x2_mmx2; | |||
c->avg_pixels_tab[1][2] = avg_pixels8_y2_mmx2; | |||
c->avg_pixels_tab[1][0] = avg_pixels8_mmxext; | |||
c->avg_pixels_tab[1][1] = avg_pixels8_x2_mmxext; | |||
c->avg_pixels_tab[1][2] = avg_pixels8_y2_mmxext; | |||
} | |||
if (!(avctx->flags & CODEC_FLAG_BITEXACT)) { | |||
if (!high_bit_depth) { | |||
c->put_no_rnd_pixels_tab[0][1] = put_no_rnd_pixels16_x2_mmx2; | |||
c->put_no_rnd_pixels_tab[0][2] = put_no_rnd_pixels16_y2_mmx2; | |||
c->put_no_rnd_pixels_tab[1][1] = put_no_rnd_pixels8_x2_mmx2; | |||
c->put_no_rnd_pixels_tab[1][2] = put_no_rnd_pixels8_y2_mmx2; | |||
c->put_no_rnd_pixels_tab[0][1] = put_no_rnd_pixels16_x2_mmxext; | |||
c->put_no_rnd_pixels_tab[0][2] = put_no_rnd_pixels16_y2_mmxext; | |||
c->put_no_rnd_pixels_tab[1][1] = put_no_rnd_pixels8_x2_mmxext; | |||
c->put_no_rnd_pixels_tab[1][2] = put_no_rnd_pixels8_y2_mmxext; | |||
c->avg_pixels_tab[0][3] = avg_pixels16_xy2_mmx2; | |||
c->avg_pixels_tab[1][3] = avg_pixels8_xy2_mmx2; | |||
c->avg_pixels_tab[0][3] = avg_pixels16_xy2_mmxext; | |||
c->avg_pixels_tab[1][3] = avg_pixels8_xy2_mmxext; | |||
} | |||
} | |||
if (CONFIG_VP3_DECODER && (avctx->codec_id == AV_CODEC_ID_VP3 || | |||
avctx->codec_id == AV_CODEC_ID_THEORA)) { | |||
c->put_no_rnd_pixels_tab[1][1] = put_no_rnd_pixels8_x2_exact_mmx2; | |||
c->put_no_rnd_pixels_tab[1][2] = put_no_rnd_pixels8_y2_exact_mmx2; | |||
c->put_no_rnd_pixels_tab[1][1] = put_no_rnd_pixels8_x2_exact_mmxext; | |||
c->put_no_rnd_pixels_tab[1][2] = put_no_rnd_pixels8_y2_exact_mmxext; | |||
} | |||
#endif /* HAVE_INLINE_ASM */ | |||
if (CONFIG_H264QPEL) { | |||
#if HAVE_INLINE_ASM | |||
SET_QPEL_FUNCS(put_qpel, 0, 16, mmx2, ); | |||
SET_QPEL_FUNCS(put_qpel, 1, 8, mmx2, ); | |||
SET_QPEL_FUNCS(put_no_rnd_qpel, 0, 16, mmx2, ); | |||
SET_QPEL_FUNCS(put_no_rnd_qpel, 1, 8, mmx2, ); | |||
SET_QPEL_FUNCS(avg_qpel, 0, 16, mmx2, ); | |||
SET_QPEL_FUNCS(avg_qpel, 1, 8, mmx2, ); | |||
SET_QPEL_FUNCS(put_qpel, 0, 16, mmxext, ); | |||
SET_QPEL_FUNCS(put_qpel, 1, 8, mmxext, ); | |||
SET_QPEL_FUNCS(put_no_rnd_qpel, 0, 16, mmxext, ); | |||
SET_QPEL_FUNCS(put_no_rnd_qpel, 1, 8, mmxext, ); | |||
SET_QPEL_FUNCS(avg_qpel, 0, 16, mmxext, ); | |||
SET_QPEL_FUNCS(avg_qpel, 1, 8, mmxext, ); | |||
#endif /* HAVE_INLINE_ASM */ | |||
if (!high_bit_depth) { | |||
#if HAVE_INLINE_ASM | |||
SET_QPEL_FUNCS(put_h264_qpel, 0, 16, mmx2, ); | |||
SET_QPEL_FUNCS(put_h264_qpel, 1, 8, mmx2, ); | |||
SET_QPEL_FUNCS(put_h264_qpel, 2, 4, mmx2, ); | |||
SET_QPEL_FUNCS(avg_h264_qpel, 0, 16, mmx2, ); | |||
SET_QPEL_FUNCS(avg_h264_qpel, 1, 8, mmx2, ); | |||
SET_QPEL_FUNCS(avg_h264_qpel, 2, 4, mmx2, ); | |||
SET_QPEL_FUNCS(put_h264_qpel, 0, 16, mmxext, ); | |||
SET_QPEL_FUNCS(put_h264_qpel, 1, 8, mmxext, ); | |||
SET_QPEL_FUNCS(put_h264_qpel, 2, 4, mmxext, ); | |||
SET_QPEL_FUNCS(avg_h264_qpel, 0, 16, mmxext, ); | |||
SET_QPEL_FUNCS(avg_h264_qpel, 1, 8, mmxext, ); | |||
SET_QPEL_FUNCS(avg_h264_qpel, 2, 4, mmxext, ); | |||
#endif /* HAVE_INLINE_ASM */ | |||
} else if (bit_depth == 10) { | |||
#if HAVE_YASM | |||
@@ -2697,10 +2697,10 @@ static void dsputil_init_mmx2(DSPContext *c, AVCodecContext *avctx, | |||
} | |||
#if HAVE_INLINE_ASM | |||
SET_QPEL_FUNCS(put_2tap_qpel, 0, 16, mmx2, ); | |||
SET_QPEL_FUNCS(put_2tap_qpel, 1, 8, mmx2, ); | |||
SET_QPEL_FUNCS(avg_2tap_qpel, 0, 16, mmx2, ); | |||
SET_QPEL_FUNCS(avg_2tap_qpel, 1, 8, mmx2, ); | |||
SET_QPEL_FUNCS(put_2tap_qpel, 0, 16, mmxext, ); | |||
SET_QPEL_FUNCS(put_2tap_qpel, 1, 8, mmxext, ); | |||
SET_QPEL_FUNCS(avg_2tap_qpel, 0, 16, mmxext, ); | |||
SET_QPEL_FUNCS(avg_2tap_qpel, 1, 8, mmxext, ); | |||
#endif /* HAVE_INLINE_ASM */ | |||
} | |||
@@ -3041,9 +3041,9 @@ void ff_dsputil_init_mmx(DSPContext *c, AVCodecContext *avctx) | |||
c->idct = ff_idct_xvid_sse2; | |||
c->idct_permutation_type = FF_SSE2_IDCT_PERM; | |||
} else if (mm_flags & AV_CPU_FLAG_MMXEXT) { | |||
c->idct_put = ff_idct_xvid_mmx2_put; | |||
c->idct_add = ff_idct_xvid_mmx2_add; | |||
c->idct = ff_idct_xvid_mmx2; | |||
c->idct_put = ff_idct_xvid_mmxext_put; | |||
c->idct_add = ff_idct_xvid_mmxext_add; | |||
c->idct = ff_idct_xvid_mmxext; | |||
} else { | |||
c->idct_put = ff_idct_xvid_mmx_put; | |||
c->idct_add = ff_idct_xvid_mmx_add; | |||
@@ -3057,7 +3057,7 @@ void ff_dsputil_init_mmx(DSPContext *c, AVCodecContext *avctx) | |||
} | |||
if (mm_flags & AV_CPU_FLAG_MMXEXT) | |||
dsputil_init_mmx2(c, avctx, mm_flags); | |||
dsputil_init_mmxext(c, avctx, mm_flags); | |||
if (mm_flags & AV_CPU_FLAG_3DNOW) | |||
dsputil_init_3dnow(c, avctx, mm_flags); | |||
@@ -89,13 +89,13 @@ void ff_add_pixels_clamped_mmx(const DCTELEM *block, uint8_t *pixels, int line_s | |||
void ff_put_pixels_clamped_mmx(const DCTELEM *block, uint8_t *pixels, int line_size); | |||
void ff_put_signed_pixels_clamped_mmx(const DCTELEM *block, uint8_t *pixels, int line_size); | |||
void ff_put_cavs_qpel8_mc00_mmx2(uint8_t *dst, uint8_t *src, int stride); | |||
void ff_avg_cavs_qpel8_mc00_mmx2(uint8_t *dst, uint8_t *src, int stride); | |||
void ff_put_cavs_qpel16_mc00_mmx2(uint8_t *dst, uint8_t *src, int stride); | |||
void ff_avg_cavs_qpel16_mc00_mmx2(uint8_t *dst, uint8_t *src, int stride); | |||
void ff_put_cavs_qpel8_mc00_mmxext(uint8_t *dst, uint8_t *src, int stride); | |||
void ff_avg_cavs_qpel8_mc00_mmxext(uint8_t *dst, uint8_t *src, int stride); | |||
void ff_put_cavs_qpel16_mc00_mmxext(uint8_t *dst, uint8_t *src, int stride); | |||
void ff_avg_cavs_qpel16_mc00_mmxext(uint8_t *dst, uint8_t *src, int stride); | |||
void ff_put_vc1_mspel_mc00_mmx(uint8_t *dst, const uint8_t *src, int stride, int rnd); | |||
void ff_avg_vc1_mspel_mc00_mmx2(uint8_t *dst, const uint8_t *src, int stride, int rnd); | |||
void ff_avg_vc1_mspel_mc00_mmxext(uint8_t *dst, const uint8_t *src, int stride, int rnd); | |||
void ff_put_rv40_qpel8_mc33_mmx(uint8_t *block, uint8_t *pixels, int line_size); | |||
void ff_put_rv40_qpel16_mc33_mmx(uint8_t *block, uint8_t *pixels, int line_size); | |||
@@ -647,7 +647,9 @@ static int vsad_intra16_mmx(void *v, uint8_t * pix, uint8_t * dummy, int line_si | |||
} | |||
#undef SUM | |||
static int vsad_intra16_mmx2(void *v, uint8_t * pix, uint8_t * dummy, int line_size, int h) { | |||
static int vsad_intra16_mmxext(void *v, uint8_t *pix, uint8_t *dummy, | |||
int line_size, int h) | |||
{ | |||
int tmp; | |||
assert( (((int)pix) & 7) == 0); | |||
@@ -765,7 +767,9 @@ static int vsad16_mmx(void *v, uint8_t * pix1, uint8_t * pix2, int line_size, in | |||
} | |||
#undef SUM | |||
static int vsad16_mmx2(void *v, uint8_t * pix1, uint8_t * pix2, int line_size, int h) { | |||
static int vsad16_mmxext(void *v, uint8_t *pix1, uint8_t *pix2, | |||
int line_size, int h) | |||
{ | |||
int tmp; | |||
assert( (((int)pix1) & 7) == 0); | |||
@@ -845,7 +849,10 @@ static void diff_bytes_mmx(uint8_t *dst, const uint8_t *src1, const uint8_t *src | |||
dst[i+0] = src1[i+0]-src2[i+0]; | |||
} | |||
static void sub_hfyu_median_prediction_mmx2(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, int w, int *left, int *left_top){ | |||
static void sub_hfyu_median_prediction_mmxext(uint8_t *dst, const uint8_t *src1, | |||
const uint8_t *src2, int w, | |||
int *left, int *left_top) | |||
{ | |||
x86_reg i=0; | |||
uint8_t l, lt; | |||
@@ -977,7 +984,7 @@ DCT_SAD_FUNC(mmx) | |||
#define HSUM(a,t,dst) HSUM_MMXEXT(a,t,dst) | |||
#define MMABS(a,z) MMABS_MMXEXT(a,z) | |||
DCT_SAD_FUNC(mmx2) | |||
DCT_SAD_FUNC(mmxext) | |||
#undef HSUM | |||
#undef DCT_SAD | |||
@@ -1116,7 +1123,7 @@ void ff_dsputilenc_init_mmx(DSPContext* c, AVCodecContext *avctx) | |||
if(mm_flags & AV_CPU_FLAG_SSE2){ | |||
c->fdct = ff_fdct_sse2; | |||
} else if (mm_flags & AV_CPU_FLAG_MMXEXT) { | |||
c->fdct = ff_fdct_mmx2; | |||
c->fdct = ff_fdct_mmxext; | |||
}else{ | |||
c->fdct = ff_fdct_mmx; | |||
} | |||
@@ -1149,14 +1156,14 @@ void ff_dsputilenc_init_mmx(DSPContext* c, AVCodecContext *avctx) | |||
c->ssd_int8_vs_int16 = ssd_int8_vs_int16_mmx; | |||
if (mm_flags & AV_CPU_FLAG_MMXEXT) { | |||
c->sum_abs_dctelem= sum_abs_dctelem_mmx2; | |||
c->vsad[4]= vsad_intra16_mmx2; | |||
c->sum_abs_dctelem = sum_abs_dctelem_mmxext; | |||
c->vsad[4] = vsad_intra16_mmxext; | |||
if(!(avctx->flags & CODEC_FLAG_BITEXACT)){ | |||
c->vsad[0] = vsad16_mmx2; | |||
c->vsad[0] = vsad16_mmxext; | |||
} | |||
c->sub_hfyu_median_prediction= sub_hfyu_median_prediction_mmx2; | |||
c->sub_hfyu_median_prediction = sub_hfyu_median_prediction_mmxext; | |||
} | |||
if(mm_flags & AV_CPU_FLAG_SSE2){ | |||
@@ -440,7 +440,8 @@ static av_always_inline void fdct_row_sse2(const int16_t *in, int16_t *out) | |||
); | |||
} | |||
static av_always_inline void fdct_row_mmx2(const int16_t *in, int16_t *out, const int16_t *table) | |||
static av_always_inline void fdct_row_mmxext(const int16_t *in, int16_t *out, | |||
const int16_t *table) | |||
{ | |||
__asm__ volatile ( | |||
"pshufw $0x1B, 8(%0), %%mm5 \n\t" | |||
@@ -555,7 +556,7 @@ void ff_fdct_mmx(int16_t *block) | |||
} | |||
} | |||
void ff_fdct_mmx2(int16_t *block) | |||
void ff_fdct_mmxext(int16_t *block) | |||
{ | |||
DECLARE_ALIGNED(8, int64_t, align_tmp)[16]; | |||
int16_t *block1= (int16_t*)align_tmp; | |||
@@ -566,7 +567,7 @@ void ff_fdct_mmx2(int16_t *block) | |||
fdct_col_mmx(block, block1, 4); | |||
for(i=8;i>0;i--) { | |||
fdct_row_mmx2(block1, block, table); | |||
fdct_row_mmxext(block1, block, table); | |||
block1 += 8; | |||
table += 32; | |||
block += 8; | |||
@@ -245,7 +245,7 @@ cglobal %1_h264_chroma_mc2_10, 6,7 | |||
%if %0==3 | |||
movq %2, %3 | |||
%endif | |||
PAVG %1, %2 | |||
pavgw %1, %2 | |||
%endmacro | |||
%define CHROMAMC_AVG NOTHING | |||
@@ -260,7 +260,6 @@ CHROMA_MC4 put | |||
CHROMA_MC2 put | |||
%define CHROMAMC_AVG AVG | |||
%define PAVG pavgw | |||
INIT_XMM sse2 | |||
CHROMA_MC8 avg | |||
%if HAVE_AVX_EXTERNAL | |||
@@ -1002,36 +1002,36 @@ static void OPNAME ## h264_qpel16_hv_lowpass_ ## MMX(uint8_t *dst, int16_t *tmp, | |||
OPNAME ## h264_qpel8or16_hv_lowpass_ ## MMX(dst, tmp, src, dstStride, tmpStride, srcStride, 16);\ | |||
}\ | |||
#define put_pixels8_l2_sse2 put_pixels8_l2_mmx2 | |||
#define avg_pixels8_l2_sse2 avg_pixels8_l2_mmx2 | |||
#define put_pixels16_l2_sse2 put_pixels16_l2_mmx2 | |||
#define avg_pixels16_l2_sse2 avg_pixels16_l2_mmx2 | |||
#define put_pixels8_l2_ssse3 put_pixels8_l2_mmx2 | |||
#define avg_pixels8_l2_ssse3 avg_pixels8_l2_mmx2 | |||
#define put_pixels16_l2_ssse3 put_pixels16_l2_mmx2 | |||
#define avg_pixels16_l2_ssse3 avg_pixels16_l2_mmx2 | |||
#define put_pixels8_l2_sse2 put_pixels8_l2_mmxext | |||
#define avg_pixels8_l2_sse2 avg_pixels8_l2_mmxext | |||
#define put_pixels16_l2_sse2 put_pixels16_l2_mmxext | |||
#define avg_pixels16_l2_sse2 avg_pixels16_l2_mmxext | |||
#define put_pixels8_l2_ssse3 put_pixels8_l2_mmxext | |||
#define avg_pixels8_l2_ssse3 avg_pixels8_l2_mmxext | |||
#define put_pixels16_l2_ssse3 put_pixels16_l2_mmxext | |||
#define avg_pixels16_l2_ssse3 avg_pixels16_l2_mmxext | |||
#define put_pixels8_l2_shift5_sse2 put_pixels8_l2_shift5_mmx2 | |||
#define avg_pixels8_l2_shift5_sse2 avg_pixels8_l2_shift5_mmx2 | |||
#define put_pixels16_l2_shift5_sse2 put_pixels16_l2_shift5_mmx2 | |||
#define avg_pixels16_l2_shift5_sse2 avg_pixels16_l2_shift5_mmx2 | |||
#define put_pixels8_l2_shift5_ssse3 put_pixels8_l2_shift5_mmx2 | |||
#define avg_pixels8_l2_shift5_ssse3 avg_pixels8_l2_shift5_mmx2 | |||
#define put_pixels16_l2_shift5_ssse3 put_pixels16_l2_shift5_mmx2 | |||
#define avg_pixels16_l2_shift5_ssse3 avg_pixels16_l2_shift5_mmx2 | |||
#define put_pixels8_l2_shift5_sse2 put_pixels8_l2_shift5_mmxext | |||
#define avg_pixels8_l2_shift5_sse2 avg_pixels8_l2_shift5_mmxext | |||
#define put_pixels16_l2_shift5_sse2 put_pixels16_l2_shift5_mmxext | |||
#define avg_pixels16_l2_shift5_sse2 avg_pixels16_l2_shift5_mmxext | |||
#define put_pixels8_l2_shift5_ssse3 put_pixels8_l2_shift5_mmxext | |||
#define avg_pixels8_l2_shift5_ssse3 avg_pixels8_l2_shift5_mmxext | |||
#define put_pixels16_l2_shift5_ssse3 put_pixels16_l2_shift5_mmxext | |||
#define avg_pixels16_l2_shift5_ssse3 avg_pixels16_l2_shift5_mmxext | |||
#define put_h264_qpel8_h_lowpass_l2_sse2 put_h264_qpel8_h_lowpass_l2_mmx2 | |||
#define avg_h264_qpel8_h_lowpass_l2_sse2 avg_h264_qpel8_h_lowpass_l2_mmx2 | |||
#define put_h264_qpel16_h_lowpass_l2_sse2 put_h264_qpel16_h_lowpass_l2_mmx2 | |||
#define avg_h264_qpel16_h_lowpass_l2_sse2 avg_h264_qpel16_h_lowpass_l2_mmx2 | |||
#define put_h264_qpel8_h_lowpass_l2_sse2 put_h264_qpel8_h_lowpass_l2_mmxext | |||
#define avg_h264_qpel8_h_lowpass_l2_sse2 avg_h264_qpel8_h_lowpass_l2_mmxext | |||
#define put_h264_qpel16_h_lowpass_l2_sse2 put_h264_qpel16_h_lowpass_l2_mmxext | |||
#define avg_h264_qpel16_h_lowpass_l2_sse2 avg_h264_qpel16_h_lowpass_l2_mmxext | |||
#define put_h264_qpel8_v_lowpass_ssse3 put_h264_qpel8_v_lowpass_sse2 | |||
#define avg_h264_qpel8_v_lowpass_ssse3 avg_h264_qpel8_v_lowpass_sse2 | |||
#define put_h264_qpel16_v_lowpass_ssse3 put_h264_qpel16_v_lowpass_sse2 | |||
#define avg_h264_qpel16_v_lowpass_ssse3 avg_h264_qpel16_v_lowpass_sse2 | |||
#define put_h264_qpel8or16_hv2_lowpass_sse2 put_h264_qpel8or16_hv2_lowpass_mmx2 | |||
#define avg_h264_qpel8or16_hv2_lowpass_sse2 avg_h264_qpel8or16_hv2_lowpass_mmx2 | |||
#define put_h264_qpel8or16_hv2_lowpass_sse2 put_h264_qpel8or16_hv2_lowpass_mmxext | |||
#define avg_h264_qpel8or16_hv2_lowpass_sse2 avg_h264_qpel8or16_hv2_lowpass_mmxext | |||
#define H264_MC(OPNAME, SIZE, MMX, ALIGN) \ | |||
H264_MC_C(OPNAME, SIZE, MMX, ALIGN)\ | |||
@@ -1045,8 +1045,8 @@ static void put_h264_qpel16_mc00_sse2 (uint8_t *dst, uint8_t *src, int stride){ | |||
static void avg_h264_qpel16_mc00_sse2 (uint8_t *dst, uint8_t *src, int stride){ | |||
avg_pixels16_sse2(dst, src, stride, 16); | |||
} | |||
#define put_h264_qpel8_mc00_sse2 put_h264_qpel8_mc00_mmx2 | |||
#define avg_h264_qpel8_mc00_sse2 avg_h264_qpel8_mc00_mmx2 | |||
#define put_h264_qpel8_mc00_sse2 put_h264_qpel8_mc00_mmxext | |||
#define avg_h264_qpel8_mc00_sse2 avg_h264_qpel8_mc00_mmxext | |||
#define H264_MC_C(OPNAME, SIZE, MMX, ALIGN) \ | |||
static void OPNAME ## h264_qpel ## SIZE ## _mc00_ ## MMX (uint8_t *dst, uint8_t *src, int stride){\ | |||
@@ -1168,8 +1168,8 @@ QPEL_H264(put_, PUT_OP, 3dnow) | |||
QPEL_H264(avg_, AVG_3DNOW_OP, 3dnow) | |||
#undef PAVGB | |||
#define PAVGB "pavgb" | |||
QPEL_H264(put_, PUT_OP, mmx2) | |||
QPEL_H264(avg_,AVG_MMXEXT_OP, mmx2) | |||
QPEL_H264(put_, PUT_OP, mmxext) | |||
QPEL_H264(avg_, AVG_MMXEXT_OP, mmxext) | |||
QPEL_H264_V_XMM(put_, PUT_OP, sse2) | |||
QPEL_H264_V_XMM(avg_,AVG_MMXEXT_OP, sse2) | |||
QPEL_H264_HV_XMM(put_, PUT_OP, sse2) | |||
@@ -1185,7 +1185,7 @@ QPEL_H264_HV_XMM(avg_,AVG_MMXEXT_OP, ssse3) | |||
#undef PAVGB | |||
H264_MC_4816(3dnow) | |||
H264_MC_4816(mmx2) | |||
H264_MC_4816(mmxext) | |||
H264_MC_816(H264_MC_V, sse2) | |||
H264_MC_816(H264_MC_HV, sse2) | |||
#if HAVE_SSSE3_INLINE | |||
@@ -130,18 +130,17 @@ LF_FUNCS(uint16_t, 10) | |||
#if ARCH_X86_32 && HAVE_YASM | |||
LF_FUNC(v8, luma, 8, mmx2) | |||
static void ff_deblock_v_luma_8_mmx2(uint8_t *pix, int stride, int alpha, | |||
int beta, int8_t *tc0) | |||
static void ff_deblock_v_luma_8_mmxext(uint8_t *pix, int stride, int alpha, | |||
int beta, int8_t *tc0) | |||
{ | |||
if ((tc0[0] & tc0[1]) >= 0) | |||
ff_deblock_v8_luma_8_mmx2(pix + 0, stride, alpha, beta, tc0); | |||
if ((tc0[2] & tc0[3]) >= 0) | |||
ff_deblock_v8_luma_8_mmx2(pix + 8, stride, alpha, beta, tc0 + 2); | |||
} | |||
LF_IFUNC(v8, luma_intra, 8, mmx2) | |||
static void ff_deblock_v_luma_intra_8_mmx2(uint8_t *pix, int stride, | |||
int alpha, int beta) | |||
static void ff_deblock_v_luma_intra_8_mmxext(uint8_t *pix, int stride, | |||
int alpha, int beta) | |||
{ | |||
ff_deblock_v8_luma_intra_8_mmx2(pix + 0, stride, alpha, beta); | |||
ff_deblock_v8_luma_intra_8_mmx2(pix + 8, stride, alpha, beta); | |||
@@ -247,9 +246,9 @@ void ff_h264dsp_init_x86(H264DSPContext *c, const int bit_depth, | |||
c->h264_h_loop_filter_chroma_intra = ff_deblock_h_chroma_intra_8_mmx2; | |||
} | |||
#if ARCH_X86_32 | |||
c->h264_v_loop_filter_luma = ff_deblock_v_luma_8_mmx2; | |||
c->h264_v_loop_filter_luma = ff_deblock_v_luma_8_mmxext; | |||
c->h264_h_loop_filter_luma = ff_deblock_h_luma_8_mmx2; | |||
c->h264_v_loop_filter_luma_intra = ff_deblock_v_luma_intra_8_mmx2; | |||
c->h264_v_loop_filter_luma_intra = ff_deblock_v_luma_intra_8_mmxext; | |||
c->h264_h_loop_filter_luma_intra = ff_deblock_h_luma_intra_8_mmx2; | |||
#endif /* ARCH_X86_32 */ | |||
c->weight_h264_pixels_tab[0] = ff_h264_weight_16_mmx2; | |||
@@ -512,7 +512,8 @@ __asm__ volatile( | |||
//----------------------------------------------------------------------------- | |||
void ff_idct_xvid_mmx2(short *block){ | |||
void ff_idct_xvid_mmxext(short *block) | |||
{ | |||
__asm__ volatile( | |||
//# Process each row | |||
DCT_8_INV_ROW_XMM(0*16(%0), 0*16(%0), 64*0(%2), 8*0(%1)) | |||
@@ -542,15 +543,15 @@ void ff_idct_xvid_mmx_add(uint8_t *dest, int line_size, DCTELEM *block) | |||
ff_add_pixels_clamped_mmx(block, dest, line_size); | |||
} | |||
void ff_idct_xvid_mmx2_put(uint8_t *dest, int line_size, DCTELEM *block) | |||
void ff_idct_xvid_mmxext_put(uint8_t *dest, int line_size, DCTELEM *block) | |||
{ | |||
ff_idct_xvid_mmx2(block); | |||
ff_idct_xvid_mmxext(block); | |||
ff_put_pixels_clamped_mmx(block, dest, line_size); | |||
} | |||
void ff_idct_xvid_mmx2_add(uint8_t *dest, int line_size, DCTELEM *block) | |||
void ff_idct_xvid_mmxext_add(uint8_t *dest, int line_size, DCTELEM *block) | |||
{ | |||
ff_idct_xvid_mmx2(block); | |||
ff_idct_xvid_mmxext(block); | |||
ff_add_pixels_clamped_mmx(block, dest, line_size); | |||
} | |||
@@ -34,9 +34,9 @@ void ff_idct_xvid_mmx(short *block); | |||
void ff_idct_xvid_mmx_put(uint8_t *dest, int line_size, DCTELEM *block); | |||
void ff_idct_xvid_mmx_add(uint8_t *dest, int line_size, DCTELEM *block); | |||
void ff_idct_xvid_mmx2(short *block); | |||
void ff_idct_xvid_mmx2_put(uint8_t *dest, int line_size, DCTELEM *block); | |||
void ff_idct_xvid_mmx2_add(uint8_t *dest, int line_size, DCTELEM *block); | |||
void ff_idct_xvid_mmxext(short *block); | |||
void ff_idct_xvid_mmxext_put(uint8_t *dest, int line_size, DCTELEM *block); | |||
void ff_idct_xvid_mmxext_add(uint8_t *dest, int line_size, DCTELEM *block); | |||
void ff_idct_xvid_sse2(short *block); | |||
void ff_idct_xvid_sse2_put(uint8_t *dest, int line_size, short *block); | |||
@@ -74,7 +74,8 @@ static inline void sad8_1_mmx(uint8_t *blk1, uint8_t *blk2, int stride, int h) | |||
); | |||
} | |||
static inline void sad8_1_mmx2(uint8_t *blk1, uint8_t *blk2, int stride, int h) | |||
static inline void sad8_1_mmxext(uint8_t *blk1, uint8_t *blk2, | |||
int stride, int h) | |||
{ | |||
__asm__ volatile( | |||
".p2align 4 \n\t" | |||
@@ -120,7 +121,8 @@ static int sad16_sse2(void *v, uint8_t *blk2, uint8_t *blk1, int stride, int h) | |||
return ret; | |||
} | |||
static inline void sad8_x2a_mmx2(uint8_t *blk1, uint8_t *blk2, int stride, int h) | |||
static inline void sad8_x2a_mmxext(uint8_t *blk1, uint8_t *blk2, | |||
int stride, int h) | |||
{ | |||
__asm__ volatile( | |||
".p2align 4 \n\t" | |||
@@ -142,7 +144,8 @@ static inline void sad8_x2a_mmx2(uint8_t *blk1, uint8_t *blk2, int stride, int h | |||
); | |||
} | |||
static inline void sad8_y2a_mmx2(uint8_t *blk1, uint8_t *blk2, int stride, int h) | |||
static inline void sad8_y2a_mmxext(uint8_t *blk1, uint8_t *blk2, | |||
int stride, int h) | |||
{ | |||
__asm__ volatile( | |||
"movq (%1), %%mm0 \n\t" | |||
@@ -167,7 +170,8 @@ static inline void sad8_y2a_mmx2(uint8_t *blk1, uint8_t *blk2, int stride, int h | |||
); | |||
} | |||
static inline void sad8_4_mmx2(uint8_t *blk1, uint8_t *blk2, int stride, int h) | |||
static inline void sad8_4_mmxext(uint8_t *blk1, uint8_t *blk2, | |||
int stride, int h) | |||
{ | |||
__asm__ volatile( | |||
"movq "MANGLE(bone)", %%mm5 \n\t" | |||
@@ -304,7 +308,7 @@ static inline int sum_mmx(void) | |||
return ret&0xFFFF; | |||
} | |||
static inline int sum_mmx2(void) | |||
static inline int sum_mmxext(void) | |||
{ | |||
int ret; | |||
__asm__ volatile( | |||
@@ -424,7 +428,7 @@ static int sad16_xy2_ ## suf(void *v, uint8_t *blk2, uint8_t *blk1, int stride, | |||
}\ | |||
PIX_SAD(mmx) | |||
PIX_SAD(mmx2) | |||
PIX_SAD(mmxext) | |||
#endif /* HAVE_INLINE_ASM */ | |||
@@ -447,19 +451,19 @@ void ff_dsputil_init_pix_mmx(DSPContext* c, AVCodecContext *avctx) | |||
c->sad[1]= sad8_mmx; | |||
} | |||
if (mm_flags & AV_CPU_FLAG_MMXEXT) { | |||
c->pix_abs[0][0] = sad16_mmx2; | |||
c->pix_abs[1][0] = sad8_mmx2; | |||
c->pix_abs[0][0] = sad16_mmxext; | |||
c->pix_abs[1][0] = sad8_mmxext; | |||
c->sad[0]= sad16_mmx2; | |||
c->sad[1]= sad8_mmx2; | |||
c->sad[0] = sad16_mmxext; | |||
c->sad[1] = sad8_mmxext; | |||
if(!(avctx->flags & CODEC_FLAG_BITEXACT)){ | |||
c->pix_abs[0][1] = sad16_x2_mmx2; | |||
c->pix_abs[0][2] = sad16_y2_mmx2; | |||
c->pix_abs[0][3] = sad16_xy2_mmx2; | |||
c->pix_abs[1][1] = sad8_x2_mmx2; | |||
c->pix_abs[1][2] = sad8_y2_mmx2; | |||
c->pix_abs[1][3] = sad8_xy2_mmx2; | |||
c->pix_abs[0][1] = sad16_x2_mmxext; | |||
c->pix_abs[0][2] = sad16_y2_mmxext; | |||
c->pix_abs[0][3] = sad16_xy2_mmxext; | |||
c->pix_abs[1][1] = sad8_x2_mmxext; | |||
c->pix_abs[1][2] = sad8_y2_mmxext; | |||
c->pix_abs[1][3] = sad8_xy2_mmxext; | |||
} | |||
} | |||
if ((mm_flags & AV_CPU_FLAG_SSE2) && !(mm_flags & AV_CPU_FLAG_3DNOW) && avctx->codec_id != AV_CODEC_ID_SNOW) { | |||
@@ -47,8 +47,8 @@ extern uint16_t ff_inv_zigzag_direct16[64]; | |||
#define COMPILE_TEMPLATE_SSSE3 0 | |||
#undef RENAME | |||
#undef RENAMEl | |||
#define RENAME(a) a ## _MMX2 | |||
#define RENAMEl(a) a ## _mmx2 | |||
#define RENAME(a) a ## _MMXEXT | |||
#define RENAMEl(a) a ## _mmxext | |||
#include "mpegvideoenc_template.c" | |||
#endif /* HAVE_MMXEXT_INLINE */ | |||
@@ -92,7 +92,7 @@ void ff_dct_encode_init_x86(MpegEncContext *s) | |||
#endif | |||
#if HAVE_MMXEXT_INLINE | |||
if (INLINE_MMXEXT(mm_flags)) | |||
s->dct_quantize = dct_quantize_MMX2; | |||
s->dct_quantize = dct_quantize_MMXEXT; | |||
#endif | |||
#if HAVE_SSE2_INLINE | |||
if (INLINE_SSE2(mm_flags)) | |||
@@ -466,7 +466,10 @@ VC1_MSPEL_MC(avg_) | |||
static void put_vc1_mspel_mc ## a ## b ## _mmx(uint8_t *dst, const uint8_t *src, int stride, int rnd) { \ | |||
put_vc1_mspel_mc(dst, src, stride, a, b, rnd); \ | |||
}\ | |||
static void avg_vc1_mspel_mc ## a ## b ## _mmx2(uint8_t *dst, const uint8_t *src, int stride, int rnd) { \ | |||
static void avg_vc1_mspel_mc ## a ## b ## _mmxext(uint8_t *dst, \ | |||
const uint8_t *src, \ | |||
int stride, int rnd) \ | |||
{ \ | |||
avg_vc1_mspel_mc(dst, src, stride, a, b, rnd); \ | |||
} | |||
@@ -489,7 +492,8 @@ DECLARE_FUNCTION(3, 1) | |||
DECLARE_FUNCTION(3, 2) | |||
DECLARE_FUNCTION(3, 3) | |||
static void vc1_inv_trans_4x4_dc_mmx2(uint8_t *dest, int linesize, DCTELEM *block) | |||
static void vc1_inv_trans_4x4_dc_mmxext(uint8_t *dest, int linesize, | |||
DCTELEM *block) | |||
{ | |||
int dc = block[0]; | |||
dc = (17 * dc + 4) >> 3; | |||
@@ -527,7 +531,8 @@ static void vc1_inv_trans_4x4_dc_mmx2(uint8_t *dest, int linesize, DCTELEM *bloc | |||
); | |||
} | |||
static void vc1_inv_trans_4x8_dc_mmx2(uint8_t *dest, int linesize, DCTELEM *block) | |||
static void vc1_inv_trans_4x8_dc_mmxext(uint8_t *dest, int linesize, | |||
DCTELEM *block) | |||
{ | |||
int dc = block[0]; | |||
dc = (17 * dc + 4) >> 3; | |||
@@ -588,7 +593,8 @@ static void vc1_inv_trans_4x8_dc_mmx2(uint8_t *dest, int linesize, DCTELEM *bloc | |||
); | |||
} | |||
static void vc1_inv_trans_8x4_dc_mmx2(uint8_t *dest, int linesize, DCTELEM *block) | |||
static void vc1_inv_trans_8x4_dc_mmxext(uint8_t *dest, int linesize, | |||
DCTELEM *block) | |||
{ | |||
int dc = block[0]; | |||
dc = ( 3 * dc + 1) >> 1; | |||
@@ -626,7 +632,8 @@ static void vc1_inv_trans_8x4_dc_mmx2(uint8_t *dest, int linesize, DCTELEM *bloc | |||
); | |||
} | |||
static void vc1_inv_trans_8x8_dc_mmx2(uint8_t *dest, int linesize, DCTELEM *block) | |||
static void vc1_inv_trans_8x8_dc_mmxext(uint8_t *dest, int linesize, | |||
DCTELEM *block) | |||
{ | |||
int dc = block[0]; | |||
dc = (3 * dc + 1) >> 1; | |||
@@ -712,29 +719,29 @@ av_cold void ff_vc1dsp_init_mmx(VC1DSPContext *dsp) | |||
av_cold void ff_vc1dsp_init_mmxext(VC1DSPContext *dsp) | |||
{ | |||
dsp->avg_vc1_mspel_pixels_tab[ 0] = ff_avg_vc1_mspel_mc00_mmx2; | |||
dsp->avg_vc1_mspel_pixels_tab[ 4] = avg_vc1_mspel_mc01_mmx2; | |||
dsp->avg_vc1_mspel_pixels_tab[ 8] = avg_vc1_mspel_mc02_mmx2; | |||
dsp->avg_vc1_mspel_pixels_tab[12] = avg_vc1_mspel_mc03_mmx2; | |||
dsp->avg_vc1_mspel_pixels_tab[ 1] = avg_vc1_mspel_mc10_mmx2; | |||
dsp->avg_vc1_mspel_pixels_tab[ 5] = avg_vc1_mspel_mc11_mmx2; | |||
dsp->avg_vc1_mspel_pixels_tab[ 9] = avg_vc1_mspel_mc12_mmx2; | |||
dsp->avg_vc1_mspel_pixels_tab[13] = avg_vc1_mspel_mc13_mmx2; | |||
dsp->avg_vc1_mspel_pixels_tab[ 2] = avg_vc1_mspel_mc20_mmx2; | |||
dsp->avg_vc1_mspel_pixels_tab[ 6] = avg_vc1_mspel_mc21_mmx2; | |||
dsp->avg_vc1_mspel_pixels_tab[10] = avg_vc1_mspel_mc22_mmx2; | |||
dsp->avg_vc1_mspel_pixels_tab[14] = avg_vc1_mspel_mc23_mmx2; | |||
dsp->avg_vc1_mspel_pixels_tab[ 3] = avg_vc1_mspel_mc30_mmx2; | |||
dsp->avg_vc1_mspel_pixels_tab[ 7] = avg_vc1_mspel_mc31_mmx2; | |||
dsp->avg_vc1_mspel_pixels_tab[11] = avg_vc1_mspel_mc32_mmx2; | |||
dsp->avg_vc1_mspel_pixels_tab[15] = avg_vc1_mspel_mc33_mmx2; | |||
dsp->vc1_inv_trans_8x8_dc = vc1_inv_trans_8x8_dc_mmx2; | |||
dsp->vc1_inv_trans_4x8_dc = vc1_inv_trans_4x8_dc_mmx2; | |||
dsp->vc1_inv_trans_8x4_dc = vc1_inv_trans_8x4_dc_mmx2; | |||
dsp->vc1_inv_trans_4x4_dc = vc1_inv_trans_4x4_dc_mmx2; | |||
dsp->avg_vc1_mspel_pixels_tab[ 0] = ff_avg_vc1_mspel_mc00_mmxext; | |||
dsp->avg_vc1_mspel_pixels_tab[ 4] = avg_vc1_mspel_mc01_mmxext; | |||
dsp->avg_vc1_mspel_pixels_tab[ 8] = avg_vc1_mspel_mc02_mmxext; | |||
dsp->avg_vc1_mspel_pixels_tab[12] = avg_vc1_mspel_mc03_mmxext; | |||
dsp->avg_vc1_mspel_pixels_tab[ 1] = avg_vc1_mspel_mc10_mmxext; | |||
dsp->avg_vc1_mspel_pixels_tab[ 5] = avg_vc1_mspel_mc11_mmxext; | |||
dsp->avg_vc1_mspel_pixels_tab[ 9] = avg_vc1_mspel_mc12_mmxext; | |||
dsp->avg_vc1_mspel_pixels_tab[13] = avg_vc1_mspel_mc13_mmxext; | |||
dsp->avg_vc1_mspel_pixels_tab[ 2] = avg_vc1_mspel_mc20_mmxext; | |||
dsp->avg_vc1_mspel_pixels_tab[ 6] = avg_vc1_mspel_mc21_mmxext; | |||
dsp->avg_vc1_mspel_pixels_tab[10] = avg_vc1_mspel_mc22_mmxext; | |||
dsp->avg_vc1_mspel_pixels_tab[14] = avg_vc1_mspel_mc23_mmxext; | |||
dsp->avg_vc1_mspel_pixels_tab[ 3] = avg_vc1_mspel_mc30_mmxext; | |||
dsp->avg_vc1_mspel_pixels_tab[ 7] = avg_vc1_mspel_mc31_mmxext; | |||
dsp->avg_vc1_mspel_pixels_tab[11] = avg_vc1_mspel_mc32_mmxext; | |||
dsp->avg_vc1_mspel_pixels_tab[15] = avg_vc1_mspel_mc33_mmxext; | |||
dsp->vc1_inv_trans_8x8_dc = vc1_inv_trans_8x8_dc_mmxext; | |||
dsp->vc1_inv_trans_4x8_dc = vc1_inv_trans_4x8_dc_mmxext; | |||
dsp->vc1_inv_trans_8x4_dc = vc1_inv_trans_8x4_dc_mmxext; | |||
dsp->vc1_inv_trans_4x4_dc = vc1_inv_trans_4x4_dc_mmxext; | |||
} | |||
#endif /* HAVE_INLINE_ASM */ |
@@ -30,7 +30,9 @@ DECLARE_ALIGNED(16, static const uint16_t, pw_7f)[8] = {0x7F,0x7F,0x7F,0x7F,0x7F | |||
DECLARE_ALIGNED(16, static const uint16_t, pw_ff)[8] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; | |||
#if HAVE_MMXEXT_INLINE | |||
static void gradfun_filter_line_mmx2(uint8_t *dst, const uint8_t *src, const uint16_t *dc, int width, int thresh, const uint16_t *dithers) | |||
static void gradfun_filter_line_mmxext(uint8_t *dst, const uint8_t *src, const uint16_t *dc, | |||
int width, int thresh, | |||
const uint16_t *dithers) | |||
{ | |||
intptr_t x; | |||
if (width & 3) { | |||
@@ -175,7 +177,7 @@ av_cold void ff_gradfun_init_x86(GradFunContext *gf) | |||
#if HAVE_MMXEXT_INLINE | |||
if (cpu_flags & AV_CPU_FLAG_MMXEXT) | |||
gf->filter_line = gradfun_filter_line_mmx2; | |||
gf->filter_line = gradfun_filter_line_mmxext; | |||
#endif | |||
#if HAVE_SSSE3_INLINE | |||
if (cpu_flags & AV_CPU_FLAG_SSSE3) | |||
@@ -48,7 +48,7 @@ DECLARE_ASM_CONST(16, const xmm_reg, pw_1) = {0x0001000100010001ULL, 0x000100010 | |||
#if HAVE_MMXEXT_INLINE | |||
#undef RENAME | |||
#define RENAME(a) a ## _mmx2 | |||
#define RENAME(a) a ## _mmxext | |||
#include "yadif_template.c" | |||
#endif | |||
@@ -60,7 +60,7 @@ av_cold void ff_yadif_init_x86(YADIFContext *yadif) | |||
#if HAVE_MMXEXT_INLINE | |||
if (cpu_flags & AV_CPU_FLAG_MMXEXT) | |||
yadif->filter_line = yadif_filter_line_mmx2; | |||
yadif->filter_line = yadif_filter_line_mmxext; | |||
#endif | |||
#if HAVE_SSE2_INLINE | |||
if (cpu_flags & AV_CPU_FLAG_SSE2) | |||
@@ -935,6 +935,7 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c) | |||
case AV_PIX_FMT_YUV420P14LE: | |||
case AV_PIX_FMT_YUV420P16LE: | |||
case AV_PIX_FMT_YUV422P16LE: | |||
case AV_PIX_FMT_YUV444P16LE: | |||
case AV_PIX_FMT_YUVA444P9LE: | |||
case AV_PIX_FMT_YUVA422P9LE: | |||
@@ -945,7 +946,6 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c) | |||
case AV_PIX_FMT_YUVA420P16LE: | |||
case AV_PIX_FMT_YUVA422P16LE: | |||
case AV_PIX_FMT_YUVA444P16LE: | |||
case AV_PIX_FMT_YUV444P16LE: | |||
c->chrToYV12 = bswap16UV_c; | |||
break; | |||
#else | |||
@@ -1186,6 +1186,9 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c) | |||
case AV_PIX_FMT_YUV422P16LE: | |||
case AV_PIX_FMT_YUV444P16LE: | |||
case AV_PIX_FMT_GRAY16LE: | |||
c->lumToYV12 = bswap16Y_c; | |||
break; | |||
case AV_PIX_FMT_YUVA444P9LE: | |||
case AV_PIX_FMT_YUVA422P9LE: | |||
case AV_PIX_FMT_YUVA420P9LE: | |||
@@ -1195,8 +1198,8 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c) | |||
case AV_PIX_FMT_YUVA420P16LE: | |||
case AV_PIX_FMT_YUVA422P16LE: | |||
case AV_PIX_FMT_YUVA444P16LE: | |||
case AV_PIX_FMT_GRAY16LE: | |||
c->lumToYV12 = bswap16Y_c; | |||
c->alpToYV12 = bswap16Y_c; | |||
break; | |||
#else | |||
case AV_PIX_FMT_YUV444P9BE: | |||
@@ -1215,6 +1218,9 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c) | |||
case AV_PIX_FMT_YUV422P16BE: | |||
case AV_PIX_FMT_YUV444P16BE: | |||
case AV_PIX_FMT_GRAY16BE: | |||
c->lumToYV12 = bswap16Y_c; | |||
break; | |||
case AV_PIX_FMT_YUVA444P9BE: | |||
case AV_PIX_FMT_YUVA422P9BE: | |||
case AV_PIX_FMT_YUVA420P9BE: | |||
@@ -1224,8 +1230,8 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c) | |||
case AV_PIX_FMT_YUVA420P16BE: | |||
case AV_PIX_FMT_YUVA422P16BE: | |||
case AV_PIX_FMT_YUVA444P16BE: | |||
case AV_PIX_FMT_GRAY16BE: | |||
c->lumToYV12 = bswap16Y_c; | |||
c->alpToYV12 = bswap16Y_c; | |||
break; | |||
#endif | |||
case AV_PIX_FMT_YUYV422: | |||
@@ -627,8 +627,9 @@ fail: | |||
} | |||
#if HAVE_MMXEXT_INLINE | |||
static int initMMX2HScaler(int dstW, int xInc, uint8_t *filterCode, | |||
int16_t *filter, int32_t *filterPos, int numSplits) | |||
static int init_hscaler_mmxext(int dstW, int xInc, uint8_t *filterCode, | |||
int16_t *filter, int32_t *filterPos, | |||
int numSplits) | |||
{ | |||
uint8_t *fragmentA; | |||
x86_reg imm8OfPShufW1A; | |||
@@ -1107,10 +1108,10 @@ av_cold int sws_init_context(SwsContext *c, SwsFilter *srcFilter, | |||
#if HAVE_MMXEXT_INLINE | |||
// can't downscale !!! | |||
if (c->canMMXEXTBeUsed && (flags & SWS_FAST_BILINEAR)) { | |||
c->lumMmxextFilterCodeSize = initMMX2HScaler(dstW, c->lumXInc, NULL, | |||
NULL, NULL, 8); | |||
c->chrMmxextFilterCodeSize = initMMX2HScaler(c->chrDstW, c->chrXInc, | |||
NULL, NULL, NULL, 4); | |||
c->lumMmxextFilterCodeSize = init_hscaler_mmxext(dstW, c->lumXInc, NULL, | |||
NULL, NULL, 8); | |||
c->chrMmxextFilterCodeSize = init_hscaler_mmxext(c->chrDstW, c->chrXInc, | |||
NULL, NULL, NULL, 4); | |||
#if USE_MMAP | |||
c->lumMmxextFilterCode = mmap(NULL, c->lumMmxextFilterCodeSize, | |||
@@ -1150,10 +1151,10 @@ av_cold int sws_init_context(SwsContext *c, SwsFilter *srcFilter, | |||
FF_ALLOCZ_OR_GOTO(c, c->hLumFilterPos, (dstW / 2 / 8 + 8) * sizeof(int32_t), fail); | |||
FF_ALLOCZ_OR_GOTO(c, c->hChrFilterPos, (c->chrDstW / 2 / 4 + 8) * sizeof(int32_t), fail); | |||
initMMX2HScaler( dstW, c->lumXInc, c->lumMmxextFilterCode, | |||
c->hLumFilter, (uint32_t*)c->hLumFilterPos, 8); | |||
initMMX2HScaler(c->chrDstW, c->chrXInc, c->chrMmxextFilterCode, | |||
c->hChrFilter, (uint32_t*)c->hChrFilterPos, 4); | |||
init_hscaler_mmxext( dstW, c->lumXInc, c->lumMmxextFilterCode, | |||
c->hLumFilter, (uint32_t*)c->hLumFilterPos, 8); | |||
init_hscaler_mmxext(c->chrDstW, c->chrXInc, c->chrMmxextFilterCode, | |||
c->hChrFilter, (uint32_t*)c->hChrFilterPos, 4); | |||
#if USE_MMAP | |||
mprotect(c->lumMmxextFilterCode, c->lumMmxextFilterCodeSize, PROT_EXEC | PROT_READ); | |||
@@ -102,7 +102,7 @@ DECLARE_ASM_CONST(8, uint64_t, mul16_mid) = 0x2080208020802080ULL; | |||
#undef RENAME | |||
#undef COMPILE_TEMPLATE_MMXEXT | |||
#define COMPILE_TEMPLATE_MMXEXT 1 | |||
#define RENAME(a) a ## _MMX2 | |||
#define RENAME(a) a ## _MMXEXT | |||
#include "rgb2rgb_template.c" | |||
//SSE2 versions | |||
@@ -142,7 +142,7 @@ av_cold void rgb2rgb_init_x86(void) | |||
if (INLINE_AMD3DNOW(cpu_flags)) | |||
rgb2rgb_init_3DNOW(); | |||
if (INLINE_MMXEXT(cpu_flags)) | |||
rgb2rgb_init_MMX2(); | |||
rgb2rgb_init_MMXEXT(); | |||
if (INLINE_SSE2(cpu_flags)) | |||
rgb2rgb_init_SSE2(); | |||
#endif /* HAVE_INLINE_ASM */ | |||
@@ -85,7 +85,7 @@ DECLARE_ALIGNED(8, const uint64_t, ff_w1111) = 0x0001000100010001ULL; | |||
#undef RENAME | |||
#undef COMPILE_TEMPLATE_MMXEXT | |||
#define COMPILE_TEMPLATE_MMXEXT 1 | |||
#define RENAME(a) a ## _MMX2 | |||
#define RENAME(a) a ## _MMXEXT | |||
#include "swscale_template.c" | |||
#endif | |||
@@ -211,7 +211,7 @@ static void yuv2yuvX_sse3(const int16_t *filter, int filterSize, | |||
const uint8_t *dither, int offset) | |||
{ | |||
if(((int)dest) & 15){ | |||
return yuv2yuvX_MMX2(filter, filterSize, src, dest, dstW, dither, offset); | |||
return yuv2yuvX_MMXEXT(filter, filterSize, src, dest, dstW, dither, offset); | |||
} | |||
if (offset) { | |||
__asm__ volatile("movq (%0), %%xmm3\n\t" | |||
@@ -381,7 +381,7 @@ av_cold void ff_sws_init_swScale_mmx(SwsContext *c) | |||
sws_init_swScale_MMX(c); | |||
#if HAVE_MMXEXT_INLINE | |||
if (cpu_flags & AV_CPU_FLAG_MMXEXT) | |||
sws_init_swScale_MMX2(c); | |||
sws_init_swScale_MMXEXT(c); | |||
if (cpu_flags & AV_CPU_FLAG_SSE3){ | |||
if(c->use_mmx_vfilter && !(c->flags & SWS_ACCURATE_RND)) | |||
c->yuv2planeX = yuv2yuvX_sse3; | |||
@@ -63,7 +63,7 @@ DECLARE_ASM_CONST(8, uint64_t, pb_07) = 0x0707070707070707ULL; | |||
#undef RENAME | |||
#undef COMPILE_TEMPLATE_MMXEXT | |||
#define COMPILE_TEMPLATE_MMXEXT 1 | |||
#define RENAME(a) a ## _MMX2 | |||
#define RENAME(a) a ## _MMXEXT | |||
#include "yuv2rgb_template.c" | |||
#endif /* HAVE_MMXEXT_INLINE */ | |||
@@ -77,8 +77,10 @@ av_cold SwsFunc ff_yuv2rgb_init_mmx(SwsContext *c) | |||
#if HAVE_MMXEXT_INLINE | |||
if (cpu_flags & AV_CPU_FLAG_MMXEXT) { | |||
switch (c->dstFormat) { | |||
case AV_PIX_FMT_RGB24: return yuv420_rgb24_MMX2; | |||
case AV_PIX_FMT_BGR24: return yuv420_bgr24_MMX2; | |||
case AV_PIX_FMT_RGB24: | |||
return yuv420_rgb24_MMXEXT; | |||
case AV_PIX_FMT_BGR24: | |||
return yuv420_bgr24_MMXEXT; | |||
} | |||
} | |||
#endif | |||