【发布时间】:2018-09-05 14:10:16
【问题描述】:
我正在使用 riscv64-unknown-elf-clang, "clang version 5.0.0" 编译我的代码,然后使用 "spike" 和 "pk" 运行它。我需要计算程序所需的时钟周期数。我使用 "__builtin_readcyclecounter()" 或普通 "clock()" 来计算时钟周期,但似乎没有一个工作。
以下代码适用于 riscv64-unknown-elf-gcc 但不适用于 riscv64-unknown-elf-clang
#define read_csr(reg) ({ unsigned long __tmp;asm volatile ("csrr %0, " #reg : "=r"(__tmp));__tmp; })
#define CSR_CYCLE 0xc00
#define CSR_TIME 0xc01
#define CSR_INSTRET 0xc02
#define CSR_MCYCLE 0xb00
然后从我调用的主程序开始
long cycles;
cycles=read_csr(cycle);
【问题讨论】:
-
你对比过生成的汇编代码吗?
-
代码甚至不能用 riscv64-unknown-elf-clang 编译。它显示一个错误,说明无法识别的助记符
-
应该将
cycles=read_csr(cycle);改为cycles=read_csr(CSR_CYCLE);?
标签: clang llvm-clang riscv