// File: /workspace/github_cpp_makefile_star2_O1/attractivechaos[P]udb2/stb/./stb.h
// Function: stb_hash_fast
unsigned int stb_hash_fast(void *p, int len)
{
   unsigned char *q = (unsigned char *) p;
   unsigned int hash = len;

   if (len <= 0 || q == NULL) return 0;

   /* Main loop */
   if (((int) q & 1) == 0) {
      for (;len > 3; len -= 4) {
         unsigned int val;
         hash +=  stb__get16(q);
         val   = (stb__get16(q+2) << 11);
         hash  = (hash << 16) ^ hash ^ val;
         q    += 4;
         hash += hash >> 11;
      }
   } else {
      for (;len > 3; len -= 4) {
         unsigned int val;
         hash +=  stb__get16_slow(q);
         val   = (stb__get16_slow(q+2) << 11);
         hash  = (hash << 16) ^ hash ^ val;
         q    += 4;
         hash += hash >> 11;
      }
   }

   /* Handle end cases */
   switch (len) {
      case 3: hash += stb__get16_slow(q);
              hash ^= hash << 16;
              hash ^= q[2] << 18;
              hash += hash >> 11;
              break;
      case 2: hash += stb__get16_slow(q);
              hash ^= hash << 11;
              hash += hash >> 17;
              break;
      case 1: hash += q[0];
              hash ^= hash << 10;
              hash += hash >> 1;
              break;
      case 0: break;
   }

   /* Force "avalanching" of final 127 bits */
   hash ^= hash << 3;
   hash += hash >> 5;
   hash ^= hash << 4;
   hash += hash >> 17;
   hash ^= hash << 25;
   hash += hash >> 6;

   return hash;
}

// Assembly:
testl %esi, %esi
setle %cl
testq %rdi, %rdi
sete %dl
xorl %eax, %eax
orb %cl, %dl
jne 0x5b2a
testb $0x1, %dil
jne 0x5a6e
cmpl $0x4, %esi
jl 0x5aaa
movl %esi, %eax
movzwl (%rdi), %ecx
addl %eax, %ecx
movzbl 0x2(%rdi), %eax
movzbl 0x3(%rdi), %edx
shll $0x13, %edx
shll $0xb, %eax
orl %edx, %eax
movl %ecx, %edx
shll $0x10, %edx
xorl %eax, %edx
xorl %ecx, %edx
addq $0x4, %rdi
movl %edx, %eax
shrl $0xb, %eax
addl %edx, %eax
leal -0x4(%rsi), %ecx
cmpl $0x7, %esi
movl %ecx, %esi
jg 0x5a39
jmp 0x5aae
cmpl $0x4, %esi
jl 0x5aaa
movl %esi, %eax
movzwl (%rdi), %ecx
addl %eax, %ecx
movzbl 0x2(%rdi), %eax
movzbl 0x3(%rdi), %edx
shll $0x13, %edx
shll $0xb, %eax
orl %edx, %eax
movl %ecx, %edx
shll $0x10, %edx
xorl %eax, %edx
xorl %ecx, %edx
addq $0x4, %rdi
movl %edx, %eax
shrl $0xb, %eax
addl %edx, %eax
leal -0x4(%rsi), %ecx
cmpl $0x7, %esi
movl %ecx, %esi
jg 0x5a75
jmp 0x5aae
movl %esi, %eax
movl %esi, %ecx
cmpl $0x1, %ecx
je 0x5aec
cmpl $0x2, %ecx
je 0x5ad7
cmpl $0x3, %ecx
jne 0x5afe
movzwl (%rdi), %ecx
addl %eax, %ecx
movzbl 0x2(%rdi), %eax
shll $0x12, %eax
xorl %ecx, %eax
shll $0x10, %ecx
xorl %eax, %ecx
movl %ecx, %eax
shrl $0xb, %eax
jmp 0x5afc
movzwl (%rdi), %ecx
addl %eax, %ecx
movl %ecx, %edx
shll $0xb, %edx
xorl %ecx, %edx
movl %edx, %eax
shrl $0x11, %eax
addl %edx, %eax
jmp 0x5afe
movzbl (%rdi), %ecx
addl %ecx, %eax
movl %eax, %ecx
shll $0xa, %ecx
xorl %eax, %ecx
movl %ecx, %eax
shrl %eax
addl %ecx, %eax
leal (,%rax,8), %ecx
xorl %eax, %ecx
movl %ecx, %eax
shrl $0x5, %eax
addl %ecx, %eax
movl %eax, %ecx
shll $0x4, %ecx
xorl %eax, %ecx
movl %ecx, %eax
shrl $0x11, %eax
addl %ecx, %eax
movl %eax, %ecx
shll $0x19, %ecx
xorl %eax, %ecx
movl %ecx, %eax
shrl $0x6, %eax
addl %ecx, %eax
retq