From: nobu@... Date: 2014-09-29T08:09:35+00:00 Subject: [ruby-core:65313] [ruby-trunk - Feature #10274] [PATCH 0/2] more rb_iseq_t reductions (and more planned) Issue #10274 has been updated by Nobuyoshi Nakada. `arg_simple` is 0..3, not 0..2. ---------------------------------------- Feature #10274: [PATCH 0/2] more rb_iseq_t reductions (and more planned) https://bugs.ruby-lang.org/issues/10274#change-49133 * 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/