Group :: Development/Tools
RPM: papi
Main Changelog Spec Patches Sources Download Gear Bugs and FR Repocop
Patch: papi-e2k.patch
Download
Download
diff --git a/papi/src/linux-context.h b/papi/src/linux-context.h
index 858c4e9..1bb1931 100644
--- a/papi/src/linux-context.h
+++ b/papi/src/linux-context.h
@@ -27,6 +27,8 @@ typedef ucontext_t hwd_ucontext_t;
#define OVERFLOW_ADDRESS(ctx) ctx.ucontext->uc_mcontext.uc_regs->gregs[REG_NIP]
#elif defined(__powerpc64__)
#define OVERFLOW_ADDRESS(ctx) ctx.ucontext->uc_mcontext.regs->nip
+#elif defined(__e2k__)
+#define OVERFLOW_ADDRESS(ctx) ctx.ucontext->uc_mcontext.cr0_hi
#elif defined(__sparc__)
#define OVERFLOW_ADDRESS(ctx) ((struct sigcontext *)ctx.ucontext)->si_regs.pc
#elif defined(__arm__)
diff --git a/papi/src/linux-lock.h b/papi/src/linux-lock.h
index ac3aa7c..02991b1 100644
--- a/papi/src/linux-lock.h
+++ b/papi/src/linux-lock.h
@@ -115,6 +115,17 @@ do { \
} while(retval != (unsigned int)MUTEX_CLOSED); \
} while (0)
+/*****************/
+/* Elbrus 2000 */
+/*****************/
+
+#elif defined(__e2k__)
+#define _papi_hwd_lock(lck) do { \
+ while(__sync_lock_test_and_set(&_papi_hwd_lock_data[lck], 1)) \
+ __asm__ __volatile__ ("nop"); \
+} while(0)
+#define _papi_hwd_unlock(lck) __sync_lock_release(&_papi_hwd_lock_data[lck])
+
/*****************/
/* SPARC */
/*****************/
diff --git a/papi/src/linux-timer.c b/papi/src/linux-timer.c
index 71b4aa0..4706519 100644
--- a/papi/src/linux-timer.c
+++ b/papi/src/linux-timer.c
@@ -214,6 +214,18 @@ get_cycles( void )
return ret;
}
+/************************/
+/* e2k get_cycles() */
+/************************/
+
+#elif defined(__e2k__)
+#include <x86intrin.h>
+static inline long long
+get_cycles( void )
+{
+ return __rdtsc();
+}
+
/************************/
/* SPARC get_cycles() */
/************************/
diff --git a/papi/src/mb.h b/papi/src/mb.h
index 1019691..d04549d 100644
--- a/papi/src/mb.h
+++ b/papi/src/mb.h
@@ -39,6 +39,9 @@
#elif defined(__aarch64__)
#define rmb() asm volatile("dmb ld" ::: "memory")
+#elif defined(__e2k__)
+#define rmb() __sync_synchronize()
+
#elif defined(__mips__)
#define rmb() asm volatile( \
".set mips2\n\t" \