@@ -283,7 +283,7 @@ int get_vendor(void){
283283 if (!strcmp (vendor , "CyrixInstead" )) return VENDOR_CYRIX ;
284284 if (!strcmp (vendor , "NexGenDriven" )) return VENDOR_NEXGEN ;
285285 if (!strcmp (vendor , "CentaurHauls" )) return VENDOR_CENTAUR ;
286- if (!strcmp (vendor , " Shanghai " )) return VENDOR_CENTAUR ;
286+ if (!strcmp (vendor , " Shanghai " )) return VENDOR_ZHAOXIN ;
287287 if (!strcmp (vendor , "RiseRiseRise" )) return VENDOR_RISE ;
288288 if (!strcmp (vendor , " SiS SiS SiS" )) return VENDOR_SIS ;
289289 if (!strcmp (vendor , "GenuineTMx86" )) return VENDOR_TRANSMETA ;
@@ -1067,7 +1067,8 @@ int get_cacheinfo(int type, cache_info_t *cacheinfo){
10671067
10681068 if ((get_vendor () == VENDOR_AMD ) ||
10691069 (get_vendor () == VENDOR_HYGON ) ||
1070- (get_vendor () == VENDOR_CENTAUR )) {
1070+ (get_vendor () == VENDOR_CENTAUR ) ||
1071+ (get_vendor () == VENDOR_ZHAOXIN )) {
10711072 cpuid (0x80000005 , & eax , & ebx , & ecx , & edx );
10721073
10731074 LDTB .size = 4096 ;
@@ -1190,14 +1191,15 @@ int get_cacheinfo(int type, cache_info_t *cacheinfo){
11901191
11911192int get_cpuname (void ){
11921193
1193- int family , exfamily , model , vendor , exmodel ;
1194+ int family , exfamily , model , vendor , exmodel , stepping ;
11941195
11951196 if (!have_cpuid ()) return CPUTYPE_80386 ;
11961197
11971198 family = get_cputype (GET_FAMILY );
11981199 exfamily = get_cputype (GET_EXFAMILY );
11991200 model = get_cputype (GET_MODEL );
12001201 exmodel = get_cputype (GET_EXMODEL );
1202+ stepping = get_cputype (GET_STEPPING );
12011203
12021204 vendor = get_vendor ();
12031205
@@ -1628,15 +1630,20 @@ int get_cpuname(void){
16281630 switch (family ) {
16291631 case 0x5 :
16301632 return CPUTYPE_CENTAURC6 ;
1631- break ;
16321633 case 0x6 :
1633- return CPUTYPE_NANO ;
1634- break ;
1635- case 0x7 :
1634+ if (model == 0xf && stepping < 0xe )
1635+ return CPUTYPE_NANO ;
16361636 return CPUTYPE_NEHALEM ;
1637- break ;
1637+ default :
1638+ if (family >= 0x7 )
1639+ return CPUTYPE_NEHALEM ;
1640+ else
1641+ return CPUTYPE_VIAC3 ;
16381642 }
1639- return CPUTYPE_VIAC3 ;
1643+ }
1644+
1645+ if (vendor == VENDOR_ZHAOXIN ){
1646+ return CPUTYPE_NEHALEM ;
16401647 }
16411648
16421649 if (vendor == VENDOR_RISE ){
@@ -1869,14 +1876,15 @@ char *get_lower_cpunamechar(void){
18691876
18701877int get_coretype (void ){
18711878
1872- int family , exfamily , model , exmodel , vendor ;
1879+ int family , exfamily , model , exmodel , vendor , stepping ;
18731880
18741881 if (!have_cpuid ()) return CORE_80486 ;
18751882
18761883 family = get_cputype (GET_FAMILY );
18771884 exfamily = get_cputype (GET_EXFAMILY );
18781885 model = get_cputype (GET_MODEL );
18791886 exmodel = get_cputype (GET_EXMODEL );
1887+ stepping = get_cputype (GET_STEPPING );
18801888
18811889 vendor = get_vendor ();
18821890
@@ -2286,13 +2294,19 @@ int get_coretype(void){
22862294 if (vendor == VENDOR_CENTAUR ) {
22872295 switch (family ) {
22882296 case 0x6 :
2289- return CORE_NANO ;
2290- break ;
2291- case 0x7 :
2297+ if (model == 0xf && stepping < 0xe )
2298+ return CORE_NANO ;
22922299 return CORE_NEHALEM ;
2293- break ;
2300+ default :
2301+ if (family >= 0x7 )
2302+ return CORE_NEHALEM ;
2303+ else
2304+ return CORE_VIAC3 ;
22942305 }
2295- return CORE_VIAC3 ;
2306+ }
2307+
2308+ if (vendor == VENDOR_ZHAOXIN ) {
2309+ return CORE_NEHALEM ;
22962310 }
22972311
22982312 return CORE_UNKNOWN ;
0 commit comments