From 18964cbfac3214b16e8bb42462b5959b6f406d96 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Wed, 28 Feb 2001 20:32:47 +0000 Subject: [PATCH] Redid the cpu detection with a little help from mpeg2decs code.. Original commit message from CVS: Redid the cpu detection with a little help from mpeg2decs code.. --- gst/gstcpu.c | 41 ++++++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/gst/gstcpu.c b/gst/gstcpu.c index d286bf7487..582bcc43fd 100644 --- a/gst/gstcpu.c +++ b/gst/gstcpu.c @@ -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) {