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

```asm
<gcvt>:
  endbr64
  push   %r12
  mov    %rsi,%r8
  push   %rbp
  push   %rbx
  cmp    $0xffffffff,%edi
  je     L170
  mov    %rdi,%rdx
  mov    $0x14,%edi
  pxor   %xmm4,%xmm4
  mov    %rsi,%rbx
  cmp    %rdi,%rdx
  cmovbe %rdx,%rdi
  xor    %r9d,%r9d
  comisd %xmm0,%xmm4
  mov    %edi,%eax
  ja     L162
  test   %rdx,%rdx
  je     L182
L8:
  movsd  D97(%rip),%xmm2
  movsd  D40(%rip),%xmm1
  nopw   0x0(%rax,%rax,1)
L74:
  mulsd  %xmm1,%xmm2
  sub    $0x1,%eax
  jne    L74
  movsd  D0(%rip),%xmm7
  movsd  D11(%rip),%xmm6
  movapd %xmm7,%xmm3
  divsd  %xmm2,%xmm3
  addsd  %xmm0,%xmm3
  comisd %xmm6,%xmm3
  jae    L337
  cvttsd2si %xmm3,%rcx
  test   %rcx,%rcx
  js     L89
L213:
  pxor   %xmm5,%xmm5
  cvtsi2sd %rcx,%xmm5
L100:
  ucomisd %xmm4,%xmm0
  movapd %xmm0,%xmm3
  subsd  %xmm5,%xmm3
  jp     L423
  je     L142
L423:
  comisd %xmm1,%xmm0
  mov    $0x1,%r10d
  mov    $0x1,%r12d
  jb     L278
  nopl   0x0(%rax)
L433:
  divsd  %xmm1,%xmm0
  add    $0x1,%r10d
  comisd %xmm1,%xmm0
  jae    L433
  movslq %r10d,%r12
L278:
  cmp    $0x9,%rcx
  jbe    L96
  mov    %rcx,%rdx
  mov    $0x1,%r11d
  movabs $0xcccccccccccccccd,%rbp
  cs nopw 0x0(%rax,%rax,1)
L196:
  mov    %rdx,%rax
  mov    %rdx,%rsi
  add    $0x1,%r11d
  mul    %rbp
  shr    $0x3,%rdx
  cmp    $0x63,%rsi
  ja     L196
  cmp    %r10d,%r11d
  jle    L96
  lea    0x2(%rdi,%r12,1),%r11
  add    %rbx,%r11
L328:
  movb   $0x0,(%r11)
  test   %rdi,%rdi
  je     L244
  mulsd  %xmm2,%xmm3
  lea    -0x1(%r11),%rbp
  addsd  %xmm7,%xmm3
  comisd %xmm6,%xmm3
  jae    L155
  cvttsd2si %xmm3,%rsi
L405:
  movabs $0xcccccccccccccccd,%rbx
  not    %rdi
  mov    %rbp,%r10
  add    %rdi,%r11
  nopl   0x0(%rax,%rax,1)
L72:
  mov    %rsi,%rax
  sub    $0x1,%r10
  mul    %rbx
  shr    $0x3,%rdx
  lea    (%rdx,%rdx,4),%rax
  add    %rax,%rax
  sub    %rax,%rsi
  add    $0x30,%esi
  mov    %sil,0x1(%r10)
  mov    %rdx,%rsi
  cmp    %r11,%r10
  jne    L72
  movb   $0x2e,(%r10)
  add    %rbp,%rdi
  jmp    L385
  nopl   0x0(%rax,%rax,1)
L337:
  subsd  %xmm6,%xmm3
  cvttsd2si %xmm3,%rcx
  btc    $0x3f,%rcx
  test   %rcx,%rcx
  jns    L213
L89:
  mov    %rcx,%rax
  mov    %rcx,%rdx
  pxor   %xmm5,%xmm5
  shr    %rax
  and    $0x1,%edx
  or     %rdx,%rax
  cvtsi2sd %rax,%xmm5
  addsd  %xmm5,%xmm5
  jmp    L100
  nopl   0x0(%rax,%rax,1)
L162:
  xorpd  D39(%rip),%xmm0
  lea    0x1(%rsi),%rbx
  mov    $0x1,%r9d
  test   %rdx,%rdx
  jne    L8
L182:
  ucomisd %xmm4,%xmm0
  jp     L422
  jne    L422
  movb   $0x30,(%rbx)
  lea    0x1(%rbx),%rdx
  jmp    L353
  nopw   0x0(%rax,%rax,1)
L170:
  pxor   %xmm4,%xmm4
  comisd %xmm0,%xmm4
  ja     L291
  mov    %r8,%rbx
  xor    %r9d,%r9d
  mov    $0x5,%edi
  mov    $0x5,%eax
  jmp    L8
  nopl   0x0(%rax,%rax,1)
L244:
  movb   $0x0,-0x1(%r11)
  lea    -0x2(%r11),%rdi
L385:
  movabs $0xcccccccccccccccd,%r10
  nopl   0x0(%rax,%rax,1)
L412:
  mov    %rcx,%rax
  sub    $0x1,%rdi
  mul    %r10
  mov    %rcx,%rax
  shr    $0x3,%rdx
  lea    (%rdx,%rdx,4),%rsi
  add    %rsi,%rsi
  sub    %rsi,%rax
  add    $0x30,%eax
  mov    %al,0x1(%rdi)
  mov    %rcx,%rax
  mov    %rdx,%rcx
  cmp    $0x9,%rax
  ja     L412
  test   %r9d,%r9d
  je     L159
  movb   $0x2d,(%rdi)
L159:
  pop    %rbx
  mov    %r8,%rax
  pop    %rbp
  pop    %r12
  ret
  nopl   (%rax)
L96:
  lea    0x1(%rdi,%r12,1),%r11
  add    %rbx,%r11
  jmp    L328
  nopl   (%rax)
L142:
  test   %rdi,%rdi
  mov    $0x1,%eax
  mov    $0x2e30,%r9d
  cmovne %rdi,%rax
  mov    %r9w,(%rbx)
  lea    0x2(%rbx),%rdx
  movabs $0x3030303030303030,%rdi
  cmp    $0x8,%eax
  jae    L127
  test   $0x4,%al
  jne    L283
  test   %eax,%eax
  je     L320
  movb   $0x30,(%rdx)
  test   $0x2,%al
  jne    L319
L320:
  add    %rax,%rdx
L353:
  movb   $0x0,(%rdx)
  mov    %r8,%rax
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
  xchg   %ax,%ax
L155:
  subsd  %xmm6,%xmm3
  cvttsd2si %xmm3,%rsi
  btc    $0x3f,%rsi
  jmp    L405
  nopl   0x0(%rax,%rax,1)
L127:
  mov    %rdi,0x2(%rbx)
  mov    %eax,%ecx
  add    $0xa,%rbx
  mov    %rdi,-0x8(%rdx,%rcx,1)
  and    $0xfffffffffffffff8,%rbx
  mov    %rdx,%rcx
  sub    %rbx,%rcx
  add    %eax,%ecx
  and    $0xfffffff8,%ecx
  cmp    $0x8,%ecx
  jb     L320
  and    $0xfffffff8,%ecx
  mov    %ecx,%esi
  xor    %ecx,%ecx
L52:
  mov    %ecx,%r9d
  add    $0x8,%ecx
  mov    %rdi,(%rbx,%r9,1)
  cmp    %esi,%ecx
  jb     L52
  jmp    L320
  nopw   0x0(%rax,%rax,1)
L291:
  lea    0x1(%rsi),%rbx
  mov    $0x1,%r9d
  mov    $0x5,%edi
  mov    $0x5,%eax
  xorpd  D39(%rip),%xmm0
  jmp    L8
L283:
  mov    %eax,%ecx
  movl   $0x30303030,(%rdx)
  movl   $0x30303030,-0x4(%rdx,%rcx,1)
  jmp    L320
L319:
  mov    %eax,%ecx
  mov    $0x3030,%esi
  mov    %si,-0x2(%rdx,%rcx,1)
  jmp    L320
L422:
  movsd  D0(%rip),%xmm7
  movapd %xmm0,%xmm1
  movsd  D11(%rip),%xmm6
  addsd  %xmm7,%xmm1
  comisd %xmm6,%xmm1
  jae    L146
  cvttsd2si %xmm1,%rcx
L418:
  test   %rcx,%rcx
  js     L193
  pxor   %xmm1,%xmm1
  cvtsi2sd %rcx,%xmm1
L365:
  movapd %xmm0,%xmm3
  movsd  D97(%rip),%xmm2
  xor    %edi,%edi
  subsd  %xmm1,%xmm3
  movsd  D40(%rip),%xmm1
  jmp    L423
L146:
  subsd  %xmm6,%xmm1
  cvttsd2si %xmm1,%rcx
  btc    $0x3f,%rcx
  jmp    L418
L193:
  mov    %rcx,%rax
  mov    %rcx,%rdx
  pxor   %xmm1,%xmm1
  shr    %rax
  and    $0x1,%edx
  or     %rdx,%rax
  cvtsi2sd %rax,%xmm1
  addsd  %xmm1,%xmm1
  jmp    L365
```

