gpt4 book ai didi

gcc - 如何使用 GCC C 代码与 RISC-V CSR 交互?

转载 作者:行者123 更新时间:2023-12-04 10:59:12 24 4
gpt4 key购买 nike

这是我在stackoverflow上被问到的第一个问题,所以请善待我;)

我是 RISC-V 和低级 C 编码的新手,我想知道如何使用 GCC C 代码操作 RISC-V CSR。

读取特定 CSR(例如 MISA)看起来很容易:csrr rd, 0x301 csrrs rd, 0x301, x0 的缩写可以做到,例如和

int result;
asm("csrr %0, 0x301" : "=r"(result) : );

如何将上面的代码转换为具有以下接口(interface)的某种函数/可调用单元: int read_csr(int csr_number) ?

由于 CSR 编号必须是机器代码中的立即值,是否可以不即时生成代码(自修改代码)?

感谢您的回复和讨论。

约阿希姆

最佳答案

您可以使用 I立即常量参数的约束:

inline int read_csr(int csr_num) __attribute__((always_inline)) {
int result;
asm("csrr %0, %1" : "=r"(result) : "I"(csr_num));
return result; }

如果您使用不是常量表达式的参数调用它,这将失败,如 I约束需要一个常数。

关于gcc - 如何使用 GCC C 代码与 RISC-V CSR 交互?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58947716/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com