Mercurial > octave-nkf
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 |