// File: mh0fm4[P]SCDC/src/extra/xxhash/xxhash.c
// Function: XXH64
XXH_PUBLIC_API unsigned long long XXH64 (const void* input, size_t len, unsigned long long seed)
{
#if 0
    /* Simple version, good for code maintenance, but unfortunately slow for small inputs */
    XXH64_state_t state;
    XXH64_reset(&state, seed);
    XXH64_update(&state, input, len);
    return XXH64_digest(&state);
#else
    XXH_endianess endian_detected = (XXH_endianess)XXH_CPU_LITTLE_ENDIAN;

    if (XXH_FORCE_ALIGN_CHECK) {
        if ((((size_t)input) & 7)==0) {  /* Input is aligned, let's leverage the speed advantage */
            if ((endian_detected==XXH_littleEndian) || XXH_FORCE_NATIVE_FORMAT)
                return XXH64_endian_align(input, len, seed, XXH_littleEndian, XXH_aligned);
            else
                return XXH64_endian_align(input, len, seed, XXH_bigEndian, XXH_aligned);
    }   }

    if ((endian_detected==XXH_littleEndian) || XXH_FORCE_NATIVE_FORMAT)
        return XXH64_endian_align(input, len, seed, XXH_littleEndian, XXH_unaligned);
    else
        return XXH64_endian_align(input, len, seed, XXH_bigEndian, XXH_unaligned);
#endif
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x270, %rsp            # imm = 0x270
movq %rdi, -0x190(%rbp)
movq %rsi, -0x198(%rbp)
movq %rdx, -0x1a0(%rbp)
callq 0x55f40
movl %eax, -0x1a4(%rbp)
cmpl $0x1, -0x1a4(%rbp)
jne 0x57df8
movq -0x190(%rbp), %rdx
movq -0x198(%rbp), %rcx
movq -0x1a0(%rbp), %rax
movq %rdx, -0xc8(%rbp)
movq %rcx, -0xd0(%rbp)
movq %rax, -0xd8(%rbp)
movl $0x1, -0xdc(%rbp)
movl $0x1, -0xe0(%rbp)
movq -0xc8(%rbp), %rax
movq %rax, -0xe8(%rbp)
movq -0xe8(%rbp), %rax
addq -0xd0(%rbp), %rax
movq %rax, -0xf0(%rbp)
cmpq $0x20, -0xd0(%rbp)
jb 0x57d98
movq -0xf0(%rbp), %rax
addq $-0x20, %rax
movq %rax, -0x100(%rbp)
movabsq $-0x61c8864e7a143579, %rax # imm = 0x9E3779B185EBCA87
addq -0xd8(%rbp), %rax
movabsq $-0x3d4d51c2d82b14b1, %rcx # imm = 0xC2B2AE3D27D4EB4F
addq %rcx, %rax
movq %rax, -0x108(%rbp)
movabsq $-0x3d4d51c2d82b14b1, %rax # imm = 0xC2B2AE3D27D4EB4F
addq -0xd8(%rbp), %rax
movq %rax, -0x110(%rbp)
movq -0xd8(%rbp), %rax
movq %rax, -0x118(%rbp)
movq -0xd8(%rbp), %rax
movabsq $-0x61c8864e7a143579, %rcx # imm = 0x9E3779B185EBCA87
subq %rcx, %rax
movq %rax, -0x120(%rbp)
movq -0x108(%rbp), %rax
movq %rax, -0x1b0(%rbp)
movq -0xe8(%rbp), %rdx
movl -0xdc(%rbp), %ecx
movl -0xe0(%rbp), %eax
movq %rdx, -0x70(%rbp)
movl %ecx, -0x74(%rbp)
movl %eax, -0x78(%rbp)
cmpl $0x1, -0x78(%rbp)
jne 0x5797d
cmpl $0x1, -0x74(%rbp)
jne 0x57958
movq -0x70(%rbp), %rdi
callq 0x5d390
movq %rax, -0x1b8(%rbp)
jmp 0x57970
movq -0x70(%rbp), %rdi
callq 0x5d390
movq %rax, %rdi
callq 0x59cd0
movq %rax, -0x1b8(%rbp)
movq -0x1b8(%rbp), %rax
movq %rax, -0x68(%rbp)
jmp 0x579b1
cmpl $0x1, -0x74(%rbp)
jne 0x57993
movq -0x70(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x1c0(%rbp)
jmp 0x579a6
movq -0x70(%rbp), %rax
movq (%rax), %rdi
callq 0x59cd0
movq %rax, -0x1c0(%rbp)
movq -0x1c0(%rbp), %rax
movq %rax, -0x68(%rbp)
movq -0x1b0(%rbp), %rdi
movq -0x68(%rbp), %rsi
callq 0x5ac70
movq %rax, -0x108(%rbp)
movq -0xe8(%rbp), %rax
addq $0x8, %rax
movq %rax, -0xe8(%rbp)
movq -0x110(%rbp), %rax
movq %rax, -0x1c8(%rbp)
movq -0xe8(%rbp), %rdx
movl -0xdc(%rbp), %ecx
movl -0xe0(%rbp), %eax
movq %rdx, -0x88(%rbp)
movl %ecx, -0x8c(%rbp)
movl %eax, -0x90(%rbp)
cmpl $0x1, -0x90(%rbp)
jne 0x57a5d
cmpl $0x1, -0x8c(%rbp)
jne 0x57a35
movq -0x88(%rbp), %rdi
callq 0x5d390
movq %rax, -0x1d0(%rbp)
jmp 0x57a50
movq -0x88(%rbp), %rdi
callq 0x5d390
movq %rax, %rdi
callq 0x59cd0
movq %rax, -0x1d0(%rbp)
movq -0x1d0(%rbp), %rax
movq %rax, -0x80(%rbp)
jmp 0x57a9a
cmpl $0x1, -0x8c(%rbp)
jne 0x57a79
movq -0x88(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x1d8(%rbp)
jmp 0x57a8f
movq -0x88(%rbp), %rax
movq (%rax), %rdi
callq 0x59cd0
movq %rax, -0x1d8(%rbp)
movq -0x1d8(%rbp), %rax
movq %rax, -0x80(%rbp)
movq -0x1c8(%rbp), %rdi
movq -0x80(%rbp), %rsi
callq 0x5ac70
movq %rax, -0x110(%rbp)
movq -0xe8(%rbp), %rax
addq $0x8, %rax
movq %rax, -0xe8(%rbp)
movq -0x118(%rbp), %rax
movq %rax, -0x1e0(%rbp)
movq -0xe8(%rbp), %rdx
movl -0xdc(%rbp), %ecx
movl -0xe0(%rbp), %eax
movq %rdx, -0xa0(%rbp)
movl %ecx, -0xa4(%rbp)
movl %eax, -0xa8(%rbp)
cmpl $0x1, -0xa8(%rbp)
jne 0x57b49
cmpl $0x1, -0xa4(%rbp)
jne 0x57b1e
movq -0xa0(%rbp), %rdi
callq 0x5d390
movq %rax, -0x1e8(%rbp)
jmp 0x57b39
movq -0xa0(%rbp), %rdi
callq 0x5d390
movq %rax, %rdi
callq 0x59cd0
movq %rax, -0x1e8(%rbp)
movq -0x1e8(%rbp), %rax
movq %rax, -0x98(%rbp)
jmp 0x57b89
cmpl $0x1, -0xa4(%rbp)
jne 0x57b65
movq -0xa0(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x1f0(%rbp)
jmp 0x57b7b
movq -0xa0(%rbp), %rax
movq (%rax), %rdi
callq 0x59cd0
movq %rax, -0x1f0(%rbp)
movq -0x1f0(%rbp), %rax
movq %rax, -0x98(%rbp)
movq -0x1e0(%rbp), %rdi
movq -0x98(%rbp), %rsi
callq 0x5ac70
movq %rax, -0x118(%rbp)
movq -0xe8(%rbp), %rax
addq $0x8, %rax
movq %rax, -0xe8(%rbp)
movq -0x120(%rbp), %rax
movq %rax, -0x1f8(%rbp)
movq -0xe8(%rbp), %rdx
movl -0xdc(%rbp), %ecx
movl -0xe0(%rbp), %eax
movq %rdx, -0xb8(%rbp)
movl %ecx, -0xbc(%rbp)
movl %eax, -0xc0(%rbp)
cmpl $0x1, -0xc0(%rbp)
jne 0x57c3b
cmpl $0x1, -0xbc(%rbp)
jne 0x57c10
movq -0xb8(%rbp), %rdi
callq 0x5d390
movq %rax, -0x200(%rbp)
jmp 0x57c2b
movq -0xb8(%rbp), %rdi
callq 0x5d390
movq %rax, %rdi
callq 0x59cd0
movq %rax, -0x200(%rbp)
movq -0x200(%rbp), %rax
movq %rax, -0xb0(%rbp)
jmp 0x57c7b
cmpl $0x1, -0xbc(%rbp)
jne 0x57c57
movq -0xb8(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x208(%rbp)
jmp 0x57c6d
movq -0xb8(%rbp), %rax
movq (%rax), %rdi
callq 0x59cd0
movq %rax, -0x208(%rbp)
movq -0x208(%rbp), %rax
movq %rax, -0xb0(%rbp)
movq -0x1f8(%rbp), %rdi
movq -0xb0(%rbp), %rsi
callq 0x5ac70
movq %rax, -0x120(%rbp)
movq -0xe8(%rbp), %rax
addq $0x8, %rax
movq %rax, -0xe8(%rbp)
movq -0xe8(%rbp), %rax
cmpq -0x100(%rbp), %rax
jbe 0x5790f
movq -0x108(%rbp), %rax
shlq %rax
movq -0x108(%rbp), %rcx
shrq $0x3f, %rcx
orq %rcx, %rax
movq -0x110(%rbp), %rcx
shlq $0x7, %rcx
movq -0x110(%rbp), %rdx
shrq $0x39, %rdx
orq %rdx, %rcx
addq %rcx, %rax
movq -0x118(%rbp), %rcx
shlq $0xc, %rcx
movq -0x118(%rbp), %rdx
shrq $0x34, %rdx
orq %rdx, %rcx
addq %rcx, %rax
movq -0x120(%rbp), %rcx
shlq $0x12, %rcx
movq -0x120(%rbp), %rdx
shrq $0x2e, %rdx
orq %rdx, %rcx
addq %rcx, %rax
movq %rax, -0xf8(%rbp)
movq -0xf8(%rbp), %rdi
movq -0x108(%rbp), %rsi
callq 0x5acd0
movq %rax, -0xf8(%rbp)
movq -0xf8(%rbp), %rdi
movq -0x110(%rbp), %rsi
callq 0x5acd0
movq %rax, -0xf8(%rbp)
movq -0xf8(%rbp), %rdi
movq -0x118(%rbp), %rsi
callq 0x5acd0
movq %rax, -0xf8(%rbp)
movq -0xf8(%rbp), %rdi
movq -0x120(%rbp), %rsi
callq 0x5acd0
movq %rax, -0xf8(%rbp)
jmp 0x57db0
movabsq $0x27d4eb2f165667c5, %rax # imm = 0x27D4EB2F165667C5
addq -0xd8(%rbp), %rax
movq %rax, -0xf8(%rbp)
movq -0xd0(%rbp), %rax
addq -0xf8(%rbp), %rax
movq %rax, -0xf8(%rbp)
movq -0xf8(%rbp), %rdi
movq -0xe8(%rbp), %rsi
movq -0xd0(%rbp), %rdx
movl -0xdc(%rbp), %ecx
movl -0xe0(%rbp), %r8d
callq 0x5ad30
movq %rax, -0x188(%rbp)
jmp 0x58357
movq -0x190(%rbp), %rdx
movq -0x198(%rbp), %rcx
movq -0x1a0(%rbp), %rax
movq %rdx, -0x128(%rbp)
movq %rcx, -0x130(%rbp)
movq %rax, -0x138(%rbp)
movl $0x0, -0x13c(%rbp)
movl $0x1, -0x140(%rbp)
movq -0x128(%rbp), %rax
movq %rax, -0x148(%rbp)
movq -0x148(%rbp), %rax
addq -0x130(%rbp), %rax
movq %rax, -0x150(%rbp)
cmpq $0x20, -0x130(%rbp)
jb 0x582fc
movq -0x150(%rbp), %rax
addq $-0x20, %rax
movq %rax, -0x160(%rbp)
movabsq $-0x61c8864e7a143579, %rax # imm = 0x9E3779B185EBCA87
addq -0x138(%rbp), %rax
movabsq $-0x3d4d51c2d82b14b1, %rcx # imm = 0xC2B2AE3D27D4EB4F
addq %rcx, %rax
movq %rax, -0x168(%rbp)
movabsq $-0x3d4d51c2d82b14b1, %rax # imm = 0xC2B2AE3D27D4EB4F
addq -0x138(%rbp), %rax
movq %rax, -0x170(%rbp)
movq -0x138(%rbp), %rax
movq %rax, -0x178(%rbp)
movq -0x138(%rbp), %rax
movabsq $-0x61c8864e7a143579, %rcx # imm = 0x9E3779B185EBCA87
subq %rcx, %rax
movq %rax, -0x180(%rbp)
movq -0x168(%rbp), %rax
movq %rax, -0x210(%rbp)
movq -0x148(%rbp), %rdx
movl -0x13c(%rbp), %ecx
movl -0x140(%rbp), %eax
movq %rdx, -0x10(%rbp)
movl %ecx, -0x14(%rbp)
movl %eax, -0x18(%rbp)
cmpl $0x1, -0x18(%rbp)
jne 0x57f4d
cmpl $0x1, -0x14(%rbp)
jne 0x57f28
movq -0x10(%rbp), %rdi
callq 0x5d390
movq %rax, -0x218(%rbp)
jmp 0x57f40
movq -0x10(%rbp), %rdi
callq 0x5d390
movq %rax, %rdi
callq 0x59cd0
movq %rax, -0x218(%rbp)
movq -0x218(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x57f81
cmpl $0x1, -0x14(%rbp)
jne 0x57f63
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x220(%rbp)
jmp 0x57f76
movq -0x10(%rbp), %rax
movq (%rax), %rdi
callq 0x59cd0
movq %rax, -0x220(%rbp)
movq -0x220(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x210(%rbp), %rdi
movq -0x8(%rbp), %rsi
callq 0x5ac70
movq %rax, -0x168(%rbp)
movq -0x148(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x148(%rbp)
movq -0x170(%rbp), %rax
movq %rax, -0x228(%rbp)
movq -0x148(%rbp), %rdx
movl -0x13c(%rbp), %ecx
movl -0x140(%rbp), %eax
movq %rdx, -0x28(%rbp)
movl %ecx, -0x2c(%rbp)
movl %eax, -0x30(%rbp)
cmpl $0x1, -0x30(%rbp)
jne 0x58018
cmpl $0x1, -0x2c(%rbp)
jne 0x57ff3
movq -0x28(%rbp), %rdi
callq 0x5d390
movq %rax, -0x230(%rbp)
jmp 0x5800b
movq -0x28(%rbp), %rdi
callq 0x5d390
movq %rax, %rdi
callq 0x59cd0
movq %rax, -0x230(%rbp)
movq -0x230(%rbp), %rax
movq %rax, -0x20(%rbp)
jmp 0x5804c
cmpl $0x1, -0x2c(%rbp)
jne 0x5802e
movq -0x28(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x238(%rbp)
jmp 0x58041
movq -0x28(%rbp), %rax
movq (%rax), %rdi
callq 0x59cd0
movq %rax, -0x238(%rbp)
movq -0x238(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x228(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x5ac70
movq %rax, -0x170(%rbp)
movq -0x148(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x148(%rbp)
movq -0x178(%rbp), %rax
movq %rax, -0x240(%rbp)
movq -0x148(%rbp), %rdx
movl -0x13c(%rbp), %ecx
movl -0x140(%rbp), %eax
movq %rdx, -0x40(%rbp)
movl %ecx, -0x44(%rbp)
movl %eax, -0x48(%rbp)
cmpl $0x1, -0x48(%rbp)
jne 0x580e3
cmpl $0x1, -0x44(%rbp)
jne 0x580be
movq -0x40(%rbp), %rdi
callq 0x5d390
movq %rax, -0x248(%rbp)
jmp 0x580d6
movq -0x40(%rbp), %rdi
callq 0x5d390
movq %rax, %rdi
callq 0x59cd0
movq %rax, -0x248(%rbp)
movq -0x248(%rbp), %rax
movq %rax, -0x38(%rbp)
jmp 0x58117
cmpl $0x1, -0x44(%rbp)
jne 0x580f9
movq -0x40(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x250(%rbp)
jmp 0x5810c
movq -0x40(%rbp), %rax
movq (%rax), %rdi
callq 0x59cd0
movq %rax, -0x250(%rbp)
movq -0x250(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x240(%rbp), %rdi
movq -0x38(%rbp), %rsi
callq 0x5ac70
movq %rax, -0x178(%rbp)
movq -0x148(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x148(%rbp)
movq -0x180(%rbp), %rax
movq %rax, -0x258(%rbp)
movq -0x148(%rbp), %rdx
movl -0x13c(%rbp), %ecx
movl -0x140(%rbp), %eax
movq %rdx, -0x58(%rbp)
movl %ecx, -0x5c(%rbp)
movl %eax, -0x60(%rbp)
cmpl $0x1, -0x60(%rbp)
jne 0x581ae
cmpl $0x1, -0x5c(%rbp)
jne 0x58189
movq -0x58(%rbp), %rdi
callq 0x5d390
movq %rax, -0x260(%rbp)
jmp 0x581a1
movq -0x58(%rbp), %rdi
callq 0x5d390
movq %rax, %rdi
callq 0x59cd0
movq %rax, -0x260(%rbp)
movq -0x260(%rbp), %rax
movq %rax, -0x50(%rbp)
jmp 0x581e2
cmpl $0x1, -0x5c(%rbp)
jne 0x581c4
movq -0x58(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x268(%rbp)
jmp 0x581d7
movq -0x58(%rbp), %rax
movq (%rax), %rdi
callq 0x59cd0
movq %rax, -0x268(%rbp)
movq -0x268(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x258(%rbp), %rdi
movq -0x50(%rbp), %rsi
callq 0x5ac70
movq %rax, -0x180(%rbp)
movq -0x148(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x148(%rbp)
movq -0x148(%rbp), %rax
cmpq -0x160(%rbp), %rax
jbe 0x57edf
movq -0x168(%rbp), %rax
shlq %rax
movq -0x168(%rbp), %rcx
shrq $0x3f, %rcx
orq %rcx, %rax
movq -0x170(%rbp), %rcx
shlq $0x7, %rcx
movq -0x170(%rbp), %rdx
shrq $0x39, %rdx
orq %rdx, %rcx
addq %rcx, %rax
movq -0x178(%rbp), %rcx
shlq $0xc, %rcx
movq -0x178(%rbp), %rdx
shrq $0x34, %rdx
orq %rdx, %rcx
addq %rcx, %rax
movq -0x180(%rbp), %rcx
shlq $0x12, %rcx
movq -0x180(%rbp), %rdx
shrq $0x2e, %rdx
orq %rdx, %rcx
addq %rcx, %rax
movq %rax, -0x158(%rbp)
movq -0x158(%rbp), %rdi
movq -0x168(%rbp), %rsi
callq 0x5acd0
movq %rax, -0x158(%rbp)
movq -0x158(%rbp), %rdi
movq -0x170(%rbp), %rsi
callq 0x5acd0
movq %rax, -0x158(%rbp)
movq -0x158(%rbp), %rdi
movq -0x178(%rbp), %rsi
callq 0x5acd0
movq %rax, -0x158(%rbp)
movq -0x158(%rbp), %rdi
movq -0x180(%rbp), %rsi
callq 0x5acd0
movq %rax, -0x158(%rbp)
jmp 0x58314
movabsq $0x27d4eb2f165667c5, %rax # imm = 0x27D4EB2F165667C5
addq -0x138(%rbp), %rax
movq %rax, -0x158(%rbp)
movq -0x130(%rbp), %rax
addq -0x158(%rbp), %rax
movq %rax, -0x158(%rbp)
movq -0x158(%rbp), %rdi
movq -0x148(%rbp), %rsi
movq -0x130(%rbp), %rdx
movl -0x13c(%rbp), %ecx
movl -0x140(%rbp), %r8d
callq 0x5ad30
movq %rax, -0x188(%rbp)
movq -0x188(%rbp), %rax
addq $0x270, %rsp            # imm = 0x270
popq %rbp
retq
nopw (%rax,%rax)