关注这个问题:Weird MIPS assembler behavior with jump (and link) instruction我有一个用于我的单周期 MIPS 项目的 GNU 汇编工具链(没有分支延迟槽!)。不过,我真的更喜欢用 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
最佳答案
通过-mips1
和 -fno-delayed-branch
gcc 的标志。
关于gcc - 如何关闭 MIPS-GCC 自动指令重新排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4042517/