[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.3, Mon Oct 30 11:21:42 2006 UTC revision 1.9.2.1, Mon Dec 1 17:27:03 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
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
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
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 147  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 168  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 190  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
204          pshufd     xmm0, xmm5, 0EH          pshufd     xmm0, xmm5, 0x0E
205          paddd      xmm5, xmm0          paddd      xmm5, xmm0
206          pshufd     xmm0, xmm5, 01H          pshufd     xmm0, xmm5, 0x01
207          paddd      xmm5, xmm0          paddd      xmm5, xmm0
208    
209          pshufd     xmm1, xmm6, 0EH          pshufd     xmm1, xmm6, 0x0E
210          paddd      xmm6, xmm1          paddd      xmm6, xmm1
211          pshufd     xmm1, xmm6, 01H          pshufd     xmm1, xmm6, 0x01
212          paddd      xmm6, xmm1          paddd      xmm6, xmm1
213    
214          pshufd     xmm2, xmm7, 0EH          pshufd     xmm2, xmm7, 0x0E
215          paddd      xmm7, xmm2          paddd      xmm7, xmm2
216          pshufd     xmm2, xmm7, 01H          pshufd     xmm2, xmm7, 0x01
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 281  Line 271 
271    
272          CONSIM_WRITEOUT mm5,mm6,mm7          CONSIM_WRITEOUT mm5,mm6,mm7
273          ret          ret
274  .endfunc  ENDFUNC
275    
276    %ifidn __OUTPUT_FORMAT__,elf
277    section ".note.GNU-stack" noalloc noexec nowrite progbits
278    %endif

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.9.2.1

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