35 #define PHADDD(a, t) \
36 "movq " #a ", " #t " \n\t" \
37 "psrlq $32, " #a " \n\t" \
38 "paddd " #t ", " #a " \n\t"
45 #define PMULHRW(x, y, s, o) \
46 "pmulhw " #s ", " #x " \n\t" \
47 "pmulhw " #s ", " #y " \n\t" \
48 "paddw " #o ", " #x " \n\t" \
49 "paddw " #o ", " #y " \n\t" \
50 "psraw $1, " #x " \n\t" \
51 "psraw $1, " #y " \n\t"
52 #define DEF(x) x ## _mmx
53 #define SET_RND MOVQ_WONE
54 #define SCALE_OFFSET 1
63 #define DEF(x) x ## _3dnow
65 #define SCALE_OFFSET 0
66 #define PMULHRW(x, y, s, o) \
67 "pmulhrw " #s ", " #x " \n\t" \
68 "pmulhrw " #s ", " #y " \n\t"
79 #define DEF(x) x ## _ssse3
81 #define SCALE_OFFSET -1
83 #define PHADDD(a, t) \
84 "pshufw $0x0E, " #a ", " #t " \n\t" \
86 "paddd " #t ", " #a " \n\t"
88 #define PMULHRW(x, y, s, o) \
89 "pmulhrsw " #s ", " #x " \n\t" \
90 "pmulhrsw " #s ", " #y " \n\t"
104 int w,
int h,
int sides)
115 "movd (%0), %%mm0 \n\t"
116 "punpcklbw %%mm0, %%mm0 \n\t"
117 "punpcklwd %%mm0, %%mm0 \n\t"
118 "punpckldq %%mm0, %%mm0 \n\t"
119 "movq %%mm0, -8(%0) \n\t"
120 "movq -8(%0, %2), %%mm1 \n\t"
121 "punpckhbw %%mm1, %%mm1 \n\t"
122 "punpckhwd %%mm1, %%mm1 \n\t"
123 "punpckhdq %%mm1, %%mm1 \n\t"
124 "movq %%mm1, (%0, %2) \n\t"
131 }
else if (
w == 16) {
134 "movd (%0), %%mm0 \n\t"
135 "punpcklbw %%mm0, %%mm0 \n\t"
136 "punpcklwd %%mm0, %%mm0 \n\t"
137 "punpckldq %%mm0, %%mm0 \n\t"
138 "movq %%mm0, -8(%0) \n\t"
139 "movq %%mm0, -16(%0) \n\t"
140 "movq -8(%0, %2), %%mm1 \n\t"
141 "punpckhbw %%mm1, %%mm1 \n\t"
142 "punpckhwd %%mm1, %%mm1 \n\t"
143 "punpckhdq %%mm1, %%mm1 \n\t"
144 "movq %%mm1, (%0, %2) \n\t"
145 "movq %%mm1, 8(%0, %2) \n\t"
156 "movd (%0), %%mm0 \n\t"
157 "punpcklbw %%mm0, %%mm0 \n\t"
158 "punpcklwd %%mm0, %%mm0 \n\t"
159 "movd %%mm0, -4(%0) \n\t"
160 "movd -4(%0, %2), %%mm1 \n\t"
161 "punpcklbw %%mm1, %%mm1 \n\t"
162 "punpckhwd %%mm1, %%mm1 \n\t"
163 "punpckhdq %%mm1, %%mm1 \n\t"
164 "movd %%mm1, (%0, %2) \n\t"
175 for (
i = 0;
i <
h;
i += 4) {
176 ptr = buf - (
i + 1) *
wrap -
w;
179 "movq (%1, %0), %%mm0 \n\t"
180 "movq %%mm0, (%0) \n\t"
181 "movq %%mm0, (%0, %2) \n\t"
182 "movq %%mm0, (%0, %2, 2) \n\t"
183 "movq %%mm0, (%0, %3) \n\t"
190 "r" (ptr +
width + 2 *
w));
195 for (
i = 0;
i <
h;
i += 4) {
196 ptr = last_line + (
i + 1) *
wrap -
w;
199 "movq (%1, %0), %%mm0 \n\t"
200 "movq %%mm0, (%0) \n\t"
201 "movq %%mm0, (%0, %2) \n\t"
202 "movq %%mm0, (%0, %2, 2) \n\t"
203 "movq %%mm0, (%0, %3) \n\t"
210 "r" (ptr +
width + 2 *
w));
246 c->try_8x8basis = try_8x8basis_mmx;
248 c->add_8x8basis = add_8x8basis_mmx;
251 c->draw_edges = draw_edges_mmx;
257 c->try_8x8basis = try_8x8basis_3dnow;
259 c->add_8x8basis = add_8x8basis_3dnow;
262 #if HAVE_SSSE3_INLINE
265 c->try_8x8basis = try_8x8basis_ssse3;
267 c->add_8x8basis = add_8x8basis_ssse3;
__asm__(".macro parse_r var r\n\t" "\\var = -1\n\t" _IFC_REG(0) _IFC_REG(1) _IFC_REG(2) _IFC_REG(3) _IFC_REG(4) _IFC_REG(5) _IFC_REG(6) _IFC_REG(7) _IFC_REG(8) _IFC_REG(9) _IFC_REG(10) _IFC_REG(11) _IFC_REG(12) _IFC_REG(13) _IFC_REG(14) _IFC_REG(15) _IFC_REG(16) _IFC_REG(17) _IFC_REG(18) _IFC_REG(19) _IFC_REG(20) _IFC_REG(21) _IFC_REG(22) _IFC_REG(23) _IFC_REG(24) _IFC_REG(25) _IFC_REG(26) _IFC_REG(27) _IFC_REG(28) _IFC_REG(29) _IFC_REG(30) _IFC_REG(31) ".iflt \\var\n\t" ".error \"Unable to parse register name \\r\"\n\t" ".endif\n\t" ".endm")
Macro definitions for various function/variable attributes.
simple assert() macros that are a bit more flexible than ISO C assert().
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
Libavcodec external API header.
static atomic_int cpu_flags
int av_get_cpu_flags(void)
Return the flags which specify extensions supported by the CPU.
#define AV_CODEC_FLAG_BITEXACT
Use only bitexact stuff (except (I)DCT).
av_cold void ff_mpegvideoencdsp_init_x86(MpegvideoEncDSPContext *c, AVCodecContext *avctx)
int ff_pix_sum16_mmxext(uint8_t *pix, int line_size)
int ff_pix_sum16_mmx(uint8_t *pix, int line_size)
int ff_pix_sum16_sse2(uint8_t *pix, int line_size)
int ff_pix_norm1_mmx(uint8_t *pix, int line_size)
int ff_pix_norm1_sse2(uint8_t *pix, int line_size)
int ff_pix_sum16_xop(uint8_t *pix, int line_size)
main external API structure.
int bits_per_raw_sample
Bits per sample/pixel of internal libavcodec pixel/sample format.
int flags
AV_CODEC_FLAG_*.
#define EXTERNAL_MMXEXT(flags)
#define INLINE_MMX(flags)
#define EXTERNAL_MMX(flags)
#define EXTERNAL_XOP(flags)
#define EXTERNAL_SSE2(flags)
#define INLINE_AMD3DNOW(flags)
#define INLINE_SSSE3(flags)