pub struct InlineSideExit {
pub cont_pc: u32,
pub head_resume_pc: u32,
pub exit_tags: Rc<[ExitTag]>,
pub chain: Rc<[FrameMaterializeInfo]>,
pub side_trace_ptr: Box<TCellPtr>,
}Expand description
P12-S4-step4b-C-2 — per inline cmp@d>0 side-exit record. See
CompiledTrace::per_exit_inline for the shape rationale.
Fields§
§cont_pc: u32PC the interpreter resumes at after the side-exit fires.
Mirrors the innermost frame’s pc in chain.
head_resume_pc: u32PC to write on the trace head frame when the side-exit
fires — the depth-0 frame’s resume point after ITS own Call
that entered depth 1. Without this update, the trace head
frame’s pc stays at head_pc (where the dispatcher entered);
once the inlined chain pops, interp resumes the trace head
at pc=0 and immediately self-Calls again → infinite dispatch
loop. Captured at emit time as the outermost Op::Call’s
pc + 1 from the live call_chain.
Slot-by-slot ExitTag snapshot at the side-exit moment.
Length = window_size — covers caller + every inlined
frame’s register window.
chain: Rc<[FrameMaterializeInfo]>Frames to push onto vm.frames (outermost = depth 1 first,
innermost = depth len() last). The innermost frame’s pc
is overwritten to the side-exit PC at compile time so the
helper stays PC-agnostic.
side_trace_ptr: Box<TCellPtr>P15-A v2-C-A2 — raw *const u8 (entry fn pointer of a child
side trace) for THIS inline cmp@d>0 side-exit. The IR at the
emit_store_back_and_return_site call site loads this cell
BEFORE the encoded-return path: non-null → store-back +
call_indirect into the child + OR sentinel(INLINE, site_idx)
into bits 56..=63 of the child’s return + return; null → run
the existing encoded-return path.
Box<Cell<*const u8>> (not embedded Cell) so the cell’s HEAP
address is stable for the IR’s iconst-baked load. Moving
the Box (e.g. into Rc<[]> via .collect) doesn’t move the
cell. Single-threaded Vm so Cell is sound.
Trait Implementations§
Source§impl Clone for InlineSideExit
impl Clone for InlineSideExit
Source§fn clone(&self) -> InlineSideExit
fn clone(&self) -> InlineSideExit
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more