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

From: normalperson@...
Date: 2014-09-21 08:58:28 UTC
List: ruby-core #65190
Issue #10274 has been updated by Eric Wong.


 normalperson@yhbt.net wrote:
 > File 0002-iseq-remove-iseq-iseq-field-270-262-bytes-on-64-bit.patch added
 
 Ugh, forget 2/2. I forgot your comment in [ruby-core:64883] already
 on out-of-tree compilers.  But I may still overload this field
 for compile_data in the future (but I guess I can't use anonymous union
 feature of GNU C :x)

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

* 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