[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 1820 - (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 1795 SECTION .rotext align=SECTION_ALIGN
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 1795 mov TMP0,prm1 ;ptro
163 :     mov TMP1,prm2 ;ptrc
164 :     mov _EAX, prm3 ;stride
165 : Skal 1730
166 : Skal 1743 pxor xmm2,xmm2;null vektor
167 :     pxor xmm5,xmm5;devo
168 :     pxor xmm6,xmm6;devc
169 :     pxor xmm7,xmm7;corr
170 :    
171 :     ;broadcast lumo/c
172 :     punpcklbw xmm6,xmm6
173 :     punpcklwd xmm6,xmm6
174 :     pshufd xmm6,xmm6,00000000b;or shufps
175 :     punpcklbw xmm7,xmm7
176 :     punpcklwd xmm7,xmm7
177 :     pshufd xmm7,xmm7,00000000b
178 :    
179 :     CONSIM_1x8_SSE2
180 : Isibaar 1795 add TMP0,_EAX
181 :     add TMP1,_EAX
182 : Skal 1743 CONSIM_1x8_SSE2
183 : Isibaar 1795 add TMP0,_EAX
184 :     add TMP1,_EAX
185 : Skal 1743 CONSIM_1x8_SSE2
186 : Isibaar 1795 add TMP0,_EAX
187 :     add TMP1,_EAX
188 : Skal 1743 CONSIM_1x8_SSE2
189 : Isibaar 1795 add TMP0,_EAX
190 :     add TMP1,_EAX
191 : Skal 1743 CONSIM_1x8_SSE2
192 : Isibaar 1795 add TMP0,_EAX
193 :     add TMP1,_EAX
194 : Skal 1743 CONSIM_1x8_SSE2
195 : Isibaar 1795 add TMP0,_EAX
196 :     add TMP1,_EAX
197 : Skal 1743 CONSIM_1x8_SSE2
198 : Isibaar 1795 add TMP0,_EAX
199 :     add TMP1,_EAX
200 : Skal 1743 CONSIM_1x8_SSE2
201 : Skal 1730
202 : Skal 1743 ;accumulate xmm5-7
203 : chl 1745 pshufd xmm0, xmm5, 0x0E
204 : Skal 1743 paddd xmm5, xmm0
205 : chl 1745 pshufd xmm0, xmm5, 0x01
206 : Skal 1743 paddd xmm5, xmm0
207 : Skal 1730
208 : chl 1745 pshufd xmm1, xmm6, 0x0E
209 : Skal 1743 paddd xmm6, xmm1
210 : chl 1745 pshufd xmm1, xmm6, 0x01
211 : Skal 1743 paddd xmm6, xmm1
212 :    
213 : chl 1745 pshufd xmm2, xmm7, 0x0E
214 : Skal 1743 paddd xmm7, xmm2
215 : chl 1745 pshufd xmm2, xmm7, 0x01
216 : Skal 1743 paddd xmm7, xmm2
217 :    
218 :     CONSIM_WRITEOUT xmm5,xmm6,xmm7
219 : Skal 1730 ret
220 : Isibaar 1793 ENDFUNC
221 : Skal 1730
222 : Skal 1743
223 :    
224 :    
225 :    
226 : Isibaar 1795 ALIGN SECTION_ALIGN
227 : Skal 1743 consim_mmx:
228 : Isibaar 1795 mov TMP0,prm1 ;ptro
229 :     mov TMP1,prm2 ;ptrc
230 :     mov _EAX,prm3;stride
231 : Skal 1743 pxor mm2,mm2;null
232 :     pxor mm5,mm5;devo
233 :     pxor mm6,mm6;devc
234 :     pxor mm7,mm7;corr
235 : Skal 1730
236 : Skal 1743 CONSIM_1x8_MMX
237 : Isibaar 1795 add TMP0,_EAX
238 :     add TMP1,_EAX
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 : Skal 1730
259 : Skal 1743 movq mm0,mm5
260 :     psrlq mm0,32
261 :     paddd mm5,mm0
262 :     movq mm1,mm6
263 :     psrlq mm1,32
264 :     paddd mm6,mm1
265 :     movq mm2,mm7
266 :     psrlq mm2,32
267 :     paddd mm7,mm2
268 : Skal 1730
269 : Skal 1743 CONSIM_WRITEOUT mm5,mm6,mm7
270 : Skal 1730 ret
271 : Isibaar 1793 ENDFUNC
272 : Isibaar 1790
273 :     %ifidn __OUTPUT_FORMAT__,elf
274 :     section ".note.GNU-stack" noalloc noexec nowrite progbits
275 :     %endif

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