user: Please show me the C implementation that matches the assembly code listed below:

```asm
<get_specific_char>:
  endbr64
  test   %edx,%edx
  je     L20
  lea    -0x1(%rdx),%ecx
  mov    %edx,%r8d
  cmp    $0xe,%ecx
  jbe    L45
  mov    %edx,%ecx
  movd   %edi,%xmm4
  movdqa D3(%rip),%xmm7
  mov    %rsi,%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(%rsi,%rcx,1),%rcx
  nopl   0x0(%rax)
L63:
  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    %rax,%rcx
  jne    L63
  movdqa %xmm1,%xmm0
  mov    %edx,%ecx
  psrldq $0x8,%xmm0
  and    $0xfffffff0,%ecx
  paddd  %xmm0,%xmm1
  mov    %ecx,%r9d
  sub    %ecx,%edx
  movdqa %xmm1,%xmm0
  add    %r9,%rsi
  psrldq $0x4,%xmm0
  paddd  %xmm0,%xmm1
  movd   %xmm1,%eax
  cmp    %ecx,%r8d
  je     L125
  lea    -0x1(%rdx),%ecx
L171:
  xor    %r8d,%r8d
  cmp    %dil,(%rsi)
  sete   %r8b
  add    %r8d,%eax
  test   %ecx,%ecx
  je     L125
  xor    %ecx,%ecx
  cmp    %dil,0x1(%rsi)
  sete   %cl
  add    %ecx,%eax
  cmp    $0x2,%edx
  je     L125
  xor    %ecx,%ecx
  cmp    %dil,0x2(%rsi)
  sete   %cl
  add    %ecx,%eax
  cmp    $0x3,%edx
  je     L125
  xor    %ecx,%ecx
  cmp    %dil,0x3(%rsi)
  sete   %cl
  add    %ecx,%eax
  cmp    $0x4,%edx
  je     L125
  xor    %ecx,%ecx
  cmp    %dil,0x4(%rsi)
  sete   %cl
  add    %ecx,%eax
  cmp    $0x5,%edx
  je     L125
  xor    %ecx,%ecx
  cmp    %dil,0x5(%rsi)
  sete   %cl
  add    %ecx,%eax
  cmp    $0x6,%edx
  je     L125
  xor    %ecx,%ecx
  cmp    %dil,0x6(%rsi)
  sete   %cl
  add    %ecx,%eax
  cmp    $0x7,%edx
  je     L125
  xor    %ecx,%ecx
  cmp    %dil,0x7(%rsi)
  sete   %cl
  add    %ecx,%eax
  cmp    $0x8,%edx
  je     L125
  xor    %ecx,%ecx
  cmp    %dil,0x8(%rsi)
  sete   %cl
  add    %ecx,%eax
  cmp    $0x9,%edx
  je     L125
  xor    %ecx,%ecx
  cmp    %dil,0x9(%rsi)
  sete   %cl
  add    %ecx,%eax
  cmp    $0xa,%edx
  je     L125
  xor    %ecx,%ecx
  cmp    %dil,0xa(%rsi)
  sete   %cl
  add    %ecx,%eax
  cmp    $0xb,%edx
  je     L125
  xor    %ecx,%ecx
  cmp    %dil,0xb(%rsi)
  sete   %cl
  add    %ecx,%eax
  cmp    $0xc,%edx
  je     L125
  xor    %ecx,%ecx
  cmp    %dil,0xc(%rsi)
  sete   %cl
  add    %ecx,%eax
  cmp    $0xd,%edx
  je     L125
  xor    %ecx,%ecx
  cmp    %dil,0xd(%rsi)
  sete   %cl
  add    %ecx,%eax
  cmp    $0xe,%edx
  je     L125
  xor    %edx,%edx
  cmp    %dil,0xe(%rsi)
  sete   %dl
  add    %edx,%eax
  ret
  nopl   0x0(%rax)
L20:
  xor    %eax,%eax
L125:
  ret
L45:
  xor    %eax,%eax
  jmp    L171
```

tool_calls: name: extract_symbolic_data
arguments: label: D3
type_guessed: byte[16]

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

assistant: ```c
int get_specific_char(char c, char *input, int total_size) {
  int count = 0;
  int size = total_size;
  while (size) {
    if (*input == c)
      count++;
    *input++;
    size--;
  }
  return count;
}
```