user: 请将以下的汇编代码转换成C语言代码:

```asm
<fastBounceIn>:
  endbr64
  pxor   %xmm10,%xmm10
  mov    $0x0,%edx
  ucomiss %xmm10,%xmm0
  setnp  %al
  cmovne %edx,%eax
  test   %al,%al
  jne    L82
  ucomiss %xmm10,%xmm2
  setnp  %dl
  cmove  %edx,%eax
  test   %al,%al
  jne    L82
  push   %rbx
  movaps %xmm0,%xmm7
  mov    %edi,%ebx
  sub    $0x20,%rsp
  movss  D4(%rip),%xmm9
  ucomiss %xmm9,%xmm0
  jp     L87
  je     L103
L87:
  ucomiss %xmm9,%xmm3
  jp     L75
  jne    L75
  pxor   %xmm0,%xmm0
  movsd  D54(%rip),%xmm6
  cvtsi2sd %ebx,%xmm0
  addsd  D31(%rip),%xmm0
  divsd  %xmm0,%xmm6
  cvtsd2ss %xmm6,%xmm6
L67:
  test   %ebx,%ebx
  js     L83
  xor    %eax,%eax
  movaps %xmm10,%xmm5
  nop
L15:
  movaps %xmm5,%xmm8
  addss  %xmm6,%xmm5
  comiss %xmm8,%xmm7
  jb     L49
  comiss %xmm7,%xmm5
  ja     L46
L49:
  mulss  %xmm3,%xmm6
  add    $0x1,%eax
  cmp    %eax,%ebx
  jge    L15
L83:
  add    $0x20,%rsp
  movaps %xmm10,%xmm0
  pop    %rbx
  ret
  nopl   0x0(%rax)
L103:
  addss  %xmm1,%xmm2
  add    $0x20,%rsp
  pop    %rbx
  movaps %xmm2,%xmm0
  ret
  nopl   (%rax)
L82:
  movaps %xmm1,%xmm0
  ret
  nopl   0x0(%rax)
L75:
  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  D4(%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  D3(%rip),%xmm0
  divss  %xmm6,%xmm5
  movaps %xmm9,%xmm6
  addss  %xmm5,%xmm0
  divss  %xmm0,%xmm6
  jmp    L67
L46:
  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  %xmm6,0x10(%rsp)
  movss  %xmm5,0xc(%rsp)
  mulss  %xmm4,%xmm0
  movss  %xmm8,0x8(%rsp)
  call   <pow@plt>
  movss  0x8(%rsp),%xmm8
  movss  0xc(%rsp),%xmm5
  movss  0x10(%rsp),%xmm6
  movss  0x14(%rsp),%xmm7
  cvtss2sd %xmm0,%xmm0
  addss  %xmm5,%xmm8
  movss  0x1c(%rsp),%xmm2
  movss  D44(%rip),%xmm3
  movss  D4(%rip),%xmm9
  movss  0x18(%rsp),%xmm1
  mulss  %xmm3,%xmm6
  cvtss2sd %xmm2,%xmm2
  divsd  D49(%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: parse_data
arguments: tag: D4
data_type: f32
name: parse_data
arguments: tag: D54
data_type: f32[2]
name: parse_data
arguments: tag: D31
data_type: f64
name: parse_data
arguments: tag: D3
data_type: byte[4]
name: parse_data
arguments: tag: D44
data_type: byte[4]
name: parse_data
arguments: tag: D49
data_type: f64

tool: D4: 1

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

tool: D31: 0.25

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

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

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