[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 1192 - (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 1192 ; * $Id: sad_mmx.asm,v 1.11.2.1 2003-10-28 22:23:03 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 1192 SECTION .rodata
43 : Isibaar 262
44 : edgomez 1192 ALIGN 16
45 :     mmx_one:
46 :     times 4 dw 1
47 : Isibaar 262
48 : edgomez 1192 ;=============================================================================
49 :     ; Helper macros
50 :     ;=============================================================================
51 : Isibaar 262
52 :     %macro SAD_16x16_MMX 0
53 : edgomez 1192 movq mm0, [eax]
54 :     movq mm1, [edx]
55 : Isibaar 262
56 : edgomez 1192 movq mm2, [eax+8]
57 :     movq mm3, [edx+8]
58 : Isibaar 262
59 : edgomez 1192 movq mm4, mm0
60 :     psubusb mm0, mm1
61 :     lea eax, [eax+ecx]
62 :     movq mm5, mm2
63 :     psubusb mm2, mm3
64 :     lea edx, [edx+ecx]
65 : Isibaar 262
66 : edgomez 1192 psubusb mm1, mm4
67 :     por mm0, mm1
68 :     psubusb mm3, mm5
69 :     por mm2, mm3
70 : Isibaar 262
71 : edgomez 1192 movq mm1, mm0
72 :     movq mm3, mm2
73 : Isibaar 262
74 : edgomez 1192 punpcklbw mm0,mm7
75 :     punpckhbw mm1,mm7
76 :     punpcklbw mm2,mm7
77 :     punpckhbw mm3,mm7
78 : Isibaar 262
79 : edgomez 1192 paddusw mm0, mm1
80 :     paddusw mm6, mm0
81 :     paddusw mm2, mm3
82 :     paddusw mm6, mm2
83 : Isibaar 262 %endmacro
84 :    
85 : edgomez 1192 %macro SAD_8x8_MMX 0
86 :     movq mm0, [eax]
87 :     movq mm1, [edx]
88 : Isibaar 262
89 : edgomez 1192 movq mm2, [eax+ecx]
90 :     movq mm3, [edx+ecx]
91 : Isibaar 262
92 : edgomez 1192 lea eax,[eax+2*ecx]
93 :     lea edx,[edx+2*ecx]
94 : Isibaar 262
95 : edgomez 1192 movq mm4, mm0
96 :     psubusb mm0, mm1
97 :     movq mm5, mm2
98 :     psubusb mm2, mm3
99 : Isibaar 262
100 : edgomez 1192 psubusb mm1, mm4
101 :     por mm0, mm1
102 :     psubusb mm3, mm5
103 :     por mm2, mm3
104 : Isibaar 262
105 : edgomez 1192 movq mm1,mm0
106 :     movq mm3,mm2
107 : Isibaar 262
108 : edgomez 1192 punpcklbw mm0,mm7
109 :     punpckhbw mm1,mm7
110 :     punpcklbw mm2,mm7
111 :     punpckhbw mm3,mm7
112 : Isibaar 262
113 : edgomez 1192 paddusw mm0,mm1
114 :     paddusw mm6,mm0
115 :     paddusw mm2,mm3
116 :     paddusw mm6,mm2
117 :     %endmacro
118 : Isibaar 262
119 : edgomez 1192 %macro SADV_16x16_MMX 0
120 :     movq mm0, [eax]
121 :     movq mm1, [edx]
122 : Isibaar 262
123 : edgomez 1192 movq mm2, [eax+8]
124 :     movq mm3, [edx+8]
125 : Isibaar 262
126 : edgomez 1192 movq mm4, mm0
127 :     psubusb mm0, mm1
128 : Isibaar 262
129 : edgomez 1192 psubusb mm1, mm4
130 :     por mm0, mm1
131 :     lea eax,[eax+ecx]
132 : Isibaar 262
133 : edgomez 1192 movq mm4, mm2
134 :     psubusb mm2, mm3
135 : Isibaar 262
136 : edgomez 1192 psubusb mm3, mm4
137 :     por mm2, mm3
138 :     lea edx,[edx+ecx]
139 : Isibaar 262
140 : edgomez 1192 movq mm1,mm0
141 :     movq mm3,mm2
142 : Isibaar 262
143 : edgomez 1192 punpcklbw mm0,mm7
144 :     punpckhbw mm1,mm7
145 :     punpcklbw mm2,mm7
146 :     punpckhbw mm3,mm7
147 : Isibaar 262
148 : edgomez 1192 paddusw mm0,mm1
149 :     paddusw mm2,mm3
150 :    
151 :     paddusw mm5, mm0
152 :     paddusw mm6, mm2
153 : Isibaar 262 %endmacro
154 :    
155 : edgomez 1192 %macro SADBI_16x16_MMX 2 ; SADBI_16x16_MMX( int_ptr_offset, bool_increment_ptr );
156 : Isibaar 262
157 : edgomez 1192 movq mm0, [edx+%1]
158 :     movq mm2, [ebx+%1]
159 :     movq mm1, mm0
160 :     movq mm3, mm2
161 : Isibaar 262
162 : edgomez 1192 %if %2 != 0
163 :     add edx, ecx
164 :     %endif
165 : Isibaar 262
166 : edgomez 1192 punpcklbw mm0, mm7
167 :     punpckhbw mm1, mm7
168 :     punpcklbw mm2, mm7
169 :     punpckhbw mm3, mm7
170 : Isibaar 262
171 : edgomez 1192 %if %2 != 0
172 :     add ebx, ecx
173 :     %endif
174 : Isibaar 262
175 : edgomez 1192 paddusw mm0, mm2 ; mm01 = ref1 + ref2
176 :     paddusw mm1, mm3
177 :     paddusw mm0, [mmx_one] ; mm01 += 1
178 :     paddusw mm1, [mmx_one]
179 :     psrlw mm0, 1 ; mm01 >>= 1
180 :     psrlw mm1, 1
181 : Isibaar 262
182 : edgomez 1192 movq mm2, [eax+%1]
183 :     movq mm3, mm2
184 :     punpcklbw mm2, mm7 ; mm23 = src
185 :     punpckhbw mm3, mm7
186 : Isibaar 262
187 : edgomez 1192 %if %2 != 0
188 :     add eax, ecx
189 :     %endif
190 : Isibaar 262
191 : edgomez 1192 movq mm4, mm0
192 :     movq mm5, mm1
193 :     psubusw mm0, mm2
194 :     psubusw mm1, mm3
195 :     psubusw mm2, mm4
196 :     psubusw mm3, mm5
197 :     por mm0, mm2 ; mm01 = ABS(mm01 - mm23)
198 :     por mm1, mm3
199 : Isibaar 262
200 : edgomez 1192 paddusw mm6, mm0 ; mm6 += mm01
201 :     paddusw mm6, mm1
202 : Isibaar 262
203 : edgomez 1192 %endmacro
204 : edgomez 851
205 : edgomez 1192 %macro MEAN_16x16_MMX 0
206 :     movq mm0, [eax]
207 :     movq mm2, [eax+8]
208 :     lea eax, [eax+ecx]
209 :     movq mm1, mm0
210 :     movq mm3, mm2
211 :     punpcklbw mm0, mm7
212 :     punpcklbw mm2, mm7
213 :     punpckhbw mm1, mm7
214 :     punpckhbw mm3, mm7
215 :     paddw mm5, mm0
216 :     paddw mm6, mm1
217 :     paddw mm5, mm2
218 :     paddw mm6, mm3
219 :     %endmacro
220 : edgomez 851
221 : edgomez 1192 %macro ABS_16x16_MMX 0
222 :     movq mm0, [eax]
223 :     movq mm2, [eax+8]
224 :     lea eax, [eax+ecx]
225 :     movq mm1, mm0
226 :     movq mm3, mm2
227 :     punpcklbw mm0, mm7
228 :     punpcklbw mm2, mm7
229 :     punpckhbw mm1, mm7
230 :     punpckhbw mm3, mm7
231 :     movq mm4, mm6
232 :     psubusw mm4, mm0
233 : edgomez 851
234 : edgomez 1192 psubusw mm0, mm6
235 :     por mm0, mm4
236 :     movq mm4, mm6
237 :     psubusw mm4, mm1
238 :     psubusw mm1, mm6
239 :     por mm1, mm4
240 : edgomez 851
241 : edgomez 1192 movq mm4, mm6
242 :     psubusw mm4, mm2
243 :     psubusw mm2, mm6
244 :     por mm2, mm4
245 :     movq mm4, mm6
246 :     psubusw mm4, mm3
247 :     psubusw mm3, mm6
248 :     por mm3, mm4
249 : edgomez 851
250 : edgomez 1192 paddw mm0, mm1
251 :     paddw mm2, mm3
252 :     paddw mm5, mm0
253 :     paddw mm5, mm2
254 :     %endmacro
255 : edgomez 851
256 : edgomez 1192 ;=============================================================================
257 :     ; Code
258 :     ;=============================================================================
259 : edgomez 851
260 : edgomez 1192 SECTION .text
261 : edgomez 851
262 : edgomez 1192 cglobal sad16_mmx
263 :     cglobal sad16v_mmx
264 :     cglobal sad8_mmx
265 :     cglobal sad16bi_mmx
266 :     cglobal sad8bi_mmx
267 :     cglobal dev16_mmx
268 : edgomez 851
269 : edgomez 1192 ;-----------------------------------------------------------------------------
270 :     ;
271 :     ; uint32_t sad16_mmx(const uint8_t * const cur,
272 :     ; const uint8_t * const ref,
273 :     ; const uint32_t stride,
274 :     ; const uint32_t best_sad);
275 :     ;
276 :     ; (early termination ignore; slows this down)
277 :     ;
278 :     ;-----------------------------------------------------------------------------
279 : edgomez 851
280 : edgomez 1192 ALIGN 16
281 :     sad16_mmx:
282 : edgomez 851
283 : edgomez 1192 mov eax, [esp+ 4] ; Src1
284 :     mov edx, [esp+ 8] ; Src2
285 :     mov ecx, [esp+12] ; Stride
286 : edgomez 851
287 : edgomez 1192 pxor mm6, mm6 ; accum
288 :     pxor mm7, mm7 ; zero
289 : edgomez 851
290 : edgomez 1192 SAD_16x16_MMX
291 :     SAD_16x16_MMX
292 :     SAD_16x16_MMX
293 :     SAD_16x16_MMX
294 :     SAD_16x16_MMX
295 :     SAD_16x16_MMX
296 :     SAD_16x16_MMX
297 :     SAD_16x16_MMX
298 : edgomez 851
299 : edgomez 1192 SAD_16x16_MMX
300 :     SAD_16x16_MMX
301 :     SAD_16x16_MMX
302 :     SAD_16x16_MMX
303 :     SAD_16x16_MMX
304 :     SAD_16x16_MMX
305 :     SAD_16x16_MMX
306 :     SAD_16x16_MMX
307 : edgomez 851
308 : edgomez 1192 pmaddwd mm6, [mmx_one] ; collapse
309 :     movq mm7, mm6
310 :     psrlq mm7, 32
311 :     paddd mm6, mm7
312 : edgomez 851
313 : edgomez 1192 movd eax, mm6
314 : edgomez 851
315 : edgomez 1192 ret
316 : edgomez 851
317 : edgomez 1192 ;-----------------------------------------------------------------------------
318 :     ;
319 :     ; uint32_t sad8_mmx(const uint8_t * const cur,
320 :     ; const uint8_t * const ref,
321 :     ; const uint32_t stride);
322 :     ;
323 :     ;-----------------------------------------------------------------------------
324 : edgomez 851
325 : edgomez 1192 ALIGN 16
326 :     sad8_mmx:
327 : edgomez 851
328 : edgomez 1192 mov eax, [esp+ 4] ; Src1
329 :     mov edx, [esp+ 8] ; Src2
330 :     mov ecx, [esp+12] ; Stride
331 : edgomez 851
332 : edgomez 1192 pxor mm6, mm6 ; accum
333 :     pxor mm7, mm7 ; zero
334 : edgomez 851
335 : edgomez 1192 SAD_8x8_MMX
336 :     SAD_8x8_MMX
337 :     SAD_8x8_MMX
338 :     SAD_8x8_MMX
339 : edgomez 851
340 : edgomez 1192 pmaddwd mm6, [mmx_one] ; collapse
341 :     movq mm7, mm6
342 :     psrlq mm7, 32
343 :     paddd mm6, mm7
344 : edgomez 851
345 : edgomez 1192 movd eax, mm6
346 : edgomez 851
347 : edgomez 1192 ret
348 : edgomez 851
349 : edgomez 1192 ;-----------------------------------------------------------------------------
350 :     ;
351 :     ; uint32_t sad16v_mmx(const uint8_t * const cur,
352 :     ; const uint8_t * const ref,
353 :     ; const uint32_t stride,
354 :     ; int32_t *sad);
355 :     ;
356 :     ;-----------------------------------------------------------------------------
357 : edgomez 851
358 : edgomez 1192 ALIGN 16
359 :     sad16v_mmx:
360 : edgomez 851
361 : edgomez 1192 push ebx
362 :     push edi
363 : edgomez 851
364 : edgomez 1192 mov eax, [esp + 8 + 4] ; Src1
365 :     mov edx, [esp + 8 + 8] ; Src2
366 :     mov ecx, [esp + 8 + 12] ; Stride
367 :     mov ebx, [esp + 8 + 16] ; sad ptr
368 : suxen_drol 329
369 : edgomez 1192 pxor mm5, mm5 ; accum
370 :     pxor mm6, mm6 ; accum
371 :     pxor mm7, mm7 ; zero
372 : suxen_drol 329
373 : edgomez 1192 SADV_16x16_MMX
374 :     SADV_16x16_MMX
375 :     SADV_16x16_MMX
376 :     SADV_16x16_MMX
377 :     SADV_16x16_MMX
378 :     SADV_16x16_MMX
379 :     SADV_16x16_MMX
380 :     SADV_16x16_MMX
381 : suxen_drol 329
382 : edgomez 1192 pmaddwd mm5, [mmx_one] ; collapse
383 :     pmaddwd mm6, [mmx_one] ; collapse
384 : suxen_drol 329
385 : edgomez 1192 movq mm2, mm5
386 :     movq mm3, mm6
387 : suxen_drol 329
388 : edgomez 1192 psrlq mm2, 32
389 :     psrlq mm3, 32
390 : suxen_drol 329
391 : edgomez 1192 paddd mm5, mm2
392 :     paddd mm6, mm3
393 : suxen_drol 329
394 : edgomez 1192 movd [ebx], mm5
395 :     movd [ebx + 4], mm6
396 : suxen_drol 329
397 : edgomez 1192 paddd mm5, mm6
398 : suxen_drol 329
399 : edgomez 1192 movd edi, mm5
400 : suxen_drol 329
401 : edgomez 1192 pxor mm5, mm5
402 :     pxor mm6, mm6
403 : suxen_drol 329
404 : edgomez 1192 SADV_16x16_MMX
405 :     SADV_16x16_MMX
406 :     SADV_16x16_MMX
407 :     SADV_16x16_MMX
408 :     SADV_16x16_MMX
409 :     SADV_16x16_MMX
410 :     SADV_16x16_MMX
411 :     SADV_16x16_MMX
412 : suxen_drol 329
413 : edgomez 1192 pmaddwd mm5, [mmx_one] ; collapse
414 :     pmaddwd mm6, [mmx_one] ; collapse
415 : suxen_drol 329
416 : edgomez 1192 movq mm2, mm5
417 :     movq mm3, mm6
418 : suxen_drol 329
419 : edgomez 1192 psrlq mm2, 32
420 :     psrlq mm3, 32
421 : suxen_drol 329
422 : edgomez 1192 paddd mm5, mm2
423 :     paddd mm6, mm3
424 : suxen_drol 329
425 : edgomez 1192 movd [ebx + 8], mm5
426 :     movd [ebx + 12], mm6
427 : suxen_drol 329
428 : edgomez 1192 paddd mm5, mm6
429 : suxen_drol 329
430 : edgomez 1192 movd eax, mm5
431 : suxen_drol 329
432 : edgomez 1192 add eax, edi
433 : suxen_drol 329
434 : edgomez 1192 pop edi
435 :     pop ebx
436 : suxen_drol 329
437 : edgomez 1192 ret
438 : suxen_drol 329
439 : edgomez 1192 ;-----------------------------------------------------------------------------
440 :     ;
441 :     ; uint32_t sad16bi_mmx(const uint8_t * const cur,
442 :     ; const uint8_t * const ref1,
443 :     ; const uint8_t * const ref2,
444 :     ; const uint32_t stride);
445 :     ;
446 :     ;-----------------------------------------------------------------------------
447 : suxen_drol 329
448 : edgomez 1192 ALIGN 16
449 :     sad16bi_mmx:
450 :     push ebx
451 :     mov eax, [esp+4+ 4] ; Src
452 :     mov edx, [esp+4+ 8] ; Ref1
453 :     mov ebx, [esp+4+12] ; Ref2
454 :     mov ecx, [esp+4+16] ; Stride
455 :    
456 :     pxor mm6, mm6 ; accum2
457 :     pxor mm7, mm7
458 :     .Loop
459 :     SADBI_16x16_MMX 0, 0
460 :     SADBI_16x16_MMX 8, 1
461 :     SADBI_16x16_MMX 0, 0
462 :     SADBI_16x16_MMX 8, 1
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 :    
476 :     SADBI_16x16_MMX 0, 0
477 :     SADBI_16x16_MMX 8, 1
478 :     SADBI_16x16_MMX 0, 0
479 :     SADBI_16x16_MMX 8, 1
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 :    
493 :     pmaddwd mm6, [mmx_one] ; collapse
494 :     movq mm7, mm6
495 :     psrlq mm7, 32
496 :     paddd mm6, mm7
497 :    
498 :     movd eax, mm6
499 :     pop ebx
500 :    
501 :     ret
502 :    
503 :     ;-----------------------------------------------------------------------------
504 : suxen_drol 329 ;
505 : edgomez 1192 ; uint32_t sad8bi_mmx(const uint8_t * const cur,
506 :     ; const uint8_t * const ref1,
507 :     ; const uint8_t * const ref2,
508 :     ; const uint32_t stride);
509 : suxen_drol 329 ;
510 : edgomez 1192 ;-----------------------------------------------------------------------------
511 : suxen_drol 329
512 : edgomez 1192 ALIGN 16
513 :     sad8bi_mmx:
514 :     push ebx
515 :     mov eax, [esp+4+ 4] ; Src
516 :     mov edx, [esp+4+ 8] ; Ref1
517 :     mov ebx, [esp+4+12] ; Ref2
518 :     mov ecx, [esp+4+16] ; Stride
519 : Isibaar 262
520 : edgomez 1192 pxor mm6, mm6 ; accum2
521 :     pxor mm7, mm7
522 :     .Loop
523 :     SADBI_16x16_MMX 0, 1
524 :     SADBI_16x16_MMX 0, 1
525 :     SADBI_16x16_MMX 0, 1
526 :     SADBI_16x16_MMX 0, 1
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 : Isibaar 262
532 : edgomez 1192 pmaddwd mm6, [mmx_one] ; collapse
533 :     movq mm7, mm6
534 :     psrlq mm7, 32
535 :     paddd mm6, mm7
536 : Isibaar 262
537 : edgomez 1192 movd eax, mm6
538 :     pop ebx
539 :     ret
540 : Isibaar 262
541 : edgomez 1192 ;-----------------------------------------------------------------------------
542 :     ;
543 :     ; uint32_t dev16_mmx(const uint8_t * const cur,
544 :     ; const uint32_t stride);
545 :     ;
546 :     ;-----------------------------------------------------------------------------
547 :    
548 :     ALIGN 16
549 : Isibaar 262 dev16_mmx:
550 : edgomez 1192 mov eax, [esp+ 4] ; Src
551 :     mov ecx, [esp+ 8] ; Stride
552 : Isibaar 262
553 : edgomez 1192 pxor mm7, mm7 ; zero
554 :     pxor mm5, mm5 ; accum1
555 :     pxor mm6, mm6 ; accum2
556 : Isibaar 262
557 : edgomez 1192 MEAN_16x16_MMX
558 :     MEAN_16x16_MMX
559 :     MEAN_16x16_MMX
560 :     MEAN_16x16_MMX
561 :     MEAN_16x16_MMX
562 :     MEAN_16x16_MMX
563 :     MEAN_16x16_MMX
564 :     MEAN_16x16_MMX
565 : Isibaar 262
566 : edgomez 1192 MEAN_16x16_MMX
567 :     MEAN_16x16_MMX
568 :     MEAN_16x16_MMX
569 :     MEAN_16x16_MMX
570 :     MEAN_16x16_MMX
571 :     MEAN_16x16_MMX
572 :     MEAN_16x16_MMX
573 :     MEAN_16x16_MMX
574 : Isibaar 262
575 : edgomez 1192 paddusw mm6, mm5
576 :     pmaddwd mm6, [mmx_one] ; collapse
577 :     movq mm5, mm6
578 :     psrlq mm5, 32
579 :     paddd mm6, mm5
580 : Isibaar 262
581 : edgomez 1192 psllq mm6, 32 ; blank upper dword
582 :     psrlq mm6, 32 + 8 ; /= (16*16)
583 : Isibaar 262
584 : edgomez 1192 punpckldq mm6, mm6
585 :     packssdw mm6, mm6
586 :    
587 : Isibaar 262 ; mm6 contains the mean
588 :     ; mm5 is the new accum
589 :    
590 : edgomez 1192 pxor mm5, mm5
591 :     mov eax, [esp+ 4] ; Src
592 : Isibaar 262
593 : edgomez 1192 ABS_16x16_MMX
594 :     ABS_16x16_MMX
595 :     ABS_16x16_MMX
596 :     ABS_16x16_MMX
597 :     ABS_16x16_MMX
598 :     ABS_16x16_MMX
599 :     ABS_16x16_MMX
600 :     ABS_16x16_MMX
601 : Isibaar 262
602 : edgomez 1192 ABS_16x16_MMX
603 :     ABS_16x16_MMX
604 :     ABS_16x16_MMX
605 :     ABS_16x16_MMX
606 :     ABS_16x16_MMX
607 :     ABS_16x16_MMX
608 :     ABS_16x16_MMX
609 :     ABS_16x16_MMX
610 : Isibaar 262
611 : edgomez 1192 pmaddwd mm5, [mmx_one] ; collapse
612 :     movq mm6, mm5
613 :     psrlq mm6, 32
614 :     paddd mm6, mm5
615 : Isibaar 262
616 : edgomez 1192 movd eax, mm6
617 :    
618 :     ret

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