【发布时间】:2017-05-31 20:19:44
【问题描述】:
是否可以为 C 代码的特定部分保留寄存器?
-fixed-reg 选项或声明全局寄存器变量不是我要寻找的答案。我想保留特定范围的寄存器值(比如说特定功能)。
使用本地寄存器变量是不可能的,因为它不能保证在整个范围内保留寄存器的值。 我正在寻找带有 asm volatile 的 clobber list 之类的东西,但是对于 C 语句。
【问题讨论】:
-
你所要求的并不真正有意义。如果要控制寄存器分配,请编写汇编语言。如果你想用 C 来写,你将无法控制这些细节。
-
我很难理解“为特定范围保留寄存器值”可能意味着什么。您的意思是每次调用该函数时,它都应该期望在该寄存器中找到以前的值(又名静态)?或者这个函数调用的函数甚至不能使用这个寄存器(即使它们在完成后恢复值)?老实说,我无法想象这些场景中的任何一个会有什么用处。
-
或者你在例程的顶部有一些 asm,在底部有一些,你想确保中间的寄存器值没有发生任何变化?如果是这样的话,给我们看看代码,也许我们可以提出一些建议。
-
我的意思是,我想告诉编译器不要使用特定寄存器来生成代码段的代码。 @大卫沃尔弗德
标签: gcc arm register-allocation