diff options
| author | serpilliere <fabrice.desclaux@cea.fr> | 2015-10-19 22:47:24 +0200 |
|---|---|---|
| committer | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2015-10-23 10:53:51 +0200 |
| commit | fb3c34d1ac3d7ef71b4f6c50600e1f33a8f2fe99 (patch) | |
| tree | d0d45b754f086c13098ac7b626d98b69b87ae4a6 /miasm2/arch/x86/sem.py | |
| parent | c19280455a1fcb08d38806a17aa0893fbc23019c (diff) | |
| download | miasm-fb3c34d1ac3d7ef71b4f6c50600e1f33a8f2fe99.tar.gz miasm-fb3c34d1ac3d7ef71b4f6c50600e1f33a8f2fe99.zip | |
Arch/x86/sem: add comiss/comisd
Diffstat (limited to '')
| -rw-r--r-- | miasm2/arch/x86/sem.py | 42 |
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, |