riscv: Fix sel4bench.h macros to be valid C The sel4bench.h header macros were invalid C code and would not compile using spike as the platform and rv32 as the architecture.
diff --git a/libsel4bench/arch_include/riscv/sel4bench/arch/sel4bench.h b/libsel4bench/arch_include/riscv/sel4bench/arch/sel4bench.h index c0591ac..9882aa0 100644 --- a/libsel4bench/arch_include/riscv/sel4bench/arch/sel4bench.h +++ b/libsel4bench/arch_include/riscv/sel4bench/arch/sel4bench.h
@@ -20,17 +20,18 @@ #define FASTFN inline __attribute__((always_inline)) #if __riscv_xlen == 32 -#define SEL4BENCH_READ_CCNT(var) \ +#define SEL4BENCH_READ_CCNT(var) { \ uint32_t nH1, nL, nH2; \ asm volatile("rdcycleh %0\n" \ "rdcycle %1\n" \ "rdcycleh %2\n" \ : "=r"(nH1), "=r"(nL), "=r"(nH2)); \ if (nH1 < nH2) { \ - asm volatile("rdcycle %0" : "=r"(nL); \ + asm volatile("rdcycle %0" : "=r"(nL)); \ nH1 = nH2; \ } \ - var = ((uint64_t)((uint64_t) nH1 << 32 | (nL); + var = ((uint64_t)((uint64_t) nH1 << 32 | (nL))); \ + } #else #define SEL4BENCH_READ_CCNT(var) \ asm volatile("rdcycle %0" :"=r"(var)); @@ -41,17 +42,18 @@ } while(0) #if __riscv_xlen == 32 -#define SEL4BENCH_READ_PCNT(idx, var) \ +#define SEL4BENCH_READ_PCNT(idx, var) { \ uint32_t nH1, nL, nH2; \ asm volatile("csrr %0, hpmcounterh" #idx \ "csrr %1, hpmcounter" #idx \ "csrr %2, hpmcounterh" #idx \ : "=r"(nH1), "=r"(nL), "=r"(nH2)); \ if (nH1 < nH2) { \ - asm volatile("csrr %0, hpmcounter" #idx : "=r"(nL); \ - nH1 = nH2; \ + asm volatile("csrr %0, hpmcounter" #idx : "=r"(nL)); \ + nH1 = nH2; \ } \ - var = ((uint64_t)((uint64_t) nH1 << 32 | (nL); + var = ((uint64_t)((uint64_t) nH1 << 32 | (nL))); \ + } #else #define SEL4BENCH_READ_PCNT(idx, var) \ asm volatile("csrr %0, hpmcounter" #idx : "=r"(var));