[ruby-core:65328] [ruby-trunk - Feature #10274] [PATCH 0/2] more rb_iseq_t reductions (and more planned)

From: normalperson@...
Date: 2014-09-30 09:20:56 UTC
List: ruby-core #65328
Issue #10274 has been updated by Eric Wong.


 I reject 0002, but I don't think 0001 hurts readability.
 I will update arg_simple to 0..3 from nobu's comment.

----------------------------------------
Feature #10274: [PATCH 0/2] more rb_iseq_t reductions (and more planned)
https://bugs.ruby-lang.org/issues/10274#change-49143

* Author: Eric Wong
* Status: Open
* Priority: Normal
* Assignee: Koichi Sasada
* Category: core
* Target version: current: 2.2.0
----------------------------------------
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--------------------------------
0001-iseq-reduce-from-280-to-272-bytes.patch (2.35 KB)
0002-iseq-remove-iseq-iseq-field-270-262-bytes-on-64-bit.patch (3.32 KB)


-- 
https://bugs.ruby-lang.org/

In This Thread

Prev Next