From 686881d383cfe44c67875aada64207c5e0abaa8d Mon Sep 17 00:00:00 2001 From: shyouhei Date: Wed, 26 Dec 2018 00:58:26 +0000 Subject: add _sp_inc_helpers.erb [ci skip] Just add more room for comments. This is a pure refactoring that does not change anything but readability. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66564 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- tool/ruby_vm/views/_sp_inc_helpers.erb | 35 ++++++++++++++++++++++++++++++++++ tool/ruby_vm/views/insns_info.inc.erb | 1 + 2 files changed, 36 insertions(+) create mode 100644 tool/ruby_vm/views/_sp_inc_helpers.erb (limited to 'tool/ruby_vm') diff --git a/tool/ruby_vm/views/_sp_inc_helpers.erb b/tool/ruby_vm/views/_sp_inc_helpers.erb new file mode 100644 index 0000000000..f979064a5f --- /dev/null +++ b/tool/ruby_vm/views/_sp_inc_helpers.erb @@ -0,0 +1,35 @@ +%# -*- mode:c; style:ruby; coding: utf-8; indent-tabs-mode: nil -*- +%# Copyright (c) 2018 Urabe, Shyouhei. All rights reserved. +%# +%# This file is a part of the programming language Ruby. Permission is hereby +%# granted, to either redistribute and/or modify this file, provided that the +%# conditions mentioned in the file COPYING are met. Consult the file for +%# details. +%; + +static rb_snum_t +sp_inc_of_sendish(const struct rb_call_info *ci) +{ + /* Send-ish instructions will: + * + * 1. Pop block argument, if any. + * 2. Pop ordinal argumanes. + * 3. Pop receiver. + * 4. Push return value. + */ + const int argc = ci->orig_argc; + const int argb = (ci->flag & VM_CALL_ARGS_BLOCKARG) ? 1 : 0; + const int recv = 1; + const int retn = 1; + + /* 1. 2. 3. 4. */ + return 0 - argb - argc - recv + retn; +} + +static rb_snum_t +sp_inc_of_invokeblock(const struct rb_call_info *ci) +{ + /* sp_inc of invokeblock is almost identical to that of sendish + * instructions, except that it does not pop receriver. */ + return sp_inc_of_sendish(ci) + 1; +} diff --git a/tool/ruby_vm/views/insns_info.inc.erb b/tool/ruby_vm/views/insns_info.inc.erb index 67fcebfc42..cdca908a69 100644 --- a/tool/ruby_vm/views/insns_info.inc.erb +++ b/tool/ruby_vm/views/insns_info.inc.erb @@ -16,5 +16,6 @@ <%= render 'insn_len_info' %> <%= render 'insn_operand_info' %> <%= render 'leaf_helpers' %> +<%= render 'sp_inc_helpers' %> <%= render 'attributes' %> <%= render 'insn_stack_increase' %> -- cgit v1.2.3