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

标签 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

最佳答案

通过-mips1-fno-delayed-branch gcc 的标志。

关于gcc - 如何关闭 MIPS-GCC 自动指令重新排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4042517/

相关文章:

c++ - 在 C++ 中禁用系统调用

c - 在 Win32 上使用 GCC 向程序集符号添加前导下划线?

c++ - 为什么 gcc 在按值传递微不足道的结构时会发出不需要的内存访问?

c++ - 我是否误解了这个默认参数 shared_ptr 的范围?

汇编 - 堆对齐 - x86 intel

optimization - 在汇编程序中使用指针偏移是否比递减更快?

assembly - MIPS:lw(加载字)指令

linux - 加拿大 Cross binutils To ARM

assembly - 延迟槽的作用是什么?

c - 确保结构中的所有元素都已初始化