user: Demonstrate the C code that generates the assembly output below:

```asm
<parse_coord>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  mov    %rsi,%r12
  push   %rbp
  push   %rbx
  mov    %rdi,%rbx
  sub    $0x28,%rsp
  jmp    L182
  nopw   0x0(%rax,%rax,1)
L139:
  add    $0x1,%rbx
L182:
  movsbl (%rbx),%edi
  call   <isspace@plt>
  test   %rax,%rax
  jne    L139
  movsd  D149(%rip),%xmm3
  cmpb   $0x2d,(%rbx)
  movsd  %xmm3,0x8(%rsp)
  jne    L309
  movsd  D142(%rip),%xmm6
  add    $0x1,%rbx
  movsd  %xmm6,0x8(%rsp)
L309:
  pxor   %xmm0,%xmm0
  jmp    L322
  nopl   0x0(%rax)
L246:
  movsd  D122(%rip),%xmm1
  pxor   %xmm0,%xmm0
  add    $0x1,%rbx
  mulsd  (%r12),%xmm1
  movsd  %xmm1,(%r12)
  movsbl -0x1(%rbx),%eax
  sub    $0x30,%eax
  cvtsi2sd %eax,%xmm0
  addsd  %xmm1,%xmm0
L322:
  movsd  %xmm0,(%r12)
  movsbl (%rbx),%edi
  call   <isdigit@plt>
  test   %rax,%rax
  jne    L246
  movsbl (%rbx),%edi
  call   <isspace@plt>
  test   %rax,%rax
  je     L233
  nopl   0x0(%rax,%rax,1)
L43:
  movsbl 0x1(%rbx),%edi
  add    $0x1,%rbx
  call   <isspace@plt>
  test   %rax,%rax
  jne    L43
L233:
  movsbl (%rbx),%esi
  test   %sil,%sil
  jne    L152
L100:
  movsd  0x8(%rsp),%xmm0
  mulsd  (%r12),%xmm0
  movsd  %xmm0,(%r12)
L196:
  mov    $0xffffffff,%r13d
L89:
  add    $0x28,%rsp
  mov    %r13d,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L152:
  lea    D101(%rip),%rbp
  mov    %rbp,%rdi
  call   <strchr@plt>
  test   %rax,%rax
  je     L142
  lea    D113(%rip),%r15
L102:
  movsbl (%rbx),%esi
  mov    %r15,%rdi
  call   <strchr@plt>
  test   %rax,%rax
  je     L7
  movsd  0x8(%rsp),%xmm5
  xorpd  D10(%rip),%xmm5
  movsd  %xmm5,0x8(%rsp)
L7:
  xor    %r13d,%r13d
L222:
  lea    0x1(%rbx),%rbp
  jmp    L205
L92:
  add    $0x1,%rbp
L205:
  movsbl 0x0(%rbp),%edi
  call   <isspace@plt>
  test   %rax,%rax
  jne    L92
  mov    %rbp,%rdi
  call   <atof@plt>
  divsd  D60(%rip),%xmm0
  addsd  (%r12),%xmm0
  mulsd  0x8(%rsp),%xmm0
  movsd  %xmm0,(%r12)
  jmp    L89
  nopl   0x0(%rax)
L142:
  lea    D113(%rip),%r15
  movsbl (%rbx),%esi
  mov    %r15,%rdi
  call   <strchr@plt>
  test   %rax,%rax
  jne    L102
  lea    D120(%rip),%r14
  movsbl (%rbx),%esi
  mov    %r14,%rdi
  call   <strchr@plt>
  test   %rax,%rax
  je     L21
  lea    D133(%rip),%r13
L273:
  movsbl (%rbx),%esi
  mov    %r13,%rdi
  call   <strchr@plt>
  test   %rax,%rax
  je     L284
  movsd  0x8(%rsp),%xmm7
  xorpd  D10(%rip),%xmm7
  movsd  %xmm7,0x8(%rsp)
L284:
  mov    $0x1,%r13d
  jmp    L222
L21:
  lea    D133(%rip),%r13
  movsbl (%rbx),%esi
  mov    %r13,%rdi
  call   <strchr@plt>
  test   %rax,%rax
  jne    L273
  cmpb   $0x2e,(%rbx)
  jne    L100
  movsd  D149(%rip),%xmm1
  add    $0x1,%rbx
  pxor   %xmm0,%xmm0
  jmp    L15
L78:
  movsbl (%rbx),%eax
  pxor   %xmm2,%xmm2
  add    $0x1,%rbx
  mulsd  D122(%rip),%xmm0
  mulsd  D122(%rip),%xmm1
  sub    $0x30,%eax
  cvtsi2sd %eax,%xmm2
  addsd  %xmm2,%xmm0
L15:
  movsbl (%rbx),%edi
  movsd  %xmm0,0x18(%rsp)
  movsd  %xmm1,0x10(%rsp)
  call   <isdigit@plt>
  movsd  0x10(%rsp),%xmm1
  movsd  0x18(%rsp),%xmm0
  test   %rax,%rax
  jne    L78
  divsd  %xmm1,%xmm0
  addsd  (%r12),%xmm0
  mulsd  0x8(%rsp),%xmm0
  movsd  %xmm0,(%r12)
  jmp    L56
L245:
  add    $0x1,%rbx
L56:
  movsbl (%rbx),%edi
  call   <isspace@plt>
  test   %rax,%rax
  jne    L245
  movzbl (%rbx),%eax
  test   %al,%al
  je     L196
  movsbl %al,%esi
  mov    %rbp,%rdi
  call   <strchr@plt>
  test   %rax,%rax
  je     L166
L104:
  movsbl (%rbx),%esi
  mov    %r15,%rdi
  call   <strchr@plt>
  test   %rax,%rax
  je     L188
  movsd  (%r12),%xmm0
  xorpd  D10(%rip),%xmm0
  movsd  %xmm0,(%r12)
L188:
  xor    %r13d,%r13d
  jmp    L89
L166:
  movsbl (%rbx),%esi
  mov    %r15,%rdi
  call   <strchr@plt>
  test   %rax,%rax
  jne    L104
  movsbl (%rbx),%esi
  mov    %r14,%rdi
  call   <strchr@plt>
  test   %rax,%rax
  je     L133
L293:
  movsbl (%rbx),%esi
  mov    %r13,%rdi
  call   <strchr@plt>
  test   %rax,%rax
  je     L195
  movsd  (%r12),%xmm0
  xorpd  D10(%rip),%xmm0
  movsd  %xmm0,(%r12)
L195:
  mov    $0x1,%r13d
  jmp    L89
L133:
  movsbl (%rbx),%esi
  mov    %r13,%rdi
  call   <strchr@plt>
  test   %rax,%rax
  jne    L293
  jmp    L196
```

