user: 请将以下的汇编代码转换成C语言代码：

```asm
<num_of_char_in_string>:
  endbr64
  push   %r12
  xor    %r12d,%r12d
  push   %rbp
  push   %rbx
  test   %rdi,%rdi
  je     L58
  mov    %rdi,%rbx
  mov    %esi,%ebp
  call   <strlen@plt>
  mov    %rax,%rdx
  test   %eax,%eax
  jle    L58
  lea    -0x1(%rax),%eax
  cmp    $0xe,%eax
  jbe    L195
  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
L176:
  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    L176
  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     L58
L67:
  movslq %eax,%rcx
  cmp    %bpl,(%rbx,%rcx,1)
  sete   %cl
  movzbl %cl,%ecx
  add    %ecx,%r12d
  lea    0x1(%rax),%ecx
  cmp    %ecx,%edx
  jle    L58
  movslq %ecx,%rcx
  cmp    %bpl,(%rbx,%rcx,1)
  sete   %cl
  movzbl %cl,%ecx
  add    %ecx,%r12d
  lea    0x2(%rax),%ecx
  cmp    %ecx,%edx
  jle    L58
  movslq %ecx,%rcx
  cmp    %bpl,(%rbx,%rcx,1)
  sete   %cl
  movzbl %cl,%ecx
  add    %ecx,%r12d
  lea    0x3(%rax),%ecx
  cmp    %ecx,%edx
  jle    L58
  movslq %ecx,%rcx
  cmp    %bpl,(%rbx,%rcx,1)
  sete   %cl
  movzbl %cl,%ecx
  add    %ecx,%r12d
  lea    0x4(%rax),%ecx
  cmp    %ecx,%edx
  jle    L58
  movslq %ecx,%rcx
  cmp    %bpl,(%rbx,%rcx,1)
  sete   %cl
  movzbl %cl,%ecx
  add    %ecx,%r12d
  lea    0x5(%rax),%ecx
  cmp    %ecx,%edx
  jle    L58
  movslq %ecx,%rcx
  cmp    %bpl,(%rbx,%rcx,1)
  sete   %cl
  movzbl %cl,%ecx
  add    %ecx,%r12d
  lea    0x6(%rax),%ecx
  cmp    %ecx,%edx
  jle    L58
  movslq %ecx,%rcx
  cmp    %bpl,(%rbx,%rcx,1)
  sete   %cl
  movzbl %cl,%ecx
  add    %ecx,%r12d
  lea    0x7(%rax),%ecx
  cmp    %ecx,%edx
  jle    L58
  movslq %ecx,%rcx
  cmp    %bpl,(%rbx,%rcx,1)
  sete   %cl
  movzbl %cl,%ecx
  add    %ecx,%r12d
  lea    0x8(%rax),%ecx
  cmp    %ecx,%edx
  jle    L58
  movslq %ecx,%rcx
  cmp    %bpl,(%rbx,%rcx,1)
  sete   %cl
  movzbl %cl,%ecx
  add    %ecx,%r12d
  lea    0x9(%rax),%ecx
  cmp    %ecx,%edx
  jle    L58
  movslq %ecx,%rcx
  cmp    %bpl,(%rbx,%rcx,1)
  sete   %cl
  movzbl %cl,%ecx
  add    %ecx,%r12d
  lea    0xa(%rax),%ecx
  cmp    %ecx,%edx
  jle    L58
  movslq %ecx,%rcx
  cmp    %bpl,(%rbx,%rcx,1)
  sete   %cl
  movzbl %cl,%ecx
  add    %ecx,%r12d
  lea    0xb(%rax),%ecx
  cmp    %ecx,%edx
  jle    L58
  movslq %ecx,%rcx
  cmp    %bpl,(%rbx,%rcx,1)
  sete   %cl
  movzbl %cl,%ecx
  add    %ecx,%r12d
  lea    0xc(%rax),%ecx
  cmp    %ecx,%edx
  jle    L58
  movslq %ecx,%rcx
  cmp    %bpl,(%rbx,%rcx,1)
  sete   %cl
  movzbl %cl,%ecx
  add    %ecx,%r12d
  lea    0xd(%rax),%ecx
  cmp    %ecx,%edx
  jle    L58
  movslq %ecx,%rcx
  cmp    %bpl,(%rbx,%rcx,1)
  sete   %cl
  add    $0xe,%eax
  movzbl %cl,%ecx
  add    %ecx,%r12d
  cmp    %eax,%edx
  jle    L58
  cltq
  cmp    %bpl,(%rbx,%rax,1)
  sete   %al
  movzbl %al,%eax
  add    %eax,%r12d
L58:
  mov    %r12d,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
L195:
  xor    %eax,%eax
  jmp    L67
```

tool_calls: name: unpack_data
arguments: label: D7
datatype: byte[16]

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

assistant: ```c
int num_of_char_in_string(const char *s, char c) {
  int res = 0;
  if (s != NULL) {
    int i;
    for (i = 0; i < (int)strlen(s); i++)
      if (s[i] == c)
        res++;
  }
  return (res);
}
```