user: 这段汇编代码用C语言表示是什么样的:

```asm
<_to_float>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x48,%rsp
  mov    %rdi,0x10(%rsp)
  mov    %edx,%r13d
  mov    %ecx,0x18(%rsp)
  mov    0x80(%rsp),%r14d
  mov    %fs:0x28,%rax
  mov    %rax,0x38(%rsp)
  xor    %eax,%eax
  mov    %esi,%eax
  mov    $0x34,%ecx
  sar    %cl,%eax
  and    $0x7ff,%eax
  mov    %esi,%ebp
  shl    $0xb,%ebp
  mov    %ebp,0x30(%rsp)
  cmp    $0x7ff,%eax
  je     L132
  cmp    $0x46,%edx
  mov    $0x66,%edx
  cmove  %edx,%r13d
  or     %eax,%ebp
  je     L508
  lea    -0x3fe(%rax),%ebp
  test   %esi,%esi
  jns    L508
  mov    0x10(%rsp),%rax
  lea    0x1(%rax),%r15
  movb   $0x2d,(%rax)
L512:
  mov    $0x0,%ebx
  lea    0x30(%rsp),%r12
  cmp    $0xfffffffe,%ebp
  jl     L149
L580:
  test   %ebp,%ebp
  jle    L517
  lea    0x30(%rsp),%r12
L591:
  mov    %r12,%rdi
  call   <_ldiv5@plt>
  sub    $0x1,%ebp
  add    $0x1,%ebx
  mov    0x30(%rsp),%eax
  test   %eax,%eax
  js     L180
L56:
  sub    $0x1,%ebp
  add    %eax,%eax
  jns    L56
  mov    %eax,0x30(%rsp)
L180:
  test   %ebp,%ebp
  jg     L591
L517:
  cmp    $0x3,%ebp
  jg     L141
  lea    0x30(%rsp),%r12
L604:
  mov    %r12,%rdi
  call   <_rlrshift@plt>
  add    $0x1,%ebp
  cmp    $0x4,%ebp
  jne    L604
L141:
  test   %r14d,%r14d
  mov    $0x6,%eax
  cmovs  %eax,%r14d
  mov    %r13d,%eax
  and    $0xffffffdf,%eax
  cmp    $0x47,%eax
  jne    L272
  cmpl   $0x0,0x18(%rsp)
  sete   %al
  test   %r14d,%r14d
  setg   %dl
  movzbl %dl,%edx
  and    %eax,%edx
  mov    %edx,0x1c(%rsp)
  cmp    $0xfffffffd,%ebx
  jl     L279
  lea    0x1(%r14),%eax
  cmp    %ebx,%eax
  jge    L518
L279:
  cmp    $0x67,%r13d
  mov    $0x45,%r13d
  mov    $0x65,%eax
  cmove  %eax,%r13d
L522:
  lea    0x1(%r14),%edx
L544:
  mov    $0x10,%eax
  cmp    %eax,%edx
  cmovle %edx,%eax
  mov    %eax,%ebp
  movl   $0x10,0x2c(%rsp)
  movl   $0x0,0x34(%rsp)
  test   %edx,%edx
  je     L496
  lea    0x34(%rsp),%r12
L526:
  mov    %r12,%rdi
  call   <_ldiv5@plt>
  mov    %r12,%rdi
  call   <_rlrshift@plt>
  sub    $0x1,%ebp
  jne    L526
L496:
  mov    0x34(%rsp),%eax
  add    0x30(%rsp),%eax
  mov    %eax,0x30(%rsp)
  mov    $0x20,%ecx
  sar    %cl,%eax
  test   $0xf0000000,%eax
  jne    L2
L611:
  cmp    $0x66,%r13d
  je     L67
  lea    0x2c(%rsp),%rsi
  lea    0x30(%rsp),%rdi
  call   <_get_digit@plt>
  mov    %al,(%r15)
  cmp    $0x30,%al
  setne  %al
  movzbl %al,%eax
  sub    %eax,%ebx
  cmpl   $0x0,0x18(%rsp)
  jne    L189
  test   %r14d,%r14d
  setg   %al
  lea    0x1(%r15),%rbp
  test   %al,%al
  je     L378
L189:
  lea    0x2(%r15),%rbp
  movb   $0x2e,0x1(%r15)
  test   %r14d,%r14d
  jle    L378
  lea    0x2(%r14),%eax
  add    %rax,%r15
  mov    %rbp,%r12
  lea    0x2c(%rsp),%rax
  mov    %rax,0x8(%rsp)
L545:
  lea    0x30(%rsp),%rdi
  mov    0x8(%rsp),%rsi
  call   <_get_digit@plt>
  add    $0x1,%r12
  mov    %al,-0x1(%r12)
  cmp    %r15,%r12
  jne    L545
  mov    %r14d,%r14d
  add    %r14,%rbp
L378:
  cmpl   $0x0,0x1c(%rsp)
  je     L404
  jmp    L558
L132:
  mov    %rdi,%rbx
  test   %esi,%esi
  js     L551
L288:
  test   %ebp,%ebp
  jne    L100
  mov    %r13d,%edi
  call   <isupper@plt>
  test   %rax,%rax
  je     L423
  lea    0x3(%rbx),%rax
  mov    $0x49,%esi
  mov    $0x4e,%ecx
  mov    $0x46,%edx
L284:
  mov    %sil,(%rbx)
  mov    %cl,0x1(%rbx)
  mov    %dl,0x2(%rbx)
  movb   $0x0,(%rax)
  sub    0x10(%rsp),%eax
  jmp    L127
L551:
  lea    0x1(%rdi),%rbx
  movb   $0x2d,(%rdi)
  jmp    L288
L423:
  lea    0x3(%rbx),%rax
  mov    $0x69,%esi
  mov    $0x6e,%ecx
  mov    $0x66,%edx
  jmp    L284
L100:
  mov    %r13d,%edi
  call   <isupper@plt>
  test   %rax,%rax
  je     L504
  lea    0x3(%rbx),%rax
  mov    $0x4e,%esi
  mov    $0x41,%ecx
  mov    $0x4e,%edx
  jmp    L284
L504:
  lea    0x3(%rbx),%rax
  mov    $0x6e,%esi
  mov    $0x61,%ecx
  mov    $0x6e,%edx
  jmp    L284
L508:
  test   %r8d,%r8d
  je     L527
  mov    0x10(%rsp),%rax
  lea    0x1(%rax),%r15
  movb   $0x2b,(%rax)
  jmp    L512
L527:
  mov    0x10(%rsp),%rax
  mov    %rax,%r15
  test   %r9d,%r9d
  je     L512
  lea    0x1(%rax),%r15
  movb   $0x20,(%rax)
  jmp    L512
L113:
  mov    %r12,%rdi
  call   <_rlrshift@plt>
  add    $0x1,%ebp
  mov    0x30(%rsp),%eax
  mov    %eax,%edx
  mov    $0x20,%ecx
  sar    %cl,%edx
  cmp    $0x33333332,%edx
  ja     L113
L472:
  lea    (%rax,%rax,4),%edx
  mov    %edx,%eax
  mov    %edx,0x30(%rsp)
  add    $0x1,%ebp
  sub    $0x1,%ebx
  test   %edx,%edx
  js     L43
L32:
  sub    $0x1,%ebp
  add    %eax,%eax
  jns    L32
  mov    %eax,0x30(%rsp)
L43:
  cmp    $0xfffffffe,%ebp
  jge    L580
L149:
  mov    0x30(%rsp),%eax
  mov    %eax,%edx
  mov    $0x20,%ecx
  sar    %cl,%edx
  cmp    $0x33333332,%edx
  ja     L113
  jmp    L472
L272:
  movl   $0x0,0x1c(%rsp)
  cmp    $0x66,%r13d
  jne    L522
L518:
  mov    %r14d,%edx
  add    %ebx,%edx
  mov    $0x66,%r13d
  jns    L544
  movl   $0x10,0x2c(%rsp)
  movl   $0x0,0x34(%rsp)
  mov    0x30(%rsp),%eax
  mov    $0x20,%ecx
  sar    %cl,%eax
  mov    $0x66,%r13d
  test   $0xf0000000,%eax
  jne    L309
L67:
  test   %ebx,%ebx
  jle    L516
  mov    %ebx,%r12d
  add    %r15,%r12
  mov    %r15,%rbp
  lea    0x2c(%rsp),%rax
  mov    %rax,0x8(%rsp)
L572:
  lea    0x30(%rsp),%rdi
  mov    0x8(%rsp),%rsi
  call   <_get_digit@plt>
  add    $0x1,%rbp
  mov    %al,-0x1(%rbp)
  cmp    %rbp,%r12
  jne    L572
  mov    %ebx,%ebp
  add    %r15,%rbp
  mov    $0x0,%ebx
L326:
  cmpl   $0x0,0x18(%rsp)
  jne    L129
  test   %r14d,%r14d
  jle    L360
L129:
  lea    0x1(%rbp),%rax
  mov    %rax,0x8(%rsp)
  movb   $0x2e,0x0(%rbp)
  test   %r14d,%r14d
  jle    L236
  lea    0x2(%rbp),%r12
  lea    0x2(%r14),%eax
  add    %rax,%rbp
  lea    0x2c(%rsp),%r15
  jmp    L530
L309:
  mov    $0x66,%r13d
L2:
  lea    0x30(%rsp),%rbp
  mov    %rbp,%rdi
  call   <_ldiv5@plt>
  mov    %rbp,%rdi
  call   <_rlrshift@plt>
  add    $0x1,%ebx
  jmp    L611
L516:
  lea    0x1(%r15),%rbp
  movb   $0x30,(%r15)
  jmp    L326
L417:
  lea    0x30(%rsp),%rdi
  mov    %r15,%rsi
  call   <_get_digit@plt>
L613:
  mov    %al,-0x1(%r12)
  add    $0x1,%r12
  cmp    %rbp,%r12
  je     L99
L530:
  test   %ebx,%ebx
  jns    L417
  add    $0x1,%ebx
  mov    $0x30,%eax
  jmp    L613
L122:
  neg    %ebx
  mov    $0x2d,%eax
  jmp    L464
L99:
  mov    %r14d,%ebp
  add    0x8(%rsp),%rbp
L360:
  cmpl   $0x0,0x1c(%rsp)
  je     L329
L558:
  mov    %rbp,%rdx
  sub    $0x1,%rbp
  movzbl 0x0(%rbp),%eax
  cmp    $0x30,%al
  je     L558
  cmp    $0x2e,%al
  cmovne %rdx,%rbp
L404:
  mov    %r13d,%eax
  and    $0xffffffdf,%eax
  cmp    $0x45,%eax
  jne    L329
  mov    %r13b,0x0(%rbp)
  lea    0x2(%rbp),%rdx
  mov    $0x2b,%eax
  test   %ebx,%ebx
  js     L122
L464:
  mov    %al,0x1(%rbp)
  movslq %ebx,%rax
  imul   $0x66666667,%rax,%rax
  sar    $0x22,%rax
  mov    %ebx,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%eax
  lea    0x30(%rax),%ecx
  mov    %cl,(%rdx)
  lea    0x2(%rdx),%rbp
  lea    (%rax,%rax,4),%eax
  add    %eax,%eax
  sub    %eax,%ebx
  lea    0x30(%rbx),%eax
  mov    %al,0x1(%rdx)
L329:
  movb   $0x0,0x0(%rbp)
  mov    %ebp,%eax
  sub    0x10(%rsp),%eax
L127:
  mov    0x38(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L11
  add    $0x48,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L236:
  mov    0x8(%rsp),%rbp
  jmp    L360
L11:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
int _to_float(char *buf, uint64_t double_temp, int c, int falt, int fplus, int fspace, int precision) {
  register int decexp;
  register int exp;
  int sign;
  int digit_count;
  uint64_t fract;
  uint64_t ltemp;
  int prune_zero;
  char *start = buf;
  exp = double_temp >> 52 & 0x7ff;
  fract = (double_temp << 11) & ~(1ull << 63);
  sign = !!(double_temp & (1ull << 63));
  if (exp == 0x7ff) {
    if (sign) {
      *buf++ = '-';
    }
    if (!fract) {
      if (isupper(c)) {
        *buf++ = 'I';
        *buf++ = 'N';
        *buf++ = 'F';
      } else {
        *buf++ = 'i';
        *buf++ = 'n';
        *buf++ = 'f';
      }
    } else {
      if (isupper(c)) {
        *buf++ = 'N';
        *buf++ = 'A';
        *buf++ = 'N';
      } else {
        *buf++ = 'n';
        *buf++ = 'a';
        *buf++ = 'n';
      }
    }
    *buf = 0;
    return buf - start;
  }
  if (c == 'F') {
    c = 'f';
  }
  if ((exp | fract) != 0) {
    exp -= (1023 - 1);
    fract |= (1ull << 63);
    decexp = true;
  } else
    decexp = false;
  if (decexp && sign) {
    *buf++ = '-';
  } else if (fplus) {
    *buf++ = '+';
  } else if (fspace) {
    *buf++ = ' ';
  }
  decexp = 0;
  while (exp <= -3) {
    while ((fract >> 32) >= (0xFFFFFFFF / 5)) {
      _rlrshift(&fract);
      exp++;
    }
    fract *= 5;
    exp++;
    decexp--;
    while ((fract >> 32) <= (0xFFFFFFFF / 2)) {
      fract <<= 1;
      exp--;
    }
  }
  while (exp > 0) {
    _ldiv5(&fract);
    exp--;
    decexp++;
    while ((fract >> 32) <= (0xFFFFFFFF / 2)) {
      fract <<= 1;
      exp--;
    }
  }
  while (exp < (0 + 4)) {
    _rlrshift(&fract);
    exp++;
  }
  if (precision < 0)
    precision = 6;
  prune_zero = false;
  if ((c == 'g') || (c == 'G')) {
    if (!falt && (precision > 0))
      prune_zero = true;
    if ((decexp < (-4 + 1)) || (decexp > (precision + 1))) {
      if (c == 'g')
        c = 'e';
      else
        c = 'E';
    } else
      c = 'f';
  }
  if (c == 'f') {
    exp = precision + decexp;
    if (exp < 0)
      exp = 0;
  } else
    exp = precision + 1;
  digit_count = 16;
  if (exp > 16)
    exp = 16;
  ltemp = 0x0800000000000000;
  while (exp--) {
    _ldiv5(&ltemp);
    _rlrshift(&ltemp);
  }
  fract += ltemp;
  if ((fract >> 32) & 0xF0000000) {
    _ldiv5(&fract);
    _rlrshift(&fract);
    decexp++;
  }
  if (c == 'f') {
    if (decexp > 0) {
      while (decexp > 0) {
        *buf++ = _get_digit(&fract, &digit_count);
        decexp--;
      }
    } else
      *buf++ = '0';
    if (falt || (precision > 0))
      *buf++ = '.';
    while (precision-- > 0) {
      if (decexp < 0) {
        *buf++ = '0';
        decexp++;
      } else
        *buf++ = _get_digit(&fract, &digit_count);
    }
  } else {
    *buf = _get_digit(&fract, &digit_count);
    if (*buf++ != '0')
      decexp--;
    if (falt || (precision > 0))
      *buf++ = '.';
    while (precision-- > 0)
      *buf++ = _get_digit(&fract, &digit_count);
  }
  if (prune_zero) {
    while (*--buf == '0')
      ;
    if (*buf != '.')
      buf++;
  }
  if ((c == 'e') || (c == 'E')) {
    *buf++ = (char)c;
    if (decexp < 0) {
      decexp = -decexp;
      *buf++ = '-';
    } else
      *buf++ = '+';
    *buf++ = (char)((decexp / 10) + '0');
    decexp %= 10;
    *buf++ = (char)(decexp + '0');
  }
  *buf = 0;
  return buf - start;
}
```