#include "libavutil/x86_cpu.h"#include "libavcodec/dsputil.h"#include "libavcodec/h263.h"#include "libavcodec/mpegvideo.h"#include "libavcodec/simple_idct.h"#include "dsputil_mmx.h"#include "mmx.h"#include "vp3dsp_mmx.h"#include "vp3dsp_sse2.h"#include "idct_xvid.h"#include "dsputil_mmx_rnd.h"#include "dsputil_mmx_avg.h"#include "h264dsp_mmx.c"Go to the source code of this file.
Defines | |
| #define | JUMPALIGN() asm volatile (ASMALIGN(3)::) |
| #define | MOVQ_ZERO(regd) asm volatile ("pxor %%" #regd ", %%" #regd ::) |
| #define | MOVQ_BFE(regd) |
| #define | MOVQ_BONE(regd) asm volatile ("movq %0, %%" #regd " \n\t" ::"m"(ff_bone)) |
| #define | MOVQ_WTWO(regd) asm volatile ("movq %0, %%" #regd " \n\t" ::"m"(ff_wtwo)) |
| #define | PAVGB_MMX_NO_RND(rega, regb, regr, regfe) |
| #define | PAVGB_MMX(rega, regb, regr, regfe) |
| #define | PAVGBP_MMX_NO_RND(rega, regb, regr,regc, regd, regp) |
| #define | PAVGBP_MMX(rega, regb, regr, regc, regd, regp) |
| #define | DEF(x, y) x ## _no_rnd_ ## y ##_mmx |
| #define | SET_RND MOVQ_WONE |
| #define | PAVGBP(a, b, c, d, e, f) PAVGBP_MMX_NO_RND(a, b, c, d, e, f) |
| #define | PAVGB(a, b, c, e) PAVGB_MMX_NO_RND(a, b, c, e) |
| #define | DEF(x, y) x ## _ ## y ##_mmx |
| #define | SET_RND MOVQ_WTWO |
| #define | PAVGBP(a, b, c, d, e, f) PAVGBP_MMX(a, b, c, d, e, f) |
| #define | PAVGB(a, b, c, e) PAVGB_MMX(a, b, c, e) |
| #define | DEF(x) x ## _3dnow |
| #define | PAVGB "pavgusb" |
| #define | DEF(x) x ## _mmx2 |
| #define | PAVGB "pavgb" |
| #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_3dnow put_pixels16_mmx |
| #define | put_pixels8_3dnow put_pixels8_mmx |
| #define | put_pixels4_3dnow put_pixels4_mmx |
| #define | put_no_rnd_pixels16_3dnow put_no_rnd_pixels16_mmx |
| #define | put_no_rnd_pixels8_3dnow put_no_rnd_pixels8_mmx |
| #define | H263_LOOP_FILTER |
| #define | PAETH(cpu, abs3) |
| #define | ABS3_MMX2 |
| #define | ABS3_SSSE3 |
| #define | QPEL_V_LOW(m3, m4, m5, m6, pw_20, pw_3, rnd, in0, in1, in2, in7, out, OP) |
| #define | QPEL_BASE(OPNAME, ROUNDER, RND, OP_MMX2, OP_3DNOW) |
| #define | QPEL_OP(OPNAME, ROUNDER, RND, OP, MMX) |
| #define | PUT_OP(a, b, temp, size) "mov" #size " " #a ", " #b " \n\t" |
| #define | AVG_3DNOW_OP(a, b, temp, size) |
| #define | AVG_MMX2_OP(a, b, temp, size) |
| #define | QPEL_2TAP_XY(OPNAME, SIZE, MMX, XY, HPEL) |
| #define | QPEL_2TAP_L3(OPNAME, SIZE, MMX, XY, S0, S1, S2) |
| #define | QPEL_2TAP(OPNAME, SIZE, MMX) |
| #define | PREFETCH(name, op) |
| #define | FLOAT_TO_INT16_INTERLEAVE(cpu, body) |
| #define | SET_HPEL_FUNCS(PFX, IDX, SIZE, CPU) |
| #define | SET_QPEL_FUNCS(PFX, IDX, SIZE, CPU) |
| #define | H264_QPEL_FUNCS(x, y, CPU) |
Functions | |
| DECLARE_ALIGNED_8 (const uint64_t, ff_bone)=0x0101010101010101ULL | |
| DECLARE_ALIGNED_8 (const uint64_t, ff_wtwo)=0x0002000200020002ULL | |
| DECLARE_ALIGNED_16 (const uint64_t, ff_pdw_80000000[2]) | |
| DECLARE_ALIGNED_8 (const uint64_t, ff_pw_3)=0x0003000300030003ULL | |
| DECLARE_ALIGNED_8 (const uint64_t, ff_pw_4)=0x0004000400040004ULL | |
| DECLARE_ALIGNED_16 (const xmm_t, ff_pw_5) | |
| DECLARE_ALIGNED_8 (const uint64_t, ff_pw_8)=0x0008000800080008ULL | |
| DECLARE_ALIGNED_8 (const uint64_t, ff_pw_15)=0x000F000F000F000FULL | |
| DECLARE_ALIGNED_16 (const xmm_t, ff_pw_16) | |
| DECLARE_ALIGNED_8 (const uint64_t, ff_pw_20)=0x0014001400140014ULL | |
| DECLARE_ALIGNED_16 (const xmm_t, ff_pw_28) | |
| DECLARE_ALIGNED_16 (const xmm_t, ff_pw_32) | |
| DECLARE_ALIGNED_8 (const uint64_t, ff_pw_42)=0x002A002A002A002AULL | |
| DECLARE_ALIGNED_8 (const uint64_t, ff_pw_64)=0x0040004000400040ULL | |
| DECLARE_ALIGNED_8 (const uint64_t, ff_pw_96)=0x0060006000600060ULL | |
| DECLARE_ALIGNED_8 (const uint64_t, ff_pw_128)=0x0080008000800080ULL | |
| DECLARE_ALIGNED_8 (const uint64_t, ff_pw_255)=0x00ff00ff00ff00ffULL | |
| DECLARE_ALIGNED_8 (const uint64_t, ff_pb_1)=0x0101010101010101ULL | |
| DECLARE_ALIGNED_8 (const uint64_t, ff_pb_3)=0x0303030303030303ULL | |
| DECLARE_ALIGNED_8 (const uint64_t, ff_pb_7)=0x0707070707070707ULL | |
| DECLARE_ALIGNED_8 (const uint64_t, ff_pb_3F)=0x3F3F3F3F3F3F3F3FULL | |
| DECLARE_ALIGNED_8 (const uint64_t, ff_pb_A1)=0xA1A1A1A1A1A1A1A1ULL | |
| DECLARE_ALIGNED_8 (const uint64_t, ff_pb_FC)=0xFCFCFCFCFCFCFCFCULL | |
| DECLARE_ALIGNED_16 (const double, ff_pd_1[2]) | |
| DECLARE_ALIGNED_16 (const double, ff_pd_2[2]) | |
| void | put_pixels_clamped_mmx (const DCTELEM *block, uint8_t *pixels, int line_size) |
| static | DECLARE_ALIGNED_8 (const unsigned char, vector128[8]) |
| void | put_signed_pixels_clamped_mmx (const DCTELEM *block, uint8_t *pixels, int line_size) |
| void | add_pixels_clamped_mmx (const DCTELEM *block, uint8_t *pixels, int line_size) |
| static void | put_pixels4_mmx (uint8_t *block, const uint8_t *pixels, int line_size, int h) |
| static void | put_pixels8_mmx (uint8_t *block, const uint8_t *pixels, int line_size, int h) |
| static void | put_pixels16_mmx (uint8_t *block, const uint8_t *pixels, int line_size, int h) |
| static void | put_pixels16_sse2 (uint8_t *block, const uint8_t *pixels, int line_size, int h) |
| static void | avg_pixels16_sse2 (uint8_t *block, const uint8_t *pixels, int line_size, int h) |
| static void | clear_blocks_mmx (DCTELEM *blocks) |
| static void | add_bytes_mmx (uint8_t *dst, uint8_t *src, int w) |
| static void | add_bytes_l2_mmx (uint8_t *dst, uint8_t *src1, uint8_t *src2, int w) |
| static void | h263_v_loop_filter_mmx (uint8_t *src, int stride, int qscale) |
| static void | transpose4x4 (uint8_t *dst, uint8_t *src, int dst_stride, int src_stride) |
| static void | h263_h_loop_filter_mmx (uint8_t *src, int stride, int qscale) |
| static void | draw_edges_mmx (uint8_t *buf, int wrap, int width, int height, int w) |
| static void | gmc_mmx (uint8_t *dst, uint8_t *src, int stride, int h, int ox, int oy, int dxx, int dxy, int dyx, int dyy, int shift, int r, int width, int height) |
| void | ff_cavsdsp_init_mmx2 (DSPContext *c, AVCodecContext *avctx) |
| void | ff_cavsdsp_init_3dnow (DSPContext *c, AVCodecContext *avctx) |
| 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_vc1dsp_init_mmx (DSPContext *dsp, AVCodecContext *avctx) |
| void | ff_put_vc1_mspel_mc00_mmx (uint8_t *dst, const uint8_t *src, int stride, int rnd) |
| void | ff_mmx_idct (DCTELEM *block) |
| void | ff_mmxext_idct (DCTELEM *block) |
| static void | ff_idct_xvid_mmx_put (uint8_t *dest, int line_size, DCTELEM *block) |
| static void | ff_idct_xvid_mmx_add (uint8_t *dest, int line_size, DCTELEM *block) |
| static void | ff_idct_xvid_mmx2_put (uint8_t *dest, int line_size, DCTELEM *block) |
| static void | ff_idct_xvid_mmx2_add (uint8_t *dest, int line_size, DCTELEM *block) |
| static void | vorbis_inverse_coupling_3dnow (float *mag, float *ang, int blocksize) |
| static void | vorbis_inverse_coupling_sse (float *mag, float *ang, int blocksize) |
| static void | vector_fmul_3dnow (float *dst, const float *src, int len) |
| static void | vector_fmul_sse (float *dst, const float *src, int len) |
| static void | vector_fmul_reverse_3dnow2 (float *dst, const float *src0, const float *src1, int len) |
| static void | vector_fmul_reverse_sse (float *dst, const float *src0, const float *src1, int len) |
| static void | vector_fmul_add_add_3dnow (float *dst, const float *src0, const float *src1, const float *src2, int src3, int len, int step) |
| static void | vector_fmul_add_add_sse (float *dst, const float *src0, const float *src1, const float *src2, int src3, int len, int step) |
| static void | vector_fmul_window_3dnow2 (float *dst, const float *src0, const float *src1, const float *win, float add_bias, int len) |
| static void | vector_fmul_window_sse (float *dst, const float *src0, const float *src1, const float *win, float add_bias, int len) |
| static void | float_to_int16_3dnow (int16_t *dst, const float *src, long len) |
| static void | float_to_int16_sse (int16_t *dst, const float *src, long len) |
| static void | float_to_int16_sse2 (int16_t *dst, const float *src, long len) |
| FLOAT_TO_INT16_INTERLEAVE (3dnow,"1: \n""pf2id (%2,%0), %%mm0 \n""pf2id 8(%2,%0), %%mm1 \n""pf2id (%3,%0), %%mm2 \n""pf2id 8(%3,%0), %%mm3 \n""packssdw %%mm1, %%mm0 \n""packssdw %%mm3, %%mm2 \n""movq %%mm0, %%mm1 \n""punpcklwd %%mm2, %%mm0 \n""punpckhwd %%mm2, %%mm1 \n""movq %%mm0, (%1,%0)\n""movq %%mm1, 8(%1,%0)\n""add $16, %0 \n""js 1b \n""femms \n") FLOAT_TO_INT16_INTERLEAVE(sse | |
| mm0 n | cvtps2pi (%2,%0) |
| mm0 n mm1 n mm2 n mm3 n packssdw mm0 n packssdw mm2 n movq mm1 n punpcklwd mm0 n punpckhwd mm1 n movq n movq n n js b n emms n | FLOAT_TO_INT16_INTERLEAVE (sse2,"1: \n""cvtps2dq (%2,%0), %%xmm0 \n""cvtps2dq (%3,%0), %%xmm1 \n""packssdw %%xmm1, %%xmm0 \n""movhlps %%xmm0, %%xmm1 \n""punpcklwd %%xmm1, %%xmm0 \n""movdqa %%xmm0, (%1,%0) \n""add $16, %0 \n""js 1b \n") extern void ff_snow_horizontal_compose97i_sse2(IDWTELEM *b |
| void | ff_snow_horizontal_compose97i_mmx (IDWTELEM *b, int width) |
| void | ff_snow_vertical_compose97i_sse2 (IDWTELEM *b0, IDWTELEM *b1, IDWTELEM *b2, IDWTELEM *b3, IDWTELEM *b4, IDWTELEM *b5, int width) |
| void | ff_snow_vertical_compose97i_mmx (IDWTELEM *b0, IDWTELEM *b1, IDWTELEM *b2, IDWTELEM *b3, IDWTELEM *b4, IDWTELEM *b5, int width) |
| void | ff_snow_inner_add_yblock_sse2 (const uint8_t *obmc, const int obmc_stride, uint8_t **block, int b_w, int b_h, int src_x, int src_y, int src_stride, slice_buffer *sb, int add, uint8_t *dst8) |
| void | ff_snow_inner_add_yblock_mmx (const uint8_t *obmc, const int obmc_stride, uint8_t **block, int b_w, int b_h, int src_x, int src_y, int src_stride, slice_buffer *sb, int add, uint8_t *dst8) |
| static void | add_int16_sse2 (int16_t *v1, int16_t *v2, int order) |
| static void | sub_int16_sse2 (int16_t *v1, int16_t *v2, int order) |
| static int32_t | scalarproduct_int16_sse2 (int16_t *v1, int16_t *v2, int order, int shift) |
| void | dsputil_init_mmx (DSPContext *c, AVCodecContext *avctx) |
Variables | |
| int | mm_flags |
| __pad0__ | |
| mm0 n mm1 n mm2 n mm3 n packssdw | mm1 |
| mm0 n mm1 n mm2 n mm3 n packssdw mm0 n packssdw | mm3 |
| mm0 n mm1 n mm2 n mm3 n packssdw mm0 n packssdw mm2 n movq | mm0 |
| mm0 n mm1 n mm2 n mm3 n packssdw mm0 n packssdw mm2 n movq mm1 n punpcklwd | mm2 |
| mm0 n mm1 n mm2 n mm3 n packssdw mm0 n packssdw mm2 n movq mm1 n punpcklwd mm0 n punpckhwd | mm2 |
| mm0 n mm1 n mm2 n mm3 n packssdw mm0 n packssdw mm2 n movq mm1 n punpcklwd mm0 n punpckhwd mm1 n movq | mm0 |
| mm0 n mm1 n mm2 n mm3 n packssdw mm0 n packssdw mm2 n movq mm1 n punpcklwd mm0 n punpckhwd mm1 n movq n movq | mm1 |
| mm0 n mm1 n mm2 n mm3 n packssdw mm0 n packssdw mm2 n movq mm1 n punpcklwd mm0 n punpckhwd mm1 n movq n movq n | add |
| mm0 n mm1 n mm2 n mm3 n packssdw mm0 n packssdw mm2 n movq mm1 n punpcklwd mm0 n punpckhwd mm1 n movq n movq n n js b n emms n int | width |
| #define ABS3_MMX2 |
Value:
"psubw %%mm5, %%mm7 \n"\ "pmaxsw %%mm7, %%mm5 \n"\ "pxor %%mm6, %%mm6 \n"\ "pxor %%mm7, %%mm7 \n"\ "psubw %%mm3, %%mm6 \n"\ "psubw %%mm4, %%mm7 \n"\ "pmaxsw %%mm6, %%mm3 \n"\ "pmaxsw %%mm7, %%mm4 \n"\ "pxor %%mm7, %%mm7 \n"
Definition at line 843 of file dsputil_mmx.c.
| #define ABS3_SSSE3 |
Value:
"pabsw %%mm3, %%mm3 \n"\ "pabsw %%mm4, %%mm4 \n"\ "pabsw %%mm5, %%mm5 \n"
Definition at line 854 of file dsputil_mmx.c.
| #define AVG_3DNOW_OP | ( | a, | |||
| b, | |||||
| temp, | |||||
| size | ) |
Value:
"mov" #size " " #b ", " #temp " \n\t"\ "pavgusb " #temp ", " #a " \n\t"\ "mov" #size " " #a ", " #b " \n\t"
Definition at line 1512 of file dsputil_mmx.c.
| #define AVG_MMX2_OP | ( | a, | |||
| b, | |||||
| temp, | |||||
| size | ) |
Value:
"mov" #size " " #b ", " #temp " \n\t"\ "pavgb " #temp ", " #a " \n\t"\ "mov" #size " " #a ", " #b " \n\t"
Definition at line 1516 of file dsputil_mmx.c.
| #define DEF | ( | x | ) | x ## _mmx2 |
Definition at line 191 of file dsputil_mmx.c.
| #define DEF | ( | x | ) | x ## _3dnow |
Definition at line 191 of file dsputil_mmx.c.
| #define DEF | ( | x, | |||
| y | ) | x ## _ ## y ##_mmx |
Definition at line 191 of file dsputil_mmx.c.
| #define DEF | ( | x, | |||
| y | ) | x ## _no_rnd_ ## y ##_mmx |
Definition at line 191 of file dsputil_mmx.c.
| #define FLOAT_TO_INT16_INTERLEAVE | ( | cpu, | |||
| body | ) |
Value:
/* gcc pessimizes register allocation if this is in the same function as float_to_int16_interleave_sse2*/\ static av_noinline void float_to_int16_interleave2_##cpu(int16_t *dst, const float **src, long len, int channels){\ DECLARE_ALIGNED_16(int16_t, tmp[len]);\ int i,j,c;\ for(c=0; c<channels; c++){\ float_to_int16_##cpu(tmp, src[c], len);\ for(i=0, j=c; i<len; i++, j+=channels)\ dst[j] = tmp[i];\ }\ }\ \ static void float_to_int16_interleave_##cpu(int16_t *dst, const float **src, long len, int channels){\ if(channels==1)\ float_to_int16_##cpu(dst, src[0], len);\ else if(channels>2)\ float_to_int16_interleave2_##cpu(dst, src, len, channels);\ else{\ const float *src0 = src[0];\ const float *src1 = src[1];\ asm volatile(\ "shl $2, %0 \n"\ "add %0, %1 \n"\ "add %0, %2 \n"\ "add %0, %3 \n"\ "neg %0 \n"\ body\ :"+r"(len), "+r"(dst), "+r"(src0), "+r"(src1)\ );\ }\ }
Definition at line 2157 of file dsputil_mmx.c.
| #define H263_LOOP_FILTER |
Definition at line 528 of file dsputil_mmx.c.
Referenced by h263_h_loop_filter_mmx(), and h263_v_loop_filter_mmx().
| #define H264_QPEL_FUNCS | ( | x, | |||
| y, | |||||
| CPU | ) |
Value:
c->put_h264_qpel_pixels_tab[0][x+y*4] = put_h264_qpel16_mc##x##y##_##CPU;\ c->put_h264_qpel_pixels_tab[1][x+y*4] = put_h264_qpel8_mc##x##y##_##CPU;\ c->avg_h264_qpel_pixels_tab[0][x+y*4] = avg_h264_qpel16_mc##x##y##_##CPU;\ c->avg_h264_qpel_pixels_tab[1][x+y*4] = avg_h264_qpel8_mc##x##y##_##CPU;
Referenced by dsputil_init_mmx().
| #define JUMPALIGN | ( | ) | asm volatile (ASMALIGN(3)::) |
Definition at line 73 of file dsputil_mmx.c.
| #define MOVQ_BFE | ( | regd | ) |
Value:
asm volatile ( \ "pcmpeqd %%" #regd ", %%" #regd " \n\t"\ "paddb %%" #regd ", %%" #regd " \n\t" ::)
Definition at line 76 of file dsputil_mmx.c.
| #define MOVQ_BONE | ( | regd | ) | asm volatile ("movq %0, %%" #regd " \n\t" ::"m"(ff_bone)) |
Definition at line 82 of file dsputil_mmx.c.
Referenced by avg_pixels8_xy2(), put_no_rnd_pixels8_x2(), and put_no_rnd_pixels8_y2().
| #define MOVQ_WTWO | ( | regd | ) | asm volatile ("movq %0, %%" #regd " \n\t" ::"m"(ff_wtwo)) |
Definition at line 83 of file dsputil_mmx.c.
| #define MOVQ_ZERO | ( | regd | ) | asm volatile ("pxor %%" #regd ", %%" #regd ::) |
| #define PAETH | ( | cpu, | |||
| abs3 | ) |
Definition at line 790 of file dsputil_mmx.c.
| #define PAVGB "pavgb" |
Definition at line 194 of file dsputil_mmx.c.
| #define PAVGB "pavgusb" |
Definition at line 194 of file dsputil_mmx.c.
Definition at line 194 of file dsputil_mmx.c.
Definition at line 194 of file dsputil_mmx.c.
Referenced by avg_pixels16_l2(), avg_pixels4(), avg_pixels4_l2(), avg_pixels8(), avg_pixels8_l2(), avg_pixels8_x2(), avg_pixels8_xy2(), avg_pixels8_y2(), bgr24ToUV(), deInterlaceBlendLinear(), deInterlaceInterpolateLinear(), dering(), doVertDefFilter(), doVertLowPass(), planar2x(), put_no_rnd_pixels16_l2(), put_no_rnd_pixels8_l2(), put_no_rnd_pixels8_x2(), put_no_rnd_pixels8_y2(), put_pixels16_l2(), put_pixels16_x2(), put_pixels4_l2(), put_pixels8_l2(), put_pixels8_x2(), put_pixels8_y2(), rgb24toyv12(), tempNoiseReducer(), and vertX1Filter().
| #define PAVGB_MMX | ( | rega, | |||
| regb, | |||||
| regr, | |||||
| regfe | ) |
Value:
"movq " #rega ", " #regr " \n\t"\ "por " #regb ", " #regr " \n\t"\ "pxor " #rega ", " #regb " \n\t"\ "pand " #regfe "," #regb " \n\t"\ "psrlq $1, " #regb " \n\t"\ "psubb " #regb ", " #regr " \n\t"
Definition at line 112 of file dsputil_mmx.c.
| #define PAVGB_MMX_NO_RND | ( | rega, | |||
| regb, | |||||
| regr, | |||||
| regfe | ) |
Value:
"movq " #rega ", " #regr " \n\t"\ "pand " #regb ", " #regr " \n\t"\ "pxor " #rega ", " #regb " \n\t"\ "pand " #regfe "," #regb " \n\t"\ "psrlq $1, " #regb " \n\t"\ "paddb " #regb ", " #regr " \n\t"
Definition at line 104 of file dsputil_mmx.c.
Definition at line 167 of file dsputil_mmx.c.
Definition at line 167 of file dsputil_mmx.c.
| #define PAVGBP_MMX | ( | rega, | |||
| regb, | |||||
| regr, | |||||
| regc, | |||||
| regd, | |||||
| regp | ) |
Value:
"movq " #rega ", " #regr " \n\t"\ "movq " #regc ", " #regp " \n\t"\ "por " #regb ", " #regr " \n\t"\ "por " #regd ", " #regp " \n\t"\ "pxor " #rega ", " #regb " \n\t"\ "pxor " #regc ", " #regd " \n\t"\ "pand %%mm6, " #regb " \n\t"\ "pand %%mm6, " #regd " \n\t"\ "psrlq $1, " #regd " \n\t"\ "psrlq $1, " #regb " \n\t"\ "psubb " #regb ", " #regr " \n\t"\ "psubb " #regd ", " #regp " \n\t"
Definition at line 135 of file dsputil_mmx.c.
| #define PAVGBP_MMX_NO_RND | ( | rega, | |||
| regb, | |||||
| regr, | |||||
| regc, | |||||
| regd, | |||||
| regp | ) |
Value:
"movq " #rega ", " #regr " \n\t"\ "movq " #regc ", " #regp " \n\t"\ "pand " #regb ", " #regr " \n\t"\ "pand " #regd ", " #regp " \n\t"\ "pxor " #rega ", " #regb " \n\t"\ "pxor " #regc ", " #regd " \n\t"\ "pand %%mm6, " #regb " \n\t"\ "pand %%mm6, " #regd " \n\t"\ "psrlq $1, " #regb " \n\t"\ "psrlq $1, " #regd " \n\t"\ "paddb " #regb ", " #regr " \n\t"\ "paddb " #regd ", " #regp " \n\t"
Definition at line 121 of file dsputil_mmx.c.
| #define PREFETCH | ( | name, | |||
| op | ) |
Value:
static void name(void *mem, int stride, int h){\ const uint8_t *p= mem;\ do{\ asm volatile(#op" %0" :: "m"(*p));\ p+= stride;\ }while(--h);\ }
Definition at line 1700 of file dsputil_mmx.c.
Referenced by bgr24ToUV(), bgr24ToY(), hcscale(), hyscale(), interleaveBytes(), rgb15to16(), rgb15to24(), rgb15to32(), rgb16to15(), rgb16to24(), rgb16to32(), rgb24to15(), rgb24to16(), rgb24to32(), rgb24tobgr15(), rgb24tobgr16(), rgb24tobgr24(), rgb24toyv12(), rgb32to15(), rgb32to16(), rgb32to24(), rgb32tobgr15(), rgb32tobgr16(), rgb32tobgr32(), uyvytoyv12(), vu9_to_vu12(), yuvPlanartouyvy(), yuvPlanartoyuy2(), yuy2toyv12(), and yvu9_to_yuy2().
| #define put_no_rnd_pixels16_3dnow put_no_rnd_pixels16_mmx |
Definition at line 211 of file dsputil_mmx.c.
| #define put_no_rnd_pixels16_mmx put_pixels16_mmx |
Definition at line 201 of file dsputil_mmx.c.
| #define put_no_rnd_pixels16_mmx2 put_no_rnd_pixels16_mmx |
Definition at line 206 of file dsputil_mmx.c.
| #define put_no_rnd_pixels8_3dnow put_no_rnd_pixels8_mmx |
Definition at line 212 of file dsputil_mmx.c.
| #define put_no_rnd_pixels8_mmx put_pixels8_mmx |
Definition at line 202 of file dsputil_mmx.c.
| #define put_no_rnd_pixels8_mmx2 put_no_rnd_pixels8_mmx |
Definition at line 207 of file dsputil_mmx.c.
Definition at line 1511 of file dsputil_mmx.c.
| #define put_pixels16_3dnow put_pixels16_mmx |
Definition at line 208 of file dsputil_mmx.c.
| #define put_pixels16_mmx2 put_pixels16_mmx |
Definition at line 203 of file dsputil_mmx.c.
| #define put_pixels4_3dnow put_pixels4_mmx |
Definition at line 210 of file dsputil_mmx.c.
| #define put_pixels4_mmx2 put_pixels4_mmx |
Definition at line 205 of file dsputil_mmx.c.
| #define put_pixels8_3dnow put_pixels8_mmx |
Definition at line 209 of file dsputil_mmx.c.
| #define put_pixels8_mmx2 put_pixels8_mmx |
Definition at line 204 of file dsputil_mmx.c.
| #define QPEL_2TAP | ( | OPNAME, | |||
| SIZE, | |||||
| MMX | ) |
Value:
QPEL_2TAP_XY(OPNAME, SIZE, MMX, 20, _x2_ ## MMX)\ QPEL_2TAP_XY(OPNAME, SIZE, MMX, 02, _y2_ ## MMX)\ QPEL_2TAP_XY(OPNAME, SIZE, MMX, 22, _xy2_mmx)\ static const qpel_mc_func OPNAME ## 2tap_qpel ## SIZE ## _mc00_ ## MMX =\ OPNAME ## qpel ## SIZE ## _mc00_ ## MMX;\ static const qpel_mc_func OPNAME ## 2tap_qpel ## SIZE ## _mc21_ ## MMX =\ OPNAME ## 2tap_qpel ## SIZE ## _mc20_ ## MMX;\ static const qpel_mc_func OPNAME ## 2tap_qpel ## SIZE ## _mc12_ ## MMX =\ OPNAME ## 2tap_qpel ## SIZE ## _mc02_ ## MMX;\ static void OPNAME ## 2tap_qpel ## SIZE ## _mc32_ ## MMX(uint8_t *dst, uint8_t *src, int stride){\ OPNAME ## pixels ## SIZE ## _y2_ ## MMX(dst, src+1, stride, SIZE);\ }\ static void OPNAME ## 2tap_qpel ## SIZE ## _mc23_ ## MMX(uint8_t *dst, uint8_t *src, int stride){\ OPNAME ## pixels ## SIZE ## _x2_ ## MMX(dst, src+stride, stride, SIZE);\ }\ QPEL_2TAP_L3(OPNAME, SIZE, MMX, 10, 0, 1, 0)\ QPEL_2TAP_L3(OPNAME, SIZE, MMX, 30, 1, -1, 0)\ QPEL_2TAP_L3(OPNAME, SIZE, MMX, 01, 0, stride, 0)\ QPEL_2TAP_L3(OPNAME, SIZE, MMX, 03, stride, -stride, 0)\ QPEL_2TAP_L3(OPNAME, SIZE, MMX, 11, 0, stride, 1)\ 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)\
Definition at line 1543 of file dsputil_mmx.c.
| #define QPEL_2TAP_L3 | ( | OPNAME, | |||
| SIZE, | |||||
| MMX, | |||||
| XY, | |||||
| S0, | |||||
| S1, | |||||
| S2 | ) |
| #define QPEL_2TAP_XY | ( | OPNAME, | |||
| SIZE, | |||||
| MMX, | |||||
| XY, | |||||
| HPEL | ) |
| #define QPEL_BASE | ( | OPNAME, | |||
| ROUNDER, | |||||
| RND, | |||||
| OP_MMX2, | |||||
| OP_3DNOW | ) |
Definition at line 885 of file dsputil_mmx.c.
| #define QPEL_OP | ( | OPNAME, | |||
| ROUNDER, | |||||
| RND, | |||||
| OP, | |||||
| MMX | ) |
Definition at line 1148 of file dsputil_mmx.c.
| #define QPEL_V_LOW | ( | m3, | |||
| m4, | |||||
| m5, | |||||
| m6, | |||||
| pw_20, | |||||
| pw_3, | |||||
| rnd, | |||||
| in0, | |||||
| in1, | |||||
| in2, | |||||
| in7, | |||||
| out, | |||||
| OP | ) |
Value:
"paddw " #m4 ", " #m3 " \n\t" /* x1 */\ "movq "MANGLE(ff_pw_20)", %%mm4 \n\t" /* 20 */\ "pmullw " #m3 ", %%mm4 \n\t" /* 20x1 */\ "movq "#in7", " #m3 " \n\t" /* d */\ "movq "#in0", %%mm5 \n\t" /* D */\ "paddw " #m3 ", %%mm5 \n\t" /* x4 */\ "psubw %%mm5, %%mm4 \n\t" /* 20x1 - x4 */\ "movq "#in1", %%mm5 \n\t" /* C */\ "movq "#in2", %%mm6 \n\t" /* B */\ "paddw " #m6 ", %%mm5 \n\t" /* x3 */\ "paddw " #m5 ", %%mm6 \n\t" /* x2 */\ "paddw %%mm6, %%mm6 \n\t" /* 2x2 */\ "psubw %%mm6, %%mm5 \n\t" /* -2x2 + x3 */\ "pmullw "MANGLE(ff_pw_3)", %%mm5 \n\t" /* -6x2 + 3x3 */\ "paddw " #rnd ", %%mm4 \n\t" /* x2 */\ "paddw %%mm4, %%mm5 \n\t" /* 20x1 - 6x2 + 3x3 - x4 */\ "psraw $5, %%mm5 \n\t"\ "packuswb %%mm5, %%mm5 \n\t"\ OP(%%mm5, out, %%mm7, d)
Definition at line 864 of file dsputil_mmx.c.