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

```asm
<main>:
  endbr64
  sub    $0x18,%rsp
  movsd  D41(%rip),%xmm0
  movsd  D662(%rip),%xmm1
  call   <__builtin_mips_cabs_eq_d@plt>
  test   %eax,%eax
  mov    D41(%rip),%rax
  movq   %rax,%xmm0
  jne    L721
L450:
  movsd  D217(%rip),%xmm1
  call   <__builtin_mips_cabs_eq_d@plt>
  cmp    $0x1,%eax
  je     L29
  xor    %eax,%eax
  call   <abort@plt>
L29:
  movsd  D21(%rip),%xmm1
  movapd %xmm1,%xmm0
  call   <test0@plt>
  test   %eax,%eax
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  jne    L611
L350:
  movapd %xmm1,%xmm0
  call   <test1@plt>
  test   %eax,%eax
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  jne    L451
L560:
  movapd %xmm1,%xmm0
  call   <test2@plt>
  cmp    $0x1,%eax
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  je     L567
  xor    %eax,%eax
  call   <abort@plt>
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
L567:
  movapd %xmm1,%xmm0
  call   <test3@plt>
  cmp    $0x1,%eax
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  je     L267
  xor    %eax,%eax
  call   <abort@plt>
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
L267:
  movapd %xmm1,%xmm0
  call   <test4@plt>
  test   %eax,%eax
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  jne    L473
L708:
  movapd %xmm1,%xmm0
  call   <test5@plt>
  test   %eax,%eax
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  jne    L10
L50:
  movapd %xmm1,%xmm0
  call   <test6@plt>
  cmp    $0x1,%eax
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  je     L311
  xor    %eax,%eax
  call   <abort@plt>
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
L311:
  movapd %xmm1,%xmm0
  call   <test7@plt>
  cmp    $0x1,%eax
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  je     L404
  xor    %eax,%eax
  call   <abort@plt>
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
L404:
  movapd %xmm1,%xmm0
  call   <test8@plt>
  test   %eax,%eax
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  jne    L525
L283:
  movapd %xmm1,%xmm0
  call   <test9@plt>
  test   %eax,%eax
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  jne    L556
L441:
  movapd %xmm1,%xmm0
  call   <test10@plt>
  cmp    $0x1,%eax
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  je     L293
  xor    %eax,%eax
  call   <abort@plt>
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
L293:
  movapd %xmm1,%xmm0
  call   <test11@plt>
  cmp    $0x1,%eax
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  je     L279
  xor    %eax,%eax
  call   <abort@plt>
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
L279:
  movapd %xmm1,%xmm0
  call   <test12@plt>
  test   %eax,%eax
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  jne    L87
L160:
  movapd %xmm1,%xmm0
  call   <test13@plt>
  test   %eax,%eax
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  jne    L84
L695:
  movapd %xmm1,%xmm0
  call   <test14@plt>
  cmp    $0x1,%eax
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  je     L47
  xor    %eax,%eax
  call   <abort@plt>
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
L47:
  movapd %xmm1,%xmm0
  call   <test15@plt>
  cmp    $0x1,%eax
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  je     L370
  xor    %eax,%eax
  call   <abort@plt>
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
L370:
  movapd %xmm1,%xmm0
  call   <test0@plt>
  test   %eax,%eax
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  jne    L696
L658:
  movapd %xmm1,%xmm0
  call   <test1@plt>
  test   %eax,%eax
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  jne    L466
L341:
  movapd %xmm1,%xmm0
  call   <test2@plt>
  cmp    $0x1,%eax
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  je     L376
  xor    %eax,%eax
  call   <abort@plt>
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
L376:
  movapd %xmm1,%xmm0
  call   <test3@plt>
  cmp    $0x1,%eax
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  je     L332
  xor    %eax,%eax
  call   <abort@plt>
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
L332:
  movapd %xmm1,%xmm0
  call   <test4@plt>
  test   %eax,%eax
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  jne    L722
L136:
  movapd %xmm1,%xmm0
  call   <test5@plt>
  test   %eax,%eax
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  jne    L235
L641:
  movapd %xmm1,%xmm0
  call   <test6@plt>
  cmp    $0x1,%eax
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  je     L586
  xor    %eax,%eax
  call   <abort@plt>
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
L586:
  movapd %xmm1,%xmm0
  call   <test7@plt>
  cmp    $0x1,%eax
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  je     L637
  xor    %eax,%eax
  call   <abort@plt>
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
L637:
  movapd %xmm1,%xmm0
  call   <test8@plt>
  test   %eax,%eax
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  jne    L483
L102:
  movapd %xmm1,%xmm0
  call   <test9@plt>
  test   %eax,%eax
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  jne    L378
L121:
  movapd %xmm1,%xmm0
  call   <test10@plt>
  cmp    $0x1,%eax
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  je     L382
  xor    %eax,%eax
  call   <abort@plt>
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
L382:
  movapd %xmm1,%xmm0
  call   <test11@plt>
  cmp    $0x1,%eax
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  je     L608
  xor    %eax,%eax
  call   <abort@plt>
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
L608:
  movapd %xmm1,%xmm0
  call   <test12@plt>
  test   %eax,%eax
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  jne    L357
L480:
  movapd %xmm1,%xmm0
  call   <test13@plt>
  test   %eax,%eax
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  jne    L55
L644:
  movapd %xmm1,%xmm0
  call   <test14@plt>
  cmp    $0x1,%eax
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  je     L660
  xor    %eax,%eax
  call   <abort@plt>
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
L660:
  movapd %xmm1,%xmm0
  call   <test15@plt>
  cmp    $0x1,%eax
  je     L201
  xor    %eax,%eax
  call   <abort@plt>
L201:
  movsd  D492(%rip),%xmm1
  divsd  D635(%rip),%xmm1
  subsd  %xmm1,%xmm1
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x8(%rsp)
  call   <test0@plt>
  movsd  0x8(%rsp),%xmm1
  test   %eax,%eax
  jne    L703
L313:
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x8(%rsp)
  call   <test1@plt>
  movsd  0x8(%rsp),%xmm1
  cmp    $0x1,%eax
  je     L423
  xor    %eax,%eax
  call   <abort@plt>
  movsd  0x8(%rsp),%xmm1
L423:
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x8(%rsp)
  call   <test2@plt>
  movsd  0x8(%rsp),%xmm1
  test   %eax,%eax
  jne    L673
L353:
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x8(%rsp)
  call   <test3@plt>
  movsd  0x8(%rsp),%xmm1
  cmp    $0x1,%eax
  je     L289
  xor    %eax,%eax
  call   <abort@plt>
  movsd  0x8(%rsp),%xmm1
L289:
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x8(%rsp)
  call   <test4@plt>
  movsd  0x8(%rsp),%xmm1
  test   %eax,%eax
  jne    L312
L155:
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x8(%rsp)
  call   <test5@plt>
  movsd  0x8(%rsp),%xmm1
  cmp    $0x1,%eax
  je     L374
  xor    %eax,%eax
  call   <abort@plt>
  movsd  0x8(%rsp),%xmm1
L374:
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x8(%rsp)
  call   <test6@plt>
  movsd  0x8(%rsp),%xmm1
  test   %eax,%eax
  jne    L122
L465:
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x8(%rsp)
  call   <test7@plt>
  movsd  0x8(%rsp),%xmm1
  cmp    $0x1,%eax
  je     L371
  xor    %eax,%eax
  call   <abort@plt>
  movsd  0x8(%rsp),%xmm1
L371:
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x8(%rsp)
  call   <test8@plt>
  movsd  0x8(%rsp),%xmm1
  test   %eax,%eax
  jne    L82
L626:
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x8(%rsp)
  call   <test9@plt>
  movsd  0x8(%rsp),%xmm1
  cmp    $0x1,%eax
  je     L392
  xor    %eax,%eax
  call   <abort@plt>
  movsd  0x8(%rsp),%xmm1
L392:
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x8(%rsp)
  call   <test10@plt>
  movsd  0x8(%rsp),%xmm1
  test   %eax,%eax
  jne    L299
L591:
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x8(%rsp)
  call   <test11@plt>
  movsd  0x8(%rsp),%xmm1
  cmp    $0x1,%eax
  je     L6
  xor    %eax,%eax
  call   <abort@plt>
  movsd  0x8(%rsp),%xmm1
L6:
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x8(%rsp)
  call   <test12@plt>
  movsd  0x8(%rsp),%xmm1
  test   %eax,%eax
  jne    L558
L377:
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x8(%rsp)
  call   <test13@plt>
  movsd  0x8(%rsp),%xmm1
  cmp    $0x1,%eax
  je     L716
  xor    %eax,%eax
  call   <abort@plt>
  movsd  0x8(%rsp),%xmm1
L716:
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x8(%rsp)
  call   <test14@plt>
  movsd  0x8(%rsp),%xmm1
  test   %eax,%eax
  jne    L573
L684:
  movapd %xmm1,%xmm0
  call   <test15@plt>
  cmp    $0x1,%eax
  je     L319
  xor    %eax,%eax
  call   <abort@plt>
L319:
  lea    D361(%rip),%rdi
  call   <printf@plt>
  xor    %edi,%edi
  call   <exit@plt>
  xor    %eax,%eax
  add    $0x18,%rsp
  ret
L573:
  xor    %eax,%eax
  call   <abort@plt>
  movsd  0x8(%rsp),%xmm1
  jmp    L684
L558:
  xor    %eax,%eax
  call   <abort@plt>
  movsd  0x8(%rsp),%xmm1
  jmp    L377
L299:
  xor    %eax,%eax
  call   <abort@plt>
  movsd  0x8(%rsp),%xmm1
  jmp    L591
L82:
  xor    %eax,%eax
  call   <abort@plt>
  movsd  0x8(%rsp),%xmm1
  jmp    L626
L122:
  xor    %eax,%eax
  call   <abort@plt>
  movsd  0x8(%rsp),%xmm1
  jmp    L465
L312:
  xor    %eax,%eax
  call   <abort@plt>
  movsd  0x8(%rsp),%xmm1
  jmp    L155
L673:
  xor    %eax,%eax
  call   <abort@plt>
  movsd  0x8(%rsp),%xmm1
  jmp    L353
L703:
  xor    %eax,%eax
  call   <abort@plt>
  movsd  0x8(%rsp),%xmm1
  jmp    L313
L55:
  xor    %eax,%eax
  call   <abort@plt>
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  jmp    L644
L357:
  xor    %eax,%eax
  call   <abort@plt>
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  jmp    L480
L378:
  xor    %eax,%eax
  call   <abort@plt>
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  jmp    L121
L483:
  xor    %eax,%eax
  call   <abort@plt>
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  jmp    L102
L235:
  xor    %eax,%eax
  call   <abort@plt>
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  jmp    L641
L722:
  xor    %eax,%eax
  call   <abort@plt>
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  jmp    L136
L466:
  xor    %eax,%eax
  call   <abort@plt>
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  jmp    L341
L696:
  xor    %eax,%eax
  call   <abort@plt>
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  jmp    L658
L84:
  xor    %eax,%eax
  call   <abort@plt>
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  jmp    L695
L87:
  xor    %eax,%eax
  call   <abort@plt>
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  jmp    L160
L556:
  xor    %eax,%eax
  call   <abort@plt>
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  jmp    L441
L525:
  xor    %eax,%eax
  call   <abort@plt>
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  jmp    L283
L10:
  xor    %eax,%eax
  call   <abort@plt>
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  jmp    L50
L473:
  xor    %eax,%eax
  call   <abort@plt>
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  jmp    L708
L451:
  xor    %eax,%eax
  call   <abort@plt>
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  jmp    L560
L611:
  xor    %eax,%eax
  call   <abort@plt>
  mov    D21(%rip),%rax
  movq   %rax,%xmm1
  jmp    L350
L721:
  xor    %eax,%eax
  call   <abort@plt>
  mov    D41(%rip),%rax
  movq   %rax,%xmm0
  jmp    L450
```

tool_calls: name: unpack_data
arguments: label: D41
type: f32[2]
name: unpack_data
arguments: label: D662
type: f32[2]
name: unpack_data
arguments: label: D217
type: f32[2]
name: unpack_data
arguments: label: D21
type: f64
name: unpack_data
arguments: label: D492
type: f64
name: unpack_data
arguments: label: D635
type: f32[2]
name: unpack_data
arguments: label: D361
type: string

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

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

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

tool: D21: 1984

tool: D492: 1

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

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