Mercurial > hg > octave-nkf
diff src/pt-jit.h @ 14974:e3cd4c9d7ccc
Generalize builtin specification in JIT and add support for cos and exp
* src/ov-builtin.cc (octave_builtin::function): New function.
* src/ov-builtin.h (octave_builtin::function): New declaration.
* src/pt-jit.cc (gripe_bad_result, octave_jit_call, jit_typeinfo::add_builtin,
jit_typeinfo::register_intrinsic, jit_typeinfo::find_builtin,
jit_typeinfo::register_generic): New function.
(jit_typeinfo::jit_typeinfo): Generalize builtin specification and add support
for cos and exp.
(jit_typeinfo::create_function): New overload.
* src/pt-jit.h (overload::overload, jit_function::add_overload,
jit_typeinfo::create_function): New overload.
(jit_typeinfo::add_builtin, jit_typeinfo::register_intrinsic,
jit_typeinfo::register_generic, jit_typeinfo::find_builtin): New declaration.
author | Max Brister <max@2bass.com> |
---|---|
date | Wed, 27 Jun 2012 14:14:20 -0500 |
parents | 2960f1b2d6ea |
children | 2d7c0c86e712 |
line wrap: on
line diff
--- a/src/pt-jit.h +++ b/src/pt-jit.h @@ -84,6 +84,7 @@ } class octave_base_value; +class octave_builtin; class octave_value; class tree; class tree_expression; @@ -329,6 +330,11 @@ arguments[2] = arg2; } + overload (llvm::Function *f, bool e, jit_type *r, + const std::vector<jit_type *>& aarguments) + : function (f), can_error (e), result (r), arguments (aarguments) + {} + llvm::Function *function; bool can_error; jit_type *result; @@ -360,6 +366,13 @@ add_overload (ol); } + void add_overload (llvm::Function *f, bool e, jit_type *r, + const std::vector<jit_type *>& args) + { + overload ol (f, e, r, args); + add_overload (ol); + } + void add_overload (const overload& func, const std::vector<jit_type*>& args); @@ -660,6 +673,9 @@ return create_function (name, ret, args); } + llvm::Function *create_function (const llvm::Twine& name, jit_type *ret, + const std::vector<jit_type *>& args); + llvm::Function *create_function (const llvm::Twine& name, llvm::Type *ret, const std::vector<llvm::Type *>& args); @@ -667,6 +683,30 @@ llvm::Value *do_insert_error_check (void); + void add_builtin (const std::string& name); + + void register_intrinsic (const std::string& name, size_t id, + jit_type *result, jit_type *arg0) + { + std::vector<jit_type *> args (1, arg0); + register_intrinsic (name, id, result, args); + } + + void register_intrinsic (const std::string& name, size_t id, jit_type *result, + const std::vector<jit_type *>& args); + + void register_generic (const std::string& name, jit_type *result, + jit_type *arg0) + { + std::vector<jit_type *> args (1, arg0); + register_generic (name, result, args); + } + + void register_generic (const std::string& name, jit_type *result, + const std::vector<jit_type *>& args); + + octave_builtin *find_builtin (const std::string& name); + static jit_typeinfo *instance; llvm::Module *module; @@ -683,7 +723,7 @@ jit_type *string; jit_type *boolean; jit_type *index; - jit_type *sin_type; + std::map<std::string, jit_type *> builtins; std::vector<jit_function> binary_ops; jit_function grab_fn;