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

```asm
<check>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x28,%rsp
  movaps %xmm0,(%rsp)
  movaps %xmm1,0x10(%rsp)
  mov    %edi,%r15d
  mov    %esi,%r14d
  mov    %edx,%r13d
  mov    %ecx,%r12d
  mov    %r8d,%ebp
  mov    %r9d,%ebx
  call   <__eqtf2>
  test   %rax,%rax
  sete   %al
  movzbl %al,%eax
  cmp    %r15d,%eax
  jne    L164
  movdqa 0x10(%rsp),%xmm1
  movdqa (%rsp),%xmm0
  call   <__eqtf2>
  test   %rax,%rax
  setne  %al
  movzbl %al,%eax
  cmp    %r14d,%eax
  jne    L115
  movdqa 0x10(%rsp),%xmm1
  movdqa (%rsp),%xmm0
  call   <__letf2>
  shr    $0x3f,%rax
  cmp    %r13d,%eax
  jne    L154
  movdqa 0x10(%rsp),%xmm1
  movdqa (%rsp),%xmm0
  call   <__letf2>
  test   %rax,%rax
  setle  %al
  movzbl %al,%eax
  cmp    %r12d,%eax
  jne    L66
  movdqa 0x10(%rsp),%xmm1
  movdqa (%rsp),%xmm0
  call   <__getf2>
  test   %rax,%rax
  setg   %al
  movzbl %al,%eax
  cmp    %ebp,%eax
  jne    L87
  movdqa 0x10(%rsp),%xmm1
  movdqa (%rsp),%xmm0
  call   <__getf2>
  not    %rax
  shr    $0x3f,%rax
  cmp    %ebx,%eax
  jne    L121
  mov    $0x1,%ebx
  movdqa 0x10(%rsp),%xmm1
  movdqa (%rsp),%xmm0
  call   <__unordtf2>
  test   %rax,%rax
  jne    L80
  movdqa 0x10(%rsp),%xmm1
  movdqa (%rsp),%xmm0
  call   <__getf2>
  test   %rax,%rax
  mov    $0x0,%eax
  cmovs  %eax,%ebx
L80:
  xor    $0x1,%ebx
  movzbl %bl,%ebx
  cmp    0x60(%rsp),%ebx
  jne    L31
  mov    $0x1,%ebx
  movdqa 0x10(%rsp),%xmm1
  movdqa (%rsp),%xmm0
  call   <__unordtf2>
  test   %rax,%rax
  jne    L57
  movdqa 0x10(%rsp),%xmm1
  movdqa (%rsp),%xmm0
  call   <__getf2>
  test   %rax,%rax
  mov    $0x0,%eax
  cmovle %eax,%ebx
L57:
  xor    $0x1,%ebx
  movzbl %bl,%ebx
  cmp    0x68(%rsp),%ebx
  jne    L162
  mov    $0x1,%ebx
  movdqa 0x10(%rsp),%xmm1
  movdqa (%rsp),%xmm0
  call   <__unordtf2>
  test   %rax,%rax
  jne    L43
  movdqa 0x10(%rsp),%xmm1
  movdqa (%rsp),%xmm0
  call   <__letf2>
  test   %rax,%rax
  mov    $0x0,%eax
  cmovg  %eax,%ebx
L43:
  xor    $0x1,%ebx
  movzbl %bl,%ebx
  cmp    0x70(%rsp),%ebx
  jne    L46
  mov    $0x1,%ebx
  movdqa 0x10(%rsp),%xmm1
  movdqa (%rsp),%xmm0
  call   <__unordtf2>
  test   %rax,%rax
  jne    L132
  movdqa 0x10(%rsp),%xmm1
  movdqa (%rsp),%xmm0
  call   <__letf2>
  test   %rax,%rax
  mov    $0x0,%eax
  cmovns %eax,%ebx
L132:
  xor    $0x1,%ebx
  movzbl %bl,%ebx
  cmp    0x78(%rsp),%ebx
  jne    L96
  mov    $0x1,%ebx
  movdqa 0x10(%rsp),%xmm1
  movdqa (%rsp),%xmm0
  call   <__unordtf2>
  test   %rax,%rax
  jne    L36
  movdqa 0x10(%rsp),%xmm1
  movdqa (%rsp),%xmm0
  call   <__eqtf2>
  test   %rax,%rax
  mov    $0x0,%eax
  cmovne %eax,%ebx
L36:
  xor    $0x1,%ebx
  movzbl %bl,%ebx
  cmp    0x80(%rsp),%ebx
  jne    L124
  movdqa 0x10(%rsp),%xmm1
  movdqa (%rsp),%xmm0
  call   <__unordtf2>
  test   %rax,%rax
  setne  %al
  movzbl %al,%eax
  cmp    0x88(%rsp),%eax
  jne    L153
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L164:
  call   <abort@plt>
L115:
  call   <abort@plt>
L154:
  call   <abort@plt>
L66:
  call   <abort@plt>
L87:
  call   <abort@plt>
L121:
  call   <abort@plt>
L31:
  call   <abort@plt>
L162:
  call   <abort@plt>
L46:
  call   <abort@plt>
L96:
  call   <abort@plt>
L124:
  call   <abort@plt>
L153:
  call   <abort@plt>
```

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();
}
```