From d782a74f3e98140dca6ade46ed67e38d0d76f2c0 Mon Sep 17 00:00:00 2001 From: Gian-Carlo Pascutto Date: Tue, 30 Nov 2021 08:52:43 +0100 Subject: [PATCH 1/2] Add cpu_type for Intel Alder Lake. --- src/PerfCounters.cc | 4 +++- src/PerfCounters_x86.h | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/PerfCounters.cc b/src/PerfCounters.cc index eff543496e2..6bdf06fc12c 100644 --- a/src/PerfCounters.cc +++ b/src/PerfCounters.cc @@ -69,7 +69,8 @@ enum CpuMicroarch { IntelCometlake, IntelIcelake, IntelTigerlake, - LastIntel = IntelTigerlake, + IntelAlderlake, + LastIntel = IntelAlderlake, FirstAMD, AMDF15R30 = FirstAMD, AMDZen, @@ -124,6 +125,7 @@ struct PmuConfig { // See Intel 64 and IA32 Architectures Performance Monitoring Events. // See check_events from libpfm4. static const PmuConfig pmu_configs[] = { + { IntelAlderlake, "Intel Alderlake", 0x5111c4, 0, 0, 0, 100, PMU_TICKS_RCB }, { IntelTigerlake, "Intel Tigerlake", 0x5111c4, 0, 0, 0, 100, PMU_TICKS_RCB }, { IntelIcelake, "Intel Icelake", 0x5111c4, 0, 0, 0, 100, PMU_TICKS_RCB }, { IntelCometlake, "Intel Cometlake", 0x5101c4, 0, 0x5301cb, 0, 100, PMU_TICKS_RCB }, diff --git a/src/PerfCounters_x86.h b/src/PerfCounters_x86.h index 63b970dd0d4..e1c3ea3d8b2 100644 --- a/src/PerfCounters_x86.h +++ b/src/PerfCounters_x86.h @@ -76,6 +76,8 @@ static CpuMicroarch compute_cpu_microarch() { case 0xa0650: case 0xa0660: return IntelCometlake; + case 0x90670: + return IntelAlderlake; case 0x30f00: return AMDF15R30; case 0x00f10: // Naples, Whitehaven, Summit Ridge, Snowy Owl (Zen) (UNTESTED) From ea76fbf96290f1c7a7df244a48f49bc648b85d06 Mon Sep 17 00:00:00 2001 From: Gian-Carlo Pascutto Date: Tue, 30 Nov 2021 13:43:56 +0100 Subject: [PATCH 2/2] Fix 32-bit to 64-bit register translation logic. --- src/ExtraRegisters.cc | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/ExtraRegisters.cc b/src/ExtraRegisters.cc index 8c4039543b5..c3225ad3ab9 100644 --- a/src/ExtraRegisters.cc +++ b/src/ExtraRegisters.cc @@ -91,13 +91,12 @@ static RegData xsave_register_data(SupportedArch arch, GdbRegister regno) { regno = (GdbRegister)(regno - DREG_YMM0H + DREG_64_YMM0H); break; } - if (regno < DREG_FIRST_FXSAVE_REG || regno > DREG_LAST_FXSAVE_REG) { - return RegData(); - } if (regno == DREG_MXCSR) { regno = DREG_64_MXCSR; } else if (regno == DREG_PKRU) { regno = DREG_64_PKRU; + } else if (regno < DREG_FIRST_FXSAVE_REG || regno > DREG_LAST_FXSAVE_REG) { + return RegData(); } else { regno = (GdbRegister)(regno - DREG_FIRST_FXSAVE_REG + DREG_64_FIRST_FXSAVE_REG);