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

```asm
<catmullrom_interp>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbx
  sub    $0x58,%rsp
  mov    %rdi,-0x58(%rbp)
  mov    %rsi,-0x60(%rbp)
  mov    %rdx,-0x68(%rbp)
  movss  %xmm0,-0x6c(%rbp)
  movss  %xmm1,-0x70(%rbp)
  mov    %rcx,-0x78(%rbp)
  movss  -0x6c(%rbp),%xmm0
  movss  D10(%rip),%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x6c(%rbp)
  movss  -0x70(%rbp),%xmm0
  movss  D10(%rip),%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x70(%rbp)
  mov    -0x6c(%rbp),%eax
  movd   %eax,%xmm0
  call   <floorf@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x50(%rbp)
  mov    -0x70(%rbp),%eax
  movd   %eax,%xmm0
  call   <floorf@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x4c(%rbp)
  movss  -0x6c(%rbp),%xmm0
  subss  -0x50(%rbp),%xmm0
  movss  %xmm0,-0x48(%rbp)
  movss  -0x70(%rbp),%xmm0
  subss  -0x4c(%rbp),%xmm0
  movss  %xmm0,-0x44(%rbp)
  movss  -0x50(%rbp),%xmm0
  comiss D41(%rip),%xmm0
  jae    L35
  movss  -0x50(%rbp),%xmm0
  cvttss2si %xmm0,%rax
  mov    %rax,-0x40(%rbp)
  jmp    L29
L35:
  movss  -0x50(%rbp),%xmm0
  movss  D41(%rip),%xmm1
  subss  %xmm1,%xmm0
  cvttss2si %xmm0,%rax
  mov    %rax,-0x40(%rbp)
  movabs $0x8000000000000000,%rax
  xor    %rax,-0x40(%rbp)
L29:
  mov    -0x40(%rbp),%rax
  mov    %rax,-0x40(%rbp)
  movss  -0x4c(%rbp),%xmm0
  comiss D41(%rip),%xmm0
  jae    L16
  movss  -0x4c(%rbp),%xmm0
  cvttss2si %xmm0,%rax
  mov    %rax,-0x38(%rbp)
  jmp    L1
L16:
  movss  -0x4c(%rbp),%xmm0
  movss  D41(%rip),%xmm1
  subss  %xmm1,%xmm0
  cvttss2si %xmm0,%rax
  mov    %rax,-0x38(%rbp)
  movabs $0x8000000000000000,%rax
  xor    %rax,-0x38(%rbp)
L1:
  mov    -0x38(%rbp),%rax
  mov    %rax,-0x38(%rbp)
  mov    -0x38(%rbp),%rax
  lea    0x2(%rax),%r8
  mov    -0x40(%rbp),%rax
  lea    0x2(%rax),%rcx
  mov    -0x78(%rbp),%rdi
  mov    -0x68(%rbp),%rdx
  mov    -0x60(%rbp),%rsi
  mov    -0x58(%rbp),%rax
  mov    %rdi,%r9
  mov    %rax,%rdi
  call   <clamp2d@plt>
  movd   %xmm0,%r13d
  mov    -0x38(%rbp),%rax
  lea    0x2(%rax),%r8
  mov    -0x40(%rbp),%rax
  lea    0x1(%rax),%rcx
  mov    -0x78(%rbp),%rdi
  mov    -0x68(%rbp),%rdx
  mov    -0x60(%rbp),%rsi
  mov    -0x58(%rbp),%rax
  mov    %rdi,%r9
  mov    %rax,%rdi
  call   <clamp2d@plt>
  movd   %xmm0,%r12d
  mov    -0x38(%rbp),%rax
  lea    0x2(%rax),%r8
  mov    -0x78(%rbp),%rdi
  mov    -0x40(%rbp),%rcx
  mov    -0x68(%rbp),%rdx
  mov    -0x60(%rbp),%rsi
  mov    -0x58(%rbp),%rax
  mov    %rdi,%r9
  mov    %rax,%rdi
  call   <clamp2d@plt>
  movd   %xmm0,%ebx
  mov    -0x38(%rbp),%rax
  lea    0x2(%rax),%r8
  mov    -0x40(%rbp),%rax
  lea    -0x1(%rax),%rcx
  mov    -0x78(%rbp),%rdi
  mov    -0x68(%rbp),%rdx
  mov    -0x60(%rbp),%rsi
  mov    -0x58(%rbp),%rax
  mov    %rdi,%r9
  mov    %rax,%rdi
  call   <clamp2d@plt>
  movd   %xmm0,%edx
  mov    -0x48(%rbp),%eax
  movd   %r13d,%xmm4
  movd   %r12d,%xmm3
  movd   %ebx,%xmm2
  movd   %edx,%xmm1
  movd   %eax,%xmm0
  call   <catmullrom_filter@plt>
  movd   %xmm0,%r13d
  mov    -0x38(%rbp),%rax
  lea    0x1(%rax),%r8
  mov    -0x40(%rbp),%rax
  lea    0x2(%rax),%rcx
  mov    -0x78(%rbp),%rdi
  mov    -0x68(%rbp),%rdx
  mov    -0x60(%rbp),%rsi
  mov    -0x58(%rbp),%rax
  mov    %rdi,%r9
  mov    %rax,%rdi
  call   <clamp2d@plt>
  movd   %xmm0,%r14d
  mov    -0x38(%rbp),%rax
  lea    0x1(%rax),%r8
  mov    -0x40(%rbp),%rax
  lea    0x1(%rax),%rcx
  mov    -0x78(%rbp),%rdi
  mov    -0x68(%rbp),%rdx
  mov    -0x60(%rbp),%rsi
  mov    -0x58(%rbp),%rax
  mov    %rdi,%r9
  mov    %rax,%rdi
  call   <clamp2d@plt>
  movd   %xmm0,%r12d
  mov    -0x38(%rbp),%rax
  lea    0x1(%rax),%r8
  mov    -0x78(%rbp),%rdi
  mov    -0x40(%rbp),%rcx
  mov    -0x68(%rbp),%rdx
  mov    -0x60(%rbp),%rsi
  mov    -0x58(%rbp),%rax
  mov    %rdi,%r9
  mov    %rax,%rdi
  call   <clamp2d@plt>
  movd   %xmm0,%ebx
  mov    -0x38(%rbp),%rax
  lea    0x1(%rax),%r8
  mov    -0x40(%rbp),%rax
  lea    -0x1(%rax),%rcx
  mov    -0x78(%rbp),%rdi
  mov    -0x68(%rbp),%rdx
  mov    -0x60(%rbp),%rsi
  mov    -0x58(%rbp),%rax
  mov    %rdi,%r9
  mov    %rax,%rdi
  call   <clamp2d@plt>
  movd   %xmm0,%edx
  mov    -0x48(%rbp),%eax
  movd   %r14d,%xmm4
  movd   %r12d,%xmm3
  movd   %ebx,%xmm2
  movd   %edx,%xmm1
  movd   %eax,%xmm0
  call   <catmullrom_filter@plt>
  movd   %xmm0,%r12d
  mov    -0x40(%rbp),%rax
  lea    0x2(%rax),%rcx
  mov    -0x78(%rbp),%r8
  mov    -0x38(%rbp),%rdi
  mov    -0x68(%rbp),%rdx
  mov    -0x60(%rbp),%rsi
  mov    -0x58(%rbp),%rax
  mov    %r8,%r9
  mov    %rdi,%r8
  mov    %rax,%rdi
  call   <clamp2d@plt>
  movd   %xmm0,%r15d
  mov    -0x40(%rbp),%rax
  lea    0x1(%rax),%rcx
  mov    -0x78(%rbp),%r8
  mov    -0x38(%rbp),%rdi
  mov    -0x68(%rbp),%rdx
  mov    -0x60(%rbp),%rsi
  mov    -0x58(%rbp),%rax
  mov    %r8,%r9
  mov    %rdi,%r8
  mov    %rax,%rdi
  call   <clamp2d@plt>
  movd   %xmm0,%r14d
  mov    -0x78(%rbp),%r8
  mov    -0x38(%rbp),%rdi
  mov    -0x40(%rbp),%rcx
  mov    -0x68(%rbp),%rdx
  mov    -0x60(%rbp),%rsi
  mov    -0x58(%rbp),%rax
  mov    %r8,%r9
  mov    %rdi,%r8
  mov    %rax,%rdi
  call   <clamp2d@plt>
  movd   %xmm0,%ebx
  mov    -0x40(%rbp),%rax
  lea    -0x1(%rax),%rcx
  mov    -0x78(%rbp),%r8
  mov    -0x38(%rbp),%rdi
  mov    -0x68(%rbp),%rdx
  mov    -0x60(%rbp),%rsi
  mov    -0x58(%rbp),%rax
  mov    %r8,%r9
  mov    %rdi,%r8
  mov    %rax,%rdi
  call   <clamp2d@plt>
  movd   %xmm0,%edx
  mov    -0x48(%rbp),%eax
  movd   %r15d,%xmm4
  movd   %r14d,%xmm3
  movd   %ebx,%xmm2
  movd   %edx,%xmm1
  movd   %eax,%xmm0
  call   <catmullrom_filter@plt>
  movd   %xmm0,%ebx
  mov    -0x38(%rbp),%rax
  lea    -0x1(%rax),%r8
  mov    -0x40(%rbp),%rax
  lea    0x2(%rax),%rcx
  mov    -0x78(%rbp),%rdi
  mov    -0x68(%rbp),%rdx
  mov    -0x60(%rbp),%rsi
  mov    -0x58(%rbp),%rax
  mov    %rdi,%r9
  mov    %rax,%rdi
  call   <clamp2d@plt>
  movss  %xmm0,-0x7c(%rbp)
  mov    -0x38(%rbp),%rax
  lea    -0x1(%rax),%r8
  mov    -0x40(%rbp),%rax
  lea    0x1(%rax),%rcx
  mov    -0x78(%rbp),%rdi
  mov    -0x68(%rbp),%rdx
  mov    -0x60(%rbp),%rsi
  mov    -0x58(%rbp),%rax
  mov    %rdi,%r9
  mov    %rax,%rdi
  call   <clamp2d@plt>
  movd   %xmm0,%r15d
  mov    -0x38(%rbp),%rax
  lea    -0x1(%rax),%r8
  mov    -0x78(%rbp),%rdi
  mov    -0x40(%rbp),%rcx
  mov    -0x68(%rbp),%rdx
  mov    -0x60(%rbp),%rsi
  mov    -0x58(%rbp),%rax
  mov    %rdi,%r9
  mov    %rax,%rdi
  call   <clamp2d@plt>
  movd   %xmm0,%r14d
  mov    -0x38(%rbp),%rax
  lea    -0x1(%rax),%r8
  mov    -0x40(%rbp),%rax
  lea    -0x1(%rax),%rcx
  mov    -0x78(%rbp),%rdi
  mov    -0x68(%rbp),%rdx
  mov    -0x60(%rbp),%rsi
  mov    -0x58(%rbp),%rax
  mov    %rdi,%r9
  mov    %rax,%rdi
  call   <clamp2d@plt>
  movd   %xmm0,%edx
  mov    -0x48(%rbp),%eax
  movss  -0x7c(%rbp),%xmm4
  movd   %r15d,%xmm3
  movd   %r14d,%xmm2
  movd   %edx,%xmm1
  movd   %eax,%xmm0
  call   <catmullrom_filter@plt>
  movd   %xmm0,%edx
  mov    -0x44(%rbp),%eax
  movd   %r13d,%xmm4
  movd   %r12d,%xmm3
  movd   %ebx,%xmm2
  movd   %edx,%xmm1
  movd   %eax,%xmm0
  call   <catmullrom_filter@plt>
  add    $0x58,%rsp
  pop    %rbx
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  pop    %rbp
  ret
```

