当我使用riscv-gcc
编译一个简单的汇编程序,它告诉我它无法识别码b 1b
,这里是程序:Riscv-GCC不能识别操作码b
...
sll x28,x28,1;
1: b 1b
b 1b
是最后一个指令,一个循环。
该方案是从riscv-sodor
项目。为什么编译失败?
当我使用riscv-gcc
编译一个简单的汇编程序,它告诉我它无法识别码b 1b
,这里是程序:Riscv-GCC不能识别操作码b
...
sll x28,x28,1;
1: b 1b
b 1b
是最后一个指令,一个循环。
该方案是从riscv-sodor
项目。为什么编译失败?
问题是你使用的是较新的编译器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)。
感谢Chris,help我很多。 – lei
你正在使用哪个riscv-gcc版本(使用--version)?当前的riscv-tools存储库使用4.9,可能已弃用“b”psuedo-op“。当然,您可以将该行代码更改为”1:j 1b“。 – Chris
谢谢,我的gcc版本是4.9。 2,我将'b'更改为'j',并且它可以工作。 – lei
另一个问题,我在gcc 4.9.2中找到了与'RISC-V指令集手册2.0版'不同的ABI,例如, manul说'a0'代表'x18'寄存器,但是当我使用gcc 4.9.2编译程序和转储时,我发现'a0'代表'x10'寄存器,你知道手册何时更新吗? – lei