打印
[IDE]

RISC-V编译器,有没有选项"部分寄存器不参与编译"?

[复制链接]
1294|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
pattywu|  楼主 | 2022-10-21 21:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
RISC-V的寄存器实在太多了,对中断一点都不友好,16个通用寄存器就差不多,32个通用寄存器,真的要人命啊,一次中断,就压栈和出栈操作,起码64个时钟周期就没了。
好像带C(压缩指令)的编译,只用了前面的16个寄存器,不带C的,要用32个寄存器,如果带F/D的,还有32个浮点寄存器,压栈和出栈操作,代价更高。
当时设计RISC-V的人是都猪吗?没有吸取INTEL的31级流水线的P4的教训吗?
当时INTEL的P4,可是高频低能的代名词。
如果能有编译选项,让部分寄存器不参与编译,也就没有必要保存/恢复这些寄存器,就完美了。

使用特权

评论回复

相关帖子

沙发
pattywu|  楼主 | 2022-10-22 08:17 | 只看该作者
本帖最后由 pattywu 于 2022-10-22 08:19 编辑

今天早上,还真给我找到了。参见:
https://www.codenong.com/32885882/
有2种方法:
1> 将一些全局变量放入该寄存器
对于ARM CPU,您可以这样操作:
register volatile type *global_ptr asm ("r8")

该指令使用通用寄存器" r8"来保持global_ptr指针的值。

2> 告诉GCC不要通过-ffixed-reg选项(gcc docs)分配寄存器。
-ffixed-reg

将名为reg的寄存器视为固定寄存器;生成的代码永远不要引用它(除了可能是堆栈指针,帧指针或其他固定角色之外)。例如,gcc -ffixed-r9

使用特权

评论回复
板凳
吾要单片机| | 2022-10-22 23:26 | 只看该作者
有意思

使用特权

评论回复
地板
imdx| | 2022-10-23 09:16 | 只看该作者
wch的risc-v支持硬件压栈

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

609

帖子

5

粉丝