user: Converte this assembly snippet into its equivalent C code:

```asm
<_test_various_MAX_biggerlong_smallerulong>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  mov    $0x0,%esi
  mov    $0x1,%edi
  call   <_test_MAX_biggerlong_smallerulong@plt>
  mov    $0x0,%esi
  mov    $0x2,%edi
  call   <_test_MAX_biggerlong_smallerulong@plt>
  mov    D0(%rip),%rbx
  mov    (%rbx),%eax
  lea    -0x2(,%rax,4),%ecx
  mov    $0x1,%ebp
  mov    %ebp,%eax
  shl    %cl,%eax
  lea    -0x1(%rax,%rax,1),%edi
  test   %edi,%edi
  mov    $0xffffffff,%eax
  cmovs  %eax,%edi
  mov    $0x0,%esi
  call   <_test_MAX_biggerlong_smallerulong@plt>
  mov    (%rbx),%eax
  lea    -0x2(,%rax,8),%ecx
  mov    $0x1,%r12d
  mov    %r12,%rax
  shl    %cl,%rax
  lea    -0x1(%rax,%rax,1),%rdi
  mov    $0x0,%esi
  test   %rdi,%rdi
  mov    $0xffffffffffffffff,%rax
  cmovs  %rax,%rdi
  call   <_test_MAX_biggerlong_smallerulong@plt>
  mov    $0x2,%esi
  mov    $0x3,%edi
  call   <_test_MAX_biggerlong_smallerulong@plt>
  mov    (%rbx),%eax
  lea    -0x2(,%rax,8),%ecx
  mov    %r12,%rax
  shl    %cl,%rax
  lea    -0x1(%rax,%rax,1),%rdi
  test   %rdi,%rdi
  mov    $0xffffffffffffffff,%rax
  cmovs  %rax,%rdi
  lea    -0x1(%rdi),%esi
  call   <_test_MAX_biggerlong_smallerulong@plt>
  mov    (%rbx),%eax
  lea    -0x2(,%rax,8),%ecx
  shl    %cl,%r12
  lea    -0x1(%r12,%r12,1),%rdi
  test   %rdi,%rdi
  mov    $0xffffffffffffffff,%rax
  cmovs  %rax,%rdi
  lea    -0x2(%rdi),%esi
  sub    $0x1,%edi
  call   <_test_MAX_biggerlong_smallerulong@plt>
  mov    (%rbx),%eax
  lea    -0x2(,%rax,4),%ecx
  mov    %ebp,%eax
  shl    %cl,%eax
  lea    -0x1(%rax,%rax,1),%edi
  test   %edi,%edi
  mov    $0xffffffff,%eax
  cmovs  %eax,%edi
  lea    -0x1(%rdi),%esi
  call   <_test_MAX_biggerlong_smallerulong@plt>
  mov    (%rbx),%eax
  lea    -0x2(,%rax,4),%ecx
  shl    %cl,%ebp
  lea    -0x1(%rbp,%rbp,1),%edi
  test   %edi,%edi
  mov    $0xffffffff,%eax
  cmovs  %eax,%edi
  lea    -0x2(%rdi),%esi
  sub    $0x1,%edi
  call   <_test_MAX_biggerlong_smallerulong@plt>
  mov    $0x0,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
```

