The DSL includes new extensions to the BlockMove routine that deliver improved performance for software running in native mode. The original BlockMove routine is described in Inside Macintosh: Memory.
Table 11-1 lists the different versions of the BlockMove function that are in the DSL. It indicates for each routine what memory contents it is designed for and whether it can be used with buffers or other destinations that are not level-one cached.
The BlockMove extensions provide a way to handle cache-inhibited address spaces and are able to flush the dynamic recompilation emulator's cache, and include high-speed routines for setting memory to 0.
The BlockMove extensions use 8-byte floating-point registers for large blocks and assume a data cache block size of 32 bytes. They may not work if the 8-byte floating point hardware is disabled or absent or if cache blocks are larger than 32 bytes. They do not use lswx and stswx instructions, which are slow on Macintosh models other than those using the PowerPC 601.
Except for BlockZero and BlockZeroUncached, the BlockMove extensions use the same parameters as BlockMove. Calls to BlockZero and BlockZeroUncached have only two parameters, a pointer and a length, which are the same as the second and third parameters of BlockMove.
IMPORTANT
The BlockMove versions for cacheable data use the PowerPC dcbz instruction to avoid unnecessary prefetching of destination cache blocks. For uncacheable data, you should avoid using those routines because the dcbz instruction faults on uncacheable or write through locations, making execution extremely slow.