遵循这个问题:Weird MIPS assembler behavior with jump (and link) instruction我有一个工作的GNU汇编工具链,用于我的单周期MIPS项目(没有分支延迟槽!)。不过,我真的更喜欢用C语言编写。从编译器生成的代码本身确实会运行,但我每次都必须手动编辑汇编源代码,因为出于某种原因,GCC喜欢自动对分支指令本身进行重新排序。我不想用一个脚本来解决这个问题,以确定何时重新排序分支。
有没有可能绕过这一点?出于某种原因,GCC会生成这样的代码:
.set noreorder
...
jr $ra <-- GCC reordered for me!
addi $v0, $v0, 10 <--
...
.set reorder我真的想给汇编器提供一些类似这样的东西:
.set noreorder
addi $v0, $v0, 10
jr $ra发布于 2010-10-29 00:13:19
我认为关闭它是不可能的,因为延迟槽在所有MIPS变体中都存在。我认为如果你在你的模拟器中实现延迟槽会更好。这也将使它更接近真正的硬件。
除此之外,你也许可以给gcc打补丁,让它不再试图填补延迟的空位。
发布于 2012-11-16 01:50:21
将-mips1和-fno-delayed-branch标志传递给gcc。
https://stackoverflow.com/questions/4042517
复制相似问题