user: 请从给定的汇编指令推导出C源代码:

```asm
<map_hash>:
  endbr64
  push   %rbp
  mov    %rdi,%rbp
  push   %rbx
  mov    %rsi,%rbx
  sub    $0x8,%rsp
  call   <strlen@plt>
  test   %rax,%rax
  je     L29
  mov    %rax,%rcx
  lea    -0x1(%rax),%rax
  cmp    $0xe,%rax
  jbe    L50
  mov    %rcx,%rdx
  pxor   %xmm6,%xmm6
  pxor   %xmm5,%xmm5
  mov    %rbp,%rax
  and    $0xfffffffffffffff0,%rdx
  pxor   %xmm4,%xmm4
  pxor   %xmm3,%xmm3
  add    %rbp,%rdx
  nopl   0x0(%rax)
L144:
  movdqu (%rax),%xmm0
  movdqa %xmm5,%xmm2
  movdqa %xmm4,%xmm8
  add    $0x10,%rax
  pcmpgtb %xmm0,%xmm2
  movdqa %xmm0,%xmm1
  punpcklbw %xmm2,%xmm1
  punpckhbw %xmm2,%xmm0
  movdqa %xmm4,%xmm2
  pcmpgtw %xmm1,%xmm2
  pcmpgtw %xmm0,%xmm8
  movdqa %xmm1,%xmm7
  punpcklwd %xmm2,%xmm7
  punpckhwd %xmm2,%xmm1
  movdqa %xmm0,%xmm2
  punpcklwd %xmm8,%xmm2
  punpckhwd %xmm8,%xmm0
  movdqa %xmm3,%xmm8
  pcmpgtd %xmm1,%xmm8
  movdqa %xmm1,%xmm9
  punpckldq %xmm8,%xmm9
  punpckhdq %xmm8,%xmm1
  movdqa %xmm3,%xmm8
  pcmpgtd %xmm7,%xmm8
  paddq  %xmm9,%xmm1
  movdqa %xmm7,%xmm9
  punpckldq %xmm8,%xmm9
  punpckhdq %xmm8,%xmm7
  movdqa %xmm2,%xmm8
  paddq  %xmm9,%xmm7
  paddq  %xmm7,%xmm1
  movdqa %xmm3,%xmm7
  pcmpgtd %xmm2,%xmm7
  punpckldq %xmm7,%xmm8
  punpckhdq %xmm7,%xmm2
  movdqa %xmm3,%xmm7
  pcmpgtd %xmm0,%xmm7
  paddq  %xmm8,%xmm2
  movdqa %xmm0,%xmm8
  punpckldq %xmm7,%xmm8
  punpckhdq %xmm7,%xmm0
  paddq  %xmm8,%xmm2
  paddq  %xmm6,%xmm0
  paddq  %xmm2,%xmm1
  movdqa %xmm1,%xmm6
  paddq  %xmm0,%xmm6
  cmp    %rdx,%rax
  jne    L144
  movdqa %xmm6,%xmm0
  mov    %rcx,%rdx
  psrldq $0x8,%xmm0
  and    $0xfffffffffffffff0,%rdx
  paddq  %xmm0,%xmm6
  movq   %xmm6,%rax
  test   $0xf,%cl
  je     L116
L87:
  movsbq 0x0(%rbp,%rdx,1),%rsi
  add    %rsi,%rax
  lea    0x1(%rdx),%rsi
  cmp    %rsi,%rcx
  jbe    L116
  movsbq 0x1(%rbp,%rdx,1),%rsi
  add    %rsi,%rax
  lea    0x2(%rdx),%rsi
  cmp    %rsi,%rcx
  jbe    L116
  movsbq 0x2(%rbp,%rdx,1),%rsi
  add    %rsi,%rax
  lea    0x3(%rdx),%rsi
  cmp    %rsi,%rcx
  jbe    L116
  movsbq 0x3(%rbp,%rdx,1),%rsi
  add    %rsi,%rax
  lea    0x4(%rdx),%rsi
  cmp    %rsi,%rcx
  jbe    L116
  movsbq 0x4(%rbp,%rdx,1),%rsi
  add    %rsi,%rax
  lea    0x5(%rdx),%rsi
  cmp    %rsi,%rcx
  jbe    L116
  movsbq 0x5(%rbp,%rdx,1),%rsi
  add    %rsi,%rax
  lea    0x6(%rdx),%rsi
  cmp    %rsi,%rcx
  jbe    L116
  movsbq 0x6(%rbp,%rdx,1),%rsi
  add    %rsi,%rax
  lea    0x7(%rdx),%rsi
  cmp    %rsi,%rcx
  jbe    L116
  movsbq 0x7(%rbp,%rdx,1),%rsi
  add    %rsi,%rax
  lea    0x8(%rdx),%rsi
  cmp    %rsi,%rcx
  jbe    L116
  movsbq 0x8(%rbp,%rdx,1),%rsi
  add    %rsi,%rax
  lea    0x9(%rdx),%rsi
  cmp    %rsi,%rcx
  jbe    L116
  movsbq 0x9(%rbp,%rdx,1),%rsi
  add    %rsi,%rax
  lea    0xa(%rdx),%rsi
  cmp    %rsi,%rcx
  jbe    L116
  movsbq 0xa(%rbp,%rdx,1),%rsi
  add    %rsi,%rax
  lea    0xb(%rdx),%rsi
  cmp    %rsi,%rcx
  jbe    L116
  movsbq 0xb(%rbp,%rdx,1),%rsi
  add    %rsi,%rax
  lea    0xc(%rdx),%rsi
  cmp    %rsi,%rcx
  jbe    L116
  movsbq 0xc(%rbp,%rdx,1),%rsi
  add    %rsi,%rax
  lea    0xd(%rdx),%rsi
  cmp    %rsi,%rcx
  jbe    L116
  movsbq 0xd(%rbp,%rdx,1),%rsi
  add    %rsi,%rax
  lea    0xe(%rdx),%rsi
  cmp    %rsi,%rcx
  jbe    L116
  movsbq 0xe(%rbp,%rdx,1),%rdx
  add    %rdx,%rax
L116:
  xor    %edx,%edx
  add    $0x8,%rsp
  div    %rbx
  pop    %rbx
  pop    %rbp
  mov    %rdx,%r8
  mov    %r8,%rax
  ret
  nopl   0x0(%rax)
L29:
  add    $0x8,%rsp
  mov    %rax,%r8
  mov    %r8,%rax
  pop    %rbx
  pop    %rbp
  ret
L50:
  xor    %eax,%eax
  xor    %edx,%edx
  jmp    L87
```

assistant: ```c
size_t map_hash(char *key, size_t n) {
  size_t i, x, len;
  x = 0;
  len = strlen(key);
  for (i = 0; i < len; ++i)
    x += key[i];
  return x % n;
}
```