user: Please show me the C implementation that matches the assembly code listed below:

```asm
<testl>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %edi,-0x14(%rbp)
  mov    %rsi,-0x20(%rbp)
  movl   $0x0,-0x4(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <__finitel@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <__fpclassifyl@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <__isinfl@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <__isnanl@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <__signbitl@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <acoshl@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <acosl@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <asinhl@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <asinl@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <atan2l@plt>
  add    $0x20,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <atanhl@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <atanl@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <cbrtl@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <ceill@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <copysignl@plt>
  add    $0x20,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <coshl@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <cosl@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <erfcl@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <erfl@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <exp2l@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <expl@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <expm1l@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <fabsl@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <fdiml@plt>
  add    $0x20,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <floorl@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  fldt   0x10(%rbp)
  fldt   0x10(%rbp)
  fxch   %st(2)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <fmal@plt>
  add    $0x30,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <fmaxl@plt>
  add    $0x20,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <fminl@plt>
  add    $0x20,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <fmodl@plt>
  add    $0x20,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  lea    -0x14(%rbp),%rax
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  mov    %rax,%rdi
  call   <frexpl@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <hypotl@plt>
  add    $0x20,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <ilogbl@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  mov    -0x14(%rbp),%eax
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  mov    %eax,%edi
  call   <ldexpl@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <lgammal@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <llrintl@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <llroundl@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <log10l@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <log1pl@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <logbl@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <logl@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <lrintl@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <lroundl@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  lea    0x10(%rbp),%rdi
  call   <modfl@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <nearbyintl@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <nextafterl@plt>
  add    $0x20,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <powl@plt>
  add    $0x20,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <remainderl@plt>
  add    $0x20,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  fldt   0x10(%rbp)
  lea    -0x14(%rbp),%rax
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  mov    %rax,%rdi
  call   <remquol@plt>
  add    $0x20,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <rintl@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <roundl@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  mov    -0x20(%rbp),%rax
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  mov    %rax,%rdi
  call   <scalblnl@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  mov    -0x14(%rbp),%eax
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  mov    %eax,%edi
  call   <scalbnl@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <sinhl@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <sinl@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <sqrtl@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <tanhl@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <tanl@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <tgammal@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  fldt   0x10(%rbp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  call   <truncl@plt>
  add    $0x10,%rsp
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  mov    -0x4(%rbp),%eax
  leave
  ret
```

assistant: ```c
int testl(long double long_double_x, int int_x, long long_x) {
  int r = 0;
  r += __finitel(long_double_x);
  r += __fpclassifyl(long_double_x);
  r += __isinfl(long_double_x);
  r += __isnanl(long_double_x);
  r += __signbitl(long_double_x);
  r += acoshl(long_double_x);
  r += acosl(long_double_x);
  r += asinhl(long_double_x);
  r += asinl(long_double_x);
  r += atan2l(long_double_x, long_double_x);
  r += atanhl(long_double_x);
  r += atanl(long_double_x);
  r += cbrtl(long_double_x);
  r += ceill(long_double_x);
  r += copysignl(long_double_x, long_double_x);
  r += coshl(long_double_x);
  r += cosl(long_double_x);
  r += erfcl(long_double_x);
  r += erfl(long_double_x);
  r += exp2l(long_double_x);
  r += expl(long_double_x);
  r += expm1l(long_double_x);
  r += fabsl(long_double_x);
  r += fdiml(long_double_x, long_double_x);
  r += floorl(long_double_x);
  r += fmal(long_double_x, long_double_x, long_double_x);
  r += fmaxl(long_double_x, long_double_x);
  r += fminl(long_double_x, long_double_x);
  r += fmodl(long_double_x, long_double_x);
  r += frexpl(long_double_x, &int_x);
  r += hypotl(long_double_x, long_double_x);
  r += ilogbl(long_double_x);
  r += ldexpl(long_double_x, int_x);
  r += lgammal(long_double_x);
  r += llrintl(long_double_x);
  r += llroundl(long_double_x);
  r += log10l(long_double_x);
  r += log1pl(long_double_x);
  r += logbl(long_double_x);
  r += logl(long_double_x);
  r += lrintl(long_double_x);
  r += lroundl(long_double_x);
  r += modfl(long_double_x, &long_double_x);
  r += nearbyintl(long_double_x);
  r += nextafterl(long_double_x, long_double_x);
  r += powl(long_double_x, long_double_x);
  r += remainderl(long_double_x, long_double_x);
  r += remquol(long_double_x, long_double_x, &int_x);
  r += rintl(long_double_x);
  r += roundl(long_double_x);
  r += scalblnl(long_double_x, long_x);
  r += scalbnl(long_double_x, int_x);
  r += sinhl(long_double_x);
  r += sinl(long_double_x);
  r += sqrtl(long_double_x);
  r += tanhl(long_double_x);
  r += tanl(long_double_x);
  r += tgammal(long_double_x);
  r += truncl(long_double_x);
  return r;
}
```