// File: /workspace/github_cpp_makefile_star2_O2/BU-DiSC[P]BF-Shared-Hashing/hash/xxh3p.h
// Function: XXH3p_hashLong_128b_withSeed(unsigned char const*, unsigned long, unsigned long)
XXH_NO_INLINE XXH128_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_128b_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_128b_defaultSecret(input, len);
    XXH3p_initCustomSecret(secret, seed);
    return XXH3p_hashLong_128b_internal(input, len, secret, sizeof(secret));
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x100, %rsp            # imm = 0x100
movq %rsi, %rbx
testq %rdx, %rdx
je 0x20a9c
pushq $0x8
popq %rax
leaq 0x2d41(%rip), %rcx      # 0x23580
cmpq $0xc8, %rax
je 0x20866
movq -0x8(%rax,%rcx), %rsi
addq %rdx, %rsi
movq %rsi, 0x38(%rsp,%rax)
movq (%rax,%rcx), %rsi
subq %rdx, %rsi
movq %rsi, 0x40(%rsp,%rax)
addq $0x10, %rax
jmp 0x2083f
movaps 0x2e03(%rip), %xmm0     # 0x23670
movaps %xmm0, 0x30(%rsp)
movaps 0x2de7(%rip), %xmm0     # 0x23660
movaps %xmm0, 0x20(%rsp)
movaps 0x2dcb(%rip), %xmm0     # 0x23650
movaps %xmm0, 0x10(%rsp)
movaps 0x2daf(%rip), %xmm0     # 0x23640
movaps %xmm0, (%rsp)
movq %rbx, %rax
shrq $0xa, %rax
xorl %ecx, %ecx
leaq 0x40(%rsp), %rdx
movdqa 0x2ca5(%rip), %xmm0     # 0x23550
movq %rdi, %rsi
cmpq %rax, %rcx
je 0x20981
movq %rcx, %r8
shlq $0xa, %r8
addq %rdi, %r8
movq %rsi, %r9
movq %rdx, %r10
xorl %r11d, %r11d
cmpq $0x10, %r11
je 0x2092a
movq %r11, %r14
shlq $0x6, %r14
prefetcht0 0x180(%r8,%r14)
xorl %r14d, %r14d
cmpq $0x40, %r14
je 0x2091d
movdqu (%r9,%r14), %xmm1
movdqu (%r10,%r14), %xmm2
pxor %xmm1, %xmm2
pshufd $0xf5, %xmm2, %xmm3     # xmm3 = xmm2[1,1,3,3]
pshufd $0x4e, %xmm1, %xmm1     # xmm1 = xmm1[2,3,0,1]
paddq (%rsp,%r14), %xmm1
pmuludq %xmm2, %xmm3
paddq %xmm3, %xmm1
movdqa %xmm1, (%rsp,%r14)
addq $0x10, %r14
jmp 0x208e3
incq %r11
addq $0x8, %r10
addq $0x40, %r9
jmp 0x208ca
xorl %r8d, %r8d
cmpq $0x40, %r8
je 0x20972
movdqa (%rsp,%r8), %xmm1
movdqu 0xc0(%rsp,%r8), %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,%r8)
addq $0x10, %r8
jmp 0x2092d
incq %rcx
addq $0x400, %rsi            # imm = 0x400
jmp 0x208ae
movq %rbx, %rax
andq $-0x400, %rax           # imm = 0xFC00
movl %ebx, %ecx
shrl $0x6, %ecx
andl $0xf, %ecx
addq %rdi, %rax
leaq 0x40(%rsp), %rdx
xorl %esi, %esi
movq %rax, %r8
cmpq %rcx, %rsi
je 0x209fe
movq %rsi, %r9
shlq $0x6, %r9
prefetcht0 0x180(%rax,%r9)
xorl %r9d, %r9d
cmpq $0x40, %r9
je 0x209f1
movdqu (%r8,%r9), %xmm0
movdqu (%rdx,%r9), %xmm1
pxor %xmm0, %xmm1
pshufd $0xf5, %xmm1, %xmm2     # xmm2 = xmm1[1,1,3,3]
pshufd $0x4e, %xmm0, %xmm0     # xmm0 = xmm0[2,3,0,1]
paddq (%rsp,%r9), %xmm0
pmuludq %xmm1, %xmm2
paddq %xmm2, %xmm0
movdqa %xmm0, (%rsp,%r9)
addq $0x10, %r9
jmp 0x209b7
incq %rsi
addq $0x8, %rdx
addq $0x40, %r8
jmp 0x2099f
testb $0x3f, %bl
je 0x20a47
leaq (%rdi,%rbx), %rax
addq $-0x40, %rax
xorl %ecx, %ecx
cmpq $0x40, %rcx
je 0x20a47
movdqu (%rax,%rcx), %xmm0
movdqu 0xb9(%rsp,%rcx), %xmm1
pxor %xmm0, %xmm1
pshufd $0xf5, %xmm1, %xmm2     # xmm2 = xmm1[1,1,3,3]
pshufd $0x4e, %xmm0, %xmm0     # xmm0 = xmm0[2,3,0,1]
paddq (%rsp,%rcx), %xmm0
pmuludq %xmm1, %xmm2
paddq %xmm2, %xmm0
movdqa %xmm0, (%rsp,%rcx)
addq $0x10, %rcx
jmp 0x20a0d
leaq 0x4b(%rsp), %rsi
movabsq $-0x61c8864e7a143579, %rdx # imm = 0x9E3779B185EBCA87
imulq %rbx, %rdx
movq %rsp, %r14
movq %r14, %rdi
callq 0x20b31
movq %rax, %r15
leaq 0xb5(%rsp), %rsi
movabsq $-0x3d4d51c2d82b14b1, %rdx # imm = 0xC2B2AE3D27D4EB4F
imulq %rbx, %rdx
notq %rdx
movq %r14, %rdi
callq 0x20b31
movq %rax, %rdx
movq %r15, %rax
addq $0x100, %rsp            # imm = 0x100
popq %rbx
popq %r14
popq %r15
retq
movq %rbx, %rsi
addq $0x100, %rsp            # imm = 0x100
popq %rbx
popq %r14
popq %r15
jmp 0x1fad9