Merge a31511dcea
into a9594e8072
This commit is contained in:
commit
6204d8596d
207
cpuid_x86.c
207
cpuid_x86.c
|
@ -1250,64 +1250,70 @@ int get_cpuname(void){
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vendor == VENDOR_AMD){
|
if (vendor == VENDOR_AMD){
|
||||||
switch (family) {
|
/* fprintf(stderr, "Family: %x exfamily: %x model: %x exmodel: %x\n", family, exfamily, model, exmodel ); */
|
||||||
case 0x4:
|
switch (family) {
|
||||||
return CPUTYPE_AMD5X86;
|
case 0x4:
|
||||||
case 0x5:
|
return CPUTYPE_AMD5X86;
|
||||||
return CPUTYPE_AMDK6;
|
case 0x5:
|
||||||
case 0x6:
|
return CPUTYPE_AMDK6;
|
||||||
return CPUTYPE_ATHLON;
|
case 0x6:
|
||||||
case 0xf:
|
return CPUTYPE_ATHLON;
|
||||||
switch (exfamily) {
|
case 0xf:
|
||||||
case 0:
|
switch (exfamily) {
|
||||||
case 2:
|
case 0:
|
||||||
return CPUTYPE_OPTERON;
|
case 2:
|
||||||
case 1:
|
return CPUTYPE_OPTERON;
|
||||||
case 3:
|
case 1:
|
||||||
case 10:
|
case 3:
|
||||||
return CPUTYPE_BARCELONA;
|
case 10:
|
||||||
case 6:
|
return CPUTYPE_BARCELONA;
|
||||||
switch (model) {
|
case 6:
|
||||||
case 1:
|
switch (model) {
|
||||||
//AMD Bulldozer Opteron 6200 / Opteron 4200 / AMD FX-Series
|
case 1:
|
||||||
if(support_avx())
|
//AMD Bulldozer Opteron 6200 / Opteron 4200 / AMD FX-Series
|
||||||
return CPUTYPE_BULLDOZER;
|
if(support_avx())
|
||||||
else
|
return CPUTYPE_BULLDOZER;
|
||||||
return CPUTYPE_BARCELONA; //OS don't support AVX.
|
else
|
||||||
case 2: //AMD Piledriver
|
return CPUTYPE_BARCELONA; //OS don't support AVX.
|
||||||
case 3: //AMD Richland
|
case 2: //AMD Piledriver
|
||||||
if(support_avx())
|
case 3: //AMD Richland
|
||||||
return CPUTYPE_PILEDRIVER;
|
if(support_avx())
|
||||||
else
|
return CPUTYPE_PILEDRIVER;
|
||||||
return CPUTYPE_BARCELONA; //OS don't support AVX.
|
else
|
||||||
case 0:
|
return CPUTYPE_BARCELONA; //OS don't support AVX.
|
||||||
switch(exmodel){
|
case 5: // EXCAVATOR
|
||||||
case 1: //AMD Trinity
|
if(support_avx())
|
||||||
if(support_avx())
|
return CPUTYPE_EXCAVATOR;
|
||||||
return CPUTYPE_PILEDRIVER;
|
else
|
||||||
else
|
return CPUTYPE_BARCELONA; //OS don't support AVX.
|
||||||
return CPUTYPE_BARCELONA; //OS don't support AVX.
|
case 0:
|
||||||
case 3:
|
switch(exmodel){
|
||||||
if(support_avx())
|
case 1: //AMD Trinity
|
||||||
return CPUTYPE_STEAMROLLER;
|
if(support_avx())
|
||||||
else
|
return CPUTYPE_PILEDRIVER;
|
||||||
return CPUTYPE_BARCELONA; //OS don't support AVX.
|
else
|
||||||
|
return CPUTYPE_BARCELONA; //OS don't support AVX.
|
||||||
|
case 3:
|
||||||
|
if(support_avx())
|
||||||
|
return CPUTYPE_STEAMROLLER;
|
||||||
|
else
|
||||||
|
return CPUTYPE_BARCELONA; //OS don't support AVX.
|
||||||
|
|
||||||
case 6:
|
case 6:
|
||||||
if(support_avx())
|
if(support_avx())
|
||||||
return CPUTYPE_EXCAVATOR;
|
return CPUTYPE_EXCAVATOR;
|
||||||
else
|
else
|
||||||
return CPUTYPE_BARCELONA; //OS don't support AVX.
|
return CPUTYPE_BARCELONA; //OS don't support AVX.
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
return CPUTYPE_BOBCAT;
|
return CPUTYPE_BOBCAT;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
return CPUTYPE_AMD_UNKNOWN;
|
||||||
}
|
|
||||||
return CPUTYPE_AMD_UNKNOWN;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vendor == VENDOR_CYRIX){
|
if (vendor == VENDOR_CYRIX){
|
||||||
|
@ -1767,52 +1773,57 @@ int get_coretype(void){
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vendor == VENDOR_AMD){
|
if (vendor == VENDOR_AMD){
|
||||||
if (family <= 0x5) return CORE_80486;
|
if (family <= 0x5) return CORE_80486;
|
||||||
if (family <= 0xe) return CORE_ATHLON;
|
if (family <= 0xe) return CORE_ATHLON;
|
||||||
if (family == 0xf){
|
if (family == 0xf){
|
||||||
if ((exfamily == 0) || (exfamily == 2)) return CORE_OPTERON;
|
if ((exfamily == 0) || (exfamily == 2)) return CORE_OPTERON;
|
||||||
else if (exfamily == 5) return CORE_BOBCAT;
|
else if (exfamily == 5) return CORE_BOBCAT;
|
||||||
else if (exfamily == 6) {
|
else if (exfamily == 6) {
|
||||||
switch (model) {
|
switch (model) {
|
||||||
case 1:
|
case 1:
|
||||||
//AMD Bulldozer Opteron 6200 / Opteron 4200 / AMD FX-Series
|
//AMD Bulldozer Opteron 6200 / Opteron 4200 / AMD FX-Series
|
||||||
if(support_avx())
|
if(support_avx())
|
||||||
return CORE_BULLDOZER;
|
return CORE_BULLDOZER;
|
||||||
else
|
else
|
||||||
return CORE_BARCELONA; //OS don't support AVX.
|
return CORE_BARCELONA; //OS don't support AVX.
|
||||||
case 2: //AMD Piledriver
|
case 2: //AMD Piledriver
|
||||||
case 3: //AMD Richland
|
case 3: //AMD Richland
|
||||||
if(support_avx())
|
if(support_avx())
|
||||||
return CORE_PILEDRIVER;
|
return CORE_PILEDRIVER;
|
||||||
else
|
else
|
||||||
return CORE_BARCELONA; //OS don't support AVX.
|
return CORE_BARCELONA; //OS don't support AVX.
|
||||||
|
case 5:
|
||||||
case 0:
|
if(support_avx())
|
||||||
switch(exmodel){
|
return CORE_EXCAVATOR;
|
||||||
case 1: //AMD Trinity
|
else
|
||||||
if(support_avx())
|
return CORE_BARCELONA; //OS don't support AVX.
|
||||||
return CORE_PILEDRIVER;
|
|
||||||
else
|
|
||||||
return CORE_BARCELONA; //OS don't support AVX.
|
|
||||||
|
|
||||||
case 3:
|
case 0:
|
||||||
if(support_avx())
|
switch(exmodel){
|
||||||
return CORE_STEAMROLLER;
|
case 1: //AMD Trinity
|
||||||
else
|
if(support_avx())
|
||||||
return CORE_BARCELONA; //OS don't support AVX.
|
return CORE_PILEDRIVER;
|
||||||
|
else
|
||||||
|
return CORE_BARCELONA; //OS don't support AVX.
|
||||||
|
|
||||||
case 6:
|
case 3:
|
||||||
if(support_avx())
|
if(support_avx())
|
||||||
return CORE_EXCAVATOR;
|
return CORE_STEAMROLLER;
|
||||||
else
|
else
|
||||||
return CORE_BARCELONA; //OS don't support AVX.
|
return CORE_BARCELONA; //OS don't support AVX.
|
||||||
}
|
|
||||||
break;
|
case 6:
|
||||||
}
|
if(support_avx())
|
||||||
|
return CORE_EXCAVATOR;
|
||||||
|
else
|
||||||
|
return CORE_BARCELONA; //OS don't support AVX.
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}else return CORE_BARCELONA;
|
}else return CORE_BARCELONA;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vendor == VENDOR_CENTAUR) {
|
if (vendor == VENDOR_CENTAUR) {
|
||||||
|
|
|
@ -318,75 +318,83 @@ static gotoblas_t *get_coretype(void){
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vendor == VENDOR_AMD){
|
if (vendor == VENDOR_AMD){
|
||||||
if (family <= 0xe) {
|
if (family <= 0xe) {
|
||||||
// Verify that CPU has 3dnow and 3dnowext before claiming it is Athlon
|
// Verify that CPU has 3dnow and 3dnowext before claiming it is Athlon
|
||||||
cpuid(0x80000000, &eax, &ebx, &ecx, &edx);
|
cpuid(0x80000000, &eax, &ebx, &ecx, &edx);
|
||||||
if ( (eax & 0xffff) >= 0x01) {
|
if ( (eax & 0xffff) >= 0x01) {
|
||||||
cpuid(0x80000001, &eax, &ebx, &ecx, &edx);
|
cpuid(0x80000001, &eax, &ebx, &ecx, &edx);
|
||||||
if ((edx & (1 << 30)) == 0 || (edx & (1 << 31)) == 0)
|
if ((edx & (1 << 30)) == 0 || (edx & (1 << 31)) == 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
return &gotoblas_ATHLON;
|
return &gotoblas_ATHLON;
|
||||||
}
|
}
|
||||||
if (family == 0xf){
|
if (family == 0xf){
|
||||||
if ((exfamily == 0) || (exfamily == 2)) {
|
if ((exfamily == 0) || (exfamily == 2)) {
|
||||||
if (ecx & (1 << 0)) return &gotoblas_OPTERON_SSE3;
|
if (ecx & (1 << 0)) return &gotoblas_OPTERON_SSE3;
|
||||||
else return &gotoblas_OPTERON;
|
else return &gotoblas_OPTERON;
|
||||||
} else if (exfamily == 5) {
|
} else if (exfamily == 5) {
|
||||||
return &gotoblas_BOBCAT;
|
return &gotoblas_BOBCAT;
|
||||||
} else if (exfamily == 6) {
|
} else if (exfamily == 6) {
|
||||||
if(model == 1){
|
if(model == 1){
|
||||||
//AMD Bulldozer Opteron 6200 / Opteron 4200 / AMD FX-Series
|
//AMD Bulldozer Opteron 6200 / Opteron 4200 / AMD FX-Series
|
||||||
if(support_avx())
|
if(support_avx())
|
||||||
return &gotoblas_BULLDOZER;
|
return &gotoblas_BULLDOZER;
|
||||||
else{
|
else{
|
||||||
openblas_warning(FALLBACK_VERBOSE, BARCELONA_FALLBACK);
|
openblas_warning(FALLBACK_VERBOSE, BARCELONA_FALLBACK);
|
||||||
return &gotoblas_BARCELONA; //OS doesn't support AVX. Use old kernels.
|
return &gotoblas_BARCELONA; //OS doesn't support AVX. Use old kernels.
|
||||||
}
|
}
|
||||||
}else if(model == 2 || model == 3){
|
}else if(model == 2 || model == 3){
|
||||||
//AMD Bulldozer Opteron 6300 / Opteron 4300 / Opteron 3300
|
//AMD Bulldozer Opteron 6300 / Opteron 4300 / Opteron 3300
|
||||||
if(support_avx())
|
if(support_avx())
|
||||||
return &gotoblas_PILEDRIVER;
|
return &gotoblas_PILEDRIVER;
|
||||||
else{
|
else{
|
||||||
openblas_warning(FALLBACK_VERBOSE, BARCELONA_FALLBACK);
|
openblas_warning(FALLBACK_VERBOSE, BARCELONA_FALLBACK);
|
||||||
return &gotoblas_BARCELONA; //OS doesn't support AVX. Use old kernels.
|
return &gotoblas_BARCELONA; //OS doesn't support AVX. Use old kernels.
|
||||||
}
|
}
|
||||||
}else if(model == 0){
|
}else if(model == 5) { // EXCAVATOR
|
||||||
if (exmodel == 1) {
|
if(support_avx())
|
||||||
//AMD Trinity
|
return &gotoblas_EXCAVATOR;
|
||||||
if(support_avx())
|
else{
|
||||||
return &gotoblas_PILEDRIVER;
|
openblas_warning(FALLBACK_VERBOSE, BARCELONA_FALLBACK);
|
||||||
else{
|
return &gotoblas_BARCELONA; //OS doesn't support AVX. Use old kernels.
|
||||||
openblas_warning(FALLBACK_VERBOSE, BARCELONA_FALLBACK);
|
}
|
||||||
return &gotoblas_BARCELONA; //OS doesn't support AVX. Use old kernels.
|
|
||||||
}
|
|
||||||
}else if (exmodel == 3) {
|
|
||||||
//AMD STEAMROLLER
|
|
||||||
if(support_avx())
|
|
||||||
return &gotoblas_STEAMROLLER;
|
|
||||||
else{
|
|
||||||
openblas_warning(FALLBACK_VERBOSE, BARCELONA_FALLBACK);
|
|
||||||
return &gotoblas_BARCELONA; //OS doesn't support AVX. Use old kernels.
|
|
||||||
}
|
|
||||||
}else if (exmodel == 6) {
|
|
||||||
if(support_avx())
|
|
||||||
return &gotoblas_EXCAVATOR;
|
|
||||||
else{
|
|
||||||
openblas_warning(FALLBACK_VERBOSE, BARCELONA_FALLBACK);
|
|
||||||
return &gotoblas_BARCELONA; //OS doesn't support AVX. Use old kernels.
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}else if(model == 0){
|
||||||
}
|
if (exmodel == 1) {
|
||||||
|
//AMD Trinity
|
||||||
|
if(support_avx())
|
||||||
|
return &gotoblas_PILEDRIVER;
|
||||||
|
else{
|
||||||
|
openblas_warning(FALLBACK_VERBOSE, BARCELONA_FALLBACK);
|
||||||
|
return &gotoblas_BARCELONA; //OS doesn't support AVX. Use old kernels.
|
||||||
|
}
|
||||||
|
}else if (exmodel == 3) {
|
||||||
|
//AMD STEAMROLLER
|
||||||
|
if(support_avx())
|
||||||
|
return &gotoblas_STEAMROLLER;
|
||||||
|
else{
|
||||||
|
openblas_warning(FALLBACK_VERBOSE, BARCELONA_FALLBACK);
|
||||||
|
return &gotoblas_BARCELONA; //OS doesn't support AVX. Use old kernels.
|
||||||
|
}
|
||||||
|
}else if (exmodel == 6) {
|
||||||
|
if(support_avx())
|
||||||
|
return &gotoblas_EXCAVATOR;
|
||||||
|
else{
|
||||||
|
openblas_warning(FALLBACK_VERBOSE, BARCELONA_FALLBACK);
|
||||||
|
return &gotoblas_BARCELONA; //OS doesn't support AVX. Use old kernels.
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
return &gotoblas_BARCELONA;
|
return &gotoblas_BARCELONA;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vendor == VENDOR_CENTAUR) {
|
if (vendor == VENDOR_CENTAUR) {
|
||||||
|
|
Loading…
Reference in New Issue