From: Umesh Kalvakuntla <[email protected]>
- cpuid bit for prefetchi is different from Intel
(https://docs.amd.com/v/u/en-US/24594_3.37)
- Fix cpu family model numbers
---
gcc/common/config/i386/cpuinfo.h | 11 +++++++++++
gcc/config/i386/cpuid.h | 4 ++++
2 files changed, 15 insertions(+)
diff --git a/gcc/common/config/i386/cpuinfo.h b/gcc/common/config/i386/cpuinfo.h
index c93ea07239a..6b45e1b0531 100644
--- a/gcc/common/config/i386/cpuinfo.h
+++ b/gcc/common/config/i386/cpuinfo.h
@@ -313,6 +313,8 @@ get_amd_cpu (struct __processor_model *cpu_model,
case 0x1a:
cpu_model->__cpu_type = AMDFAM1AH;
if (model <= 0x77)
+ if (model <= 0x4f || (model >= 0x60 && model <= 0x77) ||
+ (model >= 0xd0 && model <= 0xd7))
{
cpu = "znver5";
CHECK___builtin_cpu_is ("znver5");
@@ -1102,6 +1104,15 @@ get_available_features (struct __processor_model
*cpu_model,
set_feature (FEATURE_WBNOINVD);
}
+ if (ext_level >= 0x80000021)
+ {
+ __cpuid (0x80000021, eax, ebx, ecx, edx);
+ if (eax & bit_AMD_PREFETCHI)
+ {
+ set_feature (FEATURE_PREFETCHI);
+ }
+ }
+
#undef set_feature
}
diff --git a/gcc/config/i386/cpuid.h b/gcc/config/i386/cpuid.h
index afd4ef06e9f..dac01d887f1 100644
--- a/gcc/config/i386/cpuid.h
+++ b/gcc/config/i386/cpuid.h
@@ -72,6 +72,10 @@
#define bit_CLZERO (1 << 0)
#define bit_WBNOINVD (1 << 9)
+/* Extended Features (%eax == 0x80000021) */
+/* %eax */
+#define bit_AMD_PREFETCHI (1 << 20)
+
/* Extended Features Leaf (%eax == 7, %ecx == 0) */
/* %ebx */
#define bit_FSGSBASE (1 << 0)
--
2.43.0