我正在开发一个需要在Linux和Windows上都可以运行的项目。
但是,由于clang
和msvc
下的寄存器不同,部分代码在Linux上不起作用。
是否有一种方法可以使寄存器使用一致或请求clang
在操作期间使用特定的寄存器?我想找到一种不涉及在汇编中重写部分的解决方案。这就是我所说的不同的输出代码。
感谢您的帮助。
每个评论 EDIT :
这是用于仿真器的,因此某些寄存器用于某些任务。
主要的事情之一是,我们对某个变量使用RSI,然后clang在函数调用中使用RSI。 MSVC编译不会遇到相同的问题。
编辑2 :
适用于xbox 360仿真器Xenia。
我们目前正在尝试完成Linux方面的工作。但是,使用用于存储称为上下文的相同寄存器进行函数调用的clang时,我们遇到了麻烦。
我们的想法是只要求clang不使用该特定寄存器,但是我无法找到一种方法,而不仅仅是在Assembly中编写它。该解决方案的另一个问题是gcc
在不同的寄存器上也可能有相同的问题。具体来说,我们正在研究ppc测试。上面的链接是clang与msvc相比的输出。
以下是相关代码:
答案 0 :(得分:3)
n_points**2
不能在Linux上用于您自己的目的,因为它在函数调用约定psABI-x86_64
但是,如果您可以使用其他寄存器作为通过Gcc编译的DECLARE @Month INT = 2, @Year INT = 2019
;WITH MonthDays_CTE(DayNum)
AS
(
SELECT DATEFROMPARTS(@Year, @Month, 1) AS DayNum
UNION ALL
SELECT DATEADD(DAY, 1, DayNum)
FROM MonthDays_CTE
WHERE DayNum < EOMONTH(DATEFROMPARTS(@Year, @Month, 1))
)
SELECT *
FROM MonthDays_CTE
代码,并且选项rsi
将不使用r10
(demo)。