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

```asm
<fastBounceIn>:
  endbr64
  pxor   %xmm10,%xmm10
  mov    $0x0,%edx
  ucomiss %xmm10,%xmm0
  setnp  %al
  cmovne %edx,%eax
  test   %al,%al
  jne    L103
  ucomiss %xmm10,%xmm2
  setnp  %dl
  cmove  %edx,%eax
  test   %al,%al
  jne    L103
  push   %rbx
  movaps %xmm0,%xmm7
  mov    %edi,%ebx
  sub    $0x20,%rsp
  movss  D71(%rip),%xmm9
  ucomiss %xmm9,%xmm0
  jp     L43
  je     L91
L43:
  ucomiss %xmm9,%xmm3
  jp     L42
  jne    L42
  pxor   %xmm0,%xmm0
  movsd  D21(%rip),%xmm6
  cvtsi2sd %ebx,%xmm0
  addsd  D59(%rip),%xmm0
  divsd  %xmm0,%xmm6
  cvtsd2ss %xmm6,%xmm6
L90:
  test   %ebx,%ebx
  js     L40
  xor    %eax,%eax
  movaps %xmm10,%xmm5
  nop
L59:
  movaps %xmm5,%xmm8
  addss  %xmm6,%xmm5
  comiss %xmm8,%xmm7
  jb     L50
  comiss %xmm7,%xmm5
  ja     L80
L50:
  mulss  %xmm3,%xmm6
  add    $0x1,%eax
  cmp    %eax,%ebx
  jge    L59
L40:
  add    $0x20,%rsp
  movaps %xmm10,%xmm0
  pop    %rbx
  ret
  nopl   0x0(%rax)
L91:
  addss  %xmm1,%xmm2
  add    $0x20,%rsp
  pop    %rbx
  movaps %xmm2,%xmm0
  ret
  nopl   (%rax)
L103:
  movaps %xmm1,%xmm0
  ret
  nopl   0x0(%rax)
L42:
  pxor   %xmm0,%xmm0
  cvttss2si %xmm3,%edi
  movss  %xmm4,0x18(%rsp)
  cvtsi2ss %ebx,%xmm0
  movss  %xmm2,0x14(%rsp)
  movss  %xmm1,0x10(%rsp)
  movss  %xmm7,0xc(%rsp)
  movss  %xmm3,0x8(%rsp)
  call   <pow@plt>
  movss  0x8(%rsp),%xmm3
  pxor   %xmm10,%xmm10
  movss  D71(%rip),%xmm9
  movaps %xmm0,%xmm5
  movss  0x18(%rsp),%xmm4
  movss  0x14(%rsp),%xmm2
  movaps %xmm3,%xmm6
  subss  %xmm9,%xmm5
  movss  0x10(%rsp),%xmm1
  movss  0xc(%rsp),%xmm7
  subss  %xmm9,%xmm6
  mulss  D33(%rip),%xmm0
  divss  %xmm6,%xmm5
  movaps %xmm9,%xmm6
  addss  %xmm5,%xmm0
  divss  %xmm0,%xmm6
  jmp    L90
L80:
  sub    %eax,%ebx
  pxor   %xmm0,%xmm0
  mov    $0x2,%edi
  movss  %xmm2,0x1c(%rsp)
  cvtsi2ss %ebx,%xmm0
  movss  %xmm1,0x18(%rsp)
  movss  %xmm7,0x14(%rsp)
  movss  %xmm8,0x10(%rsp)
  movss  %xmm6,0xc(%rsp)
  mulss  %xmm4,%xmm0
  movss  %xmm5,0x8(%rsp)
  call   <pow@plt>
  movss  0x8(%rsp),%xmm5
  movss  0x10(%rsp),%xmm8
  movss  0xc(%rsp),%xmm6
  movss  0x14(%rsp),%xmm7
  cvtss2sd %xmm0,%xmm0
  addss  %xmm5,%xmm8
  movss  0x1c(%rsp),%xmm2
  movss  D62(%rip),%xmm3
  movss  D71(%rip),%xmm9
  movss  0x18(%rsp),%xmm1
  mulss  %xmm3,%xmm6
  cvtss2sd %xmm2,%xmm2
  divsd  D50(%rip),%xmm2
  add    $0x20,%rsp
  mulss  %xmm3,%xmm8
  movaps %xmm9,%xmm3
  pop    %rbx
  divsd  %xmm0,%xmm2
  pxor   %xmm0,%xmm0
  subss  %xmm8,%xmm7
  divss  %xmm6,%xmm7
  cvtsd2ss %xmm2,%xmm0
  mulss  %xmm7,%xmm7
  subss  %xmm7,%xmm3
  mulss  %xmm0,%xmm3
  addss  %xmm1,%xmm3
  movaps %xmm3,%xmm0
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D71
type_infered: f32
name: extract_symbolic_data
arguments: data_label: D21
type_infered: f32[2]
name: extract_symbolic_data
arguments: data_label: D59
type_infered: f64
name: extract_symbolic_data
arguments: data_label: D33
type_infered: byte[4]
name: extract_symbolic_data
arguments: data_label: D62
type_infered: byte[4]
name: extract_symbolic_data
arguments: data_label: D50
type_infered: f64

tool: D71: 1

tool: {"D21": [0.0,1.875]}

tool: D59: 0.25

tool: {"D33": [0x00,0x00,0x80,0x3e]}

tool: {"D62": [0x00,0x00,0x00,0x3f]}

tool: D50: 0.75

assistant: ```c
float fastBounceIn(float fraction, float start, float delta, int bounces, float growth, float damping) {
  if (fraction == 0 || delta == 0)
    return start;
  if (fraction == 1)
    return start + delta;
  float w0;
  if (growth == 1.0)
    w0 = 1 / (bounces + 0.25);
  else {
    float gN = pow(growth, bounces);
    w0 = 1 / ((gN - 1) / (growth - 1) + gN / 4);
  }
  float bounceStart = 0;
  int i;
  float w = w0;
  for (i = 0; i <= bounces; i++) {
    float bounceEnd = bounceStart + w;
    if (fraction >= bounceStart && fraction < bounceEnd) {
      float half = (bounceEnd + bounceStart) / 2;
      float top = delta / 0.75 / pow(2, damping * ((bounces - i)));
      fraction -= half;
      fraction /= (w / 2);
      return (1 - fraction * fraction) * top + start;
    }
    bounceStart = bounceEnd;
    w = w * growth;
  }
  return 0;
}
```