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

```asm
<do_gfmt>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x50,%rsp
  movsd  %xmm0,-0x28(%rbp)
  mov    %rdi,-0x30(%rbp)
  mov    %esi,-0x34(%rbp)
  mov    %edx,-0x38(%rbp)
  mov    %ecx,-0x3c(%rbp)
  mov    %r8d,-0x40(%rbp)
  mov    %r9d,-0x44(%rbp)
  cmpl   $0x0,-0x38(%rbp)
  je     L9
  mov    -0x38(%rbp),%eax
  jmp    L104
L9:
  mov    $0x1,%eax
L104:
  mov    -0x30(%rbp),%rcx
  mov    -0x28(%rbp),%rdx
  mov    %rcx,%rsi
  mov    %eax,%edi
  movq   %rdx,%xmm0
  mov    $0x1,%eax
  call   <gcvt@plt>
  cltq
  mov    %rax,-0x10(%rbp)
  mov    -0x30(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,-0x1c(%rbp)
  cmpq   $0x0,-0x10(%rbp)
  jne    L121
  mov    -0x30(%rbp),%rax
  movb   $0x0,(%rax)
  mov    -0x30(%rbp),%rax
  jmp    L115
L121:
  cmpl   $0x0,-0x40(%rbp)
  je     L36
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2d,%al
  je     L36
  mov    -0x1c(%rbp),%eax
  add    $0x1,%eax
  movslq %eax,%rdx
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rcx
  mov    -0x30(%rbp),%rax
  mov    %rax,%rsi
  mov    %rcx,%rdi
  call   <memmove@plt>
  mov    -0x30(%rbp),%rax
  movb   $0x2b,(%rax)
  addl   $0x1,-0x1c(%rbp)
L36:
  cmpl   $0x0,-0x3c(%rbp)
  je     L38
  mov    -0x10(%rbp),%rax
  mov    $0x2e,%esi
  mov    %rax,%rdi
  call   <strchr@plt>
  test   %rax,%rax
  jne    L38
  mov    -0x30(%rbp),%rax
  lea    D5(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcspn@plt>
  mov    %eax,-0x18(%rbp)
  mov    -0x18(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,-0x14(%rbp)
  cmpl   $0x0,-0x14(%rbp)
  je     L43
  mov    -0x14(%rbp),%eax
  cltq
  mov    -0x18(%rbp),%edx
  movslq %edx,%rcx
  mov    -0x30(%rbp),%rdx
  lea    (%rcx,%rdx,1),%rsi
  mov    -0x18(%rbp),%edx
  movslq %edx,%rdx
  lea    0x1(%rdx),%rcx
  mov    -0x30(%rbp),%rdx
  add    %rdx,%rcx
  mov    %rax,%rdx
  mov    %rcx,%rdi
  call   <memmove@plt>
L43:
  mov    -0x18(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  movb   $0x2e,(%rax)
  mov    -0x18(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    -0x14(%rbp),%eax
  add    %edx,%eax
  movslq %eax,%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
L38:
  cmpl   $0x0,0x18(%rbp)
  je     L123
  mov    -0x30(%rbp),%rax
  mov    $0x65,%esi
  mov    %rax,%rdi
  call   <strchr@plt>
  mov    %rax,-0x8(%rbp)
  cmpq   $0x0,-0x8(%rbp)
  je     L123
  mov    -0x8(%rbp),%rax
  movb   $0x45,(%rax)
L123:
  mov    -0x34(%rbp),%eax
  cmp    -0x1c(%rbp),%eax
  jle    L49
  mov    -0x44(%rbp),%edx
  mov    -0x34(%rbp),%esi
  mov    -0x30(%rbp),%rax
  mov    0x10(%rbp),%ecx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <Fill@plt>
  cltq
  jmp    L115
L49:
  mov    -0x30(%rbp),%rax
L115:
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_label: D5
type_infered: string

tool: D5: eE

assistant: ```c
char *do_gfmt(d, obuf, Width, Precision, Alt, Plus, Minus, Zero, UpperCase)
char *obuf;
double d;
{
  char *Ecvt = gcvt(d, Precision ? Precision : 1, obuf);
  int len = strlen(obuf);
  if (!Ecvt) {
    *obuf = '\0';
    return obuf;
  }
  if (Plus && (Ecvt[0] != '-')) {
    memmove(obuf + 1, obuf, len + 1);
    obuf[0] = '+';
    ++len;
  }
  if (Alt && !strchr(Ecvt, '.')) {
    int LenUpTo_E = strcspn(obuf, "eE");
    int E_etc_len = strlen(&obuf[LenUpTo_E]);
    if (E_etc_len)
      memmove(obuf + LenUpTo_E + 1, obuf + LenUpTo_E, E_etc_len);
    obuf[LenUpTo_E] = '.';
    obuf[LenUpTo_E + 1 + E_etc_len] = '\0';
  }
  {
    char *E_loc;
    if (UpperCase && (E_loc = strchr(obuf, 'e'))) {
      *E_loc = 'E';
    }
  }
  if (Width > len)
    return Fill(obuf, Width, Minus, Zero);
  else
    return obuf;
}
```