diff i386/dsputil_mmx.c @ 296:c1a8a1b4a24b libavcodec

sizeof(s->block) isnt 64*6*2 anymore bugfix mpeg12 decoding optimization
author michaelni
date Thu, 28 Mar 2002 13:41:04 +0000
parents 944632089814
children 9c6f056f0e41
line wrap: on
line diff
--- a/i386/dsputil_mmx.c	Thu Mar 28 04:25:35 2002 +0000
+++ b/i386/dsputil_mmx.c	Thu Mar 28 13:41:04 2002 +0000
@@ -1025,6 +1025,23 @@
   } while(--h);
 }
 
+static void clear_blocks_mmx(DCTELEM *blocks)
+{
+        asm volatile(
+                "pxor %%mm7, %%mm7		\n\t"
+                "movl $-128*6, %%eax		\n\t"
+                "1:				\n\t"
+                "movq %%mm7, (%0, %%eax)	\n\t"
+                "movq %%mm7, 8(%0, %%eax)	\n\t"
+                "movq %%mm7, 16(%0, %%eax)	\n\t"
+                "movq %%mm7, 24(%0, %%eax)	\n\t"
+                "addl $32, %%eax		\n\t"
+                " js 1b				\n\t"
+                : : "r" (((int)blocks)+128*6)
+                : "%eax"
+        );
+}
+
 static void just_return() { return; }
 
 void dsputil_init_mmx(void)
@@ -1049,7 +1066,8 @@
         get_pixels = get_pixels_mmx;
         put_pixels_clamped = put_pixels_clamped_mmx;
         add_pixels_clamped = add_pixels_clamped_mmx;
-        
+        clear_blocks= clear_blocks_mmx;
+       
         pix_abs16x16     = pix_abs16x16_mmx;
         pix_abs16x16_x2  = pix_abs16x16_x2_mmx;
         pix_abs16x16_y2  = pix_abs16x16_y2_mmx;