user: Translate the below assembly code into C programming language:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  movl   $0xfffffffd,-0x4(%rbp)
  jmp    L76
L118:
  mov    -0x4(%rbp),%eax
  mov    $0x1,%esi
  mov    %eax,%edi
  call   <dd@plt>
  cmp    %eax,-0x4(%rbp)
  je     L157
  mov    $0x0,%eax
  call   <abort@plt>
L157:
  mov    -0x4(%rbp),%eax
  mov    $0x2,%esi
  mov    %eax,%edi
  call   <dd@plt>
  mov    -0x4(%rbp),%edx
  mov    %edx,%ecx
  shr    $0x1f,%ecx
  add    %ecx,%edx
  sar    %edx
  cmp    %edx,%eax
  je     L70
  mov    $0x0,%eax
  call   <abort@plt>
L70:
  mov    -0x4(%rbp),%eax
  mov    $0x3,%esi
  mov    %eax,%edi
  call   <dd@plt>
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  movslq %eax,%rcx
  imul   $0x55555556,%rcx,%rcx
  shr    $0x20,%rcx
  sar    $0x1f,%eax
  mov    %eax,%esi
  mov    %ecx,%eax
  sub    %esi,%eax
  cmp    %eax,%edx
  je     L92
  mov    $0x0,%eax
  call   <abort@plt>
L92:
  mov    -0x4(%rbp),%eax
  mov    $0x4,%esi
  mov    %eax,%edi
  call   <dd@plt>
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  lea    0x3(%rax),%ecx
  test   %eax,%eax
  cmovs  %ecx,%eax
  sar    $0x2,%eax
  cmp    %eax,%edx
  je     L121
  mov    $0x0,%eax
  call   <abort@plt>
L121:
  mov    -0x4(%rbp),%eax
  mov    $0x5,%esi
  mov    %eax,%edi
  call   <dd@plt>
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  movslq %eax,%rcx
  imul   $0x66666667,%rcx,%rcx
  shr    $0x20,%rcx
  sar    %ecx
  sar    $0x1f,%eax
  mov    %eax,%esi
  mov    %ecx,%eax
  sub    %esi,%eax
  cmp    %eax,%edx
  je     L108
  mov    $0x0,%eax
  call   <abort@plt>
L108:
  mov    -0x4(%rbp),%eax
  mov    $0x6,%esi
  mov    %eax,%edi
  call   <dd@plt>
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  movslq %eax,%rcx
  imul   $0x2aaaaaab,%rcx,%rcx
  shr    $0x20,%rcx
  sar    $0x1f,%eax
  mov    %eax,%esi
  mov    %ecx,%eax
  sub    %esi,%eax
  cmp    %eax,%edx
  je     L41
  mov    $0x0,%eax
  call   <abort@plt>
L41:
  mov    -0x4(%rbp),%eax
  mov    $0x7,%esi
  mov    %eax,%edi
  call   <dd@plt>
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  movslq %eax,%rcx
  imul   $0xffffffff92492493,%rcx,%rcx
  shr    $0x20,%rcx
  add    %eax,%ecx
  sar    $0x2,%ecx
  sar    $0x1f,%eax
  mov    %eax,%esi
  mov    %ecx,%eax
  sub    %esi,%eax
  cmp    %eax,%edx
  je     L144
  mov    $0x0,%eax
  call   <abort@plt>
L144:
  mov    -0x4(%rbp),%eax
  mov    $0x8,%esi
  mov    %eax,%edi
  call   <dd@plt>
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  lea    0x7(%rax),%ecx
  test   %eax,%eax
  cmovs  %ecx,%eax
  sar    $0x3,%eax
  cmp    %eax,%edx
  je     L148
  mov    $0x0,%eax
  call   <abort@plt>
L148:
  addl   $0x1,-0x4(%rbp)
L76:
  cmpl   $0x3,-0x4(%rbp)
  jle    L118
  movl   $0x7ffffffc,-0x4(%rbp)
  jmp    L165
