// File: /workspace/github_c_makefile_star2_O0/c-zhou[P]oatk/syncmer.c
// Function: MurmurHash64A
uint64_t MurmurHash64A(const void *key, uint32_t len, uint64_t seed)
{
    const uint64_t m = 0xc6a4a7935bd1e995LLU;
    const int r = 47;

    uint64_t h = seed ^ (len * m);

    const uint64_t *data = (const uint64_t *)key;
    const uint64_t *end = (len >> 3) + data;

    while(data != end) {
        uint64_t k = *data++;

        k *= m;
        k ^= k >> r;
        k *= m;

        h ^= k;
        h *= m;
    }

    const unsigned char *data2 = (const unsigned char *) data;

    switch(len & 7) {
        case 7: h ^= (uint64_t) (data2[6]) << 48;
        case 6: h ^= (uint64_t) (data2[5]) << 40;
        case 5: h ^= (uint64_t) (data2[4]) << 32;
        case 4: h ^= (uint64_t) (data2[3]) << 24;
        case 3: h ^= (uint64_t) (data2[2]) << 16;
        case 2: h ^= (uint64_t) (data2[1]) << 8;
        case 1: h ^= (uint64_t) (data2[0]);
                h *= m;
    };

    h ^= h >> r;
    h *= m;
    h ^= h >> r;

    return h;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
movq %rdi, -0x8(%rbp)
movl %esi, -0xc(%rbp)
movq %rdx, -0x18(%rbp)
movabsq $-0x395b586ca42e166b, %rax # imm = 0xC6A4A7935BD1E995
movq %rax, -0x20(%rbp)
movl $0x2f, -0x24(%rbp)
movq -0x18(%rbp), %rax
movl -0xc(%rbp), %ecx
movabsq $-0x395b586ca42e166b, %rdx # imm = 0xC6A4A7935BD1E995
imulq %rdx, %rcx
xorq %rcx, %rax
movq %rax, -0x30(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x38(%rbp)
movl -0xc(%rbp), %ecx
shrl $0x3, %ecx
movq -0x38(%rbp), %rax
movl %ecx, %ecx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, -0x40(%rbp)
movq -0x38(%rbp), %rax
cmpq -0x40(%rbp), %rax
je 0x11916
movq -0x38(%rbp), %rax
movq %rax, %rcx
addq $0x8, %rcx
movq %rcx, -0x38(%rbp)
movq (%rax), %rax
movq %rax, -0x48(%rbp)
movabsq $-0x395b586ca42e166b, %rax # imm = 0xC6A4A7935BD1E995
imulq -0x48(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x48(%rbp), %rax
shrq $0x2f, %rax
xorq -0x48(%rbp), %rax
movq %rax, -0x48(%rbp)
movabsq $-0x395b586ca42e166b, %rax # imm = 0xC6A4A7935BD1E995
imulq -0x48(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x48(%rbp), %rax
xorq -0x30(%rbp), %rax
movq %rax, -0x30(%rbp)
movabsq $-0x395b586ca42e166b, %rax # imm = 0xC6A4A7935BD1E995
imulq -0x30(%rbp), %rax
movq %rax, -0x30(%rbp)
jmp 0x1189f
movq -0x38(%rbp), %rax
movq %rax, -0x50(%rbp)
movl -0xc(%rbp), %eax
andl $0x7, %eax
decl %eax
movl %eax, %ecx
movq %rcx, -0x58(%rbp)
subl $0x6, %eax
ja 0x119e3
movq -0x58(%rbp), %rax
leaq 0x1c440(%rip), %rcx     # 0x2dd80
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x50(%rbp), %rax
movzbl 0x6(%rax), %eax
shlq $0x30, %rax
xorq -0x30(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x50(%rbp), %rax
movzbl 0x5(%rax), %eax
shlq $0x28, %rax
xorq -0x30(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x50(%rbp), %rax
movzbl 0x4(%rax), %eax
shlq $0x20, %rax
xorq -0x30(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x50(%rbp), %rax
movzbl 0x3(%rax), %eax
shlq $0x18, %rax
xorq -0x30(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x50(%rbp), %rax
movzbl 0x2(%rax), %eax
shlq $0x10, %rax
xorq -0x30(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x50(%rbp), %rax
movzbl 0x1(%rax), %eax
shlq $0x8, %rax
xorq -0x30(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x50(%rbp), %rax
movzbl (%rax), %eax
xorq -0x30(%rbp), %rax
movq %rax, -0x30(%rbp)
movabsq $-0x395b586ca42e166b, %rax # imm = 0xC6A4A7935BD1E995
imulq -0x30(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rax
shrq $0x2f, %rax
xorq -0x30(%rbp), %rax
movq %rax, -0x30(%rbp)
movabsq $-0x395b586ca42e166b, %rax # imm = 0xC6A4A7935BD1E995
imulq -0x30(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rax
shrq $0x2f, %rax
xorq -0x30(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rax
popq %rbp
retq
nopl (%rax)