// File: mburhanpurkar[P]fast_xorshift_plus/./fast_rng.hpp
// Function: fast_rng::vec_xorshift_plus::vec_xorshift_plus()
vec_xorshift_plus()
    {
        if (!is_aligned(&s0,32) || !is_aligned(&s1,32))
	    throw std::runtime_error("Fatal: unaligned vec_xorshift_plus!  See discussion in fast_rng.hpp");
      
        std::random_device rd;
        s0 = _mm256_setr_epi64x(rng_helpers::rd64(rd), rng_helpers::rd64(rd), rng_helpers::rd64(rd), rng_helpers::rd64(rd));
	s1 = _mm256_setr_epi64x(rng_helpers::rd64(rd), rng_helpers::rd64(rd), rng_helpers::rd64(rd), rng_helpers::rd64(rd));
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
andq $-0x20, %rsp
subq $0x1520, %rsp           # imm = 0x1520
movq %rdi, 0x1438(%rsp)
movq 0x1438(%rsp), %rdi
movq %rdi, 0x98(%rsp)
movl $0x20, %esi
callq 0x4b10
testb $0x1, %al
jne 0x46b7
jmp 0x46d1
movq 0x98(%rsp), %rdi
addq $0x20, %rdi
movl $0x20, %esi
callq 0x4b10
testb $0x1, %al
jne 0x4738
movl $0x10, %edi
callq 0x2080
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0x90(%rsp)
leaq 0xa8a(%rip), %rsi       # 0x517a
callq 0x2060
jmp 0x46f7
movq 0x90(%rsp), %rdi
movq 0x38ea(%rip), %rsi      # 0x7ff0
movq 0x38bb(%rip), %rdx      # 0x7fc8
callq 0x2200
movq 0x90(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1430(%rsp)
movl %eax, 0x142c(%rsp)
callq 0x20e0
jmp 0x49d3
leaq 0xa0(%rsp), %rdi
movq %rdi, 0x80(%rsp)
callq 0x2b40
movq 0x80(%rsp), %rdi
callq 0x39d0
movq %rax, 0x88(%rsp)
jmp 0x4764
leaq 0xa0(%rsp), %rdi
callq 0x39d0
movq %rax, 0x78(%rsp)
jmp 0x4778
leaq 0xa0(%rsp), %rdi
callq 0x39d0
movq %rax, 0x70(%rsp)
jmp 0x478c
leaq 0xa0(%rsp), %rdi
callq 0x39d0
movq %rax, 0x68(%rsp)
jmp 0x47a0
movq 0x68(%rsp), %rax
movq 0x70(%rsp), %rcx
movq 0x78(%rsp), %rdx
movq 0x88(%rsp), %rsi
movq %rsi, 0x1478(%rsp)
movq %rdx, 0x1470(%rsp)
movq %rcx, 0x1468(%rsp)
movq %rax, 0x1460(%rsp)
movq 0x1460(%rsp), %rsi
movq 0x1468(%rsp), %rdx
movq 0x1470(%rsp), %rcx
movq 0x1478(%rsp), %rax
movq %rsi, 0x14b8(%rsp)
movq %rdx, 0x14b0(%rsp)
movq %rcx, 0x14a8(%rsp)
movq %rax, 0x14a0(%rsp)
vmovq 0x14b8(%rsp), %xmm1
vmovq 0x14b0(%rsp), %xmm0
vpunpcklqdq %xmm1, %xmm0, %xmm1 # xmm1 = xmm0[0],xmm1[0]
vmovq 0x14a8(%rsp), %xmm2
vmovq 0x14a0(%rsp), %xmm0
vpunpcklqdq %xmm2, %xmm0, %xmm2 # xmm2 = xmm0[0],xmm2[0]
vmovaps %xmm2, %xmm0
vinserti128 $0x1, %xmm1, %ymm0, %ymm0
vmovdqa %ymm0, 0x1480(%rsp)
vmovdqa 0x1480(%rsp), %ymm0
vmovaps %ymm0, 0x40(%rsp)
movq 0x98(%rsp), %rax
vmovaps 0x40(%rsp), %ymm0
vmovdqa %ymm0, (%rax)
leaq 0xa0(%rsp), %rdi
vzeroupper
callq 0x39d0
movq %rax, 0x38(%rsp)
jmp 0x488e
leaq 0xa0(%rsp), %rdi
callq 0x39d0
movq %rax, 0x30(%rsp)
jmp 0x48a2
leaq 0xa0(%rsp), %rdi
callq 0x39d0
movq %rax, 0x28(%rsp)
jmp 0x48b6
leaq 0xa0(%rsp), %rdi
callq 0x39d0
movq %rax, 0x20(%rsp)
jmp 0x48ca
movq 0x20(%rsp), %rax
movq 0x28(%rsp), %rcx
movq 0x30(%rsp), %rdx
movq 0x38(%rsp), %rsi
movq %rsi, 0x1458(%rsp)
movq %rdx, 0x1450(%rsp)
movq %rcx, 0x1448(%rsp)
movq %rax, 0x1440(%rsp)
movq 0x1440(%rsp), %rsi
movq 0x1448(%rsp), %rdx
movq 0x1450(%rsp), %rcx
movq 0x1458(%rsp), %rax
movq %rsi, 0x1508(%rsp)
movq %rdx, 0x1500(%rsp)
movq %rcx, 0x14f8(%rsp)
movq %rax, 0x14f0(%rsp)
vmovq 0x1508(%rsp), %xmm1
vmovq 0x1500(%rsp), %xmm0
vpunpcklqdq %xmm1, %xmm0, %xmm1 # xmm1 = xmm0[0],xmm1[0]
vmovq 0x14f8(%rsp), %xmm2
vmovq 0x14f0(%rsp), %xmm0
vpunpcklqdq %xmm2, %xmm0, %xmm2 # xmm2 = xmm0[0],xmm2[0]
vmovaps %xmm2, %xmm0
vinserti128 $0x1, %xmm1, %ymm0, %ymm0
vmovdqa %ymm0, 0x14c0(%rsp)
vmovdqa 0x14c0(%rsp), %ymm0
vmovaps %ymm0, (%rsp)
movq 0x98(%rsp), %rax
vmovaps (%rsp), %ymm0
vmovdqa %ymm0, 0x20(%rax)
leaq 0xa0(%rsp), %rdi
vzeroupper
callq 0x2d60
movq %rbp, %rsp
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1430(%rsp)
movl %eax, 0x142c(%rsp)
leaq 0xa0(%rsp), %rdi
callq 0x2d60
movq 0x1430(%rsp), %rdi
callq 0x2210