AVXレジスタは、共通の呼び出し規則によってどのように処理されますか?
-
27-10-2019 - |
質問
YMMレジスタが発信者とCalleeによってどのように処理されるかを定義するドキュメントを見つけることができませんでした。
私の質問を集中するために、ここに私が知りたいことがあります:
- 発信者に戻る前に、CalleeによってどのYMMレジスタを復元する必要がありますか?
- LinuxとWindowsにはXMMレジスタに違いがあるため、YMMレジスタも同じルールに従っていないと思います。各OSEのルールは何ですか?
編集:以下の回答のおかげで、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.
..."
解決
あなたの両方の質問に対する答え(あなたがC ++で慣習を呼ぶことについて話していると仮定して)は素晴らしいです 最適化ガイド Agner Fogによって:
さまざまなC ++コンパイラとオペレーティングシステムの慣習を呼び出す.
22ページのセクション7(登録済みの使用)を参照してください。22ページのセクション7.2(SIMDタイプの合格と返却)が関連する場合があります。
所属していません StackOverflow