breaking! instrs: Decode VMOVS[SD] loads correctly
These instruction ignore the VEX operand if the source operand is a memory location. API compatibility: separate handling for different operand types in the second and third operand (REG+REG vs. MEM+NONE) is needed.
This commit is contained in:
@@ -330,6 +330,10 @@ main(int argc, char** argv)
|
||||
TEST("\xc5\xf9\x6e\xc8", "vmovd xmm1, eax");
|
||||
TEST64("\xc4\xe1\xf9\x6e\xc8", "vmovq xmm1, rax");
|
||||
TEST32("\xc4\xe1\xf9\x6e\xc8", "vmovd xmm1, eax");
|
||||
TEST("\xc5\xf2\x10\xc2", "vmovss xmm0, xmm1, xmm2");
|
||||
TEST("\xc5\xf6\x10\xc2", "vmovss xmm0, xmm1, xmm2"); // VEX.L=1
|
||||
TEST("\xc5\xfa\x11\x04\x25\x34\x12\x00\x00", "vmovss dword ptr [0x1234], xmm0");
|
||||
TEST("\xc5\xf2\x11\x04\x25\x34\x12\x00\x00", "UD"); // VEX.vvvv != 0
|
||||
TEST("\xc5\xf2\x2a\xc0", "vcvtsi2ss xmm0, xmm1, eax");
|
||||
TEST32("\xc4\xe1\xf2\x2a\xc0", "vcvtsi2ss xmm0, xmm1, eax");
|
||||
TEST64("\xc4\xe1\xf2\x2a\xc0", "vcvtsi2ss xmm0, xmm1, rax");
|
||||
|
||||
Reference in New Issue
Block a user