user: Converte this assembly snippet into its equivalent C code:

```asm
<sPrintData>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %rdi,-0x8(%rbp)
  mov    %esi,-0xc(%rbp)
  mov    %rdx,-0x18(%rbp)
  cmpl   $0x80,-0xc(%rbp)
  je     L98
  cmpl   $0x80,-0xc(%rbp)
  jg     L10
  cmpl   $0x20,-0xc(%rbp)
  jg     L71
  cmpl   $0x0,-0xc(%rbp)
  jle    L10
  cmpl   $0x20,-0xc(%rbp)
  ja     L10
  mov    -0xc(%rbp),%eax
  lea    0x0(,%rax,4),%rdx
  lea    D92(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D92(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
L71:
  cmpl   $0x40,-0xc(%rbp)
  je     L8
  jmp    L10
  mov    -0x18(%rbp),%rax
  mov    (%rax),%edx
  mov    -0x8(%rbp),%rax
  lea    D97(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L10
  mov    -0x18(%rbp),%rax
  movzwl (%rax),%eax
  movswl %ax,%edx
  mov    -0x8(%rbp),%rax
  lea    D85(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L10
  mov    -0x18(%rbp),%rax
  movss  (%rax),%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  movq   %xmm1,%rdx
  mov    -0x8(%rbp),%rax
  movq   %rdx,%xmm0
  lea    D55(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  jmp    L10
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rdx
  mov    -0x8(%rbp),%rax
  movq   %rdx,%xmm0
  lea    D55(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  jmp    L10
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rdx
  mov    -0x8(%rbp),%rax
  lea    D98(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L10
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rdx
  mov    -0x8(%rbp),%rax
  lea    D49(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L10
L8:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%edx
  mov    -0x8(%rbp),%rax
  lea    D1(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L10
L98:
  mov    -0x18(%rbp),%rdx
  mov    -0x8(%rbp),%rax
  lea    D81(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  nop
L10:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: label: D97
type_infered: string
name: disassemble_data
arguments: label: D85
type_infered: string
name: disassemble_data
arguments: label: D55
type_infered: string
name: disassemble_data
arguments: label: D98
type_infered: string
name: disassemble_data
arguments: label: D49
type_infered: string
name: disassemble_data
arguments: label: D1
type_infered: string
name: disassemble_data
arguments: label: D81
type_infered: string

tool: D97: %d

tool: D85: %hd

tool: D55: %f

tool: D98: %ld

tool: D49: %lld

tool: D1: %c

tool: D81: %s

assistant: ```c
void sPrintData(char *str, int type, void *data) {
  switch (type) {
  case 0x00000001:
    printf(str, "%d", *(int *)data);
    return;
  case 0x00000002:
    printf(str, "%hd", *(short *)data);
    return;
  case 0x00000004:
    printf(str, "%f", *(float *)data);
    return;
  case 0x00000008:
    printf(str, "%f", *(double *)data);
    return;
  case 0x00000010:
    printf(str, "%ld", *(long *)data);
    return;
  case 0x00000020:
    printf(str, "%lld", *(long long *)data);
    return;
  case 0x00000040:
    printf(str, "%c", *(char *)data);
    return;
  case 0x00000080:
    printf(str, "%s", (char *)data);
    return;
  }
}
```