diff options
| author | serpilliere <serpilliere@users.noreply.github.com> | 2018-05-15 11:19:41 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-05-15 11:19:41 +0200 |
| commit | 4dae0d5df51165d2c535f0812761dc6bdadfe88e (patch) | |
| tree | 392c861b580d89bb8be80856fd8403d1d7c0e2bf /miasm2/ir/translators/z3_ir.py | |
| parent | 833524bb7291e82613afba2184b3c0c9801445f5 (diff) | |
| parent | de4295331794e81937a5c4073c37808ec63beaa4 (diff) | |
| download | miasm-4dae0d5df51165d2c535f0812761dc6bdadfe88e.tar.gz miasm-4dae0d5df51165d2c535f0812761dc6bdadfe88e.zip | |
Merge pull request #740 from commial/refactor/bsr-bsf
Refactor/bsr bsf
Diffstat (limited to '')
| -rw-r--r-- | miasm2/ir/translators/z3_ir.py | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/miasm2/ir/translators/z3_ir.py b/miasm2/ir/translators/z3_ir.py index 74bdd79c..536daff1 100644 --- a/miasm2/ir/translators/z3_ir.py +++ b/miasm2/ir/translators/z3_ir.py @@ -207,19 +207,20 @@ class TranslatorZ3(Translator): res = res ^ z3.Extract(i, i, arg) elif expr.op == '-': res = -res - elif expr.op == "bsf": + elif expr.op == "cnttrailzeros": size = expr.size src = res - res = z3.If((src & (1 << (size - 1))) != 0, size - 1, src) - for i in xrange(size - 2, -1, -1): + res = z3.If(src == 0, size, src) + for i in xrange(size - 1, -1, -1): res = z3.If((src & (1 << i)) != 0, i, res) - elif expr.op == "bsr": + elif expr.op == "cntleadzeros": size = expr.size src = res - res = z3.If((src & 1) != 0, 0, src) - for i in xrange(size - 1, 0, -1): + res = z3.If(src == 0, size, src) + for i in xrange(size, 0, -1): index = - i % size - res = z3.If((src & (1 << index)) != 0, index, res) + out = size - (index + 1) + res = z3.If((src & (1 << index)) != 0, out, res) else: raise NotImplementedError("Unsupported OP yet: %s" % expr.op) |