[svn] / branches / release-1_2-branch / xvidcore / src / plugins / x86_asm / plugin_ssim-a.asm Repository:
ViewVC logotype

Annotation of /branches/release-1_2-branch/xvidcore/src/plugins/x86_asm/plugin_ssim-a.asm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1877 - (view) (download)

1 : Skal 1730 ;/****************************************************************************
2 :     ; *
3 :     ; * XVID MPEG-4 VIDEO CODEC
4 :     ; * - optimized SSIM routines -
5 :     ; *
6 :     ; * Copyright(C) 2006 Johannes Reinhardt <johannes.reinhardt@gmx.de>
7 :     ; *
8 :     ; * This program is free software; you can redistribute it and/or modify it
9 :     ; * under the terms of the GNU General Public License as published by
10 :     ; * the Free Software Foundation; either version 2 of the License, or
11 :     ; * (at your option) any later version.
12 :     ; *
13 :     ; * This program is distributed in the hope that it will be useful,
14 :     ; * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 :     ; * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 :     ; * GNU General Public License for more details.
17 :     ; *
18 :     ; * You should have received a copy of the GNU General Public License
19 :     ; * along with this program; if not, write to the Free Software
20 :     ; * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 :     ; *
22 :     ; *
23 :     ; ***************************************************************************/
24 :    
25 :     BITS 32
26 :    
27 : Isibaar 1795 %include "nasm.inc"
28 : Skal 1730
29 : Skal 1740 %macro ACC_ROW 2
30 : Isibaar 1795 movq %1,[ TMP0]
31 :     movq %2,[TMP0+TMP1]
32 : Skal 1730 psadbw %1,mm0
33 : Skal 1740 psadbw %2,mm0
34 : Isibaar 1795 lea TMP0, [TMP0+2*TMP1]
35 : Skal 1740 paddw %1, %2
36 : Skal 1730 %endmacro
37 :    
38 :     %macro CONSIM_1x8_SSE2 0
39 : Isibaar 1795 movdqu xmm0,[TMP0]
40 :     movdqu xmm1,[TMP1]
41 : Skal 1730
42 :     ;unpack to words
43 :     punpcklbw xmm0,xmm2
44 :     punpcklbw xmm1,xmm2
45 :    
46 : Skal 1743 movaps xmm3,xmm0
47 :     movaps xmm4,xmm1
48 : Skal 1730
49 : Skal 1743 pmaddwd xmm0,xmm0;orig
50 :     pmaddwd xmm1,xmm1;comp
51 :     pmaddwd xmm3,xmm4;corr
52 : Skal 1730
53 : Skal 1743 paddd xmm5,xmm0
54 :     paddd xmm6,xmm1
55 :     paddd xmm7,xmm3
56 : Skal 1730 %endmacro
57 :    
58 :     %macro CONSIM_1x8_MMX 0
59 : Isibaar 1795 movq mm0,[TMP0];orig
60 :     movq mm1,[TMP1];comp
61 : Skal 1730
62 : Skal 1743 ;unpack low half of qw to words
63 :     punpcklbw mm0,mm2
64 :     punpcklbw mm1,mm2
65 : Skal 1730
66 : Skal 1743 movq mm3,mm0
67 :     pmaddwd mm3,mm0
68 :     paddd mm5,mm3;
69 : Skal 1730
70 : Skal 1743 movq mm4,mm1
71 :     pmaddwd mm4,mm1
72 :     paddd mm6,mm4;
73 :    
74 : Skal 1730 pmaddwd mm1,mm0
75 : Skal 1743 paddd mm7,mm1
76 : Skal 1730
77 : Isibaar 1795 movq mm0,[TMP0];orig
78 :     movq mm1,[TMP1];comp
79 : Skal 1730
80 : Skal 1743 ;unpack high half of qw to words
81 :     punpckhbw mm0,mm2
82 :     punpckhbw mm1,mm2
83 : Skal 1730
84 : Skal 1743 movq mm3,mm0
85 :     pmaddwd mm3,mm0
86 :     paddd mm5,mm3;
87 : Skal 1730
88 : Skal 1743 movq mm4,mm1
89 :     pmaddwd mm4,mm1
90 :     paddd mm6,mm4;
91 :    
92 : Skal 1730 pmaddwd mm1,mm0
93 : Skal 1743 paddd mm7,mm1
94 : Skal 1730 %endmacro
95 :    
96 : Skal 1743 %macro CONSIM_WRITEOUT 3
97 : Isibaar 1814 mov eax,prm4d;lumo
98 :     mul eax; lumo^2
99 :     add eax, 32
100 :     shr eax, 6; 64*lum0^2
101 : Isibaar 1795 movd TMP0d,%1
102 : Isibaar 1814 sub TMP0d, eax
103 : Skal 1730
104 : Isibaar 1795 mov TMP1,prm6; pdevo
105 : Isibaar 1814 mov dword [TMP1],TMP0d
106 : Skal 1730
107 : Isibaar 1795 mov eax,prm5d ;lumc
108 : Isibaar 1814 mul eax; lumc^2
109 :     add eax, 32
110 :     shr eax, 6; 64*lumc^2
111 : Isibaar 1795 movd TMP0d,%2
112 : Isibaar 1814 sub TMP0d, eax
113 : Skal 1743
114 : Isibaar 1795 mov TMP1,prm7; pdevc
115 : Isibaar 1814 mov dword [TMP1],TMP0d
116 : Skal 1743
117 : Isibaar 1814 mov eax,prm4d;lumo
118 : Isibaar 1795 mul prm5d; lumo*lumc, should fit in _EAX
119 : Isibaar 1814 add eax, 32
120 :     shr eax, 6; 64*lumo*lumc
121 : Isibaar 1795 movd TMP0d,%3
122 : Isibaar 1814 sub TMP0d, eax
123 : Skal 1743
124 : Isibaar 1795 mov TMP1,prm8; pcorr
125 : Isibaar 1814 mov dword [TMP1],TMP0d
126 : Skal 1743 %endmacro
127 :    
128 :    
129 : Isibaar 1865 TEXT
130 : Skal 1730
131 :     cglobal lum_8x8_mmx
132 :     cglobal consim_sse2
133 :     cglobal consim_mmx
134 :    
135 :     ;int lum_8x8_c(uint8_t* ptr, uint32_t stride)
136 :    
137 : Isibaar 1795 ALIGN SECTION_ALIGN
138 : Skal 1730 lum_8x8_mmx:
139 : Isibaar 1795 mov TMP0, prm1 ;ptr
140 :     mov TMP1, prm2 ;stride
141 : Skal 1730
142 :     pxor mm0,mm0
143 :    
144 : Skal 1740 ACC_ROW mm1, mm2
145 : Skal 1730
146 : Skal 1740 ACC_ROW mm3, mm4
147 : Skal 1730
148 : Skal 1740 ACC_ROW mm5, mm6
149 : Skal 1730
150 : Skal 1740 ACC_ROW mm7, mm4
151 : Skal 1730
152 :     paddw mm1, mm3
153 :     paddw mm5, mm7
154 :     paddw mm1, mm5
155 :    
156 :     movd eax,mm1
157 :     ret
158 : Isibaar 1793 ENDFUNC
159 : Skal 1730
160 : Isibaar 1795 ALIGN SECTION_ALIGN
161 : Skal 1743 consim_sse2:
162 : Isibaar 1838 PUSH_XMM6_XMM7
163 : Isibaar 1795 mov TMP0,prm1 ;ptro
164 :     mov TMP1,prm2 ;ptrc
165 :     mov _EAX, prm3 ;stride
166 : Skal 1730
167 : Skal 1743 pxor xmm2,xmm2;null vektor
168 :     pxor xmm5,xmm5;devo
169 :     pxor xmm6,xmm6;devc
170 :     pxor xmm7,xmm7;corr
171 :    
172 :     ;broadcast lumo/c
173 :     punpcklbw xmm6,xmm6
174 :     punpcklwd xmm6,xmm6
175 :     pshufd xmm6,xmm6,00000000b;or shufps
176 :     punpcklbw xmm7,xmm7
177 :     punpcklwd xmm7,xmm7
178 :     pshufd xmm7,xmm7,00000000b
179 :    
180 :     CONSIM_1x8_SSE2
181 : Isibaar 1795 add TMP0,_EAX
182 :     add TMP1,_EAX
183 : Skal 1743 CONSIM_1x8_SSE2
184 : Isibaar 1795 add TMP0,_EAX
185 :     add TMP1,_EAX
186 : Skal 1743 CONSIM_1x8_SSE2
187 : Isibaar 1795 add TMP0,_EAX
188 :     add TMP1,_EAX
189 : Skal 1743 CONSIM_1x8_SSE2
190 : Isibaar 1795 add TMP0,_EAX
191 :     add TMP1,_EAX
192 : Skal 1743 CONSIM_1x8_SSE2
193 : Isibaar 1795 add TMP0,_EAX
194 :     add TMP1,_EAX
195 : Skal 1743 CONSIM_1x8_SSE2
196 : Isibaar 1795 add TMP0,_EAX
197 :     add TMP1,_EAX
198 : Skal 1743 CONSIM_1x8_SSE2
199 : Isibaar 1795 add TMP0,_EAX
200 :     add TMP1,_EAX
201 : Skal 1743 CONSIM_1x8_SSE2
202 : Skal 1730
203 : Skal 1743 ;accumulate xmm5-7
204 : chl 1745 pshufd xmm0, xmm5, 0x0E
205 : Skal 1743 paddd xmm5, xmm0
206 : chl 1745 pshufd xmm0, xmm5, 0x01
207 : Skal 1743 paddd xmm5, xmm0
208 : Skal 1730
209 : chl 1745 pshufd xmm1, xmm6, 0x0E
210 : Skal 1743 paddd xmm6, xmm1
211 : chl 1745 pshufd xmm1, xmm6, 0x01
212 : Skal 1743 paddd xmm6, xmm1
213 :    
214 : chl 1745 pshufd xmm2, xmm7, 0x0E
215 : Skal 1743 paddd xmm7, xmm2
216 : chl 1745 pshufd xmm2, xmm7, 0x01
217 : Skal 1743 paddd xmm7, xmm2
218 :    
219 :     CONSIM_WRITEOUT xmm5,xmm6,xmm7
220 : Isibaar 1838
221 :     POP_XMM6_XMM7
222 : Skal 1730 ret
223 : Isibaar 1793 ENDFUNC
224 : Skal 1730
225 : Skal 1743
226 :    
227 :    
228 :    
229 : Isibaar 1795 ALIGN SECTION_ALIGN
230 : Skal 1743 consim_mmx:
231 : Isibaar 1795 mov TMP0,prm1 ;ptro
232 :     mov TMP1,prm2 ;ptrc
233 :     mov _EAX,prm3;stride
234 : Skal 1743 pxor mm2,mm2;null
235 :     pxor mm5,mm5;devo
236 :     pxor mm6,mm6;devc
237 :     pxor mm7,mm7;corr
238 : Skal 1730
239 : Skal 1743 CONSIM_1x8_MMX
240 : Isibaar 1795 add TMP0,_EAX
241 :     add TMP1,_EAX
242 : Skal 1743 CONSIM_1x8_MMX
243 : Isibaar 1795 add TMP0,_EAX
244 :     add TMP1,_EAX
245 : Skal 1743 CONSIM_1x8_MMX
246 : Isibaar 1795 add TMP0,_EAX
247 :     add TMP1,_EAX
248 : Skal 1743 CONSIM_1x8_MMX
249 : Isibaar 1795 add TMP0,_EAX
250 :     add TMP1,_EAX
251 : Skal 1743 CONSIM_1x8_MMX
252 : Isibaar 1795 add TMP0,_EAX
253 :     add TMP1,_EAX
254 : Skal 1743 CONSIM_1x8_MMX
255 : Isibaar 1795 add TMP0,_EAX
256 :     add TMP1,_EAX
257 : Skal 1743 CONSIM_1x8_MMX
258 : Isibaar 1795 add TMP0,_EAX
259 :     add TMP1,_EAX
260 : Skal 1743 CONSIM_1x8_MMX
261 : Skal 1730
262 : Skal 1743 movq mm0,mm5
263 :     psrlq mm0,32
264 :     paddd mm5,mm0
265 :     movq mm1,mm6
266 :     psrlq mm1,32
267 :     paddd mm6,mm1
268 :     movq mm2,mm7
269 :     psrlq mm2,32
270 :     paddd mm7,mm2
271 : Skal 1730
272 : Skal 1743 CONSIM_WRITEOUT mm5,mm6,mm7
273 : Skal 1730 ret
274 : Isibaar 1793 ENDFUNC
275 : Isibaar 1790
276 : Isibaar 1877 NON_EXEC_STACK

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