首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何关闭MIPS-GCC自动指令重排序?

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

Stack Overflow用户
提问于 2010-10-28 19:42:57
回答 2查看 4.4K关注 0票数 7

遵循这个问题:Weird MIPS assembler behavior with jump (and link) instruction我有一个工作的GNU汇编工具链,用于我的单周期MIPS项目(没有分支延迟槽!)。不过,我真的更喜欢用C语言编写。从编译器生成的代码本身确实会运行,但我每次都必须手动编辑汇编源代码,因为出于某种原因,GCC喜欢自动对分支指令本身进行重新排序。我不想用一个脚本来解决这个问题,以确定何时重新排序分支。

有没有可能绕过这一点?出于某种原因,GCC会生成这样的代码:

代码语言:javascript
复制
.set noreorder
...
jr $ra <-- GCC reordered for me!
addi $v0, $v0, 10 <--
...
.set reorder

我真的想给汇编器提供一些类似这样的东西:

代码语言:javascript
复制
.set noreorder
addi $v0, $v0, 10
jr $ra
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-29 00:13:19

我认为关闭它是不可能的,因为延迟槽在所有MIPS变体中都存在。我认为如果你在你的模拟器中实现延迟槽会更好。这也将使它更接近真正的硬件。

除此之外,你也许可以给gcc打补丁,让它不再试图填补延迟的空位。

票数 3
EN

Stack Overflow用户

发布于 2012-11-16 01:50:21

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

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4042517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档