通用调用规约如何处理AVX寄存器?

7
我找不到任何文件定义调用者和被调用者如何处理YMM寄存器。
为了聚焦我的问题,这是我想知道的内容:
1.在返回给调用者之前,调用者必须恢复哪些YMM寄存器?
2.由于Linux和Windows中的XMM寄存器存在差异,我认为YMM寄存器也不遵循相同的规则。每个操作系统的规则是什么?
编辑:感谢下面的答案,我能够在Win64的文档中找到答案。我非常确定Linux遵循类似的规则。
"...
The YMM registers do not have callee-save status, except for the lower half
of YMM6-YMM15 in 64-bit Windows, where XMM6-XMM15 have callee-save status.
Possible future extensions of the vector registers to 512 bits or more will not have calleesave
status.
..."
1个回答

4

假设你在谈论C++中的调用约定,那么你两个问题的答案都在Agner Fog的伟大的优化指南中:

不同C++编译器和操作系统的调用约定

请参阅第10页的第6节(寄存器使用)。此外,第22页的第7.2节(传递和返回SIMD类型)也可能相关。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接