.SAVEXMM128

現在のプロローグ オフセットを使用して、指定した XMM レジスタとオフセットに対して、UWOP_SAVE_XMM128 または UWOP_SAVE_XMM128_FAR のいずれかのアンワインド コード エントリを生成します。 Microsoft アセンブラー (MASM) は、最も効率的なエンコードを選択します。

構文

.SAVEXMM128 xmmreg 、 offset

解説

フレーム関数のアンワインド方法を指定するには、ml64.exeで.SAVEXMM128を使用します。 プロローグ内でのみ使用できます。これは、 PROCFRAME 宣言から .ENDPROLOG ディレクティブ。 これらのディレクティブはアンワインド メタデータ (.xdata セクションと .pdata セクション) を生成しますが、実行可能コードは生成しません。 .SAVEXMM128の前に、巻き戻すアクションを実際に実装する命令を指定します。 アグリーメントを確保するには、アンワインド ディレクティブと、マクロでアンワインドするコードの両方をラップします。

offset は、16 の倍数である必要があります。

アンワインド バージョン 3 の動作

Important

アンワインド バージョン 3 のサポートは試験段階であり、変更される可能性があります。 ml64.exe /unwindv3を使用して有効にします。

アンワインド バージョン 3 では、 .SAVEXMM128 は WOD_SAVE_XMM128 または WOD_SAVE_XMM128_FAR アンワインド コード エントリを出力します。 Microsoft アセンブラー (MASM) は、offset

アンワインド コード 状態
WOD_SAVE_XMM128 オフセット は、スケーリングされた 16 ビット値としてエンコードできます
WOD_SAVE_XMM128_FAR オフセット には完全な 32 ビット値が必要です

Note

アンワインド バージョン 1 では、ディレクティブは命令の後に来ます。 アンワインド バージョン 3 では、ディレクティブは命令の前にあります。 .SAVEXMM128 は、記述する命令の 前 に記述する必要があります。 この要件はバージョン 1 の反対であり、ディレクティブは命令に従います。

unwindv3 の例

; ml64 /unwindv3 ex1.asm /link /entry:Example1 /SUBSYSTEM:CONSOLE
_text SEGMENT
Example1 PROC FRAME
   .allocstack 030h
   sub rsp, 030h
   .savexmm128 xmm6, 0
   movdqa [rsp], xmm6
   .savexmm128 xmm7, 010h
   movdqa [rsp+010h], xmm7
.endprolog
   ; rest of function ...
   movdqa xmm7, [rsp+010h]
   movdqa xmm6, [rsp]
   add rsp, 030h
   ret
Example1 ENDP
_text ENDS
END

対応するエピローグは .RESTOREXMM128。

関連項目

x64 アンワインド バージョン 3 (試験段階)
ディレクティブ リファレンス
MASM BNF 文法
x64 用 MASM (ml64.exe)