Riscv gcc可以';无法识别操作码b

Riscv gcc可以';无法识别操作码b,riscv,Riscv,当我使用riscv gcc编译一个简单的汇编程序时,它告诉我它无法识别操作码b 1b,下面是程序: ... sll x28,x28,1; 1: b 1b b1b是最后一条指令,即循环 该程序来自riscv sodor项目。为什么编译失败?问题是您正在使用较新的编译器gcc 4.9,其中包括一个新的ABI和对已接受的psuedo ops的一些更改。Sodor存储库(截至2015年4月)包含针对不推荐的gcc 4.6端口的汇编代码 您可以快速将“b”更改为“j” 有关gcc4.9更新的

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

   ...
   sll x28,x28,1;
1: b 1b
b1b
是最后一条指令,即循环


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

问题是您正在使用较新的编译器gcc 4.9,其中包括一个新的ABI和对已接受的psuedo ops的一些更改。Sodor存储库(截至2015年4月)包含针对不推荐的gcc 4.6端口的汇编代码

您可以快速将“b”更改为“j”

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

以及关于新ABI的章节:


变更包括移除v0/v1(现在为a0/a1)

您正在使用哪个riscv gcc版本(使用--version)?当前的riscv工具库使用4.9,这可能已经弃用了“b”psuedo op。当然,您可以将该行代码更改为“1:j 1b”“。谢谢,我的gcc版本是4.9.2,我将'b'改为'j',它可以工作。另一个问题,我在gcc 4.9.2中发现,ABI也不同于'RISC-V指令集手册版本2.0',例如,手册上说'a0'代表'x18'寄存器,但当我使用gcc 4.9.2编译程序和转储时,我发现'a0'代表'x10'寄存器,你知道手册什么时候更新吗?