[MPlayer-cvslog] CVS: main cpudetect.c, 1.44, 1.45 cpudetect.h, 1.12, 1.13

Guillaume Poirier CVS syncmail at mplayerhq.hu
Wed May 17 23:10:20 CEST 2006


CVS change done by Guillaume Poirier CVS

Update of /cvsroot/mplayer/main
In directory mail:/var2/tmp/cvs-serv22365

Modified Files:
	cpudetect.c cpudetect.h 
Log Message:
Retrieve CPU built-in namestring, and if it exists, print it during cpu detection;
it it doesn't exist, fallback to the cpu table.


Index: cpudetect.c
===================================================================
RCS file: /cvsroot/mplayer/main/cpudetect.c,v
retrieving revision 1.44
retrieving revision 1.45
diff -u -r1.44 -r1.45
--- cpudetect.c	28 Feb 2006 23:24:38 -0000	1.44
+++ cpudetect.c	17 May 2006 21:10:11 -0000	1.45
@@ -118,12 +118,13 @@
 			(char*) (regs+1),(char*) (regs+3),(char*) (regs+2), regs[0]);
 	if (regs[0]>=0x00000001)
 	{
-		char *tmpstr;
+		char *tmpstr, *ptmpstr;
 		unsigned cl_size;
 
 		do_cpuid(0x00000001, regs2);
 
 		caps->cpuType=(regs2[0] >> 8)&0xf;
+		caps->cpuModel=(regs2[0] >> 4)&0xf;
 
 // see AMD64 Architecture Programmer's Manual, Volume 3: General-purpose and
 // System Instructions, Table 3-2: Effective family computation, page 120.
@@ -131,6 +132,9 @@
 		    // use extended family (P4, IA64, K8)
 		    caps->cpuType=0xf+((regs2[0]>>20)&255);
 		}
+		if(caps->cpuType==0xf || caps->cpuType==6)
+		    caps->cpuModel |= ((regs2[0]>>16)&0xf) << 4;
+
 		caps->cpuStepping=regs2[0] & 0xf;
 
 		// general feature flags:
@@ -142,11 +146,13 @@
 		cl_size = ((regs2[1] >> 8) & 0xFF)*8;
 		if(cl_size) caps->cl_size = cl_size;
 
-		tmpstr=GetCpuFriendlyName(regs, regs2);
+		ptmpstr=tmpstr=GetCpuFriendlyName(regs, regs2);
+		while(*ptmpstr == ' ')
+		    ptmpstr++;
 		mp_msg(MSGT_CPUDETECT,MSGL_INFO,"CPU: %s ",tmpstr);
 		free(tmpstr);
-		mp_msg(MSGT_CPUDETECT,MSGL_INFO,"(Family: %d, Stepping: %d)\n",
-		    caps->cpuType, caps->cpuStepping);
+		mp_msg(MSGT_CPUDETECT,MSGL_INFO,"(Family: %d, Model: %d, Stepping: %d)\n",
+		    caps->cpuType, caps->cpuModel, caps->cpuStepping);
 
 	}
 	do_cpuid(0x80000000, regs);
@@ -225,7 +231,7 @@
 
 char *GetCpuFriendlyName(unsigned int regs[], unsigned int regs2[]){
 #include "cputable.h" /* get cpuname and cpuvendors */
-	char vendor[17];
+	char vendor[13];
 	char *retname;
 	int i;
 
@@ -236,6 +242,19 @@
 
 	sprintf(vendor,"%.4s%.4s%.4s",(char*)(regs+1),(char*)(regs+3),(char*)(regs+2));
 
+	do_cpuid(0x80000000,regs);
+	if (regs[0] >= 0x80000004)
+	{
+		// CPU has built-in namestring
+		retname[0] = '\0';
+		for (i = 0x80000002; i <= 0x80000004; i++)
+		{
+			do_cpuid(i, regs);
+			strncat(retname, (char*)regs, 16);
+		}
+		return retname;
+	}
+
 	for(i=0; i<MAX_VENDORS; i++){
 		if(!strcmp(cpuvendors[i].string,vendor)){
 			if(cpuname[i][CPUID_FAMILY][CPUID_MODEL]){
@@ -495,6 +514,7 @@
 void GetCpuCaps( CpuCaps *caps)
 {
 	caps->cpuType=0;
+	caps->cpuModel=0;
 	caps->cpuStepping=0;
 	caps->hasMMX=0;
 	caps->hasMMX2=0;

Index: cpudetect.h
===================================================================
RCS file: /cvsroot/mplayer/main/cpudetect.h,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- cpudetect.h	6 May 2006 01:53:07 -0000	1.12
+++ cpudetect.h	17 May 2006 21:10:11 -0000	1.13
@@ -36,6 +36,7 @@
 
 typedef struct cpucaps_s {
 	int cpuType;
+	int cpuModel;
 	int cpuStepping;
 	int hasMMX;
 	int hasMMX2;




More information about the MPlayer-cvslog mailing list