[svn] / branches / dev-api-4 / xvidcore / src / motion / x86_asm / sad_mmx.asm Repository:
ViewVC logotype

Annotation of /branches/dev-api-4/xvidcore/src/motion/x86_asm/sad_mmx.asm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1198 - (view) (download)

1 : edgomez 1192 ;/****************************************************************************
2 : Isibaar 262 ; *
3 : edgomez 1192 ; * XVID MPEG-4 VIDEO CODEC
4 :     ; * - K7 optimized SAD operators -
5 : Isibaar 262 ; *
6 : edgomez 1192 ; * Copyright(C) 2001 Peter Ross <pross@xvid.org>
7 :     ; * 2002 Pascal Massimino <skal@planet-d.net>
8 : Isibaar 262 ; *
9 : edgomez 1192 ; * This program is free software; you can redistribute it and/or modify it
10 :     ; * under the terms of the GNU General Public License as published by
11 :     ; * the Free Software Foundation; either version 2 of the License, or
12 :     ; * (at your option) any later version.
13 : Isibaar 262 ; *
14 : edgomez 1192 ; * This program is distributed in the hope that it will be useful,
15 :     ; * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 :     ; * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 :     ; * GNU General Public License for more details.
18 : Isibaar 262 ; *
19 : edgomez 1192 ; * You should have received a copy of the GNU General Public License
20 :     ; * along with this program; if not, write to the Free Software
21 :     ; * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 : Isibaar 262 ; *
23 : edgomez 1198 ; * $Id: sad_mmx.asm,v 1.11.2.2 2003-11-03 15:51:50 edgomez Exp $
24 : Isibaar 262 ; *
25 : edgomez 1192 ; ***************************************************************************/
26 : Isibaar 262
27 : edgomez 1192 BITS 32
28 : Isibaar 262
29 : edgomez 1192 %macro cglobal 1
30 : suxen_drol 329 %ifdef PREFIX
31 : edgomez 1192 global _%1
32 : Isibaar 262 %define %1 _%1
33 :     %else
34 :     global %1
35 :     %endif
36 :     %endmacro
37 :    
38 : edgomez 1192 ;=============================================================================
39 :     ; Read only data
40 :     ;=============================================================================
41 : Isibaar 262
42 : edgomez 1198 %ifdef FORMAT_COFF
43 :     SECTION .rodata data
44 :     %else
45 :     SECTION .rodata data align=16
46 :     %endif
47 : Isibaar 262
48 : edgomez 1192 ALIGN 16
49 :     mmx_one:
50 :     times 4 dw 1
51 : Isibaar 262
52 : edgomez 1192 ;=============================================================================
53 :     ; Helper macros
54 :     ;=============================================================================
55 : Isibaar 262
56 :     %macro SAD_16x16_MMX 0
57 : edgomez 1192 movq mm0, [eax]
58 :     movq mm1, [edx]
59 : Isibaar 262
60 : edgomez 1192 movq mm2, [eax+8]
61 :     movq mm3, [edx+8]
62 : Isibaar 262
63 : edgomez 1192 movq mm4, mm0
64 :     psubusb mm0, mm1
65 :     lea eax, [eax+ecx]
66 :     movq mm5, mm2
67 :     psubusb mm2, mm3
68 :     lea edx, [edx+ecx]
69 : Isibaar 262
70 : edgomez 1192 psubusb mm1, mm4
71 :     por mm0, mm1
72 :     psubusb mm3, mm5
73 :     por mm2, mm3
74 : Isibaar 262
75 : edgomez 1192 movq mm1, mm0
76 :     movq mm3, mm2
77 : Isibaar 262
78 : edgomez 1192 punpcklbw mm0,mm7
79 :     punpckhbw mm1,mm7
80 :     punpcklbw mm2,mm7
81 :     punpckhbw mm3,mm7
82 : Isibaar 262
83 : edgomez 1192 paddusw mm0, mm1
84 :     paddusw mm6, mm0
85 :     paddusw mm2, mm3
86 :     paddusw mm6, mm2
87 : Isibaar 262 %endmacro
88 :    
89 : edgomez 1192 %macro SAD_8x8_MMX 0
90 :     movq mm0, [eax]
91 :     movq mm1, [edx]
92 : Isibaar 262
93 : edgomez 1192 movq mm2, [eax+ecx]
94 :     movq mm3, [edx+ecx]
95 : Isibaar 262
96 : edgomez 1192 lea eax,[eax+2*ecx]
97 :     lea edx,[edx+2*ecx]
98 : Isibaar 262
99 : edgomez 1192 movq mm4, mm0
100 :     psubusb mm0, mm1
101 :     movq mm5, mm2
102 :     psubusb mm2, mm3
103 : Isibaar 262
104 : edgomez 1192 psubusb mm1, mm4
105 :     por mm0, mm1
106 :     psubusb mm3, mm5
107 :     por mm2, mm3
108 : Isibaar 262
109 : edgomez 1192 movq mm1,mm0
110 :     movq mm3,mm2
111 : Isibaar 262
112 : edgomez 1192 punpcklbw mm0,mm7
113 :     punpckhbw mm1,mm7
114 :     punpcklbw mm2,mm7
115 :     punpckhbw mm3,mm7
116 : Isibaar 262
117 : edgomez 1192 paddusw mm0,mm1
118 :     paddusw mm6,mm0
119 :     paddusw mm2,mm3
120 :     paddusw mm6,mm2
121 :     %endmacro
122 : Isibaar 262
123 : edgomez 1192 %macro SADV_16x16_MMX 0
124 :     movq mm0, [eax]
125 :     movq mm1, [edx]
126 : Isibaar 262
127 : edgomez 1192 movq mm2, [eax+8]
128 :     movq mm3, [edx+8]
129 : Isibaar 262
130 : edgomez 1192 movq mm4, mm0
131 :     psubusb mm0, mm1
132 : Isibaar 262
133 : edgomez 1192 psubusb mm1, mm4
134 :     por mm0, mm1
135 :     lea eax,[eax+ecx]
136 : Isibaar 262
137 : edgomez 1192 movq mm4, mm2
138 :     psubusb mm2, mm3
139 : Isibaar 262
140 : edgomez 1192 psubusb mm3, mm4
141 :     por mm2, mm3
142 :     lea edx,[edx+ecx]
143 : Isibaar 262
144 : edgomez 1192 movq mm1,mm0
145 :     movq mm3,mm2
146 : Isibaar 262
147 : edgomez 1192 punpcklbw mm0,mm7
148 :     punpckhbw mm1,mm7
149 :     punpcklbw mm2,mm7
150 :     punpckhbw mm3,mm7
151 : Isibaar 262
152 : edgomez 1192 paddusw mm0,mm1
153 :     paddusw mm2,mm3
154 :    
155 :     paddusw mm5, mm0
156 :     paddusw mm6, mm2
157 : Isibaar 262 %endmacro
158 :    
159 : edgomez 1192 %macro SADBI_16x16_MMX 2 ; SADBI_16x16_MMX( int_ptr_offset, bool_increment_ptr );
160 : Isibaar 262
161 : edgomez 1192 movq mm0, [edx+%1]
162 :     movq mm2, [ebx+%1]
163 :     movq mm1, mm0
164 :     movq mm3, mm2
165 : Isibaar 262
166 : edgomez 1192 %if %2 != 0
167 :     add edx, ecx
168 :     %endif
169 : Isibaar 262
170 : edgomez 1192 punpcklbw mm0, mm7
171 :     punpckhbw mm1, mm7
172 :     punpcklbw mm2, mm7
173 :     punpckhbw mm3, mm7
174 : Isibaar 262
175 : edgomez 1192 %if %2 != 0
176 :     add ebx, ecx
177 :     %endif
178 : Isibaar 262
179 : edgomez 1192 paddusw mm0, mm2 ; mm01 = ref1 + ref2
180 :     paddusw mm1, mm3
181 :     paddusw mm0, [mmx_one] ; mm01 += 1
182 :     paddusw mm1, [mmx_one]
183 :     psrlw mm0, 1 ; mm01 >>= 1
184 :     psrlw mm1, 1
185 : Isibaar 262
186 : edgomez 1192 movq mm2, [eax+%1]
187 :     movq mm3, mm2
188 :     punpcklbw mm2, mm7 ; mm23 = src
189 :     punpckhbw mm3, mm7
190 : Isibaar 262
191 : edgomez 1192 %if %2 != 0
192 :     add eax, ecx
193 :     %endif
194 : Isibaar 262
195 : edgomez 1192 movq mm4, mm0
196 :     movq mm5, mm1
197 :     psubusw mm0, mm2
198 :     psubusw mm1, mm3
199 :     psubusw mm2, mm4
200 :     psubusw mm3, mm5
201 :     por mm0, mm2 ; mm01 = ABS(mm01 - mm23)
202 :     por mm1, mm3
203 : Isibaar 262
204 : edgomez 1192 paddusw mm6, mm0 ; mm6 += mm01
205 :     paddusw mm6, mm1
206 : Isibaar 262
207 : edgomez 1192 %endmacro
208 : edgomez 851
209 : edgomez 1192 %macro MEAN_16x16_MMX 0
210 :     movq mm0, [eax]
211 :     movq mm2, [eax+8]
212 :     lea eax, [eax+ecx]
213 :     movq mm1, mm0
214 :     movq mm3, mm2
215 :     punpcklbw mm0, mm7
216 :     punpcklbw mm2, mm7
217 :     punpckhbw mm1, mm7
218 :     punpckhbw mm3, mm7
219 :     paddw mm5, mm0
220 :     paddw mm6, mm1
221 :     paddw mm5, mm2
222 :     paddw mm6, mm3
223 :     %endmacro
224 : edgomez 851
225 : edgomez 1192 %macro ABS_16x16_MMX 0
226 :     movq mm0, [eax]
227 :     movq mm2, [eax+8]
228 :     lea eax, [eax+ecx]
229 :     movq mm1, mm0
230 :     movq mm3, mm2
231 :     punpcklbw mm0, mm7
232 :     punpcklbw mm2, mm7
233 :     punpckhbw mm1, mm7
234 :     punpckhbw mm3, mm7
235 :     movq mm4, mm6
236 :     psubusw mm4, mm0
237 : edgomez 851
238 : edgomez 1192 psubusw mm0, mm6
239 :     por mm0, mm4
240 :     movq mm4, mm6
241 :     psubusw mm4, mm1
242 :     psubusw mm1, mm6
243 :     por mm1, mm4
244 : edgomez 851
245 : edgomez 1192 movq mm4, mm6
246 :     psubusw mm4, mm2
247 :     psubusw mm2, mm6
248 :     por mm2, mm4
249 :     movq mm4, mm6
250 :     psubusw mm4, mm3
251 :     psubusw mm3, mm6
252 :     por mm3, mm4
253 : edgomez 851
254 : edgomez 1192 paddw mm0, mm1
255 :     paddw mm2, mm3
256 :     paddw mm5, mm0
257 :     paddw mm5, mm2
258 :     %endmacro
259 : edgomez 851
260 : edgomez 1192 ;=============================================================================
261 :     ; Code
262 :     ;=============================================================================
263 : edgomez 851
264 : edgomez 1192 SECTION .text
265 : edgomez 851
266 : edgomez 1192 cglobal sad16_mmx
267 :     cglobal sad16v_mmx
268 :     cglobal sad8_mmx
269 :     cglobal sad16bi_mmx
270 :     cglobal sad8bi_mmx
271 :     cglobal dev16_mmx
272 : edgomez 851
273 : edgomez 1192 ;-----------------------------------------------------------------------------
274 :     ;
275 :     ; uint32_t sad16_mmx(const uint8_t * const cur,
276 :     ; const uint8_t * const ref,
277 :     ; const uint32_t stride,
278 :     ; const uint32_t best_sad);
279 :     ;
280 :     ; (early termination ignore; slows this down)
281 :     ;
282 :     ;-----------------------------------------------------------------------------
283 : edgomez 851
284 : edgomez 1192 ALIGN 16
285 :     sad16_mmx:
286 : edgomez 851
287 : edgomez 1192 mov eax, [esp+ 4] ; Src1
288 :     mov edx, [esp+ 8] ; Src2
289 :     mov ecx, [esp+12] ; Stride
290 : edgomez 851
291 : edgomez 1192 pxor mm6, mm6 ; accum
292 :     pxor mm7, mm7 ; zero
293 : edgomez 851
294 : edgomez 1192 SAD_16x16_MMX
295 :     SAD_16x16_MMX
296 :     SAD_16x16_MMX
297 :     SAD_16x16_MMX
298 :     SAD_16x16_MMX
299 :     SAD_16x16_MMX
300 :     SAD_16x16_MMX
301 :     SAD_16x16_MMX
302 : edgomez 851
303 : edgomez 1192 SAD_16x16_MMX
304 :     SAD_16x16_MMX
305 :     SAD_16x16_MMX
306 :     SAD_16x16_MMX
307 :     SAD_16x16_MMX
308 :     SAD_16x16_MMX
309 :     SAD_16x16_MMX
310 :     SAD_16x16_MMX
311 : edgomez 851
312 : edgomez 1192 pmaddwd mm6, [mmx_one] ; collapse
313 :     movq mm7, mm6
314 :     psrlq mm7, 32
315 :     paddd mm6, mm7
316 : edgomez 851
317 : edgomez 1192 movd eax, mm6
318 : edgomez 851
319 : edgomez 1192 ret
320 : edgomez 851
321 : edgomez 1192 ;-----------------------------------------------------------------------------
322 :     ;
323 :     ; uint32_t sad8_mmx(const uint8_t * const cur,
324 :     ; const uint8_t * const ref,
325 :     ; const uint32_t stride);
326 :     ;
327 :     ;-----------------------------------------------------------------------------
328 : edgomez 851
329 : edgomez 1192 ALIGN 16
330 :     sad8_mmx:
331 : edgomez 851
332 : edgomez 1192 mov eax, [esp+ 4] ; Src1
333 :     mov edx, [esp+ 8] ; Src2
334 :     mov ecx, [esp+12] ; Stride
335 : edgomez 851
336 : edgomez 1192 pxor mm6, mm6 ; accum
337 :     pxor mm7, mm7 ; zero
338 : edgomez 851
339 : edgomez 1192 SAD_8x8_MMX
340 :     SAD_8x8_MMX
341 :     SAD_8x8_MMX
342 :     SAD_8x8_MMX
343 : edgomez 851
344 : edgomez 1192 pmaddwd mm6, [mmx_one] ; collapse
345 :     movq mm7, mm6
346 :     psrlq mm7, 32
347 :     paddd mm6, mm7
348 : edgomez 851
349 : edgomez 1192 movd eax, mm6
350 : edgomez 851
351 : edgomez 1192 ret
352 : edgomez 851
353 : edgomez 1192 ;-----------------------------------------------------------------------------
354 :     ;
355 :     ; uint32_t sad16v_mmx(const uint8_t * const cur,
356 :     ; const uint8_t * const ref,
357 :     ; const uint32_t stride,
358 :     ; int32_t *sad);
359 :     ;
360 :     ;-----------------------------------------------------------------------------
361 : edgomez 851
362 : edgomez 1192 ALIGN 16
363 :     sad16v_mmx:
364 : edgomez 851
365 : edgomez 1192 push ebx
366 :     push edi
367 : edgomez 851
368 : edgomez 1192 mov eax, [esp + 8 + 4] ; Src1
369 :     mov edx, [esp + 8 + 8] ; Src2
370 :     mov ecx, [esp + 8 + 12] ; Stride
371 :     mov ebx, [esp + 8 + 16] ; sad ptr
372 : suxen_drol 329
373 : edgomez 1192 pxor mm5, mm5 ; accum
374 :     pxor mm6, mm6 ; accum
375 :     pxor mm7, mm7 ; zero
376 : suxen_drol 329
377 : edgomez 1192 SADV_16x16_MMX
378 :     SADV_16x16_MMX
379 :     SADV_16x16_MMX
380 :     SADV_16x16_MMX
381 :     SADV_16x16_MMX
382 :     SADV_16x16_MMX
383 :     SADV_16x16_MMX
384 :     SADV_16x16_MMX
385 : suxen_drol 329
386 : edgomez 1192 pmaddwd mm5, [mmx_one] ; collapse
387 :     pmaddwd mm6, [mmx_one] ; collapse
388 : suxen_drol 329
389 : edgomez 1192 movq mm2, mm5
390 :     movq mm3, mm6
391 : suxen_drol 329
392 : edgomez 1192 psrlq mm2, 32
393 :     psrlq mm3, 32
394 : suxen_drol 329
395 : edgomez 1192 paddd mm5, mm2
396 :     paddd mm6, mm3
397 : suxen_drol 329
398 : edgomez 1192 movd [ebx], mm5
399 :     movd [ebx + 4], mm6
400 : suxen_drol 329
401 : edgomez 1192 paddd mm5, mm6
402 : suxen_drol 329
403 : edgomez 1192 movd edi, mm5
404 : suxen_drol 329
405 : edgomez 1192 pxor mm5, mm5
406 :     pxor mm6, mm6
407 : suxen_drol 329
408 : edgomez 1192 SADV_16x16_MMX
409 :     SADV_16x16_MMX
410 :     SADV_16x16_MMX
411 :     SADV_16x16_MMX
412 :     SADV_16x16_MMX
413 :     SADV_16x16_MMX
414 :     SADV_16x16_MMX
415 :     SADV_16x16_MMX
416 : suxen_drol 329
417 : edgomez 1192 pmaddwd mm5, [mmx_one] ; collapse
418 :     pmaddwd mm6, [mmx_one] ; collapse
419 : suxen_drol 329
420 : edgomez 1192 movq mm2, mm5
421 :     movq mm3, mm6
422 : suxen_drol 329
423 : edgomez 1192 psrlq mm2, 32
424 :     psrlq mm3, 32
425 : suxen_drol 329
426 : edgomez 1192 paddd mm5, mm2
427 :     paddd mm6, mm3
428 : suxen_drol 329
429 : edgomez 1192 movd [ebx + 8], mm5
430 :     movd [ebx + 12], mm6
431 : suxen_drol 329
432 : edgomez 1192 paddd mm5, mm6
433 : suxen_drol 329
434 : edgomez 1192 movd eax, mm5
435 : suxen_drol 329
436 : edgomez 1192 add eax, edi
437 : suxen_drol 329
438 : edgomez 1192 pop edi
439 :     pop ebx
440 : suxen_drol 329
441 : edgomez 1192 ret
442 : suxen_drol 329
443 : edgomez 1192 ;-----------------------------------------------------------------------------
444 :     ;
445 :     ; uint32_t sad16bi_mmx(const uint8_t * const cur,
446 :     ; const uint8_t * const ref1,
447 :     ; const uint8_t * const ref2,
448 :     ; const uint32_t stride);
449 :     ;
450 :     ;-----------------------------------------------------------------------------
451 : suxen_drol 329
452 : edgomez 1192 ALIGN 16
453 :     sad16bi_mmx:
454 :     push ebx
455 :     mov eax, [esp+4+ 4] ; Src
456 :     mov edx, [esp+4+ 8] ; Ref1
457 :     mov ebx, [esp+4+12] ; Ref2
458 :     mov ecx, [esp+4+16] ; Stride
459 :    
460 :     pxor mm6, mm6 ; accum2
461 :     pxor mm7, mm7
462 :     .Loop
463 :     SADBI_16x16_MMX 0, 0
464 :     SADBI_16x16_MMX 8, 1
465 :     SADBI_16x16_MMX 0, 0
466 :     SADBI_16x16_MMX 8, 1
467 :     SADBI_16x16_MMX 0, 0
468 :     SADBI_16x16_MMX 8, 1
469 :     SADBI_16x16_MMX 0, 0
470 :     SADBI_16x16_MMX 8, 1
471 :     SADBI_16x16_MMX 0, 0
472 :     SADBI_16x16_MMX 8, 1
473 :     SADBI_16x16_MMX 0, 0
474 :     SADBI_16x16_MMX 8, 1
475 :     SADBI_16x16_MMX 0, 0
476 :     SADBI_16x16_MMX 8, 1
477 :     SADBI_16x16_MMX 0, 0
478 :     SADBI_16x16_MMX 8, 1
479 :    
480 :     SADBI_16x16_MMX 0, 0
481 :     SADBI_16x16_MMX 8, 1
482 :     SADBI_16x16_MMX 0, 0
483 :     SADBI_16x16_MMX 8, 1
484 :     SADBI_16x16_MMX 0, 0
485 :     SADBI_16x16_MMX 8, 1
486 :     SADBI_16x16_MMX 0, 0
487 :     SADBI_16x16_MMX 8, 1
488 :     SADBI_16x16_MMX 0, 0
489 :     SADBI_16x16_MMX 8, 1
490 :     SADBI_16x16_MMX 0, 0
491 :     SADBI_16x16_MMX 8, 1
492 :     SADBI_16x16_MMX 0, 0
493 :     SADBI_16x16_MMX 8, 1
494 :     SADBI_16x16_MMX 0, 0
495 :     SADBI_16x16_MMX 8, 1
496 :    
497 :     pmaddwd mm6, [mmx_one] ; collapse
498 :     movq mm7, mm6
499 :     psrlq mm7, 32
500 :     paddd mm6, mm7
501 :    
502 :     movd eax, mm6
503 :     pop ebx
504 :    
505 :     ret
506 :    
507 :     ;-----------------------------------------------------------------------------
508 : suxen_drol 329 ;
509 : edgomez 1192 ; uint32_t sad8bi_mmx(const uint8_t * const cur,
510 :     ; const uint8_t * const ref1,
511 :     ; const uint8_t * const ref2,
512 :     ; const uint32_t stride);
513 : suxen_drol 329 ;
514 : edgomez 1192 ;-----------------------------------------------------------------------------
515 : suxen_drol 329
516 : edgomez 1192 ALIGN 16
517 :     sad8bi_mmx:
518 :     push ebx
519 :     mov eax, [esp+4+ 4] ; Src
520 :     mov edx, [esp+4+ 8] ; Ref1
521 :     mov ebx, [esp+4+12] ; Ref2
522 :     mov ecx, [esp+4+16] ; Stride
523 : Isibaar 262
524 : edgomez 1192 pxor mm6, mm6 ; accum2
525 :     pxor mm7, mm7
526 :     .Loop
527 :     SADBI_16x16_MMX 0, 1
528 :     SADBI_16x16_MMX 0, 1
529 :     SADBI_16x16_MMX 0, 1
530 :     SADBI_16x16_MMX 0, 1
531 :     SADBI_16x16_MMX 0, 1
532 :     SADBI_16x16_MMX 0, 1
533 :     SADBI_16x16_MMX 0, 1
534 :     SADBI_16x16_MMX 0, 1
535 : Isibaar 262
536 : edgomez 1192 pmaddwd mm6, [mmx_one] ; collapse
537 :     movq mm7, mm6
538 :     psrlq mm7, 32
539 :     paddd mm6, mm7
540 : Isibaar 262
541 : edgomez 1192 movd eax, mm6
542 :     pop ebx
543 :     ret
544 : Isibaar 262
545 : edgomez 1192 ;-----------------------------------------------------------------------------
546 :     ;
547 :     ; uint32_t dev16_mmx(const uint8_t * const cur,
548 :     ; const uint32_t stride);
549 :     ;
550 :     ;-----------------------------------------------------------------------------
551 :    
552 :     ALIGN 16
553 : Isibaar 262 dev16_mmx:
554 : edgomez 1192 mov eax, [esp+ 4] ; Src
555 :     mov ecx, [esp+ 8] ; Stride
556 : Isibaar 262
557 : edgomez 1192 pxor mm7, mm7 ; zero
558 :     pxor mm5, mm5 ; accum1
559 :     pxor mm6, mm6 ; accum2
560 : Isibaar 262
561 : edgomez 1192 MEAN_16x16_MMX
562 :     MEAN_16x16_MMX
563 :     MEAN_16x16_MMX
564 :     MEAN_16x16_MMX
565 :     MEAN_16x16_MMX
566 :     MEAN_16x16_MMX
567 :     MEAN_16x16_MMX
568 :     MEAN_16x16_MMX
569 : Isibaar 262
570 : edgomez 1192 MEAN_16x16_MMX
571 :     MEAN_16x16_MMX
572 :     MEAN_16x16_MMX
573 :     MEAN_16x16_MMX
574 :     MEAN_16x16_MMX
575 :     MEAN_16x16_MMX
576 :     MEAN_16x16_MMX
577 :     MEAN_16x16_MMX
578 : Isibaar 262
579 : edgomez 1192 paddusw mm6, mm5
580 :     pmaddwd mm6, [mmx_one] ; collapse
581 :     movq mm5, mm6
582 :     psrlq mm5, 32
583 :     paddd mm6, mm5
584 : Isibaar 262
585 : edgomez 1192 psllq mm6, 32 ; blank upper dword
586 :     psrlq mm6, 32 + 8 ; /= (16*16)
587 : Isibaar 262
588 : edgomez 1192 punpckldq mm6, mm6
589 :     packssdw mm6, mm6
590 :    
591 : Isibaar 262 ; mm6 contains the mean
592 :     ; mm5 is the new accum
593 :    
594 : edgomez 1192 pxor mm5, mm5
595 :     mov eax, [esp+ 4] ; Src
596 : Isibaar 262
597 : edgomez 1192 ABS_16x16_MMX
598 :     ABS_16x16_MMX
599 :     ABS_16x16_MMX
600 :     ABS_16x16_MMX
601 :     ABS_16x16_MMX
602 :     ABS_16x16_MMX
603 :     ABS_16x16_MMX
604 :     ABS_16x16_MMX
605 : Isibaar 262
606 : edgomez 1192 ABS_16x16_MMX
607 :     ABS_16x16_MMX
608 :     ABS_16x16_MMX
609 :     ABS_16x16_MMX
610 :     ABS_16x16_MMX
611 :     ABS_16x16_MMX
612 :     ABS_16x16_MMX
613 :     ABS_16x16_MMX
614 : Isibaar 262
615 : edgomez 1192 pmaddwd mm5, [mmx_one] ; collapse
616 :     movq mm6, mm5
617 :     psrlq mm6, 32
618 :     paddd mm6, mm5
619 : Isibaar 262
620 : edgomez 1192 movd eax, mm6
621 :    
622 :     ret

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