// File: /workspace/github_cpp_makefile_star2_O3/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 0x26e95
movl $0x8, %eax
leaq 0x3987(%rip), %rcx      # 0x2a5c0
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
cmpq $0xc8, %rax
jne 0x26c39
movaps 0x3a4b(%rip), %xmm0     # 0x2a6b0
movaps %xmm0, 0x30(%rsp)
movaps 0x3a2f(%rip), %xmm0     # 0x2a6a0
movaps %xmm0, 0x20(%rsp)
movaps 0x3a13(%rip), %xmm0     # 0x2a690
movaps %xmm0, 0x10(%rsp)
movdqa 0x39f6(%rip), %xmm0     # 0x2a680
movdqa %xmm0, (%rsp)
cmpq $0x400, %rbx            # imm = 0x400
jb 0x26d7d
movq %rbx, %rax
shrq $0xa, %rax
xorl %ecx, %ecx
leaq 0x40(%rsp), %rdx
movdqa 0x38ee(%rip), %xmm0     # 0x2a5a0
movq %rdi, %rsi
movq %rcx, %r8
shlq $0xa, %r8
addq %rdi, %r8
movq %rdx, %r9
movq %rsi, %r10
xorl %r11d, %r11d
movq %r11, %r14
shlq $0x6, %r14
prefetcht0 0x180(%r8,%r14)
xorl %r14d, %r14d
movdqu (%r10,%r14), %xmm1
movdqu (%r9,%r14), %xmm2
pxor %xmm1, %xmm2
pshufd $0xf5, %xmm2, %xmm3     # xmm3 = xmm2[1,1,3,3]
pmuludq %xmm2, %xmm3
pshufd $0x4e, %xmm1, %xmm1     # xmm1 = xmm1[2,3,0,1]
paddq (%rsp,%r14), %xmm1
paddq %xmm3, %xmm1
movdqa %xmm1, (%rsp,%r14)
addq $0x10, %r14
cmpq $0x40, %r14
jne 0x26cdb
incq %r11
addq $0x40, %r10
addq $0x8, %r9
cmpq $0x10, %r11
jne 0x26cc8
xorl %r8d, %r8d
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
cmpq $0x40, %r8
jne 0x26d27
incq %rcx
addq $0x400, %rsi            # imm = 0x400
cmpq %rax, %rcx
jne 0x26cb5
movl %ebx, %eax
shrl $0x6, %eax
andl $0xf, %eax
je 0x26df9
movq %rbx, %rcx
andq $-0x400, %rcx           # imm = 0xFC00
addq %rdi, %rcx
leaq 0x40(%rsp), %rdx
xorl %esi, %esi
movq %rcx, %r8
movq %rsi, %r9
shlq $0x6, %r9
prefetcht0 0x180(%rcx,%r9)
xorl %r9d, %r9d
movdqu (%r8,%r9), %xmm0
movdqu (%rdx,%r9), %xmm1
pxor %xmm0, %xmm1
pshufd $0xf5, %xmm1, %xmm2     # xmm2 = xmm1[1,1,3,3]
pmuludq %xmm1, %xmm2
pshufd $0x4e, %xmm0, %xmm0     # xmm0 = xmm0[2,3,0,1]
paddq (%rsp,%r9), %xmm0
paddq %xmm2, %xmm0
movdqa %xmm0, (%rsp,%r9)
addq $0x10, %r9
cmpq $0x40, %r9
jne 0x26db1
incq %rsi
addq $0x40, %r8
addq $0x8, %rdx
cmpq %rax, %rsi
jne 0x26d9e
testb $0x3f, %bl
je 0x26e40
leaq (%rdi,%rbx), %rax
addq $-0x40, %rax
xorl %ecx, %ecx
movdqu (%rax,%rcx), %xmm0
movdqu 0xb9(%rsp,%rcx), %xmm1
pxor %xmm0, %xmm1
pshufd $0xf5, %xmm1, %xmm2     # xmm2 = xmm1[1,1,3,3]
pmuludq %xmm1, %xmm2
pshufd $0x4e, %xmm0, %xmm0     # xmm0 = xmm0[2,3,0,1]
paddq (%rsp,%rcx), %xmm0
paddq %xmm2, %xmm0
movdqa %xmm0, (%rsp,%rcx)
addq $0x10, %rcx
cmpq $0x40, %rcx
jne 0x26e08
leaq 0x4b(%rsp), %rsi
movabsq $-0x61c8864e7a143579, %rdx # imm = 0x9E3779B185EBCA87
imulq %rbx, %rdx
movq %rsp, %r14
movq %r14, %rdi
callq 0x26f2a
movq %rax, %r15
leaq 0xb5(%rsp), %rsi
movabsq $-0x3d4d51c2d82b14b1, %rdx # imm = 0xC2B2AE3D27D4EB4F
imulq %rbx, %rdx
notq %rdx
movq %r14, %rdi
callq 0x26f2a
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 0x25e99