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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x9c0,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x9b4(%rbp)
  jmp    L487
L453:
  mov    -0x9b4(%rbp),%edx
  movslq %edx,%rax
  imul   $0x4ec4ec4f,%rax,%rax
  shr    $0x20,%rax
  sar    $0x2,%eax
  mov    %edx,%esi
  sar    $0x1f,%esi
  sub    %esi,%eax
  mov    %eax,%ecx
  mov    %ecx,%eax
  add    %eax,%eax
  add    %ecx,%eax
  shl    $0x2,%eax
  add    %ecx,%eax
  mov    %edx,%ecx
  sub    %eax,%ecx
  pxor   %xmm0,%xmm0
  cvtsi2ss %ecx,%xmm0
  mov    -0x9b4(%rbp),%eax
  cltq
  movss  %xmm0,-0x640(%rbp,%rax,4)
  mov    -0x9b4(%rbp),%eax
  imul   %eax,%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  mov    -0x9b4(%rbp),%eax
  cltq
  movss  %xmm0,-0x320(%rbp,%rax,4)
  addl   $0x1,-0x9b4(%rbp)
L487:
  cmpl   $0x62,-0x9b4(%rbp)
  jle    L453
  lea    -0x320(%rbp),%rdx
  lea    -0x640(%rbp),%rsi
  lea    -0x960(%rbp),%rax
  mov    $0x63,%ecx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <test_float_half@plt>
  movl   $0x0,-0x9b0(%rbp)
  jmp    L148
L281:
  mov    -0x9b0(%rbp),%eax
  cltq
  movss  -0x640(%rbp,%rax,4),%xmm1
  movss  D54(%rip),%xmm0
  comiss %xmm1,%xmm0
  jbe    L166
  mov    -0x9b0(%rbp),%eax
  cltq
  movss  -0x320(%rbp,%rax,4),%xmm1
  movss  D55(%rip),%xmm0
  mulss  %xmm1,%xmm0
  jmp    L343
L166:
  mov    -0x9b0(%rbp),%eax
  cltq
  movss  -0x640(%rbp,%rax,4),%xmm0
L343:
  movss  %xmm0,-0x97c(%rbp)
  mov    -0x9b0(%rbp),%eax
  cltq
  movss  -0x960(%rbp,%rax,4),%xmm0
  ucomiss -0x97c(%rbp),%xmm0
  jp     L489
  ucomiss -0x97c(%rbp),%xmm0
  je     L8
L489:
  call   <abort@plt>
L8:
  addl   $0x1,-0x9b0(%rbp)
L148:
  cmpl   $0x62,-0x9b0(%rbp)
  jle    L281
  movl   $0x0,-0x9ac(%rbp)
  jmp    L371
L80:
  mov    -0x9ac(%rbp),%edx
  movslq %edx,%rax
  imul   $0x4ec4ec4f,%rax,%rax
  shr    $0x20,%rax
  sar    $0x2,%eax
  mov    %edx,%esi
  sar    $0x1f,%esi
  sub    %esi,%eax
  mov    %eax,%ecx
  mov    %ecx,%eax
  add    %eax,%eax
  add    %ecx,%eax
  shl    $0x2,%eax
  add    %ecx,%eax
  sub    %eax,%edx
  mov    %edx,%ecx
  pxor   %xmm0,%xmm0
  cvtsi2ss %ecx,%xmm0
  mov    -0x9ac(%rbp),%eax
  cltq
  movss  %xmm0,-0x640(%rbp,%rax,4)
  mov    -0x9ac(%rbp),%eax
  imul   %eax,%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  mov    -0x9ac(%rbp),%eax
  cltq
  movss  %xmm0,-0x320(%rbp,%rax,4)
  addl   $0x1,-0x9ac(%rbp)
L371:
  cmpl   $0x62,-0x9ac(%rbp)
  jle    L80
  lea    -0x320(%rbp),%rdx
  lea    -0x640(%rbp),%rsi
  lea    -0x960(%rbp),%rax
  mov    $0x63,%ecx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <test_float_two@plt>
  movl   $0x0,-0x9a8(%rbp)
  jmp    L99
L158:
  mov    -0x9a8(%rbp),%eax
  cltq
  movss  -0x640(%rbp,%rax,4),%xmm1
  movss  D54(%rip),%xmm0
  comiss %xmm1,%xmm0
  jbe    L257
  mov    -0x9a8(%rbp),%eax
  cltq
  movss  -0x320(%rbp,%rax,4),%xmm0
  addss  %xmm0,%xmm0
  jmp    L178
L257:
  mov    -0x9a8(%rbp),%eax
  cltq
  movss  -0x640(%rbp,%rax,4),%xmm0
