From 55b049fc342376a370f96abdbeb63133d92373ef Mon Sep 17 00:00:00 2001 From: Ji <24671280+XieJiSS@users.noreply.github.com> Date: Thu, 25 Nov 2021 15:06:30 +0800 Subject: [PATCH 1/2] fix: build on risc-v Patch is modified from https://reviews.llvm.org/file/data/du5ol5zctyqw53ma7dwz/PHID-FILE-knherxziu4tl4erti5ab/file --- .../range_tree/lib/portability/toku_time.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h b/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h index 225e3fa72119..c2a42288a93f 100644 --- a/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +++ b/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h @@ -137,6 +137,23 @@ static inline tokutime_t toku_time_now(void) { uint64_t result; asm volatile("stckf %0" : "=Q"(result) : : "cc"); return result; +#elif defined(__riscv) && __riscv_xlen == 32 + uint32_t cycles_lo, cycles_hi0, cycles_hi1; + // Implemented in assembly because Clang insisted on branching. + asm volatile( + "rdcycleh %0\n" + "rdcycle %1\n" + "rdcycleh %2\n" + "sub %0, %0, %2\n" + "seqz %0, %0\n" + "sub %0, zero, %0\n" + "and %1, %1, %0\n" + : "=r"(cycles_hi0), "=r"(cycles_lo), "=r"(cycles_hi1)); + return (static_cast(cycles_hi1) << 32) | cycles_lo; +#elif defined(__riscv) && __riscv_xlen == 64 + uint64_t cycles; + asm volatile("rdcycle %0" : "=r"(cycles)); + return cycles; #else #error No timer implementation for this platform #endif From 1e730ed46f677592bca2712bda55be65604b2da7 Mon Sep 17 00:00:00 2001 From: XieJiSS <24671280+XieJiSS@users.noreply.github.com> Date: Wed, 16 Feb 2022 14:37:44 +0800 Subject: [PATCH 2/2] format: edit risc-v asm code for linter --- .../range/range_tree/lib/portability/toku_time.h | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h b/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h index c2a42288a93f..37fde032356e 100644 --- a/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +++ b/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h @@ -141,14 +141,14 @@ static inline tokutime_t toku_time_now(void) { uint32_t cycles_lo, cycles_hi0, cycles_hi1; // Implemented in assembly because Clang insisted on branching. asm volatile( - "rdcycleh %0\n" - "rdcycle %1\n" - "rdcycleh %2\n" - "sub %0, %0, %2\n" - "seqz %0, %0\n" - "sub %0, zero, %0\n" - "and %1, %1, %0\n" - : "=r"(cycles_hi0), "=r"(cycles_lo), "=r"(cycles_hi1)); + "rdcycleh %0\n" + "rdcycle %1\n" + "rdcycleh %2\n" + "sub %0, %0, %2\n" + "seqz %0, %0\n" + "sub %0, zero, %0\n" + "and %1, %1, %0\n" + : "=r"(cycles_hi0), "=r"(cycles_lo), "=r"(cycles_hi1)); return (static_cast(cycles_hi1) << 32) | cycles_lo; #elif defined(__riscv) && __riscv_xlen == 64 uint64_t cycles;