在函数调用之前保存XMM寄存器

时间:2014-06-19 05:45:00

标签: x86-64 intel avx2 sse

在汇编函数调用之前是否需要将任何XMM寄存器保存/推送到堆栈? 因为在我的代码中使用64位开发的发布模式观察崩溃问题(使用AVX2)。在调试模式下它工作正常。我试着保存XMM8寄存器的内容并在函数调用结束时恢复它,然后它正常工作。

任何想法或参考?

1 个答案:

答案 0 :(得分:2)

是的,在Microsoft Windows上,您需要保留XMM6-XMM15寄存器。请参阅http://msdn.microsoft.com/en-us/library/7kcdt6fy.aspx - 这包括xmm8,因此要么保留它们,要么不在函数中使用它们。

然而,在Linux上,这些是临时寄存器,因此不必保留。请参见第{21页的http://www.x86-64.org/documentation/abi.pdf