L166:
  mov    -0x4(%rbp),%eax
  mov    $0x1,%esi
  mov    %eax,%edi
  call   <dd@plt>
  cmp    %eax,-0x4(%rbp)
  je     L150
  mov    $0x0,%eax
  call   <abort@plt>
L150:
  mov    -0x4(%rbp),%eax
  mov    $0x2,%esi
  mov    %eax,%edi
  call   <dd@plt>
  mov    -0x4(%rbp),%edx
  mov    %edx,%ecx
  shr    $0x1f,%ecx
  add    %ecx,%edx
  sar    %edx
  cmp    %edx,%eax
  je     L66
  mov    $0x0,%eax
  call   <abort@plt>
L66:
  mov    -0x4(%rbp),%eax
  mov    $0x3,%esi
  mov    %eax,%edi
  call   <dd@plt>
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  movslq %eax,%rcx
  imul   $0x55555556,%rcx,%rcx
  shr    $0x20,%rcx
  sar    $0x1f,%eax
  mov    %eax,%esi
  mov    %ecx,%eax
  sub    %esi,%eax
  cmp    %eax,%edx
  je     L74
  mov    $0x0,%eax
  call   <abort@plt>
L74:
  mov    -0x4(%rbp),%eax
  mov    $0x4,%esi
  mov    %eax,%edi
  call   <dd@plt>
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  lea    0x3(%rax),%ecx
  test   %eax,%eax
  cmovs  %ecx,%eax
  sar    $0x2,%eax
  cmp    %eax,%edx
  je     L93
  mov    $0x0,%eax
  call   <abort@plt>
L93:
  mov    -0x4(%rbp),%eax
  mov    $0x5,%esi
  mov    %eax,%edi
  call   <dd@plt>
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  movslq %eax,%rcx
  imul   $0x66666667,%rcx,%rcx
  shr    $0x20,%rcx
  sar    %ecx
  sar    $0x1f,%eax
  mov    %eax,%esi
  mov    %ecx,%eax
  sub    %esi,%eax
  cmp    %eax,%edx
  je     L6
  mov    $0x0,%eax
  call   <abort@plt>
L6:
  mov    -0x4(%rbp),%eax
  mov    $0x6,%esi
  mov    %eax,%edi
  call   <dd@plt>
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  movslq %eax,%rcx
  imul   $0x2aaaaaab,%rcx,%rcx
  shr    $0x20,%rcx
  sar    $0x1f,%eax
  mov    %eax,%esi
  mov    %ecx,%eax
  sub    %esi,%eax
  cmp    %eax,%edx
  je     L111
  mov    $0x0,%eax
  call   <abort@plt>
L111:
  mov    -0x4(%rbp),%eax
  mov    $0x7,%esi
  mov    %eax,%edi
  call   <dd@plt>
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  movslq %eax,%rcx
  imul   $0xffffffff92492493,%rcx,%rcx
  shr    $0x20,%rcx
  add    %eax,%ecx
  sar    $0x2,%ecx
  sar    $0x1f,%eax
  mov    %eax,%esi
  mov    %ecx,%eax
  sub    %esi,%eax
  cmp    %eax,%edx
  je     L125
  mov    $0x0,%eax
  call   <abort@plt>
L125:
  mov    -0x4(%rbp),%eax
  mov    $0x8,%esi
  mov    %eax,%edi
  call   <dd@plt>
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  lea    0x7(%rax),%ecx
  test   %eax,%eax
  cmovs  %ecx,%eax
  sar    $0x3,%eax
  cmp    %eax,%edx
  je     L126
  mov    $0x0,%eax
  call   <abort@plt>
L126:
  addl   $0x1,-0x4(%rbp)
L165:
  mov    -0x4(%rbp),%eax
  cmp    $0x80000002,%eax
  jbe    L166
  mov    $0x0,%edi
  call   <exit@plt>
  mov    $0x0,%eax
  leave
  ret
```

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