From ffd11b28ada1e166ce90e75eed19031ff658b906 Mon Sep 17 00:00:00 2001 From: Roman Lebedev Date: Mon, 13 Jun 2022 17:05:55 +0300 Subject: [PATCH] AMD Zen 3 CPU support (Fixes #45657) I've omitted `invpcid` feature since it's clearly omitted for other CPU's. It's a bit sad that the very same code is being repeated in every project :/ Fixes https://github.com/JuliaLang/julia/issues/45657 --- src/processor_x86.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/processor_x86.cpp b/src/processor_x86.cpp index dd9b5481837ad..1880df34502d7 100644 --- a/src/processor_x86.cpp +++ b/src/processor_x86.cpp @@ -93,6 +93,7 @@ enum class CPU : uint32_t { amd_barcelona, amd_znver1, amd_znver2, + amd_znver3, }; static constexpr size_t feature_sz = 11; @@ -226,6 +227,7 @@ constexpr auto bdver4 = bdver3 | get_feature_masks(avx2, bmi2, mwaitx, movbe, rd constexpr auto znver1 = haswell | get_feature_masks(adx, aes, clflushopt, clzero, mwaitx, prfchw, rdseed, sha, sse4a, xsavec, xsaves); constexpr auto znver2 = znver1 | get_feature_masks(clwb, rdpid, wbnoinvd); +constexpr auto znver3 = znver2 | get_feature_masks(shstk, pku, vaes, vpclmulqdq); } @@ -286,6 +288,7 @@ static constexpr CPUSpec cpus[] = { {"znver1", CPU::amd_znver1, CPU::generic, 0, Feature::znver1}, {"znver2", CPU::amd_znver2, CPU::generic, 0, Feature::znver2}, + {"znver3", CPU::amd_znver3, CPU::amd_znver2, 120000, Feature::znver3}, }; static constexpr size_t ncpu_names = sizeof(cpus) / sizeof(cpus[0]); @@ -553,6 +556,10 @@ static CPU get_amd_processor_name(uint32_t family, uint32_t model, const uint32_ if (model >= 0x30) return CPU::amd_znver2; return CPU::amd_znver1; + case 0x19: // AMD Family 19h + if (model <= 0x0f || model == 0x21) + return CPU::amd_znver3; // 00h-0Fh, 21h: Zen3 + return CPU::generic; } }