[X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 Y8 Y9]
becomes
[Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 Y8 Y9 X0 X1 X2 X3 X4 X5 X6 X7 X8 X9]
####
void swapBufferHalves( U8 *buf, U32 start, U32 length ) {
register U64 *p1 = (U64*)&buf[ start ];
register U64 *p2 = (U64*)&buf[ start + ( length >> 1 ) ];
const U64 *pend = (U64*)(start + length);
register U64 temp;
assert( !( length & 1 ) );
assert( ( (U64)buf & 7ull ) == 0 );
while( p1 < pend ) {
temp = *p1;
*p1++ = *p2;
*p2++ = temp;
}
return;
}
##
##
[X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7]
becomes
[Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 X0 X1 X2 X3 X4 X5 X6 X7 X8 X9]