[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.11, Tue Dec 2 13:44:55 2008 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  SECTION .rotext align=SECTION_ALIGN
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
169          pxor xmm6,xmm6;devc          pxor xmm6,xmm6;devc
170          pxor xmm7,xmm7;corr          pxor xmm7,xmm7;corr
171    
         ;broadcast lumo/c  
         punpcklbw xmm6,xmm6  
         punpcklwd xmm6,xmm6  
         pshufd xmm6,xmm6,00000000b;or shufps  
         punpcklbw xmm7,xmm7  
         punpcklwd xmm7,xmm7  
         pshufd xmm7,xmm7,00000000b  
   
172          CONSIM_1x8_SSE2          CONSIM_1x8_SSE2
173          add ecx,eax          add TMP0,_EAX
174          add edx,eax          add TMP1,_EAX
175          CONSIM_1x8_SSE2          CONSIM_1x8_SSE2
176          add ecx,eax          add TMP0,_EAX
177          add edx,eax          add TMP1,_EAX
178          CONSIM_1x8_SSE2          CONSIM_1x8_SSE2
179          add ecx,eax          add TMP0,_EAX
180          add edx,eax          add TMP1,_EAX
181          CONSIM_1x8_SSE2          CONSIM_1x8_SSE2
182          add ecx,eax          add TMP0,_EAX
183          add edx,eax          add TMP1,_EAX
184          CONSIM_1x8_SSE2          CONSIM_1x8_SSE2
185          add ecx,eax          add TMP0,_EAX
186          add edx,eax          add TMP1,_EAX
187          CONSIM_1x8_SSE2          CONSIM_1x8_SSE2
188          add ecx,eax          add TMP0,_EAX
189          add edx,eax          add TMP1,_EAX
190          CONSIM_1x8_SSE2          CONSIM_1x8_SSE2
191          add ecx,eax          add TMP0,_EAX
192          add edx,eax          add TMP1,_EAX
193          CONSIM_1x8_SSE2          CONSIM_1x8_SSE2
194    
195          ;accumulate xmm5-7          ;accumulate xmm5-7
# Line 232  Line 209 
209          paddd      xmm7, xmm2          paddd      xmm7, xmm2
210    
211          CONSIM_WRITEOUT xmm5,xmm6,xmm7          CONSIM_WRITEOUT xmm5,xmm6,xmm7
212    
213            POP_XMM6_XMM7
214          ret          ret
215  .endfunc  ENDFUNC
216    
217    
218    
219    
220    
221  ALIGN 16  ALIGN SECTION_ALIGN
222  consim_mmx:  consim_mmx:
223          mov ecx,[esp+4] ;ptro          mov TMP0,prm1 ;ptro
224          mov edx,[esp+8] ;ptrc          mov TMP1,prm2 ;ptrc
225          mov eax,[esp+12];stride          mov _EAX,prm3;stride
226          pxor mm2,mm2;null          pxor mm2,mm2;null
227          pxor mm5,mm5;devo          pxor mm5,mm5;devo
228          pxor mm6,mm6;devc          pxor mm6,mm6;devc
229          pxor mm7,mm7;corr          pxor mm7,mm7;corr
230    
231          CONSIM_1x8_MMX          CONSIM_1x8_MMX
232          add ecx,eax          add TMP0,_EAX
233          add edx,eax          add TMP1,_EAX
234          CONSIM_1x8_MMX          CONSIM_1x8_MMX
235          add ecx,eax          add TMP0,_EAX
236          add edx,eax          add TMP1,_EAX
237          CONSIM_1x8_MMX          CONSIM_1x8_MMX
238          add ecx,eax          add TMP0,_EAX
239          add edx,eax          add TMP1,_EAX
240          CONSIM_1x8_MMX          CONSIM_1x8_MMX
241          add ecx,eax          add TMP0,_EAX
242          add edx,eax          add TMP1,_EAX
243          CONSIM_1x8_MMX          CONSIM_1x8_MMX
244          add ecx,eax          add TMP0,_EAX
245          add edx,eax          add TMP1,_EAX
246          CONSIM_1x8_MMX          CONSIM_1x8_MMX
247          add ecx,eax          add TMP0,_EAX
248          add edx,eax          add TMP1,_EAX
249          CONSIM_1x8_MMX          CONSIM_1x8_MMX
250          add ecx,eax          add TMP0,_EAX
251          add edx,eax          add TMP1,_EAX
252          CONSIM_1x8_MMX          CONSIM_1x8_MMX
253    
254          movq mm0,mm5          movq mm0,mm5
# Line 284  Line 263 
263    
264          CONSIM_WRITEOUT mm5,mm6,mm7          CONSIM_WRITEOUT mm5,mm6,mm7
265          ret          ret
266  .endfunc  ENDFUNC
267    
268    %ifidn __OUTPUT_FORMAT__,elf
269    section ".note.GNU-stack" noalloc noexec nowrite progbits
270    %endif

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

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