diff options
| -rw-r--r-- | miasm2/jitter/llvmconvert.py | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/miasm2/jitter/llvmconvert.py b/miasm2/jitter/llvmconvert.py index 4fa67eaf..5ae94d9b 100644 --- a/miasm2/jitter/llvmconvert.py +++ b/miasm2/jitter/llvmconvert.py @@ -482,7 +482,7 @@ class LLVMContext_IRCompilation(LLVMContext): return builder.store(value, ptr_casted) -class LLVMFunction(): +class LLVMFunction(object): """Represent a LLVM function Implementation note: @@ -893,6 +893,22 @@ class LLVMFunction(): self.update_cache(expr, ret) return ret + unsigned_cmps = { + "==": "==", + "<u": "<", + "<=u": "<=" + } + if op in unsigned_cmps: + op = unsigned_cmps[op] + args = [self.add_ir(arg) for arg in expr.args] + ret = builder.select(builder.icmp_unsigned(op, + args[0], + args[1]), + llvm_ir.IntType(expr.size)(1), + llvm_ir.IntType(expr.size)(0)) + self.update_cache(expr, ret) + return ret + if op in [">>", "<<", "a>>"]: assert len(expr.args) == 2 # Undefined behavior must be enforced to 0 |