comparison src/pt-jit.cc @ 14949:c57cfdb37f81

Add power to jit
author Max Brister <max@2bass.com>
date Mon, 11 Jun 2012 10:03:28 -0500
parents 006570a76b90
children 4c9fd3e31436
comparison
equal deleted inserted replaced
14948:006570a76b90 14949:c57cfdb37f81
53 #include "octave.h" 53 #include "octave.h"
54 #include "ov-fcn-handle.h" 54 #include "ov-fcn-handle.h"
55 #include "ov-usr-fcn.h" 55 #include "ov-usr-fcn.h"
56 #include "ov-scalar.h" 56 #include "ov-scalar.h"
57 #include "pt-all.h" 57 #include "pt-all.h"
58 #include "xpow.h"
58 59
59 static llvm::IRBuilder<> builder (llvm::getGlobalContext ()); 60 static llvm::IRBuilder<> builder (llvm::getGlobalContext ());
60 61
61 static llvm::LLVMContext& context = llvm::getGlobalContext (); 62 static llvm::LLVMContext& context = llvm::getGlobalContext ();
62 63
176 } 177 }
177 catch (const octave_execution_exception&) 178 catch (const octave_execution_exception&)
178 { 179 {
179 gripe_library_execution_error (); 180 gripe_library_execution_error ();
180 } 181 }
182 }
183
184 extern "C" octave_base_value *
185 octave_jit_xpow (double a, double b)
186 {
187 octave_value ret = xpow (a, b);
188 octave_base_value *obv = ret.internal_rep ();
189 obv->grab ();
190 return obv;
181 } 191 }
182 192
183 // -------------------- jit_range -------------------- 193 // -------------------- jit_range --------------------
184 std::ostream& 194 std::ostream&
185 operator<< (std::ostream& os, const jit_range& rng) 195 operator<< (std::ostream& os, const jit_range& rng)
401 add_binary_fcmp (scalar, octave_value::op_le, llvm::CmpInst::FCMP_ULE); 411 add_binary_fcmp (scalar, octave_value::op_le, llvm::CmpInst::FCMP_ULE);
402 add_binary_fcmp (scalar, octave_value::op_eq, llvm::CmpInst::FCMP_UEQ); 412 add_binary_fcmp (scalar, octave_value::op_eq, llvm::CmpInst::FCMP_UEQ);
403 add_binary_fcmp (scalar, octave_value::op_ge, llvm::CmpInst::FCMP_UGE); 413 add_binary_fcmp (scalar, octave_value::op_ge, llvm::CmpInst::FCMP_UGE);
404 add_binary_fcmp (scalar, octave_value::op_gt, llvm::CmpInst::FCMP_UGT); 414 add_binary_fcmp (scalar, octave_value::op_gt, llvm::CmpInst::FCMP_UGT);
405 add_binary_fcmp (scalar, octave_value::op_ne, llvm::CmpInst::FCMP_UNE); 415 add_binary_fcmp (scalar, octave_value::op_ne, llvm::CmpInst::FCMP_UNE);
416
417 llvm::Function *jxpow = create_function ("octave_jit_xpow", any, scalar,
418 scalar);
419 engine->addGlobalMapping (jxpow, reinterpret_cast<void *> (&octave_jit_xpow));
420 {
421 jit_function::overload ol (jxpow, false, any, scalar, scalar);
422 binary_ops[octave_value::op_pow].add_overload (ol);
423 binary_ops[octave_value::op_el_pow].add_overload (ol);
424 }
406 425
407 llvm::Function *gripe_div0 = create_function ("gripe_divide_by_zero", void_t); 426 llvm::Function *gripe_div0 = create_function ("gripe_divide_by_zero", void_t);
408 engine->addGlobalMapping (gripe_div0, 427 engine->addGlobalMapping (gripe_div0,
409 reinterpret_cast<void *> (&gripe_divide_by_zero)); 428 reinterpret_cast<void *> (&gripe_divide_by_zero));
410 429