// File: /workspace/github_cpp_makefile_star2_O2/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 0x1f41b
pushq %r14
pushq %rbx
subq $0x108, %rsp            # imm = 0x108
pushq $0x8
popq %rcx
leaq 0x4388(%rip), %rsi      # 0x23580
cmpq $0xc8, %rcx
je 0x1f220
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
jmp 0x1f1f8
movaps 0x4449(%rip), %xmm0     # 0x23670
movaps %xmm0, 0x30(%rsp)
movaps 0x442d(%rip), %xmm0     # 0x23660
movaps %xmm0, 0x20(%rsp)
movaps 0x4411(%rip), %xmm0     # 0x23650
movaps %xmm0, 0x10(%rsp)
movaps 0x43f5(%rip), %xmm0     # 0x23640
movaps %xmm0, (%rsp)
movq %rax, %rcx
shrq $0xa, %rcx
xorl %edx, %edx
leaq 0x48(%rsp), %rsi
movdqa 0x42eb(%rip), %xmm0     # 0x23550
movq %rdi, %r8
cmpq %rcx, %rdx
je 0x1f335
movq %rdx, %r9
shlq $0xa, %r9
addq %rdi, %r9
movq %r8, %r10
movq %rsi, %r11
xorl %ebx, %ebx
cmpq $0x10, %rbx
je 0x1f2de
movq %rbx, %r14
shlq $0x6, %r14
prefetcht0 0x180(%r9,%r14)
xorl %r14d, %r14d
cmpq $0x40, %r14
je 0x1f2d1
movdqu (%r10,%r14), %xmm1
movdqu (%r11,%r14), %xmm2
pxor %xmm1, %xmm2
pshufd $0xf5, %xmm2, %xmm3     # xmm3 = xmm2[1,1,3,3]
paddq (%rsp,%r14), %xmm1
pmuludq %xmm2, %xmm3
paddq %xmm3, %xmm1
movdqa %xmm1, (%rsp,%r14)
addq $0x10, %r14
jmp 0x1f29c
incq %rbx
addq $0x8, %r11
addq $0x40, %r10
jmp 0x1f283
xorl %r9d, %r9d
cmpq $0x40, %r9
je 0x1f326
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
jmp 0x1f2e1
incq %rdx
addq $0x400, %r8             # imm = 0x400
jmp 0x1f268
movq %rax, %rcx
andq $-0x400, %rcx           # imm = 0xFC00
movl %eax, %edx
shrl $0x6, %edx
andl $0xf, %edx
addq %rdi, %rcx
leaq 0x48(%rsp), %rsi
xorl %r8d, %r8d
movq %rcx, %r9
cmpq %rdx, %r8
je 0x1f3af
movq %r8, %r10
shlq $0x6, %r10
prefetcht0 0x180(%rcx,%r10)
xorl %r10d, %r10d
cmpq $0x40, %r10
je 0x1f3a2
movdqu (%r9,%r10), %xmm0
movdqu (%rsi,%r10), %xmm1
pxor %xmm0, %xmm1
pshufd $0xf5, %xmm1, %xmm2     # xmm2 = xmm1[1,1,3,3]
paddq (%rsp,%r10), %xmm0
pmuludq %xmm1, %xmm2
paddq %xmm2, %xmm0
movdqa %xmm0, (%rsp,%r10)
addq $0x10, %r10
jmp 0x1f36d
incq %r8
addq $0x8, %rsi
addq $0x40, %r9
jmp 0x1f355
testb $0x3f, %al
je 0x1f3f2
leaq (%rdi,%rax), %rcx
addq $-0x40, %rcx
xorl %edx, %edx
cmpq $0x40, %rdx
je 0x1f3f2
movdqu (%rcx,%rdx), %xmm0
movdqu 0xc1(%rsp,%rdx), %xmm1
pxor %xmm0, %xmm1
pshufd $0xf5, %xmm1, %xmm2     # xmm2 = xmm1[1,1,3,3]
paddq (%rsp,%rdx), %xmm0
pmuludq %xmm1, %xmm2
paddq %xmm2, %xmm0
movdqa %xmm0, (%rsp,%rdx)
addq $0x10, %rdx
jmp 0x1f3bd
leaq 0x53(%rsp), %rsi
movabsq $-0x61c8864e7a143579, %rcx # imm = 0x9E3779B185EBCA87
imulq %rcx, %rax
movq %rsp, %rdi
movq %rax, %rdx
callq 0x20b31
addq $0x108, %rsp            # imm = 0x108
popq %rbx
popq %r14
retq
movq %rax, %rsi
jmp 0x1e86e