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

```asm
<main>:
  endbr64
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    $0xfffffffd,%ebx
  sub    $0x8,%rsp
  jmp    L91
  nopl   (%rax)
L74:
  mov    $0x5,%esi
  mov    %ebx,%edi
  call   <dd@plt>
  test   %eax,%eax
  jne    L16
L185:
  mov    $0x6,%esi
  mov    %ebx,%edi
  call   <dd@plt>
  test   %eax,%eax
  jne    L213
L169:
  mov    $0x7,%esi
  mov    %ebx,%edi
  call   <dd@plt>
  test   %eax,%eax
  jne    L60
L10:
  mov    $0x8,%esi
  mov    %ebx,%edi
  call   <dd@plt>
  test   %eax,%eax
  jne    L64
L212:
  add    $0x1,%ebx
  cmp    $0x4,%ebx
  je     L133
L91:
  mov    $0x1,%esi
  mov    %ebx,%edi
  call   <dd@plt>
  cmp    %ebx,%eax
  je     L32
  xor    %eax,%eax
  call   <abort@plt>
L32:
  mov    $0x2,%esi
  mov    %ebx,%edi
  call   <dd@plt>
  mov    %eax,%r8d
  mov    %ebx,%eax
  shr    $0x1f,%eax
  add    %ebx,%eax
  sar    %eax
  cmp    %eax,%r8d
  je     L97
  xor    %eax,%eax
  call   <abort@plt>
L97:
  mov    $0x3,%esi
  mov    %ebx,%edi
  call   <dd@plt>
  mov    %ebx,%edx
  mov    %eax,%r8d
  movslq %ebx,%rax
  sar    $0x1f,%edx
  imul   $0x55555556,%rax,%rax
  shr    $0x20,%rax
  sub    %edx,%eax
  cmp    %eax,%r8d
  je     L153
  xor    %eax,%eax
  call   <abort@plt>
L153:
  mov    $0x4,%esi
  mov    %ebx,%edi
  call   <dd@plt>
  test   %eax,%eax
  je     L74
  xor    %eax,%eax
  call   <abort@plt>
  mov    $0x5,%esi
  mov    %ebx,%edi
  call   <dd@plt>
  test   %eax,%eax
  je     L185
L16:
  xor    %eax,%eax
  call   <abort@plt>
  mov    $0x6,%esi
  mov    %ebx,%edi
  call   <dd@plt>
  test   %eax,%eax
  je     L169
L213:
  xor    %eax,%eax
  call   <abort@plt>
  mov    $0x7,%esi
  mov    %ebx,%edi
  call   <dd@plt>
  test   %eax,%eax
  je     L10
L60:
  xor    %eax,%eax
  call   <abort@plt>
  mov    $0x8,%esi
  mov    %ebx,%edi
  call   <dd@plt>
  test   %eax,%eax
  je     L212
L64:
  xor    %eax,%eax
  add    $0x1,%ebx
  call   <abort@plt>
  cmp    $0x4,%ebx
  jne    L91
L133:
  mov    $0x7ffffffc,%ebx
  mov    $0xaaaaaaab,%r12d
  mov    $0xcccccccd,%r13d
  nopl   0x0(%rax,%rax,1)
L195:
  mov    $0x1,%esi
  mov    %ebx,%edi
  call   <dd@plt>
  cmp    %ebx,%eax
  je     L110
  xor    %eax,%eax
  call   <abort@plt>
L110:
  mov    $0x2,%esi
  mov    %ebx,%edi
  call   <dd@plt>
  mov    %eax,%r8d
  mov    %ebx,%eax
  sar    %eax
  cmp    %eax,%r8d
  je     L210
  xor    %eax,%eax
  call   <abort@plt>
L210:
  mov    $0x3,%esi
  mov    %ebx,%edi
  mov    %ebx,%ebp
  call   <dd@plt>
  mov    %eax,%r8d
  mov    %rbp,%rax
  imul   %r12,%rax
  shr    $0x21,%rax
  cmp    %eax,%r8d
  je     L174
  xor    %eax,%eax
  call   <abort@plt>
L174:
  mov    $0x4,%esi
  mov    %ebx,%edi
  call   <dd@plt>
  cmp    $0x1fffffff,%eax
  je     L53
  xor    %eax,%eax
  call   <abort@plt>
L53:
  mov    $0x5,%esi
  mov    %ebx,%edi
  call   <dd@plt>
  mov    %eax,%r8d
  mov    %rbp,%rax
  imul   %r13,%rax
  shr    $0x22,%rax
  cmp    %eax,%r8d
  je     L47
  xor    %eax,%eax
  call   <abort@plt>
L47:
  mov    $0x6,%esi
  mov    %ebx,%edi
  call   <dd@plt>
  mov    %eax,%r8d
  mov    %rbp,%rax
  imul   %r12,%rax
  shr    $0x22,%rax
  cmp    %eax,%r8d
  je     L12
  xor    %eax,%eax
  call   <abort@plt>
L12:
  imul   $0x24924925,%rbp,%rbp
  mov    $0x7,%esi
  mov    %ebx,%edi
  call   <dd@plt>
  mov    %eax,%r8d
  mov    %ebx,%eax
  shr    $0x20,%rbp
  sub    %ebp,%eax
  shr    %eax
  add    %ebp,%eax
  shr    $0x2,%eax
  cmp    %eax,%r8d
  je     L165
  xor    %eax,%eax
  call   <abort@plt>
L165:
  mov    $0x8,%esi
  mov    %ebx,%edi
  call   <dd@plt>
  cmp    $0xfffffff,%eax
  je     L56
  xor    %eax,%eax
  call   <abort@plt>
L56:
  add    $0x1,%ebx
  jmp    L195
```

assistant: ```c
int main() {
  int i;
  for (i = -3; i <= 3; i++) {
    if (dd(i, 1) != i / 1)
      abort();
    if (dd(i, 2) != i / 2)
      abort();
    if (dd(i, 3) != i / 3)
      abort();
    if (dd(i, 4) != i / 4)
      abort();
    if (dd(i, 5) != i / 5)
      abort();
    if (dd(i, 6) != i / 6)
      abort();
    if (dd(i, 7) != i / 7)
      abort();
    if (dd(i, 8) != i / 8)
      abort();
  }
  for (i = ((unsigned)~0 >> 1) - 3; i <= ((unsigned)~0 >> 1) + 3; i++) {
    if (dd(i, 1) != i / 1)
      abort();
    if (dd(i, 2) != i / 2)
      abort();
    if (dd(i, 3) != i / 3)
      abort();
    if (dd(i, 4) != i / 4)
      abort();
    if (dd(i, 5) != i / 5)
      abort();
    if (dd(i, 6) != i / 6)
      abort();
    if (dd(i, 7) != i / 7)
      abort();
    if (dd(i, 8) != i / 8)
      abort();
  }
  exit(0);
}
```