diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | compile.c | 3 | ||||
-rw-r--r-- | vm_opts.h | 29 |
3 files changed, 26 insertions, 13 deletions
@@ -1,3 +1,10 @@ +Sun Aug 19 13:13:52 2007 Koichi Sasada <ko1@atdot.net> + + * compile.c (iseq_compile_each/NODE_RESBODY): fix to add + additional nop to prevent tailcall optimization. + + * vm_opts.h: clean up comments. + Sun Aug 19 12:58:39 2007 Koichi Sasada <ko1@atdot.net> * insnhelper.ci (vm_call_bmethod): fix to propagate information @@ -3119,6 +3119,9 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped) ADD_INSNL(ret, nd_line(node), jump, label_miss); ADD_LABEL(ret, label_hit); COMPILE(ret, "resbody body", resq->nd_body); + if (iseq->compile_data->option->tailcall_optimization) { + ADD_INSN(ret, nd_line(node), nop); + } ADD_INSN(ret, nd_line(node), leave); ADD_LABEL(ret, label_miss); resq = resq->nd_head; @@ -14,31 +14,34 @@ #ifndef VM_OPTS_H_INCLUDED #define VM_OPTS_H_INCLUDED +/* Compile options. + * You can change these options at runtime by VM::CompileOption. + * Following definitions are default values. + */ + +#define OPT_TRACE_INSTRUCTION 0 +#define OPT_TAILCALL_OPTIMIZATION 0 +#define OPT_PEEPHOLE_OPTIMIZATION 1 +#define OPT_SPECIALISED_INSTRUCTION 1 +#define OPT_INLINE_CONST_CACHE 1 + + +/* Build Options. + * You can't change these options at runtime. + */ + /* C compiler depend */ #define OPT_DIRECT_THREADED_CODE 1 #define OPT_CALL_THREADED_CODE 0 -/* architecture independent */ - /* VM running option */ #define OPT_CHECKED_RUN 1 -#define OPT_TRACE_INSTRUCTION 0 /* default value */ - -/* at compile */ -#define OPT_INLINE_CONST_CACHE 1 -#define OPT_TAILCALL_OPTIMIZATION 0 /* default value */ -#define OPT_PEEPHOLE_OPTIMIZATION 1 -#define OPT_SPECIALISED_INSTRUCTION 1 - -/* at runtime */ #define OPT_INLINE_METHOD_CACHE 1 #define OPT_BLOCKINLINING 0 /* architecture independent, affects generated code */ #define OPT_OPERANDS_UNIFICATION 0 #define OPT_INSTRUCTIONS_UNIFICATION 0 - -/* code generation parameter */ #define OPT_UNIFY_ALL_COMBINATION 0 #define OPT_STACK_CACHING 0 |