Project

General

Profile

Actions

Feature #10274

closed

[PATCH 0/2] more rb_iseq_t reductions (and more planned)

Added by normalperson (Eric Wong) over 9 years ago. Updated over 6 years ago.

Status:
Closed
Target version:
-
[ruby-core:65185]

Description

Both of these are pretty simple, low impact patches:

We are close to being able to fit rb_iseq_t in four 64 byte
cache line (we are 262 bytes after these patches,
a milestone is <= 256 bytes).

  • [PATCH 1/2] iseq: reduce from 280 to 272 bytes

    • arg_simple is limited to 3 possible values: 0, 1, and 2
    • arg_keyword_check is a boolean
    • flip_cnt should be int to enforce portable code between 64-bit and
      32-bit systems and must fit in FIXNUM space.
      I doubt anybody would notice if flip_cnt (or any arg counters)
      were 8 bits, even.
  • [PATCH 2/2] iseq: remove iseq->iseq field (270 => 262 bytes on 64-bit)

    We may store the original iseq after the encoded iseq to reduce
    allocation overhead and use a boolean to denote whether or not
    the iseq_encoded field contains data at the end.

    This simplifies iseq_free and iseq_memsize a little, too.

I will commit in a week or so unless there are objections.

Future:

Move some keyword-related fields into its own struct (similar to
catch table). Maybe compile_data can be split off.


Files

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0