cavsdsp_mmx.c File Reference
#include "libavutil/common.h"
#include "libavutil/cpu.h"
#include "libavutil/x86_cpu.h"
#include "libavcodec/dsputil.h"
#include "libavcodec/cavsdsp.h"
#include "dsputil_mmx.h"

Go to the source code of this file.

Macros

#define QPEL_CAVSV1(A, B, C, D, E, F, OP, MUL2)
#define QPEL_CAVSV2(A, B, C, D, E, F, OP, MUL2)
#define QPEL_CAVSV3(A, B, C, D, E, F, OP, MUL2)
#define QPEL_CAVSVNUM(VOP, OP, ADD, MUL1, MUL2)
#define QPEL_CAVS(OPNAME, OP, MMX)
#define CAVS_MC(OPNAME, SIZE, 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 dspfunc(PFX, IDX, NUM)
#define dspfunc(PFX, IDX, NUM)

Functions

static void cavs_idct8_1d (int16_t *block, uint64_t bias)
static void cavs_idct8_add_mmx (uint8_t *dst, int16_t *block, int stride)
static void ff_cavsdsp_init_mmx2 (CAVSDSPContext *c, AVCodecContext *avctx)
static void ff_cavsdsp_init_3dnow (CAVSDSPContext *c, AVCodecContext *avctx)
void ff_cavsdsp_init_mmx (CAVSDSPContext *c, AVCodecContext *avctx)

Macro Definition Documentation

#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 419 of file cavsdsp_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 423 of file cavsdsp_mmx.c.

#define CAVS_MC (   OPNAME,
  SIZE,
  MMX 
)
Value:
static void ff_ ## OPNAME ## cavs_qpel ## SIZE ## _mc20_ ## MMX(uint8_t *dst, uint8_t *src, int stride){\
OPNAME ## cavs_qpel ## SIZE ## _h_ ## MMX(dst, src, stride, stride);\
}\
\
static void ff_ ## OPNAME ## cavs_qpel ## SIZE ## _mc01_ ## MMX(uint8_t *dst, uint8_t *src, int stride){\
OPNAME ## cavs_qpel ## SIZE ## _v1_ ## MMX(dst, src, stride, stride);\
}\
\
static void ff_ ## OPNAME ## cavs_qpel ## SIZE ## _mc02_ ## MMX(uint8_t *dst, uint8_t *src, int stride){\
OPNAME ## cavs_qpel ## SIZE ## _v2_ ## MMX(dst, src, stride, stride);\
}\
\
static void ff_ ## OPNAME ## cavs_qpel ## SIZE ## _mc03_ ## MMX(uint8_t *dst, uint8_t *src, int stride){\
OPNAME ## cavs_qpel ## SIZE ## _v3_ ## MMX(dst, src, stride, stride);\
}\

Definition at line 401 of file cavsdsp_mmx.c.

#define dspfunc (   PFX,
  IDX,
  NUM 
)
Value:
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; \
#define dspfunc (   PFX,
  IDX,
  NUM 
)
Value:
c->PFX ## _pixels_tab[IDX][ 0] = ff_ ## PFX ## NUM ## _mc00_mmx2; \
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; \
c->PFX ## _pixels_tab[IDX][12] = ff_ ## PFX ## NUM ## _mc03_3dnow; \
#define PUT_OP (   a,
  b,
  temp,
  size 
)    "mov" #size " " #a ", " #b " \n\t"

Definition at line 418 of file cavsdsp_mmx.c.

#define QPEL_CAVS (   OPNAME,
  OP,
  MMX 
)

Definition at line 308 of file cavsdsp_mmx.c.

#define QPEL_CAVSV1 (   A,
  B,
  C,
  D,
  E,
  F,
  OP,
  MUL2 
)
Value:
"movd (%0), "#F" \n\t"\
"movq "#C", %%mm6 \n\t"\
"pmullw %5, %%mm6 \n\t"\
"movq "#D", %%mm7 \n\t"\
"pmullw "MANGLE(MUL2)", %%mm7\n\t"\
"psllw $3, "#E" \n\t"\
"psubw "#E", %%mm6 \n\t"\
"psraw $3, "#E" \n\t"\
"paddw %%mm7, %%mm6 \n\t"\
"paddw "#E", %%mm6 \n\t"\
"paddw "#B", "#B" \n\t"\
"pxor %%mm7, %%mm7 \n\t"\
"add %2, %0 \n\t"\
"punpcklbw %%mm7, "#F" \n\t"\
"psubw "#B", %%mm6 \n\t"\
"psraw $1, "#B" \n\t"\
"psubw "#A", %%mm6 \n\t"\
"paddw %4, %%mm6 \n\t"\
"psraw $7, %%mm6 \n\t"\
"packuswb %%mm6, %%mm6 \n\t"\
OP(%%mm6, (%1), A, d) \
"add %3, %1 \n\t"

