是否可以修改编译器的调用约定,以便生成的代码避免使用特定的CPU寄存器?我对最近版本的gcc和msvc的解决方案感兴趣。
更新:-ffixed-reg和/或Explicit-Reg-Vars似乎为gcc做了诀窍。谢谢您的回答。 MSVC有类似的机制吗?
答案 0 :(得分:3)
根据gcc docs:
ffixed-REG
将名为reg的寄存器视为固定寄存器;生成的代码永远不应该引用它(除了可能作为堆栈指针,帧指针或其他固定角色)。
reg必须是注册的名称。接受的寄存器名称是特定于机器的,并在机器描述宏文件的REGISTER_NAMES宏中定义。
此标志没有否定形式,因为它指定了三向选择。