2016-04-23 9 views
5

私の質問は なVMIN *、VCVTT *、VGETEXT *、VREDUCE *としてSAEコントロールを(すべての例外を抑制します)、許可セマンティックを丸めずにEVEXでエンコードされたパックREG-REG命令に関する、 VRANGE *など インテルは、完全な512ビットのベクトル長でのみSAE認識を宣言します。AVX512ベクトル長とSAE制御

VMINPD xmm1 {k1}{z}, xmm2, xmm3 
VMINPD ymm1 {k1}{z}, ymm2, ymm3 
VMINPD zmm1 {k1}{z}, zmm2, zmm3{sae} 

しかし、xmmまたはymmレジスタが使用される命令にSAEを適用できない理由はありません。

00b: 128bit (XMM) 
01b: 256bit (YMM) 
10b: 512bit (ZMM) 
11b: reserved 
Intel Instruction Set Extensions Programming Reference表4-7の章4.6.4で

セマンティックビットEVEX.bを丸めることなく命令にSAEが適用されることを指定し、ビットは、明示的なベクトルの長さを指定EVEX.L'Lと言います

ですので、その組み合わせは合法的である必要があります。

しかしNASMはNASMはvminpd ymm1,ymm2,ymm3,{sae} を組み立てるために拒否しNDISASMは(62F1ED385DCBを分解

vminpd xmm1,xmm2,xmm3としてNDISASM 2.12バック分解し62F1ED185DCB、すなわちEVEX.L'L = 00B、EVEX.b = 1、としてvminpd zmm1,zmm2,zmm3,{sae}を組み立てEVEX.L'L = 01B、EVEX.b = 1)vminpd xmm1,xmm2,xmm3

ように私は騎士CPUがVMINPD ymm1, ymm2, ymm3{sae} (62F1ED385DCBとして組み立て、EVEX.L'L = 01B、EVEX.b = 1)を実行ランディングないか疑問

  1. CPUが例外をスローします。 Intel doc表4-7は誤解を招くようなものです。
  2. SAEが有効な場合、CPUはスカラー 操作と同じxmmのみで動作します。 NASMとNDISASMは正しく、インテルの文書は です。
  3. SAEは無視され、Intel docのVMINPD 仕様に従って256ビットで動作します。 NASM & NDISASMが間違っています。
  4. SAEが有効な場合、CPUは 命令コードで指定された256ビットで動作します。 NASMとNDISASMが間違っている、インテルの書類は 補助は{sae}のxmm/ymm命令を装飾する必要があります。
  5. SAEが有効です.CPUは、EVEX.L'Lに関係なく、暗黙の完全なベクトルサイズ512 ビットで動作し、静的な丸め{er}が であったのと同じです。 NDISASMとIntelのdoc表4-7は間違っています。

答えて

4

VMINPD ymm1, ymm2, ymm3{sae}の指示が無効です。唯一の最後のバージョンは、それが命令あなたの唯一の形式です意味、{sae}接尾辞で示されていること

66 0F 5D /r     MINPD xmm1, xmm2/m128 
VEX.NDS.128.66.0F.WIG 5D /r VMINPD xmm1, xmm2, xmm3/m128 
VEX.NDS.256.66.0F.WIG 5D /r VMINPD ymm1, ymm2, ymm3/m256 
EVEX.NDS.128.66.0F.W1 5D /r VMINPD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst 
EVEX.NDS.256.66.0F.W1 5D /r VMINPD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst 
EVEX.NDS.512.66.0F.W1 5D /r VMINPD zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst{sae} 

お知らせ:Intel Architecture Instruction Set Extensions Programming Reference (February 2016)のみ、次のエンコーディングが許可されている中MINPDのための命令セット・リファレンスによると、それと一緒に使うことが許されます。特定の命令をエンコードするビットが存在するという理由だけで、その有効なものではありません。

4.6節にも注意してください。3、EVEXにおけるSAEサポートは、それが明確なSAEは、128ビットまたは256ビットのベクトルに適用されないことになり:

EVEX符号化方式は、で を符号化するセマンティック丸めなし算術浮動小数点命令を可能にしますSAE属性この機能は、 でEVEX.bを設定することで、スカラーと512ビットのベクトル長に適用され、レジスタ間のみに適用されます。 EVEX.bが設定されている場合、「すべての例外を抑制する」が暗示されます。 [...]

私はEVEX.bビットは単に無視されるならば、あなたの手作りの命令は、無効オペコード例外を生成するかどうかがわからない、またはEVEX.L'Lビットがなる場合無視される。

  • 状態:EVEXはVMINPD命令がタイプE2例外クラスに属し、表4-17、タイプE2クラスの例外条件に応じて、命令は次のいずれかの場合には#UD例外を生成することができ、符号化表4-8は満たされない。
  • 表4-9のオペコードに依存しない#UD条件。
  • 表4-10のオペランド符号化#UD条件。
  • Opmaskエンコーディング#UD条件は表4-11のとおりです。
  • EVEX.L'L!= 10b(VL = 512)の場合。

のみ、最後の理由はここに適用するようだが、それはあなたの命令が{sae}修飾の有無にかかわらず#UD例外を生成することを意味します。これは命令の要約で許可されたエンコードに直接矛盾しているように見えるので、何が起こるかはわかりません。

+0

エンコードの詳細にかかわらず、ドキュメントではできないといい点があります。しかし、Mysticialの答えでは、EVEX.L'LはEVEX.RCと重なり、EVEX.bはどちらが解釈されるのかを選択することを指摘しています。 –

+0

@PeterCordes質問で説明したように、表4-7はその解釈と矛盾しています。 EVEX.L'Lはベクトルの長さを決定し、EVEX.RCは適用されないが、EVEX.bは "SAE Con​​trol"を選択することを意味する "FP命令は丸め意味を持つ。この表によれば、P2 [6:5]の解釈を決定するのは命令型です。たとえば、 'VMINPD ymm1、ymm2、[rax] {1to8}'はEVEX.bが設定され、EVEX.L'Lは01bでEVEX.RCはN/Aです。 OPの問題は、これが '{sae} 'ではうまくいかないことです。彼が望むエンコーディングは存在しますが、単に許可されていません。 –

+0

最初は、私はあなたの答えに強く反対しました。しかし、表4-7を詳しく説明した後、私はPDFが不完全であるか、または矛盾していると判断しました。 FP命令には、「丸めのセマンティクス」という概念があります。しかし、どの命令にそれが欠けているかを記載した文書はありません。表4-7は、 'P2 [6:5]'は、 "丸めのセマンティクス"を持たないFP命令に対して常に 'EVEX.L'L'として解釈されることを示しています。 – Mysticial