如何关闭MIPS-GCC自动指令重新排序?

Mai*_*ter 6 assembly gcc mips

遵循这个问题:使用跳转(和链接)指令的奇怪的MIPS汇编程序行为我有一个工作的GNU程序集工具链用于我的单周期MIPS项目(没有分支延迟插槽!).我真的更喜欢用C语写.从编译器生成的代码本身确实运行,但我必须每次都手动编辑汇编源,因为GCC出于某种原因喜欢自动重新排序分支指令本身.我不想用脚本来破解这个,以确定何时重新排序分支.

有没有办法绕过这个?GCC出于某种原因生成这样的代码:

.set noreorder
...
jr $ra <-- GCC reordered for me!
addi $v0, $v0, 10 <--
...
.set reorder
Run Code Online (Sandbox Code Playgroud)

在哪里我真的想要为汇编程序提供这样的东西:

.set noreorder
addi $v0, $v0, 10
jr $ra
Run Code Online (Sandbox Code Playgroud)

小智 8

通过-mips1-fno-delayed-branch标志,以海湾合作委员会.


Igo*_*sky 3

我认为不可能将其关闭,因为所有 MIPS 变体中都存在延迟槽。我认为如果你在模拟器中实现延迟槽会更好。这也将使其更接近真实的硬件。
除此之外,您可能可以修补 gcc 以停止尝试填充延迟槽。