From: normalperson@... Date: 2018-01-31T08:29:59+00:00 Subject: [ruby-core:85284] [Ruby trunk Feature#10274][Closed] [PATCH 0/2] more rb_iseq_t reductions (and more planned) Issue #10274 has been updated by normalperson (Eric Wong). Status changed from Open to Closed Assignee changed from ko1 (Koichi Sasada) to normalperson (Eric Wong) ---------------------------------------- Feature #10274: [PATCH 0/2] more rb_iseq_t reductions (and more planned) https://bugs.ruby-lang.org/issues/10274#change-70063 * Author: normalperson (Eric Wong) * Status: Closed * Priority: Normal * Assignee: normalperson (Eric Wong) * Target version: ---------------------------------------- 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/ Unsubscribe: