mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
x86/dsputil: put inline asm under HAVE_INLINE_ASM.
This allows compiling with compilers that don't support gcc-style inline assembly. Signed-off-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
This commit is contained in:
parent
845e92fd6a
commit
79195ce565
@ -108,7 +108,7 @@ static const struct algo idct_tab[] = {
|
|||||||
{ "INT", ff_j_rev_dct, MMX_PERM },
|
{ "INT", ff_j_rev_dct, MMX_PERM },
|
||||||
{ "SIMPLE-C", ff_simple_idct_8, NO_PERM },
|
{ "SIMPLE-C", ff_simple_idct_8, NO_PERM },
|
||||||
|
|
||||||
#if HAVE_MMX
|
#if HAVE_MMX && HAVE_INLINE_ASM
|
||||||
#if CONFIG_GPL
|
#if CONFIG_GPL
|
||||||
{ "LIBMPEG2-MMX", ff_mmx_idct, MMX_PERM, AV_CPU_FLAG_MMX, 1 },
|
{ "LIBMPEG2-MMX", ff_mmx_idct, MMX_PERM, AV_CPU_FLAG_MMX, 1 },
|
||||||
{ "LIBMPEG2-MMX2", ff_mmxext_idct, MMX_PERM, AV_CPU_FLAG_MMX2, 1 },
|
{ "LIBMPEG2-MMX2", ff_mmxext_idct, MMX_PERM, AV_CPU_FLAG_MMX2, 1 },
|
||||||
|
@ -84,6 +84,8 @@ DECLARE_ALIGNED(16, const xmm_reg, ff_pb_FE) = { 0xFEFEFEFEFEFEFEFEULL, 0xFEF
|
|||||||
DECLARE_ALIGNED(16, const double, ff_pd_1)[2] = { 1.0, 1.0 };
|
DECLARE_ALIGNED(16, const double, ff_pd_1)[2] = { 1.0, 1.0 };
|
||||||
DECLARE_ALIGNED(16, const double, ff_pd_2)[2] = { 2.0, 2.0 };
|
DECLARE_ALIGNED(16, const double, ff_pd_2)[2] = { 2.0, 2.0 };
|
||||||
|
|
||||||
|
#if HAVE_INLINE_ASM
|
||||||
|
|
||||||
#define JUMPALIGN() __asm__ volatile (".p2align 3"::)
|
#define JUMPALIGN() __asm__ volatile (".p2align 3"::)
|
||||||
#define MOVQ_ZERO(regd) __asm__ volatile ("pxor %%"#regd", %%"#regd ::)
|
#define MOVQ_ZERO(regd) __asm__ volatile ("pxor %%"#regd", %%"#regd ::)
|
||||||
|
|
||||||
@ -1836,6 +1838,8 @@ void ff_avg_rv40_qpel16_mc33_mmx(uint8_t *dst, uint8_t *src, int stride)
|
|||||||
avg_pixels16_xy2_mmx(dst, src, stride, 16);
|
avg_pixels16_xy2_mmx(dst, src, stride, 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif /* HAVE_INLINE_ASM */
|
||||||
|
|
||||||
#if HAVE_YASM
|
#if HAVE_YASM
|
||||||
typedef void emu_edge_core_func(uint8_t *buf, const uint8_t *src,
|
typedef void emu_edge_core_func(uint8_t *buf, const uint8_t *src,
|
||||||
x86_reg linesize, x86_reg start_y,
|
x86_reg linesize, x86_reg start_y,
|
||||||
@ -1904,6 +1908,8 @@ static av_noinline void emulated_edge_mc_sse(uint8_t *buf, const uint8_t *src,
|
|||||||
}
|
}
|
||||||
#endif /* HAVE_YASM */
|
#endif /* HAVE_YASM */
|
||||||
|
|
||||||
|
#if HAVE_INLINE_ASM
|
||||||
|
|
||||||
typedef void emulated_edge_mc_func(uint8_t *dst, const uint8_t *src,
|
typedef void emulated_edge_mc_func(uint8_t *dst, const uint8_t *src,
|
||||||
int linesize, int block_w, int block_h,
|
int linesize, int block_w, int block_h,
|
||||||
int src_x, int src_y, int w, int h);
|
int src_x, int src_y, int w, int h);
|
||||||
@ -2073,6 +2079,8 @@ PREFETCH(prefetch_mmx2, prefetcht0)
|
|||||||
PREFETCH(prefetch_3dnow, prefetch)
|
PREFETCH(prefetch_3dnow, prefetch)
|
||||||
#undef PREFETCH
|
#undef PREFETCH
|
||||||
|
|
||||||
|
#endif /* HAVE_INLINE_ASM */
|
||||||
|
|
||||||
#include "h264_qpel_mmx.c"
|
#include "h264_qpel_mmx.c"
|
||||||
|
|
||||||
void ff_put_h264_chroma_mc8_mmx_rnd (uint8_t *dst, uint8_t *src,
|
void ff_put_h264_chroma_mc8_mmx_rnd (uint8_t *dst, uint8_t *src,
|
||||||
@ -2118,6 +2126,8 @@ CHROMA_MC(avg, 8, 10, sse2)
|
|||||||
CHROMA_MC(put, 8, 10, avx)
|
CHROMA_MC(put, 8, 10, avx)
|
||||||
CHROMA_MC(avg, 8, 10, avx)
|
CHROMA_MC(avg, 8, 10, avx)
|
||||||
|
|
||||||
|
#if HAVE_INLINE_ASM
|
||||||
|
|
||||||
/* CAVS-specific */
|
/* CAVS-specific */
|
||||||
void ff_put_cavs_qpel8_mc00_mmx2(uint8_t *dst, uint8_t *src, int stride)
|
void ff_put_cavs_qpel8_mc00_mmx2(uint8_t *dst, uint8_t *src, int stride)
|
||||||
{
|
{
|
||||||
@ -2476,6 +2486,8 @@ static void vector_clipf_sse(float *dst, const float *src,
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif /* HAVE_INLINE_ASM */
|
||||||
|
|
||||||
int32_t ff_scalarproduct_int16_mmx2(const int16_t *v1, const int16_t *v2,
|
int32_t ff_scalarproduct_int16_mmx2(const int16_t *v1, const int16_t *v2,
|
||||||
int order);
|
int order);
|
||||||
int32_t ff_scalarproduct_int16_sse2(const int16_t *v1, const int16_t *v2,
|
int32_t ff_scalarproduct_int16_sse2(const int16_t *v1, const int16_t *v2,
|
||||||
@ -2588,6 +2600,7 @@ static void dsputil_init_mmx(DSPContext *c, AVCodecContext *avctx, int mm_flags)
|
|||||||
{
|
{
|
||||||
const int high_bit_depth = avctx->bits_per_raw_sample > 8;
|
const int high_bit_depth = avctx->bits_per_raw_sample > 8;
|
||||||
|
|
||||||
|
#if HAVE_INLINE_ASM
|
||||||
c->put_pixels_clamped = ff_put_pixels_clamped_mmx;
|
c->put_pixels_clamped = ff_put_pixels_clamped_mmx;
|
||||||
c->put_signed_pixels_clamped = ff_put_signed_pixels_clamped_mmx;
|
c->put_signed_pixels_clamped = ff_put_signed_pixels_clamped_mmx;
|
||||||
c->add_pixels_clamped = ff_add_pixels_clamped_mmx;
|
c->add_pixels_clamped = ff_add_pixels_clamped_mmx;
|
||||||
@ -2610,10 +2623,6 @@ static void dsputil_init_mmx(DSPContext *c, AVCodecContext *avctx, int mm_flags)
|
|||||||
#if ARCH_X86_32 || !HAVE_YASM
|
#if ARCH_X86_32 || !HAVE_YASM
|
||||||
c->gmc = gmc_mmx;
|
c->gmc = gmc_mmx;
|
||||||
#endif
|
#endif
|
||||||
#if ARCH_X86_32 && HAVE_YASM
|
|
||||||
if (!high_bit_depth)
|
|
||||||
c->emulated_edge_mc = emulated_edge_mc_mmx;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
c->add_bytes = add_bytes_mmx;
|
c->add_bytes = add_bytes_mmx;
|
||||||
|
|
||||||
@ -2621,8 +2630,14 @@ static void dsputil_init_mmx(DSPContext *c, AVCodecContext *avctx, int mm_flags)
|
|||||||
c->h263_v_loop_filter = h263_v_loop_filter_mmx;
|
c->h263_v_loop_filter = h263_v_loop_filter_mmx;
|
||||||
c->h263_h_loop_filter = h263_h_loop_filter_mmx;
|
c->h263_h_loop_filter = h263_h_loop_filter_mmx;
|
||||||
}
|
}
|
||||||
|
#endif /* HAVE_INLINE_ASM */
|
||||||
|
|
||||||
#if HAVE_YASM
|
#if HAVE_YASM
|
||||||
|
#if ARCH_X86_32
|
||||||
|
if (!high_bit_depth)
|
||||||
|
c->emulated_edge_mc = emulated_edge_mc_mmx;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!high_bit_depth && CONFIG_H264CHROMA) {
|
if (!high_bit_depth && CONFIG_H264CHROMA) {
|
||||||
c->put_h264_chroma_pixels_tab[0] = ff_put_h264_chroma_mc8_mmx_rnd;
|
c->put_h264_chroma_pixels_tab[0] = ff_put_h264_chroma_mc8_mmx_rnd;
|
||||||
c->put_h264_chroma_pixels_tab[1] = ff_put_h264_chroma_mc4_mmx;
|
c->put_h264_chroma_pixels_tab[1] = ff_put_h264_chroma_mc4_mmx;
|
||||||
@ -2639,6 +2654,7 @@ static void dsputil_init_mmx2(DSPContext *c, AVCodecContext *avctx,
|
|||||||
const int bit_depth = avctx->bits_per_raw_sample;
|
const int bit_depth = avctx->bits_per_raw_sample;
|
||||||
const int high_bit_depth = bit_depth > 8;
|
const int high_bit_depth = bit_depth > 8;
|
||||||
|
|
||||||
|
#if HAVE_INLINE_ASM
|
||||||
c->prefetch = prefetch_mmx2;
|
c->prefetch = prefetch_mmx2;
|
||||||
|
|
||||||
if (!high_bit_depth) {
|
if (!high_bit_depth) {
|
||||||
@ -2674,22 +2690,27 @@ static void dsputil_init_mmx2(DSPContext *c, AVCodecContext *avctx,
|
|||||||
c->put_no_rnd_pixels_tab[1][1] = put_no_rnd_pixels8_x2_exact_mmx2;
|
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][2] = put_no_rnd_pixels8_y2_exact_mmx2;
|
||||||
}
|
}
|
||||||
|
#endif /* HAVE_INLINE_ASM */
|
||||||
|
|
||||||
if (CONFIG_H264QPEL) {
|
if (CONFIG_H264QPEL) {
|
||||||
|
#if HAVE_INLINE_ASM
|
||||||
SET_QPEL_FUNCS(put_qpel, 0, 16, mmx2, );
|
SET_QPEL_FUNCS(put_qpel, 0, 16, mmx2, );
|
||||||
SET_QPEL_FUNCS(put_qpel, 1, 8, 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, 0, 16, mmx2, );
|
||||||
SET_QPEL_FUNCS(put_no_rnd_qpel, 1, 8, mmx2, );
|
SET_QPEL_FUNCS(put_no_rnd_qpel, 1, 8, mmx2, );
|
||||||
SET_QPEL_FUNCS(avg_qpel, 0, 16, mmx2, );
|
SET_QPEL_FUNCS(avg_qpel, 0, 16, mmx2, );
|
||||||
SET_QPEL_FUNCS(avg_qpel, 1, 8, mmx2, );
|
SET_QPEL_FUNCS(avg_qpel, 1, 8, mmx2, );
|
||||||
|
#endif /* HAVE_INLINE_ASM */
|
||||||
|
|
||||||
if (!high_bit_depth) {
|
if (!high_bit_depth) {
|
||||||
|
#if HAVE_INLINE_ASM
|
||||||
SET_QPEL_FUNCS(put_h264_qpel, 0, 16, mmx2, );
|
SET_QPEL_FUNCS(put_h264_qpel, 0, 16, mmx2, );
|
||||||
SET_QPEL_FUNCS(put_h264_qpel, 1, 8, mmx2, );
|
SET_QPEL_FUNCS(put_h264_qpel, 1, 8, mmx2, );
|
||||||
SET_QPEL_FUNCS(put_h264_qpel, 2, 4, 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, 0, 16, mmx2, );
|
||||||
SET_QPEL_FUNCS(avg_h264_qpel, 1, 8, mmx2, );
|
SET_QPEL_FUNCS(avg_h264_qpel, 1, 8, mmx2, );
|
||||||
SET_QPEL_FUNCS(avg_h264_qpel, 2, 4, mmx2, );
|
SET_QPEL_FUNCS(avg_h264_qpel, 2, 4, mmx2, );
|
||||||
|
#endif /* HAVE_INLINE_ASM */
|
||||||
} else if (bit_depth == 10) {
|
} else if (bit_depth == 10) {
|
||||||
#if HAVE_YASM
|
#if HAVE_YASM
|
||||||
#if !ARCH_X86_64
|
#if !ARCH_X86_64
|
||||||
@ -2703,10 +2724,12 @@ static void dsputil_init_mmx2(DSPContext *c, AVCodecContext *avctx,
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if HAVE_INLINE_ASM
|
||||||
SET_QPEL_FUNCS(put_2tap_qpel, 0, 16, mmx2, );
|
SET_QPEL_FUNCS(put_2tap_qpel, 0, 16, mmx2, );
|
||||||
SET_QPEL_FUNCS(put_2tap_qpel, 1, 8, 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, 0, 16, mmx2, );
|
||||||
SET_QPEL_FUNCS(avg_2tap_qpel, 1, 8, mmx2, );
|
SET_QPEL_FUNCS(avg_2tap_qpel, 1, 8, mmx2, );
|
||||||
|
#endif /* HAVE_INLINE_ASM */
|
||||||
}
|
}
|
||||||
|
|
||||||
#if HAVE_YASM
|
#if HAVE_YASM
|
||||||
@ -2741,6 +2764,7 @@ static void dsputil_init_3dnow(DSPContext *c, AVCodecContext *avctx,
|
|||||||
{
|
{
|
||||||
const int high_bit_depth = avctx->bits_per_raw_sample > 8;
|
const int high_bit_depth = avctx->bits_per_raw_sample > 8;
|
||||||
|
|
||||||
|
#if HAVE_INLINE_ASM
|
||||||
c->prefetch = prefetch_3dnow;
|
c->prefetch = prefetch_3dnow;
|
||||||
|
|
||||||
if (!high_bit_depth) {
|
if (!high_bit_depth) {
|
||||||
@ -2798,25 +2822,26 @@ static void dsputil_init_3dnow(DSPContext *c, AVCodecContext *avctx,
|
|||||||
SET_QPEL_FUNCS(avg_2tap_qpel, 1, 8, 3dnow, );
|
SET_QPEL_FUNCS(avg_2tap_qpel, 1, 8, 3dnow, );
|
||||||
}
|
}
|
||||||
|
|
||||||
#if HAVE_YASM
|
|
||||||
if (!high_bit_depth && CONFIG_H264CHROMA) {
|
|
||||||
c->avg_h264_chroma_pixels_tab[0] = ff_avg_h264_chroma_mc8_3dnow_rnd;
|
|
||||||
c->avg_h264_chroma_pixels_tab[1] = ff_avg_h264_chroma_mc4_3dnow;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
c->vorbis_inverse_coupling = vorbis_inverse_coupling_3dnow;
|
c->vorbis_inverse_coupling = vorbis_inverse_coupling_3dnow;
|
||||||
|
|
||||||
#if HAVE_7REGS
|
#if HAVE_7REGS
|
||||||
if (mm_flags & AV_CPU_FLAG_CMOV)
|
if (mm_flags & AV_CPU_FLAG_CMOV)
|
||||||
c->add_hfyu_median_prediction = add_hfyu_median_prediction_cmov;
|
c->add_hfyu_median_prediction = add_hfyu_median_prediction_cmov;
|
||||||
#endif
|
#endif
|
||||||
|
#endif /* HAVE_INLINE_ASM */
|
||||||
|
|
||||||
|
#if HAVE_YASM
|
||||||
|
if (!high_bit_depth && CONFIG_H264CHROMA) {
|
||||||
|
c->avg_h264_chroma_pixels_tab[0] = ff_avg_h264_chroma_mc8_3dnow_rnd;
|
||||||
|
c->avg_h264_chroma_pixels_tab[1] = ff_avg_h264_chroma_mc4_3dnow;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void dsputil_init_3dnow2(DSPContext *c, AVCodecContext *avctx,
|
static void dsputil_init_3dnow2(DSPContext *c, AVCodecContext *avctx,
|
||||||
int mm_flags)
|
int mm_flags)
|
||||||
{
|
{
|
||||||
#if HAVE_6REGS
|
#if HAVE_6REGS && HAVE_INLINE_ASM
|
||||||
c->vector_fmul_window = vector_fmul_window_3dnow2;
|
c->vector_fmul_window = vector_fmul_window_3dnow2;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -2825,6 +2850,7 @@ static void dsputil_init_sse(DSPContext *c, AVCodecContext *avctx, int mm_flags)
|
|||||||
{
|
{
|
||||||
const int high_bit_depth = avctx->bits_per_raw_sample > 8;
|
const int high_bit_depth = avctx->bits_per_raw_sample > 8;
|
||||||
|
|
||||||
|
#if HAVE_INLINE_ASM
|
||||||
if (!high_bit_depth) {
|
if (!high_bit_depth) {
|
||||||
if (!(CONFIG_MPEG_XVMC_DECODER && avctx->xvmc_acceleration > 1)) {
|
if (!(CONFIG_MPEG_XVMC_DECODER && avctx->xvmc_acceleration > 1)) {
|
||||||
/* XvMCCreateBlocks() may not allocate 16-byte aligned blocks */
|
/* XvMCCreateBlocks() may not allocate 16-byte aligned blocks */
|
||||||
@ -2835,31 +2861,35 @@ static void dsputil_init_sse(DSPContext *c, AVCodecContext *avctx, int mm_flags)
|
|||||||
|
|
||||||
c->vorbis_inverse_coupling = vorbis_inverse_coupling_sse;
|
c->vorbis_inverse_coupling = vorbis_inverse_coupling_sse;
|
||||||
c->ac3_downmix = ac3_downmix_sse;
|
c->ac3_downmix = ac3_downmix_sse;
|
||||||
#if HAVE_YASM
|
|
||||||
c->vector_fmul_reverse = ff_vector_fmul_reverse_sse;
|
|
||||||
c->vector_fmul_add = ff_vector_fmul_add_sse;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if HAVE_6REGS
|
#if HAVE_6REGS
|
||||||
c->vector_fmul_window = vector_fmul_window_sse;
|
c->vector_fmul_window = vector_fmul_window_sse;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
c->vector_clipf = vector_clipf_sse;
|
c->vector_clipf = vector_clipf_sse;
|
||||||
|
#endif /* HAVE_INLINE_ASM */
|
||||||
|
|
||||||
#if HAVE_YASM
|
#if HAVE_YASM
|
||||||
|
c->vector_fmul_reverse = ff_vector_fmul_reverse_sse;
|
||||||
|
c->vector_fmul_add = ff_vector_fmul_add_sse;
|
||||||
|
|
||||||
c->scalarproduct_float = ff_scalarproduct_float_sse;
|
c->scalarproduct_float = ff_scalarproduct_float_sse;
|
||||||
c->butterflies_float_interleave = ff_butterflies_float_interleave_sse;
|
c->butterflies_float_interleave = ff_butterflies_float_interleave_sse;
|
||||||
|
|
||||||
if (!high_bit_depth)
|
if (!high_bit_depth)
|
||||||
c->emulated_edge_mc = emulated_edge_mc_sse;
|
c->emulated_edge_mc = emulated_edge_mc_sse;
|
||||||
|
#if HAVE_INLINE_ASM
|
||||||
c->gmc = gmc_sse;
|
c->gmc = gmc_sse;
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void dsputil_init_sse2(DSPContext *c, AVCodecContext *avctx,
|
static void dsputil_init_sse2(DSPContext *c, AVCodecContext *avctx,
|
||||||
int mm_flags)
|
int mm_flags)
|
||||||
{
|
{
|
||||||
const int bit_depth = avctx->bits_per_raw_sample;
|
const int bit_depth = avctx->bits_per_raw_sample;
|
||||||
|
|
||||||
|
#if HAVE_INLINE_ASM
|
||||||
const int high_bit_depth = bit_depth > 8;
|
const int high_bit_depth = bit_depth > 8;
|
||||||
|
|
||||||
if (!(mm_flags & AV_CPU_FLAG_SSE2SLOW)) {
|
if (!(mm_flags & AV_CPU_FLAG_SSE2SLOW)) {
|
||||||
@ -2887,6 +2917,7 @@ static void dsputil_init_sse2(DSPContext *c, AVCodecContext *avctx,
|
|||||||
H264_QPEL_FUNCS(3, 2, sse2);
|
H264_QPEL_FUNCS(3, 2, sse2);
|
||||||
H264_QPEL_FUNCS(3, 3, sse2);
|
H264_QPEL_FUNCS(3, 3, sse2);
|
||||||
}
|
}
|
||||||
|
#endif /* HAVE_INLINE_ASM */
|
||||||
|
|
||||||
#if HAVE_YASM
|
#if HAVE_YASM
|
||||||
if (bit_depth == 10) {
|
if (bit_depth == 10) {
|
||||||
@ -2928,6 +2959,7 @@ static void dsputil_init_ssse3(DSPContext *c, AVCodecContext *avctx,
|
|||||||
const int high_bit_depth = avctx->bits_per_raw_sample > 8;
|
const int high_bit_depth = avctx->bits_per_raw_sample > 8;
|
||||||
const int bit_depth = avctx->bits_per_raw_sample;
|
const int bit_depth = avctx->bits_per_raw_sample;
|
||||||
|
|
||||||
|
#if HAVE_INLINE_ASM
|
||||||
if (!high_bit_depth && CONFIG_H264QPEL) {
|
if (!high_bit_depth && CONFIG_H264QPEL) {
|
||||||
H264_QPEL_FUNCS(1, 0, ssse3);
|
H264_QPEL_FUNCS(1, 0, ssse3);
|
||||||
H264_QPEL_FUNCS(1, 1, ssse3);
|
H264_QPEL_FUNCS(1, 1, ssse3);
|
||||||
@ -2942,8 +2974,9 @@ static void dsputil_init_ssse3(DSPContext *c, AVCodecContext *avctx,
|
|||||||
H264_QPEL_FUNCS(3, 2, ssse3);
|
H264_QPEL_FUNCS(3, 2, ssse3);
|
||||||
H264_QPEL_FUNCS(3, 3, ssse3);
|
H264_QPEL_FUNCS(3, 3, ssse3);
|
||||||
}
|
}
|
||||||
|
#endif /* HAVE_INLINE_ASM */
|
||||||
#if HAVE_YASM
|
#if HAVE_YASM
|
||||||
else if (bit_depth == 10 && CONFIG_H264QPEL) {
|
if (bit_depth == 10 && CONFIG_H264QPEL) {
|
||||||
H264_QPEL_FUNCS_10(1, 0, ssse3_cache64);
|
H264_QPEL_FUNCS_10(1, 0, ssse3_cache64);
|
||||||
H264_QPEL_FUNCS_10(2, 0, ssse3_cache64);
|
H264_QPEL_FUNCS_10(2, 0, ssse3_cache64);
|
||||||
H264_QPEL_FUNCS_10(3, 0, ssse3_cache64);
|
H264_QPEL_FUNCS_10(3, 0, ssse3_cache64);
|
||||||
@ -3007,6 +3040,7 @@ void ff_dsputil_init_mmx(DSPContext *c, AVCodecContext *avctx)
|
|||||||
int mm_flags = av_get_cpu_flags();
|
int mm_flags = av_get_cpu_flags();
|
||||||
|
|
||||||
if (mm_flags & AV_CPU_FLAG_MMX) {
|
if (mm_flags & AV_CPU_FLAG_MMX) {
|
||||||
|
#if HAVE_INLINE_ASM
|
||||||
const int idct_algo = avctx->idct_algo;
|
const int idct_algo = avctx->idct_algo;
|
||||||
|
|
||||||
if (avctx->bits_per_raw_sample <= 8) {
|
if (avctx->bits_per_raw_sample <= 8) {
|
||||||
@ -3047,6 +3081,7 @@ void ff_dsputil_init_mmx(DSPContext *c, AVCodecContext *avctx)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif /* HAVE_INLINE_ASM */
|
||||||
|
|
||||||
dsputil_init_mmx(c, avctx, mm_flags);
|
dsputil_init_mmx(c, avctx, mm_flags);
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,8 @@
|
|||||||
|
|
||||||
#include "dsputil_mmx.h"
|
#include "dsputil_mmx.h"
|
||||||
|
|
||||||
|
#if HAVE_INLINE_ASM
|
||||||
|
|
||||||
/***********************************/
|
/***********************************/
|
||||||
/* motion compensation */
|
/* motion compensation */
|
||||||
|
|
||||||
@ -1191,7 +1193,7 @@ H264_MC_816(H264_MC_H, ssse3)
|
|||||||
H264_MC_816(H264_MC_HV, ssse3)
|
H264_MC_816(H264_MC_HV, ssse3)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#endif /* HAVE_INLINE_ASM */
|
||||||
|
|
||||||
//10bit
|
//10bit
|
||||||
#define LUMA_MC_OP(OP, NUM, DEPTH, TYPE, OPT) \
|
#define LUMA_MC_OP(OP, NUM, DEPTH, TYPE, OPT) \
|
||||||
|
@ -25,6 +25,8 @@
|
|||||||
#include "libavutil/x86_cpu.h"
|
#include "libavutil/x86_cpu.h"
|
||||||
#include "dsputil_mmx.h"
|
#include "dsputil_mmx.h"
|
||||||
|
|
||||||
|
#if HAVE_INLINE_ASM
|
||||||
|
|
||||||
#define ROW_SHIFT 11
|
#define ROW_SHIFT 11
|
||||||
#define COL_SHIFT 6
|
#define COL_SHIFT 6
|
||||||
|
|
||||||
@ -626,3 +628,5 @@ declare_idct (ff_mmxext_idct, mmxext_table,
|
|||||||
|
|
||||||
declare_idct (ff_mmx_idct, mmx_table,
|
declare_idct (ff_mmx_idct, mmx_table,
|
||||||
mmx_row_head, mmx_row, mmx_row_tail, mmx_row_mid)
|
mmx_row_head, mmx_row, mmx_row_tail, mmx_row_mid)
|
||||||
|
|
||||||
|
#endif /* HAVE_INLINE_ASM */
|
||||||
|
@ -43,6 +43,8 @@
|
|||||||
#include "libavcodec/avcodec.h"
|
#include "libavcodec/avcodec.h"
|
||||||
#include "idct_xvid.h"
|
#include "idct_xvid.h"
|
||||||
|
|
||||||
|
#if HAVE_INLINE_ASM
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
// Macros and other preprocessor constants
|
// Macros and other preprocessor constants
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
@ -523,3 +525,5 @@ __asm__ volatile(
|
|||||||
DCT_8_INV_COL(8(%0), 8(%0))
|
DCT_8_INV_COL(8(%0), 8(%0))
|
||||||
:: "r"(block), "r"(rounder_0), "r"(tab_i_04_xmm), "r"(tg_1_16));
|
:: "r"(block), "r"(rounder_0), "r"(tab_i_04_xmm), "r"(tg_1_16));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif /* HAVE_INLINE_ASM */
|
||||||
|
@ -43,6 +43,8 @@
|
|||||||
#include "idct_xvid.h"
|
#include "idct_xvid.h"
|
||||||
#include "dsputil_mmx.h"
|
#include "dsputil_mmx.h"
|
||||||
|
|
||||||
|
#if HAVE_INLINE_ASM
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @file
|
* @file
|
||||||
* @brief SSE2 idct compatible with xvidmmx
|
* @brief SSE2 idct compatible with xvidmmx
|
||||||
@ -401,3 +403,5 @@ void ff_idct_xvid_sse2_add(uint8_t *dest, int line_size, short *block)
|
|||||||
ff_idct_xvid_sse2(block);
|
ff_idct_xvid_sse2(block);
|
||||||
ff_add_pixels_clamped_mmx(block, dest, line_size);
|
ff_add_pixels_clamped_mmx(block, dest, line_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif /* HAVE_INLINE_ASM */
|
||||||
|
@ -190,10 +190,12 @@ void ff_rv40dsp_init_x86(RV34DSPContext *c, DSPContext *dsp)
|
|||||||
if (mm_flags & AV_CPU_FLAG_MMX) {
|
if (mm_flags & AV_CPU_FLAG_MMX) {
|
||||||
c->put_chroma_pixels_tab[0] = ff_put_rv40_chroma_mc8_mmx;
|
c->put_chroma_pixels_tab[0] = ff_put_rv40_chroma_mc8_mmx;
|
||||||
c->put_chroma_pixels_tab[1] = ff_put_rv40_chroma_mc4_mmx;
|
c->put_chroma_pixels_tab[1] = ff_put_rv40_chroma_mc4_mmx;
|
||||||
|
#if HAVE_INLINE_ASM
|
||||||
c->put_pixels_tab[0][15] = ff_put_rv40_qpel16_mc33_mmx;
|
c->put_pixels_tab[0][15] = ff_put_rv40_qpel16_mc33_mmx;
|
||||||
c->put_pixels_tab[1][15] = ff_put_rv40_qpel8_mc33_mmx;
|
c->put_pixels_tab[1][15] = ff_put_rv40_qpel8_mc33_mmx;
|
||||||
c->avg_pixels_tab[0][15] = ff_avg_rv40_qpel16_mc33_mmx;
|
c->avg_pixels_tab[0][15] = ff_avg_rv40_qpel16_mc33_mmx;
|
||||||
c->avg_pixels_tab[1][15] = ff_avg_rv40_qpel8_mc33_mmx;
|
c->avg_pixels_tab[1][15] = ff_avg_rv40_qpel8_mc33_mmx;
|
||||||
|
#endif /* HAVE_INLINE_ASM */
|
||||||
#if ARCH_X86_32
|
#if ARCH_X86_32
|
||||||
QPEL_MC_SET(put_, _mmx)
|
QPEL_MC_SET(put_, _mmx)
|
||||||
#endif
|
#endif
|
||||||
|
@ -23,6 +23,8 @@
|
|||||||
#include "libavcodec/simple_idct.h"
|
#include "libavcodec/simple_idct.h"
|
||||||
#include "dsputil_mmx.h"
|
#include "dsputil_mmx.h"
|
||||||
|
|
||||||
|
#if HAVE_INLINE_ASM
|
||||||
|
|
||||||
/*
|
/*
|
||||||
23170.475006
|
23170.475006
|
||||||
22725.260826
|
22725.260826
|
||||||
@ -1161,3 +1163,5 @@ void ff_simple_idct_add_mmx(uint8_t *dest, int line_size, DCTELEM *block)
|
|||||||
idct(block);
|
idct(block);
|
||||||
ff_add_pixels_clamped_mmx(block, dest, line_size);
|
ff_add_pixels_clamped_mmx(block, dest, line_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif /* HAVE_INLINE_ASM */
|
||||||
|
Loading…
Reference in New Issue
Block a user