2015-04-22 50 views
1

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

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

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

该方案是从riscv-sodor项目。为什么编译失败?

+0

你正在使用哪个riscv-gcc版本(使用--version)?当前的riscv-tools存储库使用4.9,可能已弃用“b”psuedo-op“。当然,您可以将该行代码更改为”1:j 1b“。 – Chris

+0

谢谢,我的gcc版本是4.9。 2,我将'b'更改为'j',并且它可以工作。 – lei

+0

另一个问题,我在gcc 4.9.2中找到了与'RISC-V指令集手册2.0版'不同的ABI,例如, manul说'a0'代表'x18'寄存器,但是当我使用gcc 4.9.2编译程序和转储时,我发现'a0'代表'x10'寄存器,你知道手册何时更新吗? – lei

回答

2

问题是你使用的是较新的编译器gcc 4.9,它包含一个新的ABI和一些对接受的psuedo-ops的更改。 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)。

+1

感谢Chris,help我很多。 – lei