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

```asm
<streamtod>:
  endbr64
  mov    %rsi,%rcx
  mov    %rdx,%r8
  cmp    %rsi,%rdi
  je     L93
  movzbl (%rdi),%eax
  cmp    $0x2d,%al
  je     L271
  mov    $0x0,%r9d
  cmp    $0x2b,%al
  jne    L125
  add    $0x1,%rdi
  jmp    L292
L271:
  add    $0x1,%rdi
  mov    $0x1,%r9d
L292:
  cmp    %rdi,%rcx
  je     L198
L125:
  pxor   %xmm0,%xmm0
  movsd  D1(%rip),%xmm2
L365:
  movzbl (%rdi),%eax
  lea    -0x30(%rax),%edx
  cmp    $0x9,%dl
  ja     L283
  mulsd  %xmm2,%xmm0
  movsbl %al,%eax
  sub    $0x30,%eax
  pxor   %xmm1,%xmm1
  cvtsi2sd %eax,%xmm1
  addsd  %xmm1,%xmm0
  add    $0x1,%rdi
  cmp    %rdi,%rcx
  jne    L365
L327:
  mov    %rcx,%rax
L89:
  test   %r9d,%r9d
  jne    L284
  mov    %rcx,%rax
  jmp    L92
L283:
  cmp    %rdi,%rcx
  je     L300
  cmp    $0x2e,%al
  je     L255
  mov    %rdi,%rax
  test   %r9d,%r9d
  je     L205
L284:
  xorpd  D25(%rip),%xmm0
L174:
  cmp    %rcx,%rax
  je     L298
L205:
  movzbl (%rax),%edx
  and    $0xffffffdf,%edx
  cmp    $0x45,%dl
  jne    L92
  movzbl 0x1(%rax),%edx
  cmp    $0x2d,%dl
  je     L14
  cmp    $0x2b,%dl
  je     L227
  add    $0x1,%rax
  mov    $0x0,%r9d
L130:
  cmp    %rax,%rcx
  je     L92
  mov    $0x0,%edx
L101:
  movzbl (%rax),%esi
  lea    -0x30(%rsi),%edi
  cmp    $0x9,%dil
  ja     L346
  lea    (%rdx,%rdx,4),%edx
  movsbl %sil,%esi
  lea    -0x30(%rsi,%rdx,2),%edx
  add    $0x1,%rax
  cmp    %rax,%rcx
  jne    L101
L346:
  test   %edx,%edx
  je     L92
  cmp    $0x1,%edx
  jle    L77
  movsd  D1(%rip),%xmm1
  movapd %xmm1,%xmm2
L111:
  mulsd  %xmm2,%xmm1
  sub    $0x1,%edx
  cmp    $0x1,%edx
  jne    L111
L312:
  test   %r9d,%r9d
  je     L9
  divsd  %xmm1,%xmm0
L92:
  movsd  %xmm0,(%r8)
  ret
L255:
  lea    0x1(%rdi),%rax
  movsd  D33(%rip),%xmm2
  movapd %xmm2,%xmm3
  cmp    %rax,%rcx
  je     L89
L188:
  movzbl (%rax),%edx
  lea    -0x30(%rdx),%esi
  cmp    $0x9,%sil
  ja     L141
  movsbl %dl,%edx
  sub    $0x30,%edx
  pxor   %xmm1,%xmm1
  cvtsi2sd %edx,%xmm1
  mulsd  %xmm2,%xmm1
  addsd  %xmm1,%xmm0
  mulsd  %xmm3,%xmm2
  add    $0x1,%rax
  cmp    %rax,%rcx
  jne    L188
  jmp    L89
L141:
  test   %r9d,%r9d
  je     L174
  jmp    L284
L14:
  add    $0x2,%rax
  mov    $0x1,%r9d
  jmp    L130
L227:
  add    $0x2,%rax
  mov    $0x0,%r9d
  jmp    L130
L77:
  movsd  D1(%rip),%xmm1
  jmp    L312
L9:
  mulsd  %xmm1,%xmm0
  jmp    L92
L298:
  mov    %rcx,%rax
  jmp    L92
L93:
  mov    $0x0,%r9d
  pxor   %xmm0,%xmm0
  jmp    L327
L198:
  pxor   %xmm0,%xmm0
  jmp    L327
L300:
  mov    %rdi,%rax
  jmp    L89
```

tool_calls: name: read_data
arguments: label: D1
datatype: f64
name: read_data
arguments: label: D25
datatype: f32[4]
name: read_data
arguments: label: D33
datatype: byte[8]

tool: D1: 10

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

tool: {"D33": [0x00,0x00,0x00,0xa0,0x99,0x99,0xb9,0x3f]}

assistant: ```c
const char *streamtod(const char *first, const char *last, double *out) {
  int negative = 0;
  double result = 0;
  double inv_base = 0.1f;
  int exponent_negative = 0;
  int exponent = 0;
  double power_of_ten = 10;
  if (first != last) {
    if (*first == '-') {
      negative = 1;
      ++first;
    } else if (*first == '+') {
      ++first;
    }
  }
  for (; first != last && (*first >= '0' && *first <= '9'); ++first) {
    result = (10 * result) + (*first - '0');
  }
  if (first != last && *first == '.') {
    ++first;
    for (; first != last && (*first >= '0' && *first <= '9'); ++first) {
      result += (*first - '0') * inv_base;
      inv_base *= 0.1f;
    }
  }
  if (negative) {
    result *= -1;
  }
  if (first != last && (*first == 'e' || *first == 'E')) {
    ++first;
    if (*first == '-') {
      exponent_negative = 1;
      ++first;
    } else if (*first == '+') {
      ++first;
    }
    for (; first != last && (*first >= '0' && *first <= '9'); ++first) {
      exponent = 10 * exponent + (*first - '0');
    }
  }
  if (exponent) {
    for (; exponent > 1; exponent--) {
      power_of_ten *= 10;
    }
    if (exponent_negative) {
      result /= power_of_ten;
    } else {
      result *= power_of_ten;
    }
  }
  *out = result;
  return first;
}
```