user: 请将以下的汇编代码转换成C语言代码:

```asm
<check>:
  endbr64
  push   %r15
  mov    %edi,%r15d
  push   %r14
  mov    %esi,%r14d
  push   %r13
  mov    %edx,%r13d
  push   %r12
  mov    %ecx,%r12d
  push   %rbp
  mov    %r8d,%ebp
  push   %rbx
  mov    %r9d,%ebx
  sub    $0x28,%rsp
  movaps %xmm0,(%rsp)
  movaps %xmm1,0x10(%rsp)
  call   <__eqtf2>
  xor    %edx,%edx
  test   %rax,%rax
  sete   %dl
  cmp    %r15d,%edx
  jne    1060 <check.cold>
  test   %rax,%rax
  movdqa 0x10(%rsp),%xmm1
  setne  %al
  movzbl %al,%eax
  cmp    %r14d,%eax
  jne    1060 <check.cold>
  movdqa (%rsp),%xmm0
  call   <__letf2>
  shr    $0x3f,%rax
  cmp    %r13d,%eax
  jne    1060 <check.cold>
  movdqa 0x10(%rsp),%xmm1
  movdqa (%rsp),%xmm0
  call   <__letf2>
  test   %rax,%rax
  setle  %al
  movzbl %al,%eax
  cmp    %r12d,%eax
  jne    1060 <check.cold>
  movdqa 0x10(%rsp),%xmm1
  movdqa (%rsp),%xmm0
  call   <__getf2>
  test   %rax,%rax
  setg   %al
  movzbl %al,%eax
  cmp    %ebp,%eax
  jne    1060 <check.cold>
  movdqa 0x10(%rsp),%xmm1
  movdqa (%rsp),%xmm0
  call   <__getf2>
  mov    %rax,%rbp
  not    %rax
  shr    $0x3f,%rax
  cmp    %ebx,%eax
  jne    1060 <check.cold>
  movdqa 0x10(%rsp),%xmm1
  movdqa (%rsp),%xmm0
  mov    $0x1,%ebx
  call   <__unordtf2>
  movdqa 0x10(%rsp),%xmm1
  test   %rax,%rax
  jne    L16
  test   %rbp,%rbp
  setns  %bl
L16:
  xor    $0x1,%ebx
  movzbl %bl,%ebx
  cmp    0x60(%rsp),%ebx
  jne    1060 <check.cold>
  movdqa (%rsp),%xmm0
  movaps %xmm1,0x10(%rsp)
  mov    $0x1,%ebx
  call   <__unordtf2>
  movdqa 0x10(%rsp),%xmm1
  test   %rax,%rax
  jne    L10
  movdqa (%rsp),%xmm0
  call   <__getf2>
  movdqa 0x10(%rsp),%xmm1
  test   %rax,%rax
  setg   %bl
L10:
  xor    $0x1,%ebx
  movzbl %bl,%ebx
  cmp    0x68(%rsp),%ebx
  jne    1060 <check.cold>
  movdqa (%rsp),%xmm0
  movaps %xmm1,0x10(%rsp)
  mov    $0x1,%ebx
  call   <__unordtf2>
  movdqa 0x10(%rsp),%xmm1
  test   %rax,%rax
  jne    L18
  movdqa (%rsp),%xmm0
  call   <__letf2>
  movdqa 0x10(%rsp),%xmm1
  test   %rax,%rax
  setle  %bl
L18:
  xor    $0x1,%ebx
  movzbl %bl,%ebx
  cmp    0x70(%rsp),%ebx
  jne    1060 <check.cold>
  movdqa (%rsp),%xmm0
  movaps %xmm1,0x10(%rsp)
  mov    $0x1,%ebx
  call   <__unordtf2>
  movdqa 0x10(%rsp),%xmm1
  test   %rax,%rax
  jne    L44
  movdqa (%rsp),%xmm0
  call   <__letf2>
  movdqa 0x10(%rsp),%xmm1
  test   %rax,%rax
  sets   %bl
L44:
  xor    $0x1,%ebx
  movzbl %bl,%ebx
  cmp    0x78(%rsp),%ebx
  jne    1060 <check.cold>
  movdqa (%rsp),%xmm0
  movaps %xmm1,0x10(%rsp)
  mov    $0x1,%ebx
  call   <__unordtf2>
  movdqa 0x10(%rsp),%xmm1
  test   %rax,%rax
  jne    L22
  movdqa (%rsp),%xmm0
  call   <__eqtf2>
  movdqa 0x10(%rsp),%xmm1
  test   %rax,%rax
  sete   %bl
L22:
  xor    $0x1,%ebx
  movzbl %bl,%ebx
  cmp    0x80(%rsp),%ebx
  jne    1060 <check.cold>
  movdqa (%rsp),%xmm0
  call   <__unordtf2>
  test   %rax,%rax
  setne  %al
  movzbl %al,%eax
  cmp    0x88(%rsp),%eax
  jne    1060 <check.cold>
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

assistant: ```c
void check(__float128 a, __float128 b, int eq, int ne, int lt, int le, int gt, int ge, int i_lt, int i_le, int i_gt, int i_ge, int i_lg, int i_un) {
  if (eq != (a == b))
    abort();
  if (ne != (a != b))
    abort();
  if (lt != (a < b))
    abort();
  if (le != (a <= b))
    abort();
  if (gt != (a > b))
    abort();
  if (ge != (a >= b))
    abort();
  if (i_lt != __builtin_isless(a, b))
    abort();
  if (i_le != __builtin_islessequal(a, b))
    abort();
  if (i_gt != __builtin_isgreater(a, b))
    abort();
  if (i_ge != __builtin_isgreaterequal(a, b))
    abort();
  if (i_lg != __builtin_islessgreater(a, b))
    abort();
  if (i_un != __builtin_isunordered(a, b))
    abort();
}
```