about summary refs log tree commit diff stats
path: root/miasm2/arch/x86/sem.py
diff options
context:
space:
mode:
authorserpilliere <fabrice.desclaux@cea.fr>2015-10-19 22:47:24 +0200
committerFabrice Desclaux <fabrice.desclaux@cea.fr>2015-10-23 10:53:51 +0200
commitfb3c34d1ac3d7ef71b4f6c50600e1f33a8f2fe99 (patch)
treed0d45b754f086c13098ac7b626d98b69b87ae4a6 /miasm2/arch/x86/sem.py
parentc19280455a1fcb08d38806a17aa0893fbc23019c (diff)
downloadmiasm-fb3c34d1ac3d7ef71b4f6c50600e1f33a8f2fe99.tar.gz
miasm-fb3c34d1ac3d7ef71b4f6c50600e1f33a8f2fe99.zip
Arch/x86/sem: add comiss/comisd
Diffstat (limited to '')
-rw-r--r--miasm2/arch/x86/sem.py42
1 files changed, 42 insertions, 0 deletions
diff --git a/miasm2/arch/x86/sem.py b/miasm2/arch/x86/sem.py
index 116755a7..d4274755 100644
--- a/miasm2/arch/x86/sem.py
+++ b/miasm2/arch/x86/sem.py
@@ -1996,6 +1996,46 @@ def fucompp(ir, instr, a=None, b=None):
     return fcompp(ir, instr, a, b)
 
 
+def comiss(ir, instr, a, b):
+    # TODO unordered float
+
+    e = []
+
+    a = m2_expr.ExprOp('int_32_to_float', a[:32])
+    b = m2_expr.ExprOp('int_32_to_float', b[:32])
+
+    e.append(m2_expr.ExprAff(cf, m2_expr.ExprOp('fcom_c0', a, b)))
+    e.append(m2_expr.ExprAff(pf, m2_expr.ExprOp('fcom_c2', a, b)))
+    e.append(m2_expr.ExprAff(zf, m2_expr.ExprOp('fcom_c3', a, b)))
+
+    e.append(m2_expr.ExprAff(of, m2_expr.ExprInt1(0)))
+    e.append(m2_expr.ExprAff(nf, m2_expr.ExprInt1(0)))
+    e.append(m2_expr.ExprAff(af, m2_expr.ExprInt1(0)))
+
+    e += set_float_cs_eip(instr)
+    return e, []
+
+
+def comisd(ir, instr, a, b):
+    # TODO unordered float
+
+    e = []
+
+    a = m2_expr.ExprOp('int_64_to_double', a[:64])
+    b = m2_expr.ExprOp('int_64_to_double', b[:64])
+
+    e.append(m2_expr.ExprAff(cf, m2_expr.ExprOp('fcom_c0', a, b)))
+    e.append(m2_expr.ExprAff(pf, m2_expr.ExprOp('fcom_c2', a, b)))
+    e.append(m2_expr.ExprAff(zf, m2_expr.ExprOp('fcom_c3', a, b)))
+
+    e.append(m2_expr.ExprAff(of, m2_expr.ExprInt1(0)))
+    e.append(m2_expr.ExprAff(nf, m2_expr.ExprInt1(0)))
+    e.append(m2_expr.ExprAff(af, m2_expr.ExprInt1(0)))
+
+    e += set_float_cs_eip(instr)
+    return e, []
+
+
 def fld(ir, instr, a):
     src = mem2double(a)
 
@@ -3753,6 +3793,8 @@ mnemo_func = {'mov': mov,
               'fucom': fucom,
               'fucomp': fucomp,
               'fucompp': fucompp,
+              'comiss': comiss,
+              'comisd': comisd,
               'fcomi': fcomi,
               'fcomip': fcomip,
               'nop': nop,