【发布时间】:2023-04-01 21:06:02
【问题描述】:
我需要使用不支持伪指令的特定工具链来构建大型 RISC-V 汇编程序(.a/.as/.S 文件)。 (Synopsys 的 ASIP 设计器工具为定制的 CPU/指令集创建了一个定制的汇编器。)
程序可以用 GCC(使用 GAS)很好地汇编,但是我需要使用的汇编器不能识别伪指令。它仅适用于仅使用实际 RISC-V 机器指令编写的程序。
是否有工具或 GCC 或 GAS 选项可用于将所有伪指令解析为真正的 RISC-V 指令,而无需更改程序的其余部分?
【问题讨论】:
-
你的意思是汇编程序,而不是编译器,对吧?您实际上并没有使用 GCC 编译 to asm,您只是使用
gcc来调用as和ld,我认为,对于已经手写的.S文件. (你也许可以先汇编然后再反汇编,但大多数这样做的方法会丢失标签和指令。) -
改进这个自定义汇编器以支持 RISC-V 手册中记录的标准伪指令可能是最简单的。或者如果这个汇编器有一个宏语言,把它们定义为宏。我认为对于大多数/所有伪指令,您可能可以使用 GAS
.macro执行此操作,但您没有使用 GAS。 -
只是好奇——您使用的是哪个工具?这适用于所有伪指令还是仅适用于一些?官方伪指令和 GCC 专用指令有什么区别吗?
-
你可以写一个sed/awk/other脚本,也可以自己写一个预处理工具。
-
@PeterCordes 是的,你是对的,严格来说,我从汇编程序开始并跳过编译。我不能真正修改这个自定义汇编器,因为它不是一个特定的。这适用于 Synopsys 的 ASIP 设计器工具基于定制处理器设计创建的所有自动生成的编译器(因此这些编译器只能识别真正的指令集)。我总是可以编写一个脚本来完成这项任务,但这个问题的重点是找出它是否已经存在,从而可能节省时间和实施错误。
标签: assembly riscv instructions