From 7faa688bf72f362c6a4a1e076dffc9d778890511 Mon Sep 17 00:00:00 2001 From: doublefree Date: Thu, 31 Jul 2025 16:10:55 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=80=E4=BA=9B=E6=B1=87?= =?UTF-8?q?=E7=BC=96=E5=88=86=E6=94=AF=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pmu/evt.cpp | 9 ++++++--- util/read_reg.cpp | 11 ++++++++--- util/read_reg.h | 2 ++ 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/pmu/evt.cpp b/pmu/evt.cpp index e401c7c..c9a27ae 100644 --- a/pmu/evt.cpp +++ b/pmu/evt.cpp @@ -150,11 +150,12 @@ __u32 KUNPENG_PMU::ReadOnce(__u32 *head) typeof(*head) val; char charHead[1]; } pointerUnion = {.charHead = {0}}; - +#if defined(IS_ARM) asm volatile("ldar %w0, %1" : "=r"(*(__u32 __attribute__((__may_alias__)) *)pointerUnion.charHead) : "Q"(*head) : "memory"); +#endif return pointerUnion.val; } @@ -164,11 +165,12 @@ __u16 KUNPENG_PMU::ReadOnce(__u16 *head) typeof(*head) val; char charHead[1]; } pointerUnion = {.charHead = {0}}; - +#if defined(IS_ARM) asm volatile("ldarh %w0, %1" : "=r"(*(__u16 __attribute__((__may_alias__)) *)pointerUnion.charHead) : "Q"(*head) : "memory"); +#endif return pointerUnion.val; } @@ -178,10 +180,11 @@ __u8 KUNPENG_PMU::ReadOnce(__u8 *head) typeof(*head) val; char charHead[1]; } pointerUnion = {.charHead = {0}}; - +#if defined(IS_ARM) asm volatile("ldarb %w0, %1" : "=r"(*(__u8 __attribute__((__may_alias__)) *)pointerUnion.charHead) : "Q"(*head) : "memory"); +#endif return pointerUnion.val; } diff --git a/util/read_reg.cpp b/util/read_reg.cpp index abf550c..b43986d 100644 --- a/util/read_reg.cpp +++ b/util/read_reg.cpp @@ -16,14 +16,17 @@ uint64_t ReadPmccntr() { - uint64_t val; + uint64_t val = 0; +#if defined(__aarch64__) asm volatile("mrs %0, pmccntr_el0" : "=r"(val)); +#endif return val; } uint64_t ReadPmevcntr(int idx) { uint64_t val = 0; +#if defined(__aarch64__) switch (idx) { case 0: asm volatile("mrs %0, pmevcntr0_el0" : "=r"(val)); @@ -121,7 +124,7 @@ uint64_t ReadPmevcntr(int idx) default: break; } - +#endif return val; } @@ -139,7 +142,9 @@ uint64_t ReadPerfCounter(int idx) uint64_t ReadCntvct() { - uint64_t val; + uint64_t val = 0; +#if defined(__aarch64__) asm volatile("mrs %0, cntvct_el0" : "=r"(val)); +#endif return val; } \ No newline at end of file diff --git a/util/read_reg.h b/util/read_reg.h index 87de108..fd50181 100644 --- a/util/read_reg.h +++ b/util/read_reg.h @@ -32,7 +32,9 @@ static uint64_t ReadTimestamp(void) #ifndef Barrier static inline void Barrier() { +#if defined(IS_ARM) asm volatile("" : : : "memory"); +#endif } #endif -- Gitee