user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<check>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x48,%rsp
  movaps %xmm0,-0x20(%rbp)
  movaps %xmm1,-0x30(%rbp)
  mov    %edi,-0x34(%rbp)
  mov    %esi,-0x38(%rbp)
  mov    %edx,-0x3c(%rbp)
  mov    %ecx,-0x40(%rbp)
  mov    %r8d,-0x44(%rbp)
  mov    %r9d,-0x48(%rbp)
  mov    $0x1,%ebx
  movdqa -0x30(%rbp),%xmm1
  movdqa -0x20(%rbp),%xmm0
  call   <__eqtf2>
  test   %rax,%rax
  je     L167
  mov    $0x0,%ebx
L167:
  movzbl %bl,%eax
  cmp    %eax,-0x34(%rbp)
  je     L13
  call   <abort@plt>
L13:
  mov    $0x1,%ebx
  movdqa -0x30(%rbp),%xmm1
  movdqa -0x20(%rbp),%xmm0
  call   <__eqtf2>
  test   %rax,%rax
  jne    L51
  mov    $0x0,%ebx
L51:
  movzbl %bl,%eax
  cmp    %eax,-0x38(%rbp)
  je     L71
  call   <abort@plt>
L71:
  mov    $0x1,%ebx
  movdqa -0x30(%rbp),%xmm1
  movdqa -0x20(%rbp),%xmm0
  call   <__letf2>
  test   %rax,%rax
  js     L67
  mov    $0x0,%ebx
L67:
  movzbl %bl,%eax
  cmp    %eax,-0x3c(%rbp)
  je     L216
  call   <abort@plt>
L216:
  mov    $0x1,%ebx
  movdqa -0x30(%rbp),%xmm1
  movdqa -0x20(%rbp),%xmm0
  call   <__letf2>
  test   %rax,%rax
  jle    L217
  mov    $0x0,%ebx
L217:
  movzbl %bl,%eax
  cmp    %eax,-0x40(%rbp)
  je     L126
  call   <abort@plt>
L126:
  mov    $0x1,%ebx
  movdqa -0x30(%rbp),%xmm1
  movdqa -0x20(%rbp),%xmm0
  call   <__getf2>
  test   %rax,%rax
  jg     L125
  mov    $0x0,%ebx
L125:
  movzbl %bl,%eax
  cmp    %eax,-0x44(%rbp)
  je     L19
  call   <abort@plt>
L19:
  mov    $0x1,%ebx
  movdqa -0x30(%rbp),%xmm1
  movdqa -0x20(%rbp),%xmm0
  call   <__getf2>
  test   %rax,%rax
  jns    L233
  mov    $0x0,%ebx
L233:
  movzbl %bl,%eax
  cmp    %eax,-0x48(%rbp)
  je     L206
  call   <abort@plt>
L206:
  mov    $0x1,%ebx
  movdqa -0x30(%rbp),%xmm1
  movdqa -0x20(%rbp),%xmm0
  call   <__unordtf2>
  test   %rax,%rax
  jne    L68
  movdqa -0x30(%rbp),%xmm1
  movdqa -0x20(%rbp),%xmm0
  call   <__getf2>
  test   %rax,%rax
  jns    L68
  mov    $0x0,%ebx
L68:
  mov    %ebx,%eax
  xor    $0x1,%eax
  movzbl %al,%eax
  cmp    %eax,0x10(%rbp)
  je     L150
  call   <abort@plt>
L150:
  mov    $0x1,%ebx
  movdqa -0x30(%rbp),%xmm1
  movdqa -0x20(%rbp),%xmm0
  call   <__unordtf2>
  test   %rax,%rax
  jne    L187
  movdqa -0x30(%rbp),%xmm1
  movdqa -0x20(%rbp),%xmm0
  call   <__getf2>
  test   %rax,%rax
  jg     L187
  mov    $0x0,%ebx
L187:
  mov    %ebx,%eax
  xor    $0x1,%eax
  movzbl %al,%eax
  cmp    %eax,0x18(%rbp)
  je     L159
  call   <abort@plt>
L159:
  mov    $0x1,%ebx
  movdqa -0x30(%rbp),%xmm1
  movdqa -0x20(%rbp),%xmm0
  call   <__unordtf2>
  test   %rax,%rax
  jne    L12
  movdqa -0x30(%rbp),%xmm1
  movdqa -0x20(%rbp),%xmm0
  call   <__letf2>
  test   %rax,%rax
  jle    L12
  mov    $0x0,%ebx
L12:
  mov    %ebx,%eax
  xor    $0x1,%eax
  movzbl %al,%eax
  cmp    %eax,0x20(%rbp)
  je     L215
  call   <abort@plt>
L215:
  mov    $0x1,%ebx
  movdqa -0x30(%rbp),%xmm1
  movdqa -0x20(%rbp),%xmm0
  call   <__unordtf2>
  test   %rax,%rax
  jne    L106
  movdqa -0x30(%rbp),%xmm1
  movdqa -0x20(%rbp),%xmm0
  call   <__letf2>
  test   %rax,%rax
  js     L106
  mov    $0x0,%ebx
L106:
  mov    %ebx,%eax
  xor    $0x1,%eax
  movzbl %al,%eax
  cmp    %eax,0x28(%rbp)
  je     L143
  call   <abort@plt>
L143:
  mov    $0x1,%ebx
  movdqa -0x30(%rbp),%xmm1
  movdqa -0x20(%rbp),%xmm0
  call   <__unordtf2>
  test   %rax,%rax
  jne    L25
  movdqa -0x30(%rbp),%xmm1
  movdqa -0x20(%rbp),%xmm0
  call   <__eqtf2>
  test   %rax,%rax
  je     L25
  mov    $0x0,%ebx
L25:
  mov    %ebx,%eax
  xor    $0x1,%eax
  movzbl %al,%eax
  cmp    %eax,0x30(%rbp)
  je     L177
  call   <abort@plt>
L177:
  mov    $0x1,%ebx
  movdqa -0x30(%rbp),%xmm1
  movdqa -0x20(%rbp),%xmm0
  call   <__unordtf2>
  test   %rax,%rax
  jne    L11
  mov    $0x0,%ebx
L11:
  movzbl %bl,%eax
  cmp    %eax,0x38(%rbp)
  je     L20
  call   <abort@plt>
L20:
  nop
  mov    -0x8(%rbp),%rbx
  leave
  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();
}
```