about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorFabrice Desclaux <fabrice.desclaux@cea.fr>2017-02-03 14:57:02 +0100
committerFabrice Desclaux <fabrice.desclaux@cea.fr>2017-02-03 14:57:02 +0100
commit6125d37a9cf2b9d2907668552c31a0510176a822 (patch)
treebad58924a72fe33fde7ddc37a5d4dee795b40f75
parent7d7d8e0d2148e479eaf4d098416282c07e785487 (diff)
downloadmiasm-6125d37a9cf2b9d2907668552c31a0510176a822.tar.gz
miasm-6125d37a9cf2b9d2907668552c31a0510176a822.zip
X86: add pslldq
Diffstat (limited to '')
-rw-r--r--miasm2/arch/x86/sem.py10
-rw-r--r--test/arch/x86/arch.py3
2 files changed, 13 insertions, 0 deletions
diff --git a/miasm2/arch/x86/sem.py b/miasm2/arch/x86/sem.py
index ea5830e3..df5a07a0 100644
--- a/miasm2/arch/x86/sem.py
+++ b/miasm2/arch/x86/sem.py
@@ -3627,6 +3627,15 @@ def pslld(ir, instr, a, b):
 def psllq(ir, instr, a, b):
     return ps_rl_ll(ir, instr, a, b, "<<",  64)
 
+def pslldq(ir, instr, a, b):
+    assert b.is_int()
+    e = []
+    count = int(b)
+    if count > 15:
+        return [m2_expr.ExprAff(a, m2_expr.ExprInt(0, a.size))], []
+    else:
+        return [m2_expr.ExprAff(a, a << m2_expr.ExprInt(8*count, a.size))], []
+
 
 def iret(ir, instr):
     """IRET implementation
@@ -4361,6 +4370,7 @@ mnemo_func = {'mov': mov,
               "psllw": psllw,
               "pslld": pslld,
               "psllq": psllq,
+              "pslldq": pslldq,
 
               "pmaxub": pmaxub,
               "pmaxuw": pmaxuw,
diff --git a/test/arch/x86/arch.py b/test/arch/x86/arch.py
index 14e25538..b0ea7cb4 100644
--- a/test/arch/x86/arch.py
+++ b/test/arch/x86/arch.py
@@ -2727,6 +2727,9 @@ reg_tests = [
     (m32, "00000000    PSLLW      XMM6, 0x5",
     "660F71F605"),
 
+    (m64, "00000000    PSLLDQ     XMM2, 0x1",
+    "660F73Fa01"),
+
 
     (m32, "00000000    PSLLQ      MM2, QWORD PTR [EDX]",
     "0FF312"),