tests: Add BMI1 test cases
This commit is contained in:
@@ -221,8 +221,6 @@ main(int argc, char** argv)
|
||||
TEST("\x66\x0f\xbc\xc0", "bsf ax, ax");
|
||||
TEST("\xf2\x0f\xbc\xc0", "bsf eax, eax");
|
||||
TEST("\x66\xf2\x0f\xbc\xc0", "bsf ax, ax");
|
||||
TEST("\xf3\x0f\xbc\xc0", "tzcnt eax, eax");
|
||||
TEST("\x66\xf3\x0f\xbc\xc0", "tzcnt ax, ax");
|
||||
TEST32("\x0f\x01\x00", "sgdt [eax]");
|
||||
TEST64("\x0f\x01\x00", "sgdt [rax]");
|
||||
TEST32("\x66\x0f\x01\x00", "sgdt [eax]");
|
||||
@@ -384,6 +382,59 @@ main(int argc, char** argv)
|
||||
TEST64("\x48\xca\x0d\xff", "retfq 0xff0d");
|
||||
TEST64("\x48\xcb", "retfq");
|
||||
|
||||
// BMI1
|
||||
TEST("\xf3\x0f\xbc\xc0", "tzcnt eax, eax");
|
||||
TEST("\x66\xf3\x0f\xbc\xc0", "tzcnt ax, ax");
|
||||
TEST64("\xf3\x48\x0f\xbc\xc0", "tzcnt rax, rax");
|
||||
TEST("\xf3\x0f\xbd\xc0", "lzcnt eax, eax");
|
||||
TEST("\x66\xf3\x0f\xbd\xc0", "lzcnt ax, ax");
|
||||
TEST64("\xf3\x48\x0f\xbd\xc0", "lzcnt rax, rax");
|
||||
TEST32("\xc4\xc2\x18\xf2\xc7", "andn eax, esp, edi");
|
||||
TEST64("\xc4\xc2\x18\xf2\xc7", "andn eax, r12d, r15d");
|
||||
TEST32("\xc4\xc2\x98\xf2\xc7", "andn eax, esp, edi");
|
||||
TEST64("\xc4\xc2\x98\xf2\xc7", "andn rax, r12, r15");
|
||||
TEST64("\xc4\x42\x18\xf2\xc7", "andn r8d, r12d, r15d");
|
||||
TEST64("\xc4\x42\x98\xf2\xc7", "andn r8, r12, r15");
|
||||
TEST("\xc4\xe2\x78\xf3\xca", "blsr eax, edx");
|
||||
TEST32("\xc4\xe2\x78\xf3\x08", "blsr eax, dword ptr [eax]");
|
||||
TEST64("\xc4\xe2\x78\xf3\x08", "blsr eax, dword ptr [rax]");
|
||||
TEST32("\xc4\xe2\xf8\xf3\xca", "blsr eax, edx");
|
||||
TEST64("\xc4\xe2\xf8\xf3\xca", "blsr rax, rdx");
|
||||
TEST32("\xc4\xe2\xf8\xf3\x08", "blsr eax, dword ptr [eax]");
|
||||
TEST64("\xc4\xe2\xf8\xf3\x08", "blsr rax, qword ptr [rax]");
|
||||
TEST32("\xc4\xc2\x38\xf3\xc9", "blsr eax, ecx");
|
||||
TEST64("\xc4\xc2\x38\xf3\xc9", "blsr r8d, r9d");
|
||||
TEST32("\xc4\xc2\xb8\xf3\xc9", "blsr eax, ecx");
|
||||
TEST64("\xc4\xc2\xb8\xf3\xc9", "blsr r8, r9");
|
||||
TEST32("\xc4\xe2\x38\xf3\xc9", "blsr eax, ecx");
|
||||
TEST64("\xc4\xe2\x38\xf3\xc9", "blsr r8d, ecx");
|
||||
TEST32("\xc4\xe2\xb8\xf3\xc9", "blsr eax, ecx");
|
||||
TEST64("\xc4\xe2\xb8\xf3\xc9", "blsr r8, rcx");
|
||||
TEST32("\xc4\xc2\x78\xf3\xc9", "blsr eax, ecx");
|
||||
TEST64("\xc4\xc2\x78\xf3\xc9", "blsr eax, r9d");
|
||||
TEST32("\xc4\xc2\xf8\xf3\xc9", "blsr eax, ecx");
|
||||
TEST64("\xc4\xc2\xf8\xf3\xc9", "blsr rax, r9");
|
||||
TEST("\xc4\xe2\x78\xf3\xd2", "blsmsk eax, edx");
|
||||
TEST32("\xc4\xe2\x78\xf3\x10", "blsmsk eax, dword ptr [eax]");
|
||||
TEST64("\xc4\xe2\x78\xf3\x10", "blsmsk eax, dword ptr [rax]");
|
||||
TEST32("\xc4\xe2\xf8\xf3\xd2", "blsmsk eax, edx");
|
||||
TEST64("\xc4\xe2\xf8\xf3\xd2", "blsmsk rax, rdx");
|
||||
TEST32("\xc4\xe2\xf8\xf3\x10", "blsmsk eax, dword ptr [eax]");
|
||||
TEST64("\xc4\xe2\xf8\xf3\x10", "blsmsk rax, qword ptr [rax]");
|
||||
TEST("\xc4\xe2\x78\xf3\xda", "blsi eax, edx");
|
||||
TEST32("\xc4\xe2\x78\xf3\x18", "blsi eax, dword ptr [eax]");
|
||||
TEST64("\xc4\xe2\x78\xf3\x18", "blsi eax, dword ptr [rax]");
|
||||
TEST32("\xc4\xe2\xf8\xf3\xda", "blsi eax, edx");
|
||||
TEST64("\xc4\xe2\xf8\xf3\xda", "blsi rax, rdx");
|
||||
TEST32("\xc4\xe2\xf8\xf3\x18", "blsi eax, dword ptr [eax]");
|
||||
TEST64("\xc4\xe2\xf8\xf3\x18", "blsi rax, qword ptr [rax]");
|
||||
TEST32("\xc4\xc2\x18\xf7\xc7", "bextr eax, edi, esp");
|
||||
TEST64("\xc4\xc2\x18\xf7\xc7", "bextr eax, r15d, r12d");
|
||||
TEST32("\xc4\xc2\x98\xf7\xc7", "bextr eax, edi, esp");
|
||||
TEST64("\xc4\xc2\x98\xf7\xc7", "bextr rax, r15, r12");
|
||||
TEST64("\xc4\x42\x18\xf7\xc7", "bextr r8d, r15d, r12d");
|
||||
TEST64("\xc4\x42\x98\xf7\xc7", "bextr r8, r15, r12");
|
||||
|
||||
// NFx/66+F2/F3 combinations
|
||||
TEST("\x0f\xc7\xf0", "rdrand eax");
|
||||
TEST64("\x48\x0f\xc7\xf0", "rdrand rax");
|
||||
|
||||
@@ -97,8 +97,6 @@ TEST("\x66\xf3\x0f\xb8\xc2", POPCNT16rr, 0, FE_AX, FE_DX);
|
||||
TEST("\xf3\x48\x0f\xb8\xc2", POPCNT64rr, 0, FE_AX, FE_DX);
|
||||
TEST("\x0f\xbc\xc2", BSF32rr, 0, FE_AX, FE_DX);
|
||||
TEST("\x66\x0f\xbc\xc2", BSF16rr, 0, FE_AX, FE_DX);
|
||||
TEST("\xf3\x0f\xbc\xc2", TZCNT32rr, 0, FE_AX, FE_DX);
|
||||
TEST("\x66\xf3\x0f\xbc\xc2", TZCNT16rr, 0, FE_AX, FE_DX);
|
||||
TEST("\x0f\x01\xd0", XGETBV, 0);
|
||||
TEST("\x41\x90", XCHG32rr, 0, FE_R8, FE_AX);
|
||||
TEST("\x91", XCHG32rr, 0, FE_CX, FE_AX);
|
||||
@@ -177,6 +175,40 @@ TEST("", MOV64ar, FE_ADDR32, 0xfedcba98, FE_CX);
|
||||
|
||||
TEST("\xc7\xf8\x02\x00\x00\x00", XBEGIN, 0, FE_PTR(8));
|
||||
|
||||
// BMI1
|
||||
TEST("\xf3\x0f\xbc\xc2", TZCNT32rr, 0, FE_AX, FE_DX);
|
||||
TEST("\x66\xf3\x0f\xbc\xc2", TZCNT16rr, 0, FE_AX, FE_DX);
|
||||
TEST("\xf3\x48\x0f\xbc\xc2", TZCNT64rr, 0, FE_AX, FE_DX);
|
||||
TEST("\xf3\x0f\xbd\xc2", LZCNT32rr, 0, FE_AX, FE_DX);
|
||||
TEST("\x66\xf3\x0f\xbd\xc2", LZCNT16rr, 0, FE_AX, FE_DX);
|
||||
TEST("\xf3\x48\x0f\xbd\xc2", LZCNT64rr, 0, FE_AX, FE_DX);
|
||||
TEST("\xc4\xc2\x18\xf2\xc7", ANDN32rrr, 0, FE_AX, FE_R12, FE_R15);
|
||||
TEST("\xc4\xc2\x98\xf2\xc7", ANDN64rrr, 0, FE_AX, FE_R12, FE_R15);
|
||||
TEST("\xc4\x42\x18\xf2\xc7", ANDN32rrr, 0, FE_R8, FE_R12, FE_R15);
|
||||
TEST("\xc4\x42\x98\xf2\xc7", ANDN64rrr, 0, FE_R8, FE_R12, FE_R15);
|
||||
TEST("\xc4\xe2\x78\xf3\xca", BLSR32rr, 0, FE_AX, FE_DX);
|
||||
TEST("\xc4\xe2\x78\xf3\x08", BLSR32rm, 0, FE_AX, FE_MEM(FE_AX, 0, FE_NOREG, 0));
|
||||
TEST("\xc4\xe2\xf8\xf3\xca", BLSR64rr, 0, FE_AX, FE_DX);
|
||||
TEST("\xc4\xe2\xf8\xf3\x08", BLSR64rm, 0, FE_AX, FE_MEM(FE_AX, 0, FE_NOREG, 0));
|
||||
TEST("\xc4\xc2\x38\xf3\xc9", BLSR32rr, 0, FE_R8, FE_R9);
|
||||
TEST("\xc4\xc2\xb8\xf3\xc9", BLSR64rr, 0, FE_R8, FE_R9);
|
||||
TEST("\xc4\xe2\x38\xf3\xc9", BLSR32rr, 0, FE_R8, FE_CX);
|
||||
TEST("\xc4\xe2\xb8\xf3\xc9", BLSR64rr, 0, FE_R8, FE_CX);
|
||||
TEST("\xc4\xc2\x78\xf3\xc9", BLSR32rr, 0, FE_AX, FE_R9);
|
||||
TEST("\xc4\xc2\xf8\xf3\xc9", BLSR64rr, 0, FE_AX, FE_R9);
|
||||
TEST("\xc4\xe2\x78\xf3\xd2", BLSMSK32rr, 0, FE_AX, FE_DX);
|
||||
TEST("\xc4\xe2\x78\xf3\x10", BLSMSK32rm, 0, FE_AX, FE_MEM(FE_AX, 0, FE_NOREG, 0));
|
||||
TEST("\xc4\xe2\xf8\xf3\xd2", BLSMSK64rr, 0, FE_AX, FE_DX);
|
||||
TEST("\xc4\xe2\xf8\xf3\x10", BLSMSK64rm, 0, FE_AX, FE_MEM(FE_AX, 0, FE_NOREG, 0));
|
||||
TEST("\xc4\xe2\x78\xf3\xda", BLSI32rr, 0, FE_AX, FE_DX);
|
||||
TEST("\xc4\xe2\x78\xf3\x18", BLSI32rm, 0, FE_AX, FE_MEM(FE_AX, 0, FE_NOREG, 0));
|
||||
TEST("\xc4\xe2\xf8\xf3\xda", BLSI64rr, 0, FE_AX, FE_DX);
|
||||
TEST("\xc4\xe2\xf8\xf3\x18", BLSI64rm, 0, FE_AX, FE_MEM(FE_AX, 0, FE_NOREG, 0));
|
||||
TEST("\xc4\xc2\x18\xf7\xc7", BEXTR32rrr, 0, FE_AX, FE_R15, FE_R12);
|
||||
TEST("\xc4\xc2\x98\xf7\xc7", BEXTR64rrr, 0, FE_AX, FE_R15, FE_R12);
|
||||
TEST("\xc4\x42\x18\xf7\xc7", BEXTR32rrr, 0, FE_R8, FE_R15, FE_R12);
|
||||
TEST("\xc4\x42\x98\xf7\xc7", BEXTR64rrr, 0, FE_R8, FE_R15, FE_R12);
|
||||
|
||||
TEST("\x0f\x01\xc6", WRMSRNS, 0);
|
||||
TEST("\xf2\x0f\x01\xc6", RDMSRLIST, 0);
|
||||
TEST("\xf3\x0f\x01\xc6", WRMSRLIST, 0);
|
||||
|
||||
Reference in New Issue
Block a user