user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<createhash>:
  endbr64
  push   %rbx
  mov    %rdi,%rbx
  call   <strlen@plt>
  test   %eax,%eax
  jle    L187
  mov    %eax,%ecx
  lea    -0x1(%rax),%eax
  cmp    $0xe,%eax
  jbe    L36
  mov    %ecx,%edx
  pxor   %xmm1,%xmm1
  pxor   %xmm6,%xmm6
  mov    %rbx,%rax
  shr    $0x4,%edx
  movdqa D7(%rip),%xmm5
  pxor   %xmm3,%xmm3
  sub    $0x1,%edx
  shl    $0x4,%rdx
  lea    0x10(%rbx,%rdx,1),%rdx
  nopl   0x0(%rax,%rax,1)
L139:
  movdqu (%rax),%xmm0
  movdqa %xmm6,%xmm4
  add    $0x10,%rax
  pcmpgtb %xmm0,%xmm4
  movdqa %xmm0,%xmm2
  punpcklbw %xmm4,%xmm2
  punpckhbw %xmm4,%xmm0
  paddw  %xmm5,%xmm2
  paddw  %xmm5,%xmm0
  movdqa %xmm2,%xmm4
  punpckhwd %xmm3,%xmm2
  punpcklwd %xmm3,%xmm4
  paddd  %xmm4,%xmm1
  paddd  %xmm2,%xmm1
  movdqa %xmm0,%xmm2
  punpckhwd %xmm3,%xmm0
  punpcklwd %xmm3,%xmm2
  paddd  %xmm2,%xmm1
  paddd  %xmm0,%xmm1
  cmp    %rdx,%rax
  jne    L139
  movdqa %xmm1,%xmm0
  mov    %ecx,%eax
  psrldq $0x8,%xmm0
  and    $0xfffffff0,%eax
  paddd  %xmm0,%xmm1
  movdqa %xmm1,%xmm0
  psrldq $0x4,%xmm0
  paddd  %xmm0,%xmm1
  movd   %xmm1,%edx
  test   $0xf,%cl
  je     L173
L95:
  movslq %eax,%rsi
  movsbl (%rbx,%rsi,1),%esi
  lea    0x85(%rdx,%rsi,1),%edx
  lea    0x1(%rax),%esi
  cmp    %esi,%ecx
  jle    L173
  movslq %esi,%rsi
  movsbl (%rbx,%rsi,1),%esi
  lea    0x85(%rdx,%rsi,1),%edx
  lea    0x2(%rax),%esi
  cmp    %esi,%ecx
  jle    L173
  movslq %esi,%rsi
  movsbl (%rbx,%rsi,1),%esi
  lea    0x85(%rdx,%rsi,1),%edx
  lea    0x3(%rax),%esi
  cmp    %esi,%ecx
  jle    L173
  movslq %esi,%rsi
  movsbl (%rbx,%rsi,1),%esi
  lea    0x85(%rdx,%rsi,1),%edx
  lea    0x4(%rax),%esi
  cmp    %esi,%ecx
  jle    L173
  movslq %esi,%rsi
  movsbl (%rbx,%rsi,1),%esi
  lea    0x85(%rdx,%rsi,1),%edx
  lea    0x5(%rax),%esi
  cmp    %esi,%ecx
  jle    L173
  movslq %esi,%rsi
  movsbl (%rbx,%rsi,1),%esi
  lea    0x85(%rdx,%rsi,1),%edx
  lea    0x6(%rax),%esi
  cmp    %esi,%ecx
  jle    L173
  movslq %esi,%rsi
  movsbl (%rbx,%rsi,1),%esi
  lea    0x85(%rdx,%rsi,1),%edx
  lea    0x7(%rax),%esi
  cmp    %esi,%ecx
  jle    L173
  movslq %esi,%rsi
  movsbl (%rbx,%rsi,1),%esi
  lea    0x85(%rdx,%rsi,1),%edx
  lea    0x8(%rax),%esi
  cmp    %esi,%ecx
  jle    L173
  movslq %esi,%rsi
  movsbl (%rbx,%rsi,1),%esi
  lea    0x85(%rdx,%rsi,1),%edx
  lea    0x9(%rax),%esi
  cmp    %esi,%ecx
  jle    L173
  movslq %esi,%rsi
  movsbl (%rbx,%rsi,1),%esi
  lea    0x85(%rdx,%rsi,1),%edx
  lea    0xa(%rax),%esi
  cmp    %esi,%ecx
  jle    L173
  movslq %esi,%rsi
  movsbl (%rbx,%rsi,1),%esi
  lea    0x85(%rdx,%rsi,1),%edx
  lea    0xb(%rax),%esi
  cmp    %esi,%ecx
  jle    L173
  movslq %esi,%rsi
  movsbl (%rbx,%rsi,1),%esi
  lea    0x85(%rdx,%rsi,1),%edx
  lea    0xc(%rax),%esi
  cmp    %esi,%ecx
  jle    L173
  movslq %esi,%rsi
  movsbl (%rbx,%rsi,1),%esi
  lea    0x85(%rdx,%rsi,1),%edx
  lea    0xd(%rax),%esi
  cmp    %esi,%ecx
  jle    L173
  movslq %esi,%rsi
  add    $0xe,%eax
  movsbl (%rbx,%rsi,1),%esi
  lea    0x85(%rdx,%rsi,1),%edx
  cmp    %eax,%ecx
  jle    L173
  cltq
  movsbl (%rbx,%rax,1),%eax
  lea    0x85(%rdx,%rax,1),%edx
L173:
  movslq %edx,%rax
  mov    %edx,%ecx
  pop    %rbx
  imul   $0x4ec4ec4f,%rax,%rax
  sar    $0x1f,%ecx
  sar    $0x22,%rax
  sub    %ecx,%eax
  lea    (%rax,%rax,2),%ecx
  lea    (%rax,%rcx,4),%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  ret
  nopl   0x0(%rax)
L187:
  xor    %eax,%eax
  pop    %rbx
  ret
L36:
  xor    %edx,%edx
  xor    %eax,%eax
  jmp    L95
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D7
type_infered: byte[16]

tool: {"D7": [0x85,0x00,0x85,0x00,0x85,0x00,0x85,0x00,0x85,0x00,0x85,0x00,0x85,0x00,0x85,0x00]}

assistant: ```c
int createhash(char *a) {
  int i;
  int len = strlen(a);
  int sum = 0;
  for (i = 0; i < len; i++) {
    sum += (int)a[i] + 133;
  }
  return sum % 13;
}
```