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

```asm
<test3l>:
  endbr64
  push   %rbp
  push   %rbx
  mov    %edi,%ebx
  sub    $0xe8,%rsp
  fldt   0x100(%rsp)
  fld    %st(0)
  fstpt  0x20(%rsp)
  fldt   0x110(%rsp)
  fld    %st(0)
  fstpt  0x30(%rsp)
  fldt   0x120(%rsp)
  fstpt  0x40(%rsp)
  fldt   0x130(%rsp)
  fstpt  0x50(%rsp)
  fstpt  0x10(%rsp)
  fstpt  (%rsp)
  call   <ccosl@plt>
  fxch   %st(1)
  add    $0x20,%rsp
  fucomip %st(0),%st
  setp   %dl
  fucomip %st(0),%st
  setp   %al
  or     %al,%dl
  mov    %edx,%ebp
  jne    L273
L422:
  push   0x18(%rsp)
  push   0x18(%rsp)
  push   0x18(%rsp)
  push   0x18(%rsp)
  call   <ctanl@plt>
  fld    %st(0)
  fstpt  0x80(%rsp)
  fxch   %st(1)
  fld    %st(0)
  fstpt  0x90(%rsp)
  fstpt  0x10(%rsp)
  fstpt  (%rsp)
  call   <ccosl@plt>
  fxch   %st(1)
  add    $0x20,%rsp
  fucomip %st(0),%st
  jnp    L123
  fstp   %st(0)
L171:
  xor    %eax,%eax
  call   <link_error@plt>
L378:
  fldt   (%rsp)
  sub    $0x20,%rsp
  fldt   0x40(%rsp)
  fsubrp %st,%st(1)
  fld    %st(0)
  fstpt  0xd0(%rsp)
  fldt   0x30(%rsp)
  fldt   0x50(%rsp)
  fsubrp %st,%st(1)
  fld    %st(0)
  fstpt  0xc0(%rsp)
  fstpt  0x10(%rsp)
  fstpt  (%rsp)
  call   <ctanl@plt>
  fstpt  0x60(%rsp)
  fstpt  0x70(%rsp)
  fldt   0x20(%rsp)
  fldt   0x40(%rsp)
  fsubp  %st,%st(1)
  fld    %st(0)
  fstpt  0xa0(%rsp)
  fldt   0x30(%rsp)
  fldt   0x50(%rsp)
  fsubp  %st,%st(1)
  fld    %st(0)
  fstpt  0xb0(%rsp)
  fstpt  0x10(%rsp)
  fstpt  (%rsp)
  call   <ctanl@plt>
  add    $0x20,%rsp
  mov    $0x1,%edx
  fchs
  fldt   0x40(%rsp)
  fucomip %st(1),%st
  fstp   %st(0)
  setp   %al
  cmovne %edx,%eax
  test   %al,%al
  jne    L430
  fchs
  fldt   0x50(%rsp)
  fucomip %st(1),%st
  fstp   %st(0)
  setp   %al
  cmovne %edx,%eax
  test   %al,%al
  jne    L383
L11:
  push   0x38(%rsp)
  push   0x38(%rsp)
  push   0x38(%rsp)
  push   0x38(%rsp)
  push   0x38(%rsp)
  push   0x38(%rsp)
  push   0x38(%rsp)
  push   0x38(%rsp)
  call   <__divxc3>
  add    $0x20,%rsp
  fld    %st(0)
  fstpt  0x60(%rsp)
  fxch   %st(1)
  fld    %st(0)
  fstpt  0x70(%rsp)
  fstpt  0x10(%rsp)
  fstpt  (%rsp)
  call   <ccosl@plt>
  add    $0x20,%rsp
  fucomip %st(0),%st
  jnp    L334
  fstp   %st(0)
L25:
  xor    %eax,%eax
  call   <link_error@plt>
  xor    %eax,%eax
  call   <link_error@plt>
L498:
  push   0x38(%rsp)
  push   0x38(%rsp)
  push   0x38(%rsp)
  push   0x38(%rsp)
  call   <ctanl@plt>
  fxch   %st(1)
  fstpt  0x10(%rsp)
  fstpt  (%rsp)
  push   0x38(%rsp)
  push   0x38(%rsp)
  push   0x38(%rsp)
  push   0x38(%rsp)
  call   <__divxc3>
  fxch   %st(1)
  add    $0x20,%rsp
  fstpt  0x10(%rsp)
  fstpt  (%rsp)
  call   <ccosl@plt>
  add    $0x20,%rsp
  fucomip %st(0),%st
  jnp    L466
  fstp   %st(0)
L50:
  xor    %eax,%eax
  call   <link_error@plt>
L182:
  fldt   0x30(%rsp)
  fld    %st(0)
  fldt   0x10(%rsp)
  fmul   %st,%st(1)
  fldt   0x20(%rsp)
  fld    %st(0)
  fldt   (%rsp)
  fmul   %st,%st(1)
  fxch   %st(1)
  fsubp  %st,%st(4)
  fxch   %st(1)
  fmulp  %st,%st(2)
  fmulp  %st,%st(3)
  faddp  %st,%st(2)
  fucomi %st(1),%st
  jp     L316
  fxch   %st(1)
L315:
  sub    $0x20,%rsp
  fstpt  0x10(%rsp)
  fstpt  (%rsp)
  call   <ccosl@plt>
  add    $0x20,%rsp
  fucomip %st(0),%st
  jnp    L141
  fstp   %st(0)
L145:
  xor    %eax,%eax
  call   <link_error@plt>
  xor    %eax,%eax
  call   <link_error@plt>
L358:
  fldt   0x70(%rsp)
  fld    %st(0)
  fldt   0x30(%rsp)
  fmul   %st,%st(1)
  fldt   0x20(%rsp)
  fld    %st(0)
  fldt   0x60(%rsp)
  fmul   %st,%st(1)
  fxch   %st(1)
  fsubp  %st,%st(4)
  fxch   %st(4)
  fmul   %st(1),%st
  fxch   %st(2)
  fmulp  %st,%st(4)
  fxch   %st(3)
  faddp  %st,%st(1)
  fucomi %st(1),%st
  jp     L230
  fstp   %st(2)
  fxch   %st(1)
L384:
  sub    $0x20,%rsp
  fstpt  0x10(%rsp)
  fstpt  (%rsp)
  call   <ccosl@plt>
  add    $0x20,%rsp
  fucomip %st(0),%st
  jnp    L206
  fstp   %st(0)
L237:
  xor    %eax,%eax
  call   <link_error@plt>
L248:
  push   0x58(%rsp)
  push   0x58(%rsp)
  push   0x58(%rsp)
  push   0x58(%rsp)
  call   <ctanl@plt>
  fxch   %st(1)
  fstpt  0x10(%rsp)
  fstpt  (%rsp)
  call   <ccosl@plt>
  add    $0x20,%rsp
  fucomip %st(0),%st
  jnp    L234
  fstp   %st(0)
L155:
  xor    %eax,%eax
  call   <link_error@plt>
L314:
  test   %ebx,%ebx
  je     L159
  test   %bpl,%bpl
  jne    L33
L326:
  fldt   0x10(%rsp)
  fld    %st(0)
  fchs
  fldt   (%rsp)
  fucomip %st(0),%st
  jnp    L4
  fstp   %st(1)
L297:
  xor    %eax,%eax
  fstpt  0x20(%rsp)
  call   <link_error@plt>
  fldt   0x20(%rsp)
L390:
  sub    $0x10,%rsp
  fstpt  (%rsp)
  push   0x18(%rsp)
  push   0x18(%rsp)
  call   <ccosl@plt>
  add    $0x20,%rsp
  fucomip %st(0),%st
  jnp    L128
  fstp   %st(0)
L110:
  xor    %eax,%eax
  call   <link_error@plt>
L380:
  fldt   0xa0(%rsp)
  sub    $0x10,%rsp
  fchs
  fstpt  (%rsp)
  push   0xc8(%rsp)
  push   0xc8(%rsp)
  call   <ctanl@plt>
  pop    %rax
  pop    %rdx
  fstpt  0x30(%rsp)
  fstpt  0x40(%rsp)
  fldt   0xa0(%rsp)
  fchs
  fstpt  (%rsp)
  push   0x98(%rsp)
  push   0x98(%rsp)
  call   <ctanl@plt>
  add    $0x20,%rsp
  mov    $0x1,%edx
  fchs
  fldt   0x20(%rsp)
  fucomip %st(1),%st
  fstp   %st(0)
  setp   %al
  cmovne %edx,%eax
  test   %al,%al
  jne    L445
  fchs
  fldt   0x30(%rsp)
  fucomip %st(1),%st
  fstp   %st(0)
  setp   %al
  cmovne %edx,%eax
  test   %al,%al
  jne    L228
L396:
  fldt   0x50(%rsp)
  sub    $0x10,%rsp
  fchs
  fstpt  (%rsp)
  push   0x58(%rsp)
  push   0x58(%rsp)
  call   <ctanl@plt>
  add    $0x20,%rsp
  fucomip %st(0),%st
  jnp    L426
  fstp   %st(0)
L455:
  xor    %eax,%eax
  call   <link_error@plt>
L276:
  push   0x8(%rsp)
  push   0x8(%rsp)
  push   0x28(%rsp)
  push   0x28(%rsp)
  call   <atan2l@plt>
  fstpt  0x40(%rsp)
  add    $0x20,%rsp
  push   0x8(%rsp)
  push   0x8(%rsp)
  push   0x28(%rsp)
  push   0x28(%rsp)
  call   <atan2l@plt>
  fldt   0x40(%rsp)
  add    $0x20,%rsp
  fucomip %st(1),%st
  fstp   %st(0)
  jp     L195
  jne    L195
  add    $0xc8,%rsp
  pop    %rbx
  pop    %rbp
  ret
  nopw   0x0(%rax,%rax,1)
L4:
  fxch   %st(1)
  fucomip %st(0),%st
  jnp    L390
  jmp    L297
  nopw   0x0(%rax,%rax,1)
L159:
  push   0x38(%rsp)
  push   0x38(%rsp)
  push   0x38(%rsp)
  push   0x38(%rsp)
  call   <ccosl@plt>
  add    $0x20,%rsp
  fucomip %st(0),%st
  jnp    L341
  fstp   %st(0)
  xor    %eax,%eax
  call   <link_error@plt>
  xor    %eax,%eax
  call   <link_error@plt>
  nopl   0x0(%rax)
L346:
  push   0x18(%rsp)
  push   0x18(%rsp)
  push   0x18(%rsp)
  push   0x18(%rsp)
  push   0x58(%rsp)
  push   0x58(%rsp)
  push   0x58(%rsp)
  push   0x58(%rsp)
  call   <__divxc3>
  fxch   %st(1)
  add    $0x20,%rsp
  fstpt  0x10(%rsp)
  fstpt  (%rsp)
  call   <ctanl@plt>
  fxch   %st(1)
  fstpt  0x10(%rsp)
  fstpt  (%rsp)
  call   <ccosl@plt>
  fxch   %st(1)
  add    $0x20,%rsp
  fucomip %st(0),%st
  jp     L494
  fucomip %st(0),%st
  jnp    L326
  jmp    L247
  nopl   0x0(%rax)
L494:
  fstp   %st(0)
L247:
  xor    %eax,%eax
  call   <link_error@plt>
  jmp    L326
  cs nopw 0x0(%rax,%rax,1)
L141:
  fucomip %st(0),%st
  jnp    L358
  jmp    L145
  nopl   (%rax)
L466:
  fucomip %st(0),%st
  jnp    L182
  jmp    L50
  nopl   (%rax)
L334:
  fucomip %st(0),%st
  jnp    L498
  jmp    L25
  nopl   (%rax)
L123:
  fucomip %st(0),%st
  jnp    L378
  jmp    L171
  nopl   (%rax)
L234:
  fucomip %st(0),%st
  jnp    L314
  jmp    L155
  nopl   (%rax)
L206:
  fucomip %st(0),%st
  jnp    L248
  jmp    L237
  nopl   (%rax)
L426:
  fucomip %st(0),%st
  jnp    L276
  jmp    L455
  nopl   (%rax)
L128:
  fucomip %st(0),%st
  jnp    L380
  jmp    L110
  nopl   (%rax)
L341:
  fucomip %st(0),%st
  jnp    L346
  xor    %eax,%eax
  call   <link_error@plt>
  xor    %eax,%eax
  call   <link_error@plt>
  jmp    L346
  nopl   0x0(%rax,%rax,1)
L445:
  fstp   %st(0)
L228:
  xor    %eax,%eax
  call   <link_error@plt>
  jmp    L396
  xchg   %ax,%ax
L195:
  add    $0xc8,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  jmp    10a0 <link_error@plt>
L430:
  fstp   %st(0)
L383:
  xor    %eax,%eax
  call   <link_error@plt>
  jmp    L11
  xchg   %ax,%ax
L273:
  xor    %eax,%eax
  call   <link_error@plt>
  jmp    L422
  nopl   0x0(%rax)
L33:
  xor    %eax,%eax
  call   <link_error@plt>
  xor    %eax,%eax
  call   <link_error@plt>
  xor    %eax,%eax
  call   <link_error@plt>
  jmp    L326
L316:
  fstp   %st(0)
  fstp   %st(0)
  push   0x38(%rsp)
  push   0x38(%rsp)
  push   0x38(%rsp)
  push   0x38(%rsp)
  push   0x38(%rsp)
  push   0x38(%rsp)
  push   0x38(%rsp)
  push   0x38(%rsp)
  call   <__mulxc3>
  fxch   %st(1)
  add    $0x40,%rsp
  jmp    L315
L230:
  fstp   %st(0)
  fstp   %st(0)
  push   0x38(%rsp)
  push   0x38(%rsp)
  push   %rcx
  push   %rcx
  fstpt  (%rsp)
  push   0x98(%rsp)
  push   0x98(%rsp)
  push   0x98(%rsp)
  push   0x98(%rsp)
  call   <__mulxc3>
  fxch   %st(1)
  add    $0x40,%rsp
  jmp    L384
```

