instrs: Add RAO-INT (AADD/AAND/AXOR/AOR)
This commit is contained in:
@@ -421,6 +421,23 @@ main(int argc, char** argv)
|
||||
TEST64("\xf2\x0f\x01\xc6", "rdmsrlist");
|
||||
TEST64("\xf3\x0f\x01\xc6", "wrmsrlist");
|
||||
|
||||
TEST("\x0f\x38\xfc\xc1", "UD"); // Must be memory operand
|
||||
TEST32("\x0f\x38\xfc\x01", "aadd dword ptr [ecx], eax");
|
||||
TEST64("\x0f\x38\xfc\x01", "aadd dword ptr [rcx], eax");
|
||||
TEST64("\x48\x0f\x38\xfc\x01", "aadd qword ptr [rcx], rax");
|
||||
TEST("\x66\x0f\x38\xfc\xc1", "UD"); // Must be memory operand
|
||||
TEST32("\x66\x0f\x38\xfc\x01", "aand dword ptr [ecx], eax");
|
||||
TEST64("\x66\x0f\x38\xfc\x01", "aand dword ptr [rcx], eax");
|
||||
TEST64("\x66\x48\x0f\x38\xfc\x01", "aand qword ptr [rcx], rax");
|
||||
TEST("\xf3\x0f\x38\xfc\xc1", "UD"); // Must be memory operand
|
||||
TEST32("\xf3\x0f\x38\xfc\x01", "axor dword ptr [ecx], eax");
|
||||
TEST64("\xf3\x0f\x38\xfc\x01", "axor dword ptr [rcx], eax");
|
||||
TEST64("\xf3\x48\x0f\x38\xfc\x01", "axor qword ptr [rcx], rax");
|
||||
TEST("\xf2\x0f\x38\xfc\xc1", "UD"); // Must be memory operand
|
||||
TEST32("\xf2\x0f\x38\xfc\x01", "aor dword ptr [ecx], eax");
|
||||
TEST64("\xf2\x0f\x38\xfc\x01", "aor dword ptr [rcx], eax");
|
||||
TEST64("\xf2\x48\x0f\x38\xfc\x01", "aor qword ptr [rcx], rax");
|
||||
|
||||
TEST("\x0f\xae\xe8", "lfence");
|
||||
TEST("\x0f\xae\xe9", "lfence");
|
||||
TEST("\x0f\xae\xef", "lfence");
|
||||
|
||||
@@ -181,6 +181,15 @@ TEST("\x0f\x01\xc6", WRMSRNS, 0);
|
||||
TEST("\xf2\x0f\x01\xc6", RDMSRLIST, 0);
|
||||
TEST("\xf3\x0f\x01\xc6", WRMSRLIST, 0);
|
||||
|
||||
TEST("\x0f\x38\xfc\x01", AADD32mr, 0, FE_MEM(FE_CX, 0, FE_NOREG, 0), FE_AX);
|
||||
TEST("\x48\x0f\x38\xfc\x01", AADD64mr, 0, FE_MEM(FE_CX, 0, FE_NOREG, 0), FE_AX);
|
||||
TEST("\x66\x0f\x38\xfc\x01", AAND32mr, 0, FE_MEM(FE_CX, 0, FE_NOREG, 0), FE_AX);
|
||||
TEST("\x66\x48\x0f\x38\xfc\x01", AAND64mr, 0, FE_MEM(FE_CX, 0, FE_NOREG, 0), FE_AX);
|
||||
TEST("\xf3\x0f\x38\xfc\x01", AXOR32mr, 0, FE_MEM(FE_CX, 0, FE_NOREG, 0), FE_AX);
|
||||
TEST("\xf3\x48\x0f\x38\xfc\x01", AXOR64mr, 0, FE_MEM(FE_CX, 0, FE_NOREG, 0), FE_AX);
|
||||
TEST("\xf2\x0f\x38\xfc\x01", AOR32mr, 0, FE_MEM(FE_CX, 0, FE_NOREG, 0), FE_AX);
|
||||
TEST("\xf2\x48\x0f\x38\xfc\x01", AOR64mr, 0, FE_MEM(FE_CX, 0, FE_NOREG, 0), FE_AX);
|
||||
|
||||
// Test FPU instructions
|
||||
TEST("\xd8\x00", FADDm32, 0, FE_MEM(FE_AX, 0, FE_NOREG, 0));
|
||||
TEST("\xdc\x00", FADDm64, 0, FE_MEM(FE_AX, 0, FE_NOREG, 0));
|
||||
|
||||
@@ -1620,6 +1620,12 @@ NP.0f01c6 NP - - - - WRMSRNS F=WRMSRNS
|
||||
F2.0f01c6 NP - - - - RDMSRLIST O64 F=MSRLIST
|
||||
F3.0f01c6 NP - - - - WRMSRLIST O64 F=MSRLIST
|
||||
|
||||
# RAO-INT
|
||||
NP.0f38fc/m MR My Gy - - AADD F=RAO-INT
|
||||
66.0f38fc/m MR My Gy - - AAND F=RAO-INT
|
||||
F3.0f38fc/m MR My Gy - - AXOR F=RAO-INT
|
||||
F2.0f38fc/m MR My Gy - - AOR F=RAO-INT
|
||||
|
||||
# AESKLE/KL (Key Locker)
|
||||
F3.0f38d8/0m M M - - - AESENCWIDE128KL F=AESKLE
|
||||
F3.0f38d8/1m M M - - - AESDECWIDE128KL F=AESKLE
|
||||
|
||||
Reference in New Issue
Block a user