user: What would the C source look like for the assembly code provided here?

```asm
<PrintFP>:
  endbr64
  push   %r13
  pxor   %xmm5,%xmm5
  movapd %xmm0,%xmm1
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rdi,%rbx
  sub    $0x18,%rsp
  comisd %xmm0,%xmm5
  ja     L54
L97:
  comisd D51(%rip),%xmm1
  jae    L48
  pxor   %xmm7,%xmm7
  mov    $0x1,%edx
  ucomisd %xmm7,%xmm1
  setp   %al
  cmovne %edx,%eax
  test   %al,%al
  je     L165
  movsd  D107(%rip),%xmm2
  comisd %xmm1,%xmm2
  jae    L21
L165:
  xor    %ebp,%ebp
L91:
  mov    D103(%rip),%rax
  mov    %ebp,%edi
  movsd  %xmm1,0x8(%rsp)
  movq   %rax,%xmm0
  call   <pow@plt>
  movsd  0x8(%rsp),%xmm1
  xor    %ecx,%ecx
  xor    %edx,%edx
  xor    %esi,%esi
  mov    %rbx,%r8
  divsd  %xmm0,%xmm1
  cvttsd2si %xmm1,%r12
  movsd  %xmm1,0x8(%rsp)
  mov    %r12d,%edi
  call   <PrintInt@plt>
  mov    %rbx,%rsi
  mov    $0x2e,%edi
  call   <PrintCh@plt>
  pxor   %xmm0,%xmm0
  movsd  0x8(%rsp),%xmm1
  pxor   %xmm6,%xmm6
  cvtsi2sd %r12,%xmm0
  subsd  %xmm0,%xmm1
  movsd  D103(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  comisd %xmm0,%xmm6
  ja     L142
  movsd  D107(%rip),%xmm2
  comisd %xmm2,%xmm0
  jb     L45
  mov    $0x6,%r12d
  nopl   (%rax)
L130:
  pxor   %xmm3,%xmm3
  comisd %xmm0,%xmm3
  ja     L156
  mov    D107(%rip),%rax
  movq   %rax,%xmm2
  comisd %xmm2,%xmm0
  jb     L135
L115:
  addsd  %xmm0,%xmm2
  mov    %rbx,%rsi
  movsd  %xmm0,0x8(%rsp)
  cvttsd2si %xmm2,%r13
  lea    0x30(%r13),%edi
  movsbl %dil,%edi
  call   <PrintCh@plt>
  pxor   %xmm1,%xmm1
  movsd  0x8(%rsp),%xmm0
  cvtsi2sd %r13,%xmm1
  subsd  %xmm1,%xmm0
  mulsd  D103(%rip),%xmm0
  sub    $0x1,%r12d
  jne    L130
L135:
  test   %ebp,%ebp
  jne    L17
L28:
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
  nopl   0x0(%rax,%rax,1)
L156:
  movsd  D95(%rip),%xmm4
  comisd %xmm0,%xmm4
  jb     L135
  mov    D107(%rip),%rax
  movq   %rax,%xmm2
  jmp    L115
  nopl   0x0(%rax)
L142:
  movsd  D95(%rip),%xmm1
  mov    $0x6,%r12d
  comisd %xmm0,%xmm1
  jae    L130
L45:
  mov    %rbx,%rsi
  mov    $0x30,%edi
  call   <PrintCh@plt>
  test   %ebp,%ebp
  je     L28
L17:
  mov    %rbx,%rsi
  mov    $0x65,%edi
  call   <PrintCh@plt>
  add    $0x18,%rsp
  mov    %rbx,%r8
  mov    %ebp,%edi
  pop    %rbx
  xor    %ecx,%ecx
  pop    %rbp
  xor    %edx,%edx
  pop    %r12
  xor    %esi,%esi
  pop    %r13
  jmp    10b0 <PrintInt@plt>
L48:
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x8(%rsp)
  call   <log10@plt>
  movsd  0x8(%rsp),%xmm1
  cvttsd2si %xmm0,%ebp
  jmp    L91
  xchg   %ax,%ax
L54:
  mov    %rdi,%rsi
  mov    $0x2d,%edi
  movsd  %xmm0,0x8(%rsp)
  call   <PrintCh@plt>
  movsd  0x8(%rsp),%xmm1
  xorpd  D101(%rip),%xmm1
  jmp    L97
  cs nopw 0x0(%rax,%rax,1)
L21:
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x8(%rsp)
  call   <log10@plt>
  subsd  D24(%rip),%xmm0
  movsd  0x8(%rsp),%xmm1
  cvttsd2si %xmm0,%ebp
  jmp    L91
```

tool_calls: name: parse_data
arguments: data_label: D51
type_infered: f64[2]
name: parse_data
arguments: data_label: D107
type_infered: byte[8]
name: parse_data
arguments: data_label: D103
type_infered: f64
name: parse_data
arguments: data_label: D95
type_infered: byte[8]
name: parse_data
arguments: data_label: D101
type_infered: f32[4]
name: parse_data
arguments: data_label: D24
type_infered: f64

tool: {"D51": [10000000.0,1e-7]}

tool: {"D107": [0x48,0xaf,0xbc,0x9a,0xf2,0xd7,0x7a,0x3e]}

tool: D103: 10

tool: {"D95": [0x48,0xaf,0xbc,0x9a,0xf2,0xd7,0x7a,0xbe]}

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

tool: D24: 0.999999999

assistant: ```c
void PrintFP(double Num, struct OutputStream *Stream) {
  int Exponent = 0;
  int MaxDecimal;
  if (Num < 0) {
    PrintCh('-', Stream);
    Num = -Num;
  }
  if (Num >= 1e7)
    Exponent = log10(Num);
  else if (Num <= 1e-7 && Num != 0.0)
    Exponent = log10(Num) - 0.999999999;
  Num /= pow(10.0, Exponent);
  PrintInt((long)Num, 0, 0, 0, Stream);
  PrintCh('.', Stream);
  Num = (Num - (long)Num) * 10;
  if ((((Num) < 0) ? (-(Num)) : (Num)) >= 1e-7) {
    for (MaxDecimal = 6; MaxDecimal > 0 && (((Num) < 0) ? (-(Num)) : (Num)) >= 1e-7; Num = (Num - (long)(Num + 1e-7)) * 10, MaxDecimal--)
      PrintCh('0' + (long)(Num + 1e-7), Stream);
  } else
    PrintCh('0', Stream);
  if (Exponent != 0) {
    PrintCh('e', Stream);
    PrintInt(Exponent, 0, 0, 0, Stream);
  }
}
```