// File: /workspace/github_c_makefile_star2_O0/stetre[P]moonnuklear/src/./nuklear/nuklear.h
// Function: nk_murmur_hash
NK_API nk_hash
nk_murmur_hash(const void * key, int len, nk_hash seed)
{
    /* 32-Bit MurmurHash3: https://code.google.com/p/smhasher/wiki/MurmurHash3*/
    #define NK_ROTL(x,r) ((x) << (r) | ((x) >> (32 - r)))

    nk_uint h1 = seed;
    nk_uint k1;
    const nk_byte *data = (const nk_byte*)key;
    const nk_byte *keyptr = data;
    nk_byte *k1ptr;
    const int bsize = sizeof(k1);
    const int nblocks = len/4;

    const nk_uint c1 = 0xcc9e2d51;
    const nk_uint c2 = 0x1b873593;
    const nk_byte *tail;
    int i;

    /* body */
    if (!key) return 0;
    for (i = 0; i < nblocks; ++i, keyptr += bsize) {
        k1ptr = (nk_byte*)&k1;
        k1ptr[0] = keyptr[0];
        k1ptr[1] = keyptr[1];
        k1ptr[2] = keyptr[2];
        k1ptr[3] = keyptr[3];

        k1 *= c1;
        k1 = NK_ROTL(k1,15);
        k1 *= c2;

        h1 ^= k1;
        h1 = NK_ROTL(h1,13);
        h1 = h1*5+0xe6546b64;
    }

    /* tail */
    tail = (const nk_byte*)(data + nblocks*4);
    k1 = 0;
    switch (len & 3) {
        case 3: k1 ^= (nk_uint)(tail[2] << 16); /* fallthrough */
        case 2: k1 ^= (nk_uint)(tail[1] << 8u); /* fallthrough */
        case 1: k1 ^= tail[0];
            k1 *= c1;
            k1 = NK_ROTL(k1,15);
            k1 *= c2;
            h1 ^= k1;
            break;
        default: break;
    }

    /* finalization */
    h1 ^= (nk_uint)len;
    /* fmix32 */
    h1 ^= h1 >> 16;
    h1 *= 0x85ebca6b;
    h1 ^= h1 >> 13;
    h1 *= 0xc2b2ae35;
    h1 ^= h1 >> 16;

    #undef NK_ROTL
    return h1;
}

