mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
89e7997622
To perform a regular method call, the VM needs two structs, `rb_call_info` and `rb_call_cache`. At the moment, we allocate these two structures in separate buffers. In the worst case, the CPU needs to read 4 cache lines to complete a method call. Putting the two structures together reduces the maximum number of cache line reads to 2. Combining the structures also saves 8 bytes per call site as the current layout uses separate two pointers for the call info and the call cache. This saves about 2 MiB on Discourse. This change improves the Optcarrot benchmark at least 3%. For more details, see attached bugs.ruby-lang.org ticket. Complications: - A new instruction attribute `comptime_sp_inc` is introduced to calculate SP increase at compile time without using call caches. At compile time, a `TS_CALLDATA` operand points to a call info struct, but at runtime, the same operand points to a call data struct. Instruction that explicitly define `sp_inc` also need to define `comptime_sp_inc`. - MJIT code for copying call cache becomes slightly more complicated. - This changes the bytecode format, which might break existing tools. [Misc #16258]
22 lines
790 B
Text
22 lines
790 B
Text
/* -*- C -*- */
|
|
|
|
%# Copyright (c) 2017 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.
|
|
<%= render 'copyright' %>
|
|
<%= render 'notice', locals: {
|
|
this_file: 'contains instruction information for yarv instruction sequence.',
|
|
edit: __FILE__,
|
|
} %>
|
|
<%= render 'insn_type_chars' %>
|
|
<%= render 'insn_name_info' %>
|
|
<%= render 'insn_len_info' %>
|
|
<%= render 'insn_operand_info' %>
|
|
<%= render 'leaf_helpers' %>
|
|
<%= render 'sp_inc_helpers' %>
|
|
<%= render 'attributes' %>
|
|
<%= render 'comptime_insn_stack_increase' %>
|
|
<%= render 'insn_sp_pc_dependency' %>
|