tests: Add BMI1 test cases

This commit is contained in:
Alexis Engelke
2022-11-30 09:31:25 +01:00
parent c54a749713
commit e72e288def
2 changed files with 87 additions and 4 deletions

View File

@@ -221,8 +221,6 @@ main(int argc, char** argv)
TEST("\x66\x0f\xbc\xc0", "bsf ax, ax"); TEST("\x66\x0f\xbc\xc0", "bsf ax, ax");
TEST("\xf2\x0f\xbc\xc0", "bsf eax, eax"); TEST("\xf2\x0f\xbc\xc0", "bsf eax, eax");
TEST("\x66\xf2\x0f\xbc\xc0", "bsf ax, ax"); 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]"); TEST32("\x0f\x01\x00", "sgdt [eax]");
TEST64("\x0f\x01\x00", "sgdt [rax]"); TEST64("\x0f\x01\x00", "sgdt [rax]");
TEST32("\x66\x0f\x01\x00", "sgdt [eax]"); 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\xca\x0d\xff", "retfq 0xff0d");
TEST64("\x48\xcb", "retfq"); 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 // NFx/66+F2/F3 combinations
TEST("\x0f\xc7\xf0", "rdrand eax"); TEST("\x0f\xc7\xf0", "rdrand eax");
TEST64("\x48\x0f\xc7\xf0", "rdrand rax"); TEST64("\x48\x0f\xc7\xf0", "rdrand rax");

View File

@@ -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("\xf3\x48\x0f\xb8\xc2", POPCNT64rr, 0, FE_AX, FE_DX);
TEST("\x0f\xbc\xc2", BSF32rr, 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("\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("\x0f\x01\xd0", XGETBV, 0);
TEST("\x41\x90", XCHG32rr, 0, FE_R8, FE_AX); TEST("\x41\x90", XCHG32rr, 0, FE_R8, FE_AX);
TEST("\x91", XCHG32rr, 0, FE_CX, 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)); 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("\x0f\x01\xc6", WRMSRNS, 0);
TEST("\xf2\x0f\x01\xc6", RDMSRLIST, 0); TEST("\xf2\x0f\x01\xc6", RDMSRLIST, 0);
TEST("\xf3\x0f\x01\xc6", WRMSRLIST, 0); TEST("\xf3\x0f\x01\xc6", WRMSRLIST, 0);