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

```asm
<streamtod>:
  endbr64
  mov    %rdx,%r8
  cmp    %rsi,%rdi
  je     L244
  movzbl (%rdi),%ecx
  cmp    $0x2d,%cl
  je     L113
  mov    %rdi,%rax
  xor    %r9d,%r9d
  cmp    $0x2b,%cl
  je     L243
L174:
  movsd  D46(%rip),%xmm2
  pxor   %xmm0,%xmm0
  jmp    L98
  nopl   0x0(%rax)
L44:
  mulsd  %xmm2,%xmm0
  movsbl %dl,%edx
  pxor   %xmm1,%xmm1
  add    $0x1,%rax
  cvtsi2sd %edx,%xmm1
  addsd  %xmm1,%xmm0
  cmp    %rax,%rsi
  je     L278
  movzbl (%rax),%ecx
L98:
  lea    -0x30(%rcx),%edx
  cmp    $0x9,%dl
  jbe    L44
  cmp    $0x2e,%cl
  je     L310
L22:
  test   %r9d,%r9d
  je     L317
  xorpd  D56(%rip),%xmm0
L317:
  cmp    %rsi,%rax
  je     L157
  movzbl (%rax),%edx
  and    $0xffffffdf,%edx
  cmp    $0x45,%dl
  jne    L157
  movzbl 0x1(%rax),%edx
  cmp    $0x2d,%dl
  je     L1
  cmp    $0x2b,%dl
  je     L96
  add    $0x1,%rax
  xor    %edi,%edi
L235:
  cmp    %rax,%rsi
  je     L157
  xor    %edx,%edx
  jmp    L245
  xchg   %ax,%ax
L122:
  lea    (%rdx,%rdx,4),%edx
  movsbl %cl,%ecx
  add    $0x1,%rax
  lea    (%rcx,%rdx,2),%edx
  cmp    %rax,%rsi
  je     L289
L245:
  movzbl (%rax),%ecx
  sub    $0x30,%ecx
  cmp    $0x9,%cl
  jbe    L122
L289:
  test   %edx,%edx
  je     L157
  cmp    $0x1,%edx
  je     L314
  movsd  D46(%rip),%xmm2
  movapd %xmm2,%xmm1
  cs nopw 0x0(%rax,%rax,1)
L218:
  mulsd  %xmm2,%xmm1
  sub    $0x1,%edx
  cmp    $0x1,%edx
  jne    L218
L121:
  test   %edi,%edi
  je     L70
  divsd  %xmm1,%xmm0
L157:
  movsd  %xmm0,(%r8)
  ret
  xchg   %ax,%ax
L113:
  lea    0x1(%rdi),%rax
  movsd  D56(%rip),%xmm0
  cmp    %rax,%rsi
  je     L157
  movzbl 0x1(%rdi),%ecx
  mov    $0x1,%r9d
  jmp    L174
L244:
  pxor   %xmm0,%xmm0
  mov    %rdi,%rax
  movsd  %xmm0,(%r8)
  ret
  nopl   (%rax)
L310:
  movsd  D69(%rip),%xmm3
  add    $0x1,%rax
  movapd %xmm3,%xmm2
  cmp    %rax,%rsi
  je     L49
  nopl   (%rax)
L23:
  movzbl (%rax),%edi
  lea    -0x30(%rdi),%edx
  cmp    $0x9,%dl
  ja     L22
  movsbl %dl,%edx
  pxor   %xmm1,%xmm1
  add    $0x1,%rax
  cvtsi2sd %edx,%xmm1
  mulsd  %xmm2,%xmm1
  mulsd  %xmm3,%xmm2
  addsd  %xmm1,%xmm0
  cmp    %rax,%rsi
  jne    L23
L49:
  test   %r9d,%r9d
  jne    L83
  mov    %rsi,%rax
  jmp    L157
L96:
  add    $0x2,%rax
  xor    %edi,%edi
  jmp    L235
  nop
L70:
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,(%r8)
  ret
  nopw   0x0(%rax,%rax,1)
L278:
  test   %r9d,%r9d
  je     L157
L83:
  xorpd  D56(%rip),%xmm0
  movsd  %xmm0,(%r8)
  ret
  nopw   0x0(%rax,%rax,1)
L243:
  add    $0x1,%rax
  cmp    %rax,%rsi
  je     L116
  movzbl 0x1(%rdi),%ecx
  jmp    L174
  nopw   0x0(%rax,%rax,1)
L1:
  add    $0x2,%rax
  mov    $0x1,%edi
  jmp    L235
L314:
  movsd  D46(%rip),%xmm1
  jmp    L121
L116:
  pxor   %xmm0,%xmm0
  jmp    L157
```

tool_calls: name: unpack_data
arguments: data_tag: D46
type_infered: f64
name: unpack_data
arguments: data_tag: D56
type_infered: f32[4]
name: unpack_data
arguments: data_tag: D69
type_infered: byte[8]

tool: D46: 10

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

tool: {"D69": [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;
}
```