インテル® C++ コンパイラー 19.0 デベロッパー・ガイドおよびリファレンス
これらの組込み関数を使用する場合、次のように immintrin.h ファイルをインクルードします。
#include <immintrin.h>
この組込み関数グループには、x87 FPU、MMX、XMM、MXCSR レジスターの現在のステートを保存/復元する 4 つの組込み関数が含まれます。
これらの組込み関数では、16 バイトでアライメントされた 512 バイトのメモリーチャンクへのメモリー参照を受け付けます。表 1 はメモリーのレイアウトです。
表 1 - FXSAVE 領域のレイアウト
この組込み関数グループには、x87 FPU、MMX、XMM、YMM、MXCSR レジスターの現在のステート全部または部分的に保存/復元する 6 つの組込み関数が含まれます。
これらの組込み関数は、64 バイトでアライメントされたメモリーへの参照を受け付けます。最初の 512 バイトのレジスターフィールドのレイアウトは、FXSAVE 領域のレイアウトと同じです。ステートを保存する組込み関数は、バイト 464:511 への書き込みは行いません。表 2a と表 2b は、保存領域のレイアウトです。
第 2 オペランドは、保存/復元する拡張ステートを指定する保存/復元マスクです。マスクの値は、XFEATURE_ENABLED_MASK(XCR0) と AND 演算が行われます。そのため、保存/復元マスクと XFEATURE_ENABLED_MASK の対応するビットが両方とも '1' に設定されている場合のみ、特定の拡張ステートが保存/復元されます。
表 2a - XSAVE 領域のレイアウト (最初の 512 バイト)
表 2b - YMM レジスターの XSAVE 領域のレイアウト