Skip to content

Commit 8da6afd

Browse files
committed
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 #45657 (cherry picked from commit 404abb4)
1 parent 6368fdc commit 8da6afd

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

src/processor_x86.cpp

+7
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ enum class CPU : uint32_t {
9292
amd_barcelona,
9393
amd_znver1,
9494
amd_znver2,
95+
amd_znver3,
9596
};
9697

9798
static constexpr size_t feature_sz = 11;
@@ -222,6 +223,7 @@ constexpr auto bdver4 = bdver3 | get_feature_masks(avx2, bmi2, mwaitx, movbe, rd
222223
constexpr auto znver1 = haswell | get_feature_masks(adx, aes, clflushopt, clzero, mwaitx, prfchw,
223224
rdseed, sha, sse4a, xsavec, xsaves);
224225
constexpr auto znver2 = znver1 | get_feature_masks(clwb, rdpid, wbnoinvd);
226+
constexpr auto znver3 = znver2 | get_feature_masks(shstk, pku, vaes, vpclmulqdq);
225227

226228
}
227229

@@ -280,6 +282,7 @@ static constexpr CPUSpec<CPU, feature_sz> cpus[] = {
280282

281283
{"znver1", CPU::amd_znver1, CPU::generic, 0, Feature::znver1},
282284
{"znver2", CPU::amd_znver2, CPU::generic, 0, Feature::znver2},
285+
{"znver3", CPU::amd_znver3, CPU::amd_znver2, 120000, Feature::znver3},
283286
};
284287
static constexpr size_t ncpu_names = sizeof(cpus) / sizeof(cpus[0]);
285288

@@ -543,6 +546,10 @@ static CPU get_amd_processor_name(uint32_t family, uint32_t model, const uint32_
543546
if (model >= 0x30)
544547
return CPU::amd_znver2;
545548
return CPU::amd_znver1;
549+
case 0x19: // AMD Family 19h
550+
if (model <= 0x0f || model == 0x21)
551+
return CPU::amd_znver3; // 00h-0Fh, 21h: Zen3
552+
return CPU::amd_znver3; // fallback
546553
}
547554
}
548555

0 commit comments

Comments
 (0)