// File: /workspace/github_cpp_makefile_star2_O1/BU-DiSC[P]BF-Shared-Hashing/hash/xxh3p.h
// Function: XXH3p_hashLong_64b_withSeed(unsigned char const*, unsigned long, unsigned long)
XXH_NO_INLINE XXH64_hash_t    /* It's important for performance that XXH3p_hashLong is not inlined. Not sure why (uop cache maybe ?), but difference is large and easily measurable */
XXH3p_hashLong_64b_withSeed(const xxh_u8* input, size_t len, XXH64_hash_t seed)
{
    XXH_ALIGN(8) xxh_u8 secret[XXH_SECRET_DEFAULT_SIZE];
    if (seed==0) return XXH3p_hashLong_64b_defaultSecret(input, len);
    XXH3p_initCustomSecret(secret, seed);
    return XXH3p_hashLong_internal(input, len, secret, sizeof(secret));
}

// Assembly:
movq %rsi, %rax
testq %rdx, %rdx
je 0x25d42
pushq %r14
pushq %rbx
subq $0x108, %rsp            # imm = 0x108
movl $0x8, %ecx
leaq 0x4a9e(%rip), %rsi      # 0x2a5c0
movq -0x8(%rcx,%rsi), %r8
addq %rdx, %r8
movq %r8, 0x40(%rsp,%rcx)
movq (%rcx,%rsi), %r8
subq %rdx, %r8
movq %r8, 0x48(%rsp,%rcx)
addq $0x10, %rcx
cmpq $0xc8, %rcx
jne 0x25b22
movaps 0x4b61(%rip), %xmm0     # 0x2a6b0
movaps %xmm0, 0x30(%rsp)
movaps 0x4b45(%rip), %xmm0     # 0x2a6a0
movaps %xmm0, 0x20(%rsp)
movaps 0x4b29(%rip), %xmm0     # 0x2a690
movaps %xmm0, 0x10(%rsp)
movdqa 0x4b0c(%rip), %xmm0     # 0x2a680
movdqa %xmm0, (%rsp)
cmpq $0x400, %rax            # imm = 0x400
jb 0x25c60
movq %rax, %rcx
shrq $0xa, %rcx
xorl %edx, %edx
leaq 0x48(%rsp), %rsi
movdqa 0x4a05(%rip), %xmm0     # 0x2a5a0
movq %rdi, %r8
movq %rdx, %r9
shlq $0xa, %r9
addq %rdi, %r9
movq %rsi, %r10
movq %r8, %r11
xorl %ebx, %ebx
movq %rbx, %r14
shlq $0x6, %r14
prefetcht0 0x180(%r9,%r14)
xorl %r14d, %r14d
movdqu (%r11,%r14), %xmm1
movdqu (%r10,%r14), %xmm2
pxor %xmm1, %xmm2
pshufd $0xf5, %xmm2, %xmm3     # xmm3 = xmm2[1,1,3,3]
pmuludq %xmm2, %xmm3
paddq (%rsp,%r14), %xmm1
paddq %xmm3, %xmm1
movdqa %xmm1, (%rsp,%r14)
addq $0x10, %r14
cmpq $0x40, %r14
jne 0x25bc3
incq %rbx
addq $0x40, %r11
addq $0x8, %r10
cmpq $0x10, %rbx
jne 0x25bb0
xorl %r9d, %r9d
movdqa (%rsp,%r9), %xmm1
movdqu 0xc8(%rsp,%r9), %xmm2
pxor %xmm1, %xmm2
psrlq $0x2f, %xmm1
pxor %xmm2, %xmm1
pshufd $0xf5, %xmm1, %xmm2     # xmm2 = xmm1[1,1,3,3]
pmuludq %xmm0, %xmm1
pmuludq %xmm0, %xmm2
psllq $0x20, %xmm2
paddq %xmm1, %xmm2
movdqa %xmm2, (%rsp,%r9)
addq $0x10, %r9
cmpq $0x40, %r9
jne 0x25c0a
incq %rdx
addq $0x400, %r8             # imm = 0x400
cmpq %rcx, %rdx
jne 0x25b9e
movl %eax, %ecx
shrl $0x6, %ecx
andl $0xf, %ecx
je 0x25cd8
movq %rax, %rdx
andq $-0x400, %rdx           # imm = 0xFC00
addq %rdi, %rdx
leaq 0x48(%rsp), %rsi
xorl %r8d, %r8d
movq %rdx, %r9
movq %r8, %r10
shlq $0x6, %r10
prefetcht0 0x180(%rdx,%r10)
xorl %r10d, %r10d
movdqu (%r9,%r10), %xmm0
movdqu (%rsi,%r10), %xmm1
pxor %xmm0, %xmm1
pshufd $0xf5, %xmm1, %xmm2     # xmm2 = xmm1[1,1,3,3]
pmuludq %xmm1, %xmm2
paddq (%rsp,%r10), %xmm0
paddq %xmm2, %xmm0
movdqa %xmm0, (%rsp,%r10)
addq $0x10, %r10
cmpq $0x40, %r10
jne 0x25c95
incq %r8
addq $0x40, %r9
addq $0x8, %rsi
cmpq %rcx, %r8
jne 0x25c82
testb $0x3f, %al
je 0x25d19
leaq (%rdi,%rax), %rcx
addq $-0x40, %rcx
xorl %edx, %edx
movdqu (%rcx,%rdx), %xmm0
movdqu 0xc1(%rsp,%rdx), %xmm1
pxor %xmm0, %xmm1
pshufd $0xf5, %xmm1, %xmm2     # xmm2 = xmm1[1,1,3,3]
pmuludq %xmm1, %xmm2
paddq (%rsp,%rdx), %xmm0
paddq %xmm2, %xmm0
movdqa %xmm0, (%rsp,%rdx)
addq $0x10, %rdx
cmpq $0x40, %rdx
jne 0x25ce6
leaq 0x53(%rsp), %rsi
movabsq $-0x61c8864e7a143579, %rcx # imm = 0x9E3779B185EBCA87
imulq %rcx, %rax
movq %rsp, %rdi
movq %rax, %rdx
callq 0x274a2
addq $0x108, %rsp            # imm = 0x108
popq %rbx
popq %r14
retq
movq %rax, %rsi
jmp 0x2515a