diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-01-30 03:21:52 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-01-30 03:21:52 +0000 |
commit | d4d671f2b08bcae5d96b9e08cc43355084e88cd6 (patch) | |
tree | 7683c03e84a61f06f9fd07278a22adace5309c89 | |
parent | 68e2a2e5cea3204f935988a8b3b49d54e8dc43be (diff) | |
download | ruby-d4d671f2b08bcae5d96b9e08cc43355084e88cd6.tar.gz |
bare_instructions.rb: sp_inc is signed
* tool/ruby_vm/models/bare_instructions.rb (predefine_attributes):
`sp_inc` attribute which may return negative values must be
signed `rb_snum_t`, to be signed-expanded at type promotion.
* vm_insnhelper.h (ADJ_SP): removed the workaround for platforms
where rb_num_t is wider than int.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62103 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rwxr-xr-x[-rw-r--r--] | tool/ruby_vm/models/bare_instructions.rb | 2 | ||||
-rw-r--r-- | vm_insnhelper.h | 15 |
2 files changed, 1 insertions, 16 deletions
diff --git a/tool/ruby_vm/models/bare_instructions.rb b/tool/ruby_vm/models/bare_instructions.rb index 2d6db2849e..7e573240b5 100644..100755 --- a/tool/ruby_vm/models/bare_instructions.rb +++ b/tool/ruby_vm/models/bare_instructions.rb @@ -128,7 +128,7 @@ class RubyVM::BareInstructions generate_attribute 'rb_num_t', 'popn', pops.size generate_attribute 'rb_num_t', 'retn', rets.size generate_attribute 'rb_num_t', 'width', width - generate_attribute 'rb_num_t', 'sp_inc', rets.size - pops.size + generate_attribute 'rb_snum_t', 'sp_inc', rets.size - pops.size generate_attribute 'bool', 'handles_frame', false end diff --git a/vm_insnhelper.h b/vm_insnhelper.h index 01ea7a2a3e..1d54c0b9a1 100644 --- a/vm_insnhelper.h +++ b/vm_insnhelper.h @@ -101,22 +101,7 @@ enum vm_regan_acttype { #define DEC_SP(x) (VM_REG_SP -= (COLLECT_USAGE_REGISTER_HELPER(SP, SET, (x)))) #define SET_SV(x) (*GET_SP() = (x)) /* set current stack value as x */ -#ifdef _MSC_VER -/* Workaround needed for adding negative number to a pointer */ -#define ADJ_SP(x) do { \ - rb_snum_t adj = (x); \ - if (adj >= 0) { \ - INC_SP(adj); \ - } \ - else { \ - SIGNED_VALUE dec = -1; \ - dec *= adj; \ - DEC_SP(dec); \ - } \ -} while (0) -#else #define ADJ_SP(x) INC_SP(x) -#endif /* instruction sequence C struct */ #define GET_ISEQ() (GET_CFP()->iseq) |