;xorshift a,b,c,d
;generate random 32-bit number based on seeds a,b,c and d
;returns new seeds a,b,c,d in eax,ebx,ecx,edx respectively
;edx is usable as random result
;proc    xorshift,.a,.b,.c,.d
xorshift:
	.a	equ esp+4
	.b	equ esp+8
	.c	equ esp+12
	.d	equ esp+16
	mov	eax,[esp+4]
	shl	eax,15
	xor	eax,[esp+4]
	mov	edx,[esp+16]
	shr	edx,21
	xor	edx,[esp+16]
	mov	ebx,eax
	shr	eax,4
	mov	ecx,[esp+16]
	xor	eax,ebx
	mov	ebx,[esp+12]
	xor	edx,eax
	mov	eax,[esp+8]
	ret	16