diff --git a/libavcodec/i386/cputest.c b/libavcodec/i386/cputest.c
index d7c13c3bc382a47ec12abb8536f9331bbbc5e516..f186d95c9db7bad1a925c64b632b9c8358435bc8 100644
--- a/libavcodec/i386/cputest.c
+++ b/libavcodec/i386/cputest.c
@@ -77,6 +77,21 @@ int mm_support(void)
         if (edx & 0x00400000)
             rval |= MM_MMXEXT;
         return rval;
+    } else if (ebx == 0x746e6543 &&
+               edx == 0x48727561 &&
+               ecx == 0x736c7561) {  /*  "CentaurHauls" */
+        /* VIA C3 */
+        cpuid(0x80000000, eax, ebx, ecx, edx);
+        if ((unsigned)eax < 0x80000001)
+            goto inteltest;	
+	cpuid(0x80000001, eax, ebx, ecx, edx);
+	rval = 0;      
+	if( edx & ( 1 << 31) )
+	  rval |= MM_3DNOW;
+	if( edx & ( 1 << 23) )
+	  rval |= MM_MMX;
+	if( edx & ( 1 << 24) )
+	  rval |= MM_MMXEXT;	
     } else if (ebx == 0x69727943 &&
                edx == 0x736e4978 &&
                ecx == 0x64616574) {