about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAjax <commial@gmail.com>2015-11-16 16:11:12 +0100
committerAjax <commial@gmail.com>2015-11-16 16:11:12 +0100
commit7ceb97bcb90ca809f9afea68367c5d34af01d0a7 (patch)
treec5c8162e3922e0e6e32bc5a8711e805593a648f5
parent1cc7b090c18ce3ed73ddf79bc478fdb7572cee1f (diff)
downloadmiasm-7ceb97bcb90ca809f9afea68367c5d34af01d0a7.tar.gz
miasm-7ceb97bcb90ca809f9afea68367c5d34af01d0a7.zip
x86/arch: add cmpxchg8b and cmpxchg16b in disass and tests
-rw-r--r--miasm2/arch/x86/arch.py4
-rw-r--r--test/arch/x86/arch.py8
2 files changed, 12 insertions, 0 deletions
diff --git a/miasm2/arch/x86/arch.py b/miasm2/arch/x86/arch.py
index 2b9b3cb1..74ac0939 100644
--- a/miasm2/arch/x86/arch.py
+++ b/miasm2/arch/x86/arch.py
@@ -3252,6 +3252,10 @@ addop("cmpsq", [bs8(0xa7), bs_opmode64])
 
 addop("cmpxchg", [bs8(0x0f), bs('1011000'), w8]
       + rmmod(rmreg, rm_arg_w8), [rm_arg_w8, rmreg])
+addop("cmpxchg8b", [bs8(0x0f), bs8(0xc7), bs_opmode16] + rmmod(d1, rm_arg_m64))
+addop("cmpxchg8b", [bs8(0x0f), bs8(0xc7), bs_opmode32] + rmmod(d1, rm_arg_m64))
+addop("cmpxchg16b", [bs8(0x0f), bs8(0xc7), bs_opmode64] + rmmod(d1, rm_arg_m64))
+
 # XXX TODO CMPXCHG8/16
 
 addop("comiss", [bs8(0x0f), bs8(0x2f), no_xmm_pref] +
diff --git a/test/arch/x86/arch.py b/test/arch/x86/arch.py
index 5721d72a..7d6260a2 100644
--- a/test/arch/x86/arch.py
+++ b/test/arch/x86/arch.py
@@ -832,6 +832,14 @@ reg_tests = [
      "0fb000"),
     (m32, "00000000    CMPXCHG    DWORD PTR [EAX], EAX",
      "0fb100"),
+    (m16, "00000000    CMPXCHG8B  QWORD PTR [SI+0x24]",
+     "0fc74c24"),
+    (m32, "00000000    CMPXCHG8B  QWORD PTR [ESP+0x8]",
+     "0fc74c2408"),
+    (m64, "00000000    CMPXCHG8B  QWORD PTR [RSP+0x8]",
+     "0fc74c2408"),
+    (m64, "00000000    CMPXCHG16B QWORD PTR [RSP+0x8]",
+     "480fc74c2408"),
 
     (m32, "00000000    CDQ",
      "99"),