Mercurial > mplayer.hg
comparison cpudetect.c @ 8860:778989dba3a2
cpu cache line length detection
from mplayerxp (Nick Kurshev <nickols_k@mail.ru>)
author | arpi |
---|---|
date | Thu, 09 Jan 2003 18:39:09 +0000 |
parents | 9b73b801af55 |
children | c428933c7e54 |
comparison
equal
deleted
inserted
replaced
8859:fd13e4c4f323 | 8860:778989dba3a2 |
---|---|
96 void GetCpuCaps( CpuCaps *caps) | 96 void GetCpuCaps( CpuCaps *caps) |
97 { | 97 { |
98 unsigned int regs[4]; | 98 unsigned int regs[4]; |
99 unsigned int regs2[4]; | 99 unsigned int regs2[4]; |
100 | 100 |
101 memset(caps, 0, sizeof(*caps)); | |
101 caps->isX86=1; | 102 caps->isX86=1; |
102 | 103 caps->cl_size=32; /* default */ |
103 memset(caps, 0, sizeof(*caps)); | |
104 if (!has_cpuid()) { | 104 if (!has_cpuid()) { |
105 mp_msg(MSGT_CPUDETECT,MSGL_WARN,"CPUID not supported!??? (maybe an old 486?)\n"); | 105 mp_msg(MSGT_CPUDETECT,MSGL_WARN,"CPUID not supported!??? (maybe an old 486?)\n"); |
106 return; | 106 return; |
107 } | 107 } |
108 do_cpuid(0x00000000, regs); // get _max_ cpuid level and vendor name | 108 do_cpuid(0x00000000, regs); // get _max_ cpuid level and vendor name |
109 mp_msg(MSGT_CPUDETECT,MSGL_V,"CPU vendor name: %.4s%.4s%.4s max cpuid level: %d\n", | 109 mp_msg(MSGT_CPUDETECT,MSGL_V,"CPU vendor name: %.4s%.4s%.4s max cpuid level: %d\n", |
110 (char*) (regs+1),(char*) (regs+3),(char*) (regs+2), regs[0]); | 110 (char*) (regs+1),(char*) (regs+3),(char*) (regs+2), regs[0]); |
111 if (regs[0]>=0x00000001) | 111 if (regs[0]>=0x00000001) |
112 { | 112 { |
113 char *tmpstr; | 113 char *tmpstr; |
114 unsigned cl_size; | |
114 | 115 |
115 do_cpuid(0x00000001, regs2); | 116 do_cpuid(0x00000001, regs2); |
116 | 117 |
117 tmpstr=GetCpuFriendlyName(regs, regs2); | 118 tmpstr=GetCpuFriendlyName(regs, regs2); |
118 mp_msg(MSGT_CPUDETECT,MSGL_INFO,"CPU: %s ",tmpstr); | 119 mp_msg(MSGT_CPUDETECT,MSGL_INFO,"CPU: %s ",tmpstr); |
130 // general feature flags: | 131 // general feature flags: |
131 caps->hasMMX = (regs2[3] & (1 << 23 )) >> 23; // 0x0800000 | 132 caps->hasMMX = (regs2[3] & (1 << 23 )) >> 23; // 0x0800000 |
132 caps->hasSSE = (regs2[3] & (1 << 25 )) >> 25; // 0x2000000 | 133 caps->hasSSE = (regs2[3] & (1 << 25 )) >> 25; // 0x2000000 |
133 caps->hasSSE2 = (regs2[3] & (1 << 26 )) >> 26; // 0x4000000 | 134 caps->hasSSE2 = (regs2[3] & (1 << 26 )) >> 26; // 0x4000000 |
134 caps->hasMMX2 = caps->hasSSE; // SSE cpus supports mmxext too | 135 caps->hasMMX2 = caps->hasSSE; // SSE cpus supports mmxext too |
136 cl_size = ((regs2[1] >> 8) & 0xFF)*8; | |
137 if(cl_size) caps->cl_size = cl_size; | |
135 } | 138 } |
136 do_cpuid(0x80000000, regs); | 139 do_cpuid(0x80000000, regs); |
137 if (regs[0]>=0x80000001) { | 140 if (regs[0]>=0x80000001) { |
138 mp_msg(MSGT_CPUDETECT,MSGL_V,"extended cpuid-level: %d\n",regs[0]&0x7FFFFFFF); | 141 mp_msg(MSGT_CPUDETECT,MSGL_V,"extended cpuid-level: %d\n",regs[0]&0x7FFFFFFF); |
139 do_cpuid(0x80000001, regs2); | 142 do_cpuid(0x80000001, regs2); |
140 caps->hasMMX |= (regs2[3] & (1 << 23 )) >> 23; // 0x0800000 | 143 caps->hasMMX |= (regs2[3] & (1 << 23 )) >> 23; // 0x0800000 |
141 caps->hasMMX2 |= (regs2[3] & (1 << 22 )) >> 22; // 0x400000 | 144 caps->hasMMX2 |= (regs2[3] & (1 << 22 )) >> 22; // 0x400000 |
142 caps->has3DNow = (regs2[3] & (1 << 31 )) >> 31; //0x80000000 | 145 caps->has3DNow = (regs2[3] & (1 << 31 )) >> 31; //0x80000000 |
143 caps->has3DNowExt = (regs2[3] & (1 << 30 )) >> 30; | 146 caps->has3DNowExt = (regs2[3] & (1 << 30 )) >> 30; |
144 } | 147 } |
148 if(regs[0]>=0x80000006) | |
149 { | |
150 do_cpuid(0x80000006, regs2); | |
151 mp_msg(MSGT_CPUDETECT,MSGL_V,"extended cache-info: %d\n",regs2[2]&0x7FFFFFFF); | |
152 caps->cl_size = regs2[2] & 0xFF; | |
153 } | |
154 mp_msg(MSGT_CPUDETECT,MSGL_INFO,"Detected cache-line size is %u bytes\n",caps->cl_size); | |
145 #if 0 | 155 #if 0 |
146 mp_msg(MSGT_CPUDETECT,MSGL_INFO,"cpudetect: MMX=%d MMX2=%d SSE=%d SSE2=%d 3DNow=%d 3DNowExt=%d\n", | 156 mp_msg(MSGT_CPUDETECT,MSGL_INFO,"cpudetect: MMX=%d MMX2=%d SSE=%d SSE2=%d 3DNow=%d 3DNowExt=%d\n", |
147 gCpuCaps.hasMMX, | 157 gCpuCaps.hasMMX, |
148 gCpuCaps.hasMMX2, | 158 gCpuCaps.hasMMX2, |
149 gCpuCaps.hasSSE, | 159 gCpuCaps.hasSSE, |