Expand description
The calling interface between compiled code and this VM’s memory.
Compiled code reaches guest RAM through an inlined translation and an
inlined permission check (see crate::tlb). Neither can answer every
access: the page may not be cached yet, the access may straddle a page
boundary, the permissions may refuse it, or a dynamic check may be in force
that the inline test cannot express. All of those land here, on the same
Mmu the interpreter uses.
That is the point of the split. There is one implementation of what an access means — mapping, permissions, initializedness, watchpoints, fault addresses — and the inline path is a cache in front of it, never a second opinion. A miss costs a call; a wrong answer would cost correctness.
§Faults
These return a status rather than taking a fault themselves, because
compiled code has to unwind on its own: it stops at the faulting access,
leaving the guest state its earlier stores produced, and returns the status
to the runtime. The fault itself is left on the VmMemory for the caller
to take, exactly as an interpreted fault would be.
Constants§
- ACCESS_
FAULT - The access faulted; the fault is on the
VmMemory. - ACCESS_
OK - The access succeeded.
Functions§
- qcode_
jit_ ⚠load - Performs a guest RAM read that compiled code could not do inline.
- qcode_
jit_ ⚠sdiv128 - Safety
- qcode_
jit_ ⚠srem128 - Safety
- qcode_
jit_ ⚠store - Performs a guest RAM write that compiled code could not do inline.
- qcode_
jit_ ⚠udiv128 - Safety
- qcode_
jit_ ⚠urem128 - Safety