diff options
author | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-09-26 08:11:05 +0000 |
---|---|---|
committer | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-09-26 08:11:05 +0000 |
commit | d3a9ebeb1c49e1cf8dd6accec6485dee32ccff17 (patch) | |
tree | b905c1b8dea5fcca6d8890e748ce031f4011d273 | |
parent | ee819b0ddb0cbeb9c587e743204988b2e05e7c5d (diff) |
fix OPT_CALL_THREADED_CODE issue.
* insns.def (opt_send_without_block): reorder insn position because
`opt_str_freeze` insn refer this insn (function) when
OPT_CALL_THREADED_CODE is true.
* vm_opts.h (OPT_THREADED_CODE): introduce new macro to select
threaded code implementation with a compile option (-D...).
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64854 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | insns.def | 32 | ||||
-rw-r--r-- | vm_opts.h | 16 |
2 files changed, 29 insertions, 19 deletions
@@ -751,6 +751,22 @@ send CALL_METHOD(&calling, ci, cc); } +/* Invoke method without block */ +DEFINE_INSN +opt_send_without_block +(CALL_INFO ci, CALL_CACHE cc) +(...) +(VALUE val) +// attr bool leaf = false; /* Of course it isn't. */ +// attr bool handles_sp = true; +// attr rb_snum_t sp_inc = -ci->orig_argc; +{ + struct rb_calling_info calling; + calling.block_handler = VM_BLOCK_HANDLER_NONE; + vm_search_method(ci, cc, calling.recv = TOPN(calling.argc = ci->orig_argc)); + CALL_METHOD(&calling, ci, cc); +} + DEFINE_INSN opt_str_freeze (VALUE str, CALL_INFO ci, CALL_CACHE cc) @@ -806,22 +822,6 @@ opt_newarray_min val = vm_opt_newarray_min(num, STACK_ADDR_FROM_TOP(num)); } -/* Invoke method without block */ -DEFINE_INSN -opt_send_without_block -(CALL_INFO ci, CALL_CACHE cc) -(...) -(VALUE val) -// attr bool leaf = false; /* Of course it isn't. */ -// attr bool handles_sp = true; -// attr rb_snum_t sp_inc = -ci->orig_argc; -{ - struct rb_calling_info calling; - calling.block_handler = VM_BLOCK_HANDLER_NONE; - vm_search_method(ci, cc, calling.recv = TOPN(calling.argc = ci->orig_argc)); - CALL_METHOD(&calling, ci, cc); -} - /* super(args) # args.size => num */ DEFINE_INSN invokesuper @@ -30,9 +30,19 @@ */ /* C compiler dependent */ -#define OPT_DIRECT_THREADED_CODE 1 -#define OPT_TOKEN_THREADED_CODE 0 -#define OPT_CALL_THREADED_CODE 0 + +/* + * 0: direct (using labeled goto using GCC special) + * 1: token (switch/case) + * 2: call (function call for each insn dispatch) + */ +#ifndef OPT_THREADED_CODE +#define OPT_THREADED_CODE 0 +#endif + +#define OPT_DIRECT_THREADED_CODE (OPT_THREADED_CODE == 0) +#define OPT_TOKEN_THREADED_CODE (OPT_THREADED_CODE == 1) +#define OPT_CALL_THREADED_CODE (OPT_THREADED_CODE == 2) /* VM running option */ #define OPT_CHECKED_RUN 1 |