diff options
| author | Ajax <commial@gmail.com> | 2017-01-04 17:57:22 +0100 |
|---|---|---|
| committer | Ajax <commial@gmail.com> | 2017-01-05 14:55:45 +0100 |
| commit | e3fd54d6b11fc4f1b9ebaaf2526a3be363d1855c (patch) | |
| tree | d39a07441684551b33e7f7a708e9497141eb5646 | |
| parent | 4eccb364e838bb3a2855588b95bb147ba5b256f0 (diff) | |
| download | miasm-e3fd54d6b11fc4f1b9ebaaf2526a3be363d1855c.tar.gz miasm-e3fd54d6b11fc4f1b9ebaaf2526a3be363d1855c.zip | |
LLVM: handle basic float operations
Diffstat (limited to '')
| -rw-r--r-- | miasm2/jitter/llvmconvert.py | 18 |
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) |