user: 下面的汇编指令对应的C源代码是什么：

```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    L314
  nopw   0x0(%rax,%rax,1)
L227:
  add    $0x1,%rbx
L314:
  movsbl (%rbx),%edi
  call   <isspace@plt>
  test   %rax,%rax
  jne    L227
  movsd  D126(%rip),%xmm3
  cmpb   $0x2d,(%rbx)
  movsd  %xmm3,0x8(%rsp)
  jne    L125
  movsd  D44(%rip),%xmm6
  add    $0x1,%rbx
  movsd  %xmm6,0x8(%rsp)
L125:
  pxor   %xmm0,%xmm0
  jmp    L176
  nopl   0x0(%rax)
L283:
  movsd  D75(%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
L176:
  movsd  %xmm0,(%r12)
  movsbl (%rbx),%edi
  call   <isdigit@plt>
  test   %rax,%rax
  jne    L283
  movsbl (%rbx),%edi
  call   <isspace@plt>
  test   %rax,%rax
  je     L69
  nopl   0x0(%rax,%rax,1)
L184:
  movsbl 0x1(%rbx),%edi
  add    $0x1,%rbx
  call   <isspace@plt>
  test   %rax,%rax
  jne    L184
L69:
  movsbl (%rbx),%esi
  test   %sil,%sil
  jne    L241
L223:
  movsd  0x8(%rsp),%xmm0
  mulsd  (%r12),%xmm0
  movsd  %xmm0,(%r12)
L28:
  mov    $0xffffffff,%r13d
L183:
  add    $0x28,%rsp
  mov    %r13d,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L241:
  lea    D52(%rip),%rbp
  mov    %rbp,%rdi
  call   <strchr@plt>
  test   %rax,%rax
  je     L31
  lea    D118(%rip),%r15
L242:
  movsbl (%rbx),%esi
  mov    %r15,%rdi
  call   <strchr@plt>
  test   %rax,%rax
  je     L303
  movsd  0x8(%rsp),%xmm5
  xorpd  D97(%rip),%xmm5
  movsd  %xmm5,0x8(%rsp)
L303:
  xor    %r13d,%r13d
L0:
  lea    0x1(%rbx),%rbp
  jmp    L5
L297:
  add    $0x1,%rbp
L5:
  movsbl 0x0(%rbp),%edi
  call   <isspace@plt>
  test   %rax,%rax
  jne    L297
  mov    %rbp,%rdi
  call   <atof@plt>
  divsd  D159(%rip),%xmm0
  addsd  (%r12),%xmm0
  mulsd  0x8(%rsp),%xmm0
  movsd  %xmm0,(%r12)
  jmp    L183
  nopl   0x0(%rax)
L31:
  lea    D118(%rip),%r15
  movsbl (%rbx),%esi
  mov    %r15,%rdi
  call   <strchr@plt>
  test   %rax,%rax
  jne    L242
  lea    D62(%rip),%r14
  movsbl (%rbx),%esi
  mov    %r14,%rdi
  call   <strchr@plt>
  test   %rax,%rax
  je     L243
  lea    D12(%rip),%r13
L45:
  movsbl (%rbx),%esi
  mov    %r13,%rdi
  call   <strchr@plt>
  test   %rax,%rax
  je     L173
  movsd  0x8(%rsp),%xmm7
  xorpd  D97(%rip),%xmm7
  movsd  %xmm7,0x8(%rsp)
L173:
  mov    $0x1,%r13d
  jmp    L0
L243:
  lea    D12(%rip),%r13
  movsbl (%rbx),%esi
  mov    %r13,%rdi
  call   <strchr@plt>
  test   %rax,%rax
  jne    L45
  cmpb   $0x2e,(%rbx)
  jne    L223
  movsd  D126(%rip),%xmm1
  add    $0x1,%rbx
  pxor   %xmm0,%xmm0
  jmp    L287
L169:
  movsbl (%rbx),%eax
  pxor   %xmm2,%xmm2
  add    $0x1,%rbx
  mulsd  D75(%rip),%xmm0
  mulsd  D75(%rip),%xmm1
  sub    $0x30,%eax
  cvtsi2sd %eax,%xmm2
  addsd  %xmm2,%xmm0
L287:
  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    L169
  divsd  %xmm1,%xmm0
  addsd  (%r12),%xmm0
  mulsd  0x8(%rsp),%xmm0
  movsd  %xmm0,(%r12)
  jmp    L70
L36:
  add    $0x1,%rbx
L70:
  movsbl (%rbx),%edi
  call   <isspace@plt>
  test   %rax,%rax
  jne    L36
  movzbl (%rbx),%eax
  test   %al,%al
  je     L28
  movsbl %al,%esi
  mov    %rbp,%rdi
  call   <strchr@plt>
  test   %rax,%rax
  je     L301
L290:
  movsbl (%rbx),%esi
  mov    %r15,%rdi
  call   <strchr@plt>
  test   %rax,%rax
  je     L93
  movsd  (%r12),%xmm0
  xorpd  D97(%rip),%xmm0
  movsd  %xmm0,(%r12)
L93:
  xor    %r13d,%r13d
  jmp    L183
L301:
  movsbl (%rbx),%esi
  mov    %r15,%rdi
  call   <strchr@plt>
  test   %rax,%rax
  jne    L290
  movsbl (%rbx),%esi
  mov    %r14,%rdi
  call   <strchr@plt>
  test   %rax,%rax
  je     L98
L137:
  movsbl (%rbx),%esi
  mov    %r13,%rdi
  call   <strchr@plt>
  test   %rax,%rax
  je     L236
  movsd  (%r12),%xmm0
  xorpd  D97(%rip),%xmm0
  movsd  %xmm0,(%r12)
L236:
  mov    $0x1,%r13d
  jmp    L183
L98:
  movsbl (%rbx),%esi
  mov    %r13,%rdi
  call   <strchr@plt>
  test   %rax,%rax
  jne    L137
  jmp    L28
```

tool_calls: name: retrieve_data
arguments: data_tag: D126
datatype: f64
name: retrieve_data
arguments: data_tag: D44
datatype: f32[2]
name: retrieve_data
arguments: data_tag: D75
datatype: f64
name: retrieve_data
arguments: data_tag: D52
datatype: string
name: retrieve_data
arguments: data_tag: D118
datatype: string
name: retrieve_data
arguments: data_tag: D97
datatype: f32[4]
name: retrieve_data
arguments: data_tag: D159
datatype: f64
name: retrieve_data
arguments: data_tag: D62
datatype: string
name: retrieve_data
arguments: data_tag: D12
datatype: string

tool: D126: 1

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

tool: D75: 10

tool: D52: Nn

tool: D118: Ss

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

tool: D159: 60

tool: D62: EeOo

tool: D12: 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;
}
```