From d8d8c47722725ae9ff56b30cce10bb0a9f386f53 Mon Sep 17 00:00:00 2001 From: wu-leilei Date: Wed, 4 Jan 2023 10:07:36 +0800 Subject: [PATCH] Add loongarch support --- add-loongarch-support.patch | 90 +++++++++++++++++++++++++++++++++++++ papi.spec | 8 +++- 2 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 add-loongarch-support.patch diff --git a/add-loongarch-support.patch b/add-loongarch-support.patch new file mode 100644 index 0000000..7a30231 --- /dev/null +++ b/add-loongarch-support.patch @@ -0,0 +1,90 @@ +diff -Nur a/src/linux-context.h b/src/linux-context.h +--- a/src/linux-context.h 2023-01-03 10:19:14.764365407 +0800 ++++ b/src/linux-context.h 2023-01-03 10:22:32.147226669 +0800 +@@ -33,6 +33,8 @@ + #define OVERFLOW_ADDRESS(ctx) ctx.ucontext->uc_mcontext.arm_pc + #elif defined(__aarch64__) + #define OVERFLOW_ADDRESS(ctx) ctx.ucontext->uc_mcontext.pc ++#elif defined(__loongarch__) ++#define OVERFLOW_ADDRESS(ctx) ctx.ucontext->uc_mcontext.__pc + #elif defined(__mips__) + #define OVERFLOW_ADDRESS(ctx) ctx.ucontext->uc_mcontext.pc + #elif defined(__riscv) +diff -Nur a/src/linux-lock.h b/src/linux-lock.h +--- a/src/linux-lock.h 2017-12-20 01:14:30.000000000 +0800 ++++ b/src/linux-lock.h 2023-01-03 10:28:17.388231282 +0800 +@@ -223,6 +223,37 @@ + } + #define _papi_hwd_lock(lck) __raw_spin_lock(&_papi_hwd_lock_data[lck]); + #define _papi_hwd_unlock(lck) __raw_spin_unlock(&_papi_hwd_lock_data[lck]) ++#elif defined(__loongarch__) ++static inline void __raw_spin_lock(volatile unsigned int *lock) ++{ ++ unsigned int tmp; ++ __asm__ __volatile__( ++ "1: ll.w %1, %2 \n" ++ " bnez %1, 1b \n" ++ " li.w %1, 1 \n" ++ " sc.w %1, %0 \n" ++ " beqz %1, 1b \n" ++ " nop \n" ++ : "=m" (*lock), "=&r" (tmp) ++ : "m" (*lock) ++ : "memory"); ++} ++ ++static inline void __raw_spin_unlock(volatile unsigned int *lock) ++{ ++ unsigned int tmp; ++ __asm__ __volatile__( ++ " nop \n" ++ " li.w %1, 0 \n" ++ " st.w %1, %0 \n" ++ : "=m" (*lock), "=&r" (tmp) ++ : "m" (*lock) ++ : "memory"); ++} ++#define _papi_hwd_lock(lck) { rmb(); __raw_spin_lock(&_papi_hwd_lock_data[lck]); rmb(); } ++#define _papi_hwd_unlock(lck) { rmb(); __raw_spin_unlock(&_papi_hwd_lock_data[lck]); rmb(); } ++ ++ + #else + + #error "_papi_hwd_lock/unlock undefined!" +diff -Nur a/src/linux-timer.c b/src/linux-timer.c +--- a/src/linux-timer.c 2023-01-03 10:19:14.764365407 +0800 ++++ b/src/linux-timer.c 2023-01-03 10:32:02.115488927 +0800 +@@ -245,6 +245,20 @@ + return ret; + } + ++/****************************/ ++/* loongarch64 get_cycles() */ ++/****************************/ ++#elif defined(__loongarch__) ++static inline long long ++get_cycles(void) ++{ ++ register unsigned long ret = 0; ++ int rID = 0; ++ __asm__ __volatile__ ("ibar 0" ::: "memory"); ++ __asm__ __volatile__ ("rdtime.d %0, %1" :"=r"(ret),"=r"(rID)); ++ return ret; ++} ++ + /************************/ + /* POWER get_cycles() */ + /************************/ +diff -Nur a/src/mb.h b/src/mb.h +--- a/src/mb.h 2023-01-03 10:19:14.764365407 +0800 ++++ b/src/mb.h 2023-01-03 10:34:21.113503842 +0800 +@@ -39,6 +39,9 @@ + #elif defined(__aarch64__) + #define rmb() asm volatile("dmb ld" ::: "memory") + ++#elif defined(__loongarch__) ++#define rmb() asm volatile("dbar 0" ::: "memory") ++ + #elif defined(__riscv) + #define rmb() asm volatile("fence ir, ir" ::: "memory") + diff --git a/papi.spec b/papi.spec index a92e6fe..9f5828a 100644 --- a/papi.spec +++ b/papi.spec @@ -1,6 +1,6 @@ Name: papi Version: 5.6.0 -Release: 10 +Release: 11 Summary: Performance Application Programming Interface License: BSD URL: http://icl.cs.utk.edu/papi/ @@ -13,6 +13,9 @@ Obsoletes: papi-libs < %{version}-%{release} Patch0001: papi-ldflags.patch Patch0002: papi-add-support-riscv64.patch +%ifarch loongarch64 +Patch0003: add-loongarch-support.patch +%endif %description PAPI provides a programmer interface to monitor the performance of @@ -88,6 +91,9 @@ chrpath --delete $RPM_BUILD_ROOT%{_libdir}/*.so* %{_mandir}/man3/* %changelog +* Tue Jan 3 2023 wulei - 5.6.0-11 +- Add loongarch support + * Mon Jan 24 2022 wujie - 5.6.0-10 - add support for riscv64 from http://fedora.riscv.rocks/koji/buildinfo?buildID=31200 Author is David Abdurachmanov -- Gitee