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

```asm
<yscale_up_rgba>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x58,%rsp
  mov    %rcx,0x10(%rsp)
  mov    %fs:0x28,%rax
  mov    %rax,0x48(%rsp)
  xor    %eax,%eax
  test   %esi,%esi
  jle    L58
  lea    -0x1(%rsi),%eax
  mov    %rdi,%r12
  mov    %rdx,%r13
  xor    %ebp,%ebp
  shr    $0x2,%eax
  lea    0x1(%rax),%eax
  shl    $0x2,%rax
  mov    %rax,0x20(%rsp)
  lea    0x30(%rsp),%rax
  mov    %rax,0x18(%rsp)
  lea    0x40(%rsp),%rax
  mov    %rax,0x28(%rsp)
  nopl   (%rax)
L23:
  mov    0x18(%rsp),%rdx
  movss  0x0(%r13),%xmm5
  lea    0x0(,%rbp,4),%rax
  mov    (%r12),%r9
  movss  0x4(%r13),%xmm4
  mov    0x8(%r12),%r8
  movss  0x8(%r13),%xmm3
  mov    %rdx,%r15
  mov    0x10(%r12),%rdi
  movss  0xc(%r13),%xmm2
  mov    0x18(%r12),%rsi
  mov    0x28(%rsp),%rcx
L69:
  movss  (%r9,%rax,1),%xmm0
  movss  (%r8,%rax,1),%xmm1
  add    $0x4,%rdx
  mulss  %xmm4,%xmm1
  mulss  %xmm5,%xmm0
  addss  %xmm1,%xmm0
  movss  (%rdi,%rax,1),%xmm1
  mulss  %xmm3,%xmm1
  addss  %xmm1,%xmm0
  movss  (%rsi,%rax,1),%xmm1
  add    $0x4,%rax
  mulss  %xmm2,%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x4(%rdx)
  cmp    %rdx,%rcx
  jne    L69
  movss  0x3c(%rsp),%xmm0
  call   <clampf@plt>
  pxor   %xmm7,%xmm7
  mov    $0x1,%ecx
  ucomiss %xmm7,%xmm0
  movss  %xmm0,0xc(%rsp)
  setp   %bl
  cmovne %ecx,%ebx
  ucomiss D19(%rip),%xmm0
  setp   %al
  cmovne %ecx,%eax
  and    %eax,%ebx
  mov    0x10(%rsp),%rax
  lea    (%rax,%rbp,1),%r14
  mov    0x18(%rsp),%rax
  add    $0xc,%rax
  mov    %rax,(%rsp)
  mov    %ebx,%eax
  mov    %r14,%rbx
  mov    %eax,%r14d
L42:
  movss  (%r15),%xmm0
  test   %r14b,%r14b
  jne    L27
L49:
  call   <linear_sample_to_srgb@plt>
  add    $0x4,%r15
  add    $0x1,%rbx
  mov    %al,-0x1(%rbx)
  cmp    %r15,(%rsp)
  jne    L42
  movss  D16(%rip),%xmm0
  mulss  0xc(%rsp),%xmm0
  call   <f2i@plt>
  mov    0x10(%rsp),%rdi
  mov    %al,0x3(%rdi,%rbp,1)
  add    $0x4,%rbp
  cmp    %rbp,0x20(%rsp)
  jne    L23
L58:
  mov    0x48(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L52
  add    $0x58,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  xchg   %ax,%ax
L27:
  divss  0xc(%rsp),%xmm0
  call   <clampf@plt>
  movss  %xmm0,(%r15)
  jmp    L49
L52:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D19
type_infered: byte[4]
name: extract_symbolic_data
arguments: data_label: D16
type_infered: byte[4]

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

tool: {"D16": [0x00,0x00,0x7f,0x43]}

assistant: ```c
void yscale_up_rgba(float **in, int len, float *coeffs, unsigned char *out) {
  int i, j;
  float alpha, sums[4];
  for (i = 0; i < len; i += 4) {
    for (j = 0; j < 4; j++) {
      sums[j] = coeffs[0] * in[0][i + j] + coeffs[1] * in[1][i + j] + coeffs[2] * in[2][i + j] + coeffs[3] * in[3][i + j];
    }
    alpha = clampf(sums[3]);
    for (j = 0; j < 3; j++) {
      if (alpha != 0 && alpha != 1.0f) {
        sums[j] /= alpha;
        sums[j] = clampf(sums[j]);
      }
      out[i + j] = linear_sample_to_srgb(sums[j]);
    }
    out[i + 3] = f2i(alpha * 255.0f);
  }
}
```