2012-01-13 8 views
6

YMMレジスタが呼び出し元と呼び出し先によってどのように処理されるかを定義する文書は見つかりませんでした。AVXレジスタは共通の呼び出し規約でどのように処理されますか?

は私の質問を集中するために、ここで私が知りたいのですが何である:YMMレジスタは、呼び出し元に戻る前に呼び出し先によって復元されなければならない

  1. LinuxとWindowsではXMMレジスタに違いがあるので、YMMレジスタも同じルールに従わないと仮定します。それぞれのOSのルールは何ですか?

EDIT: 以下の回答により、前述の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. 
..." 

答えて

4

ご質問の両方(あなたがC++での呼び出し規約について話していると仮定して)への答えがAgner霧で素晴らしいoptimization guideである:

Calling conventions for different C++ compilers and operating systems

10ページのセクション6(レジスタの使用法)を参照してください.27ページのセクション7.2(SIMDタイプの受け渡しと返す)も関連している可能性があります。

+0

ありがとう、これは役に立ちました。 –

関連する問題