[cvs] / xvidcore / src / plugins / x86_asm / plugin_ssim-a.asm Repository:
ViewVC logotype

Diff of /xvidcore/src/plugins/x86_asm/plugin_ssim-a.asm

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

revision 1.5, Mon Oct 30 22:23:05 2006 UTC revision 1.9.2.3, Wed Sep 16 17:11:39 2009 UTC
# Line 24  Line 24 
24    
25  BITS 32  BITS 32
26    
27  %macro cglobal 1  %include "nasm.inc"
         %ifdef PREFIX  
                 %ifdef MARK_FUNCS  
                         global _%1:function %1.endfunc-%1  
                         %define %1 _%1:function %1.endfunc-%1  
                 %else  
                         global _%1  
                         %define %1 _%1  
                 %endif  
         %else  
                 %ifdef MARK_FUNCS  
                         global %1:function %1.endfunc-%1  
                 %else  
                         global %1  
                 %endif  
         %endif  
 %endmacro  
28    
29  %macro ACC_ROW 2  %macro ACC_ROW 2
30          movq %1,[    ecx]          movq %1,[    TMP0]
31          movq %2,[ecx+edx]          movq %2,[TMP0+TMP1]
32          psadbw %1,mm0          psadbw %1,mm0
33          psadbw %2,mm0          psadbw %2,mm0
34          lea ecx, [ecx+2*edx]          lea TMP0, [TMP0+2*TMP1]
35          paddw  %1, %2          paddw  %1, %2
36  %endmacro  %endmacro
37    
38  %macro CONSIM_1x8_SSE2 0  %macro CONSIM_1x8_SSE2 0
39          movdqu xmm0,[ecx]          movdqu xmm0,[TMP0]
40          movdqu xmm1,[edx]          movdqu xmm1,[TMP1]
41    
42          ;unpack to words          ;unpack to words
43          punpcklbw xmm0,xmm2          punpcklbw xmm0,xmm2
# Line 72  Line 56 
56  %endmacro  %endmacro
57    
58  %macro CONSIM_1x8_MMX 0  %macro CONSIM_1x8_MMX 0
59          movq mm0,[ecx];orig          movq mm0,[TMP0];orig
60          movq mm1,[edx];comp          movq mm1,[TMP1];comp
61    
62          ;unpack low half of qw to words          ;unpack low half of qw to words
63          punpcklbw mm0,mm2          punpcklbw mm0,mm2
# Line 90  Line 74 
74          pmaddwd mm1,mm0          pmaddwd mm1,mm0
75          paddd mm7,mm1          paddd mm7,mm1
76    
77          movq mm0,[ecx];orig          movq mm0,[TMP0];orig
78          movq mm1,[edx];comp          movq mm1,[TMP1];comp
79    
80          ;unpack high half of qw to words          ;unpack high half of qw to words
81          punpckhbw mm0,mm2          punpckhbw mm0,mm2
# Line 110  Line 94 
94  %endmacro  %endmacro
95    
96  %macro CONSIM_WRITEOUT 3  %macro CONSIM_WRITEOUT 3
97          mov eax,[esp + 16];lumo          mov eax,prm4d;lumo
98          mul eax; lumo^2          mul eax; lumo^2
99          add eax, 32          add eax, 32
100          shr eax,6; 64*lum0^2          shr eax,6; 64*lum0^2
101          movd ecx,%1          movd TMP0d,%1
102          sub ecx,eax          sub TMP0d, eax
103    
104          mov edx,[esp + 24]; pdevo          mov TMP1,prm6; pdevo
105          mov [edx],ecx          mov dword [TMP1],TMP0d
106    
107          mov eax,[esp + 20];lumc          mov eax,prm5d ;lumc
108          mul eax; lumc^2          mul eax; lumc^2
109          add eax, 32          add eax, 32
110          shr eax,6; 64*lumc^2          shr eax,6; 64*lumc^2
111          movd ecx,%2          movd TMP0d,%2
112          sub ecx,eax          sub TMP0d, eax
113    
114          mov edx,[esp + 28]; pdevc          mov TMP1,prm7; pdevc
115          mov [edx],ecx          mov dword [TMP1],TMP0d
116    
117          mov eax,[esp + 16];lumo          mov eax,prm4d;lumo
118          mul dword [esp + 20]; lumo*lumc, should fit in eax          mul prm5d; lumo*lumc, should fit in _EAX
119          add eax, 32          add eax, 32
120          shr eax,6; 64*lumo*lumc          shr eax,6; 64*lumo*lumc
121          movd ecx,%3          movd TMP0d,%3
122          sub ecx,eax          sub TMP0d, eax
123    
124          mov edx,[esp + 32]; pcorr          mov TMP1,prm8; pcorr
125          mov [edx],ecx          mov dword [TMP1],TMP0d
126  %endmacro  %endmacro
127    
128    
129  SECTION .text  TEXT
130    
131  cglobal lum_8x8_mmx  cglobal lum_8x8_mmx
132  cglobal consim_sse2  cglobal consim_sse2
# Line 150  Line 134 
134    
135  ;int lum_8x8_c(uint8_t* ptr, uint32_t stride)  ;int lum_8x8_c(uint8_t* ptr, uint32_t stride)
136    
137  ALIGN 16  ALIGN SECTION_ALIGN
138  lum_8x8_mmx:  lum_8x8_mmx:
139          mov ecx, [esp + 4] ;ptr          mov TMP0, prm1 ;ptr
140          mov edx, [esp + 8];stride          mov TMP1, prm2 ;stride
141    
142          pxor mm0,mm0          pxor mm0,mm0
143    
# Line 171  Line 155 
155    
156          movd eax,mm1          movd eax,mm1
157          ret          ret
158  .endfunc  ENDFUNC
159    
160  ALIGN 16  ALIGN SECTION_ALIGN
161  consim_sse2:  consim_sse2:
162          mov ecx,[esp+4] ;ptro          PUSH_XMM6_XMM7
163          mov edx,[esp+8] ;ptrc          mov TMP0,prm1 ;ptro
164          mov eax,[esp+12];stride          mov TMP1,prm2 ;ptrc
165            mov _EAX, prm3 ;stride
166    
167          pxor xmm2,xmm2;null vektor          pxor xmm2,xmm2;null vektor
168          pxor xmm5,xmm5;devo          pxor xmm5,xmm5;devo
# Line 193  Line 178 
178          pshufd xmm7,xmm7,00000000b          pshufd xmm7,xmm7,00000000b
179    
180          CONSIM_1x8_SSE2          CONSIM_1x8_SSE2
181          add ecx,eax          add TMP0,_EAX
182          add edx,eax          add TMP1,_EAX
183          CONSIM_1x8_SSE2          CONSIM_1x8_SSE2
184          add ecx,eax          add TMP0,_EAX
185          add edx,eax          add TMP1,_EAX
186          CONSIM_1x8_SSE2          CONSIM_1x8_SSE2
187          add ecx,eax          add TMP0,_EAX
188          add edx,eax          add TMP1,_EAX
189          CONSIM_1x8_SSE2          CONSIM_1x8_SSE2
190          add ecx,eax          add TMP0,_EAX
191          add edx,eax          add TMP1,_EAX
192          CONSIM_1x8_SSE2          CONSIM_1x8_SSE2
193          add ecx,eax          add TMP0,_EAX
194          add edx,eax          add TMP1,_EAX
195          CONSIM_1x8_SSE2          CONSIM_1x8_SSE2
196          add ecx,eax          add TMP0,_EAX
197          add edx,eax          add TMP1,_EAX
198          CONSIM_1x8_SSE2          CONSIM_1x8_SSE2
199          add ecx,eax          add TMP0,_EAX
200          add edx,eax          add TMP1,_EAX
201          CONSIM_1x8_SSE2          CONSIM_1x8_SSE2
202    
203          ;accumulate xmm5-7          ;accumulate xmm5-7
# Line 232  Line 217 
217          paddd      xmm7, xmm2          paddd      xmm7, xmm2
218    
219          CONSIM_WRITEOUT xmm5,xmm6,xmm7          CONSIM_WRITEOUT xmm5,xmm6,xmm7
220    
221            POP_XMM6_XMM7
222          ret          ret
223  .endfunc  ENDFUNC
224    
225    
226    
227    
228    
229  ALIGN 16  ALIGN SECTION_ALIGN
230  consim_mmx:  consim_mmx:
231          mov ecx,[esp+4] ;ptro          mov TMP0,prm1 ;ptro
232          mov edx,[esp+8] ;ptrc          mov TMP1,prm2 ;ptrc
233          mov eax,[esp+12];stride          mov _EAX,prm3;stride
234          pxor mm2,mm2;null          pxor mm2,mm2;null
235          pxor mm5,mm5;devo          pxor mm5,mm5;devo
236          pxor mm6,mm6;devc          pxor mm6,mm6;devc
237          pxor mm7,mm7;corr          pxor mm7,mm7;corr
238    
239          CONSIM_1x8_MMX          CONSIM_1x8_MMX
240          add ecx,eax          add TMP0,_EAX
241          add edx,eax          add TMP1,_EAX
242          CONSIM_1x8_MMX          CONSIM_1x8_MMX
243          add ecx,eax          add TMP0,_EAX
244          add edx,eax          add TMP1,_EAX
245          CONSIM_1x8_MMX          CONSIM_1x8_MMX
246          add ecx,eax          add TMP0,_EAX
247          add edx,eax          add TMP1,_EAX
248          CONSIM_1x8_MMX          CONSIM_1x8_MMX
249          add ecx,eax          add TMP0,_EAX
250          add edx,eax          add TMP1,_EAX
251          CONSIM_1x8_MMX          CONSIM_1x8_MMX
252          add ecx,eax          add TMP0,_EAX
253          add edx,eax          add TMP1,_EAX
254          CONSIM_1x8_MMX          CONSIM_1x8_MMX
255          add ecx,eax          add TMP0,_EAX
256          add edx,eax          add TMP1,_EAX
257          CONSIM_1x8_MMX          CONSIM_1x8_MMX
258          add ecx,eax          add TMP0,_EAX
259          add edx,eax          add TMP1,_EAX
260          CONSIM_1x8_MMX          CONSIM_1x8_MMX
261    
262          movq mm0,mm5          movq mm0,mm5
# Line 284  Line 271 
271    
272          CONSIM_WRITEOUT mm5,mm6,mm7          CONSIM_WRITEOUT mm5,mm6,mm7
273          ret          ret
274  .endfunc  ENDFUNC
275    
276    NON_EXEC_STACK

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.9.2.3

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