user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<occurrence_count>:
  endbr64
  push   %r12
  xor    %r12d,%r12d
  cmpb   $0x0,(%rdi)
  push   %rbp
  push   %rbx
  je     L68
  mov    %rdi,%rbx
  mov    %esi,%ebp
  call   <strlen@plt>
  mov    %rax,%rdx
  test   %eax,%eax
  jle    L68
  lea    -0x1(%rax),%eax
  cmp    $0xe,%eax
  jbe    L109
  mov    %edx,%ecx
  movd   %ebp,%xmm4
  movdqa D7(%rip),%xmm7
  mov    %rbx,%rax
  punpcklbw %xmm4,%xmm4
  shr    $0x4,%ecx
  pxor   %xmm1,%xmm1
  pxor   %xmm6,%xmm6
  sub    $0x1,%ecx
  punpcklwd %xmm4,%xmm4
  pxor   %xmm5,%xmm5
  shl    $0x4,%rcx
  pshufd $0x0,%xmm4,%xmm4
  lea    0x10(%rbx,%rcx,1),%rcx
  xchg   %ax,%ax
L105:
  movdqu (%rax),%xmm0
  movdqa %xmm6,%xmm3
  add    $0x10,%rax
  pcmpeqb %xmm4,%xmm0
  pand   %xmm7,%xmm0
  pcmpgtb %xmm0,%xmm3
  movdqa %xmm0,%xmm2
  punpcklbw %xmm3,%xmm2
  punpckhbw %xmm3,%xmm0
  movdqa %xmm5,%xmm3
  pcmpgtw %xmm2,%xmm3
  movdqa %xmm2,%xmm8
  punpcklwd %xmm3,%xmm8
  punpckhwd %xmm3,%xmm2
  movdqa %xmm0,%xmm3
  paddd  %xmm8,%xmm1
  paddd  %xmm2,%xmm1
  movdqa %xmm5,%xmm2
  pcmpgtw %xmm0,%xmm2
  punpcklwd %xmm2,%xmm3
  punpckhwd %xmm2,%xmm0
  paddd  %xmm3,%xmm1
  paddd  %xmm0,%xmm1
  cmp    %rcx,%rax
  jne    L105
  movdqa %xmm1,%xmm0
  mov    %edx,%eax
  psrldq $0x8,%xmm0
  and    $0xfffffff0,%eax
  paddd  %xmm0,%xmm1
  movdqa %xmm1,%xmm0
  psrldq $0x4,%xmm0
  paddd  %xmm0,%xmm1
  movd   %xmm1,%r12d
  test   $0xf,%dl
  je     L68
L53:
  movslq %eax,%rcx
  cmp    %bpl,(%rbx,%rcx,1)
  sete   %cl
  movzbl %cl,%ecx
  add    %ecx,%r12d
  lea    0x1(%rax),%ecx
  cmp    %ecx,%edx
  jle    L68
  movslq %ecx,%rcx
  cmp    %bpl,(%rbx,%rcx,1)
  sete   %cl
  movzbl %cl,%ecx
  add    %ecx,%r12d
  lea    0x2(%rax),%ecx
  cmp    %ecx,%edx
  jle    L68
  movslq %ecx,%rcx
  cmp    %bpl,(%rbx,%rcx,1)
  sete   %cl
  movzbl %cl,%ecx
  add    %ecx,%r12d
  lea    0x3(%rax),%ecx
  cmp    %ecx,%edx
  jle    L68
  movslq %ecx,%rcx
  cmp    %bpl,(%rbx,%rcx,1)
  sete   %cl
  movzbl %cl,%ecx
  add    %ecx,%r12d
  lea    0x4(%rax),%ecx
  cmp    %ecx,%edx
  jle    L68
  movslq %ecx,%rcx
  cmp    %bpl,(%rbx,%rcx,1)
  sete   %cl
  movzbl %cl,%ecx
  add    %ecx,%r12d
  lea    0x5(%rax),%ecx
  cmp    %ecx,%edx
  jle    L68
  movslq %ecx,%rcx
  cmp    %bpl,(%rbx,%rcx,1)
  sete   %cl
  movzbl %cl,%ecx
  add    %ecx,%r12d
  lea    0x6(%rax),%ecx
  cmp    %ecx,%edx
  jle    L68
  movslq %ecx,%rcx
  cmp    %bpl,(%rbx,%rcx,1)
  sete   %cl
  movzbl %cl,%ecx
  add    %ecx,%r12d
  lea    0x7(%rax),%ecx
  cmp    %ecx,%edx
  jle    L68
  movslq %ecx,%rcx
  cmp    %bpl,(%rbx,%rcx,1)
  sete   %cl
  movzbl %cl,%ecx
  add    %ecx,%r12d
  lea    0x8(%rax),%ecx
  cmp    %ecx,%edx
  jle    L68
  movslq %ecx,%rcx
  cmp    %bpl,(%rbx,%rcx,1)
  sete   %cl
  movzbl %cl,%ecx
  add    %ecx,%r12d
  lea    0x9(%rax),%ecx
  cmp    %ecx,%edx
  jle    L68
  movslq %ecx,%rcx
  cmp    %bpl,(%rbx,%rcx,1)
  sete   %cl
  movzbl %cl,%ecx
  add    %ecx,%r12d
  lea    0xa(%rax),%ecx
  cmp    %ecx,%edx
  jle    L68
  movslq %ecx,%rcx
  cmp    %bpl,(%rbx,%rcx,1)
  sete   %cl
  movzbl %cl,%ecx
  add    %ecx,%r12d
  lea    0xb(%rax),%ecx
  cmp    %ecx,%edx
  jle    L68
  movslq %ecx,%rcx
  cmp    %bpl,(%rbx,%rcx,1)
  sete   %cl
  movzbl %cl,%ecx
  add    %ecx,%r12d
  lea    0xc(%rax),%ecx
  cmp    %ecx,%edx
  jle    L68
  movslq %ecx,%rcx
  cmp    %bpl,(%rbx,%rcx,1)
  sete   %cl
  movzbl %cl,%ecx
  add    %ecx,%r12d
  lea    0xd(%rax),%ecx
  cmp    %ecx,%edx
  jle    L68
  movslq %ecx,%rcx
  cmp    %bpl,(%rbx,%rcx,1)
  sete   %cl
  add    $0xe,%eax
  movzbl %cl,%ecx
  add    %ecx,%r12d
  cmp    %eax,%edx
  jle    L68
  cltq
  cmp    %bpl,(%rbx,%rax,1)
  sete   %al
  movzbl %al,%eax
  add    %eax,%r12d
L68:
  mov    %r12d,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
L109:
  xor    %eax,%eax
  jmp    L53
```

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

tool: {"D7": [0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01]}

assistant: ```c
int occurrence_count(char *string, char c) {
  int i, count;
  if (strlen(string) == 0)
    return 0;
  count = 0;
  for (i = 0; i < (int)strlen(string); i++) {
    if (string[i] == c)
      count++;
  }
  return count;
}
```