public unsafe void NextBytes8(byte[] buffer)
{
if(buffer.Length % 8 != 0) {
throw new ArgumentException("Buffer length must be divisible by 8", "buffer");
}
uint x=_x, y=_y, z=_z, w=_w;
fixed(byte* pByte0 = buffer)
{
uint* pDWord = (uint*)pByte0;
for(int i=0, len = buffer.Length>>2; i<len; i+=2)
{
uint t = (x^(x<<11));
x=y; y=z; z=w;
pDWord[i] = w = (w^(w>>19))^(t^(t>>8));
t = (x^(x<<11));
x=y; y=z; z=w;
pDWord[i+1] = w = (w^(w>>19))^(t^(t>>8));
}
}
_x=x; _y=y; _z=z; _w=w;
}