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

```asm
<main>:
  endbr64
  sub    $0x18,%rsp
  movsd  D456(%rip),%xmm0
  movsd  D419(%rip),%xmm1
  call   <__builtin_mips_cabs_eq_d@plt>
  test   %eax,%eax
  mov    D456(%rip),%rax
  movq   %rax,%xmm0
  jne    L537
L605:
  movsd  D424(%rip),%xmm1
  call   <__builtin_mips_cabs_eq_d@plt>
  cmp    $0x1,%eax
  je     L165
  xor    %eax,%eax
  call   <abort@plt>
L165:
  movsd  D649(%rip),%xmm1
  movapd %xmm1,%xmm0
  call   <test0@plt>
  test   %eax,%eax
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  jne    L497
L351:
  movapd %xmm1,%xmm0
  call   <test1@plt>
  test   %eax,%eax
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  jne    L358
L36:
  movapd %xmm1,%xmm0
  call   <test2@plt>
  cmp    $0x1,%eax
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  je     L546
  xor    %eax,%eax
  call   <abort@plt>
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
L546:
  movapd %xmm1,%xmm0
  call   <test3@plt>
  cmp    $0x1,%eax
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  je     L72
  xor    %eax,%eax
  call   <abort@plt>
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
L72:
  movapd %xmm1,%xmm0
  call   <test4@plt>
  test   %eax,%eax
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  jne    L259
L159:
  movapd %xmm1,%xmm0
  call   <test5@plt>
  test   %eax,%eax
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  jne    L19
L553:
  movapd %xmm1,%xmm0
  call   <test6@plt>
  cmp    $0x1,%eax
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  je     L92
  xor    %eax,%eax
  call   <abort@plt>
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
L92:
  movapd %xmm1,%xmm0
  call   <test7@plt>
  cmp    $0x1,%eax
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  je     L60
  xor    %eax,%eax
  call   <abort@plt>
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
L60:
  movapd %xmm1,%xmm0
  call   <test8@plt>
  test   %eax,%eax
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  jne    L529
L411:
  movapd %xmm1,%xmm0
  call   <test9@plt>
  test   %eax,%eax
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  jne    L491
L83:
  movapd %xmm1,%xmm0
  call   <test10@plt>
  cmp    $0x1,%eax
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  je     L695
  xor    %eax,%eax
  call   <abort@plt>
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
L695:
  movapd %xmm1,%xmm0
  call   <test11@plt>
  cmp    $0x1,%eax
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  je     L28
  xor    %eax,%eax
  call   <abort@plt>
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
L28:
  movapd %xmm1,%xmm0
  call   <test12@plt>
  test   %eax,%eax
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  jne    L649
L369:
  movapd %xmm1,%xmm0
  call   <test13@plt>
  test   %eax,%eax
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  jne    L680
L559:
  movapd %xmm1,%xmm0
  call   <test14@plt>
  cmp    $0x1,%eax
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  je     L500
  xor    %eax,%eax
  call   <abort@plt>
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
L500:
  movapd %xmm1,%xmm0
  call   <test15@plt>
  cmp    $0x1,%eax
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  je     L173
  xor    %eax,%eax
  call   <abort@plt>
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
L173:
  movapd %xmm1,%xmm0
  call   <test0@plt>
  test   %eax,%eax
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  jne    L704
L549:
  movapd %xmm1,%xmm0
  call   <test1@plt>
  test   %eax,%eax
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  jne    L162
L151:
  movapd %xmm1,%xmm0
  call   <test2@plt>
  cmp    $0x1,%eax
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  je     L612
  xor    %eax,%eax
  call   <abort@plt>
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
L612:
  movapd %xmm1,%xmm0
  call   <test3@plt>
  cmp    $0x1,%eax
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  je     L4
  xor    %eax,%eax
  call   <abort@plt>
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
L4:
  movapd %xmm1,%xmm0
  call   <test4@plt>
  test   %eax,%eax
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  jne    L224
L88:
  movapd %xmm1,%xmm0
  call   <test5@plt>
  test   %eax,%eax
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  jne    L99
L460:
  movapd %xmm1,%xmm0
  call   <test6@plt>
  cmp    $0x1,%eax
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  je     L103
  xor    %eax,%eax
  call   <abort@plt>
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
L103:
  movapd %xmm1,%xmm0
  call   <test7@plt>
  cmp    $0x1,%eax
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  je     L212
  xor    %eax,%eax
  call   <abort@plt>
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
L212:
  movapd %xmm1,%xmm0
  call   <test8@plt>
  test   %eax,%eax
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  jne    L684
L655:
  movapd %xmm1,%xmm0
  call   <test9@plt>
  test   %eax,%eax
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  jne    L641
L505:
  movapd %xmm1,%xmm0
  call   <test10@plt>
  cmp    $0x1,%eax
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  je     L263
  xor    %eax,%eax
  call   <abort@plt>
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
L263:
  movapd %xmm1,%xmm0
  call   <test11@plt>
  cmp    $0x1,%eax
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  je     L508
  xor    %eax,%eax
  call   <abort@plt>
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
L508:
  movapd %xmm1,%xmm0
  call   <test12@plt>
  test   %eax,%eax
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  jne    L683
L137:
  movapd %xmm1,%xmm0
  call   <test13@plt>
  test   %eax,%eax
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  jne    L540
L462:
  movapd %xmm1,%xmm0
  call   <test14@plt>
  cmp    $0x1,%eax
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  je     L113
  xor    %eax,%eax
  call   <abort@plt>
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
L113:
  movapd %xmm1,%xmm0
  call   <test15@plt>
  cmp    $0x1,%eax
  je     L402
  xor    %eax,%eax
  call   <abort@plt>
L402:
  movsd  D463(%rip),%xmm1
  divsd  D124(%rip),%xmm1
  subsd  %xmm1,%xmm1
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x8(%rsp)
  call   <test0@plt>
  movsd  0x8(%rsp),%xmm1
  test   %eax,%eax
  jne    L621
L195:
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x8(%rsp)
  call   <test1@plt>
  movsd  0x8(%rsp),%xmm1
  cmp    $0x1,%eax
  je     L125
  xor    %eax,%eax
  call   <abort@plt>
  movsd  0x8(%rsp),%xmm1
L125:
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x8(%rsp)
  call   <test2@plt>
  movsd  0x8(%rsp),%xmm1
  test   %eax,%eax
  jne    L703
L633:
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x8(%rsp)
  call   <test3@plt>
  movsd  0x8(%rsp),%xmm1
  cmp    $0x1,%eax
  je     L64
  xor    %eax,%eax
  call   <abort@plt>
  movsd  0x8(%rsp),%xmm1
L64:
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x8(%rsp)
  call   <test4@plt>
  movsd  0x8(%rsp),%xmm1
  test   %eax,%eax
  jne    L97
L573:
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x8(%rsp)
  call   <test5@plt>
  movsd  0x8(%rsp),%xmm1
  cmp    $0x1,%eax
  je     L317
  xor    %eax,%eax
  call   <abort@plt>
  movsd  0x8(%rsp),%xmm1
L317:
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x8(%rsp)
  call   <test6@plt>
  movsd  0x8(%rsp),%xmm1
  test   %eax,%eax
  jne    L419
L249:
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x8(%rsp)
  call   <test7@plt>
  movsd  0x8(%rsp),%xmm1
  cmp    $0x1,%eax
  je     L444
  xor    %eax,%eax
  call   <abort@plt>
  movsd  0x8(%rsp),%xmm1
L444:
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x8(%rsp)
  call   <test8@plt>
  movsd  0x8(%rsp),%xmm1
  test   %eax,%eax
  jne    L662
L620:
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x8(%rsp)
  call   <test9@plt>
  movsd  0x8(%rsp),%xmm1
  cmp    $0x1,%eax
  je     L644
  xor    %eax,%eax
  call   <abort@plt>
  movsd  0x8(%rsp),%xmm1
L644:
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x8(%rsp)
  call   <test10@plt>
  movsd  0x8(%rsp),%xmm1
  test   %eax,%eax
  jne    L76
L376:
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x8(%rsp)
  call   <test11@plt>
  movsd  0x8(%rsp),%xmm1
  cmp    $0x1,%eax
  je     L415
  xor    %eax,%eax
  call   <abort@plt>
  movsd  0x8(%rsp),%xmm1
L415:
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x8(%rsp)
  call   <test12@plt>
  movsd  0x8(%rsp),%xmm1
  test   %eax,%eax
  jne    L478
L91:
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x8(%rsp)
  call   <test13@plt>
  movsd  0x8(%rsp),%xmm1
  cmp    $0x1,%eax
  je     L647
  xor    %eax,%eax
  call   <abort@plt>
  movsd  0x8(%rsp),%xmm1
L647:
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x8(%rsp)
  call   <test14@plt>
  movsd  0x8(%rsp),%xmm1
  test   %eax,%eax
  jne    L57
L143:
  movapd %xmm1,%xmm0
  call   <test15@plt>
  cmp    $0x1,%eax
  je     L409
  xor    %eax,%eax
  call   <abort@plt>
L409:
  lea    D174(%rip),%rdi
  call   <printf@plt>
  xor    %edi,%edi
  call   <exit@plt>
  xor    %eax,%eax
  add    $0x18,%rsp
  ret
L57:
  xor    %eax,%eax
  call   <abort@plt>
  movsd  0x8(%rsp),%xmm1
  jmp    L143
L478:
  xor    %eax,%eax
  call   <abort@plt>
  movsd  0x8(%rsp),%xmm1
  jmp    L91
L76:
  xor    %eax,%eax
  call   <abort@plt>
  movsd  0x8(%rsp),%xmm1
  jmp    L376
L662:
  xor    %eax,%eax
  call   <abort@plt>
  movsd  0x8(%rsp),%xmm1
  jmp    L620
L419:
  xor    %eax,%eax
  call   <abort@plt>
  movsd  0x8(%rsp),%xmm1
  jmp    L249
L97:
  xor    %eax,%eax
  call   <abort@plt>
  movsd  0x8(%rsp),%xmm1
  jmp    L573
L703:
  xor    %eax,%eax
  call   <abort@plt>
  movsd  0x8(%rsp),%xmm1
  jmp    L633
L621:
  xor    %eax,%eax
  call   <abort@plt>
  movsd  0x8(%rsp),%xmm1
  jmp    L195
L540:
  xor    %eax,%eax
  call   <abort@plt>
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  jmp    L462
L683:
  xor    %eax,%eax
  call   <abort@plt>
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  jmp    L137
L641:
  xor    %eax,%eax
  call   <abort@plt>
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  jmp    L505
L684:
  xor    %eax,%eax
  call   <abort@plt>
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  jmp    L655
L99:
  xor    %eax,%eax
  call   <abort@plt>
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  jmp    L460
L224:
  xor    %eax,%eax
  call   <abort@plt>
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  jmp    L88
L162:
  xor    %eax,%eax
  call   <abort@plt>
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  jmp    L151
L704:
  xor    %eax,%eax
  call   <abort@plt>
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  jmp    L549
L680:
  xor    %eax,%eax
  call   <abort@plt>
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  jmp    L559
L649:
  xor    %eax,%eax
  call   <abort@plt>
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  jmp    L369
L491:
  xor    %eax,%eax
  call   <abort@plt>
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  jmp    L83
L529:
  xor    %eax,%eax
  call   <abort@plt>
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  jmp    L411
L19:
  xor    %eax,%eax
  call   <abort@plt>
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  jmp    L553
L259:
  xor    %eax,%eax
  call   <abort@plt>
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  jmp    L159
L358:
  xor    %eax,%eax
  call   <abort@plt>
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  jmp    L36
L497:
  xor    %eax,%eax
  call   <abort@plt>
  mov    D649(%rip),%rax
  movq   %rax,%xmm1
  jmp    L351
L537:
  xor    %eax,%eax
  call   <abort@plt>
  mov    D456(%rip),%rax
  movq   %rax,%xmm0
  jmp    L605
```