assistant: ```c
int _test_various_MAX_biggerlong_smallerulong() {
  _test_MAX_biggerlong_smallerulong(1, 0);
  _test_MAX_biggerlong_smallerulong(2, 0);
  _test_MAX_biggerlong_smallerulong(((((int)(((int)(((int)1) << ((sizeof(int) * CHAR_BIT) - 2))) + ((int)(((int)(((int)1) << ((sizeof(int) * CHAR_BIT) - 2))) - 1)))) > ((int)(~((int)0)))) ? ((int)(((int)(((int)1) << ((sizeof(int) * CHAR_BIT) - 2))) + ((int)(((int)(((int)1) << ((sizeof(int) * CHAR_BIT) - 2))) - 1)))) : ((int)(~((int)0)))), 0);
  _test_MAX_biggerlong_smallerulong(((((long)(((long)(((long)1) << ((sizeof(long) * CHAR_BIT) - 2))) + ((long)(((long)(((long)1) << ((sizeof(long) * CHAR_BIT) - 2))) - 1)))) > ((long)(~((long)0)))) ? ((long)(((long)(((long)1) << ((sizeof(long) * CHAR_BIT) - 2))) + ((long)(((long)(((long)1) << ((sizeof(long) * CHAR_BIT) - 2))) - 1)))) : ((long)(~((long)0)))), 0);
  _test_MAX_biggerlong_smallerulong(3, 2);
  _test_MAX_biggerlong_smallerulong(((((long)(((long)(((long)1) << ((sizeof(long) * CHAR_BIT) - 2))) + ((long)(((long)(((long)1) << ((sizeof(long) * CHAR_BIT) - 2))) - 1)))) > ((long)(~((long)0)))) ? ((long)(((long)(((long)1) << ((sizeof(long) * CHAR_BIT) - 2))) + ((long)(((long)(((long)1) << ((sizeof(long) * CHAR_BIT) - 2))) - 1)))) : ((long)(~((long)0)))), ((((long)(((long)(((long)1) << ((sizeof(long) * CHAR_BIT) - 2))) + ((long)(((long)(((long)1) << ((sizeof(long) * CHAR_BIT) - 2))) - 1)))) > ((long)(~((long)0)))) ? ((long)(((long)(((long)1) << ((sizeof(long) * CHAR_BIT) - 2))) + ((long)(((long)(((long)1) << ((sizeof(long) * CHAR_BIT) - 2))) - 1)))) : ((long)(~((long)0)))) - 1);
  _test_MAX_biggerlong_smallerulong(((((long)(((long)(((long)1) << ((sizeof(long) * CHAR_BIT) - 2))) + ((long)(((long)(((long)1) << ((sizeof(long) * CHAR_BIT) - 2))) - 1)))) > ((long)(~((long)0)))) ? ((long)(((long)(((long)1) << ((sizeof(long) * CHAR_BIT) - 2))) + ((long)(((long)(((long)1) << ((sizeof(long) * CHAR_BIT) - 2))) - 1)))) : ((long)(~((long)0)))) - 1, ((((long)(((long)(((long)1) << ((sizeof(long) * CHAR_BIT) - 2))) + ((long)(((long)(((long)1) << ((sizeof(long) * CHAR_BIT) - 2))) - 1)))) > ((long)(~((long)0)))) ? ((long)(((long)(((long)1) << ((sizeof(long) * CHAR_BIT) - 2))) + ((long)(((long)(((long)1) << ((sizeof(long) * CHAR_BIT) - 2))) - 1)))) : ((long)(~((long)0)))) - 2);
  _test_MAX_biggerlong_smallerulong(((((int)(((int)(((int)1) << ((sizeof(int) * CHAR_BIT) - 2))) + ((int)(((int)(((int)1) << ((sizeof(int) * CHAR_BIT) - 2))) - 1)))) > ((int)(~((int)0)))) ? ((int)(((int)(((int)1) << ((sizeof(int) * CHAR_BIT) - 2))) + ((int)(((int)(((int)1) << ((sizeof(int) * CHAR_BIT) - 2))) - 1)))) : ((int)(~((int)0)))), ((((int)(((int)(((int)1) << ((sizeof(int) * CHAR_BIT) - 2))) + ((int)(((int)(((int)1) << ((sizeof(int) * CHAR_BIT) - 2))) - 1)))) > ((int)(~((int)0)))) ? ((int)(((int)(((int)1) << ((sizeof(int) * CHAR_BIT) - 2))) + ((int)(((int)(((int)1) << ((sizeof(int) * CHAR_BIT) - 2))) - 1)))) : ((int)(~((int)0)))) - 1);
  _test_MAX_biggerlong_smallerulong(((((int)(((int)(((int)1) << ((sizeof(int) * CHAR_BIT) - 2))) + ((int)(((int)(((int)1) << ((sizeof(int) * CHAR_BIT) - 2))) - 1)))) > ((int)(~((int)0)))) ? ((int)(((int)(((int)1) << ((sizeof(int) * CHAR_BIT) - 2))) + ((int)(((int)(((int)1) << ((sizeof(int) * CHAR_BIT) - 2))) - 1)))) : ((int)(~((int)0)))) - 1, ((((int)(((int)(((int)1) << ((sizeof(int) * CHAR_BIT) - 2))) + ((int)(((int)(((int)1) << ((sizeof(int) * CHAR_BIT) - 2))) - 1)))) > ((int)(~((int)0)))) ? ((int)(((int)(((int)1) << ((sizeof(int) * CHAR_BIT) - 2))) + ((int)(((int)(((int)1) << ((sizeof(int) * CHAR_BIT) - 2))) - 1)))) : ((int)(~((int)0)))) - 2);
  return 0;
}
```