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

    if (XXH_FORCE_ALIGN_CHECK) {
        if ((((size_t)input) & 3) == 0) {   /* Input is 4-bytes aligned, leverage the speed benefit */
            if ((endian_detected==XXH_littleEndian) || XXH_FORCE_NATIVE_FORMAT)
                return XXH32_endian_align(input, len, seed, XXH_littleEndian, XXH_aligned);
            else
                return XXH32_endian_align(input, len, seed, XXH_bigEndian, XXH_aligned);
    }   }

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

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x1e0, %rsp            # imm = 0x1E0
movq %rdi, -0x170(%rbp)
movq %rsi, -0x178(%rbp)
movl %edx, -0x17c(%rbp)
callq 0x55f40
movl %eax, -0x180(%rbp)
cmpl $0x1, -0x180(%rbp)
jne 0x55abc
movq -0x170(%rbp), %rdx
movq -0x178(%rbp), %rcx
movl -0x17c(%rbp), %eax
movq %rdx, -0xc8(%rbp)
movq %rcx, -0xd0(%rbp)
movl %eax, -0xd4(%rbp)
movl $0x1, -0xd8(%rbp)
movl $0x1, -0xdc(%rbp)
movq -0xc8(%rbp), %rax
movq %rax, -0xe8(%rbp)
movq -0xe8(%rbp), %rax
addq -0xd0(%rbp), %rax
movq %rax, -0xf0(%rbp)
cmpq $0x10, -0xd0(%rbp)
jb 0x55a63
movq -0xf0(%rbp), %rax
addq $-0xf, %rax
movq %rax, -0x100(%rbp)
movl -0xd4(%rbp), %eax
addl $0x9e3779b1, %eax       # imm = 0x9E3779B1
addl $0x85ebca77, %eax       # imm = 0x85EBCA77
movl %eax, -0x104(%rbp)
movl -0xd4(%rbp), %eax
addl $0x85ebca77, %eax       # imm = 0x85EBCA77
movl %eax, -0x108(%rbp)
movl -0xd4(%rbp), %eax
movl %eax, -0x10c(%rbp)
movl -0xd4(%rbp), %eax
subl $0x9e3779b1, %eax       # imm = 0x9E3779B1
movl %eax, -0x110(%rbp)
movl -0x104(%rbp), %eax
movl %eax, -0x184(%rbp)
movq -0xe8(%rbp), %rdx
movl -0xd8(%rbp), %ecx
movl -0xdc(%rbp), %eax
movq %rdx, -0x70(%rbp)
movl %ecx, -0x74(%rbp)
movl %eax, -0x78(%rbp)
cmpl $0x1, -0x78(%rbp)
jne 0x55701
cmpl $0x1, -0x74(%rbp)
jne 0x556e0
movq -0x70(%rbp), %rdi
callq 0x5abc0
movl %eax, -0x188(%rbp)
jmp 0x556f6
movq -0x70(%rbp), %rdi
callq 0x5abc0
movl %eax, %edi
callq 0x57750
movl %eax, -0x188(%rbp)
movl -0x188(%rbp), %eax
movl %eax, -0x64(%rbp)
jmp 0x5572f
cmpl $0x1, -0x74(%rbp)
jne 0x55715
movq -0x70(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x18c(%rbp)
jmp 0x55726
movq -0x70(%rbp), %rax
movl (%rax), %edi
callq 0x57750
movl %eax, -0x18c(%rbp)
movl -0x18c(%rbp), %eax
movl %eax, -0x64(%rbp)
movl -0x184(%rbp), %edi
movl -0x64(%rbp), %esi
callq 0x59e00
movl %eax, -0x104(%rbp)
movq -0xe8(%rbp), %rax
addq $0x4, %rax
movq %rax, -0xe8(%rbp)
movl -0x108(%rbp), %eax
movl %eax, -0x190(%rbp)
movq -0xe8(%rbp), %rdx
movl -0xd8(%rbp), %ecx
movl -0xdc(%rbp), %eax
movq %rdx, -0x88(%rbp)
movl %ecx, -0x8c(%rbp)
movl %eax, -0x90(%rbp)
cmpl $0x1, -0x90(%rbp)
jne 0x557d1
cmpl $0x1, -0x8c(%rbp)
jne 0x557ad
movq -0x88(%rbp), %rdi
callq 0x5abc0
movl %eax, -0x194(%rbp)
jmp 0x557c6
movq -0x88(%rbp), %rdi
callq 0x5abc0
movl %eax, %edi
callq 0x57750
movl %eax, -0x194(%rbp)
movl -0x194(%rbp), %eax
movl %eax, -0x7c(%rbp)
jmp 0x55808
cmpl $0x1, -0x8c(%rbp)
jne 0x557eb
movq -0x88(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x198(%rbp)
jmp 0x557ff
movq -0x88(%rbp), %rax
movl (%rax), %edi
callq 0x57750
movl %eax, -0x198(%rbp)
movl -0x198(%rbp), %eax
movl %eax, -0x7c(%rbp)
movl -0x190(%rbp), %edi
movl -0x7c(%rbp), %esi
callq 0x59e00
movl %eax, -0x108(%rbp)
movq -0xe8(%rbp), %rax
addq $0x4, %rax
movq %rax, -0xe8(%rbp)
movl -0x10c(%rbp), %eax
movl %eax, -0x19c(%rbp)
movq -0xe8(%rbp), %rdx
movl -0xd8(%rbp), %ecx
movl -0xdc(%rbp), %eax
movq %rdx, -0xa0(%rbp)
movl %ecx, -0xa4(%rbp)
movl %eax, -0xa8(%rbp)
cmpl $0x1, -0xa8(%rbp)
jne 0x558ad
cmpl $0x1, -0xa4(%rbp)
jne 0x55886
movq -0xa0(%rbp), %rdi
callq 0x5abc0
movl %eax, -0x1a0(%rbp)
jmp 0x5589f
movq -0xa0(%rbp), %rdi
callq 0x5abc0
movl %eax, %edi
callq 0x57750
movl %eax, -0x1a0(%rbp)
movl -0x1a0(%rbp), %eax
movl %eax, -0x94(%rbp)
jmp 0x558e7
cmpl $0x1, -0xa4(%rbp)
jne 0x558c7
movq -0xa0(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x1a4(%rbp)
jmp 0x558db
movq -0xa0(%rbp), %rax
movl (%rax), %edi
callq 0x57750
movl %eax, -0x1a4(%rbp)
movl -0x1a4(%rbp), %eax
movl %eax, -0x94(%rbp)
movl -0x19c(%rbp), %edi
movl -0x94(%rbp), %esi
callq 0x59e00
movl %eax, -0x10c(%rbp)
movq -0xe8(%rbp), %rax
addq $0x4, %rax
movq %rax, -0xe8(%rbp)
movl -0x110(%rbp), %eax
movl %eax, -0x1a8(%rbp)
movq -0xe8(%rbp), %rdx
movl -0xd8(%rbp), %ecx
movl -0xdc(%rbp), %eax
movq %rdx, -0xb8(%rbp)
movl %ecx, -0xbc(%rbp)
movl %eax, -0xc0(%rbp)
cmpl $0x1, -0xc0(%rbp)
jne 0x5598f
cmpl $0x1, -0xbc(%rbp)
jne 0x55968
movq -0xb8(%rbp), %rdi
callq 0x5abc0
movl %eax, -0x1ac(%rbp)
jmp 0x55981
movq -0xb8(%rbp), %rdi
callq 0x5abc0
movl %eax, %edi
callq 0x57750
movl %eax, -0x1ac(%rbp)
movl -0x1ac(%rbp), %eax
movl %eax, -0xac(%rbp)
jmp 0x559c9
cmpl $0x1, -0xbc(%rbp)
jne 0x559a9
movq -0xb8(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x1b0(%rbp)
jmp 0x559bd
movq -0xb8(%rbp), %rax
movl (%rax), %edi
callq 0x57750
movl %eax, -0x1b0(%rbp)
movl -0x1b0(%rbp), %eax
movl %eax, -0xac(%rbp)
movl -0x1a8(%rbp), %edi
movl -0xac(%rbp), %esi
callq 0x59e00
movl %eax, -0x110(%rbp)
movq -0xe8(%rbp), %rax
addq $0x4, %rax
movq %rax, -0xe8(%rbp)
movq -0xe8(%rbp), %rax
cmpq -0x100(%rbp), %rax
jb 0x5569a
movl -0x104(%rbp), %eax
shll %eax
movl -0x104(%rbp), %ecx
shrl $0x1f, %ecx
orl %ecx, %eax
movl -0x108(%rbp), %ecx
shll $0x7, %ecx
movl -0x108(%rbp), %edx
shrl $0x19, %edx
orl %edx, %ecx
addl %ecx, %eax
movl -0x10c(%rbp), %ecx
shll $0xc, %ecx
movl -0x10c(%rbp), %edx
shrl $0x14, %edx
orl %edx, %ecx
addl %ecx, %eax
movl -0x110(%rbp), %ecx
shll $0x12, %ecx
movl -0x110(%rbp), %edx
shrl $0xe, %edx
orl %edx, %ecx
addl %ecx, %eax
movl %eax, -0xf4(%rbp)
jmp 0x55a74
movl -0xd4(%rbp), %eax
addl $0x165667b1, %eax       # imm = 0x165667B1
movl %eax, -0xf4(%rbp)
movq -0xd0(%rbp), %rax
addl -0xf4(%rbp), %eax
movl %eax, -0xf4(%rbp)
movl -0xf4(%rbp), %edi
movq -0xe8(%rbp), %rsi
movq -0xd0(%rbp), %rdx
andq $0xf, %rdx
movl -0xd8(%rbp), %ecx
movl -0xdc(%rbp), %r8d
callq 0x59e40
movl %eax, -0x164(%rbp)
jmp 0x55f30
movq -0x170(%rbp), %rdx
movq -0x178(%rbp), %rcx
movl -0x17c(%rbp), %eax
movq %rdx, -0x118(%rbp)
movq %rcx, -0x120(%rbp)
movl %eax, -0x124(%rbp)
movl $0x0, -0x128(%rbp)
movl $0x1, -0x12c(%rbp)
movq -0x118(%rbp), %rax
movq %rax, -0x138(%rbp)
movq -0x138(%rbp), %rax
addq -0x120(%rbp), %rax
movq %rax, -0x140(%rbp)
cmpq $0x10, -0x120(%rbp)
jb 0x55edc
movq -0x140(%rbp), %rax
addq $-0xf, %rax
movq %rax, -0x150(%rbp)
movl -0x124(%rbp), %eax
addl $0x9e3779b1, %eax       # imm = 0x9E3779B1
addl $0x85ebca77, %eax       # imm = 0x85EBCA77
movl %eax, -0x154(%rbp)
movl -0x124(%rbp), %eax
addl $0x85ebca77, %eax       # imm = 0x85EBCA77
movl %eax, -0x158(%rbp)
movl -0x124(%rbp), %eax
movl %eax, -0x15c(%rbp)
movl -0x124(%rbp), %eax
subl $0x9e3779b1, %eax       # imm = 0x9E3779B1
movl %eax, -0x160(%rbp)
movl -0x154(%rbp), %eax
movl %eax, -0x1b4(%rbp)
movq -0x138(%rbp), %rdx
movl -0x128(%rbp), %ecx
movl -0x12c(%rbp), %eax
movq %rdx, -0x10(%rbp)
movl %ecx, -0x14(%rbp)
movl %eax, -0x18(%rbp)
cmpl $0x1, -0x18(%rbp)
jne 0x55be6
cmpl $0x1, -0x14(%rbp)
jne 0x55bc5
movq -0x10(%rbp), %rdi
callq 0x5abc0
movl %eax, -0x1b8(%rbp)
jmp 0x55bdb
movq -0x10(%rbp), %rdi
callq 0x5abc0
movl %eax, %edi
callq 0x57750
movl %eax, -0x1b8(%rbp)
movl -0x1b8(%rbp), %eax
movl %eax, -0x4(%rbp)
jmp 0x55c14
cmpl $0x1, -0x14(%rbp)
jne 0x55bfa
movq -0x10(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x1bc(%rbp)
jmp 0x55c0b
movq -0x10(%rbp), %rax
movl (%rax), %edi
callq 0x57750
movl %eax, -0x1bc(%rbp)
movl -0x1bc(%rbp), %eax
movl %eax, -0x4(%rbp)
movl -0x1b4(%rbp), %edi
movl -0x4(%rbp), %esi
callq 0x59e00
movl %eax, -0x154(%rbp)
movq -0x138(%rbp), %rax
addq $0x4, %rax
movq %rax, -0x138(%rbp)
movl -0x158(%rbp), %eax
movl %eax, -0x1c0(%rbp)
movq -0x138(%rbp), %rdx
movl -0x128(%rbp), %ecx
movl -0x12c(%rbp), %eax
movq %rdx, -0x28(%rbp)
movl %ecx, -0x2c(%rbp)
movl %eax, -0x30(%rbp)
cmpl $0x1, -0x30(%rbp)
jne 0x55ca1
cmpl $0x1, -0x2c(%rbp)
jne 0x55c80
movq -0x28(%rbp), %rdi
callq 0x5abc0
movl %eax, -0x1c4(%rbp)
jmp 0x55c96
movq -0x28(%rbp), %rdi
callq 0x5abc0
movl %eax, %edi
callq 0x57750
movl %eax, -0x1c4(%rbp)
movl -0x1c4(%rbp), %eax
movl %eax, -0x1c(%rbp)
jmp 0x55ccf
cmpl $0x1, -0x2c(%rbp)
jne 0x55cb5
movq -0x28(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x1c8(%rbp)
jmp 0x55cc6
movq -0x28(%rbp), %rax
movl (%rax), %edi
callq 0x57750
movl %eax, -0x1c8(%rbp)
movl -0x1c8(%rbp), %eax
movl %eax, -0x1c(%rbp)
movl -0x1c0(%rbp), %edi
movl -0x1c(%rbp), %esi
callq 0x59e00
movl %eax, -0x158(%rbp)
movq -0x138(%rbp), %rax
addq $0x4, %rax
movq %rax, -0x138(%rbp)
movl -0x15c(%rbp), %eax
movl %eax, -0x1cc(%rbp)
movq -0x138(%rbp), %rdx
movl -0x128(%rbp), %ecx
movl -0x12c(%rbp), %eax
movq %rdx, -0x40(%rbp)
movl %ecx, -0x44(%rbp)
movl %eax, -0x48(%rbp)
cmpl $0x1, -0x48(%rbp)
jne 0x55d5c
cmpl $0x1, -0x44(%rbp)
jne 0x55d3b
movq -0x40(%rbp), %rdi
callq 0x5abc0
movl %eax, -0x1d0(%rbp)
jmp 0x55d51
movq -0x40(%rbp), %rdi
callq 0x5abc0
movl %eax, %edi
callq 0x57750
movl %eax, -0x1d0(%rbp)
movl -0x1d0(%rbp), %eax
movl %eax, -0x34(%rbp)
jmp 0x55d8a
cmpl $0x1, -0x44(%rbp)
jne 0x55d70
movq -0x40(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x1d4(%rbp)
jmp 0x55d81
movq -0x40(%rbp), %rax
movl (%rax), %edi
callq 0x57750
movl %eax, -0x1d4(%rbp)
movl -0x1d4(%rbp), %eax
movl %eax, -0x34(%rbp)
movl -0x1cc(%rbp), %edi
movl -0x34(%rbp), %esi
callq 0x59e00
movl %eax, -0x15c(%rbp)
movq -0x138(%rbp), %rax
addq $0x4, %rax
movq %rax, -0x138(%rbp)
movl -0x160(%rbp), %eax
movl %eax, -0x1d8(%rbp)
movq -0x138(%rbp), %rdx
movl -0x128(%rbp), %ecx
movl -0x12c(%rbp), %eax
movq %rdx, -0x58(%rbp)
movl %ecx, -0x5c(%rbp)
movl %eax, -0x60(%rbp)
cmpl $0x1, -0x60(%rbp)
jne 0x55e17
cmpl $0x1, -0x5c(%rbp)
jne 0x55df6
movq -0x58(%rbp), %rdi
callq 0x5abc0
movl %eax, -0x1dc(%rbp)
jmp 0x55e0c
movq -0x58(%rbp), %rdi
callq 0x5abc0
movl %eax, %edi
callq 0x57750
movl %eax, -0x1dc(%rbp)
movl -0x1dc(%rbp), %eax
movl %eax, -0x4c(%rbp)
jmp 0x55e45
cmpl $0x1, -0x5c(%rbp)
jne 0x55e2b
movq -0x58(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x1e0(%rbp)
jmp 0x55e3c
movq -0x58(%rbp), %rax
movl (%rax), %edi
callq 0x57750
movl %eax, -0x1e0(%rbp)
movl -0x1e0(%rbp), %eax
movl %eax, -0x4c(%rbp)
movl -0x1d8(%rbp), %edi
movl -0x4c(%rbp), %esi
callq 0x59e00
movl %eax, -0x160(%rbp)
movq -0x138(%rbp), %rax
addq $0x4, %rax
movq %rax, -0x138(%rbp)
movq -0x138(%rbp), %rax
cmpq -0x150(%rbp), %rax
jb 0x55b7f
movl -0x154(%rbp), %eax
shll %eax
movl -0x154(%rbp), %ecx
shrl $0x1f, %ecx
orl %ecx, %eax
movl -0x158(%rbp), %ecx
shll $0x7, %ecx
movl -0x158(%rbp), %edx
shrl $0x19, %edx
orl %edx, %ecx
addl %ecx, %eax
movl -0x15c(%rbp), %ecx
shll $0xc, %ecx
movl -0x15c(%rbp), %edx
shrl $0x14, %edx
orl %edx, %ecx
addl %ecx, %eax
movl -0x160(%rbp), %ecx
shll $0x12, %ecx
movl -0x160(%rbp), %edx
shrl $0xe, %edx
orl %edx, %ecx
addl %ecx, %eax
movl %eax, -0x144(%rbp)
jmp 0x55eed
movl -0x124(%rbp), %eax
addl $0x165667b1, %eax       # imm = 0x165667B1
movl %eax, -0x144(%rbp)
movq -0x120(%rbp), %rax
addl -0x144(%rbp), %eax
movl %eax, -0x144(%rbp)
movl -0x144(%rbp), %edi
movq -0x138(%rbp), %rsi
movq -0x120(%rbp), %rdx
andq $0xf, %rdx
movl -0x128(%rbp), %ecx
movl -0x12c(%rbp), %r8d
callq 0x59e40
movl %eax, -0x164(%rbp)
movl -0x164(%rbp), %eax
addq $0x1e0, %rsp            # imm = 0x1E0
popq %rbp
retq
nop