// File: /workspace/github_c_makefile_star2_O0/zuocheng-liu[P]ae-memcached/src/assoc.c
// Function: hash
ub4 hash( k, length, initval)
     register ub1 *k;        /* the key */
     register ub4  length;   /* the length of the key */
     register ub4  initval;  /* the previous hash, or an arbitrary value */
{
    register ub4 a,b,c,len;

    /* Set up the internal state */
    len = length;
    a = b = 0x9e3779b9;  /* the golden ratio; an arbitrary value */
    c = initval;         /* the previous hash value */

    /*---------------------------------------- handle most of the key */
    while (len >= 12)
        {
            a += (k[0] +((ub4)k[1]<<8) +((ub4)k[2]<<16) +((ub4)k[3]<<24));
            b += (k[4] +((ub4)k[5]<<8) +((ub4)k[6]<<16) +((ub4)k[7]<<24));
            c += (k[8] +((ub4)k[9]<<8) +((ub4)k[10]<<16)+((ub4)k[11]<<24));
            mix(a,b,c);
            k += 12; len -= 12;
        }

    /*------------------------------------- handle the last 11 bytes */
    c += length;
    switch(len)              /* all the case statements fall through */
        {
        case 11: c+=((ub4)k[10]<<24);
        case 10: c+=((ub4)k[9]<<16);
        case 9 : c+=((ub4)k[8]<<8);
            /* the first byte of c is reserved for the length */
        case 8 : b+=((ub4)k[7]<<24);
        case 7 : b+=((ub4)k[6]<<16);
        case 6 : b+=((ub4)k[5]<<8);
        case 5 : b+=k[4];
        case 4 : a+=((ub4)k[3]<<24);
        case 3 : a+=((ub4)k[2]<<16);
        case 2 : a+=((ub4)k[1]<<8);
        case 1 : a+=k[0];
            /* case 0: nothing left to add */
        }
    mix(a,b,c);
    /*-------------------------------------------- report the result */
    return c;
}

