[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