戻り値 (C++)
64 ビットに収まるスカラー戻り値は、RAX (__m64 型を含む) を通じて返されます。float 型、double 型、および __m128、__m128i、__m128d などのベクター型を含む非スカラー型は、XMM0 で返されます。RAX や XMM0 で返される値の未使用ビットの状態は未定義です。
ユーザー定義型は、グローバル関数や静的メンバー関数からの値で返すことができます。RAX で値によって返すには、ユーザー定義型の長さが 1、2、4、8、16、32、または 64 ビットでなければなりません。ユーザー定義型のコンストラクター、デストラクター、またはコピー代入演算子ではなく、プライベートまたは保護された非静的データ メンバーではなく、参照型の非静的データ メンバーではなく、基底クラスではなく、仮想関数ではありません。これらの要件を満たさないデータ メンバーでもありません。(これは、実質的には C++03 POD 型の定義です。C++11 規格ではこの定義は変更されているので、このテストに std::is_pod を使うことはお勧めしません。)それ以外の場合は、呼び出し元が、メモリを割り当て、最初の引数として戻り値のポインターを渡す必要があります。後続する引数は、引数 1 つ分だけ右にシフトされます。RAX 内の呼び出し先は同じポインターを返す必要があります。
以下の例は、宣言を指定して関数に対してパラメーターと戻り値を渡す方法を示しています。