# RT-bench: CORE-1 after the side-table refactor.
#
# CORE-1 v1 (commit 2cca621) interleaved an `SBC_LSRC Row Col`
# opcode in the bytecode at every source-line boundary so the
# interpreter could write api.frame->row/col on every dispatch.
# That cost 40-100% on call-heavy hot paths -- the lineno data
# was sharing the I-cache with the bytecode it was annotating.
#
# CORE-1 v2 (this baseline) keeps the same `lsrc Row Col` SIF
# emission, but sif2sbc records each marker as a sorted
# (pc_offset, row, col) entry in a per-SBC side table instead
# of emitting bytecode.  Stack-trace prints binary-search this
# table at frame->pin (saved by every Symta-level CALL site
# just before OPEN_FRAME).  The interpreter never executes a
# lineno opcode.
#
# Result: lineno is cold metadata again.  Hot path matches
# baseline-post-rt8a (RT-8a + RT-2 state, no CORE-1).

[bn_loop]
count    30000000:  14 ns/op   (was 14 pre-CORE-1; ~22 with v1 interleaved)
xor      30000000:  14 ns/op

[bn_arith]
mix1      5000000:  17 ns/op
mix2      5000000:  20 ns/op
bits      5000000:  18 ns/op

[bn_branch]
alt       5000000:  24 ns/op
tri3      5000000:  40 ns/op

[bn_call]
1arg      2000000:  35 ns/op   (was 32 pre-CORE-1; ~46 with v1)
2arg      2000000:  37 ns/op

[bn_mcall]
negneg    1000000:  36 ns/op   (was 32 pre-CORE-1; ~66 with v1)
abs       1000000:  28 ns/op

[bn_list]
iget      2000000:  32 ns/op
iset      2000000:  18 ns/op
lsize     2000000:  27 ns/op

[bn_gc.wbarrier]
wbarrier   500000:  45 ns/op   (was 44 pre-CORE-1; ~71 with v1)

[bn_gc.megamcall]
megamcall  500000:  53 ns/op   (was 52 pre-CORE-1; ~82 with v1)

[bn_gc.closure]
closure    500000:  204 ns/op  (was ~395 pre-CORE-1)
                              # halved -- nested-frame closure
                              # body would have paid an lsrc
                              # dispatch on every call before;
                              # also note bn_gc benchmarks were
                              # added in the gc-bench commit, so
                              # pre-CORE-1 values include their
                              # own dispatch overhead.

[bn_gc.deepgc]
deepgc        200:  ~564 us / 64-frame gc()
                              # was ~0.9-1.2 ms with v1; the
                              # deep stack's per-frame lsrc
                              # dispatches were a real cost.

# Headline: lineno costs nothing at runtime, traces stay
# accurate, frame size unchanged (replaced two int row/col with
# one uint8_t* pin -- same 8 bytes on LP64).
