<feed xmlns='http://www.w3.org/2005/Atom'>
<title>ruby.git/zjit/src/jit_frame.rs, branch master</title>
<subtitle>The Ruby Programming Language</subtitle>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/'/>
<entry>
<title>ZJIT: Initialize JITFrame on method entry (#17188)</title>
<updated>2026-06-03T19:02:46+00:00</updated>
<author>
<name>Takashi Kokubun</name>
<email>takashikkbn@gmail.com</email>
</author>
<published>2026-06-03T19:02:46+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=6da082f6dbc1270893631519c98c18e0deaa208c'/>
<id>6da082f6dbc1270893631519c98c18e0deaa208c</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>ZJIT: Share a single JITFrame across all C method frames (#16988)</title>
<updated>2026-05-15T19:44:42+00:00</updated>
<author>
<name>Takashi Kokubun</name>
<email>takashikkbn@gmail.com</email>
</author>
<published>2026-05-15T19:44:42+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=985fa1bdaa23d2c84aebb7db55b674c0b9993f57'/>
<id>985fa1bdaa23d2c84aebb7db55b674c0b9993f57</id>
<content type='text'>
* ZJIT: Share a single JITFrame across all C method frames

Replace the per-call JITFrame::new_cfunc allocation in gen_push_frame
with a sentinel value (ZJIT_JIT_RETURN_C_FRAME) stored in cfp-&gt;jit_return.
CFP_ZJIT_FRAME now returns a pointer to a single static rb_zjit_c_frame
(pc/iseq both NULL) when it sees the sentinel.

The CFP accessor is split into CFP_ZJIT_FRAME_P (predicate) and
CFP_ZJIT_FRAME (typed accessor that dereferences safely) so callers don't
have to know about the sentinel encoding. ISEQ frames are unchanged: they
still hand cfp-&gt;jit_return a heap-allocated JITFrame pointer.

* Move a pointer location for CFP_ZJIT_FRAME</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* ZJIT: Share a single JITFrame across all C method frames

Replace the per-call JITFrame::new_cfunc allocation in gen_push_frame
with a sentinel value (ZJIT_JIT_RETURN_C_FRAME) stored in cfp-&gt;jit_return.
CFP_ZJIT_FRAME now returns a pointer to a single static rb_zjit_c_frame
(pc/iseq both NULL) when it sees the sentinel.

The CFP accessor is split into CFP_ZJIT_FRAME_P (predicate) and
CFP_ZJIT_FRAME (typed accessor that dereferences safely) so callers don't
have to know about the sentinel encoding. ISEQ frames are unchanged: they
still hand cfp-&gt;jit_return a heap-allocated JITFrame pointer.

* Move a pointer location for CFP_ZJIT_FRAME</pre>
</div>
</content>
</entry>
<entry>
<title>ZJIT: Have JITFrame relocate itself via Rust function</title>
<updated>2026-03-27T23:26:12+00:00</updated>
<author>
<name>Takashi Kokubun</name>
<email>takashikkbn@gmail.com</email>
</author>
<published>2026-03-27T00:41:06+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=4e5b0d3132c39b690ac50d7a49e96a95b8271067'/>
<id>4e5b0d3132c39b690ac50d7a49e96a95b8271067</id>
<content type='text'>
Expose rb_zjit_jit_frame_update_references so vm.c can call into Rust
to relocate the iseq pointer during GC compaction, instead of manually
manipulating JITFrame fields in C. This keeps JITFrame field access
consolidated in Rust.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Expose rb_zjit_jit_frame_update_references so vm.c can call into Rust
to relocate the iseq pointer during GC compaction, instead of manually
manipulating JITFrame fields in C. This keeps JITFrame field access
consolidated in Rust.
</pre>
</div>
</content>
</entry>
<entry>
<title>ZJIT: Define JITFrame struct in C and import via bindgen</title>
<updated>2026-03-27T23:26:12+00:00</updated>
<author>
<name>Takashi Kokubun</name>
<email>takashikkbn@gmail.com</email>
</author>
<published>2026-03-27T00:35:51+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=bfcc31ab11686ea85b3785b5664c267f56bfac0d'/>
<id>bfcc31ab11686ea85b3785b5664c267f56bfac0d</id>
<content type='text'>
Make zjit.h the single source of truth for the JITFrame struct layout.
Remove the manual #[repr(C)] definition from jit_frame.rs and replace
it with a type alias to the bindgen-generated zjit_jit_frame.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Make zjit.h the single source of truth for the JITFrame struct layout.
Remove the manual #[repr(C)] definition from jit_frame.rs and replace
it with a type alias to the bindgen-generated zjit_jit_frame.
</pre>
</div>
</content>
</entry>
<entry>
<title>ZJIT: Have JITFrame mark and update its own GC pointers</title>
<updated>2026-03-27T23:26:12+00:00</updated>
<author>
<name>Takashi Kokubun</name>
<email>takashikkbn@gmail.com</email>
</author>
<published>2026-03-26T22:46:10+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=219f7bbf2626e46c42c67da26ab2e0ed1c569868'/>
<id>219f7bbf2626e46c42c67da26ab2e0ed1c569868</id>
<content type='text'>
Add mark() and update_references() methods to JITFrame so GC logic
is encapsulated. Store *mut JITFrame in ZJITState to avoid unsafe
const-to-mut casts in gc.rs.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Add mark() and update_references() methods to JITFrame so GC logic
is encapsulated. Store *mut JITFrame in ZJITState to avoid unsafe
const-to-mut casts in gc.rs.
</pre>
</div>
</content>
</entry>
<entry>
<title>ZJIT: Add doc comments to JITFrame and split into two constructors</title>
<updated>2026-03-27T23:26:12+00:00</updated>
<author>
<name>Takashi Kokubun</name>
<email>takashikkbn@gmail.com</email>
</author>
<published>2026-03-26T22:44:36+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=c5ed7416a13b58f55d7b76d8c6b5bf03d4931eee'/>
<id>c5ed7416a13b58f55d7b76d8c6b5bf03d4931eee</id>
<content type='text'>
Add documentation to JITFrame fields explaining their purpose and
nullability. Split JITFrame::new into new_iseq and new_cfunc
constructors to make the two distinct use cases explicit.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Add documentation to JITFrame fields explaining their purpose and
nullability. Split JITFrame::new into new_iseq and new_cfunc
constructors to make the two distinct use cases explicit.
</pre>
</div>
</content>
</entry>
<entry>
<title>ZJIT: Lightweight Frames</title>
<updated>2026-03-27T23:26:12+00:00</updated>
<author>
<name>Takashi Kokubun</name>
<email>takashikkbn@gmail.com</email>
</author>
<published>2026-02-26T19:08:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=c8f97943efcd34fc1a4fdc789289a916104025f9'/>
<id>c8f97943efcd34fc1a4fdc789289a916104025f9</id>
<content type='text'>
Co-authored-by: Alan Wu &lt;alanwu@ruby-lang.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Co-authored-by: Alan Wu &lt;alanwu@ruby-lang.org&gt;
</pre>
</div>
</content>
</entry>
</feed>
