about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAjax <commial@gmail.com>2017-01-04 17:57:22 +0100
committerAjax <commial@gmail.com>2017-01-05 14:55:45 +0100
commite3fd54d6b11fc4f1b9ebaaf2526a3be363d1855c (patch)
treed39a07441684551b33e7f7a708e9497141eb5646
parent4eccb364e838bb3a2855588b95bb147ba5b256f0 (diff)
downloadmiasm-e3fd54d6b11fc4f1b9ebaaf2526a3be363d1855c.tar.gz
miasm-e3fd54d6b11fc4f1b9ebaaf2526a3be363d1855c.zip
LLVM: handle basic float operations
Diffstat (limited to '')
-rw-r--r--miasm2/jitter/llvmconvert.py18
1 files changed, 18 insertions, 0 deletions
diff --git a/miasm2/jitter/llvmconvert.py b/miasm2/jitter/llvmconvert.py
index 08b1986b..214725ad 100644
--- a/miasm2/jitter/llvmconvert.py
+++ b/miasm2/jitter/llvmconvert.py
@@ -702,6 +702,20 @@ class LLVMFunction():
                 self.update_cache(expr, ret)
                 return ret
 
+            if op in ["int_16_to_double", "int_32_to_double", "int_64_to_double",
+                      "mem_16_to_double", "mem_32_to_double", "mem_64_to_double"]:
+                arg = self.add_ir(expr.args[0])
+                ret = builder.uitofp(arg, llvm_ir.DoubleType())
+                self.update_cache(expr, ret)
+                return ret
+
+            if op in ["double_to_int_16", "double_to_int_32", "double_to_int_64",
+                      "double_to_mem_16", "double_to_mem_32", "double_to_mem_64"]:
+                arg = self.add_ir(expr.args[0])
+                ret = builder.fptoui(arg, llvm_ir.IntType(expr.size))
+                self.update_cache(expr, ret)
+                return ret
+
             if len(expr.args) > 1:
 
                 if op == "*":
@@ -718,6 +732,10 @@ class LLVMFunction():
                     callback = builder.urem
                 elif op == "/":
                     callback = builder.udiv
+                elif op == "fadd":
+                    callback = builder.fadd
+                elif op == "fdiv":
+                    callback = builder.fdiv
                 else:
                     raise NotImplementedError('Unknown op: %s' % op)