tool_calls: name: unpack_data
arguments: data_label: D149
type_infered: f64
name: unpack_data
arguments: data_label: D142
type_infered: f32[2]
name: unpack_data
arguments: data_label: D122
type_infered: f64
name: unpack_data
arguments: data_label: D101
type_infered: string
name: unpack_data
arguments: data_label: D113
type_infered: string
name: unpack_data
arguments: data_label: D10
type_infered: f32[4]
name: unpack_data
arguments: data_label: D60
type_infered: f64
name: unpack_data
arguments: data_label: D120
type_infered: string
name: unpack_data
arguments: data_label: D133
type_infered: string

tool: D149: 1

tool: {"D142": [0.0,-1.875]}

tool: D122: 10

tool: D101: Nn

tool: D113: Ss

tool: {"D10": [0.0,-0.0,0.0,0.0]}

tool: D60: 60

tool: D120: EeOo

tool: D133: Ww

assistant: ```c
int parse_coord(const char *s, double *a) {
  double e, f, n = 1.0;
  int r;
  for (; isspace((int)*s); s++)
    ;
  if (*s == '-') {
    s++;
    n = -1.0;
  }
  for (*a = 0.0; isdigit((int)*s); s++) {
    *a *= 10.0;
    *a += *s - '0';
  }
  for (; isspace((int)*s); s++)
    ;
  if (*s == '\0') {
    *a *= n;
    return -1;
  }
  if (((strchr("Nn", (*s)) != NULL) || (strchr("Ss", (*s)) != NULL))) {
    r = 0;
    if ((strchr("Ss", (*s)) != NULL))
      n *= -1.0;
  } else if (((strchr("EeOo", (*s)) != NULL) || (strchr("Ww", (*s)) != NULL))) {
    r = 1;
    if ((strchr("Ww", (*s)) != NULL))
      n *= -1.0;
  } else if (*s == '.') {
    s++;
    for (e = 1.0, f = 0.0; isdigit((int)*s); e *= 10.0, s++) {
      f *= 10.0;
      f += *s - '0';
    }
    *a += f / e;
    *a *= n;
    for (; isspace((int)*s); s++)
      ;
    if (*s == '\0')
      return -1;
    if (((strchr("Nn", (*s)) != NULL) || (strchr("Ss", (*s)) != NULL))) {
      if ((strchr("Ss", (*s)) != NULL))
        *a *= -1.0;
      return 0;
    } else if (((strchr("EeOo", (*s)) != NULL) || (strchr("Ww", (*s)) != NULL))) {
      if ((strchr("Ww", (*s)) != NULL))
        *a *= -1.0;
      return 1;
    } else
      return -1;
  } else {
    *a *= n;
    return -1;
  }
  s++;
  for (; isspace((int)*s); s++)
    ;
  f = atof(s);
  *a += f / 60.0;
  *a *= n;
  return r;
}
```