diff options
| author | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2020-12-23 23:39:00 +0100 |
|---|---|---|
| committer | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2020-12-23 23:39:44 +0100 |
| commit | 97a598ff03037ab5d9f5f803447cde72b9e08580 (patch) | |
| tree | b376a203a5e91152aeec69f28ee263225d438ba4 | |
| parent | 745199e77104ef7a1e5879daae5e344de24165ca (diff) | |
| download | miasm-97a598ff03037ab5d9f5f803447cde72b9e08580.tar.gz miasm-97a598ff03037ab5d9f5f803447cde72b9e08580.zip | |
Simplifications: dont propagate division
| -rw-r--r-- | miasm/expression/simplifications_common.py | 18 |
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) |