[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.4, Mon Oct 30 11:33:57 2006 UTC revision 1.12, Thu Dec 4 14:41:50 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  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
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
196          pshufd     xmm0, xmm5, 0EH          pshufd     xmm0, xmm5, 0x0E
197          paddd      xmm5, xmm0          paddd      xmm5, xmm0
198          pshufd     xmm0, xmm5, 01H          pshufd     xmm0, xmm5, 0x01
199          paddd      xmm5, xmm0          paddd      xmm5, xmm0
200    
201          pshufd     xmm1, xmm6, 0EH          pshufd     xmm1, xmm6, 0x0E
202          paddd      xmm6, xmm1          paddd      xmm6, xmm1
203          pshufd     xmm1, xmm6, 01H          pshufd     xmm1, xmm6, 0x01
204          paddd      xmm6, xmm1          paddd      xmm6, xmm1
205    
206          pshufd     xmm2, xmm7, 0EH          pshufd     xmm2, xmm7, 0x0E
207          paddd      xmm7, xmm2          paddd      xmm7, xmm2
208          pshufd     xmm2, xmm7, 01H          pshufd     xmm2, xmm7, 0x01
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.4  
changed lines
  Added in v.1.12

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