1 /*
2 * Copyright (c) 2000, 2001 Fabrice Bellard
3 * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
4 *
5 * This file is part of FFmpeg.
6 *
7 * FFmpeg is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * FFmpeg is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with FFmpeg; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 */
21
22 #include "config.h"
31
33 int dstStride, int src1Stride, int h);
36 int src1Stride, int h);
38 int dstStride, int src1Stride, int h);
40 int dstStride, int src1Stride, int h);
42 int dstStride, int src1Stride, int h);
44 int dstStride, int src1Stride, int h);
46 int dstStride, int srcStride, int h);
48 int dstStride, int srcStride, int h);
50 int dstStride, int srcStride,
51 int h);
53 int dstStride, int srcStride, int h);
55 int dstStride, int srcStride, int h);
57 int dstStride, int srcStride,
58 int h);
60 int dstStride, int srcStride);
62 int dstStride, int srcStride);
64 int dstStride, int srcStride);
66 int dstStride, int srcStride);
68 int dstStride, int srcStride);
70 int dstStride, int srcStride);
71 #define ff_put_no_rnd_pixels16_mmxext ff_put_pixels16_mmxext
72 #define ff_put_no_rnd_pixels8_mmxext ff_put_pixels8_mmxext
73
76
78 int order);
80 int order);
82 const int16_t *v3,
83 int order, int mul);
85 const int16_t *v3,
86 int order, int mul);
88 const int16_t *v3,
89 int order, int mul);
90
92 const int16_t *window,
unsigned int len);
94 const int16_t *window,
unsigned int len);
96 const int16_t *window,
unsigned int len);
98 const int16_t *window,
unsigned int len);
100 const int16_t *window,
unsigned int len);
102 const int16_t *window,
unsigned int len);
103
106
109 int *left, int *left_top);
111 int w, int left);
113 int w, int left);
114
123
124 #if HAVE_YASM
125
126 PIXELS16(
static, ff_avg, , , _mmxext)
127 PIXELS16(static, ff_put, , , _mmxext)
128
129 #define QPEL_OP(OPNAME, RND, MMX) \
130 static void OPNAME ## qpel8_mc00_ ## MMX (uint8_t *dst, uint8_t *src, \
131 ptrdiff_t stride) \
132 { \
133 ff_ ## OPNAME ## pixels8_ ## MMX(dst, src, stride, 8); \
134 } \
135 \
136 static void OPNAME ## qpel8_mc10_ ## MMX(uint8_t *dst, uint8_t *src, \
137 ptrdiff_t stride) \
138 { \
139 uint64_t temp[8]; \
140 uint8_t * const half = (uint8_t*)temp; \
141 ff_put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(half, src, 8, \
142 stride, 8); \
143 ff_ ## OPNAME ## pixels8_l2_ ## MMX(dst, src, half, \
144 stride, stride, 8); \
145 } \
146 \
147 static void OPNAME ## qpel8_mc20_ ## MMX(uint8_t *dst, uint8_t *src, \
148 ptrdiff_t stride) \
149 { \
150 ff_ ## OPNAME ## mpeg4_qpel8_h_lowpass_ ## MMX(dst, src, stride, \
151 stride, 8); \
152 } \
153 \
154 static void OPNAME ## qpel8_mc30_ ## MMX(uint8_t *dst, uint8_t *src, \
155 ptrdiff_t stride) \
156 { \
157 uint64_t temp[8]; \
158 uint8_t * const half = (uint8_t*)temp; \
159 ff_put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(half, src, 8, \
160 stride, 8); \
161 ff_ ## OPNAME ## pixels8_l2_ ## MMX(dst, src + 1, half, stride, \
162 stride, 8); \
163 } \
164 \
165 static void OPNAME ## qpel8_mc01_ ## MMX(uint8_t *dst, uint8_t *src, \
166 ptrdiff_t stride) \
167 { \
168 uint64_t temp[8]; \
169 uint8_t * const half = (uint8_t*)temp; \
170 ff_put ## RND ## mpeg4_qpel8_v_lowpass_ ## MMX(half, src, \
171 8, stride); \
172 ff_ ## OPNAME ## pixels8_l2_ ## MMX(dst, src, half, \
173 stride, stride, 8); \
174 } \
175 \
176 static void OPNAME ## qpel8_mc02_ ## MMX(uint8_t *dst, uint8_t *src, \
177 ptrdiff_t stride) \
178 { \
179 ff_ ## OPNAME ## mpeg4_qpel8_v_lowpass_ ## MMX(dst, src, \
180 stride, stride); \
181 } \
182 \
183 static void OPNAME ## qpel8_mc03_ ## MMX(uint8_t *dst, uint8_t *src, \
184 ptrdiff_t stride) \
185 { \
186 uint64_t temp[8]; \
187 uint8_t * const half = (uint8_t*)temp; \
188 ff_put ## RND ## mpeg4_qpel8_v_lowpass_ ## MMX(half, src, \
189 8, stride); \
190 ff_ ## OPNAME ## pixels8_l2_ ## MMX(dst, src + stride, half, stride,\
191 stride, 8); \
192 } \
193 \
194 static void OPNAME ## qpel8_mc11_ ## MMX(uint8_t *dst, uint8_t *src, \
195 ptrdiff_t stride) \
196 { \
197 uint64_t half[8 + 9]; \
198 uint8_t * const halfH = ((uint8_t*)half) + 64; \
199 uint8_t * const halfHV = ((uint8_t*)half); \
200 ff_put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(halfH, src, 8, \
201 stride, 9); \
202 ff_put ## RND ## pixels8_l2_ ## MMX(halfH, src, halfH, 8, \
203 stride, 9); \
204 ff_put ## RND ## mpeg4_qpel8_v_lowpass_ ## MMX(halfHV, halfH, 8, 8);\
205 ff_ ## OPNAME ## pixels8_l2_ ## MMX(dst, halfH, halfHV, \
206 stride, 8, 8); \
207 } \
208 \
209 static void OPNAME ## qpel8_mc31_ ## MMX(uint8_t *dst, uint8_t *src, \
210 ptrdiff_t stride) \
211 { \
212 uint64_t half[8 + 9]; \
213 uint8_t * const halfH = ((uint8_t*)half) + 64; \
214 uint8_t * const halfHV = ((uint8_t*)half); \
215 ff_put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(halfH, src, 8, \
216 stride, 9); \
217 ff_put ## RND ## pixels8_l2_ ## MMX(halfH, src + 1, halfH, 8, \
218 stride, 9); \
219 ff_put ## RND ## mpeg4_qpel8_v_lowpass_ ## MMX(halfHV, halfH, 8, 8);\
220 ff_ ## OPNAME ## pixels8_l2_ ## MMX(dst, halfH, halfHV, \
221 stride, 8, 8); \
222 } \
223 \
224 static void OPNAME ## qpel8_mc13_ ## MMX(uint8_t *dst, uint8_t *src, \
225 ptrdiff_t stride) \
226 { \
227 uint64_t half[8 + 9]; \
228 uint8_t * const halfH = ((uint8_t*)half) + 64; \
229 uint8_t * const halfHV = ((uint8_t*)half); \
230 ff_put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(halfH, src, 8, \
231 stride, 9); \
232 ff_put ## RND ## pixels8_l2_ ## MMX(halfH, src, halfH, 8, \
233 stride, 9); \
234 ff_put ## RND ## mpeg4_qpel8_v_lowpass_ ## MMX(halfHV, halfH, 8, 8);\
235 ff_ ## OPNAME ## pixels8_l2_ ## MMX(dst, halfH + 8, halfHV, \
236 stride, 8, 8); \
237 } \
238 \
239 static void OPNAME ## qpel8_mc33_ ## MMX(uint8_t *dst, uint8_t *src, \
240 ptrdiff_t stride) \
241 { \
242 uint64_t half[8 + 9]; \
243 uint8_t * const halfH = ((uint8_t*)half) + 64; \
244 uint8_t * const halfHV = ((uint8_t*)half); \
245 ff_put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(halfH, src, 8, \
246 stride, 9); \
247 ff_put ## RND ## pixels8_l2_ ## MMX(halfH, src + 1, halfH, 8, \
248 stride, 9); \
249 ff_put ## RND ## mpeg4_qpel8_v_lowpass_ ## MMX(halfHV, halfH, 8, 8);\
250 ff_ ## OPNAME ## pixels8_l2_ ## MMX(dst, halfH + 8, halfHV, \
251 stride, 8, 8); \
252 } \
253 \
254 static void OPNAME ## qpel8_mc21_ ## MMX(uint8_t *dst, uint8_t *src, \
255 ptrdiff_t stride) \
256 { \
257 uint64_t half[8 + 9]; \
258 uint8_t * const halfH = ((uint8_t*)half) + 64; \
259 uint8_t * const halfHV = ((uint8_t*)half); \
260 ff_put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(halfH, src, 8, \
261 stride, 9); \
262 ff_put ## RND ## mpeg4_qpel8_v_lowpass_ ## MMX(halfHV, halfH, 8, 8);\
263 ff_ ## OPNAME ## pixels8_l2_ ## MMX(dst, halfH, halfHV, \
264 stride, 8, 8); \
265 } \
266 \
267 static void OPNAME ## qpel8_mc23_ ## MMX(uint8_t *dst, uint8_t *src, \
268 ptrdiff_t stride) \
269 { \
270 uint64_t half[8 + 9]; \
271 uint8_t * const halfH = ((uint8_t*)half) + 64; \
272 uint8_t * const halfHV = ((uint8_t*)half); \
273 ff_put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(halfH, src, 8, \
274 stride, 9); \
275 ff_put ## RND ## mpeg4_qpel8_v_lowpass_ ## MMX(halfHV, halfH, 8, 8);\
276 ff_ ## OPNAME ## pixels8_l2_ ## MMX(dst, halfH + 8, halfHV, \
277 stride, 8, 8); \
278 } \
279 \
280 static void OPNAME ## qpel8_mc12_ ## MMX(uint8_t *dst, uint8_t *src, \
281 ptrdiff_t stride) \
282 { \
283 uint64_t half[8 + 9]; \
284 uint8_t * const halfH = ((uint8_t*)half); \
285 ff_put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(halfH, src, 8, \
286 stride, 9); \
287 ff_put ## RND ## pixels8_l2_ ## MMX(halfH, src, halfH, \
288 8, stride, 9); \
289 ff_ ## OPNAME ## mpeg4_qpel8_v_lowpass_ ## MMX(dst, halfH, \
290 stride, 8); \
291 } \
292 \
293 static void OPNAME ## qpel8_mc32_ ## MMX(uint8_t *dst, uint8_t *src, \
294 ptrdiff_t stride) \
295 { \
296 uint64_t half[8 + 9]; \
297 uint8_t * const halfH = ((uint8_t*)half); \
298 ff_put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(halfH, src, 8, \
299 stride, 9); \
300 ff_put ## RND ## pixels8_l2_ ## MMX(halfH, src + 1, halfH, 8, \
301 stride, 9); \
302 ff_ ## OPNAME ## mpeg4_qpel8_v_lowpass_ ## MMX(dst, halfH, \
303 stride, 8); \
304 } \
305 \
306 static void OPNAME ## qpel8_mc22_ ## MMX(uint8_t *dst, uint8_t *src, \
307 ptrdiff_t stride) \
308 { \
309 uint64_t half[9]; \
310 uint8_t * const halfH = ((uint8_t*)half); \
311 ff_put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(halfH, src, 8, \
312 stride, 9); \
313 ff_ ## OPNAME ## mpeg4_qpel8_v_lowpass_ ## MMX(dst, halfH, \
314 stride, 8); \
315 } \
316 \
317 static void OPNAME ## qpel16_mc00_ ## MMX (uint8_t *dst, uint8_t *src, \
318 ptrdiff_t stride) \
319 { \
320 ff_ ## OPNAME ## pixels16_ ## MMX(dst, src, stride, 16); \
321 } \
322 \
323 static void OPNAME ## qpel16_mc10_ ## MMX(uint8_t *dst, uint8_t *src, \
324 ptrdiff_t stride) \
325 { \
326 uint64_t temp[32]; \
327 uint8_t * const half = (uint8_t*)temp; \
328 ff_put ## RND ## mpeg4_qpel16_h_lowpass_ ## MMX(half, src, 16, \
329 stride, 16); \
330 ff_ ## OPNAME ## pixels16_l2_ ## MMX(dst, src, half, stride, \
331 stride, 16); \
332 } \
333 \
334 static void OPNAME ## qpel16_mc20_ ## MMX(uint8_t *dst, uint8_t *src, \
335 ptrdiff_t stride) \
336 { \
337 ff_ ## OPNAME ## mpeg4_qpel16_h_lowpass_ ## MMX(dst, src, \
338 stride, stride, 16);\
339 } \
340 \
341 static void OPNAME ## qpel16_mc30_ ## MMX(uint8_t *dst, uint8_t *src, \
342 ptrdiff_t stride) \
343 { \
344 uint64_t temp[32]; \
345 uint8_t * const half = (uint8_t*)temp; \
346 ff_put ## RND ## mpeg4_qpel16_h_lowpass_ ## MMX(half, src, 16, \
347 stride, 16); \
348 ff_ ## OPNAME ## pixels16_l2_ ## MMX(dst, src + 1, half, \
349 stride, stride, 16); \
350 } \
351 \
352 static void OPNAME ## qpel16_mc01_ ## MMX(uint8_t *dst, uint8_t *src, \
353 ptrdiff_t stride) \
354 { \
355 uint64_t temp[32]; \
356 uint8_t * const half = (uint8_t*)temp; \
357 ff_put ## RND ## mpeg4_qpel16_v_lowpass_ ## MMX(half, src, 16, \
358 stride); \
359 ff_ ## OPNAME ## pixels16_l2_ ## MMX(dst, src, half, stride, \
360 stride, 16); \
361 } \
362 \
363 static void OPNAME ## qpel16_mc02_ ## MMX(uint8_t *dst, uint8_t *src, \
364 ptrdiff_t stride) \
365 { \
366 ff_ ## OPNAME ## mpeg4_qpel16_v_lowpass_ ## MMX(dst, src, \
367 stride, stride); \
368 } \
369 \
370 static void OPNAME ## qpel16_mc03_ ## MMX(uint8_t *dst, uint8_t *src, \
371 ptrdiff_t stride) \
372 { \
373 uint64_t temp[32]; \
374 uint8_t * const half = (uint8_t*)temp; \
375 ff_put ## RND ## mpeg4_qpel16_v_lowpass_ ## MMX(half, src, 16, \
376 stride); \
377 ff_ ## OPNAME ## pixels16_l2_ ## MMX(dst, src+stride, half, \
378 stride, stride, 16); \
379 } \
380 \
381 static void OPNAME ## qpel16_mc11_ ## MMX(uint8_t *dst, uint8_t *src, \
382 ptrdiff_t stride) \
383 { \
384 uint64_t half[16 * 2 + 17 * 2]; \
385 uint8_t * const halfH = ((uint8_t*)half) + 256; \
386 uint8_t * const halfHV = ((uint8_t*)half); \
387 ff_put ## RND ## mpeg4_qpel16_h_lowpass_ ## MMX(halfH, src, 16, \
388 stride, 17); \
389 ff_put ## RND ## pixels16_l2_ ## MMX(halfH, src, halfH, 16, \
390 stride, 17); \
391 ff_put ## RND ## mpeg4_qpel16_v_lowpass_ ## MMX(halfHV, halfH, \
392 16, 16); \
393 ff_ ## OPNAME ## pixels16_l2_ ## MMX(dst, halfH, halfHV, \
394 stride, 16, 16); \
395 } \
396 \
397 static void OPNAME ## qpel16_mc31_ ## MMX(uint8_t *dst, uint8_t *src, \
398 ptrdiff_t stride) \
399 { \
400 uint64_t half[16 * 2 + 17 * 2]; \
401 uint8_t * const halfH = ((uint8_t*)half) + 256; \
402 uint8_t * const halfHV = ((uint8_t*)half); \
403 ff_put ## RND ## mpeg4_qpel16_h_lowpass_ ## MMX(halfH, src, 16, \
404 stride, 17); \
405 ff_put ## RND ## pixels16_l2_ ## MMX(halfH, src + 1, halfH, 16, \
406 stride, 17); \
407 ff_put ## RND ## mpeg4_qpel16_v_lowpass_ ## MMX(halfHV, halfH, \
408 16, 16); \
409 ff_ ## OPNAME ## pixels16_l2_ ## MMX(dst, halfH, halfHV, \
410 stride, 16, 16); \
411 } \
412 \
413 static void OPNAME ## qpel16_mc13_ ## MMX(uint8_t *dst, uint8_t *src, \
414 ptrdiff_t stride) \
415 { \
416 uint64_t half[16 * 2 + 17 * 2]; \
417 uint8_t * const halfH = ((uint8_t*)half) + 256; \
418 uint8_t * const halfHV = ((uint8_t*)half); \
419 ff_put ## RND ## mpeg4_qpel16_h_lowpass_ ## MMX(halfH, src, 16, \
420 stride, 17); \
421 ff_put ## RND ## pixels16_l2_ ## MMX(halfH, src, halfH, 16, \
422 stride, 17); \
423 ff_put ## RND ## mpeg4_qpel16_v_lowpass_ ## MMX(halfHV, halfH, \
424 16, 16); \
425 ff_ ## OPNAME ## pixels16_l2_ ## MMX(dst, halfH + 16, halfHV, \
426 stride, 16, 16); \
427 } \
428 \
429 static void OPNAME ## qpel16_mc33_ ## MMX(uint8_t *dst, uint8_t *src, \
430 ptrdiff_t stride) \
431 { \
432 uint64_t half[16 * 2 + 17 * 2]; \
433 uint8_t * const halfH = ((uint8_t*)half) + 256; \
434 uint8_t * const halfHV = ((uint8_t*)half); \
435 ff_put ## RND ## mpeg4_qpel16_h_lowpass_ ## MMX(halfH, src, 16, \
436 stride, 17); \
437 ff_put ## RND ## pixels16_l2_ ## MMX(halfH, src + 1, halfH, 16, \
438 stride, 17); \
439 ff_put ## RND ## mpeg4_qpel16_v_lowpass_ ## MMX(halfHV, halfH, \
440 16, 16); \
441 ff_ ## OPNAME ## pixels16_l2_ ## MMX(dst, halfH + 16, halfHV, \
442 stride, 16, 16); \
443 } \
444 \
445 static void OPNAME ## qpel16_mc21_ ## MMX(uint8_t *dst, uint8_t *src, \
446 ptrdiff_t stride) \
447 { \
448 uint64_t half[16 * 2 + 17 * 2]; \
449 uint8_t * const halfH = ((uint8_t*)half) + 256; \
450 uint8_t * const halfHV = ((uint8_t*)half); \
451 ff_put ## RND ## mpeg4_qpel16_h_lowpass_ ## MMX(halfH, src, 16, \
452 stride, 17); \
453 ff_put ## RND ## mpeg4_qpel16_v_lowpass_ ## MMX(halfHV, halfH, \
454 16, 16); \
455 ff_ ## OPNAME ## pixels16_l2_ ## MMX(dst, halfH, halfHV, \
456 stride, 16, 16); \
457 } \
458 \
459 static void OPNAME ## qpel16_mc23_ ## MMX(uint8_t *dst, uint8_t *src, \
460 ptrdiff_t stride) \
461 { \
462 uint64_t half[16 * 2 + 17 * 2]; \
463 uint8_t * const halfH = ((uint8_t*)half) + 256; \
464 uint8_t * const halfHV = ((uint8_t*)half); \
465 ff_put ## RND ## mpeg4_qpel16_h_lowpass_ ## MMX(halfH, src, 16, \
466 stride, 17); \
467 ff_put ## RND ## mpeg4_qpel16_v_lowpass_ ## MMX(halfHV, halfH, \
468 16, 16); \
469 ff_ ## OPNAME ## pixels16_l2_ ## MMX(dst, halfH + 16, halfHV, \
470 stride, 16, 16); \
471 } \
472 \
473 static void OPNAME ## qpel16_mc12_ ## MMX(uint8_t *dst, uint8_t *src, \
474 ptrdiff_t stride) \
475 { \
476 uint64_t half[17 * 2]; \
477 uint8_t * const halfH = ((uint8_t*)half); \
478 ff_put ## RND ## mpeg4_qpel16_h_lowpass_ ## MMX(halfH, src, 16, \
479 stride, 17); \
480 ff_put ## RND ## pixels16_l2_ ## MMX(halfH, src, halfH, 16, \
481 stride, 17); \
482 ff_ ## OPNAME ## mpeg4_qpel16_v_lowpass_ ## MMX(dst, halfH, \
483 stride, 16); \
484 } \
485 \
486 static void OPNAME ## qpel16_mc32_ ## MMX(uint8_t *dst, uint8_t *src, \
487 ptrdiff_t stride) \
488 { \
489 uint64_t half[17 * 2]; \
490 uint8_t * const halfH = ((uint8_t*)half); \
491 ff_put ## RND ## mpeg4_qpel16_h_lowpass_ ## MMX(halfH, src, 16, \
492 stride, 17); \
493 ff_put ## RND ## pixels16_l2_ ## MMX(halfH, src + 1, halfH, 16, \
494 stride, 17); \
495 ff_ ## OPNAME ## mpeg4_qpel16_v_lowpass_ ## MMX(dst, halfH, \
496 stride, 16); \
497 } \
498 \
499 static void OPNAME ## qpel16_mc22_ ## MMX(uint8_t *dst, uint8_t *src, \
500 ptrdiff_t stride) \
501 { \
502 uint64_t half[17 * 2]; \
503 uint8_t * const halfH = ((uint8_t*)half); \
504 ff_put ## RND ## mpeg4_qpel16_h_lowpass_ ## MMX(halfH, src, 16, \
505 stride, 17); \
506 ff_ ## OPNAME ## mpeg4_qpel16_v_lowpass_ ## MMX(dst, halfH, \
507 stride, 16); \
508 }
509
510 QPEL_OP(put_, _, mmxext)
511 QPEL_OP(avg_, _, mmxext)
512 QPEL_OP(put_no_rnd_, _no_rnd_, mmxext)
513 #endif /* HAVE_YASM */
514
515 #define SET_QPEL_FUNCS(PFX, IDX, SIZE, CPU, PREFIX) \
516 do { \
517 c->PFX ## _pixels_tab[IDX][ 0] = PREFIX ## PFX ## SIZE ## _mc00_ ## CPU; \
518 c->PFX ## _pixels_tab[IDX][ 1] = PREFIX ## PFX ## SIZE ## _mc10_ ## CPU; \
519 c->PFX ## _pixels_tab[IDX][ 2] = PREFIX ## PFX ## SIZE ## _mc20_ ## CPU; \
520 c->PFX ## _pixels_tab[IDX][ 3] = PREFIX ## PFX ## SIZE ## _mc30_ ## CPU; \
521 c->PFX ## _pixels_tab[IDX][ 4] = PREFIX ## PFX ## SIZE ## _mc01_ ## CPU; \
522 c->PFX ## _pixels_tab[IDX][ 5] = PREFIX ## PFX ## SIZE ## _mc11_ ## CPU; \
523 c->PFX ## _pixels_tab[IDX][ 6] = PREFIX ## PFX ## SIZE ## _mc21_ ## CPU; \
524 c->PFX ## _pixels_tab[IDX][ 7] = PREFIX ## PFX ## SIZE ## _mc31_ ## CPU; \
525 c->PFX ## _pixels_tab[IDX][ 8] = PREFIX ## PFX ## SIZE ## _mc02_ ## CPU; \
526 c->PFX ## _pixels_tab[IDX][ 9] = PREFIX ## PFX ## SIZE ## _mc12_ ## CPU; \
527 c->PFX ## _pixels_tab[IDX][10] = PREFIX ## PFX ## SIZE ## _mc22_ ## CPU; \
528 c->PFX ## _pixels_tab[IDX][11] = PREFIX ## PFX ## SIZE ## _mc32_ ## CPU; \
529 c->PFX ## _pixels_tab[IDX][12] = PREFIX ## PFX ## SIZE ## _mc03_ ## CPU; \
530 c->PFX ## _pixels_tab[IDX][13] = PREFIX ## PFX ## SIZE ## _mc13_ ## CPU; \
531 c->PFX ## _pixels_tab[IDX][14] = PREFIX ## PFX ## SIZE ## _mc23_ ## CPU; \
532 c->PFX ## _pixels_tab[IDX][15] = PREFIX ## PFX ## SIZE ## _mc33_ ## CPU; \
533 } while (0)
534
537 {
538 #if HAVE_MMX_INLINE
540
544
545 if (!high_bit_depth) {
549 }
550
551 #if CONFIG_VIDEODSP && (ARCH_X86_32 || !HAVE_YASM)
553 #endif
554
556 #endif /* HAVE_MMX_INLINE */
557
558 #if HAVE_MMX_EXTERNAL
559 if (CONFIG_H263_DECODER || CONFIG_H263_ENCODER) {
562 }
563
565 #endif /* HAVE_MMX_EXTERNAL */
566 }
567
570 {
571 #if HAVE_MMXEXT_INLINE
573
578 }
579 #endif /* HAVE_MMXEXT_INLINE */
580
581 #if HAVE_MMXEXT_EXTERNAL
584
589
590 /* slower than cmov version on AMD */
593
596
599 } else {
601 }
602 #endif /* HAVE_MMXEXT_EXTERNAL */
603 }
604
607 {
608 #if HAVE_SSE_INLINE
610
611 if (!high_bit_depth) {
613 /* XvMCCreateBlocks() may not allocate 16-byte aligned blocks */
616 }
617 }
618
620 #endif /* HAVE_SSE_INLINE */
621
622 #if HAVE_YASM
623 #if HAVE_INLINE_ASM && CONFIG_VIDEODSP
625 #endif
626 #endif /* HAVE_YASM */
627 }
628
631 {
632 #if HAVE_SSE2_INLINE
634
640 }
641 #endif /* HAVE_SSE2_INLINE */
642
643 #if HAVE_SSE2_EXTERNAL
648 } else {
650 }
655 }
657 #endif /* HAVE_SSE2_EXTERNAL */
658 }
659
662 {
663 #if HAVE_SSSE3_EXTERNAL
667
670 else
675 #endif /* HAVE_SSSE3_EXTERNAL */
676 }
677
680 {
681 #if HAVE_SSE4_EXTERNAL
683 #endif /* HAVE_SSE4_EXTERNAL */
684 }
685
687 {
689
690 #if HAVE_7REGS && HAVE_INLINE_ASM
693 #endif
694
696 #if HAVE_INLINE_ASM
698
709 }
710 }
711 #endif /* HAVE_INLINE_ASM */
712
714 }
715
718
721
724
727
730
731 if (CONFIG_ENCODERS)
733 }