user: What would the C source look like for the assembly code provided here?

```asm
<upsample_component_line_lanczos>:
  endbr64
  push   %r15
  mov    %rcx,%r10
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  cmpl   $0x1,0x58(%rsp)
  mov    0x60(%rsp),%ecx
  jle    L130
  mov    %rdi,%r13
  mov    %rsi,%rbx
  mov    %rdx,%rbp
  mov    %r8d,%r15d
  mov    %r9d,%r12d
  test   %r9d,%r9d
  jle    L41
  movslq %r9d,%rsi
  lea    0x0(,%rsi,4),%r14
  lea    (%rbx,%r14,1),%rax
  cmp    %rax,%rdx
  jae    L96
  lea    (%rdx,%r14,1),%rax
  cmp    %rax,%rbx
  jb     L24
L96:
  mov    %r14,%rdx
  xor    %esi,%esi
  mov    %rbp,%rdi
  mov    %ecx,0x60(%rsp)
  mov    %r10,0x8(%rsp)
  call   <memset@plt>
  mov    %r14,%rdx
  xor    %esi,%esi
  mov    %rbx,%rdi
  call   <memset@plt>
  mov    0x8(%rsp),%r10
  mov    0x60(%rsp),%ecx
L105:
  test   %ecx,%ecx
  jle    L87
L9:
  lea    -0x1(%r15),%edi
  movslq 0x58(%rsp),%r14
  xor    %r9d,%r9d
  mov    %edi,%eax
  shr    $0x1f,%eax
  mov    %r14,%r8
  add    %edi,%eax
  neg    %r8
  sar    %eax
  shl    $0x2,%r8
  neg    %eax
  cltq
  lea    0x1(%rax,%rdi,1),%rdx
  neg    %rax
  lea    (%r10,%rax,4),%rsi
L73:
  test   %r15d,%r15d
  jle    L35
  mov    %rdx,%rax
  sub    %rdi,%rax
  sub    $0x1,%rax
  nop
L121:
  test   %eax,%eax
  js     L2
  cmp    %eax,%r12d
  jle    L2
  movss  0x0(%rbp,%rax,4),%xmm0
  addss  (%rsi,%rax,4),%xmm0
  movss  %xmm0,0x0(%rbp,%rax,4)
  movss  0x0(%r13,%r9,4),%xmm0
  mulss  (%rsi,%rax,4),%xmm0
  addss  (%rbx,%rax,4),%xmm0
  movss  %xmm0,(%rbx,%rax,4)
L2:
  add    $0x1,%rax
  cmp    %rdx,%rax
  jne    L121
L35:
  add    $0x1,%r9
  add    %r14,%rdx
  add    %r8,%rsi
  cmp    %r9d,%ecx
  jg     L73
  test   %r12d,%r12d
  jle    L130
L87:
  xor    %eax,%eax
  nop
L32:
  movss  (%rbx,%rax,4),%xmm0
  divss  0x0(%rbp,%rax,4),%xmm0
  movss  %xmm0,(%rbx,%rax,4)
  add    $0x1,%rax
  cmp    %eax,%r12d
  jg     L32
L130:
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L41:
  test   %ecx,%ecx
  jg     L9
  jmp    L130
L24:
  xor    %eax,%eax
  nopl   0x0(%rax)
L3:
  movl   $0x0,0x0(%rbp,%rax,4)
  movl   $0x0,(%rbx,%rax,4)
  add    $0x1,%rax
  cmp    %rax,%rsi
  jne    L3
  jmp    L105
```

assistant: ```c
void upsample_component_line_lanczos(const float *x_in_buff, float *x_out_buff, float *weight_x_out_buff, const float *x_contrib, const int x_contrib_size, const int width, const int xpos, const int xstep, const int compressed_width) {
  int i;
  int rpos;
  int wpos;
  int cpos;
  int weight_shift;
  weight_shift = 0 - ((x_contrib_size - 1) / 2);
  if (xstep > 1) {
    for (i = 0; i < width; i++)
      x_out_buff[i] = weight_x_out_buff[i] = 0;
    for (rpos = 0; rpos < compressed_width; rpos++) {
      wpos = (rpos * xstep) + weight_shift;
      for (cpos = 0; cpos < x_contrib_size; cpos++) {
        if ((wpos >= 0) && (wpos < width)) {
          weight_x_out_buff[wpos] += x_contrib[cpos];
          x_out_buff[wpos] += x_in_buff[rpos] * x_contrib[cpos];
        }
        wpos++;
      }
    }
    for (i = 0; i < width; i++)
      x_out_buff[i] = x_out_buff[i] / weight_x_out_buff[i];
  }
}
```