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);
65 score1 = c->
dsp.
sse[0](
c, pix1, pix2, line_size, h);
74 return score1 +
FFABS(score2) * 8;
80 int score1 =
ff_sse8_mmx(c, pix1, pix2, line_size, h);
87 return score1 +
FFABS(score2) * 8;
102 #define SUM(in0, in1, out0, out1) \
103 "movq (%0), %%mm2\n" \
104 "movq 8(%0), %%mm3\n" \
106 "movq %%mm2, " #out0 "\n" \
107 "movq %%mm3, " #out1 "\n" \
108 "psubusb " #in0 ", %%mm2\n" \
109 "psubusb " #in1 ", %%mm3\n" \
110 "psubusb " #out0 ", " #in0 "\n" \
111 "psubusb " #out1 ", " #in1 "\n" \
112 "por %%mm2, " #in0 "\n" \
113 "por %%mm3, " #in1 "\n" \
114 "movq " #in0 ", %%mm2\n" \
115 "movq " #in1 ", %%mm3\n" \
116 "punpcklbw %%mm7, " #in0 "\n" \
117 "punpcklbw %%mm7, " #in1 "\n" \
118 "punpckhbw %%mm7, %%mm2\n" \
119 "punpckhbw %%mm7, %%mm3\n" \
120 "paddw " #in1 ", " #in0 "\n" \
121 "paddw %%mm3, %%mm2\n" \
122 "paddw %%mm2, " #in0 "\n" \
123 "paddw " #in0 ", %%mm6\n"
128 "pxor %%mm6, %%mm6\n"
129 "pxor %%mm7, %%mm7\n"
131 "movq 8(%0), %%mm1\n"
136 SUM(%%mm4, %%mm5, %%mm0, %%mm1)
138 SUM(%%mm0, %%mm1, %%mm4, %%mm5)
143 "movq %%mm6, %%mm0\n"
145 "paddw %%mm6, %%mm0\n"
146 "movq %%mm0, %%mm6\n"
148 "paddw %%mm6, %%mm0\n"
150 :
"+r" (pix),
"=r" (tmp)
151 :
"r" ((
x86_reg) line_size),
"m" (h)
159 int line_size,
int h)
166 #define SUM(in0, in1, out0, out1) \
167 "movq (%0), " #out0 "\n" \
168 "movq 8(%0), " #out1 "\n" \
170 "psadbw " #out0 ", " #in0 "\n" \
171 "psadbw " #out1 ", " #in1 "\n" \
172 "paddw " #in1 ", " #in0 "\n" \
173 "paddw " #in0 ", %%mm6\n"
177 "pxor %%mm6, %%mm6\n"
178 "pxor %%mm7, %%mm7\n"
180 "movq 8(%0), %%mm1\n"
185 SUM(%%mm4, %%mm5, %%mm0, %%mm1)
187 SUM(%%mm0, %%mm1, %%mm4, %%mm5)
193 :
"+r" (pix),
"=r" (tmp)
194 :
"r" ((
x86_reg) line_size),
"m" (h)
202 int line_size,
int h)
210 #define SUM(in0, in1, out0, out1) \
211 "movq (%0), %%mm2\n" \
212 "movq (%1), " #out0 "\n" \
213 "movq 8(%0), %%mm3\n" \
214 "movq 8(%1), " #out1 "\n" \
217 "psubb " #out0 ", %%mm2\n" \
218 "psubb " #out1 ", %%mm3\n" \
219 "pxor %%mm7, %%mm2\n" \
220 "pxor %%mm7, %%mm3\n" \
221 "movq %%mm2, " #out0 "\n" \
222 "movq %%mm3, " #out1 "\n" \
223 "psubusb " #in0 ", %%mm2\n" \
224 "psubusb " #in1 ", %%mm3\n" \
225 "psubusb " #out0 ", " #in0 "\n" \
226 "psubusb " #out1 ", " #in1 "\n" \
227 "por %%mm2, " #in0 "\n" \
228 "por %%mm3, " #in1 "\n" \
229 "movq " #in0 ", %%mm2\n" \
230 "movq " #in1 ", %%mm3\n" \
231 "punpcklbw %%mm7, " #in0 "\n" \
232 "punpcklbw %%mm7, " #in1 "\n" \
233 "punpckhbw %%mm7, %%mm2\n" \
234 "punpckhbw %%mm7, %%mm3\n" \
235 "paddw " #in1 ", " #in0 "\n" \
236 "paddw %%mm3, %%mm2\n" \
237 "paddw %%mm2, " #in0 "\n" \
238 "paddw " #in0 ", %%mm6\n"
243 "pxor %%mm6, %%mm6\n"
244 "pcmpeqw %%mm7, %%mm7\n"
246 "packsswb %%mm7, %%mm7\n"
249 "movq 8(%0), %%mm1\n"
250 "movq 8(%1), %%mm3\n"
253 "psubb %%mm2, %%mm0\n"
254 "psubb %%mm3, %%mm1\n"
255 "pxor %%mm7, %%mm0\n"
256 "pxor %%mm7, %%mm1\n"
260 SUM(%%mm4, %%mm5, %%mm0, %%mm1)
262 SUM(%%mm0, %%mm1, %%mm4, %%mm5)
267 "movq %%mm6, %%mm0\n"
269 "paddw %%mm6, %%mm0\n"
270 "movq %%mm0, %%mm6\n"
272 "paddw %%mm6, %%mm0\n"
274 :
"+r" (pix1),
"+r" (pix2),
"=r" (tmp)
275 :
"r" ((
x86_reg) line_size),
"m" (h)
283 int line_size,
int h)
291 #define SUM(in0, in1, out0, out1) \
292 "movq (%0), " #out0 "\n" \
293 "movq (%1), %%mm2\n" \
294 "movq 8(%0), " #out1 "\n" \
295 "movq 8(%1), %%mm3\n" \
298 "psubb %%mm2, " #out0 "\n" \
299 "psubb %%mm3, " #out1 "\n" \
300 "pxor %%mm7, " #out0 "\n" \
301 "pxor %%mm7, " #out1 "\n" \
302 "psadbw " #out0 ", " #in0 "\n" \
303 "psadbw " #out1 ", " #in1 "\n" \
304 "paddw " #in1 ", " #in0 "\n" \
305 "paddw " #in0 ", %%mm6\n "
309 "pxor %%mm6, %%mm6\n"
310 "pcmpeqw %%mm7, %%mm7\n"
312 "packsswb %%mm7, %%mm7\n"
315 "movq 8(%0), %%mm1\n"
316 "movq 8(%1), %%mm3\n"
319 "psubb %%mm2, %%mm0\n"
320 "psubb %%mm3, %%mm1\n"
321 "pxor %%mm7, %%mm0\n"
322 "pxor %%mm7, %%mm1\n"
326 SUM(%%mm4, %%mm5, %%mm0, %%mm1)
328 SUM(%%mm0, %%mm1, %%mm4, %%mm5)
334 :
"+r" (pix1),
"+r" (pix2),
"=r" (tmp)
335 :
"r" ((
x86_reg) line_size),
"m" (h)
351 c->
vsad[4] = vsad_intra16_mmx;
354 c->
vsad[0] = vsad16_mmx;
359 c->
vsad[4] = vsad_intra16_mmxext;
362 c->
vsad[0] = vsad16_mmxext;
374 c->
nsse[0] = nsse16_mmx;
375 c->
nsse[1] = nsse8_mmx;
389 #if HAVE_ALIGNED_STACK
397 #if HAVE_ALIGNED_STACK