如何组装RISC-V指令集的RVC压缩指令扩展?

问题描述

我有使用RVC指令的汇编代码,例如:

c.j 24

,当我尝试汇编它时,我会得到32位机器代码,但是我希望得到16位,因为它是压缩指令。在二进制文件中,该指令用32位表示,汇编指令的操作码对应于常规RV32I指令JAL,而不是16位宽的C.JAL的操作码。 我这样编译: riscv64-unknown-linux-gnu-gcc -c -mabi=ilp32 -march=rv32imac input.s -o output

有人知道如何解决吗?

解决方法

如果您正在使用https://github.com/riscv/riscv-gnu-toolchain中的riscv工具链。 您得到的是32位版本是正常的。在binutils中,您可以在汇编器端口tc-riscv.c中看到汇编器Expand the RVC branch into a RISC-V one.,如果它不能验证将遵守该范围。

使用c.j 24时,汇编器不知道代码将放置在何处并将其转换为j。这是一种安全的方法,否则,如果发出压缩指令,则链接器将不得不放松处理这种情况,或者如果链接器无法处理这种情况,或者在最坏的情况下生成的代码不正确,它将发出错误。 >

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...