@@ -283,7 +283,7 @@ int get_vendor(void){
283
283
if (!strcmp (vendor , "CyrixInstead" )) return VENDOR_CYRIX ;
284
284
if (!strcmp (vendor , "NexGenDriven" )) return VENDOR_NEXGEN ;
285
285
if (!strcmp (vendor , "CentaurHauls" )) return VENDOR_CENTAUR ;
286
- if (!strcmp (vendor , " Shanghai " )) return VENDOR_CENTAUR ;
286
+ if (!strcmp (vendor , " Shanghai " )) return VENDOR_ZHAOXIN ;
287
287
if (!strcmp (vendor , "RiseRiseRise" )) return VENDOR_RISE ;
288
288
if (!strcmp (vendor , " SiS SiS SiS" )) return VENDOR_SIS ;
289
289
if (!strcmp (vendor , "GenuineTMx86" )) return VENDOR_TRANSMETA ;
@@ -1067,7 +1067,8 @@ int get_cacheinfo(int type, cache_info_t *cacheinfo){
1067
1067
1068
1068
if ((get_vendor () == VENDOR_AMD ) ||
1069
1069
(get_vendor () == VENDOR_HYGON ) ||
1070
- (get_vendor () == VENDOR_CENTAUR )) {
1070
+ (get_vendor () == VENDOR_CENTAUR ) ||
1071
+ (get_vendor () == VENDOR_ZHAOXIN )) {
1071
1072
cpuid (0x80000005 , & eax , & ebx , & ecx , & edx );
1072
1073
1073
1074
LDTB .size = 4096 ;
@@ -1190,14 +1191,15 @@ int get_cacheinfo(int type, cache_info_t *cacheinfo){
1190
1191
1191
1192
int get_cpuname (void ){
1192
1193
1193
- int family , exfamily , model , vendor , exmodel ;
1194
+ int family , exfamily , model , vendor , exmodel , stepping ;
1194
1195
1195
1196
if (!have_cpuid ()) return CPUTYPE_80386 ;
1196
1197
1197
1198
family = get_cputype (GET_FAMILY );
1198
1199
exfamily = get_cputype (GET_EXFAMILY );
1199
1200
model = get_cputype (GET_MODEL );
1200
1201
exmodel = get_cputype (GET_EXMODEL );
1202
+ stepping = get_cputype (GET_STEPPING );
1201
1203
1202
1204
vendor = get_vendor ();
1203
1205
@@ -1628,15 +1630,20 @@ int get_cpuname(void){
1628
1630
switch (family ) {
1629
1631
case 0x5 :
1630
1632
return CPUTYPE_CENTAURC6 ;
1631
- break ;
1632
1633
case 0x6 :
1633
- return CPUTYPE_NANO ;
1634
- break ;
1635
- case 0x7 :
1634
+ if (model == 0xf && stepping < 0xe )
1635
+ return CPUTYPE_NANO ;
1636
1636
return CPUTYPE_NEHALEM ;
1637
- break ;
1637
+ default :
1638
+ if (family >= 0x7 )
1639
+ return CPUTYPE_NEHALEM ;
1640
+ else
1641
+ return CPUTYPE_VIAC3 ;
1638
1642
}
1639
- return CPUTYPE_VIAC3 ;
1643
+ }
1644
+
1645
+ if (vendor == VENDOR_ZHAOXIN ){
1646
+ return CPUTYPE_NEHALEM ;
1640
1647
}
1641
1648
1642
1649
if (vendor == VENDOR_RISE ){
@@ -1869,14 +1876,15 @@ char *get_lower_cpunamechar(void){
1869
1876
1870
1877
int get_coretype (void ){
1871
1878
1872
- int family , exfamily , model , exmodel , vendor ;
1879
+ int family , exfamily , model , exmodel , vendor , stepping ;
1873
1880
1874
1881
if (!have_cpuid ()) return CORE_80486 ;
1875
1882
1876
1883
family = get_cputype (GET_FAMILY );
1877
1884
exfamily = get_cputype (GET_EXFAMILY );
1878
1885
model = get_cputype (GET_MODEL );
1879
1886
exmodel = get_cputype (GET_EXMODEL );
1887
+ stepping = get_cputype (GET_STEPPING );
1880
1888
1881
1889
vendor = get_vendor ();
1882
1890
@@ -2286,13 +2294,19 @@ int get_coretype(void){
2286
2294
if (vendor == VENDOR_CENTAUR ) {
2287
2295
switch (family ) {
2288
2296
case 0x6 :
2289
- return CORE_NANO ;
2290
- break ;
2291
- case 0x7 :
2297
+ if (model == 0xf && stepping < 0xe )
2298
+ return CORE_NANO ;
2292
2299
return CORE_NEHALEM ;
2293
- break ;
2300
+ default :
2301
+ if (family >= 0x7 )
2302
+ return CORE_NEHALEM ;
2303
+ else
2304
+ return CORE_VIAC3 ;
2294
2305
}
2295
- return CORE_VIAC3 ;
2306
+ }
2307
+
2308
+ if (vendor == VENDOR_ZHAOXIN ) {
2309
+ return CORE_NEHALEM ;
2296
2310
}
2297
2311
2298
2312
return CORE_UNKNOWN ;
0 commit comments