0.8.21.5:
Enable faster REPLACE on declared specialized arrays.
Overview of necessary machinery:
* New %VECTOR-RAW-BITS and %SET-VECTOR-RAW-BITS functions/VOPs
which automatically take into account VECTOR-DATA-OFFSET
(eliminates tedium associated with previous bit-bashing code
and makes things slightly faster). It's not clear if the
old %RAW-BITS and %SET-RAW-BITS functions need to remain;
* Generalize the old bit-bashing code to generate bit-bashers
for differently sized "bytes" (1-bit, 2-bit, 4-bit, etc.);
* Add REPLACE transforms for most specialized array types
(those with elements not larger than the word size);
* Replace various incantations of COPY-FROM-SYSTEM-AREA,
COPY-TO-SYSTEM-AREA, BIT-BASH-COPY, etc. with their new
width-aware equivalents (this accounts for the bulk of the
changed files, if not the changed lines);
* Add systematic tests for UB*-BASH-{FILL,COPY};
* Add generalized SUBSEQ and COPY-SEQ transforms while we're
at it (FILL would be nice to have, but is a little bit
trickier to do in the general case).
These changes also open up the possibility of removing %BYTE-BLT
from the sources. Benefits: decrease in the number of
WITHOUT-GCING forms required, less calling out to C, more of
the system in Lisp, etc. %BYTE-BLT remains in this version,
but may be removed if there is sufficient support for its
removal.
38 files changed: