user: 请将这段汇编代码片段转换成等效的C代码：

```asm
<strtod_flags>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x60,%rsp
  mov    %rdi,-0x48(%rbp)
  mov    %rsi,-0x50(%rbp)
  mov    %edx,-0x54(%rbp)
  mov    -0x48(%rbp),%rax
  mov    %rax,-0x20(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  D15(%rip),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movl   $0x0,-0x34(%rbp)
  movl   $0x0,-0x30(%rbp)
  movl   $0x0,-0x2c(%rbp)
  movl   $0x0,-0x28(%rbp)
  nop
L191:
  mov    -0x20(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x20(%rbp)
  movzbl (%rax),%eax
  mov    %al,-0x35(%rbp)
  movsbl -0x35(%rbp),%eax
  mov    %eax,%edi
  call   <isspace@plt>
  test   %rax,%rax
  jne    L191
  mov    -0x54(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  jne    L282
  movsbl -0x35(%rbp),%eax
  cmp    $0x2b,%eax
  je     L101
  cmp    $0x2d,%eax
  jne    L282
  movl   $0x1,-0x34(%rbp)
L101:
  mov    -0x20(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x20(%rbp)
  movzbl (%rax),%eax
  mov    %al,-0x35(%rbp)
L282:
  cmpb   $0x2e,-0x35(%rbp)
  jne    L25
  mov    -0x54(%rbp),%eax
  and    $0x2,%eax
  test   %eax,%eax
  je     L126
L25:
  cmpb   $0x2c,-0x35(%rbp)
  jne    L307
  mov    -0x54(%rbp),%eax
  and    $0x4,%eax
  test   %eax,%eax
  jne    L307
L126:
  cmpl   $0x0,-0x28(%rbp)
  jne    L350
  movl   $0x1,-0x28(%rbp)
  jmp    L39
L307:
  cmpb   $0x2f,-0x35(%rbp)
  jle    L11
  cmpb   $0x39,-0x35(%rbp)
  jg     L11
  addl   $0x1,-0x2c(%rbp)
  movsd  -0x10(%rbp),%xmm1
  movsd  D48(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsbl -0x35(%rbp),%eax
  sub    $0x30,%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  cmpl   $0x0,-0x28(%rbp)
  je     L43
  movsd  -0x8(%rbp),%xmm1
  movsd  D48(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  jmp    L43
L11:
  cmpb   $0x65,-0x35(%rbp)
  je     L260
  cmpb   $0x45,-0x35(%rbp)
  jne    L77
L260:
  mov    -0x54(%rbp),%eax
  and    $0x8,%eax
  test   %eax,%eax
  je     L209
  jmp    L367
L43:
  nop
L39:
  mov    -0x20(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x20(%rbp)
  movzbl (%rax),%eax
  mov    %al,-0x35(%rbp)
  jmp    L282
L209:
  nop
  cmpl   $0x0,-0x2c(%rbp)
  je     L107
  mov    -0x20(%rbp),%rax
  mov    %rax,-0x18(%rbp)
  mov    -0x18(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x18(%rbp)
  movzbl (%rax),%eax
  mov    %al,-0x35(%rbp)
  movsbl -0x35(%rbp),%eax
  cmp    $0x2b,%eax
  je     L252
  cmp    $0x2d,%eax
  jne    L334
  movl   $0x1,-0x30(%rbp)
L252:
  mov    -0x18(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x18(%rbp)
  movzbl (%rax),%eax
  mov    %al,-0x35(%rbp)
L334:
  cmpb   $0x2f,-0x35(%rbp)
  jle    L402
  cmpb   $0x39,-0x35(%rbp)
  jg     L402
  mov    -0x18(%rbp),%rax
  mov    %rax,-0x20(%rbp)
  movsbl -0x35(%rbp),%eax
  sub    $0x30,%eax
  mov    %eax,-0x24(%rbp)
L145:
  mov    -0x20(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x20(%rbp)
  movzbl (%rax),%eax
  mov    %al,-0x35(%rbp)
  cmpb   $0x2f,-0x35(%rbp)
  jle    L135
  cmpb   $0x39,-0x35(%rbp)
  jg     L135
  mov    -0x24(%rbp),%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  add    %eax,%eax
  mov    %eax,-0x24(%rbp)
  movsbl -0x35(%rbp),%eax
  sub    $0x30,%eax
  add    %eax,-0x24(%rbp)
  jmp    L145
L135:
  cmpl   $0x134,-0x24(%rbp)
  jle    L400
  movl   $0x134,-0x24(%rbp)
  jmp    L400
L319:
  cmpl   $0x0,-0x30(%rbp)
  je     L170
  movsd  -0x8(%rbp),%xmm1
  movsd  D48(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  jmp    L400
L170:
  movsd  -0x8(%rbp),%xmm0
  movsd  D48(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
L400:
  mov    -0x24(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    %edx,-0x24(%rbp)
  test   %eax,%eax
  jg     L319
  jmp    L402
L350:
  nop
  jmp    L367
L77:
  nop
  jmp    L367
L107:
  nop
  jmp    L367
L402:
  nop
L367:
  cmpl   $0x0,-0x2c(%rbp)
  je     L325
  cmpq   $0x0,-0x50(%rbp)
  je     L227
  mov    -0x20(%rbp),%rax
  lea    -0x1(%rax),%rdx
  mov    -0x50(%rbp),%rax
  mov    %rdx,(%rax)
L227:
  cmpl   $0x0,-0x34(%rbp)
  je     L148
  movsd  -0x10(%rbp),%xmm0
  movq   D44(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  jmp    L85
L148:
  movsd  -0x10(%rbp),%xmm0
L85:
  divsd  -0x8(%rbp),%xmm0
  jmp    L384
L325:
  nop
  cmpq   $0x0,-0x50(%rbp)
  je     L399
  mov    -0x50(%rbp),%rax
  mov    -0x48(%rbp),%rdx
  mov    %rdx,(%rax)
L399:
  pxor   %xmm0,%xmm0
L384:
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_tag: D15
type: f64
name: parse_data
arguments: data_tag: D48
type: f32[2]
name: parse_data
arguments: data_tag: D44
type: f32[2]

tool: D15: 1

tool: {"D48": [0.0,2.5625]}

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

assistant: ```c
double strtod_flags(const char *str, const char **ptr, unsigned int flags) {
  char c;
  const char *p = str, *ep;
  double val = 0.0;
  double decimal = 1.0;
  int sign = 0, esign = 0;
  int numbers = 0, dot = 0;
  while (isspace(c = *p++))
    ;
  if (!(flags & 0x01)) {
    switch (c) {
    case '-':
      sign = 1;
    case '+':
      c = *p++;
    }
  }
  for (;; c = *p++) {
    if ((c == '.' && !(flags & 0x02)) || (c == ',' && !(flags & 0x04))) {
      if (dot)
        goto done;
      dot = 1;
      continue;
    }
    if (c >= '0' && c <= '9') {
      numbers++;
      val = (val * 10) + (c - '0');
      if (dot)
        decimal *= 10;
      continue;
    }
    if (c != 'e' && c != 'E')
      goto done;
    if (flags & 0x08)
      goto done;
    break;
  }
  if (!numbers)
    goto done;
  ep = p;
  c = *ep++;
  switch (c) {
  case '-':
    esign = 1;
  case '+':
    c = *ep++;
  }
  if (c >= '0' && c <= '9') {
    p = ep;
    int exponent = c - '0';
    for (;;) {
      c = *p++;
      if (c < '0' || c > '9')
        break;
      exponent *= 10;
      exponent += c - '0';
    }
    if (exponent > 308)
      exponent = 308;
    while (exponent-- > 0) {
      if (esign)
        decimal *= 10;
      else
        decimal /= 10;
    }
  }
done:
  if (!numbers)
    goto no_conversion;
  if (ptr)
    *ptr = p - 1;
  return (sign ? -val : val) / decimal;
no_conversion:
  if (ptr)
    *ptr = str;
  return 0.0;
}
```