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

```asm
<encode_double>:
  endbr64
  mulsd  D8(%rip),%xmm0
  push   %rbx
  mov    %rdi,%rbx
  cvttsd2si %xmm0,%edi
  call   <round@plt>
  add    %eax,%eax
  cltd
  xor    %eax,%edx
  mov    %edx,%eax
  mov    %edx,%r8d
  mov    %edx,%ecx
  sar    $0x5,%eax
  and    $0x1f,%r8d
  and    $0x1f,%eax
  mov    %eax,%esi
  setne  %al
  sar    $0xa,%ecx
  mov    %ecx,%edi
  movzbl %al,%eax
  mov    $0x2,%ecx
  and    $0x1f,%edi
  cmovne %ecx,%eax
  mov    %edx,%ecx
  sar    $0xf,%ecx
  and    $0x1f,%ecx
  mov    %ecx,%r9d
  mov    $0x3,%ecx
  cmovne %ecx,%eax
  mov    %edx,%ecx
  sar    $0x19,%edx
  sar    $0x14,%ecx
  and    $0x1f,%ecx
  mov    %ecx,%r10d
  je     L20
  and    $0x1f,%edx
  mov    %edx,%r11d
  je     L89
L31:
  mov    %r8d,%edx
  lea    0x1(%rbx),%rcx
  mov    $0x5,%eax
  or     $0x20,%edx
  add    $0x3f,%edx
  mov    %dl,(%rbx)
L58:
  or     $0x20,%esi
  lea    0x1(%rcx),%rdx
  add    $0x3f,%esi
  mov    %sil,(%rcx)
  cmp    $0x2,%eax
  je     L57
  mov    %edi,%ecx
  or     $0x20,%ecx
  add    $0x3f,%ecx
  mov    %cl,(%rdx)
  cmp    $0x3,%eax
  je     L35
L116:
  mov    %r9d,%ecx
  or     $0x20,%ecx
  add    $0x3f,%ecx
  mov    %cl,0x1(%rdx)
  cmp    $0x4,%eax
  je     L3
  mov    %r10d,%ecx
  lea    0x3f(%r11),%eax
  or     $0x20,%ecx
  mov    %al,0x3(%rdx)
  mov    $0x5,%eax
  add    $0x3f,%ecx
  mov    %cl,0x2(%rdx)
L48:
  add    $0x1,%eax
  movslq %eax,%rdx
  movb   $0x0,(%rbx,%rdx,1)
  pop    %rbx
  ret
L20:
  and    $0x1f,%edx
  mov    %edx,%r11d
  jne    L31
  test   %eax,%eax
  jne    L14
  lea    0x3f(%r8),%edx
  add    $0x1,%eax
  mov    %dl,(%rbx)
  movslq %eax,%rdx
  movb   $0x0,(%rbx,%rdx,1)
  pop    %rbx
  ret
  nopw   0x0(%rax,%rax,1)
L89:
  mov    %r8d,%edx
  mov    %edi,%ecx
  or     $0x20,%esi
  mov    $0x4,%eax
  or     $0x20,%edx
  or     $0x20,%ecx
  add    $0x3f,%esi
  xor    %r11d,%r11d
  add    $0x3f,%edx
  add    $0x3f,%ecx
  mov    %sil,0x1(%rbx)
  mov    %dl,(%rbx)
  lea    0x2(%rbx),%rdx
  mov    %cl,(%rdx)
  cmp    $0x3,%eax
  jne    L116
L35:
  lea    0x3f(%r9),%ecx
  mov    %cl,0x1(%rdx)
  jmp    L48
L14:
  mov    %r8d,%edx
  lea    0x1(%rbx),%rcx
  or     $0x20,%edx
  add    $0x3f,%edx
  mov    %dl,(%rbx)
  cmp    $0x1,%eax
  jne    L34
  add    $0x1,%eax
  add    $0x3f,%esi
  movslq %eax,%rdx
  mov    %sil,0x1(%rbx)
  movb   $0x0,(%rbx,%rdx,1)
  pop    %rbx
  ret
  nopl   0x0(%rax)
L34:
  xor    %r11d,%r11d
  jmp    L58
  nopl   0x0(%rax,%rax,1)
L57:
  add    $0x1,%eax
  add    $0x3f,%edi
  movslq %eax,%rdx
  mov    %dil,0x1(%rcx)
  movb   $0x0,(%rbx,%rdx,1)
  pop    %rbx
  ret
  nopl   0x0(%rax,%rax,1)
L3:
  lea    0x3f(%r10),%ecx
  mov    %cl,0x2(%rdx)
  jmp    L48
```

tool_calls: name: parse_data
arguments: label: D8
type_infered: f64

tool: D8: 100000

assistant: ```c
int encode_double(double c, char *buf) {
  char *b = buf;
  uint32_t mask = 31;
  char chunks[6];
  uint32_t last_chunk = 0;
  uint32_t binary = round(1e5 * c);
  uint8_t i;
  binary <<= 1;
  if ((int32_t)binary < 0)
    binary = ~binary;
  for (i = 0; i < 6; ++i) {
    chunks[i] = (binary & mask) >> (5 * i);
    if (chunks[i] != 0)
      last_chunk = i;
    mask <<= 5;
  }
  for (i = 0; i <= last_chunk; ++i) {
    char out = chunks[i];
    if (i != last_chunk)
      out |= 0x20;
    out += 63;
    *(b++) = out;
  }
  *b = '\0';
  return (b - buf);
}
```