user: 请从给定的汇编指令推导出C源代码：

```asm
<check_long_double>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x100,%rsp
  fldt   0xed2(%rip)        # 2000 <_fini+0xc48>
  fstpt  -0x100(%rbp)
  fldz
  fchs
  fstpt  -0xf0(%rbp)
  fldt   -0xf0(%rbp)
  fldt   -0x100(%rbp)
  fstpt  -0x80(%rbp)
  fstpt  -0x70(%rbp)
  fldz
  fchs
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  fldt   0xe9e(%rip)        # 2000 <_fini+0xc48>
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  push   -0x68(%rbp)
  push   -0x70(%rbp)
  push   -0x78(%rbp)
  push   -0x80(%rbp)
  mov    $0x0,%eax
  call   <comparecl@plt>
  add    $0x40,%rsp
  fldt   0x2ea6(%rip)        # 4030 <cs.3>
  fldt   0x2eb0(%rip)        # 4040 <cs.3+0x10>
  fldz
  fchs
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  fldt   0xe5e(%rip)        # 2000 <_fini+0xc48>
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  mov    $0x0,%eax
  call   <comparecl@plt>
  add    $0x40,%rsp
  fldt   0xe42(%rip)        # 2010 <_fini+0xc58>
  fstpt  -0xe0(%rbp)
  fldz
  fchs
  fstpt  -0xd0(%rbp)
  fldt   -0xd0(%rbp)
  fldt   -0xe0(%rbp)
  fstpt  -0x60(%rbp)
  fstpt  -0x50(%rbp)
  fldz
  fchs
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  fldt   0xe0e(%rip)        # 2010 <_fini+0xc58>
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  push   -0x48(%rbp)
  push   -0x50(%rbp)
  push   -0x58(%rbp)
  push   -0x60(%rbp)
  mov    $0x0,%eax
  call   <comparecl@plt>
  add    $0x40,%rsp
  fldt   0x2e26(%rip)        # 4050 <cs.2>
  fldt   0x2e30(%rip)        # 4060 <cs.2+0x10>
  fldz
  fchs
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  fldt   0xdce(%rip)        # 2010 <_fini+0xc58>
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  mov    $0x0,%eax
  call   <comparecl@plt>
  add    $0x40,%rsp
  fldt   0xda2(%rip)        # 2010 <_fini+0xc58>
  fstpt  -0xc0(%rbp)
  fldt   0xd86(%rip)        # 2000 <_fini+0xc48>
  fstpt  -0xb0(%rbp)
  fldt   -0xb0(%rbp)
  fldt   -0xc0(%rbp)
  fstpt  -0x40(%rbp)
  fstpt  -0x30(%rbp)
  fldt   0xd68(%rip)        # 2000 <_fini+0xc48>
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  fldt   0xd6a(%rip)        # 2010 <_fini+0xc58>
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  push   -0x28(%rbp)
  push   -0x30(%rbp)
  push   -0x38(%rbp)
  push   -0x40(%rbp)
  mov    $0x0,%eax
  call   <comparecl@plt>
  add    $0x40,%rsp
  fldt   0x2da2(%rip)        # 4070 <cs.1>
  fldt   0x2dac(%rip)        # 4080 <cs.1+0x10>
  fldt   0xd26(%rip)        # 2000 <_fini+0xc48>
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  fldt   0xd28(%rip)        # 2010 <_fini+0xc58>
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  mov    $0x0,%eax
  call   <comparecl@plt>
  add    $0x40,%rsp
  fldt   0xcfc(%rip)        # 2010 <_fini+0xc58>
  fstpt  -0xa0(%rbp)
  fldt   0xcf0(%rip)        # 2010 <_fini+0xc58>
  fstpt  -0x90(%rbp)
  fldt   -0x90(%rbp)
  fldt   -0xa0(%rbp)
  fstpt  -0x20(%rbp)
  fstpt  -0x10(%rbp)
  fldt   0xcd2(%rip)        # 2010 <_fini+0xc58>
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  fldt   0xcc4(%rip)        # 2010 <_fini+0xc58>
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  push   -0x8(%rbp)
  push   -0x10(%rbp)
  push   -0x18(%rbp)
  push   -0x20(%rbp)
  mov    $0x0,%eax
  call   <comparecl@plt>
  add    $0x40,%rsp
  fldt   0x2d1c(%rip)        # 4090 <cs.0>
  fldt   0x2d26(%rip)        # 40a0 <cs.0+0x10>
  fldt   0xc90(%rip)        # 2010 <_fini+0xc58>
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  fldt   0xc82(%rip)        # 2010 <_fini+0xc58>
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  mov    $0x0,%eax
  call   <comparecl@plt>
  add    $0x40,%rsp
  nop
  leave
  ret
```

assistant: ```c
void check_long_double(void) {
  do {
    do {
      long double a = __builtin_nanl("");
      long double b = -0.0l;
      _Complex long double cr = __builtin_complex(a, b);
      static _Complex long double cs = __builtin_complex(__builtin_nanl(""), -0.0l);
      comparecl(cr, __builtin_nanl(""), -0.0l);
      comparecl(cs, __builtin_nanl(""), -0.0l);
    } while (0);
    do {
      long double a = __builtin_infl();
      long double b = -0.0l;
      _Complex long double cr = __builtin_complex(a, b);
      static _Complex long double cs = __builtin_complex(__builtin_infl(), -0.0l);
      comparecl(cr, __builtin_infl(), -0.0l);
      comparecl(cs, __builtin_infl(), -0.0l);
    } while (0);
    do {
      long double a = __builtin_infl();
      long double b = __builtin_nanl("");
      _Complex long double cr = __builtin_complex(a, b);
      static _Complex long double cs = __builtin_complex(__builtin_infl(), __builtin_nanl(""));
      comparecl(cr, __builtin_infl(), __builtin_nanl(""));
      comparecl(cs, __builtin_infl(), __builtin_nanl(""));
    } while (0);
    do {
      long double a = __builtin_infl();
      long double b = __builtin_infl();
      _Complex long double cr = __builtin_complex(a, b);
      static _Complex long double cs = __builtin_complex(__builtin_infl(), __builtin_infl());
      comparecl(cr, __builtin_infl(), __builtin_infl());
      comparecl(cs, __builtin_infl(), __builtin_infl());
    } while (0);
  } while (0);
}
```