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