L178:
  movss  %xmm0,-0x980(%rbp)
  mov    -0x9a8(%rbp),%eax
  cltq
  movss  -0x960(%rbp,%rax,4),%xmm0
  ucomiss -0x980(%rbp),%xmm0
  jp     L483
  ucomiss -0x980(%rbp),%xmm0
  je     L282
L483:
  call   <abort@plt>
L282:
  addl   $0x1,-0x9a8(%rbp)
L99:
  cmpl   $0x62,-0x9a8(%rbp)
  jle    L158
  movl   $0x0,-0x9a4(%rbp)
  jmp    L381
L142:
  mov    -0x9a4(%rbp),%edx
  movslq %edx,%rax
  imul   $0x4ec4ec4f,%rax,%rax
  shr    $0x20,%rax
  sar    $0x2,%eax
  mov    %edx,%esi
  sar    $0x1f,%esi
  sub    %esi,%eax
  mov    %eax,%ecx
  mov    %ecx,%eax
  add    %eax,%eax
  add    %ecx,%eax
  shl    $0x2,%eax
  add    %ecx,%eax
  mov    %edx,%ecx
  sub    %eax,%ecx
  pxor   %xmm0,%xmm0
  cvtsi2ss %ecx,%xmm0
  mov    -0x9a4(%rbp),%eax
  cltq
  movss  %xmm0,-0x640(%rbp,%rax,4)
  mov    -0x9a4(%rbp),%eax
  imul   %eax,%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  mov    -0x9a4(%rbp),%eax
  cltq
  movss  %xmm0,-0x320(%rbp,%rax,4)
  addl   $0x1,-0x9a4(%rbp)
L381:
  cmpl   $0x62,-0x9a4(%rbp)
  jle    L142
  lea    -0x320(%rbp),%rdx
  lea    -0x640(%rbp),%rsi
  lea    -0x960(%rbp),%rax
  mov    $0x63,%ecx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <test_float_four@plt>
  movl   $0x0,-0x9a0(%rbp)
  jmp    L74
L363:
  mov    -0x9a0(%rbp),%eax
  cltq
  movss  -0x640(%rbp,%rax,4),%xmm1
  movss  D54(%rip),%xmm0
  comiss %xmm1,%xmm0
  jbe    L352
  mov    -0x9a0(%rbp),%eax
  cltq
  movss  -0x320(%rbp,%rax,4),%xmm1
  movss  D3(%rip),%xmm0
  mulss  %xmm1,%xmm0
  jmp    L93
L352:
  mov    -0x9a0(%rbp),%eax
  cltq
  movss  -0x640(%rbp,%rax,4),%xmm0
L93:
  movss  %xmm0,-0x984(%rbp)
  mov    -0x9a0(%rbp),%eax
  cltq
  movss  -0x960(%rbp,%rax,4),%xmm0
  ucomiss -0x984(%rbp),%xmm0
  jp     L25
  ucomiss -0x984(%rbp),%xmm0
  je     L69
L25:
  call   <abort@plt>
L69:
  addl   $0x1,-0x9a0(%rbp)
L74:
  cmpl   $0x62,-0x9a0(%rbp)
  jle    L363
  movl   $0x0,-0x99c(%rbp)
  jmp    L403
L446:
  mov    -0x99c(%rbp),%edx
  movslq %edx,%rax
  imul   $0x4ec4ec4f,%rax,%rax
  shr    $0x20,%rax
  sar    $0x2,%eax
  mov    %edx,%esi
  sar    $0x1f,%esi
  sub    %esi,%eax
  mov    %eax,%ecx
  mov    %ecx,%eax
  add    %eax,%eax
  add    %ecx,%eax
  shl    $0x2,%eax
  add    %ecx,%eax
  sub    %eax,%edx
  mov    %edx,%ecx
  pxor   %xmm0,%xmm0
  cvtsi2sd %ecx,%xmm0
  mov    -0x99c(%rbp),%eax
  cltq
  movsd  %xmm0,-0x640(%rbp,%rax,8)
  mov    -0x99c(%rbp),%eax
  imul   %eax,%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mov    -0x99c(%rbp),%eax
  cltq
  movsd  %xmm0,-0x320(%rbp,%rax,8)
  addl   $0x1,-0x99c(%rbp)
L403:
  cmpl   $0x62,-0x99c(%rbp)
  jle    L446
  lea    -0x320(%rbp),%rdx
  lea    -0x640(%rbp),%rsi
  lea    -0x960(%rbp),%rax
  mov    $0x63,%ecx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <test_double_half@plt>
  movl   $0x0,-0x998(%rbp)
  jmp    L270
