X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;ds=sidebyside;f=arch%2Farch.h;h=fca003beabf4e606aa1b80af853f973009e8c7ed;hb=HEAD;hp=a25779d4fd8521fe56a38027c182e5c7fcd5a4d5;hpb=d4e74fda98b60dc175b4114492fcc7c21c617ddd;p=fio.git diff --git a/arch/arch.h b/arch/arch.h index a25779d4..7e294ddf 100644 --- a/arch/arch.h +++ b/arch/arch.h @@ -1,7 +1,11 @@ #ifndef ARCH_H #define ARCH_H +#ifdef __cplusplus +#include +#else #include +#endif #include "../lib/types.h" @@ -19,6 +23,8 @@ enum { arch_hppa, arch_mips, arch_aarch64, + arch_loongarch64, + arch_riscv64, arch_generic, @@ -36,6 +42,21 @@ extern unsigned long arch_flags; #define ARCH_CPU_CLOCK_WRAPS +#ifdef __cplusplus +#define atomic_add(p, v) \ + std::atomic_fetch_add(p, (v)) +#define atomic_sub(p, v) \ + std::atomic_fetch_sub(p, (v)) +#define atomic_load_relaxed(p) \ + std::atomic_load_explicit(p, \ + std::memory_order_relaxed) +#define atomic_load_acquire(p) \ + std::atomic_load_explicit(p, \ + std::memory_order_acquire) +#define atomic_store_release(p, v) \ + std::atomic_store_explicit(p, (v), \ + std::memory_order_release) +#else #define atomic_add(p, v) \ atomic_fetch_add((_Atomic typeof(*(p)) *)(p), v) #define atomic_sub(p, v) \ @@ -49,6 +70,7 @@ extern unsigned long arch_flags; #define atomic_store_release(p, v) \ atomic_store_explicit((_Atomic typeof(*(p)) *)(p), (v), \ memory_order_release) +#endif /* IWYU pragma: begin_exports */ #if defined(__i386__) @@ -77,11 +99,22 @@ extern unsigned long arch_flags; #include "arch-hppa.h" #elif defined(__aarch64__) #include "arch-aarch64.h" +#elif defined(__loongarch64) +#include "arch-loongarch64.h" +#elif defined(__riscv) && __riscv_xlen == 64 +#include "arch-riscv64.h" #else #warning "Unknown architecture, attempting to use generic model." #include "arch-generic.h" #endif +#if !defined(__x86_64__) && defined(CONFIG_SYNC_SYNC) +static inline void tsc_barrier(void) +{ + __sync_synchronize(); +} +#endif + #include "../lib/ffz.h" /* IWYU pragma: end_exports */