user: What is the c source code of the assembly code below?

```asm
<cubic1>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x48,%rsp
  mov    %rdi,-0x38(%rbp)
  mov    %rsi,-0x40(%rbp)
  mov    %edx,-0x44(%rbp)
  mov    %ecx,-0x48(%rbp)
  movl   $0x0,-0x2c(%rbp)
  jmp    L47
L4:
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x2c(%rbp),%xmm1
  movsd  D39(%rip),%xmm0
  addsd  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x48(%rbp),%xmm1
  divsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x28(%rbp)
  pxor   %xmm0,%xmm0
  cvtss2sd -0x28(%rbp),%xmm0
  movsd  D23(%rip),%xmm1
  subsd  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jbe    L66
  pxor   %xmm0,%xmm0
  cvtss2sd -0x28(%rbp),%xmm0
  movsd  D23(%rip),%xmm1
  subsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  jmp    L72
L66:
  mov    $0x0,%eax
L72:
  mov    %eax,-0x24(%rbp)
  pxor   %xmm0,%xmm0
  cvtss2sd -0x28(%rbp),%xmm0
  movsd  D39(%rip),%xmm1
  subsd  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jbe    L96
  pxor   %xmm0,%xmm0
  cvtss2sd -0x28(%rbp),%xmm0
  movsd  D39(%rip),%xmm1
  subsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  jmp    L98
L96:
  mov    $0x0,%eax
L98:
  mov    %eax,-0x20(%rbp)
  pxor   %xmm1,%xmm1
  cvtss2sd -0x28(%rbp),%xmm1
  movsd  D39(%rip),%xmm0
  addsd  %xmm0,%xmm1
  mov    -0x44(%rbp),%eax
  sub    $0x1,%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  comisd %xmm1,%xmm0
  jbe    L57
  pxor   %xmm1,%xmm1
  cvtss2sd -0x28(%rbp),%xmm1
  movsd  D39(%rip),%xmm0
  addsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  jmp    L15
L57:
  mov    -0x44(%rbp),%eax
  sub    $0x1,%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  cvttsd2si %xmm0,%eax
L15:
  mov    %eax,-0x1c(%rbp)
  pxor   %xmm1,%xmm1
  cvtss2sd -0x28(%rbp),%xmm1
  movsd  D23(%rip),%xmm0
  addsd  %xmm0,%xmm1
  mov    -0x44(%rbp),%eax
  sub    $0x1,%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  comisd %xmm1,%xmm0
  jbe    L83
  pxor   %xmm1,%xmm1
  cvtss2sd -0x28(%rbp),%xmm1
  movsd  D23(%rip),%xmm0
  addsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  jmp    L97
L83:
  mov    -0x44(%rbp),%eax
  sub    $0x1,%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  cvttsd2si %xmm0,%eax
L97:
  mov    %eax,-0x18(%rbp)
  pxor   %xmm1,%xmm1
  cvtss2sd -0x28(%rbp),%xmm1
  movsd  D39(%rip),%xmm0
  addsd  %xmm1,%xmm0
  pxor   %xmm2,%xmm2
  cvtss2sd -0x28(%rbp),%xmm2
  movsd  D39(%rip),%xmm1
  addsd  %xmm2,%xmm1
  cvttsd2si %xmm1,%eax
  pxor   %xmm1,%xmm1
  cvtsi2sd %eax,%xmm1
  subsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x14(%rbp)
  mov    -0x18(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm3
  mov    -0x1c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm2
  mov    -0x20(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mov    -0x24(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mov    -0x2c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x40(%rbp),%rax
  lea    (%rdx,%rax,1),%rbx
  mov    -0x14(%rbp),%eax
  movaps %xmm3,%xmm4
  movaps %xmm2,%xmm3
  movaps %xmm1,%xmm2
  movaps %xmm0,%xmm1
  movd   %eax,%xmm0
  call   <cubic@plt>
  movd   %xmm0,%eax
  mov    %eax,(%rbx)
  addl   $0x1,-0x2c(%rbp)
L47:
  mov    -0x44(%rbp),%eax
  imul   -0x48(%rbp),%eax
  cmp    %eax,-0x2c(%rbp)
  jl     L4
  nop
  nop
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: label: D39
type_infered: f64
name: disassemble_data
arguments: label: D23
type_infered: f64

tool: D39: 0.5

tool: D23: 1.5

assistant: ```c
void cubic1(float *in, float *out, int x, int s) {
  for (int xi = 0; xi < x * s; xi++) {
    float xf = (xi + 0.5) / s;
    int xll = ((xf - 1.5) > (0) ? (xf - 1.5) : (0));
    int xl = ((xf - 0.5) > (0) ? (xf - 0.5) : (0));
    int xh = ((xf + 0.5) < (x - 1) ? (xf + 0.5) : (x - 1));
    int xhh = ((xf + 1.5) < (x - 1) ? (xf + 1.5) : (x - 1));
    float xt = (xf + 0.5) - (int)(xf + 0.5);
    out[xi] = cubic(xt, in[xll], in[xl], in[xh], in[xhh]);
  }
}
```