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

时间:2010-10-28 11:42:57

标签: gcc assembly mips

关注这个问题: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

2 个答案:

答案 0 :(得分:7)

-mips1-fno-delayed-branch标记传递给gcc。

答案 1 :(得分:3)

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