[cvs] / xvidcore / src / motion / x86_asm / sad_mmx.asm Repository:
ViewVC logotype

Diff of /xvidcore/src/motion/x86_asm/sad_mmx.asm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.12, Mon Mar 22 22:36:24 2004 UTC revision 1.17, Sat Feb 19 23:20:27 2005 UTC
# Line 28  Line 28 
28    
29  %macro cglobal 1  %macro cglobal 1
30          %ifdef PREFIX          %ifdef PREFIX
31                    %ifdef MARK_FUNCS
32                            global _%1:function %1.endfunc-%1
33                            %define %1 _%1:function %1.endfunc-%1
34                    %else
35                  global _%1                  global _%1
36                  %define %1 _%1                  %define %1 _%1
37                    %endif
38            %else
39                    %ifdef MARK_FUNCS
40                            global %1:function %1.endfunc-%1
41          %else          %else
42                  global %1                  global %1
43          %endif          %endif
44            %endif
45  %endmacro  %endmacro
46    
47  ;=============================================================================  ;=============================================================================
# Line 40  Line 49 
49  ;=============================================================================  ;=============================================================================
50    
51  %ifdef FORMAT_COFF  %ifdef FORMAT_COFF
52  SECTION .rodata data  SECTION .rodata
53  %else  %else
54  SECTION .rodata data align=16  SECTION .rodata align=16
55  %endif  %endif
56    
57  ALIGN 16  ALIGN 16
# Line 65  Line 74 
74    lea eax, [eax+ecx]    lea eax, [eax+ecx]
75    movq mm5, mm2    movq mm5, mm2
76    psubusb mm2, mm3    psubusb mm2, mm3
   lea edx, [edx+ecx]  
77    
78    psubusb mm1, mm4    psubusb mm1, mm4
   por mm0, mm1  
79    psubusb mm3, mm5    psubusb mm3, mm5
80      por mm0, mm1
81    por mm2, mm3    por mm2, mm3
82    
83    movq mm1, mm0    movq mm1, mm0
   movq mm3, mm2  
   
84    punpcklbw mm0,mm7    punpcklbw mm0,mm7
85      movq mm3, mm2
86    punpckhbw mm1,mm7    punpckhbw mm1,mm7
87      lea edx, [edx+ecx]
88    punpcklbw mm2,mm7    punpcklbw mm2,mm7
   punpckhbw mm3,mm7  
   
89    paddusw mm0, mm1    paddusw mm0, mm1
90      punpckhbw mm3,mm7
91    paddusw mm6, mm0    paddusw mm6, mm0
92    paddusw mm2, mm3    paddusw mm2, mm3
93    paddusw mm6, mm2    paddusw mm6, mm2
94    
95  %endmacro  %endmacro
96    
97  %macro SAD_8x8_MMX      0  %macro SAD_8x8_MMX      0
# Line 102  Line 110 
110    psubusb mm2, mm3    psubusb mm2, mm3
111    
112    psubusb mm1, mm4    psubusb mm1, mm4
   por mm0, mm1  
113    psubusb mm3, mm5    psubusb mm3, mm5
114      por mm0, mm1
115    por mm2, mm3    por mm2, mm3
116    
117    movq mm1,mm0    movq mm1,mm0
   movq mm3,mm2  
   
118    punpcklbw mm0,mm7    punpcklbw mm0,mm7
119      movq mm3,mm2
120    punpckhbw mm1,mm7    punpckhbw mm1,mm7
121    punpcklbw mm2,mm7    punpcklbw mm2,mm7
   punpckhbw mm3,mm7  
   
122    paddusw mm0,mm1    paddusw mm0,mm1
123      punpckhbw mm3,mm7
124    paddusw mm6,mm0    paddusw mm6,mm0
125    paddusw mm2,mm3    paddusw mm2,mm3
126    paddusw mm6,mm2    paddusw mm6,mm2
127  %endmacro  %endmacro
128    
129    
130  %macro SADV_16x16_MMX 0  %macro SADV_16x16_MMX 0
131    movq mm0, [eax]    movq mm0, [eax]
132    movq mm1, [edx]    movq mm1, [edx]
133    
134    movq mm2, [eax+8]    movq mm2, [eax+8]
   movq mm3, [edx+8]  
   