L462:
  mov    -0x998(%rbp),%eax
  cltq
  movsd  -0x640(%rbp,%rax,8),%xmm1
  movsd  D76(%rip),%xmm0
  comisd %xmm1,%xmm0
  jbe    L411
  mov    -0x998(%rbp),%eax
  cltq
  movsd  -0x320(%rbp,%rax,8),%xmm1
  movsd  D95(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  jmp    L378
L411:
  mov    -0x998(%rbp),%eax
  cltq
  movsd  -0x640(%rbp,%rax,8),%xmm0
L378:
  movsd  %xmm0,-0x968(%rbp)
  mov    -0x998(%rbp),%eax
  cltq
  movsd  -0x960(%rbp,%rax,8),%xmm0
  ucomisd -0x968(%rbp),%xmm0
  jp     L321
  ucomisd -0x968(%rbp),%xmm0
  je     L471
L321:
  call   <abort@plt>
L471:
  addl   $0x1,-0x998(%rbp)
L270:
  cmpl   $0x62,-0x998(%rbp)
  jle    L462
  movl   $0x0,-0x994(%rbp)
  jmp    L30
L353:
  mov    -0x994(%rbp),%edx
  movslq %edx,%rax
  imul   $0x4ec4ec4f,%rax,%rax
  shr    $0x20,%rax
  sar    $0x2,%eax
  mov    %edx,%esi
  sar    $0x1f,%esi
  sub    %esi,%eax
  mov    %eax,%ecx
  mov    %ecx,%eax
  add    %eax,%eax
  add    %ecx,%eax
  shl    $0x2,%eax
  add    %ecx,%eax
  mov    %edx,%ecx
  sub    %eax,%ecx
  pxor   %xmm0,%xmm0
  cvtsi2sd %ecx,%xmm0
  mov    -0x994(%rbp),%eax
  cltq
  movsd  %xmm0,-0x640(%rbp,%rax,8)
  mov    -0x994(%rbp),%eax
  imul   %eax,%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mov    -0x994(%rbp),%eax
  cltq
  movsd  %xmm0,-0x320(%rbp,%rax,8)
  addl   $0x1,-0x994(%rbp)
L30:
  cmpl   $0x62,-0x994(%rbp)
  jle    L353
  lea    -0x320(%rbp),%rdx
  lea    -0x640(%rbp),%rsi
  lea    -0x960(%rbp),%rax
  mov    $0x63,%ecx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <test_double_two@plt>
  movl   $0x0,-0x990(%rbp)
  jmp    L359
L78:
  mov    -0x990(%rbp),%eax
  cltq
  movsd  -0x640(%rbp,%rax,8),%xmm1
  movsd  D76(%rip),%xmm0
  comisd %xmm1,%xmm0
  jbe    L447
  mov    -0x990(%rbp),%eax
  cltq
  movsd  -0x320(%rbp,%rax,8),%xmm0
  addsd  %xmm0,%xmm0
  jmp    L71
L447:
  mov    -0x990(%rbp),%eax
  cltq
  movsd  -0x640(%rbp,%rax,8),%xmm0
L71:
  movsd  %xmm0,-0x970(%rbp)
  mov    -0x990(%rbp),%eax
  cltq
  movsd  -0x960(%rbp,%rax,8),%xmm0
  ucomisd -0x970(%rbp),%xmm0
  jp     L159
  ucomisd -0x970(%rbp),%xmm0
  je     L242
L159:
  call   <abort@plt>
L242:
  addl   $0x1,-0x990(%rbp)
L359:
  cmpl   $0x62,-0x990(%rbp)
  jle    L78
  movl   $0x0,-0x98c(%rbp)
  jmp    L476
L75:
  mov    -0x98c(%rbp),%edx
  movslq %edx,%rax
  imul   $0x4ec4ec4f,%rax,%rax
  shr    $0x20,%rax
  sar    $0x2,%eax
  mov    %edx,%esi
  sar    $0x1f,%esi
  sub    %esi,%eax
  mov    %eax,%ecx
  mov    %ecx,%eax
  add    %eax,%eax
  add    %ecx,%eax
  shl    $0x2,%eax
  add    %ecx,%eax
  sub    %eax,%edx
  mov    %edx,%ecx
  pxor   %xmm0,%xmm0
  cvtsi2sd %ecx,%xmm0
  mov    -0x98c(%rbp),%eax
  cltq
  movsd  %xmm0,-0x640(%rbp,%rax,8)
  mov    -0x98c(%rbp),%eax
  imul   %eax,%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mov    -0x98c(%rbp),%eax
  cltq
  movsd  %xmm0,-0x320(%rbp,%rax,8)
  addl   $0x1,-0x98c(%rbp)
L476:
  cmpl   $0x62,-0x98c(%rbp)
  jle    L75
  lea    -0x320(%rbp),%rdx
  lea    -0x640(%rbp),%rsi
  lea    -0x960(%rbp),%rax
  mov    $0x63,%ecx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <test_double_four@plt>
  movl   $0x0,-0x988(%rbp)
  jmp    L186
L374:
  mov    -0x988(%rbp),%eax
  cltq
  movsd  -0x640(%rbp,%rax,8),%xmm1
  movsd  D76(%rip),%xmm0
  comisd %xmm1,%xmm0
  jbe    L390
  mov    -0x988(%rbp),%eax
  cltq
  movsd  -0x320(%rbp,%rax,8),%xmm1
  movsd  D63(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  jmp    L433
L390:
  mov    -0x988(%rbp),%eax
  cltq
  movsd  -0x640(%rbp,%rax,8),%xmm0
L433:
  movsd  %xmm0,-0x978(%rbp)
  mov    -0x988(%rbp),%eax
  cltq
  movsd  -0x960(%rbp,%rax,8),%xmm0
  ucomisd -0x978(%rbp),%xmm0
  jp     L147
  ucomisd -0x978(%rbp),%xmm0
  je     L168
L147:
  call   <abort@plt>
L168:
  addl   $0x1,-0x988(%rbp)
L186:
  cmpl   $0x62,-0x988(%rbp)
  jle    L374
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L193
  call   <__stack_chk_fail@plt>
L193:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: data_tag: D54
type: f32
name: unpack_data
arguments: data_tag: D55
type: f32
name: unpack_data
arguments: data_tag: D3
type: f32
name: unpack_data
arguments: data_tag: D76
type: byte[8]
name: unpack_data
arguments: data_tag: D95
type: byte[8]
name: unpack_data
arguments: data_tag: D63
type: byte[8]

tool: D54: 8

tool: D55: 0.5

tool: D3: 4

tool: {"D76": [0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x40]}

tool: {"D95": [0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x3f]}

tool: {"D63": [0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x40]}

assistant: ```c
int main(void) {
  {
    float x[99], y[99], z[99];
    for (int i = 0; i < 99; ++i) {
      y[i] = i % 13;
      z[i] = i * i;
    }
    test_float_half(x, y, z, 99);
    for (int i = 0; i < 99; ++i) {
      float expected = y[i] < 8 ? z[i] * (float)0.5 : y[i];
      if (x[i] != expected)
        __builtin_abort();
      asm volatile("" ::: "memory");
    }
  }
  {
    float x[99], y[99], z[99];
    for (int i = 0; i < 99; ++i) {
      y[i] = i % 13;
      z[i] = i * i;
    }
    test_float_two(x, y, z, 99);
    for (int i = 0; i < 99; ++i) {
      float expected = y[i] < 8 ? z[i] * (float)2.0 : y[i];
      if (x[i] != expected)
        __builtin_abort();
      asm volatile("" ::: "memory");
    }
  }
  {
    float x[99], y[99], z[99];
    for (int i = 0; i < 99; ++i) {
      y[i] = i % 13;
      z[i] = i * i;
    }
    test_float_four(x, y, z, 99);
    for (int i = 0; i < 99; ++i) {
      float expected = y[i] < 8 ? z[i] * (float)4.0 : y[i];
      if (x[i] != expected)
        __builtin_abort();
      asm volatile("" ::: "memory");
    }
  }
  {
    double x[99], y[99], z[99];
    for (int i = 0; i < 99; ++i) {
      y[i] = i % 13;
      z[i] = i * i;
    }
    test_double_half(x, y, z, 99);
    for (int i = 0; i < 99; ++i) {
      double expected = y[i] < 8 ? z[i] * (double)0.5 : y[i];
      if (x[i] != expected)
        __builtin_abort();
      asm volatile("" ::: "memory");
    }
  }
  {
    double x[99], y[99], z[99];
    for (int i = 0; i < 99; ++i) {
      y[i] = i % 13;
      z[i] = i * i;
    }
    test_double_two(x, y, z, 99);
    for (int i = 0; i < 99; ++i) {
      double expected = y[i] < 8 ? z[i] * (double)2.0 : y[i];
      if (x[i] != expected)
        __builtin_abort();
      asm volatile("" ::: "memory");
    }
  }
  {
    double x[99], y[99], z[99];
    for (int i = 0; i < 99; ++i) {
      y[i] = i % 13;
      z[i] = i * i;
    }
    test_double_four(x, y, z, 99);
    for (int i = 0; i < 99; ++i) {
      double expected = y[i] < 8 ? z[i] * (double)4.0 : y[i];
      if (x[i] != expected)
        __builtin_abort();
      asm volatile("" ::: "memory");
    }
  }
  return 0;
}
```