Riscv-gcc 无法识别操作码 b

Riscv-gcc can't recognize opcode b

当我使用riscv-gcc编译一个简单的汇编程序时,它告诉我它无法识别操作码b 1b,这是程序:

   ...
   sll x28,x28,1;
1: b 1b

b 1b是最后一条指令,一个循环。

程序来自riscv-sodor项目。为什么编译失败?

问题是您使用的是较新的编译器 gcc 4.9,它包括一个新的 ABI 和对已接受的伪操作的一些更改。 Sodor 存储库(截至 2015 年 4 月)包含针对已弃用的 gcc 4.6 端口的汇编代码。

您可以快速将 "b" 更改为 "j"。

有关 gcc4.9 更新的更多信息:

https://riscv.org/2015/01/announcing-the-risc-v-gcc-4-9-port-and-new-abi/

以及关于新 ABI 的章节:

https://riscv.org/wp-content/uploads/2015/01/riscv-calling.pdf

更改包括删除 v0/v1(现在是 a0/a1)。