tool_calls: name: disassemble_data
arguments: data_tag: D97
type: f32[2]
name: disassemble_data
arguments: data_tag: D40
type: f64
name: disassemble_data
arguments: data_tag: D0
type: f64
name: disassemble_data
arguments: data_tag: D11
type: f32[2]
name: disassemble_data
arguments: data_tag: D39
type: f32[4]

tool: {"D97": [0.0,1.875]}

tool: D40: 10

tool: D0: 0.5

tool: {"D11": [0.0,448.0]}

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

assistant: ```c
char *gcvt(double f, size_t ndigit, char *buf) {
  int i;
  int l1, l2;
  unsigned long long z, k, k2;
  int exp = 0;
  char *c = buf;
  double f2, t, scal;
  int sign = 0;
  if ((int)ndigit == -1)
    ndigit = 5;
  if (ndigit > 20)
    ndigit = 20;
  if (f < 0.0) {
    sign = 1;
    f = -f;
    buf++;
  }
  scal = 1;
  for (i = ndigit; i > 0; i--)
    scal *= 10;
  k = f + 0.5 / scal;
  f2 = f - k;
  if (!f) {
    (*(buf++) = ('0'));
    if (ndigit > 0)
      (*(buf++) = ('.'));
    for (i = 0; i < ndigit; i++)
      (*(buf++) = ('0'));
    (*(buf++) = (0));
    return c;
  }
  i = 1;
  while (f >= 10.0) {
    f /= 10.0;
    i++;
  }
  l1 = i;
  k2 = k;
  l2 = 1;
  do {
    if (k2 >= 10) {
      l2++;
    }
    k2 /= 10;
  } while (k2);
  if (l2 > l1) {
    buf += i + ndigit + 2;
  } else {
    buf += i + ndigit + 1;
  }
  (*(buf--) = (0));
  if (ndigit > 0) {
    t = f2 * scal;
    z = t + 0.5;
    for (i = 0; i < ndigit; i++) {
      (*(buf--) = ('0' + (z % 10)));
      z /= 10;
    }
    (*(buf--) = ('.'));
  } else
    (*(buf--) = (0));
  l2 = 1;
  do {
    (*(buf--) = ('0' + (k % 10)));
    if (k >= 10) {
      l2++;
    }
    k /= 10;
  } while (k);
  if (sign)
    (*(buf--) = ('-'));
  return c;
}
```