user: What would the C source look like for the assembly code provided here?

```asm
<map_hash>:
  endbr64
  mov    %rdi,%rax
  cmp    $0x7,%rsi
  jbe    L10
  lea    -0x8(%rsi),%rdx
  mov    $0x1505,%r8d
  shr    $0x3,%rdx
  lea    0x8(%rdi,%rdx,8),%rcx
  nopl   0x0(%rax)
L46:
  mov    %r8d,%edx
  add    $0x8,%rax
  shl    $0x5,%edx
  lea    (%rdx,%r8,1),%edi
  movsbl -0x8(%rax),%edx
  add    %edi,%edx
  mov    %edx,%edi
  shl    $0x5,%edi
  add    %edx,%edi
  movsbl -0x7(%rax),%edx
  add    %edi,%edx
  mov    %edx,%edi
  shl    $0x5,%edi
  add    %edx,%edi
  movsbl -0x6(%rax),%edx
  add    %edi,%edx
  mov    %edx,%edi
  shl    $0x5,%edi
  add    %edx,%edi
  movsbl -0x5(%rax),%edx
  add    %edi,%edx
  mov    %edx,%edi
  shl    $0x5,%edi
  add    %edx,%edi
  movsbl -0x4(%rax),%edx
  add    %edi,%edx
  mov    %edx,%edi
  shl    $0x5,%edi
  add    %edx,%edi
  movsbl -0x3(%rax),%edx
  add    %edi,%edx
  mov    %edx,%edi
  shl    $0x5,%edi
  add    %edx,%edi
  movsbl -0x2(%rax),%edx
  movsbl -0x1(%rax),%r8d
  add    %edi,%edx
  mov    %edx,%edi
  shl    $0x5,%edi
  add    %edi,%edx
  add    %edx,%r8d
  cmp    %rcx,%rax
  jne    L46
  and    $0x7,%esi
L48:
  cmp    $0x7,%rsi
  ja     L24
  lea    D6(%rip),%rdx
  movslq (%rdx,%rsi,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  nopl   0x0(%rax)
  mov    %r8d,%eax
  add    $0x1,%rcx
  shl    $0x5,%eax
  add    %r8d,%eax
  movsbl -0x1(%rcx),%r8d
  add    %eax,%r8d
  mov    %r8d,%eax
  add    $0x1,%rcx
  shl    $0x5,%eax
  add    %r8d,%eax
  movsbl -0x1(%rcx),%r8d
  add    %eax,%r8d
  mov    %r8d,%eax
  lea    0x1(%rcx),%rdx
  shl    $0x5,%eax
  add    %r8d,%eax
  movsbl (%rcx),%r8d
  add    %eax,%r8d
L32:
  mov    %r8d,%eax
  lea    0x1(%rdx),%rcx
  shl    $0x5,%eax
  add    %r8d,%eax
  movsbl (%rdx),%r8d
  add    %eax,%r8d
  mov    %r8d,%eax
  lea    0x1(%rcx),%rdx
  shl    $0x5,%eax
  add    %r8d,%eax
  movsbl (%rcx),%r8d
  add    %eax,%r8d
L49:
  mov    %r8d,%eax
  lea    0x1(%rdx),%rcx
  shl    $0x5,%eax
  add    %r8d,%eax
  movsbl (%rdx),%r8d
  add    %eax,%r8d
  mov    %r8d,%eax
  shl    $0x5,%eax
  add    %r8d,%eax
  movsbl (%rcx),%r8d
  add    %eax,%r8d
L24:
  mov    %r8d,%eax
  ret
  xchg   %ax,%ax
  mov    %rcx,%rdx
  jmp    L32
  nopl   (%rax)
  mov    %rcx,%rdx
  jmp    L49
  nopl   (%rax)
L10:
  mov    %rdi,%rcx
  mov    $0x1505,%r8d
  jmp    L48
```

assistant: ```c
uint32_t map_hash(char *key, size_t len) {
  register int hash = 5381;
  for (; len >= 8; len -= 8) {
    hash = ((hash << 5) + hash) + *key++;
    hash = ((hash << 5) + hash) + *key++;
    hash = ((hash << 5) + hash) + *key++;
    hash = ((hash << 5) + hash) + *key++;
    hash = ((hash << 5) + hash) + *key++;
    hash = ((hash << 5) + hash) + *key++;
    hash = ((hash << 5) + hash) + *key++;
    hash = ((hash << 5) + hash) + *key++;
  }
  switch (len) {
  case 7:
    hash = ((hash << 5) + hash) + *key++;
  case 6:
    hash = ((hash << 5) + hash) + *key++;
  case 5:
    hash = ((hash << 5) + hash) + *key++;
  case 4:
    hash = ((hash << 5) + hash) + *key++;
  case 3:
    hash = ((hash << 5) + hash) + *key++;
  case 2:
    hash = ((hash << 5) + hash) + *key++;
  case 1:
    hash = ((hash << 5) + hash) + *key++;
    break;
  case 0:
    break;
  }
  return hash;
}
```