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

```asm
<v_infnanzero>:
  endbr64
  push   %r14
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  movsd  %xmm0,0x8(%rsp)
  mov    %rdi,%r12
  call   <is_zero@plt>
  mov    $0x0,%ebp
  test   %rax,%rax
  jne    L5
L12:
  movsd  0x8(%rsp),%xmm2
  ucomisd %xmm2,%xmm2
  jp     L149
  movsd  D55(%rip),%xmm0
  divsd  D57(%rip),%xmm0
  movq   %xmm0,%r14
  ucomisd %xmm2,%xmm0
  jp     L126
  jne    L126
  movl   $0x0,0x4(%r12)
  mov    $0x3,%esi
  mov    %r12,%rdi
  movsd  0x8(%rsp),%xmm0
  call   <v_preformat@plt>
  lea    0x0(%rbp,%rax,1),%ebx
  jmp    L151
L5:
  mov    0x4(%r12),%esi
  test   %esi,%esi
  mov    $0x0,%eax
  cmovs  %eax,%esi
  mov    %esi,0x4(%r12)
  add    $0x6,%esi
  mov    %r12,%rdi
  movsd  0x8(%rsp),%xmm0
  call   <v_preformat@plt>
  mov    %rax,%rbp
  mov    $0x30,%edi
  call   <ft_putchar@plt>
  add    %eax,%ebp
  cmpl   $0x0,0x4(%r12)
  jne    L27
  cmpl   $0x0,0x8(%r12)
  je     L154
L27:
  mov    $0x2e,%edi
  call   <ft_putchar@plt>
  add    %eax,%ebp
  cmpl   $0x0,0x4(%r12)
  jle    L154
  mov    $0x0,%ebx
L94:
  mov    $0x30,%edi
  call   <ft_putchar@plt>
  add    %eax,%ebp
  add    $0x1,%ebx
  cmp    %ebx,0x4(%r12)
  jg     L94
L154:
  lea    D26(%rip),%rdi
  call   <ft_putstr@plt>
  add    %eax,%ebp
  mov    0x4(%r12),%eax
  lea    0x6(%rax),%esi
  mov    %r12,%rdi
  movsd  0x8(%rsp),%xmm0
  call   <v_postformat@plt>
  add    %eax,%ebp
  jmp    L12
L126:
  movq   %r14,%xmm0
  xorpd  D44(%rip),%xmm0
  movsd  0x8(%rsp),%xmm6
  ucomisd %xmm6,%xmm0
  jp     L36
  jne    L36
  movl   $0x0,0x4(%r12)
  mov    $0x3,%esi
  mov    %r12,%rdi
  movsd  0x8(%rsp),%xmm0
  call   <v_preformat@plt>
  lea    0x0(%rbp,%rax,1),%ebx
  movq   %r14,%xmm5
  movsd  0x8(%rsp),%xmm3
  ucomisd %xmm3,%xmm5
  jp     L31
  je     L151
L31:
  movq   %r14,%xmm0
  xorpd  D44(%rip),%xmm0
  movsd  0x8(%rsp),%xmm4
  ucomisd %xmm4,%xmm0
  jp     L43
  jne    L43
L151:
  lea    D37(%rip),%rdi
  call   <ft_putstr@plt>
  add    %eax,%ebx
L43:
  mov    $0x3,%esi
  mov    %r12,%rdi
  movsd  0x8(%rsp),%xmm0
  call   <v_postformat@plt>
  lea    (%rbx,%rax,1),%ebp
L36:
  mov    %ebp,%eax
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r14
  ret
L149:
  movl   $0x0,0x4(%r12)
  mov    $0x3,%esi
  mov    %r12,%rdi
  movsd  0x8(%rsp),%xmm0
  call   <v_preformat@plt>
  mov    %rax,%rbx
  lea    D21(%rip),%rdi
  call   <ft_putstr@plt>
  add    %eax,%ebx
  add    %ebp,%ebx
  jmp    L43
```

tool_calls: name: parse_data
arguments: label: D55
datatype: f64
name: parse_data
arguments: label: D57
datatype: f64
name: parse_data
arguments: label: D26
datatype: string
name: parse_data
arguments: label: D44
datatype: byte[16]
name: parse_data
arguments: label: D37
datatype: string
name: parse_data
arguments: label: D21
datatype: string

tool: D55: 1

tool: D57: 0

tool: D26: p+0

tool: {"D44": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: D37: inf

tool: D21: nan

assistant: ```c
int v_infnanzero(double n, int fl[8]) {
  int ret;
  int index;
  ret = 0;
  if (is_zero(n) && (fl[1] = (fl[1] < 0) ? 0 : fl[1]) >= 0) {
    ret += v_preformat(n, fl, 6 + fl[1]);
    ret += ft_putchar('0');
    ret += (fl[1] || fl[2]) ? ft_putchar('.') : 0;
    index = -1;
    while (++index < fl[1])
      ret += ft_putchar('0');
    ret += ft_putstr("p+0");
    ret += v_postformat(n, fl, 6 + fl[1]);
  }
  if ((n != n || (n == 1.0 / 0.0) || (n == -1.0 / 0.0)) && !(fl[1] = 0)) {
    ret += v_preformat(n, fl, 3);
    if (n != n)
      ret += ft_putstr("nan");
    else if (n == 1.0 / 0.0 || n == -1.0 / 0.0)
      ret += ft_putstr("inf");
    ret += v_postformat(n, fl, 3);
  }
  return (ret);
}
```