diff options
| author | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2018-08-05 18:50:42 +0200 |
|---|---|---|
| committer | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2018-08-06 18:58:07 +0200 |
| commit | b8d6b97b0f47a8e97f7c52ef0bd7b44a2e1fdc2b (patch) | |
| tree | c30de5b31e93cf546dc184d80213c746cd46c017 | |
| parent | ce6210e68edea008bf0d37810b8d040d15f2f249 (diff) | |
| download | miasm-b8d6b97b0f47a8e97f7c52ef0bd7b44a2e1fdc2b.tar.gz miasm-b8d6b97b0f47a8e97f7c52ef0bd7b44a2e1fdc2b.zip | |
LLVM: zero/sign ext support
| -rw-r--r-- | miasm2/jitter/llvmconvert.py | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/miasm2/jitter/llvmconvert.py b/miasm2/jitter/llvmconvert.py index 4a0eae93..de5f19df 100644 --- a/miasm2/jitter/llvmconvert.py +++ b/miasm2/jitter/llvmconvert.py @@ -830,6 +830,28 @@ class LLVMFunction(): self.update_cache(expr, ret) return ret + + if op.startswith('zeroExt_'): + arg = expr.args[0] + if expr.size == arg.size: + return arg + new_expr = ExprCompose(arg, ExprInt(0, expr.size - arg.size)) + return self.add_ir(new_expr) + + if op.startswith("signExt_"): + arg = expr.args[0] + add_size = expr.size - arg.size + new_expr = ExprCompose( + arg, + ExprCond( + arg.msb(), + ExprInt(size2mask(add_size), add_size), + ExprInt(0, add_size) + ) + ) + return self.add_ir(new_expr) + + if op == "segm": fc_ptr = self.mod.get_global("segm2addr") |