Parent: #336 Related: #133, #144, #146, #358
The current AArch64 baseline tier already has one precise moving-GC-safe checkpoint contract: before calling the runtime it publishes canonical Number words for every numeric local, spills live numeric operands, leaves non-numeric slots restricted to pointer-free primitives, publishes the exact instruction/step state, and holds only stable NativeFrame/runtime pointers plus numeric registers. The active interpreter and its Exec/frame roots are registered.
Implement explicit requested compaction at exactly that safepoint without weakening any other fail-closed boundary.
Scope:
- add a Context request API with a pending bit that is serviced only at a declared precise interpreter/native safepoint;
- mark the baseline native checkpoint precise for the duration of its runtime callback;
- factor the compaction gate so exactly the current precise interpreter may move, while ordinary public compaction still requires a fully quiescent realm;
- retain rejection for generic interpreter points, native host callbacks, conservative scans, running/parked peers, concurrent/parallel collectors, unsupported backends, and reentrant relocation;
- prove a ready native loop requests movement, relocates a protected graph during execution, resumes from the exact checkpoint, returns the right result, and keeps using the same native tier;
- machine-check the materialization and narrow activation contract; update concise README/JIT/relocation documentation.
Acceptance:
- the request remains pending at imprecise checkpoints and clears only after a real supported attempt;
- useful fragmented backing is compacted during a native execution rather than before/after it;
- generated execution resumes correctly with exact result/step semantics and no stale managed pointer;
- Debug, ReleaseSafe, TSan, C/Objective-C/public ABI, and relocation inventory evidence stays green.