user: 提供的汇编代码用C语言表示会是什么样子:

```asm
<__adddf3>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x60,%rsp
  movsd  %xmm0,-0x58(%rbp)
  movsd  %xmm1,-0x60(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    -0x58(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  sar    $0x14,%rax
  and    $0x7ff,%eax
  mov    %eax,-0x48(%rbp)
  mov    -0x48(%rbp),%edx
  lea    -0x60(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  sar    $0x14,%rax
  and    $0x7ff,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  mov    %eax,-0x44(%rbp)
  cmpl   $0x0,-0x44(%rbp)
  jns    L139
  movsd  -0x58(%rbp),%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movsd  -0x60(%rbp),%xmm0
  movsd  %xmm0,-0x58(%rbp)
  movsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,-0x60(%rbp)
  negl   -0x44(%rbp)
  mov    -0x44(%rbp),%eax
  add    %eax,-0x48(%rbp)
L139:
  cmpl   $0x35,-0x44(%rbp)
  jle    L15
  movsd  -0x58(%rbp),%xmm0
  jmp    L189
L15:
  lea    -0x60(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  and    $0x7fffffff,%eax
  test   %rax,%rax
  jne    L154
  movsd  -0x58(%rbp),%xmm0
  jmp    L189
L154:
  lea    -0x58(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  and    $0x80000000,%eax
  mov    %rax,-0x30(%rbp)
  lea    -0x58(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  and    $0xfffff,%eax
  add    $0x100000,%eax
  mov    %eax,-0x40(%rbp)
  lea    -0x58(%rbp),%rax
  mov    (%rax),%rax
  mov    %eax,-0x3c(%rbp)
  lea    -0x60(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  and    $0xfffff,%eax
  add    $0x100000,%eax
  mov    %eax,-0x38(%rbp)
  lea    -0x60(%rbp),%rax
  mov    (%rax),%rax
  mov    %eax,-0x34(%rbp)
  lea    -0x58(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rdx
  lea    -0x60(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  xor    %rdx,%rax
  test   %rax,%rax
  js     L22
  cmpl   $0x1f,-0x44(%rbp)
  jle    L203
  mov    -0x38(%rbp),%eax
  mov    %eax,-0x34(%rbp)
  movl   $0x0,-0x38(%rbp)
  subl   $0x20,-0x44(%rbp)
L203:
  cmpl   $0x0,-0x44(%rbp)
  je     L36
  subl   $0x1,-0x44(%rbp)
  mov    -0x44(%rbp),%eax
  mov    -0x34(%rbp),%edx
  mov    %edx,%esi
  mov    %eax,%ecx
  sar    %cl,%esi
  mov    $0x20,%eax
  sub    -0x44(%rbp),%eax
  mov    -0x38(%rbp),%edx
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  add    %esi,%eax
  mov    %eax,-0x34(%rbp)
  mov    -0x44(%rbp),%eax
  mov    %eax,%ecx
  sarl   %cl,-0x38(%rbp)
  cmpl   $0xffffffff,-0x34(%rbp)
  jne    L322
  addl   $0x1,-0x38(%rbp)
  movl   $0x0,-0x34(%rbp)
  jmp    L24
L322:
  addl   $0x1,-0x34(%rbp)
L24:
  mov    -0x34(%rbp),%eax
  sar    %eax
  mov    %eax,%edx
  mov    -0x38(%rbp),%eax
  shl    $0x1f,%eax
  add    %edx,%eax
  mov    %eax,-0x34(%rbp)
  sarl   -0x38(%rbp)
L36:
  mov    -0x3c(%rbp),%eax
  not    %eax
  cmp    %eax,-0x34(%rbp)
  jle    L34
  addl   $0x1,-0x40(%rbp)
L34:
  mov    -0x34(%rbp),%eax
  add    %eax,-0x3c(%rbp)
  mov    -0x38(%rbp),%eax
  add    %eax,-0x40(%rbp)
  cmpl   $0x1fffff,-0x40(%rbp)
  jle    L269
  cmpl   $0xffffffff,-0x3c(%rbp)
  jne    L168
  addl   $0x1,-0x40(%rbp)
  movl   $0x0,-0x3c(%rbp)
  jmp    L330
L168:
  addl   $0x1,-0x3c(%rbp)
L330:
  mov    -0x3c(%rbp),%eax
  sar    %eax
  mov    %eax,%edx
  mov    -0x40(%rbp),%eax
  shl    $0x1f,%eax
  add    %edx,%eax
  mov    %eax,-0x3c(%rbp)
  sarl   -0x40(%rbp)
  addl   $0x1,-0x48(%rbp)
  jmp    L269
L22:
  cmpl   $0x35,-0x44(%rbp)
  jle    L85
  movsd  -0x58(%rbp),%xmm0
  jmp    L189
L85:
  cmpl   $0x0,-0x44(%rbp)
  jne    L289
  mov    -0x38(%rbp),%eax
  cmp    -0x40(%rbp),%eax
  jg     L278
  mov    -0x38(%rbp),%eax
  cmp    -0x40(%rbp),%eax
  jne    L289
  mov    -0x34(%rbp),%eax
  cmp    -0x3c(%rbp),%eax
  jl     L289
L278:
  mov    $0x80000000,%eax
  xor    %rax,-0x30(%rbp)
  mov    -0x38(%rbp),%eax
  sub    -0x40(%rbp),%eax
  mov    %eax,-0x40(%rbp)
  mov    -0x34(%rbp),%eax
  cmp    -0x3c(%rbp),%eax
  jge    L272
  subl   $0x1,-0x40(%rbp)
L272:
  mov    -0x34(%rbp),%eax
  sub    -0x3c(%rbp),%eax
  mov    %eax,-0x3c(%rbp)
  jmp    L265
L289:
  cmpl   $0x20,-0x44(%rbp)
  jle    L27
  mov    -0x44(%rbp),%eax
  sub    $0x20,%eax
  mov    -0x38(%rbp),%edx
  mov    %eax,%ecx
  sar    %cl,%edx
  mov    %edx,%eax
  add    $0x1,%eax
  sar    %eax
  mov    %eax,-0x34(%rbp)
  movl   $0x0,-0x38(%rbp)
  jmp    L82
L27:
  cmpl   $0x0,-0x44(%rbp)
  je     L82
  mov    -0x44(%rbp),%eax
  sub    $0x1,%eax
  mov    -0x34(%rbp),%edx
  mov    %edx,%esi
  mov    %eax,%ecx
  sar    %cl,%esi
  mov    $0x21,%eax
  sub    -0x44(%rbp),%eax
  mov    -0x38(%rbp),%edx
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  add    %esi,%eax
  mov    %eax,-0x34(%rbp)
  mov    -0x44(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,%ecx
  sarl   %cl,-0x38(%rbp)
  cmpl   $0xffffffff,-0x34(%rbp)
  jne    L91
  addl   $0x1,-0x38(%rbp)
  movl   $0x0,-0x34(%rbp)
  jmp    L307
L91:
  addl   $0x1,-0x34(%rbp)
L307:
  mov    -0x34(%rbp),%eax
  sar    %eax
  mov    %eax,%edx
  mov    -0x38(%rbp),%eax
  shl    $0x1f,%eax
  add    %edx,%eax
  mov    %eax,-0x34(%rbp)
  sarl   -0x38(%rbp)
L82:
  mov    -0x38(%rbp),%eax
  sub    %eax,-0x40(%rbp)
  mov    -0x34(%rbp),%eax
  cmp    -0x3c(%rbp),%eax
  jle    L14
  subl   $0x1,-0x40(%rbp)
L14:
  mov    -0x34(%rbp),%eax
  sub    %eax,-0x3c(%rbp)
L265:
  mov    -0x40(%rbp),%eax
  or     -0x3c(%rbp),%eax
  test   %eax,%eax
  jne    L258
  pxor   %xmm0,%xmm0
  jmp    L189
L277:
  mov    -0x40(%rbp),%eax
  lea    (%rax,%rax,1),%edx
  mov    -0x3c(%rbp),%eax
  sar    $0x1f,%eax
  add    %edx,%eax
  mov    %eax,-0x40(%rbp)
  shll   -0x3c(%rbp)
  subl   $0x1,-0x48(%rbp)
L258:
  cmpl   $0xfffff,-0x40(%rbp)
  jle    L277
  cmpl   $0x0,-0x48(%rbp)
  jg     L269
  mov    -0x30(%rbp),%rax
  mov    %rax,-0x18(%rbp)
  movq   $0x0,-0x20(%rbp)
  lea    -0x20(%rbp),%rax
  movsd  (%rax),%xmm0
  jmp    L189
L269:
  mov    -0x48(%rbp),%eax
  shl    $0x14,%eax
  movslq %eax,%rdx
  mov    -0x30(%rbp),%rax
  add    %rax,%rdx
  mov    -0x40(%rbp),%eax
  cltq
  and    $0xfffff,%eax
  add    %rdx,%rax
  mov    %rax,-0x18(%rbp)
  mov    -0x3c(%rbp),%eax
  cltq
  mov    %rax,-0x20(%rbp)
  lea    -0x20(%rbp),%rax
  movsd  (%rax),%xmm0
L189:
  movq   %xmm0,%rax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L157
  call   <__stack_chk_fail@plt>
L157:
  movq   %rax,%xmm0
  leave
  ret
```

