Redid the cpu detection with a little help from mpeg2decs code..
authorWim Taymans <wim.taymans@gmail.com>
Wed, 28 Feb 2001 20:32:47 +0000 (20:32 +0000)
committerWim Taymans <wim.taymans@gmail.com>
Wed, 28 Feb 2001 20:32:47 +0000 (20:32 +0000)
Original commit message from CVS:
Redid the cpu detection with a little help from mpeg2decs code..

gst/gstcpu.c

index d286bf7..582bcc4 100644 (file)
@@ -48,31 +48,46 @@ static gchar *stringcat (gchar *a,gchar *b) {
   return c;
 }
 
+
 void 
 _gst_cpu_initialize (void) 
 {
   gchar *featurelist = NULL;
+  gboolean AMD;
 
   long eax=0, ebx=0, ecx=0, edx=0;
 
+  gst_cpuid(0, &eax, &ebx, &ecx, &edx);
+
+  AMD = (ebx == 0x68747541) && (ecx == 0x444d4163) && (edx == 0x69746e65);
+
   gst_cpuid(1, &eax, &ebx, &ecx, &edx);
 
   if (edx & (1<<23)) {
     _gst_cpu_flags |= GST_CPU_FLAG_MMX;
     featurelist = stringcat(featurelist,"MMX ");
-  }
-  if (edx & (1<<25)) {
-    _gst_cpu_flags |= GST_CPU_FLAG_SSE;
-    _gst_cpu_flags |= GST_CPU_FLAG_MMXEXT;
-    featurelist = stringcat(featurelist,"SSE ");
-  }
-  if (edx & (1<<24)) {
-    _gst_cpu_flags |= GST_CPU_FLAG_MMXEXT;
-    featurelist = stringcat(featurelist,"MMXEXT ");
-  }
-  if (edx & (1<<31)) {
-    _gst_cpu_flags |= GST_CPU_FLAG_3DNOW;
-    featurelist = stringcat(featurelist,"3DNOW ");
+    
+    if (edx & (1<<25)) {
+      _gst_cpu_flags |= GST_CPU_FLAG_SSE;
+      _gst_cpu_flags |= GST_CPU_FLAG_MMXEXT;
+      featurelist = stringcat(featurelist,"SSE ");
+    }
+
+    gst_cpuid(0x80000000, &eax, &ebx, &ecx, &edx);
+
+    if (eax >= 0x80000001) {
+
+      gst_cpuid(0x80000001, &eax, &ebx, &ecx, &edx);
+
+      if (edx & (1<<31)) {
+        _gst_cpu_flags |= GST_CPU_FLAG_3DNOW;
+        featurelist = stringcat(featurelist,"3DNOW ");
+      }
+      if (AMD && (edx & (1<<22))) {
+        _gst_cpu_flags |= GST_CPU_FLAG_MMXEXT;
+        featurelist = stringcat(featurelist,"MMXEXT ");
+      }
+    }
   }
 
   if (!_gst_cpu_flags) {