Mercurial > hg > octave-avbm
changeset 14949:c57cfdb37f81
Add power to jit
author | Max Brister <max@2bass.com> |
---|---|
date | Mon, 11 Jun 2012 10:03:28 -0500 |
parents | 006570a76b90 |
children | 7ab3ac5c676c |
files | src/pt-jit.cc |
diffstat | 1 files changed, 19 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/pt-jit.cc +++ b/src/pt-jit.cc @@ -55,6 +55,7 @@ #include "ov-usr-fcn.h" #include "ov-scalar.h" #include "pt-all.h" +#include "xpow.h" static llvm::IRBuilder<> builder (llvm::getGlobalContext ()); @@ -180,6 +181,15 @@ } } +extern "C" octave_base_value * +octave_jit_xpow (double a, double b) +{ + octave_value ret = xpow (a, b); + octave_base_value *obv = ret.internal_rep (); + obv->grab (); + return obv; +} + // -------------------- jit_range -------------------- std::ostream& operator<< (std::ostream& os, const jit_range& rng) @@ -404,6 +414,15 @@ add_binary_fcmp (scalar, octave_value::op_gt, llvm::CmpInst::FCMP_UGT); add_binary_fcmp (scalar, octave_value::op_ne, llvm::CmpInst::FCMP_UNE); + llvm::Function *jxpow = create_function ("octave_jit_xpow", any, scalar, + scalar); + engine->addGlobalMapping (jxpow, reinterpret_cast<void *> (&octave_jit_xpow)); + { + jit_function::overload ol (jxpow, false, any, scalar, scalar); + binary_ops[octave_value::op_pow].add_overload (ol); + binary_ops[octave_value::op_el_pow].add_overload (ol); + } + llvm::Function *gripe_div0 = create_function ("gripe_divide_by_zero", void_t); engine->addGlobalMapping (gripe_div0, reinterpret_cast<void *> (&gripe_divide_by_zero));