是否可以在不使用汇编的情况下告诉 clang 哪些寄存器用于代码的某些部分

Is it possible to tell clang which registers to use for certain parts of the code without using assembly

我正在做一个项目,需要它在 Linux 和 Windows 上工作。
但是,由于 clangmsvc.

下的寄存器不同,部分代码不适用于 Linux

有没有办法使寄存器使用保持一致或要求 clang 在操作期间使用特定寄存器?我想找到一个不涉及重写汇编部分的解决方案。这就是我所说的不同输出代码。

https://godbolt.org/z/DO9pQN

感谢任何帮助。

编辑 每条评论:
这是针对仿真器的,因此某些寄存器用于某些任务。 主要的事情之一是我们对某个变量使用 RSI,然后 clang 在函数调用中使用 RSI。编译后的 MSVC 不会遇到同样的问题。

编辑 2 每条评论:
这是 xbox 360 模拟器,Xenia。
我们目前正在努力完成 Linux 方面的事情。然而,我们 运行 遇到了 clang 的问题,因为我们使用相同的寄存器进行函数调用,就像我们用来存储称为上下文的东西一样。
我们的想法是只要求 clang 不使用那个特定的寄存器,但我无法找到一种方法来做到这一点,而不仅仅是在 Assembly 中编写它。该解决方案的另一个问题是 gcc 可能在不同的寄存器上也有同样的问题。具体来说,我们正在查看 ppc-tests。上面的link是clang和msvc对比的输出。

相关代码如下:

rsi 不能在 linux 上用于您自己的目的,因为它用于函数调用约定 psABI-x86_64

但是如果你可以使用其他寄存器作为 r10 使用 Gcc 和选项 -ffixed-r10 编译的代码将不会使用 r10 (demo).