gpt4 book ai didi

c - GCC:禁止使用某些寄存器

转载 作者:行者123 更新时间:2023-12-01 03:32:29 25 4
gpt4 key购买 nike

这是一个奇怪的要求,但我觉得这是可能的。我想要的是在我的代码区域(用 C 编写)中插入一些编译指示或指令,以便 GCC 的寄存器分配器不会使用它们。

我知道我可以做这样的事情,这可能会为这个变量留出这个寄存器

register int var1 asm ("EBX") = 1984;
register int var2 asm ("r9") = 101;

问题是我直接插入新指令(用于硬件模拟器),而 GCC 和 GAS 还不能识别这些。我的新指令可以使用现有的通用寄存器,我想确保保留其中的一些(即 r12->r15)。

现在,我在一个模型环境中工作,我想快速做我的实验。将来我将附加 GAS 并将内在函数添加到 GCC 中,但现在我正在寻找一个快速修复。

谢谢!

最佳答案

在编写 GCC 内联汇编程序时,您可以指定一个“clobber 列表”——一个可能被您的内联汇编程序代码覆盖的寄存器列表。然后,GCC 将在行内 asm 段的过程中执行所需的任何操作来保存和恢复这些寄存器中的数据(或首先避免使用它们)。您还可以将输入或输出寄存器绑定(bind)到 C 变量。

例如:

inline unsigned long addone(unsigned long v)
{
unsigned long rv;
asm("mov $1, %%eax;"
"mov %0, %%ebx;"
"add %%eax, %%ebx"
: /* outputs */ "b" (rv)
: /* inputs */ "g" (v) /* select unused general purpose reg into %0 */
: /* clobbers */ "eax"
);
}

如需更多信息,请参阅 GCC-Inline-Asm-HOWTO .

关于c - GCC:禁止使用某些寄存器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28393652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com