mirror of
https://github.com/vercel-labs/scriptc.git
synced 2026-10-22 05:59:31 +08:00
In worker-enabled executables a typed-array access tests whether the view is shared. The test used to come before the index check, and the shared path called scr_bytes_get_or_nan/scr_bytes_set with the index as a double, then converted the element back to an integer. Both paths now use the index the inline check produced: the shared test follows the check (a view's length never changes), and the shared path calls new runtime entries that take the index as a size_t (scr_bytes_shared_get_int, scr_bytes_shared_get_f64, scr_bytes_shared_set). Integer elements join as one 32-bit value and convert to a number after the join, so compares and ToInt32/ToUint32 of the result stay integer operations in every element kind. The amortized worker cancellation poll moves from the loop header to the loop's back edge (the continue target). In the header it was a loop exit ahead of the body, which kept LLVM from rotating the loop and left loads such as the view's length inside it. Adds the typed-array-scan and typed-array-scan-workers runtime benchmarks: Uint8Array, Uint16Array, Int32Array and Float64Array scan loops in an ordinary and a worker-enabled executable.