VM quickening inventory
On this page 4
This page is the architecture boundary for issue #659 under the fast no-JIT roadmap #498. It inventories existing guarded shortcuts; it publishes no performance claim and does not count tree-walker or ordinary-bytecode fallback as quickening coverage.
The complete machine contract—including every guard, miss/dequickening rule, metadata lifetime, no-GIL synchronization ruling, debugger/step boundary, source anchor, and test anchor—is vm-quickening-inventory-v1.json.
Classification boundary
| classification | meaning | current families |
|---|---|---|
general_adaptive | Site/opcode behavior selected from runtime identity, shape, or representation guards rather than a whole benchmark-shaped body. | 6 |
bounded_structural | A bounded expression/trace decoder with explicit accepted operations and size limits. | 2 |
legacy_narrow | An exact bytecode-pattern kernel. It is useful implementation history, not broad dispatch-family coverage. | 9 |
Implemented guarded families
| family | classification | surface | miss/dequickening boundary |
|---|---|---|---|
property-inline-cache | general_adaptive | get_prop own-data reads; set_prop existing own-data writes; one-hop inherited observations | perform the complete property operation; record only a valid shape-slot observation; replace secondary shapes round-robin after four identities |
quick-global-binding | general_adaptive | load_var in an isolated VM execution | run lookupIdent/globalProp; replace the site cache only after complete resolution; decline caching for with and aliases |
literal-shape-transition | general_adaptive | fixed-name init_prop CreateDataPropertyOrThrow transitions | run defineLiteralDataProp; record only the resulting direct child transition; computed/spread/accessor literal members stay generic |
property-update-trace | bounded_structural | up to twenty bytecodes and eight numeric operations ending in set_prop; optional canonical counted-loop tail | resume ordinary bytecode at the same load_local; cache an unsupported sentinel only in isolated execution; a tail mismatch keeps the assignment-only trace |
four-property-loop | legacy_narrow | one exact 38-bytecode numeric loop over four named properties | return to the ordinary bytecode loop head without mutation; cache an explicit unsupported plan for nonmatching bytecode |
array-opcode-fast-paths | general_adaptive | present dense get_index; existing dense set_index; Array length read; Array.prototype data read; intrinsic Array.prototype.push call | run ToPropertyKey and generic property/index semantics; dispatch the ordinary callable; never treat a hole or inherited indexed property as dense data |
packed-array-sum-loop | legacy_narrow | one exact eighteen-bytecode counted loop summing dense numeric elements | resume at the ordinary loop head; unsupported structural plans remain explicit |
packed-array-push-loop | legacy_narrow | one exact counted loop pushing a bounded numeric expression; one add-three-and-bitmask expression specialization | resume ordinary bytecode at the loop head; generic bounded expression evaluation remains distinct from the add3_bit_and specialization |
polymorphic-property-loop | legacy_narrow | one exact indexed-selector loop reading and writing named own data properties | resume ordinary loop bytecode before any fused mutation; nonmatching bytecode uses the explicit unsupported array plan |
fixed-shape-object-allocation-loop | legacy_narrow | one exact selector/replacement loop allocating a three-property literal | return to the loop head before fused mutation; fall back after materializing state at GC/checkpoint boundaries; invalidate prepared shape state when the realm root Shape differs |
numeric-leaf-call | bounded_structural | straight-line numeric bytecode leaves; non-arrow static arguments[index] numeric expressions; captured scalar and receiver-property variants | perform the ordinary JS call; cache unsupported bytecode leaves explicitly; AST arguments leaves are revalidated for each exact call arity |
numeric-call-loop | legacy_narrow | exact counted loops calling a direct, method, closure-template, or arguments numeric leaf | resume ordinary bytecode at the loop head; publish an explicit unsupported call-loop plan |
reusable-immediate-closure | legacy_narrow | checkpoint-spanning fallback iterations of the exact closure-template numeric call loop | allocate a fresh closure through makeClosure; never reuse when identity could escape or be observed |
numeric-recurrence | legacy_narrow | one exact pure two-branch additive self-recurrence bytecode body | perform the ordinary recursive JS call; cache an explicit unsupported recurrence plan |
observable-numeric-recurrence | legacy_narrow | one exact additive self-recurrence with an observable counter property update | perform ordinary recursive calls/property operations; unsupported shapes use the explicit recurrence-plan tag |
binary-arithmetic-site | general_adaptive | add/subtract/multiply/divide/remainder/power; relational and equality comparisons; bitwise operations and shifts | record both changed operand kinds; atomically publish terminal generic state; execute the canonical operation exactly once without replaying coercion or exceptions |
native-direct-call | general_adaptive | ordinary call of a ready baseline/optimizing numeric leaf without heap activation construction | build/run the ordinary VM activation or generic call; a managed native miss/deoptimization never becomes a completed direct call |
Every legacy pattern above remains labeled legacy_narrow; none is used as evidence that its broader property, index, call, arithmetic, control, or allocation family is covered.
Explicitly unsupported broad families
| family | remaining general work | exact fallback |
|---|---|---|
property-dispatch | general megamorphic named access; arbitrary prototype depth; accessor/proxy/exotic get and set; general compound/update operations | ordinary get_prop/set_prop bytecode and the full interpreter property algorithms |
index-dispatch | sparse and holey arrays; prototype-indexed properties; typed arrays and arguments objects; dynamic ToPropertyKey and proxy/accessor cases | ordinary get_index/set_index bytecode with full ToPropertyKey and property semantics |
call-dispatch | general JS call and construct specialization; variadic/spread calls; async/generator calls; polymorphic call-site linking across arbitrary callees | ordinary activation/trampoline, callValue, invokeMethod, or construct dispatch |
control-dispatch | general superinstructions; adaptive branch/control-flow fusion; exception/finally-aware trace formation; debugger-safe dequickening at every statement boundary | ordinary branch, completion, handler, and checkpoint bytecodes |
allocation-dispatch | general object/array/closure allocation specialization; arbitrary literal layouts; escape analysis and scalar replacement; general GC-safe allocation sinking | ordinary new_object/new_array/make_closure/literal bytecodes and allocator/GC paths |
Drift gate
The validator binds this inventory to 6 plan types, 14 tagged quickening types, 8 chunk metadata fields, 2 structural-candidate flags, and 33 test observability counters. Missing or duplicate identities, missing source/test anchors, unknown status values, and any legacy kernel relabeled as general all fail closed.