assistant: ```c
double __adddf3(double a, double b) {
  long lc[2];
  int expt = ((((const long *)&a)[1] >> 20) & 0x7ff);
  int shift = expt - ((((const long *)&b)[1] >> 20) & 0x7ff);
  long sign;
  ulong msa, lsa;
  ulong msb, lsb;
  if (shift < 0) {
    double temp = a;
    a = b, b = temp;
    expt += (shift = -shift);
  }
  if (shift >= 54)
    return a;
  if (!(((const long *)&b)[1] & 0x7fffffff))
    return a;
  sign = ((const long *)&a)[1] & 0x80000000;
  msa = (((const long *)&a)[1] & 0xfffff) + 0x100000, lsa = ((const long *)&a)[0];
  msb = (((const long *)&b)[1] & 0xfffff) + 0x100000, lsb = ((const long *)&b)[0];
  if ((((const long *)&a)[1] ^ ((const long *)&b)[1]) >= 0) {
    if (shift >= 32)
      lsb = msb, msb = 0, shift -= 32;
    if (shift) {
      --shift;
      lsb = (lsb >> shift) + (msb << (32 - shift));
      msb >>= shift;
      if (lsb == 0xffffffff)
        msb++, lsb = 0;
      else
        lsb++;
      lsb = (lsb >> 1) + (msb << 31);
      msb >>= 1;
    }
    if (lsb > (ulong)0xffffffff - lsa)
      msa++;
    lsa += lsb;
    msa += msb;
    if (msa > 0x1fffff) {
      if (lsa == 0xffffffff)
        msa++, lsa = 0;
      else
        lsa++;
      lsa = (lsa >> 1) + (msa << 31);
      msa >>= 1;
      ++expt;
    }
  } else {
    if (shift > 53)
      return a;
    if (shift == 0 && (msb > msa || (msb == msa && lsb >= lsa))) {
      sign ^= 0x80000000;
      msa = msb - msa;
      if (lsb < lsa)
        msa--;
      lsa = lsb - lsa;
    } else {
      if (shift >= 33) {
        lsb = ((msb >> (shift - 32)) + 1) >> 1;
        msb = 0;
      } else if (shift) {
        lsb = (lsb >> (shift - 1)) + (msb << (33 - shift));
        msb >>= shift - 1;
        if (lsb == 0xffffffff)
          msb++, lsb = 0;
        else
          lsb++;
        lsb = (lsb >> 1) + (msb << 31);
        msb >>= 1;
      }
      msa -= msb;
      if (lsb > lsa)
        msa--;
      lsa -= lsb;
    }
    if (!(msa | lsa))
      return 0;
    while (msa < 0x100000) {
      msa = (msa << 1) + (lsa >> 31);
      lsa <<= 1;
      expt -= 1;
    }
    if (expt <= 0) {
      lc[1] = sign;
      lc[0] = 0;
      return (*(const double *)lc);
    }
  }
  lc[1] = sign + ((ulong)expt << 20) + (msa & 0xfffff);
  lc[0] = lsa;
  return (*(const double *)lc);
}
```