about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorw4kfu <gw4kfu@gmail.com>2018-11-14 16:34:54 -0500
committerw4kfu <gw4kfu@gmail.com>2018-11-14 16:39:01 -0500
commita9bdf11a126fc5d82bc0a57972512c379f858afc (patch)
tree3fbe08c4cfd76baf5ab0d8410ae8dedaa9f30b68
parent599ac301037a8509cbeb3aa88a19dd314db8e683 (diff)
downloadmiasm-a9bdf11a126fc5d82bc0a57972512c379f858afc.tar.gz
miasm-a9bdf11a126fc5d82bc0a57972512c379f858afc.zip
fix simplification that delete affectation
Revert "X86 sem : mov assignexpr rot / shift"
-rw-r--r--miasm2/arch/x86/sem.py7
-rw-r--r--miasm2/ir/translators/C.py2
-rw-r--r--miasm2/jitter/codegen.py8
3 files changed, 8 insertions, 9 deletions
diff --git a/miasm2/arch/x86/sem.py b/miasm2/arch/x86/sem.py
index 565f7571..cfd7e5a7 100644
--- a/miasm2/arch/x86/sem.py
+++ b/miasm2/arch/x86/sem.py
@@ -638,7 +638,7 @@ def _rotate_tpl(ir, instr, dst, src, op, left=False):
             ]
     e = []
     if dst.size == 32 and dst in replace_regs[64]:
-        e.append(m2_expr.ExprAssign(dst[:dst.size], dst))
+        e.append(m2_expr.ExprAssign(dst, dst))
     # Don't generate conditional shifter on constant
     if isinstance(shifter, m2_expr.ExprInt):
         if int(shifter) != 0:
@@ -688,7 +688,7 @@ def rotate_with_carry_tpl(ir, instr, op, dst, src):
             ]
     e = []
     if dst.size == 32 and dst in replace_regs[64]:
-        e.append(m2_expr.ExprAssign(dst[:dst.size], dst))
+        e.append(m2_expr.ExprAssign(dst, dst))
     # Don't generate conditional shifter on constant
     if isinstance(shifter, m2_expr.ExprInt):
         if int(shifter) != 0:
@@ -776,7 +776,7 @@ def _shift_tpl(op, ir, instr, a, b, c=None, op_inv=None, left=False,
     e_do += update_flag_znp(res)
     e = []
     if a.size == 32 and a in replace_regs[64]:
-        e.append(m2_expr.ExprAssign(a[:a.size], a))
+        e.append(m2_expr.ExprAssign(a, a))
     # Don't generate conditional shifter on constant
     if isinstance(shifter, m2_expr.ExprInt):
         if int(shifter) != 0:
@@ -5652,7 +5652,6 @@ class ir_x86_16(IntermediateRepresentation):
 
         instr_ir, extra_ir = mnemo_func[
             instr.name.lower()](self, instr, *args)
-
         self.mod_pc(instr, instr_ir, extra_ir)
         instr.additional_info.except_on_instr = False
         if instr.additional_info.g1.value & 6 == 0 or \
diff --git a/miasm2/ir/translators/C.py b/miasm2/ir/translators/C.py
index a5453745..20fa210e 100644
--- a/miasm2/ir/translators/C.py
+++ b/miasm2/ir/translators/C.py
@@ -317,7 +317,7 @@ class TranslatorC(Translator):
                         ">>>": "ror",
                         "<<<": "rol"
                     }
-                    out = "bignum_%s(%s, %d, bignum_to_uint64(%s))" % (
+                    out = "bignum_%d(%s, %d, bignum_to_uint64(%s))" % (
                         op[expr.op], arg0, expr.size, arg1
                     )
                     out = "bignum_mask(%s, %d)"% (out, expr.size)
diff --git a/miasm2/jitter/codegen.py b/miasm2/jitter/codegen.py
index 6c0e7a9b..e8177ab5 100644
--- a/miasm2/jitter/codegen.py
+++ b/miasm2/jitter/codegen.py
@@ -170,7 +170,8 @@ class CGen(object):
             # Simplify high level operators
             out = []
             for irblock in irblocks:
-                new_irblock = irblock.simplify(expr_simp_high_to_explicit)[1]
+                new_irblock = self.ir_arch.irbloc_fix_regs_for_mode(irblock, self.ir_arch.attrib)
+                new_irblock = new_irblock.simplify(expr_simp_high_to_explicit)[1]
                 out.append(new_irblock)
             irblocks = out
 
@@ -631,13 +632,12 @@ class CGen(object):
         for instr, irblocks in zip(block.lines, irblocks_list):
             instr_attrib, irblocks_attributes = self.get_attributes(instr, irblocks, log_mn, log_regs)
             for index, irblock in enumerate(irblocks):
-                new_irblock = self.ir_arch.irbloc_fix_regs_for_mode(irblock, self.ir_arch.attrib)
-                label = str(new_irblock.loc_key)
+                label = str(irblock.loc_key)
                 out.append("%-40s // %.16X %s" %
                            (label + ":", instr.offset, instr))
                 if index == 0:
                     out += self.gen_pre_code(instr_attrib)
-                out += self.gen_irblock(instr_attrib, irblocks_attributes[index], instr_offsets, new_irblock)
+                out += self.gen_irblock(instr_attrib, irblocks_attributes[index], instr_offsets, irblock)
 
         out += self.gen_finalize(block)