unsigned long xorHoge(){
static unsigned long x=123,y=456,z=78,w=90;
unsigned long t;
t=(x^(x<<13));x=y;y=z;z=w; return( w=(w^(w>>7))^(t^(t>>5)) );
}

こんなのでもいいの?

種(xyzw)の選び方やシフトするbit数の根拠がよう解らんのですわ。