diff options
author | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-12-11 16:07:21 +0000 |
---|---|---|
committer | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-12-11 16:07:21 +0000 |
commit | b5d5cce11b6980e963d84a7ee16a3d9a04a682da (patch) | |
tree | 74ae943e92a1b443b91fb3d7ffbb8818cd9b8b19 | |
parent | f623428d1a82409382548a37b5e63ea69b47aef9 (diff) | |
download | bundler-b5d5cce11b6980e963d84a7ee16a3d9a04a682da.tar.gz |
vm_exec.h: introduce macros for abstarction.
* vm_exec.h: declare two macros
* START_OF_ORIGINAL_INSN()
* DISPATCH_ORIGINAL_INSN()
instead of inserting label and goto lines.
For OPT_CALL_THREADED_CODE, first macro is empty and second macro
is simply call the original insn function.
* tool/instruction.rb: use above macros.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61120 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rwxr-xr-x | tool/instruction.rb | 4 | ||||
-rw-r--r-- | vm_exec.h | 12 |
2 files changed, 11 insertions, 5 deletions
diff --git a/tool/instruction.rb b/tool/instruction.rb index 3354933da9..447fed5948 100755 --- a/tool/instruction.rb +++ b/tool/instruction.rb @@ -540,7 +540,7 @@ class RubyVM @insns.dup.each{|insn| body = <<-EOS vm_trace(ec, GET_CFP(), GET_PC()); - goto start_of_#{insn.name}; + DISPATCH_ORIGINAL_INSN(#{insn.name}); EOS trace_insn = Instruction.new(name = "trace_#{insn.name}", @@ -884,7 +884,7 @@ class RubyVM end def make_header insn - label = insn.trace ? '' : "start_of_#{insn.name}:;" + label = insn.trace ? '' : "START_OF_ORIGINAL_INSN(#{insn.name});" commit "INSN_ENTRY(#{insn.name}){#{label}" make_header_prepare_stack insn commit "{" @@ -66,6 +66,9 @@ error ! #define NEXT_INSN() return reg_cfp; +#define START_OF_ORIGINAL_INSN(x) /* ignore */ +#define DISPATCH_ORIGINAL_INSN(x) return LABEL(x)(ec, reg_cfp); + /************************************************/ #elif OPT_TOKEN_THREADED_CODE || OPT_DIRECT_THREADED_CODE /* threaded code with gcc */ @@ -95,10 +98,8 @@ error ! #else #define DISPATCH_ARCH_DEPEND_WAY(addr) \ /* do nothing */ - #endif - /**********************************/ #if OPT_DIRECT_THREADED_CODE @@ -134,6 +135,9 @@ error ! #define NEXT_INSN() TC_DISPATCH(__NEXT_INSN__) +#define START_OF_ORIGINAL_INSN(x) start_of_##x: +#define DISPATCH_ORIGINAL_INSN(x) goto start_of_##x; + /************************************************/ #else /* no threaded code */ /* most common method */ @@ -145,7 +149,6 @@ case BIN(insn): DEBUG_END_INSN(); \ break; - #define INSN_DISPATCH() \ while (1) { \ switch (GET_CURRENT_INSN()) { @@ -159,6 +162,9 @@ default: \ #define NEXT_INSN() goto first +#define START_OF_ORIGINAL_INSN(x) start_of_##x: +#define DISPATCH_ORIGINAL_INSN(x) goto start_of_##x; + #endif #define VM_SP_CNT(ec, sp) ((sp) - (ec)->vm_stack) |