tool_calls: name: unpack_data
arguments: data_label: D10
datatype: byte[4]
name: unpack_data
arguments: data_label: D41
datatype: byte[4]

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

tool: {"D41": [0x00,0x00,0x00,0x5f]}

assistant: ```c
float catmullrom_interp(const float *pixels, size_t width, size_t height, float u, float v, size_t a) {
  u -= 0.5f;
  v -= 0.5f;
  float px = floorf(u);
  float py = floorf(v);
  float fx = u - px;
  float fy = v - py;
  size_t ipx = (size_t)px;
  size_t ipy = (size_t)py;
  return catmullrom_filter(fy, catmullrom_filter(fx, clamp2d(pixels, width, height, ipx - 1, ipy - 1, a), clamp2d(pixels, width, height, ipx, ipy - 1, a), clamp2d(pixels, width, height, ipx + 1, ipy - 1, a), clamp2d(pixels, width, height, ipx + 2, ipy - 1, a)), catmullrom_filter(fx, clamp2d(pixels, width, height, ipx - 1, ipy, a), clamp2d(pixels, width, height, ipx, ipy, a), clamp2d(pixels, width, height, ipx + 1, ipy, a), clamp2d(pixels, width, height, ipx + 2, ipy, a)), catmullrom_filter(fx, clamp2d(pixels, width, height, ipx - 1, ipy + 1, a), clamp2d(pixels, width, height, ipx, ipy + 1, a), clamp2d(pixels, width, height, ipx + 1, ipy + 1, a), clamp2d(pixels, width, height, ipx + 2, ipy + 1, a)), catmullrom_filter(fx, clamp2d(pixels, width, height, ipx - 1, ipy + 2, a), clamp2d(pixels, width, height, ipx, ipy + 2, a), clamp2d(pixels, width, height, ipx + 1, ipy + 2, a), clamp2d(pixels, width, height, ipx + 2, ipy + 2, a)));
}
```