user: 这段汇编代码用C语言表示是什么样的:

```asm
<arikkei_strtod_simple>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x38(%rbp)
  mov    %esi,-0x3c(%rbp)
  mov    %rdx,-0x48(%rbp)
  mov    -0x38(%rbp),%rax
  mov    %rax,-0x28(%rbp)
  movl   $0x0,-0x2c(%rbp)
  cmpq   $0x0,-0x28(%rbp)
  jne    L167
  mov    $0x0,%eax
  jmp    L197
L121:
  addq   $0x1,-0x28(%rbp)
L167:
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L52
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x20,%al
  je     L121
L52:
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L164
  mov    $0x0,%eax
  jmp    L197
L164:
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2d,%al
  jne    L69
  movsd  D20(%rip),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  addq   $0x1,-0x28(%rbp)
  jmp    L54
L69:
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2b,%al
  jne    L64
  addq   $0x1,-0x28(%rbp)
L64:
  movsd  D21(%rip),%xmm0
  movsd  %xmm0,-0x20(%rbp)
L54:
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  jmp    L99
L186:
  movsd  -0x18(%rbp),%xmm1
  movsd  D41(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  sub    $0x30,%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movl   $0x1,-0x2c(%rbp)
  addq   $0x1,-0x28(%rbp)
L99:
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L57
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2f,%al
  jbe    L57
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x39,%al
  jbe    L186
L57:
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2e,%al
  jne    L49
  addq   $0x1,-0x28(%rbp)
  movsd  D21(%rip),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  jmp    L190
L124:
  movsd  -0x10(%rbp),%xmm1
  movsd  D41(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  sub    $0x30,%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x8(%rbp),%xmm1
  movsd  D41(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movl   $0x1,-0x2c(%rbp)
  addq   $0x1,-0x28(%rbp)
L190:
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L23
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2f,%al
  jbe    L23
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x39,%al
  jbe    L124
L23:
  movsd  -0x10(%rbp),%xmm0
  divsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,-0x10(%rbp)
L49:
  cmpl   $0x0,-0x2c(%rbp)
  jne    L109
  mov    $0x0,%eax
  jmp    L197
L109:
  movsd  -0x18(%rbp),%xmm0
  addsd  -0x10(%rbp),%xmm0
  mulsd  -0x20(%rbp),%xmm0
  mov    -0x48(%rbp),%rax
  movsd  %xmm0,(%rax)
  mov    -0x28(%rbp),%rax
  sub    -0x38(%rbp),%rax
L197:
  pop    %rbp
  ret
```

tool_calls: name: read_data
arguments: data_tag: D20
type: f32[2]
name: read_data
arguments: data_tag: D21
type: f64
name: read_data
arguments: data_tag: D41
type: f64

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

tool: D21: 1

tool: D41: 10

assistant: ```c
unsigned int arikkei_strtod_simple(const unsigned char *str, unsigned int len, double *val) {
  const unsigned char *p;
  double sign, integra, fract;
  unsigned int valid;
  p = str;
  valid = 0;
  if (!p)
    return 0;
  while (*p && (*p == ' '))
    p += 1;
  if (!*p)
    return 0;
  if (*p == '-') {
    sign = -1.0;
    p += 1;
  } else {
    if (*p == '+')
      p += 1;
    sign = 1.0;
  }
  integra = 0.0;
  fract = 0.0;
  while (*p && (*p >= '0') && (*p <= '9')) {
    integra = integra * 10.0 + (double)(*p - '0');
    valid = 1;
    p += 1;
  }
  if (*p == '.') {
    double denom;
    p += 1;
    denom = 1.0;
    while (*p && (*p >= '0') && (*p <= '9')) {
      fract = fract * 10.0 + (double)(*p - '0');
      denom *= 10.0;
      valid = 1;
      p += 1;
    }
    fract = fract / denom;
  }
  if (!valid)
    return 0;
  *val = sign * (integra + fract);
  return (unsigned int)(p - str);
}
```