// Assembly:
movq %rdi, -0x10(%rsp)
movl %esi, -0x14(%rsp)
movl %edx, -0x18(%rsp)
movl -0x18(%rsp), %eax
movl %eax, -0x1c(%rsp)
movq -0x10(%rsp), %rax
movq %rax, -0x28(%rsp)
movq -0x28(%rsp), %rax
movq %rax, -0x30(%rsp)
movl $0x4, -0x3c(%rsp)
movl -0x14(%rsp), %eax
movl $0x4, %ecx
cltd
idivl %ecx
movl %eax, -0x40(%rsp)
movl $0xcc9e2d51, -0x44(%rsp) # imm = 0xCC9E2D51
movl $0x1b873593, -0x48(%rsp) # imm = 0x1B873593
cmpq $0x0, -0x10(%rsp)
jne 0x2c466
movl $0x0, -0x4(%rsp)
jmp 0x2c650
movl $0x0, -0x54(%rsp)
movl -0x54(%rsp), %eax
cmpl -0x40(%rsp), %eax
jge 0x2c53c
leaq -0x20(%rsp), %rax
movq %rax, -0x38(%rsp)
movq -0x30(%rsp), %rax
movb (%rax), %cl
movq -0x38(%rsp), %rax
movb %cl, (%rax)
movq -0x30(%rsp), %rax
movb 0x1(%rax), %cl
movq -0x38(%rsp), %rax
movb %cl, 0x1(%rax)
movq -0x30(%rsp), %rax
movb 0x2(%rax), %cl
movq -0x38(%rsp), %rax
movb %cl, 0x2(%rax)
movq -0x30(%rsp), %rax
movb 0x3(%rax), %cl
movq -0x38(%rsp), %rax
movb %cl, 0x3(%rax)
imull $0xcc9e2d51, -0x20(%rsp), %eax # imm = 0xCC9E2D51
movl %eax, -0x20(%rsp)
movl -0x20(%rsp), %eax
shll $0xf, %eax
movl -0x20(%rsp), %ecx
shrl $0x11, %ecx
orl %ecx, %eax
movl %eax, -0x20(%rsp)
imull $0x1b873593, -0x20(%rsp), %eax # imm = 0x1B873593
movl %eax, -0x20(%rsp)
movl -0x20(%rsp), %eax
xorl -0x1c(%rsp), %eax
movl %eax, -0x1c(%rsp)
movl -0x1c(%rsp), %eax
shll $0xd, %eax
movl -0x1c(%rsp), %ecx
shrl $0x13, %ecx
orl %ecx, %eax
movl %eax, -0x1c(%rsp)
imull $0x5, -0x1c(%rsp), %eax
addl $0xe6546b64, %eax       # imm = 0xE6546B64
movl %eax, -0x1c(%rsp)
movl -0x54(%rsp), %eax
addl $0x1, %eax
movl %eax, -0x54(%rsp)
movq -0x30(%rsp), %rax
addq $0x4, %rax
movq %rax, -0x30(%rsp)
jmp 0x2c46e
movq -0x28(%rsp), %rax
movl -0x40(%rsp), %ecx
shll $0x2, %ecx
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x50(%rsp)
movl $0x0, -0x20(%rsp)
movl -0x14(%rsp), %eax
andl $0x3, %eax
movl %eax, -0x58(%rsp)
subl $0x1, %eax
je 0x2c5ab
jmp 0x2c56d
movl -0x58(%rsp), %eax
subl $0x2, %eax
je 0x2c597
jmp 0x2c578
movl -0x58(%rsp), %eax
subl $0x3, %eax
jne 0x2c5f5
jmp 0x2c583
movq -0x50(%rsp), %rax
movzbl 0x2(%rax), %eax
shll $0x10, %eax
xorl -0x20(%rsp), %eax
movl %eax, -0x20(%rsp)
movq -0x50(%rsp), %rax
movzbl 0x1(%rax), %eax
shll $0x8, %eax
xorl -0x20(%rsp), %eax
movl %eax, -0x20(%rsp)
movq -0x50(%rsp), %rax
movzbl (%rax), %eax
xorl -0x20(%rsp), %eax
movl %eax, -0x20(%rsp)
imull $0xcc9e2d51, -0x20(%rsp), %eax # imm = 0xCC9E2D51
movl %eax, -0x20(%rsp)
movl -0x20(%rsp), %eax
shll $0xf, %eax
movl -0x20(%rsp), %ecx
shrl $0x11, %ecx
orl %ecx, %eax
movl %eax, -0x20(%rsp)
imull $0x1b873593, -0x20(%rsp), %eax # imm = 0x1B873593
movl %eax, -0x20(%rsp)
movl -0x20(%rsp), %eax
xorl -0x1c(%rsp), %eax
movl %eax, -0x1c(%rsp)
jmp 0x2c5f7
jmp 0x2c5f7
movl -0x14(%rsp), %eax
xorl -0x1c(%rsp), %eax
movl %eax, -0x1c(%rsp)
movl -0x1c(%rsp), %eax
shrl $0x10, %eax
xorl -0x1c(%rsp), %eax
movl %eax, -0x1c(%rsp)
imull $0x85ebca6b, -0x1c(%rsp), %eax # imm = 0x85EBCA6B
movl %eax, -0x1c(%rsp)
movl -0x1c(%rsp), %eax
shrl $0xd, %eax
xorl -0x1c(%rsp), %eax
movl %eax, -0x1c(%rsp)
imull $0xc2b2ae35, -0x1c(%rsp), %eax # imm = 0xC2B2AE35
movl %eax, -0x1c(%rsp)
movl -0x1c(%rsp), %eax
shrl $0x10, %eax
xorl -0x1c(%rsp), %eax
movl %eax, -0x1c(%rsp)
movl -0x1c(%rsp), %eax
movl %eax, -0x4(%rsp)
movl -0x4(%rsp), %eax
retq
nopw %cs:(%rax,%rax)