38 int line_size,
int h);
40 int line_size,
int h);
42 int line_size,
int h);
46 #define hadamard_func(cpu) \
47 int ff_hadamard8_diff_ ## cpu(MpegEncContext *s, uint8_t *src1, \
48 uint8_t *src2, int stride, int h); \
49 int ff_hadamard8_diff16_ ## cpu(MpegEncContext *s, uint8_t *src1, \
50 uint8_t *src2, int stride, int h);
64 score1 = c->
dsp.
sse[0](
c, pix1, pix2, line_size, h);
73 return score1 +
FFABS(score2) * 8;
79 int score1 =
ff_sse8_mmx(c, pix1, pix2, line_size, h);
86 return score1 +
FFABS(score2) * 8;
101 #define SUM(in0, in1, out0, out1) \
102 "movq (%0), %%mm2\n" \
103 "movq 8(%0), %%mm3\n" \
105 "movq %%mm2, " #out0 "\n" \
106 "movq %%mm3, " #out1 "\n" \
107 "psubusb " #in0 ", %%mm2\n" \
108 "psubusb " #in1 ", %%mm3\n" \
109 "psubusb " #out0 ", " #in0 "\n" \
110 "psubusb " #out1 ", " #in1 "\n" \
111 "por %%mm2, " #in0 "\n" \
112 "por %%mm3, " #in1 "\n" \
113 "movq " #in0 ", %%mm2\n" \
114 "movq " #in1 ", %%mm3\n" \
115 "punpcklbw %%mm7, " #in0 "\n" \
116 "punpcklbw %%mm7, " #in1 "\n" \
117 "punpckhbw %%mm7, %%mm2\n" \
118 "punpckhbw %%mm7, %%mm3\n" \
119 "paddw " #in1 ", " #in0 "\n" \
120 "paddw %%mm3, %%mm2\n" \
121 "paddw %%mm2, " #in0 "\n" \
122 "paddw " #in0 ", %%mm6\n"
127 "pxor %%mm6, %%mm6\n"
128 "pxor %%mm7, %%mm7\n"
130 "movq 8(%0), %%mm1\n"
135 SUM(%%mm4, %%mm5, %%mm0, %%mm1)
137 SUM(%%mm0, %%mm1, %%mm4, %%mm5)
142 "movq %%mm6, %%mm0\n"
144 "paddw %%mm6, %%mm0\n"
145 "movq %%mm0, %%mm6\n"
147 "paddw %%mm6, %%mm0\n"
149 :
"+r" (pix),
"=r" (tmp)
150 :
"r" ((
x86_reg) line_size),
"m" (h)
158 int line_size,
int h)
165 #define SUM(in0, in1, out0, out1) \
166 "movq (%0), " #out0 "\n" \
167 "movq 8(%0), " #out1 "\n" \
169 "psadbw " #out0 ", " #in0 "\n" \
170 "psadbw " #out1 ", " #in1 "\n" \
171 "paddw " #in1 ", " #in0 "\n" \
172 "paddw " #in0 ", %%mm6\n"
176 "pxor %%mm6, %%mm6\n"
177 "pxor %%mm7, %%mm7\n"
179 "movq 8(%0), %%mm1\n"
184 SUM(%%mm4, %%mm5, %%mm0, %%mm1)
186 SUM(%%mm0, %%mm1, %%mm4, %%mm5)
192 :
"+r" (pix),
"=r" (tmp)
193 :
"r" ((
x86_reg) line_size),
"m" (h)
201 int line_size,
int h)
209 #define SUM(in0, in1, out0, out1) \
210 "movq (%0), %%mm2\n" \
211 "movq (%1), " #out0 "\n" \
212 "movq 8(%0), %%mm3\n" \
213 "movq 8(%1), " #out1 "\n" \
216 "psubb " #out0 ", %%mm2\n" \
217 "psubb " #out1 ", %%mm3\n" \
218 "pxor %%mm7, %%mm2\n" \
219 "pxor %%mm7, %%mm3\n" \
220 "movq %%mm2, " #out0 "\n" \
221 "movq %%mm3, " #out1 "\n" \
222 "psubusb " #in0 ", %%mm2\n" \
223 "psubusb " #in1 ", %%mm3\n" \
224 "psubusb " #out0 ", " #in0 "\n" \
225 "psubusb " #out1 ", " #in1 "\n" \
226 "por %%mm2, " #in0 "\n" \
227 "por %%mm3, " #in1 "\n" \
228 "movq " #in0 ", %%mm2\n" \
229 "movq " #in1 ", %%mm3\n" \
230 "punpcklbw %%mm7, " #in0 "\n" \
231 "punpcklbw %%mm7, " #in1 "\n" \
232 "punpckhbw %%mm7, %%mm2\n" \
233 "punpckhbw %%mm7, %%mm3\n" \
234 "paddw " #in1 ", " #in0 "\n" \
235 "paddw %%mm3, %%mm2\n" \
236 "paddw %%mm2, " #in0 "\n" \
237 "paddw " #in0 ", %%mm6\n"
242 "pxor %%mm6, %%mm6\n"
243 "pcmpeqw %%mm7, %%mm7\n"
245 "packsswb %%mm7, %%mm7\n"
248 "movq 8(%0), %%mm1\n"
249 "movq 8(%1), %%mm3\n"
252 "psubb %%mm2, %%mm0\n"
253 "psubb %%mm3, %%mm1\n"
254 "pxor %%mm7, %%mm0\n"
255 "pxor %%mm7, %%mm1\n"
259 SUM(%%mm4, %%mm5, %%mm0, %%mm1)
261 SUM(%%mm0, %%mm1, %%mm4, %%mm5)
266 "movq %%mm6, %%mm0\n"
268 "paddw %%mm6, %%mm0\n"
269 "movq %%mm0, %%mm6\n"
271 "paddw %%mm6, %%mm0\n"
273 :
"+r" (pix1),
"+r" (pix2),
"=r" (tmp)
274 :
"r" ((
x86_reg) line_size),
"m" (h)
282 int line_size,
int h)
290 #define SUM(in0, in1, out0, out1) \
291 "movq (%0), " #out0 "\n" \
292 "movq (%1), %%mm2\n" \
293 "movq 8(%0), " #out1 "\n" \
294 "movq 8(%1), %%mm3\n" \
297 "psubb %%mm2, " #out0 "\n" \
298 "psubb %%mm3, " #out1 "\n" \
299 "pxor %%mm7, " #out0 "\n" \
300 "pxor %%mm7, " #out1 "\n" \
301 "psadbw " #out0 ", " #in0 "\n" \
302 "psadbw " #out1 ", " #in1 "\n" \
303 "paddw " #in1 ", " #in0 "\n" \
304 "paddw " #in0 ", %%mm6\n "
308 "pxor %%mm6, %%mm6\n"
309 "pcmpeqw %%mm7, %%mm7\n"
311 "packsswb %%mm7, %%mm7\n"
314 "movq 8(%0), %%mm1\n"
315 "movq 8(%1), %%mm3\n"
318 "psubb %%mm2, %%mm0\n"
319 "psubb %%mm3, %%mm1\n"
320 "pxor %%mm7, %%mm0\n"
321 "pxor %%mm7, %%mm1\n"
325 SUM(%%mm4, %%mm5, %%mm0, %%mm1)
327 SUM(%%mm0, %%mm1, %%mm4, %%mm5)
333 :
"+r" (pix1),
"+r" (pix2),
"=r" (tmp)
334 :
"r" ((
x86_reg) line_size),
"m" (h)
350 c->
vsad[4] = vsad_intra16_mmx;
353 c->
vsad[0] = vsad16_mmx;
358 c->
vsad[4] = vsad_intra16_mmxext;
361 c->
vsad[0] = vsad16_mmxext;
373 c->
nsse[0] = nsse16_mmx;
374 c->
nsse[1] = nsse8_mmx;
388 #if HAVE_ALIGNED_STACK
396 #if HAVE_ALIGNED_STACK