tool_calls: name: disassemble_data
arguments: data_label: D456
type: f32[2]
name: disassemble_data
arguments: data_label: D419
type: f32[2]
name: disassemble_data
arguments: data_label: D424
type: f32[2]
name: disassemble_data
arguments: data_label: D649
type: f64
name: disassemble_data
arguments: data_label: D463
type: f64
name: disassemble_data
arguments: data_label: D124
type: f32[2]
name: disassemble_data
arguments: data_label: D174
type: string

tool: {"D456": [0.0,2.625]}

tool: {"D419": [0.0,-3.1875]}

tool: {"D424": [0.0,-2.625]}

tool: D649: 1984

tool: D463: 1

tool: {"D124": [0.0,0.0]}

tool: D174: Test Passes


assistant: ```c
int main() {
  double a, b;
  int i;
  a = 12;
  b = -56;
  i = 0;
  if (__builtin_mips_cabs_eq_d(a, b) != i)
    abort();
  a = 12;
  b = -12;
  i = 1;
  if (__builtin_mips_cabs_eq_d(a, b) != i)
    abort();
  a = 1984.0;
  b = 1984.0;
  i = test0(a, b);
  if (i != 0)
    abort();
  i = test1(a, b);
  if (i != 0)
    abort();
  i = test2(a, b);
  if (i != 1)
    abort();
  i = test3(a, b);
  if (i != 1)
    abort();
  i = test4(a, b);
  if (i != 0)
    abort();
  i = test5(a, b);
  if (i != 0)
    abort();
  i = test6(a, b);
  if (i != 1)
    abort();
  i = test7(a, b);
  if (i != 1)
    abort();
  i = test8(a, b);
  if (i != 0)
    abort();
  i = test9(a, b);
  if (i != 0)
    abort();
  i = test10(a, b);
  if (i != 1)
    abort();
  i = test11(a, b);
  if (i != 1)
    abort();
  i = test12(a, b);
  if (i != 0)
    abort();
  i = test13(a, b);
  if (i != 0)
    abort();
  i = test14(a, b);
  if (i != 1)
    abort();
  i = test15(a, b);
  if (i != 1)
    abort();
  i = test0(b, a);
  if (i != 0)
    abort();
  i = test1(b, a);
  if (i != 0)
    abort();
  i = test2(b, a);
  if (i != 1)
    abort();
  i = test3(b, a);
  if (i != 1)
    abort();
  i = test4(b, a);
  if (i != 0)
    abort();
  i = test5(b, a);
  if (i != 0)
    abort();
  i = test6(b, a);
  if (i != 1)
    abort();
  i = test7(b, a);
  if (i != 1)
    abort();
  i = test8(b, a);
  if (i != 0)
    abort();
  i = test9(b, a);
  if (i != 0)
    abort();
  i = test10(b, a);
  if (i != 1)
    abort();
  i = test11(b, a);
  if (i != 1)
    abort();
  i = test12(b, a);
  if (i != 0)
    abort();
  i = test13(b, a);
  if (i != 0)
    abort();
  i = test14(b, a);
  if (i != 1)
    abort();
  i = test15(b, a);
  if (i != 1)
    abort();
  a = 1.0 / 0.0 - 1.0 / 0.0;
  b = 1.0 / 0.0 - 1.0 / 0.0;
  i = test0(a, b);
  if (i != 0)
    abort();
  i = test1(a, b);
  if (i != 1)
    abort();
  i = test2(a, b);
  if (i != 0)
    abort();
  i = test3(a, b);
  if (i != 1)
    abort();
  i = test4(a, b);
  if (i != 0)
    abort();
  i = test5(a, b);
  if (i != 1)
    abort();
  i = test6(a, b);
  if (i != 0)
    abort();
  i = test7(a, b);
  if (i != 1)
    abort();
  i = test8(a, b);
  if (i != 0)
    abort();
  i = test9(a, b);
  if (i != 1)
    abort();
  i = test10(a, b);
  if (i != 0)
    abort();
  i = test11(a, b);
  if (i != 1)
    abort();
  i = test12(a, b);
  if (i != 0)
    abort();
  i = test13(a, b);
  if (i != 1)
    abort();
  i = test14(a, b);
  if (i != 0)
    abort();
  i = test15(a, b);
  if (i != 1)
    abort();
  printf("Test Passes\n");
  exit(0);
}
```