当前 riscv-gnu-toolchain 中无法识别的自定义 asm 助记符

custom asm mnemonics unrecognized in current riscv-gnu-toolchain

例如,以下 assembler 语句应转换为操作码 0x0000000b

custom0 0,0,0,0

对于旧版本的 riscv-gnu-toolchain(6 月 4 日构建),assemble 不需要 -march= 选项。但是,对于 riscv-tools 今天的 git 负责人,我得到:

$ /opt/riscv_new/bin/riscv64-unknown-elf-as -m32 test.s
test.s: Assembler messages:
test.s:1: Error: unrecognized opcode `custom0 0,0,0,0'

通过阅读源代码,我猜想将 arch Xcustom 传递给工具应该可以解决这个问题,但是:

$ /opt/riscv_new/bin/riscv64-unknown-elf-as -m32 -march=RV32IMXcustom test.s 
test.s: Assembler messages:
test.s:1: Error: unrecognized opcode `custom0 0,0,0,0'

(目前 PicoRV32 测试固件未使用最新的 riscv-gnu-toolchain because of this 构建。)

编辑:对我有用的最后一个版本的 riscv-tools 是 8 月 20 日提交的 84a47e0b4e。使用那个版本,custom0 操作码在有和没有 -march= 选项的情况下被识别。

我也遇到了这个问题,在昨天的 gnu 工具链更新中,如果你查看 risv-opcodes 文件夹中的 opcodes.custom 文件,所有自定义操作码都被注释了,你需要取消注释那些你需要并重新编译工具链

抱歉,这花了很长时间才找到 -- 我不读 Whosebug。为了将来参考,如果您提交 github issue/PR 或直接给我发电子邮件,我会处理这些事情。

此处应该有修复程序,您介意验证一下吗? https://github.com/riscv/riscv-gnu-toolchain/pull/97

抱歉引入回归!