135    movq mm4, mm0    movq mm4, mm0
136      movq mm3, [edx+8]
137    psubusb mm0, mm1    psubusb mm0, mm1
138    
139    psubusb mm1, mm4    psubusb mm1, mm4
   por mm0, mm1  
140    lea eax,[eax+ecx]    lea eax,[eax+ecx]
141      por mm0, mm1
142    
143    movq mm4, mm2    movq mm4, mm2
144    psubusb mm2, mm3    psubusb mm2, mm3
145    
146    psubusb mm3, mm4    psubusb mm3, mm4
147    por mm2, mm3    por mm2, mm3
   lea edx,[edx+ecx]  
148    
149    movq mm1,mm0    movq mm1,mm0
   movq mm3,mm2  
   
150    punpcklbw mm0,mm7    punpcklbw mm0,mm7
151      movq mm3,mm2
152    punpckhbw mm1,mm7    punpckhbw mm1,mm7
153    punpcklbw mm2,mm7    punpcklbw mm2,mm7
   punpckhbw mm3,mm7  
   
154    paddusw mm0,mm1    paddusw mm0,mm1
155    paddusw mm2,mm3    punpckhbw mm3,mm7
   
156    paddusw mm5, mm0    paddusw mm5, mm0
157      paddusw mm2,mm3
158      lea edx,[edx+ecx]
159    paddusw mm6, mm2    paddusw mm6, mm2
160  %endmacro  %endmacro
161    
# Line 211  Line 214 
214    movq mm2, [eax+8]    movq mm2, [eax+8]
215    lea eax, [eax+ecx]    lea eax, [eax+ecx]
216    movq mm1, mm0    movq mm1, mm0
   movq mm3, mm2  
217    punpcklbw mm0, mm7    punpcklbw mm0, mm7
218    punpcklbw mm2, mm7    movq mm3, mm2
219    punpckhbw mm1, mm7    punpckhbw mm1, mm7
   punpckhbw mm3, mm7  
220    paddw mm5, mm0    paddw mm5, mm0
221      punpcklbw mm2, mm7
222    paddw mm6, mm1    paddw mm6, mm1
223      punpckhbw mm3, mm7
224    paddw mm5, mm2    paddw mm5, mm2
225    paddw mm6, mm3    paddw mm6, mm3
226  %endmacro  %endmacro
# Line 270  Line 273 
273  cglobal sad8bi_mmx  cglobal sad8bi_mmx
274  cglobal dev16_mmx  cglobal dev16_mmx
275  cglobal sse8_16bit_mmx  cglobal sse8_16bit_mmx
276    cglobal sse8_8bit_mmx
277    
278  ;-----------------------------------------------------------------------------  ;-----------------------------------------------------------------------------
279  ;  ;
# Line 318  Line 322 
322    movd eax, mm6    movd eax, mm6
323    
324    ret    ret
325    .endfunc
326    
327  ;-----------------------------------------------------------------------------  ;-----------------------------------------------------------------------------
328  ;  ;
# Line 350  Line 355 
355    movd eax, mm6    movd eax, mm6
356    
357    ret    ret
358    .endfunc
359    
360  ;-----------------------------------------------------------------------------  ;-----------------------------------------------------------------------------
361  ;  ;
# Line 440  Line 446 
446    pop ebx    pop ebx
447    
448    ret    ret
449    .endfunc
450    
451  ;-----------------------------------------------------------------------------  ;-----------------------------------------------------------------------------
452  ;  ;
# Line 504  Line 511 
511    pop ebx    pop ebx
512    
513    ret    ret
514    .endfunc
515    
516  ;-----------------------------------------------------------------------------  ;-----------------------------------------------------------------------------
517  ;  ;
# Line 542  Line 550 
550    movd eax, mm6    movd eax, mm6
551    pop ebx    pop ebx
552    ret    ret
553    .endfunc
554    
555  ;-----------------------------------------------------------------------------  ;-----------------------------------------------------------------------------
556  ;  ;
# Line 621  Line 630 
630    movd eax, mm6    movd eax, mm6
631    
632    ret    ret
633    .endfunc
634    
635  ;-----------------------------------------------------------------------------  ;-----------------------------------------------------------------------------
636  ;  ;
# Line 630  Line 640 
640  ;  ;
641  ;-----------------------------------------------------------------------------  ;-----------------------------------------------------------------------------
642    
643  %macro ROW_SSE_MMX 2  %macro ROW_SSE_16bit_MMX 2
644    movq mm0, [%1]    movq mm0, [%1]
645    movq mm1, [%1+8]    movq mm1, [%1+8]
646    psubw mm0, [%2]    psubw mm0, [%2]
# Line 654  Line 664 
664    pxor mm2, mm2    pxor mm2, mm2
665    
666    ;; Let's go    ;; Let's go
667    ROW_SSE_MMX esi, edi  %rep 8
668    lea esi, [esi+edx]    ROW_SSE_16bit_MMX esi, edi
   lea edi, [edi+edx]  
   ROW_SSE_MMX esi, edi  
   lea esi, [esi+edx]  
   lea edi, [edi+edx]  
   ROW_SSE_MMX esi, edi  
   lea esi, [esi+edx]  
   lea edi, [edi+edx]  
   ROW_SSE_MMX esi, edi  
   lea esi, [esi+edx]  
   lea edi, [edi+edx]  
   ROW_SSE_MMX esi, edi  
   lea esi, [esi+edx]  
   lea edi, [edi+edx]  
   ROW_SSE_MMX esi, edi  
   lea esi, [esi+edx]  
   lea edi, [edi+edx]  
   ROW_SSE_MMX esi, edi  
   lea esi, [esi+edx]  
   lea edi, [edi+edx]  
   ROW_SSE_MMX esi, edi  