assistant: ```c
void test3l(__complex__ long double x, __complex__ long double y, int i) {
  if (ccosl(x) != ccosl(-x))
    link_error();
  if (ccosl(ctanl(x)) != ccosl(ctanl(-x)))
    link_error();
  if (ctanl(x - y) != -ctanl(y - x))
    link_error();
  if (ccosl(x / y) != ccosl(-x / y))
    link_error();
  if (ccosl(x / y) != ccosl(x / -y))
    link_error();
  if (ccosl(x / ctanl(y)) != ccosl(-x / ctanl(-y)))
    link_error();
  if (ccosl(x * y) != ccosl(-x * y))
    link_error();
  if (ccosl(x * y) != ccosl(x * -y))
    link_error();
  if (ccosl(ctanl(x) * y) != ccosl(ctanl(-x) * -y))
    link_error();
  if (ccosl(ctanl(x / y)) != ccosl(-ctanl(x / -y)))
    link_error();
  if (ccosl(i ? x : y) != ccosl(i ? -x : y))
    link_error();
  if (ccosl(i ? x : y) != ccosl(i ? x : -y))
    link_error();
  if (ccosl(i ? x : ctanl(y / x)) != ccosl(i ? -x : -ctanl(-y / x)))
    link_error();
  if (~x != -~-x)
    link_error();
  if (ccosl(~x) != ccosl(-~-x))
    link_error();
  if (ctanl(~(x - y)) != -ctanl(~(y - x)))
    link_error();
  if (ctanl(~(x / y)) != -ctanl(~(x / -y)))
    link_error();
  if (cargl(x) != atan2l(__imag__ x, __real__ x))
    link_error();
}
```