about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorFabrice Desclaux <fabrice.desclaux@cea.fr>2020-12-23 23:39:00 +0100
committerFabrice Desclaux <fabrice.desclaux@cea.fr>2020-12-23 23:39:44 +0100
commit97a598ff03037ab5d9f5f803447cde72b9e08580 (patch)
treeb376a203a5e91152aeec69f28ee263225d438ba4
parent745199e77104ef7a1e5879daae5e344de24165ca (diff)
downloadmiasm-97a598ff03037ab5d9f5f803447cde72b9e08580.tar.gz
miasm-97a598ff03037ab5d9f5f803447cde72b9e08580.zip
Simplifications: dont propagate division
-rw-r--r--miasm/expression/simplifications_common.py18
1 files changed, 12 insertions, 6 deletions
diff --git a/miasm/expression/simplifications_common.py b/miasm/expression/simplifications_common.py
index 68d98c00..af409286 100644
--- a/miasm/expression/simplifications_common.py
+++ b/miasm/expression/simplifications_common.py
@@ -71,28 +71,34 @@ def simp_cst_propagation(e_s, expr):
                 shifter = int(int2) % int2.size
                 out = (int(int1) << shifter) | (int(int1) >> (int2.size - shifter))
             elif op_name == '/':
-                assert int(int2), "division by 0"
+                if int(int2) == 0:
+                    return expr
                 out = int(int1) // int(int2)
             elif op_name == '%':
-                assert int(int2), "division by 0"
+                if int(int2) == 0:
+                    return expr
                 out = int(int1) % int(int2)
             elif op_name == 'sdiv':
-                assert int(int2), "division by 0"
+                if int(int2) == 0:
+                    return expr
                 tmp1 = mod_size2int[int1.size](int(int1))
                 tmp2 = mod_size2int[int2.size](int(int2))
                 out = mod_size2uint[int1.size](tmp1 // tmp2)
             elif op_name == 'smod':
-                assert int(int2), "division by 0"
+                if int(int2) == 0:
+                    return expr
                 tmp1 = mod_size2int[int1.size](int(int1))
                 tmp2 = mod_size2int[int2.size](int(int2))
                 out = mod_size2uint[int1.size](tmp1 % tmp2)
             elif op_name == 'umod':
-                assert int(int2), "division by 0"
+                if int(int2) == 0:
+                    return expr
                 tmp1 = mod_size2uint[int1.size](int(int1))
                 tmp2 = mod_size2uint[int2.size](int(int2))
                 out = mod_size2uint[int1.size](tmp1 % tmp2)
             elif op_name == 'udiv':
-                assert int(int2), "division by 0"
+                if int(int2) == 0:
+                    return expr
                 tmp1 = mod_size2uint[int1.size](int(int1))
                 tmp2 = mod_size2uint[int2.size](int(int2))
                 out = mod_size2uint[int1.size](tmp1 // tmp2)