user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<JHKeyframeAnimationFunctionEaseOutBounce>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  movsd  %xmm0,-0x8(%rbp)
  movsd  %xmm1,-0x10(%rbp)
  movsd  %xmm2,-0x18(%rbp)
  movsd  %xmm3,-0x20(%rbp)
  movsd  -0x8(%rbp),%xmm0
  divsd  -0x20(%rbp),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  D54(%rip),%xmm0
  comisd -0x8(%rbp),%xmm0
  jbe    L59
  movsd  -0x8(%rbp),%xmm1
  movsd  D116(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  mulsd  -0x8(%rbp),%xmm0
  mulsd  -0x18(%rbp),%xmm0
  addsd  -0x10(%rbp),%xmm0
  jmp    L8
L59:
  movsd  D42(%rip),%xmm0
  comisd -0x8(%rbp),%xmm0
  jbe    L14
  movsd  -0x8(%rbp),%xmm0
  movsd  D126(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x8(%rbp),%xmm1
  movsd  D116(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x8(%rbp),%xmm1
  movsd  D97(%rip),%xmm0
  addsd  %xmm1,%xmm0
  mulsd  -0x18(%rbp),%xmm0
  addsd  -0x10(%rbp),%xmm0
  jmp    L8
L14:
  movsd  D6(%rip),%xmm0
  comisd -0x8(%rbp),%xmm0
  jbe    L25
  movsd  -0x8(%rbp),%xmm0
  movsd  D101(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x8(%rbp),%xmm1
  movsd  D116(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x8(%rbp),%xmm1
  movsd  D125(%rip),%xmm0
  addsd  %xmm1,%xmm0
  mulsd  -0x18(%rbp),%xmm0
  addsd  -0x10(%rbp),%xmm0
  jmp    L8
L25:
  movsd  -0x8(%rbp),%xmm0
  movsd  D37(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x8(%rbp),%xmm1
  movsd  D116(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x8(%rbp),%xmm1
  movsd  D68(%rip),%xmm0
  addsd  %xmm1,%xmm0
  mulsd  -0x18(%rbp),%xmm0
  addsd  -0x10(%rbp),%xmm0
L8:
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  pop    %rbp
  ret
```

tool_calls: name: disassemble_data
arguments: data_label: D54
type: byte[8]
name: disassemble_data
arguments: data_label: D116
type: f64
name: disassemble_data
arguments: data_label: D42
type: byte[8]
name: disassemble_data
arguments: data_label: D126
type: byte[8]
name: disassemble_data
arguments: data_label: D97
type: byte[8]
name: disassemble_data
arguments: data_label: D6
type: byte[8]
name: disassemble_data
arguments: data_label: D101
type: byte[8]
name: disassemble_data
arguments: data_label: D125
type: byte[8]
name: disassemble_data
arguments: data_label: D37
type: byte[8]
name: disassemble_data
arguments: data_label: D68
type: byte[8]

tool: {"D54": [0x46,0x17,0x5d,0x74,0xd1,0x45,0xd7,0x3f]}

tool: D116: 7.5625

tool: {"D42": [0x46,0x17,0x5d,0x74,0xd1,0x45,0xe7,0x3f]}

tool: {"D126": [0x74,0xd1,0x45,0x17,0x5d,0x74,0xe1,0x3f]}

tool: {"D97": [0x00,0x00,0x00,0x00,0x00,0x00,0xe8,0x3f]}

tool: {"D6": [0x17,0x5d,0x74,0xd1,0x45,0x17,0xed,0x3f]}

tool: {"D101": [0x2f,0xba,0xe8,0xa2,0x8b,0x2e,0xea,0x3f]}

tool: {"D125": [0x00,0x00,0x00,0x00,0x00,0x00,0xee,0x3f]}

tool: {"D37": [0x8c,0x2e,0xba,0xe8,0xa2,0x8b,0xee,0x3f]}

tool: {"D68": [0x00,0x00,0x00,0x00,0x00,0x80,0xef,0x3f]}

assistant: ```c
double JHKeyframeAnimationFunctionEaseOutBounce(double t, double b, double c, double d) {
  if ((t /= d) < (1 / 2.75)) {
    return c * (7.5625 * t * t) + b;
  } else if (t < (2 / 2.75)) {
    return c * (7.5625 * (t -= (1.5 / 2.75)) * t + .75) + b;
  } else if (t < (2.5 / 2.75)) {
    return c * (7.5625 * (t -= (2.25 / 2.75)) * t + .9375) + b;
  } else {
    return c * (7.5625 * (t -= (2.625 / 2.75)) * t + .984375) + b;
  }
}
```