669    lea esi, [esi+edx]    lea esi, [esi+edx]
670    lea edi, [edi+edx]    lea edi, [edi+edx]
671    %endrep
672    
673    ;; Finish adding each dword of the accumulator    ;; Finish adding each dword of the accumulator
674    movq mm3, mm2    movq mm3, mm2
# Line 689  Line 680 
680    pop edi    pop edi
681    pop esi    pop esi
682    ret    ret
683    .endfunc
684    
685    ;-----------------------------------------------------------------------------
686    ;
687    ; uint32_t sse8_8bit_mmx(const int8_t *b1,
688    ;                        const int8_t *b2,
689    ;                        const uint32_t stride);
690    ;
691    ;-----------------------------------------------------------------------------
692    
693    %macro ROW_SSE_8bit_MMX 2
694      movq mm0, [%1] ; load a row
695      movq mm2, [%2] ; load a row
696    
697      movq mm1, mm0  ; copy row
698      movq mm3, mm2  ; copy row
699    
700      punpcklbw mm0, mm7 ; turn the 4low elements into 16bit
701      punpckhbw mm1, mm7 ; turn the 4high elements into 16bit
702    
703      punpcklbw mm2, mm7 ; turn the 4low elements into 16bit
704      punpckhbw mm3, mm7 ; turn the 4high elements into 16bit
705    
706      psubw mm0, mm2 ; low  part of src-dst
707      psubw mm1, mm3 ; high part of src-dst
708    
709      pmaddwd mm0, mm0 ; compute the square sum
710      pmaddwd mm1, mm1 ; compute the square sum
711    
712      paddd mm6, mm0 ; add to the accumulator
713      paddd mm6, mm1 ; add to the accumulator
714    %endmacro
715    
716    sse8_8bit_mmx:
717      push esi
718      push edi
719    
720      ;; Load the function params
721      mov esi, [esp+8+4]
722      mov edi, [esp+8+8]
723      mov edx, [esp+8+12]
724    
725      ;; Reset the sse accumulator
726      pxor mm6, mm6
727    
728      ;; Used to interleave 8bit data with 0x00 values
729      pxor mm7, mm7
730    
731      ;; Let's go
732    %rep 8
733      ROW_SSE_8bit_MMX esi, edi
734      lea esi, [esi+edx]
735      lea edi, [edi+edx]
736    %endrep
737    
738      ;; Finish adding each dword of the accumulator
739      movq mm7, mm6
740      psrlq mm6, 32
741      paddd mm6, mm7
742      movd eax, mm6
743    
744      ;; All done
745      pop edi
746      pop esi
747      ret
748    .endfunc
749    

Legend:
Removed from v.1.12  
changed lines
  Added in v.1.17

No admin address has been configured
ViewVC Help
Powered by ViewVC 1.0.4