27 |
%macro cglobal 1 |
%macro cglobal 1 |
28 |
%ifdef PREFIX |
%ifdef PREFIX |
29 |
%ifdef MARK_FUNCS |
%ifdef MARK_FUNCS |
30 |
global _%1:function |
global _%1:function %1.endfunc-%1 |
31 |
%define %1 _%1:function |
%define %1 _%1:function %1.endfunc-%1 |
32 |
%else |
%else |
33 |
global _%1 |
global _%1 |
34 |
%define %1 _%1 |
%define %1 _%1 |
35 |
%endif |
%endif |
36 |
%else |
%else |
37 |
%ifdef MARK_FUNCS |
%ifdef MARK_FUNCS |
38 |
global %1:function |
global %1:function %1.endfunc-%1 |
39 |
%else |
%else |
40 |
global %1 |
global %1 |
41 |
%endif |
%endif |
105 |
cglobal interpolate8x8_halfpel_v_mmx |
cglobal interpolate8x8_halfpel_v_mmx |
106 |
cglobal interpolate8x8_halfpel_hv_mmx |
cglobal interpolate8x8_halfpel_hv_mmx |
107 |
|
|
108 |
|
cglobal interpolate8x4_halfpel_h_mmx |
109 |
|
cglobal interpolate8x4_halfpel_v_mmx |
110 |
|
cglobal interpolate8x4_halfpel_hv_mmx |
111 |
|
|
112 |
cglobal interpolate8x8_avg4_mmx |
cglobal interpolate8x8_avg4_mmx |
113 |
cglobal interpolate8x8_avg2_mmx |
cglobal interpolate8x8_avg2_mmx |
114 |
|
|
189 |
pop esi |
pop esi |
190 |
|
|
191 |
ret |
ret |
192 |
|
.endfunc |
193 |
|
|
194 |
|
|
195 |
;----------------------------------------------------------------------------- |
;----------------------------------------------------------------------------- |
249 |
pop esi |
pop esi |
250 |
|
|
251 |
ret |
ret |
252 |
|
.endfunc |
253 |
|
|
254 |
|
|
255 |
;----------------------------------------------------------------------------- |
;----------------------------------------------------------------------------- |
341 |
pop esi |
pop esi |
342 |
|
|
343 |
ret |
ret |
344 |
|
.endfunc |
345 |
|
|
346 |
|
;----------------------------------------------------------------------------- |
347 |
|
; |
348 |
|
; void interpolate8x4_halfpel_h_mmx(uint8_t * const dst, |
349 |
|
; const uint8_t * const src, |
350 |
|
; const uint32_t stride, |
351 |
|
; const uint32_t rounding); |
352 |
|
; |
353 |
|
;----------------------------------------------------------------------------- |
354 |
|
|
355 |
|
ALIGN 16 |
356 |
|
interpolate8x4_halfpel_h_mmx: |
357 |
|
|
358 |
|
push esi |
359 |
|
push edi |
360 |
|
mov eax, [esp + 8 + 16] ; rounding |
361 |
|
|
362 |
|
movq mm7, [rounding1_mmx + eax * 8] |
363 |
|
|
364 |
|
mov edi, [esp + 8 + 4] ; dst |
365 |
|
mov esi, [esp + 8 + 8] ; src |
366 |
|
mov edx, [esp + 8 + 12] ; stride |
367 |
|
|
368 |
|
pxor mm6, mm6 ; zero |
369 |
|
|
370 |
|
COPY_H_MMX |
371 |
|
COPY_H_MMX |
372 |
|
COPY_H_MMX |
373 |
|
COPY_H_MMX |
374 |
|
|
375 |
|
pop edi |
376 |
|
pop esi |
377 |
|
|
378 |
|
ret |
379 |
|
.endfunc |
380 |
|
|
381 |
|
|
382 |
|
;----------------------------------------------------------------------------- |
383 |
|
; |
384 |
|
; void interpolate8x4_halfpel_v_mmx(uint8_t * const dst, |
385 |
|
; const uint8_t * const src, |
386 |
|
; const uint32_t stride, |
387 |
|
; const uint32_t rounding); |
388 |
|
; |
389 |
|
;----------------------------------------------------------------------------- |
390 |
|
|
391 |
|
ALIGN 16 |
392 |
|
interpolate8x4_halfpel_v_mmx: |
393 |
|
|
394 |
|
push esi |
395 |
|
push edi |
396 |
|
|
397 |
|
mov eax, [esp + 8 + 16] ; rounding |
398 |
|
|
399 |
|
movq mm7, [rounding1_mmx + eax * 8] |
400 |
|
|
401 |
|
mov edi, [esp + 8 + 4] ; dst |
402 |
|
mov esi, [esp + 8 + 8] ; src |
403 |
|
mov edx, [esp + 8 + 12] ; stride |
404 |
|
|
405 |
|
pxor mm6, mm6 ; zero |
406 |
|
|
407 |
|
|
408 |
|
COPY_V_MMX |
409 |
|
COPY_V_MMX |
410 |
|
COPY_V_MMX |
411 |
|
COPY_V_MMX |
412 |
|
|
413 |
|
pop edi |
414 |
|
pop esi |
415 |
|
|
416 |
|
ret |
417 |
|
.endfunc |
418 |
|
|
419 |
|
|
420 |
|
;----------------------------------------------------------------------------- |
421 |
|
; |
422 |
|
; void interpolate8x4_halfpel_hv_mmx(uint8_t * const dst, |
423 |
|
; const uint8_t * const src, |
424 |
|
; const uint32_t stride, |
425 |
|
; const uint32_t rounding); |
426 |
|
; |
427 |
|
; |
428 |
|
;----------------------------------------------------------------------------- |
429 |
|
|
430 |
|
ALIGN 16 |
431 |
|
interpolate8x4_halfpel_hv_mmx: |
432 |
|
|
433 |
|
push esi |
434 |
|
push edi |
435 |
|
|
436 |
|
mov eax, [esp + 8 + 16] ; rounding |
437 |
|
|
438 |
|
movq mm7, [rounding2_mmx + eax * 8] |
439 |
|
|
440 |
|
mov edi, [esp + 8 + 4] ; dst |
441 |
|
mov esi, [esp + 8 + 8] ; src |
442 |
|
|
443 |
|
mov eax, 8 |
444 |
|
|
445 |
|
pxor mm6, mm6 ; zero |
446 |
|
|
447 |
|
mov edx, [esp + 8 + 12] ; stride |
448 |
|
|
449 |
|
COPY_HV_MMX |
450 |
|
COPY_HV_MMX |
451 |
|
COPY_HV_MMX |
452 |
|
COPY_HV_MMX |
453 |
|
|
454 |
|
pop edi |
455 |
|
pop esi |
456 |
|
|
457 |
|
ret |
458 |
|
.endfunc |
459 |
|
|
460 |
;----------------------------------------------------------------------------- |
;----------------------------------------------------------------------------- |
461 |
; |
; |
630 |
|
|
631 |
pop ebx |
pop ebx |
632 |
ret |
ret |
633 |
|
.endfunc |
634 |
|
|
635 |
|
|
636 |
;----------------------------------------------------------------------------- |
;----------------------------------------------------------------------------- |
819 |
pop edi |
pop edi |
820 |
pop ebx |
pop ebx |
821 |
ret |
ret |
822 |
|
.endfunc |
823 |
|
|
824 |
|
|
825 |
;----------------------------------------------------------------------------- |
;----------------------------------------------------------------------------- |
930 |
LOWPASS_6TAP_H_MMX |
LOWPASS_6TAP_H_MMX |
931 |
|
|
932 |
ret |
ret |
933 |
|
.endfunc |
934 |
|
|
935 |
;----------------------------------------------------------------------------- |
;----------------------------------------------------------------------------- |
936 |
; |
; |
1048 |
|
|
1049 |
pop ebx |
pop ebx |
1050 |
ret |
ret |
1051 |
|
.endfunc |
1052 |
|
|
1053 |
;=========================================================================== |
;=========================================================================== |
1054 |
; |
; |
1161 |
ADD_FF_MMX 1 |
ADD_FF_MMX 1 |
1162 |
ADD_FF_MMX 0 |
ADD_FF_MMX 0 |
1163 |
ret |
ret |
1164 |
|
.endfunc |
1165 |
|
|
1166 |
;=========================================================================== |
;=========================================================================== |
1167 |
; |
; |
1207 |
lea ecx,[ecx+edx] |
lea ecx,[ecx+edx] |
1208 |
ADD_FH_MMX |
ADD_FH_MMX |
1209 |
ret |
ret |
1210 |
|
.endfunc |
1211 |
|
|
1212 |
;=========================================================================== |
;=========================================================================== |
1213 |
; |
; |
1254 |
lea ecx,[ecx+edx] |
lea ecx,[ecx+edx] |
1255 |
ADD_HF_MMX |
ADD_HF_MMX |
1256 |
ret |
ret |
1257 |
|
.endfunc |
1258 |
|
|
1259 |
; The trick is to correct the result of 'pavgb' with some combination of the |
; The trick is to correct the result of 'pavgb' with some combination of the |
1260 |
; lsb's of the 4 input values i,j,k,l, and their intermediate 'pavgb' (s and t). |
; lsb's of the 4 input values i,j,k,l, and their intermediate 'pavgb' (s and t). |
1365 |
ADD_HH_MMX |
ADD_HH_MMX |
1366 |
|
|
1367 |
ret |
ret |
1368 |
|
.endfunc |
1369 |
|
|
1370 |
|
|
1371 |
|
%ifidn __OUTPUT_FORMAT__,elf |
1372 |
|
section ".note.GNU-stack" noalloc noexec nowrite progbits |
1373 |
|
%endif |
1374 |
|
|