// Assembly:
movq %rdi, -0x8(%rsp)
movq %rsi, -0x10(%rsp)
movq %rdx, -0x18(%rsp)
movq -0x10(%rsp), %rax
movq %rax, -0x38(%rsp)
movl $0x9e3779b9, %eax       # imm = 0x9E3779B9
movq %rax, -0x28(%rsp)
movl $0x9e3779b9, %eax       # imm = 0x9E3779B9
movq %rax, -0x20(%rsp)
movq -0x18(%rsp), %rax
movq %rax, -0x30(%rsp)
cmpq $0xc, -0x38(%rsp)
jb 0x3bfb
movq -0x8(%rsp), %rax
movzbl (%rax), %eax
movq -0x8(%rsp), %rcx
movzbl 0x1(%rcx), %ecx
shlq $0x8, %rcx
addq %rcx, %rax
movq -0x8(%rsp), %rcx
movzbl 0x2(%rcx), %ecx
shlq $0x10, %rcx
addq %rcx, %rax
movq -0x8(%rsp), %rcx
movzbl 0x3(%rcx), %ecx
shlq $0x18, %rcx
addq %rcx, %rax
addq -0x20(%rsp), %rax
movq %rax, -0x20(%rsp)
movq -0x8(%rsp), %rax
movzbl 0x4(%rax), %eax
movq -0x8(%rsp), %rcx
movzbl 0x5(%rcx), %ecx
shlq $0x8, %rcx
addq %rcx, %rax
movq -0x8(%rsp), %rcx
movzbl 0x6(%rcx), %ecx
shlq $0x10, %rcx
addq %rcx, %rax
movq -0x8(%rsp), %rcx
movzbl 0x7(%rcx), %ecx
shlq $0x18, %rcx
addq %rcx, %rax
addq -0x28(%rsp), %rax
movq %rax, -0x28(%rsp)
movq -0x8(%rsp), %rax
movzbl 0x8(%rax), %eax
movq -0x8(%rsp), %rcx
movzbl 0x9(%rcx), %ecx
shlq $0x8, %rcx
addq %rcx, %rax
movq -0x8(%rsp), %rcx
movzbl 0xa(%rcx), %ecx
shlq $0x10, %rcx
addq %rcx, %rax
movq -0x8(%rsp), %rcx
movzbl 0xb(%rcx), %ecx
shlq $0x18, %rcx
addq %rcx, %rax
addq -0x30(%rsp), %rax
movq %rax, -0x30(%rsp)
movq -0x28(%rsp), %rcx
movq -0x20(%rsp), %rax
subq %rcx, %rax
movq %rax, -0x20(%rsp)
movq -0x30(%rsp), %rcx
movq -0x20(%rsp), %rax
subq %rcx, %rax
movq %rax, -0x20(%rsp)
movq -0x30(%rsp), %rax
shrq $0xd, %rax
xorq -0x20(%rsp), %rax
movq %rax, -0x20(%rsp)
movq -0x30(%rsp), %rcx
movq -0x28(%rsp), %rax
subq %rcx, %rax
movq %rax, -0x28(%rsp)
movq -0x20(%rsp), %rcx
movq -0x28(%rsp), %rax
subq %rcx, %rax
movq %rax, -0x28(%rsp)
movq -0x20(%rsp), %rax
shlq $0x8, %rax
xorq -0x28(%rsp), %rax
movq %rax, -0x28(%rsp)
movq -0x20(%rsp), %rcx
movq -0x30(%rsp), %rax
subq %rcx, %rax
movq %rax, -0x30(%rsp)
movq -0x28(%rsp), %rcx
movq -0x30(%rsp), %rax
subq %rcx, %rax
movq %rax, -0x30(%rsp)
movq -0x28(%rsp), %rax
shrq $0xd, %rax
xorq -0x30(%rsp), %rax
movq %rax, -0x30(%rsp)
movq -0x28(%rsp), %rcx
movq -0x20(%rsp), %rax
subq %rcx, %rax
movq %rax, -0x20(%rsp)
movq -0x30(%rsp), %rcx
movq -0x20(%rsp), %rax
subq %rcx, %rax
movq %rax, -0x20(%rsp)
movq -0x30(%rsp), %rax
shrq $0xc, %rax
xorq -0x20(%rsp), %rax
movq %rax, -0x20(%rsp)
movq -0x30(%rsp), %rcx
movq -0x28(%rsp), %rax
subq %rcx, %rax
movq %rax, -0x28(%rsp)
movq -0x20(%rsp), %rcx
movq -0x28(%rsp), %rax
subq %rcx, %rax
movq %rax, -0x28(%rsp)
movq -0x20(%rsp), %rax
shlq $0x10, %rax
xorq -0x28(%rsp), %rax
movq %rax, -0x28(%rsp)
movq -0x20(%rsp), %rcx
movq -0x30(%rsp), %rax
subq %rcx, %rax
movq %rax, -0x30(%rsp)
movq -0x28(%rsp), %rcx
movq -0x30(%rsp), %rax
subq %rcx, %rax
movq %rax, -0x30(%rsp)
movq -0x28(%rsp), %rax
shrq $0x5, %rax
xorq -0x30(%rsp), %rax
movq %rax, -0x30(%rsp)
movq -0x28(%rsp), %rcx
movq -0x20(%rsp), %rax
subq %rcx, %rax
movq %rax, -0x20(%rsp)
movq -0x30(%rsp), %rcx
movq -0x20(%rsp), %rax
subq %rcx, %rax
movq %rax, -0x20(%rsp)
movq -0x30(%rsp), %rax
shrq $0x3, %rax
xorq -0x20(%rsp), %rax
movq %rax, -0x20(%rsp)
movq -0x30(%rsp), %rcx
movq -0x28(%rsp), %rax
subq %rcx, %rax
movq %rax, -0x28(%rsp)
movq -0x20(%rsp), %rcx
movq -0x28(%rsp), %rax
subq %rcx, %rax
movq %rax, -0x28(%rsp)
movq -0x20(%rsp), %rax
shlq $0xa, %rax
xorq -0x28(%rsp), %rax
movq %rax, -0x28(%rsp)
movq -0x20(%rsp), %rcx
movq -0x30(%rsp), %rax
subq %rcx, %rax
movq %rax, -0x30(%rsp)
movq -0x28(%rsp), %rcx
movq -0x30(%rsp), %rax
subq %rcx, %rax
movq %rax, -0x30(%rsp)
movq -0x28(%rsp), %rax
shrq $0xf, %rax
xorq -0x30(%rsp), %rax
movq %rax, -0x30(%rsp)
movq -0x8(%rsp), %rax
addq $0xc, %rax
movq %rax, -0x8(%rsp)
movq -0x38(%rsp), %rax
subq $0xc, %rax
movq %rax, -0x38(%rsp)
jmp 0x3917
movq -0x10(%rsp), %rcx
movq -0x30(%rsp), %rax
addq %rcx, %rax
movq %rax, -0x30(%rsp)
movq -0x38(%rsp), %rax
decq %rax
movq %rax, -0x40(%rsp)
subq $0xa, %rax
ja 0x3d2d
movq -0x40(%rsp), %rax
leaq 0x83dc(%rip), %rcx      # 0xc00c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x8(%rsp), %rax
movzbl 0xa(%rax), %eax
shlq $0x18, %rax
addq -0x30(%rsp), %rax
movq %rax, -0x30(%rsp)
movq -0x8(%rsp), %rax
movzbl 0x9(%rax), %eax
shlq $0x10, %rax
addq -0x30(%rsp), %rax
movq %rax, -0x30(%rsp)
movq -0x8(%rsp), %rax
movzbl 0x8(%rax), %eax
shlq $0x8, %rax
addq -0x30(%rsp), %rax
movq %rax, -0x30(%rsp)
movq -0x8(%rsp), %rax
movzbl 0x7(%rax), %eax
shlq $0x18, %rax
addq -0x28(%rsp), %rax
movq %rax, -0x28(%rsp)
movq -0x8(%rsp), %rax
movzbl 0x6(%rax), %eax
shlq $0x10, %rax
addq -0x28(%rsp), %rax
movq %rax, -0x28(%rsp)
movq -0x8(%rsp), %rax
movzbl 0x5(%rax), %eax
shlq $0x8, %rax
addq -0x28(%rsp), %rax
movq %rax, -0x28(%rsp)
movq -0x8(%rsp), %rax
movzbl 0x4(%rax), %eax
addq -0x28(%rsp), %rax
movq %rax, -0x28(%rsp)
movq -0x8(%rsp), %rax
movzbl 0x3(%rax), %eax
shlq $0x18, %rax
addq -0x20(%rsp), %rax
movq %rax, -0x20(%rsp)
movq -0x8(%rsp), %rax
movzbl 0x2(%rax), %eax
shlq $0x10, %rax
addq -0x20(%rsp), %rax
movq %rax, -0x20(%rsp)
movq -0x8(%rsp), %rax
movzbl 0x1(%rax), %eax
shlq $0x8, %rax
addq -0x20(%rsp), %rax
movq %rax, -0x20(%rsp)
movq -0x8(%rsp), %rax
movzbl (%rax), %eax
addq -0x20(%rsp), %rax
movq %rax, -0x20(%rsp)
movq -0x28(%rsp), %rcx
movq -0x20(%rsp), %rax
subq %rcx, %rax
movq %rax, -0x20(%rsp)
movq -0x30(%rsp), %rcx
movq -0x20(%rsp), %rax
subq %rcx, %rax
movq %rax, -0x20(%rsp)
movq -0x30(%rsp), %rax
shrq $0xd, %rax
xorq -0x20(%rsp), %rax
movq %rax, -0x20(%rsp)
movq -0x30(%rsp), %rcx
movq -0x28(%rsp), %rax
subq %rcx, %rax
movq %rax, -0x28(%rsp)
movq -0x20(%rsp), %rcx
movq -0x28(%rsp), %rax
subq %rcx, %rax
movq %rax, -0x28(%rsp)
movq -0x20(%rsp), %rax
shlq $0x8, %rax
xorq -0x28(%rsp), %rax
movq %rax, -0x28(%rsp)
movq -0x20(%rsp), %rcx
movq -0x30(%rsp), %rax
subq %rcx, %rax
movq %rax, -0x30(%rsp)
movq -0x28(%rsp), %rcx
movq -0x30(%rsp), %rax
subq %rcx, %rax
movq %rax, -0x30(%rsp)
movq -0x28(%rsp), %rax
shrq $0xd, %rax
xorq -0x30(%rsp), %rax
movq %rax, -0x30(%rsp)
movq -0x28(%rsp), %rcx
movq -0x20(%rsp), %rax
subq %rcx, %rax
movq %rax, -0x20(%rsp)
movq -0x30(%rsp), %rcx
movq -0x20(%rsp), %rax
subq %rcx, %rax
movq %rax, -0x20(%rsp)
movq -0x30(%rsp), %rax
shrq $0xc, %rax
xorq -0x20(%rsp), %rax
movq %rax, -0x20(%rsp)
movq -0x30(%rsp), %rcx
movq -0x28(%rsp), %rax
subq %rcx, %rax
movq %rax, -0x28(%rsp)
movq -0x20(%rsp), %rcx
movq -0x28(%rsp), %rax
subq %rcx, %rax
movq %rax, -0x28(%rsp)
movq -0x20(%rsp), %rax
shlq $0x10, %rax
xorq -0x28(%rsp), %rax
movq %rax, -0x28(%rsp)
movq -0x20(%rsp), %rcx
movq -0x30(%rsp), %rax
subq %rcx, %rax
movq %rax, -0x30(%rsp)
movq -0x28(%rsp), %rcx
movq -0x30(%rsp), %rax
subq %rcx, %rax
movq %rax, -0x30(%rsp)
movq -0x28(%rsp), %rax
shrq $0x5, %rax
xorq -0x30(%rsp), %rax
movq %rax, -0x30(%rsp)
movq -0x28(%rsp), %rcx
movq -0x20(%rsp), %rax
subq %rcx, %rax
movq %rax, -0x20(%rsp)
movq -0x30(%rsp), %rcx
movq -0x20(%rsp), %rax
subq %rcx, %rax
movq %rax, -0x20(%rsp)
movq -0x30(%rsp), %rax
shrq $0x3, %rax
xorq -0x20(%rsp), %rax
movq %rax, -0x20(%rsp)
movq -0x30(%rsp), %rcx
movq -0x28(%rsp), %rax
subq %rcx, %rax
movq %rax, -0x28(%rsp)
movq -0x20(%rsp), %rcx
movq -0x28(%rsp), %rax
subq %rcx, %rax
movq %rax, -0x28(%rsp)
movq -0x20(%rsp), %rax
shlq $0xa, %rax
xorq -0x28(%rsp), %rax
movq %rax, -0x28(%rsp)
movq -0x20(%rsp), %rcx
movq -0x30(%rsp), %rax
subq %rcx, %rax
movq %rax, -0x30(%rsp)
movq -0x28(%rsp), %rcx
movq -0x30(%rsp), %rax
subq %rcx, %rax
movq %rax, -0x30(%rsp)
movq -0x28(%rsp), %rax
shrq $0xf, %rax
xorq -0x30(%rsp), %rax
movq %rax, -0x30(%rsp)
movq -0x30(%rsp), %rax
retq
nopw %cs:(%rax,%rax)