diff --git a/components/fpdebug/fpdbgdisasx86.pp b/components/fpdebug/fpdbgdisasx86.pp index 51846f8c71..c212e10e64 100644 --- a/components/fpdebug/fpdbgdisasx86.pp +++ b/components/fpdebug/fpdbgdisasx86.pp @@ -439,6 +439,7 @@ type procedure AddWsd; procedure AddWss; procedure AddWx; + procedure AddWx_Mq; {$ifdef verbose_string_instructions} procedure AddXb; procedure AddXv; @@ -1928,6 +1929,12 @@ begin AddModRM([modReg, modMem], VectorSize, regXmm); end; +procedure TX86Disassembler.AddWx_Mq; +begin + DecodeModRM; + AddUx_Mq; +end; + {$ifdef verbose_string_instructions} procedure TX86Disassembler.AddXb; begin @@ -3769,7 +3776,7 @@ begin $0E: begin SetOpcode(OPvtest, OPSx_ps ); AddVx; AddWx; CheckVex; end; $0F: begin SetOpcode(OPvtest, OPSx_pd ); AddVx; AddWx; CheckVex; end; $10: begin SetOpcode(OPpblendvb ); AddVdq; AddWdq; end; - $13: begin SetOpcode(OPvcvtph2ps ); AddVx; AddWx; AddIb; CheckVex; end; + $13: begin SetOpcode(OPvcvtph2ps ); AddVx; AddUx_Mq; CheckVex; end; $14: begin SetOpcode(OPblendv, OPSx_ps ); AddVdq; AddWdq; AddReg(regXmm, os128, 0); end; $15: begin SetOpcode(OPblendv, OPSx_pd ); AddVdq; AddWdq; AddReg(regXmm, os128, 0); end; $16: begin SetOpcode(OPvperm, OPSx_ps ); AddVqq; AddHqq; AddWqq; CheckVex; end; @@ -3929,7 +3936,7 @@ begin $17: begin SetOpcode(OPextract, OPSx_ps, True); AddEd; AddVdq; AddIb; end; $18: begin SetOpcode(OPinsert, OPSx_f128,True); AddVqq; AddHqq; AddWqq; AddIb; CheckVex; end; $19: begin SetOpcode(OPextract, OPSx_f128,True); AddWdq; AddVqq; AddIb; CheckVex; end; - $1D: begin SetOpcode(OPcvtps2, OPSx_ph, True); AddWx; AddVx; AddIb; CheckVex; end; + $1D: begin SetOpcode(OPcvtps2, OPSx_ph, True); AddWx_Mq; AddVx; AddIb; CheckVex; end; $20: begin SetOpcode(OPpinsr, OPSx_b, True); AddVdq; AddHdq; AddRy_Mb; AddIb; end; $21: begin SetOpcode(OPinsert, OPSx_ps, True); AddVdq; AddHdq; AddUdq_Md; AddIb; end; $22: begin SetOpcode(OPpinsr, OPS_d_q, True); AddVdq; AddHdq; AddEy; AddIb; end; diff --git a/components/lazdebuggers/lazdebuggerfp/test/testasm.pas b/components/lazdebuggers/lazdebuggerfp/test/testasm.pas index ed529c46cf..818e37d80a 100644 --- a/components/lazdebuggers/lazdebuggerfp/test/testasm.pas +++ b/components/lazdebuggers/lazdebuggerfp/test/testasm.pas @@ -41,6 +41,7 @@ procedure TTestAssembler.TestDisAsm; var DisAss: TX86AsmDecoder; Process: TDummyProcess; + IgnoreSizeWordPtr: Boolean; procedure TestDis(AName: String; AData: String; AExp: String); @@ -62,17 +63,35 @@ codeBytes, ' ', asmInstr, AssertEquals(AName+' Cnt bytes', Length(AData), p-@s[1]); + s := Trim(LowerCase(asmInstr)); + AExp := LowerCase(AExp); + + if IgnoreSizeWordPtr and + ( (pos('word ptr', AExp) < 1) or (pos('word ptr', s) < 1) ) // don't ignore, if both have it + then begin + s := StringReplace(s, 'dword ptr', ' ', [rfReplaceAll]); + s := StringReplace(s, 'qword ptr', ' ', [rfReplaceAll]); + s := StringReplace(s, 'xmmword ptr', ' ', [rfReplaceAll]); + s := StringReplace(s, 'ymmword ptr', ' ', [rfReplaceAll]); + s := StringReplace(s, 'word ptr', ' ', [rfReplaceAll]); + AExp := StringReplace(AExp, 'dword ptr', ' ', [rfReplaceAll]); + AExp := StringReplace(AExp, 'qword ptr', ' ', [rfReplaceAll]); + AExp := StringReplace(AExp, 'xmmword ptr', ' ', [rfReplaceAll]); + AExp := StringReplace(AExp, 'ymmword ptr', ' ', [rfReplaceAll]); + AExp := StringReplace(AExp, 'word ptr', ' ', [rfReplaceAll]); + end; + r := TRegExpr.Create('(\$)0+([0-9a-fA-F])'); - s := Trim(LowerCase(asmInstr)); s := StringReplace(s, ' ', ' ', [rfReplaceAll]); // space s := StringReplace(s, ', ', ',', [rfReplaceAll]); // space + s := StringReplace(s, ', ', ',', [rfReplaceAll]); // space s := r.Replace(s, '$1$2', True); AExp := StringReplace(AExp, ' ', ' ', [rfReplaceAll]); // space AExp := StringReplace(AExp, ', ', ',', [rfReplaceAll]); // space + AExp := StringReplace(AExp, ', ', ',', [rfReplaceAll]); // space AExp := r.Replace(AExp, '$1$2', True); - AExp := LowerCase(AExp); r.Free; AssertEquals(AName+' asm ', AExp, s); @@ -80,6 +99,7 @@ codeBytes, ' ', asmInstr, end; begin + IgnoreSizeWordPtr := False; Process := TDummyProcess.Create('', nil, nil, nil); Process.NewMode := dm64; DisAss := TX86AsmDecoder.Create(Process); @@ -495,6 +515,140 @@ begin TestDis('vpextrd DWORD PTR [rsi-$F],xmm2,$2', #$c4#$e3#$79#$16#$56#$f1#$02, 'vpextrd DWORD PTR [rsi-$F],xmm2,$2'); TestDis('vpextrq QWORD PTR [rsi-$F],xmm3,$2', #$c4#$e3#$f9#$16#$5e#$f1#$02, 'vpextrq QWORD PTR [rsi-$F],xmm3,$2'); + IgnoreSizeWordPtr := True; + TestDis('vcvtph2ps xmm1,xmm2', #$c4#$e2#$79#$13#$ca, 'vcvtph2ps xmm1,xmm2'); + TestDis('vcvtph2ps xmm9,xmm2', #$c4#$62#$79#$13#$ca, 'vcvtph2ps xmm9,xmm2'); + TestDis('vcvtph2ps xmm1,xmm1', #$c4#$e2#$79#$13#$c9, 'vcvtph2ps xmm1,xmm1'); + TestDis('vcvtph2ps xmm1,xmm10', #$c4#$c2#$79#$13#$ca, 'vcvtph2ps xmm1,xmm10'); + TestDis('vcvtph2ps xmm1,QWORD PTR [rdi]', #$c4#$e2#$79#$13#$0f, 'vcvtph2ps xmm1,QWORD PTR [rdi]'); + TestDis('vcvtph2ps xmm9,QWORD PTR [rdi]', #$c4#$62#$79#$13#$0f, 'vcvtph2ps xmm9,QWORD PTR [rdi]'); + TestDis('vcvtph2ps xmm1,QWORD PTR [rdi+$3]', #$c4#$e2#$79#$13#$4f#$03, 'vcvtph2ps xmm1,QWORD PTR [rdi+$3]'); + TestDis('vcvtph2ps xmm9,QWORD PTR [rdi+$3]', #$c4#$62#$79#$13#$4f#$03, 'vcvtph2ps xmm9,QWORD PTR [rdi+$3]'); + TestDis('vcvtph2ps xmm1,QWORD PTR [rax+rdi]', #$c4#$e2#$79#$13#$0c#$07, 'vcvtph2ps xmm1,QWORD PTR [rax+rdi]'); + TestDis('vcvtph2ps xmm9,QWORD PTR [rax+rdi]', #$c4#$62#$79#$13#$0c#$07, 'vcvtph2ps xmm9,QWORD PTR [rax+rdi]'); + TestDis('vcvtph2ps xmm1,QWORD PTR [eax+edi]', #$67#$c4#$e2#$79#$13#$0c#$07, 'vcvtph2ps xmm1,QWORD PTR [eax+edi]'); + TestDis('vcvtph2ps xmm9,QWORD PTR [eax+edi]', #$67#$c4#$62#$79#$13#$0c#$07, 'vcvtph2ps xmm9,QWORD PTR [eax+edi]'); + TestDis('vcvtph2ps xmm1,QWORD PTR [rax+rdi+$3]', #$c4#$e2#$79#$13#$4c#$07#$03, 'vcvtph2ps xmm1,QWORD PTR [rax+rdi+$3]'); + TestDis('vcvtph2ps xmm9,QWORD PTR [rax+rdi+$3]', #$c4#$62#$79#$13#$4c#$07#$03, 'vcvtph2ps xmm9,QWORD PTR [rax+rdi+$3]'); + TestDis('vcvtph2ps xmm1,QWORD PTR [eax+edi+$3]', #$67#$c4#$e2#$79#$13#$4c#$07#$03, 'vcvtph2ps xmm1,QWORD PTR [eax+edi+$3]'); + TestDis('vcvtph2ps xmm9,QWORD PTR [eax+edi+$3]', #$67#$c4#$62#$79#$13#$4c#$07#$03, 'vcvtph2ps xmm9,QWORD PTR [eax+edi+$3]'); + TestDis('vcvtph2ps xmm1,QWORD PTR [rax*2+rdi]', #$c4#$e2#$79#$13#$0c#$47, 'vcvtph2ps xmm1,QWORD PTR [rax*2+rdi]'); + TestDis('vcvtph2ps xmm9,QWORD PTR [rax*2+rdi]', #$c4#$62#$79#$13#$0c#$47, 'vcvtph2ps xmm9,QWORD PTR [rax*2+rdi]'); + TestDis('vcvtph2ps xmm1,QWORD PTR [eax*2+edi]', #$67#$c4#$e2#$79#$13#$0c#$47, 'vcvtph2ps xmm1,QWORD PTR [eax*2+edi]'); + TestDis('vcvtph2ps xmm9,QWORD PTR [eax*2+edi]', #$67#$c4#$62#$79#$13#$0c#$47, 'vcvtph2ps xmm9,QWORD PTR [eax*2+edi]'); + TestDis('vcvtph2ps xmm1,QWORD PTR [rax*2+rdi+$3]', #$c4#$e2#$79#$13#$4c#$47#$03, 'vcvtph2ps xmm1,QWORD PTR [rax*2+rdi+$3]'); + TestDis('vcvtph2ps xmm9,QWORD PTR [rax*2+rdi+$3]', #$c4#$62#$79#$13#$4c#$47#$03, 'vcvtph2ps xmm9,QWORD PTR [rax*2+rdi+$3]'); + TestDis('vcvtph2ps xmm1,QWORD PTR [eax*2+edi+$3]', #$67#$c4#$e2#$79#$13#$4c#$47#$03, 'vcvtph2ps xmm1,QWORD PTR [eax*2+edi+$3]'); + TestDis('vcvtph2ps xmm9,QWORD PTR [eax*2+edi+$3]', #$67#$c4#$62#$79#$13#$4c#$47#$03, 'vcvtph2ps xmm9,QWORD PTR [eax*2+edi+$3]'); + TestDis('vcvtph2ps ymm1,xmm2', #$c4#$e2#$7d#$13#$ca, 'vcvtph2ps ymm1,xmm2'); + TestDis('vcvtph2ps ymm9,xmm2', #$c4#$62#$7d#$13#$ca, 'vcvtph2ps ymm9,xmm2'); + TestDis('vcvtph2ps ymm1,xmm1', #$c4#$e2#$7d#$13#$c9, 'vcvtph2ps ymm1,xmm1'); + TestDis('vcvtph2ps ymm1,xmm10', #$c4#$c2#$7d#$13#$ca, 'vcvtph2ps ymm1,xmm10'); + TestDis('vcvtph2ps ymm1,XMMWORD PTR [rdi]', #$c4#$e2#$7d#$13#$0f, 'vcvtph2ps ymm1,XMMWORD PTR [rdi]'); + TestDis('vcvtph2ps ymm9,XMMWORD PTR [rdi]', #$c4#$62#$7d#$13#$0f, 'vcvtph2ps ymm9,XMMWORD PTR [rdi]'); + TestDis('vcvtph2ps ymm1,XMMWORD PTR [rdi+$3]', #$c4#$e2#$7d#$13#$4f#$03, 'vcvtph2ps ymm1,XMMWORD PTR [rdi+$3]'); + TestDis('vcvtph2ps ymm9,XMMWORD PTR [rdi+$3]', #$c4#$62#$7d#$13#$4f#$03, 'vcvtph2ps ymm9,XMMWORD PTR [rdi+$3]'); + TestDis('vcvtph2ps ymm1,XMMWORD PTR [rax+rdi]', #$c4#$e2#$7d#$13#$0c#$07, 'vcvtph2ps ymm1,XMMWORD PTR [rax+rdi]'); + TestDis('vcvtph2ps ymm9,XMMWORD PTR [rax+rdi]', #$c4#$62#$7d#$13#$0c#$07, 'vcvtph2ps ymm9,XMMWORD PTR [rax+rdi]'); + TestDis('vcvtph2ps ymm1,XMMWORD PTR [eax+edi]', #$67#$c4#$e2#$7d#$13#$0c#$07, 'vcvtph2ps ymm1,XMMWORD PTR [eax+edi]'); + TestDis('vcvtph2ps ymm9,XMMWORD PTR [eax+edi]', #$67#$c4#$62#$7d#$13#$0c#$07, 'vcvtph2ps ymm9,XMMWORD PTR [eax+edi]'); + TestDis('vcvtph2ps ymm1,XMMWORD PTR [rax+rdi+$3]', #$c4#$e2#$7d#$13#$4c#$07#$03, 'vcvtph2ps ymm1,XMMWORD PTR [rax+rdi+$3]'); + TestDis('vcvtph2ps ymm9,XMMWORD PTR [rax+rdi+$3]', #$c4#$62#$7d#$13#$4c#$07#$03, 'vcvtph2ps ymm9,XMMWORD PTR [rax+rdi+$3]'); + TestDis('vcvtph2ps ymm1,XMMWORD PTR [eax+edi+$3]', #$67#$c4#$e2#$7d#$13#$4c#$07#$03, 'vcvtph2ps ymm1,XMMWORD PTR [eax+edi+$3]'); + TestDis('vcvtph2ps ymm9,XMMWORD PTR [eax+edi+$3]', #$67#$c4#$62#$7d#$13#$4c#$07#$03, 'vcvtph2ps ymm9,XMMWORD PTR [eax+edi+$3]'); + TestDis('vcvtph2ps ymm1,XMMWORD PTR [rax*2+rdi]', #$c4#$e2#$7d#$13#$0c#$47, 'vcvtph2ps ymm1,XMMWORD PTR [rax*2+rdi]'); + TestDis('vcvtph2ps ymm9,XMMWORD PTR [rax*2+rdi]', #$c4#$62#$7d#$13#$0c#$47, 'vcvtph2ps ymm9,XMMWORD PTR [rax*2+rdi]'); + TestDis('vcvtph2ps ymm1,XMMWORD PTR [eax*2+edi]', #$67#$c4#$e2#$7d#$13#$0c#$47, 'vcvtph2ps ymm1,XMMWORD PTR [eax*2+edi]'); + TestDis('vcvtph2ps ymm9,XMMWORD PTR [eax*2+edi]', #$67#$c4#$62#$7d#$13#$0c#$47, 'vcvtph2ps ymm9,XMMWORD PTR [eax*2+edi]'); + TestDis('vcvtph2ps ymm1,XMMWORD PTR [rax*2+rdi+$3]', #$c4#$e2#$7d#$13#$4c#$47#$03, 'vcvtph2ps ymm1,XMMWORD PTR [rax*2+rdi+$3]'); + TestDis('vcvtph2ps ymm9,XMMWORD PTR [rax*2+rdi+$3]', #$c4#$62#$7d#$13#$4c#$47#$03, 'vcvtph2ps ymm9,XMMWORD PTR [rax*2+rdi+$3]'); + TestDis('vcvtph2ps ymm1,XMMWORD PTR [eax*2+edi+$3]', #$67#$c4#$e2#$7d#$13#$4c#$47#$03, 'vcvtph2ps ymm1,XMMWORD PTR [eax*2+edi+$3]'); + TestDis('vcvtph2ps ymm9,XMMWORD PTR [eax*2+edi+$3]', #$67#$c4#$62#$7d#$13#$4c#$47#$03, 'vcvtph2ps ymm9,XMMWORD PTR [eax*2+edi+$3]'); + TestDis('vcvtph2ps zmm1,ymm2', #$62#$f2#$7d#$48#$13#$ca, 'vcvtph2ps zmm1,ymm2'); + TestDis('vcvtph2ps zmm9,ymm2', #$62#$72#$7d#$48#$13#$ca, 'vcvtph2ps zmm9,ymm2'); + TestDis('vcvtph2ps zmm1,ymm1', #$62#$f2#$7d#$48#$13#$c9, 'vcvtph2ps zmm1,ymm1'); + TestDis('vcvtph2ps zmm1,ymm10', #$62#$d2#$7d#$48#$13#$ca, 'vcvtph2ps zmm1,ymm10'); + TestDis('vcvtph2ps zmm1,YMMWORD PTR [rdi]', #$62#$f2#$7d#$48#$13#$0f, 'vcvtph2ps zmm1,YMMWORD PTR [rdi]'); + TestDis('vcvtph2ps zmm9,YMMWORD PTR [rdi]', #$62#$72#$7d#$48#$13#$0f, 'vcvtph2ps zmm9,YMMWORD PTR [rdi]'); + TestDis('vcvtph2ps zmm1,YMMWORD PTR [rdi+$3]', #$62#$f2#$7d#$48#$13#$8f#$03#$00#$00#$00, 'vcvtph2ps zmm1,YMMWORD PTR [rdi+$3]'); + TestDis('vcvtph2ps zmm9,YMMWORD PTR [rdi+$3]', #$62#$72#$7d#$48#$13#$8f#$03#$00#$00#$00, 'vcvtph2ps zmm9,YMMWORD PTR [rdi+$3]'); + TestDis('vcvtph2ps zmm1,YMMWORD PTR [rax+rdi]', #$62#$f2#$7d#$48#$13#$0c#$07, 'vcvtph2ps zmm1,YMMWORD PTR [rax+rdi]'); + TestDis('vcvtph2ps zmm9,YMMWORD PTR [rax+rdi]', #$62#$72#$7d#$48#$13#$0c#$07, 'vcvtph2ps zmm9,YMMWORD PTR [rax+rdi]'); + TestDis('vcvtph2ps zmm1,YMMWORD PTR [eax+edi]', #$67#$62#$f2#$7d#$48#$13#$0c#$07, 'vcvtph2ps zmm1,YMMWORD PTR [eax+edi]'); + TestDis('vcvtph2ps zmm9,YMMWORD PTR [eax+edi]', #$67#$62#$72#$7d#$48#$13#$0c#$07, 'vcvtph2ps zmm9,YMMWORD PTR [eax+edi]'); + TestDis('vcvtph2ps zmm1,YMMWORD PTR [rax+rdi+$3]', #$62#$f2#$7d#$48#$13#$8c#$07#$03#$00#$00#$00, 'vcvtph2ps zmm1,YMMWORD PTR [rax+rdi+$3]'); + TestDis('vcvtph2ps zmm9,YMMWORD PTR [rax+rdi+$3]', #$62#$72#$7d#$48#$13#$8c#$07#$03#$00#$00#$00, 'vcvtph2ps zmm9,YMMWORD PTR [rax+rdi+$3]'); + TestDis('vcvtph2ps zmm1,YMMWORD PTR [eax+edi+$3]', #$67#$62#$f2#$7d#$48#$13#$8c#$07#$03#$00#$00#$00, 'vcvtph2ps zmm1,YMMWORD PTR [eax+edi+$3]'); + TestDis('vcvtph2ps zmm9,YMMWORD PTR [eax+edi+$3]', #$67#$62#$72#$7d#$48#$13#$8c#$07#$03#$00#$00#$00, 'vcvtph2ps zmm9,YMMWORD PTR [eax+edi+$3]'); + TestDis('vcvtph2ps zmm1,YMMWORD PTR [rax*2+rdi]', #$62#$f2#$7d#$48#$13#$0c#$47, 'vcvtph2ps zmm1,YMMWORD PTR [rax*2+rdi]'); + TestDis('vcvtph2ps zmm9,YMMWORD PTR [rax*2+rdi]', #$62#$72#$7d#$48#$13#$0c#$47, 'vcvtph2ps zmm9,YMMWORD PTR [rax*2+rdi]'); + TestDis('vcvtph2ps zmm1,YMMWORD PTR [eax*2+edi]', #$67#$62#$f2#$7d#$48#$13#$0c#$47, 'vcvtph2ps zmm1,YMMWORD PTR [eax*2+edi]'); + TestDis('vcvtph2ps zmm9,YMMWORD PTR [eax*2+edi]', #$67#$62#$72#$7d#$48#$13#$0c#$47, 'vcvtph2ps zmm9,YMMWORD PTR [eax*2+edi]'); + TestDis('vcvtph2ps zmm1,YMMWORD PTR [rax*2+rdi+$3]', #$62#$f2#$7d#$48#$13#$8c#$47#$03#$00#$00#$00, 'vcvtph2ps zmm1,YMMWORD PTR [rax*2+rdi+$3]'); + TestDis('vcvtph2ps zmm9,YMMWORD PTR [rax*2+rdi+$3]', #$62#$72#$7d#$48#$13#$8c#$47#$03#$00#$00#$00, 'vcvtph2ps zmm9,YMMWORD PTR [rax*2+rdi+$3]'); + TestDis('vcvtph2ps zmm1,YMMWORD PTR [eax*2+edi+$3]', #$67#$62#$f2#$7d#$48#$13#$8c#$47#$03#$00#$00#$00, 'vcvtph2ps zmm1,YMMWORD PTR [eax*2+edi+$3]'); + TestDis('vcvtph2ps zmm9,YMMWORD PTR [eax*2+edi+$3]', #$67#$62#$72#$7d#$48#$13#$8c#$47#$03#$00#$00#$00, 'vcvtph2ps zmm9,YMMWORD PTR [eax*2+edi+$3]'); + TestDis('vcvtps2ph xmm2,xmm1,$35', #$c4#$e3#$79#$1d#$ca#$35, 'vcvtps2ph xmm2,xmm1,$35'); + TestDis('vcvtps2ph xmm2,xmm13,$35', #$c4#$63#$79#$1d#$ea#$35, 'vcvtps2ph xmm2,xmm13,$35'); + TestDis('vcvtps2ph xmm12,xmm1,$35', #$c4#$c3#$79#$1d#$cc#$35, 'vcvtps2ph xmm12,xmm1,$35'); + TestDis('vcvtps2ph xmm12,xmm13,$35', #$c4#$43#$79#$1d#$ec#$35, 'vcvtps2ph xmm12,xmm13,$35'); + TestDis('vcvtps2ph xmm2,ymm1,$35', #$c4#$e3#$7d#$1d#$ca#$35, 'vcvtps2ph xmm2,ymm1,$35'); + TestDis('vcvtps2ph xmm2,ymm13,$35', #$c4#$63#$7d#$1d#$ea#$35, 'vcvtps2ph xmm2,ymm13,$35'); + TestDis('vcvtps2ph xmm12,ymm1,$35', #$c4#$c3#$7d#$1d#$cc#$35, 'vcvtps2ph xmm12,ymm1,$35'); + TestDis('vcvtps2ph xmm12,ymm13,$35', #$c4#$43#$7d#$1d#$ec#$35, 'vcvtps2ph xmm12,ymm13,$35'); + TestDis('vcvtps2ph ymm2,zmm1,$35', #$62#$f3#$7d#$48#$1d#$ca#$35, 'vcvtps2ph ymm2,zmm1,$35'); + TestDis('vcvtps2ph ymm2,zmm13,$35', #$62#$73#$7d#$48#$1d#$ea#$35, 'vcvtps2ph ymm2,zmm13,$35'); + TestDis('vcvtps2ph ymm12,zmm1,$35', #$62#$d3#$7d#$48#$1d#$cc#$35, 'vcvtps2ph ymm12,zmm1,$35'); + TestDis('vcvtps2ph ymm12,zmm13,$35', #$62#$53#$7d#$48#$1d#$ec#$35, 'vcvtps2ph ymm12,zmm13,$35'); + TestDis('vcvtps2ph QWORD PTR [rdi],xmm3,$35', #$c4#$e3#$79#$1d#$1f#$35, 'vcvtps2ph QWORD PTR [rdi],xmm3,$35'); + TestDis('vcvtps2ph QWORD PTR [rdi],xmm11,$35', #$c4#$63#$79#$1d#$1f#$35, 'vcvtps2ph QWORD PTR [rdi],xmm11,$35'); + TestDis('vcvtps2ph XMMWORD PTR [rdi],ymm3,$35', #$c4#$e3#$7d#$1d#$1f#$35, 'vcvtps2ph XMMWORD PTR [rdi],ymm3,$35'); + TestDis('vcvtps2ph XMMWORD PTR [rdi],ymm11,$35', #$c4#$63#$7d#$1d#$1f#$35, 'vcvtps2ph XMMWORD PTR [rdi],ymm11,$35'); + TestDis('vcvtps2ph YMMWORD PTR [rdi],zmm3,$35', #$62#$f3#$7d#$48#$1d#$1f#$35, 'vcvtps2ph YMMWORD PTR [rdi],zmm3,$35'); + TestDis('vcvtps2ph YMMWORD PTR [rdi],zmm11,$35', #$62#$73#$7d#$48#$1d#$1f#$35, 'vcvtps2ph YMMWORD PTR [rdi],zmm11,$35'); + TestDis('vcvtps2ph QWORD PTR [rdi+$3],xmm3,$35', #$c4#$e3#$79#$1d#$5f#$03#$35, 'vcvtps2ph QWORD PTR [rdi+$3],xmm3,$35'); + TestDis('vcvtps2ph QWORD PTR [rdi+$3],xmm11,$35', #$c4#$63#$79#$1d#$5f#$03#$35, 'vcvtps2ph QWORD PTR [rdi+$3],xmm11,$35'); + TestDis('vcvtps2ph XMMWORD PTR [rdi+$3],ymm3,$35', #$c4#$e3#$7d#$1d#$5f#$03#$35, 'vcvtps2ph XMMWORD PTR [rdi+$3],ymm3,$35'); + TestDis('vcvtps2ph XMMWORD PTR [rdi+$3],ymm11,$35', #$c4#$63#$7d#$1d#$5f#$03#$35, 'vcvtps2ph XMMWORD PTR [rdi+$3],ymm11,$35'); + TestDis('vcvtps2ph YMMWORD PTR [rdi+$3],zmm3,$35', #$62#$f3#$7d#$48#$1d#$9f#$03#$00#$00#$00#$35, 'vcvtps2ph YMMWORD PTR [rdi+$3],zmm3,$35'); + TestDis('vcvtps2ph YMMWORD PTR [rdi+$3],zmm11,$35', #$62#$73#$7d#$48#$1d#$9f#$03#$00#$00#$00#$35, 'vcvtps2ph YMMWORD PTR [rdi+$3],zmm11,$35'); + TestDis('vcvtps2ph QWORD PTR [rax+rdi],xmm3,$35', #$c4#$e3#$79#$1d#$1c#$07#$35, 'vcvtps2ph QWORD PTR [rax+rdi],xmm3,$35'); + TestDis('vcvtps2ph QWORD PTR [rax+rdi],xmm11,$35', #$c4#$63#$79#$1d#$1c#$07#$35, 'vcvtps2ph QWORD PTR [rax+rdi],xmm11,$35'); + TestDis('vcvtps2ph XMMWORD PTR [rax+rdi],ymm3,$35', #$c4#$e3#$7d#$1d#$1c#$07#$35, 'vcvtps2ph XMMWORD PTR [rax+rdi],ymm3,$35'); + TestDis('vcvtps2ph XMMWORD PTR [rax+rdi],ymm11,$35', #$c4#$63#$7d#$1d#$1c#$07#$35, 'vcvtps2ph XMMWORD PTR [rax+rdi],ymm11,$35'); + TestDis('vcvtps2ph YMMWORD PTR [rax+rdi],zmm3,$35', #$62#$f3#$7d#$48#$1d#$1c#$07#$35, 'vcvtps2ph YMMWORD PTR [rax+rdi],zmm3,$35'); + TestDis('vcvtps2ph YMMWORD PTR [rax+rdi],zmm11,$35', #$62#$73#$7d#$48#$1d#$1c#$07#$35, 'vcvtps2ph YMMWORD PTR [rax+rdi],zmm11,$35'); + TestDis('vcvtps2ph QWORD PTR [rax+rdi+$3],xmm3,$35', #$c4#$e3#$79#$1d#$5c#$07#$03#$35, 'vcvtps2ph QWORD PTR [rax+rdi+$3],xmm3,$35'); + TestDis('vcvtps2ph QWORD PTR [rax+rdi+$3],xmm11,$35', #$c4#$63#$79#$1d#$5c#$07#$03#$35, 'vcvtps2ph QWORD PTR [rax+rdi+$3],xmm11,$35'); + TestDis('vcvtps2ph XMMWORD PTR [rax+rdi+$3],ymm3,$35', #$c4#$e3#$7d#$1d#$5c#$07#$03#$35, 'vcvtps2ph XMMWORD PTR [rax+rdi+$3],ymm3,$35'); + TestDis('vcvtps2ph XMMWORD PTR [rax+rdi+$3],ymm11,$35', #$c4#$63#$7d#$1d#$5c#$07#$03#$35, 'vcvtps2ph XMMWORD PTR [rax+rdi+$3],ymm11,$35'); + TestDis('vcvtps2ph YMMWORD PTR [rax+rdi+$3],zmm3,$35', #$62#$f3#$7d#$48#$1d#$9c#$07#$03#$00#$00#$00#$35, 'vcvtps2ph YMMWORD PTR [rax+rdi+$3],zmm3,$35'); + TestDis('vcvtps2ph YMMWORD PTR [rax+rdi+$3],zmm11,$35', #$62#$73#$7d#$48#$1d#$9c#$07#$03#$00#$00#$00#$35, 'vcvtps2ph YMMWORD PTR [rax+rdi+$3],zmm11,$35'); + TestDis('vcvtps2ph QWORD PTR [rax*2+rdi],xmm3,$35', #$c4#$e3#$79#$1d#$1c#$47#$35, 'vcvtps2ph QWORD PTR [rax*2+rdi],xmm3,$35'); + TestDis('vcvtps2ph QWORD PTR [rax*2+rdi],xmm11,$35', #$c4#$63#$79#$1d#$1c#$47#$35, 'vcvtps2ph QWORD PTR [rax*2+rdi],xmm11,$35'); + TestDis('vcvtps2ph XMMWORD PTR [rax*2+rdi],ymm3,$35', #$c4#$e3#$7d#$1d#$1c#$47#$35, 'vcvtps2ph XMMWORD PTR [rax*2+rdi],ymm3,$35'); + TestDis('vcvtps2ph XMMWORD PTR [rax*2+rdi],ymm11,$35', #$c4#$63#$7d#$1d#$1c#$47#$35, 'vcvtps2ph XMMWORD PTR [rax*2+rdi],ymm11,$35'); + TestDis('vcvtps2ph YMMWORD PTR [rax*2+rdi],zmm3,$35', #$62#$f3#$7d#$48#$1d#$1c#$47#$35, 'vcvtps2ph YMMWORD PTR [rax*2+rdi],zmm3,$35'); + TestDis('vcvtps2ph YMMWORD PTR [rax*2+rdi],zmm11,$35', #$62#$73#$7d#$48#$1d#$1c#$47#$35, 'vcvtps2ph YMMWORD PTR [rax*2+rdi],zmm11,$35'); + TestDis('vcvtps2ph QWORD PTR [rax*2+rdi+$3],xmm3,$35', #$c4#$e3#$79#$1d#$5c#$47#$03#$35, 'vcvtps2ph QWORD PTR [rax*2+rdi+$3],xmm3,$35'); + TestDis('vcvtps2ph QWORD PTR [rax*2+rdi+$3],xmm11,$35', #$c4#$63#$79#$1d#$5c#$47#$03#$35, 'vcvtps2ph QWORD PTR [rax*2+rdi+$3],xmm11,$35'); + TestDis('vcvtps2ph XMMWORD PTR [rax*2+rdi+$3],ymm3,$35', #$c4#$e3#$7d#$1d#$5c#$47#$03#$35, 'vcvtps2ph XMMWORD PTR [rax*2+rdi+$3],ymm3,$35'); + TestDis('vcvtps2ph XMMWORD PTR [rax*2+rdi+$3],ymm11,$35', #$c4#$63#$7d#$1d#$5c#$47#$03#$35, 'vcvtps2ph XMMWORD PTR [rax*2+rdi+$3],ymm11,$35'); + TestDis('vcvtps2ph YMMWORD PTR [rax*2+rdi+$3],zmm3,$35', #$62#$f3#$7d#$48#$1d#$9c#$47#$03#$00#$00#$00#$35, 'vcvtps2ph YMMWORD PTR [rax*2+rdi+$3],zmm3,$35'); + TestDis('vcvtps2ph YMMWORD PTR [rax*2+rdi+$3],zmm11,$35', #$62#$73#$7d#$48#$1d#$9c#$47#$03#$00#$00#$00#$35, 'vcvtps2ph YMMWORD PTR [rax*2+rdi+$3],zmm11,$35'); + TestDis('vcvtps2ph QWORD PTR [eax+edi],xmm3,$35', #$67#$c4#$e3#$79#$1d#$1c#$07#$35, 'vcvtps2ph QWORD PTR [eax+edi],xmm3,$35'); + TestDis('vcvtps2ph QWORD PTR [eax+edi],xmm11,$35', #$67#$c4#$63#$79#$1d#$1c#$07#$35, 'vcvtps2ph QWORD PTR [eax+edi],xmm11,$35'); + TestDis('vcvtps2ph XMMWORD PTR [eax+edi],ymm3,$35', #$67#$c4#$e3#$7d#$1d#$1c#$07#$35, 'vcvtps2ph XMMWORD PTR [eax+edi],ymm3,$35'); + TestDis('vcvtps2ph XMMWORD PTR [eax+edi],ymm11,$35', #$67#$c4#$63#$7d#$1d#$1c#$07#$35, 'vcvtps2ph XMMWORD PTR [eax+edi],ymm11,$35'); + TestDis('vcvtps2ph YMMWORD PTR [eax+edi],zmm3,$35', #$67#$62#$f3#$7d#$48#$1d#$1c#$07#$35, 'vcvtps2ph YMMWORD PTR [eax+edi],zmm3,$35'); + TestDis('vcvtps2ph YMMWORD PTR [eax+edi],zmm11,$35', #$67#$62#$73#$7d#$48#$1d#$1c#$07#$35, 'vcvtps2ph YMMWORD PTR [eax+edi],zmm11,$35'); + TestDis('vcvtps2ph QWORD PTR [eax+edi+$3],xmm3,$35', #$67#$c4#$e3#$79#$1d#$5c#$07#$03#$35, 'vcvtps2ph QWORD PTR [eax+edi+$3],xmm3,$35'); + TestDis('vcvtps2ph QWORD PTR [eax+edi+$3],xmm11,$35', #$67#$c4#$63#$79#$1d#$5c#$07#$03#$35, 'vcvtps2ph QWORD PTR [eax+edi+$3],xmm11,$35'); + TestDis('vcvtps2ph XMMWORD PTR [eax+edi+$3],ymm3,$35', #$67#$c4#$e3#$7d#$1d#$5c#$07#$03#$35, 'vcvtps2ph XMMWORD PTR [eax+edi+$3],ymm3,$35'); + TestDis('vcvtps2ph XMMWORD PTR [eax+edi+$3],ymm11,$35', #$67#$c4#$63#$7d#$1d#$5c#$07#$03#$35, 'vcvtps2ph XMMWORD PTR [eax+edi+$3],ymm11,$35'); +// TestDis('vcvtps2ph YMMWORD PTR [eax+edi+$3],zmm3,$35', #$67#$62#$f3#$7d#$48#$1d#$9c#$07#$03#$00#$00#$00, 'vcvtps2ph YMMWORD PTR [eax+edi+$3],zmm3,$35'); +// TestDis('vcvtps2ph YMMWORD PTR [eax+edi+$3],zmm11,$35', #$67#$62#$73#$7d#$48#$1d#$9c#$07#$03#$00#$00#$00, 'vcvtps2ph YMMWORD PTR [eax+edi+$3],zmm11,$35'); + IgnoreSizeWordPtr := False; Process.NewMode := dm32; @@ -811,6 +965,54 @@ begin TestDis('vpextrb BYTE PTR [esi-$F],xmm1,$2', #$c4#$e3#$79#$14#$4e#$f1#$02, 'vpextrb BYTE PTR [esi-$F],xmm1,$2'); TestDis('vpextrd DWORD PTR [esi-$F],xmm2,$2', #$c4#$e3#$79#$16#$56#$f1#$02, 'vpextrd DWORD PTR [esi-$F],xmm2,$2'); + IgnoreSizeWordPtr := True; + TestDis('vcvtph2ps xmm1,xmm2', #$c4#$e2#$79#$13#$ca, 'vcvtph2ps xmm1,xmm2'); + TestDis('vcvtph2ps xmm1,xmm1', #$c4#$e2#$79#$13#$c9, 'vcvtph2ps xmm1,xmm1'); + TestDis('vcvtph2ps xmm1,QWORD PTR [edi]', #$c4#$e2#$79#$13#$0f, 'vcvtph2ps xmm1,QWORD PTR [edi]'); + TestDis('vcvtph2ps xmm1,QWORD PTR [edi+$3]', #$c4#$e2#$79#$13#$4f#$03, 'vcvtph2ps xmm1,QWORD PTR [edi+$3]'); + TestDis('vcvtph2ps xmm1,QWORD PTR [eax+edi]', #$c4#$e2#$79#$13#$0c#$07, 'vcvtph2ps xmm1,QWORD PTR [eax+edi]'); + TestDis('vcvtph2ps xmm1,QWORD PTR [eax+edi+$3]', #$c4#$e2#$79#$13#$4c#$07#$03, 'vcvtph2ps xmm1,QWORD PTR [eax+edi+$3]'); + TestDis('vcvtph2ps xmm1,QWORD PTR [eax*2+edi]', #$c4#$e2#$79#$13#$0c#$47, 'vcvtph2ps xmm1,QWORD PTR [eax*2+edi]'); + TestDis('vcvtph2ps xmm1,QWORD PTR [eax*2+edi+$3]', #$c4#$e2#$79#$13#$4c#$47#$03, 'vcvtph2ps xmm1,QWORD PTR [eax*2+edi+$3]'); + TestDis('vcvtph2ps ymm1,xmm2', #$c4#$e2#$7d#$13#$ca, 'vcvtph2ps ymm1,xmm2'); + TestDis('vcvtph2ps ymm1,xmm1', #$c4#$e2#$7d#$13#$c9, 'vcvtph2ps ymm1,xmm1'); + TestDis('vcvtph2ps ymm1,XMMWORD PTR [edi]', #$c4#$e2#$7d#$13#$0f, 'vcvtph2ps ymm1,XMMWORD PTR [edi]'); + TestDis('vcvtph2ps ymm1,XMMWORD PTR [edi+$3]', #$c4#$e2#$7d#$13#$4f#$03, 'vcvtph2ps ymm1,XMMWORD PTR [edi+$3]'); + TestDis('vcvtph2ps ymm1,XMMWORD PTR [eax+edi]', #$c4#$e2#$7d#$13#$0c#$07, 'vcvtph2ps ymm1,XMMWORD PTR [eax+edi]'); + TestDis('vcvtph2ps ymm1,XMMWORD PTR [eax+edi+$3]', #$c4#$e2#$7d#$13#$4c#$07#$03, 'vcvtph2ps ymm1,XMMWORD PTR [eax+edi+$3]'); + TestDis('vcvtph2ps ymm1,XMMWORD PTR [eax*2+edi]', #$c4#$e2#$7d#$13#$0c#$47, 'vcvtph2ps ymm1,XMMWORD PTR [eax*2+edi]'); + TestDis('vcvtph2ps ymm1,XMMWORD PTR [eax*2+edi+$3]', #$c4#$e2#$7d#$13#$4c#$47#$03, 'vcvtph2ps ymm1,XMMWORD PTR [eax*2+edi+$3]'); + TestDis('vcvtph2ps zmm1,ymm2', #$62#$f2#$7d#$48#$13#$ca, 'vcvtph2ps zmm1,ymm2'); + TestDis('vcvtph2ps zmm1,ymm1', #$62#$f2#$7d#$48#$13#$c9, 'vcvtph2ps zmm1,ymm1'); + TestDis('vcvtph2ps zmm1,YMMWORD PTR [edi]', #$62#$f2#$7d#$48#$13#$0f, 'vcvtph2ps zmm1,YMMWORD PTR [edi]'); + TestDis('vcvtph2ps zmm1,YMMWORD PTR [edi+$3]', #$62#$f2#$7d#$48#$13#$8f#$03#$00#$00#$00, 'vcvtph2ps zmm1,YMMWORD PTR [edi+$3]'); + TestDis('vcvtph2ps zmm1,YMMWORD PTR [eax+edi]', #$62#$f2#$7d#$48#$13#$0c#$07, 'vcvtph2ps zmm1,YMMWORD PTR [eax+edi]'); + TestDis('vcvtph2ps zmm1,YMMWORD PTR [eax+edi+$3]', #$62#$f2#$7d#$48#$13#$8c#$07#$03#$00#$00#$00, 'vcvtph2ps zmm1,YMMWORD PTR [eax+edi+$3]'); + TestDis('vcvtph2ps zmm1,YMMWORD PTR [eax*2+edi]', #$62#$f2#$7d#$48#$13#$0c#$47, 'vcvtph2ps zmm1,YMMWORD PTR [eax*2+edi]'); + TestDis('vcvtph2ps zmm1,YMMWORD PTR [eax*2+edi+$3]', #$62#$f2#$7d#$48#$13#$8c#$47#$03#$00#$00#$00, 'vcvtph2ps zmm1,YMMWORD PTR [eax*2+edi+$3]'); + TestDis('vcvtps2ph xmm2,xmm1,$35', #$c4#$e3#$79#$1d#$ca#$35, 'vcvtps2ph xmm2,xmm1,$35'); + TestDis('vcvtps2ph xmm2,ymm1,$35', #$c4#$e3#$7d#$1d#$ca#$35, 'vcvtps2ph xmm2,ymm1,$35'); + TestDis('vcvtps2ph ymm2,zmm1,$35', #$62#$f3#$7d#$48#$1d#$ca#$35, 'vcvtps2ph ymm2,zmm1,$35'); + TestDis('vcvtps2ph QWORD PTR [edi],xmm3,$35', #$c4#$e3#$79#$1d#$1f#$35, 'vcvtps2ph QWORD PTR [edi],xmm3,$35'); + TestDis('vcvtps2ph XMMWORD PTR [edi],ymm3,$35', #$c4#$e3#$7d#$1d#$1f#$35, 'vcvtps2ph XMMWORD PTR [edi],ymm3,$35'); + TestDis('vcvtps2ph YMMWORD PTR [edi],zmm3,$35', #$62#$f3#$7d#$48#$1d#$1f#$35, 'vcvtps2ph YMMWORD PTR [edi],zmm3,$35'); + TestDis('vcvtps2ph QWORD PTR [edi+$3],xmm3,$35', #$c4#$e3#$79#$1d#$5f#$03#$35, 'vcvtps2ph QWORD PTR [edi+$3],xmm3,$35'); + TestDis('vcvtps2ph XMMWORD PTR [edi+$3],ymm3,$35', #$c4#$e3#$7d#$1d#$5f#$03#$35, 'vcvtps2ph XMMWORD PTR [edi+$3],ymm3,$35'); + TestDis('vcvtps2ph YMMWORD PTR [edi+$3],zmm3,$35', #$62#$f3#$7d#$48#$1d#$9f#$03#$00#$00#$00#$35, 'vcvtps2ph YMMWORD PTR [edi+$3],zmm3,$35'); + TestDis('vcvtps2ph QWORD PTR [eax+edi],xmm3,$35', #$c4#$e3#$79#$1d#$1c#$07#$35, 'vcvtps2ph QWORD PTR [eax+edi],xmm3,$35'); + TestDis('vcvtps2ph XMMWORD PTR [eax+edi],ymm3,$35', #$c4#$e3#$7d#$1d#$1c#$07#$35, 'vcvtps2ph XMMWORD PTR [eax+edi],ymm3,$35'); + TestDis('vcvtps2ph YMMWORD PTR [eax+edi],zmm3,$35', #$62#$f3#$7d#$48#$1d#$1c#$07#$35, 'vcvtps2ph YMMWORD PTR [eax+edi],zmm3,$35'); + TestDis('vcvtps2ph QWORD PTR [eax+edi+$3],xmm3,$35', #$c4#$e3#$79#$1d#$5c#$07#$03#$35, 'vcvtps2ph QWORD PTR [eax+edi+$3],xmm3,$35'); + TestDis('vcvtps2ph XMMWORD PTR [eax+edi+$3],ymm3,$35', #$c4#$e3#$7d#$1d#$5c#$07#$03#$35, 'vcvtps2ph XMMWORD PTR [eax+edi+$3],ymm3,$35'); + TestDis('vcvtps2ph YMMWORD PTR [eax+edi+$3],zmm3,$35', #$62#$f3#$7d#$48#$1d#$9c#$07#$03#$00#$00#$00#$35, 'vcvtps2ph YMMWORD PTR [eax+edi+$3],zmm3,$35'); + TestDis('vcvtps2ph QWORD PTR [eax*2+edi],xmm3,$35', #$c4#$e3#$79#$1d#$1c#$47#$35, 'vcvtps2ph QWORD PTR [eax*2+edi],xmm3,$35'); + TestDis('vcvtps2ph XMMWORD PTR [eax*2+edi],ymm3,$35', #$c4#$e3#$7d#$1d#$1c#$47#$35, 'vcvtps2ph XMMWORD PTR [eax*2+edi],ymm3,$35'); + TestDis('vcvtps2ph YMMWORD PTR [eax*2+edi],zmm3,$35', #$62#$f3#$7d#$48#$1d#$1c#$47#$35, 'vcvtps2ph YMMWORD PTR [eax*2+edi],zmm3,$35'); + TestDis('vcvtps2ph QWORD PTR [eax*2+edi+$3],xmm3,$35', #$c4#$e3#$79#$1d#$5c#$47#$03#$35, 'vcvtps2ph QWORD PTR [eax*2+edi+$3],xmm3,$35'); + TestDis('vcvtps2ph XMMWORD PTR [eax*2+edi+$3],ymm3,$35', #$c4#$e3#$7d#$1d#$5c#$47#$03#$35, 'vcvtps2ph XMMWORD PTR [eax*2+edi+$3],ymm3,$35'); + TestDis('vcvtps2ph YMMWORD PTR [eax*2+edi+$3],zmm3,$35', #$62#$f3#$7d#$48#$1d#$9c#$47#$03#$00#$00#$00#$35, 'vcvtps2ph YMMWORD PTR [eax*2+edi+$3],zmm3,$35'); + IgnoreSizeWordPtr := False; + Process.NewMode := dm64;