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

2w3kk1z5  于 2022-11-12  发布在  其他
关注(0)|答案(2)|浏览(170)

在此问题之后:Weird MIPS assembler behavior with jump (and link) instruction我的单周期MIPS项目有一个可用的GNU汇编工具链(没有分支延迟槽!)。不过我真的更喜欢用C语言编写。编译器生成的代码本身确实可以运行,但是我每次都必须手动编辑汇编源代码,因为GCC出于某种原因喜欢自动对分支指令本身进行重新排序。I don“我不想用一个脚本来处理这个问题,以确定何时重新排序分支。
有没有一种可能的方法可以避免这种情况?GCC出于某种原因生成如下代码:

.set noreorder
...
jr $ra <-- GCC reordered for me!
addi $v0, $v0, 10 <--
...
.set reorder

我想给汇编程序提供这样的代码

.set noreorder
addi $v0, $v0, 10
jr $ra
mf98qq94

mf98qq941#

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

ghhkc1vu

ghhkc1vu2#

我不认为这是可能的,因为延迟插槽存在于所有的MIPS变种。我认为这是更好的,如果你实现延迟插槽在您的仿真器。这也将使它更接近真实的的硬件。
除此之外,您可能可以修补gcc以停止尝试填充延迟插槽。

相关问题