Definition at line 187 of file cavsdsp_mmx.c.

#define QPEL_CAVSV2 (   A,
  B,
  C,
  D,
  E,
  F,
  OP,
  MUL2 
)
Value:
"movd (%0), "#F" \n\t"\
"movq "#C", %%mm6 \n\t"\
"paddw "#D", %%mm6 \n\t"\
"pmullw %5, %%mm6 \n\t"\
"add %2, %0 \n\t"\
"punpcklbw %%mm7, "#F" \n\t"\
"psubw "#B", %%mm6 \n\t"\
"psubw "#E", %%mm6 \n\t"\
"paddw %4, %%mm6 \n\t"\
"psraw $3, %%mm6 \n\t"\
"packuswb %%mm6, %%mm6 \n\t"\
OP(%%mm6, (%1), A, d) \
"add %3, %1 \n\t"

Definition at line 212 of file cavsdsp_mmx.c.

#define QPEL_CAVSV3 (   A,
  B,
  C,
  D,
  E,
  F,
  OP,
  MUL2 
)
Value:
"movd (%0), "#F" \n\t"\
"movq "#C", %%mm6 \n\t"\
"pmullw "MANGLE(MUL2)", %%mm6\n\t"\
"movq "#D", %%mm7 \n\t"\
"pmullw %5, %%mm7 \n\t"\
"psllw $3, "#B" \n\t"\
"psubw "#B", %%mm6 \n\t"\
"psraw $3, "#B" \n\t"\
"paddw %%mm7, %%mm6 \n\t"\
"paddw "#B", %%mm6 \n\t"\
"paddw "#E", "#E" \n\t"\
"pxor %%mm7, %%mm7 \n\t"\
"add %2, %0 \n\t"\
"punpcklbw %%mm7, "#F" \n\t"\
"psubw "#E", %%mm6 \n\t"\
"psraw $1, "#E" \n\t"\
"psubw "#F", %%mm6 \n\t"\
"paddw %4, %%mm6 \n\t"\
"psraw $7, %%mm6 \n\t"\
"packuswb %%mm6, %%mm6 \n\t"\
OP(%%mm6, (%1), A, d) \
"add %3, %1 \n\t"

Definition at line 228 of file cavsdsp_mmx.c.

#define QPEL_CAVSVNUM (   VOP,
  OP,
  ADD,
  MUL1,
  MUL2 
)

Definition at line 253 of file cavsdsp_mmx.c.

Function Documentation

static void cavs_idct8_1d ( int16_t *  block,
uint64_t  bias 
)
inlinestatic

Definition at line 38 of file cavsdsp_mmx.c.

Referenced by cavs_idct8_add_mmx().

static void cavs_idct8_add_mmx ( uint8_t *  dst,
int16_t *  block,
int  stride 
)
static

Definition at line 115 of file cavsdsp_mmx.c.

Referenced by ff_cavsdsp_init_3dnow(), and ff_cavsdsp_init_mmx2().

static void ff_cavsdsp_init_3dnow ( CAVSDSPContext c,
AVCodecContext avctx 
)
static

Definition at line 458 of file cavsdsp_mmx.c.

Referenced by ff_cavsdsp_init_mmx().

void ff_cavsdsp_init_mmx ( CAVSDSPContext c,
AVCodecContext avctx 
)

Definition at line 474 of file cavsdsp_mmx.c.

Referenced by ff_cavsdsp_init().

static void ff_cavsdsp_init_mmx2 ( CAVSDSPContext c,
AVCodecContext avctx 
)
static

Definition at line 442 of file cavsdsp_mmx.c.

Referenced by ff_cavsdsp_init_mmx().