about summary refs log tree commit diff stats
path: root/miasm2/jitter/llvmconvert.py
diff options
context:
space:
mode:
authorAjax <commial@gmail.com>2016-12-22 23:33:55 +0100
committerAjax <commial@gmail.com>2017-01-04 17:14:55 +0100
commit7e52dd6a0debb62e20a7ca0e39b896f8f39e8cb5 (patch)
treeb0b44cc59039c9e9e29dee5f7cb89ec9e5d093ab /miasm2/jitter/llvmconvert.py
parenta90cf9d4e3eaadfb1661e3eaf7f947a5d9e4294b (diff)
downloadmiasm-7e52dd6a0debb62e20a7ca0e39b896f8f39e8cb5.tar.gz
miasm-7e52dd6a0debb62e20a7ca0e39b896f8f39e8cb5.zip
LLVM: avoid division by zero, using Miasm wrapper instead
Diffstat (limited to '')
-rw-r--r--miasm2/jitter/llvmconvert.py16
1 files changed, 12 insertions, 4 deletions
diff --git a/miasm2/jitter/llvmconvert.py b/miasm2/jitter/llvmconvert.py
index 294f9f90..ce54239f 100644
--- a/miasm2/jitter/llvmconvert.py
+++ b/miasm2/jitter/llvmconvert.py
@@ -258,6 +258,14 @@ class LLVMContext_JIT(LLVMContext):
                                         "args": [p8,
                                                  LLVMType.IntType(k),
                                                  LLVMType.IntType(k)]}})
+            self.add_fc({"umod%s" % k: {"ret": LLVMType.IntType(k),
+                                        "args": [p8,
+                                                 LLVMType.IntType(k),
+                                                 LLVMType.IntType(k)]}})
+            self.add_fc({"udiv%s" % k: {"ret": LLVMType.IntType(k),
+                                        "args": [p8,
+                                                 LLVMType.IntType(k),
+                                                 LLVMType.IntType(k)]}})
 
     def add_log_functions(self):
         "Add functions for state logging"
@@ -592,7 +600,7 @@ class LLVMFunction():
                 self.update_cache(expr, ret)
                 return ret
 
-            if op in ["imod", "idiv"]:
+            if op in ["imod", "idiv", "umod", "udiv"]:
                 fc_ptr = self.mod.get_global(
                     "%s%s" % (op, expr.args[0].size))
                 args_casted = [self.add_ir(arg) for arg in expr.args]
@@ -619,10 +627,10 @@ class LLVMFunction():
                     callback = builder.shl
                 elif op == "a>>":
                     callback = builder.ashr
-                elif op == "udiv":
-                    callback = builder.udiv
-                elif op == "umod":
+                elif op == "%":
                     callback = builder.urem
+                elif op == "/":
+                    callback = builder.udiv
                 else:
                     raise NotImplementedError('Unknown op: %s' % op)