diff options
| -rw-r--r-- | miasm2/arch/x86/arch.py | 14 | ||||
| -rw-r--r-- | test/arch/x86/arch.py | 17 |
2 files changed, 30 insertions, 1 deletions
diff --git a/miasm2/arch/x86/arch.py b/miasm2/arch/x86/arch.py index 0637d3e9..280090aa 100644 --- a/miasm2/arch/x86/arch.py +++ b/miasm2/arch/x86/arch.py @@ -3620,6 +3620,7 @@ addop("lgs", [bs8(0x0f), bs8(0xb5)] + rmmod(rmreg, rm_arg_x=rm_mem, modrm=mod_me addop("lgdt", [bs8(0x0f), bs8(0x01)] + rmmod(d2, modrm=mod_mem)) addop("lidt", [bs8(0x0f), bs8(0x01)] + rmmod(d3, modrm=mod_mem)) +addop("lfence", [bs8(0x0f), bs8(0xae), bs8(0xe8)]) addop("leave", [bs8(0xc9), stk]) @@ -3676,6 +3677,8 @@ addop("movq", [bs8(0x0f), bs8(0x7e), pref_f3] + addop("movq", [bs8(0x0f), bs8(0xd6), pref_66] + rmmod(xmm_reg, rm_arg_xmm_m64), [rm_arg_xmm_m64, xmm_reg]) +addop("movmskps", [bs8(0x0f), bs8(0x50), no_xmm_pref] + + rmmod(reg, rm_arg_xmm_reg)) addop("addss", [bs8(0x0f), bs8(0x58), pref_f3] + rmmod(xmm_reg, rm_arg_xmm_m32)) @@ -3759,6 +3762,7 @@ addop("prefetch0", [bs8(0x0f), bs8(0x18)] + rmmod(d1, rm_arg_m08)) addop("prefetch1", [bs8(0x0f), bs8(0x18)] + rmmod(d2, rm_arg_m08)) addop("prefetch2", [bs8(0x0f), bs8(0x18)] + rmmod(d3, rm_arg_m08)) addop("prefetchnta", [bs8(0x0f), bs8(0x18)] + rmmod(d0, rm_arg_m08)) +addop("prefetchw", [bs8(0x0f), bs8(0x0d)] + rmmod(d1, rm_arg_m08)) addop("pushw", [bs8(0xff), stk, bs_opmode16] + rmmod(d6)) addop("pushw", [bs("01010"), stk, reg, bs_opmode16]) @@ -4217,6 +4221,11 @@ addop("pcmpeqd", [bs8(0x0f), bs8(0x76), no_xmm_pref] + addop("pcmpeqd", [bs8(0x0f), bs8(0x76), pref_66] + rmmod(xmm_reg, rm_arg_xmm)) +addop("pcmpgtd", [bs8(0x0f), bs8(0x66), no_xmm_pref] + + rmmod(mm_reg, rm_arg_mm)) +addop("pcmpgtd", [bs8(0x0f), bs8(0x66), pref_66] + + rmmod(xmm_reg, rm_arg_xmm)) + addop("punpckhbw", [bs8(0x0f), bs8(0x68), no_xmm_pref] + rmmod(mm_reg, rm_arg_mm)) @@ -4316,6 +4325,11 @@ addop("pmovmskb", [bs8(0x0f), bs8(0xd7), no_xmm_pref] + addop("pmovmskb", [bs8(0x0f), bs8(0xd7), pref_66] + rmmod(reg, rm_arg_xmm_reg)) +addop("shufps", [bs8(0x0f), bs8(0xc6), no_xmm_pref] + + rmmod(xmm_reg, rm_arg_xmm) + [u08]) +addop("shufpd", [bs8(0x0f), bs8(0xc6), pref_66] + + rmmod(xmm_reg, rm_arg_xmm) + [u08]) + mn_x86.bintree = factor_one_bit(mn_x86.bintree) # mn_x86.bintree = factor_fields_all(mn_x86.bintree) diff --git a/test/arch/x86/arch.py b/test/arch/x86/arch.py index d48a707c..9a7f3d8a 100644 --- a/test/arch/x86/arch.py +++ b/test/arch/x86/arch.py @@ -1744,7 +1744,8 @@ reg_tests = [ "0f1818"), (m32, "00000000 PREFETCHNTA BYTE PTR [EAX]", "0f1800"), - + (m64, "00000000 PREFETCHW BYTE PTR [RDI]", + "0f0d0f"), (m16, "00000000 PUSHW AX", "50"), @@ -2134,6 +2135,8 @@ reg_tests = [ (m32, "00000000 LIDT DWORD PTR [EAX]", "0f0118"), + (m64, "00000000 LFENCE", + "0faee8"), (m32, "00000000 SUB AL, 0x11", @@ -2314,6 +2317,9 @@ reg_tests = [ (m64, "00000000 MOVSS DWORD PTR [RBP+0xFFFFFFFFFFFFFC00], XMM0", "f30f118500fcffff"), + (m64, "00000000 MOVMSKPS EAX, XMM2", + "0f50c2"), + (m32, "00000000 ADDSS XMM2, DWORD PTR [ECX]", "f30f5811"), (m32, "00000000 ADDSS XMM1, XMM2", @@ -2764,6 +2770,10 @@ reg_tests = [ (m32, "00000000 PCMPEQD XMM2, XMMWORD PTR [EDX]", "660F7612"), + (m64, "00000000 PCMPGTD MM3, MM0", + "0f66d8"), + (m64, "00000000 PCMPGTD XMM3, XMM0", + "660f66d8"), (m32, "00000000 PUNPCKHBW MM2, QWORD PTR [EDX]", "0F6812"), @@ -2897,6 +2907,11 @@ reg_tests = [ (m32, "00000000 PMOVMSKB EAX, XMM7", "660FD7C7"), + (m64, "00000000 SHUFPS XMM0, XMM6, 0x44", + "0fc6c644"), + (m64, "00000000 SHUFPD XMM0, XMM6, 0x44", + "660fc6c644"), + ] |