about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--miasm2/arch/x86/arch.py14
-rw-r--r--test/arch/x86/arch.py17
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"),
+
 
 ]