DO
nw: CARDINAL ¬ LOOPHOLE[ndw-2, CARDINAL];
BBLineSetup[];
FetchNextOff[0];
dstLine[0] ¬ MF[dstLine[0], w, lMask];
dstLine ¬ dstLine+SIZE[WORD];
srcLine ¬ srcLine+SIZE[WORD];
WHILE nw >= 4
DO
FetchNextOff[0];
dstLine[0] ¬ ?F[dstLine[0], w];
FetchNextOff[1];
dstLine[1] ¬ ?F[dstLine[1], w];
FetchNextOff[2];
dstLine[2] ¬ ?F[dstLine[2], w];
FetchNextOff[3];
dstLine[3] ¬ ?F[dstLine[3], w];
dstLine ¬ dstLine+SIZE[WORD]*4;
srcLine ¬ srcLine+SIZE[WORD]*4;
nw ¬ nw - 4;
ENDLOOP;
IF nw >= 2
THEN {
FetchNextOff[0];
dstLine[0] ¬ ?F[dstLine[0], w];
FetchNextOff[1];
dstLine[1] ¬ ?F[dstLine[1], w];
dstLine ¬ dstLine+SIZE[WORD]*2;
srcLine ¬ srcLine+SIZE[WORD]*2;
nw ¬ nw - 2;
};
IF nw = 1
THEN {
One trailing word
FetchNextOff[0];
dstLine[0] ¬ ?F[dstLine[0], w];
dstLine ¬ dstLine+SIZE[WORD];
srcLine ¬ srcLine+SIZE[WORD];
};
FetchLast[0, fetchLastWord];
dstLine[0] ¬ MF[dstLine[0], w, rMask];
IF count <= 1 THEN EXIT;
count ¬ count - 1;
dstPtr ¬ dstPtr + dRast;
srcPtr ¬ srcPtr + sRast;
ENDLOOP;