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

Annotation of /trunk/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 1844 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 1833 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 :     CONSIM_1x8_SSE2
173 : Isibaar 1795 add TMP0,_EAX
174 :     add TMP1,_EAX
175 : Skal 1743 CONSIM_1x8_SSE2
176 : Isibaar 1795 add TMP0,_EAX
177 :     add TMP1,_EAX
178 : Skal 1743 CONSIM_1x8_SSE2
179 : Isibaar 1795 add TMP0,_EAX
180 :     add TMP1,_EAX
181 : Skal 1743 CONSIM_1x8_SSE2
182 : Isibaar 1795 add TMP0,_EAX
183 :     add TMP1,_EAX
184 : Skal 1743 CONSIM_1x8_SSE2
185 : Isibaar 1795 add TMP0,_EAX
186 :     add TMP1,_EAX
187 : Skal 1743 CONSIM_1x8_SSE2
188 : Isibaar 1795 add TMP0,_EAX
189 :     add TMP1,_EAX
190 : Skal 1743 CONSIM_1x8_SSE2
191 : Isibaar 1795 add TMP0,_EAX
192 :     add TMP1,_EAX
193 : Skal 1743 CONSIM_1x8_SSE2
194 : Skal 1730
195 : Skal 1743 ;accumulate xmm5-7
196 : chl 1745 pshufd xmm0, xmm5, 0x0E
197 : Skal 1743 paddd xmm5, xmm0
198 : chl 1745 pshufd xmm0, xmm5, 0x01
199 : Skal 1743 paddd xmm5, xmm0
200 : Skal 1730
201 : chl 1745 pshufd xmm1, xmm6, 0x0E
202 : Skal 1743 paddd xmm6, xmm1
203 : chl 1745 pshufd xmm1, xmm6, 0x01
204 : Skal 1743 paddd xmm6, xmm1
205 :    
206 : chl 1745 pshufd xmm2, xmm7, 0x0E
207 : Skal 1743 paddd xmm7, xmm2
208 : chl 1745 pshufd xmm2, xmm7, 0x01
209 : Skal 1743 paddd xmm7, xmm2
210 :    
211 :     CONSIM_WRITEOUT xmm5,xmm6,xmm7
212 : Isibaar 1833
213 :     POP_XMM6_XMM7
214 : Skal 1730 ret
215 : Isibaar 1793 ENDFUNC
216 : Skal 1730
217 : Skal 1743
218 :    
219 :    
220 :    
221 : Isibaar 1795 ALIGN SECTION_ALIGN
222 : Skal 1743 consim_mmx:
223 : Isibaar 1795 mov TMP0,prm1 ;ptro
224 :     mov TMP1,prm2 ;ptrc
225 :     mov _EAX,prm3;stride
226 : Skal 1743 pxor mm2,mm2;null
227 :     pxor mm5,mm5;devo
228 :     pxor mm6,mm6;devc
229 :     pxor mm7,mm7;corr
230 : Skal 1730
231 : Skal 1743 CONSIM_1x8_MMX
232 : Isibaar 1795 add TMP0,_EAX
233 :     add TMP1,_EAX
234 : Skal 1743 CONSIM_1x8_MMX
235 : Isibaar 1795 add TMP0,_EAX
236 :     add TMP1,_EAX
237 : Skal 1743 CONSIM_1x8_MMX
238 : Isibaar 1795 add TMP0,_EAX
239 :     add TMP1,_EAX
240 : Skal 1743 CONSIM_1x8_MMX
241 : Isibaar 1795 add TMP0,_EAX
242 :     add TMP1,_EAX
243 : Skal 1743 CONSIM_1x8_MMX
244 : Isibaar 1795 add TMP0,_EAX
245 :     add TMP1,_EAX
246 : Skal 1743 CONSIM_1x8_MMX
247 : Isibaar 1795 add TMP0,_EAX
248 :     add TMP1,_EAX
249 : Skal 1743 CONSIM_1x8_MMX
250 : Isibaar 1795 add TMP0,_EAX
251 :     add TMP1,_EAX
252 : Skal 1743 CONSIM_1x8_MMX
253 : Skal 1730
254 : Skal 1743 movq mm0,mm5
255 :     psrlq mm0,32
256 :     paddd mm5,mm0
257 :     movq mm1,mm6
258 :     psrlq mm1,32
259 :     paddd mm6,mm1
260 :     movq mm2,mm7
261 :     psrlq mm2,32
262 :     paddd mm7,mm2
263 : Skal 1730
264 : Skal 1743 CONSIM_WRITEOUT mm5,mm6,mm7
265 : Skal 1730 ret
266 : Isibaar 1793 ENDFUNC
267 : Isibaar 1790
268 : Isibaar 1877 NON_EXEC_STACK

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