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

```asm
<c_linear_combine_channels>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %edi,-0x4(%rbp)
  movss  %xmm0,-0x8(%rbp)
  movss  %xmm1,-0xc(%rbp)
  mov    %esi,-0x10(%rbp)
  mov    %edx,-0x14(%rbp)
  mov    %rcx,-0x20(%rbp)
  mov    %r8d,-0x18(%rbp)
  mov    %r9d,-0x24(%rbp)
  cmpl   $0x4,-0x4(%rbp)
  je     L47
  cmpl   $0x4,-0x4(%rbp)
  jg     L22
  cmpl   $0x3,-0x4(%rbp)
  je     L34
  cmpl   $0x3,-0x4(%rbp)
  jg     L22
  cmpl   $0x1,-0x4(%rbp)
  je     L46
  cmpl   $0x2,-0x4(%rbp)
  je     L27
  jmp    L22
L46:
  mov    -0x24(%rbp),%r10d
  mov    -0x18(%rbp),%ecx
  mov    -0x20(%rbp),%rdx
  mov    -0x14(%rbp),%esi
  mov    -0x10(%rbp),%edi
  movss  -0xc(%rbp),%xmm0
  mov    -0x8(%rbp),%eax
  mov    0x50(%rbp),%r8d
  push   %r8
  mov    0x48(%rbp),%r8d
  push   %r8
  mov    0x40(%rbp),%r8d
  push   %r8
  push   0x38(%rbp)
  mov    0x30(%rbp),%r8d
  push   %r8
  mov    0x28(%rbp),%r8d
  push   %r8
  mov    0x20(%rbp),%r8d
  push   %r8
  push   0x18(%rbp)
  mov    0x10(%rbp),%r9d
  mov    %r10d,%r8d
  movaps %xmm0,%xmm1
  movd   %eax,%xmm0
  call   <c_linear_combine_channels_word8@plt>
  add    $0x40,%rsp
  jmp    L22
L27:
  mov    -0x24(%rbp),%r10d
  mov    -0x18(%rbp),%ecx
  mov    -0x20(%rbp),%rdx
  mov    -0x14(%rbp),%esi
  mov    -0x10(%rbp),%edi
  movss  -0xc(%rbp),%xmm0
  mov    -0x8(%rbp),%eax
  mov    0x50(%rbp),%r8d
  push   %r8
  mov    0x48(%rbp),%r8d
  push   %r8
  mov    0x40(%rbp),%r8d
  push   %r8
  push   0x38(%rbp)
  mov    0x30(%rbp),%r8d
  push   %r8
  mov    0x28(%rbp),%r8d
  push   %r8
  mov    0x20(%rbp),%r8d
  push   %r8
  push   0x18(%rbp)
  mov    0x10(%rbp),%r9d
  mov    %r10d,%r8d
  movaps %xmm0,%xmm1
  movd   %eax,%xmm0
  call   <c_linear_combine_channels_word16@plt>
  add    $0x40,%rsp
  jmp    L22
L34:
  mov    -0x24(%rbp),%r10d
  mov    -0x18(%rbp),%ecx
  mov    -0x20(%rbp),%rdx
  mov    -0x14(%rbp),%esi
  mov    -0x10(%rbp),%edi
  movss  -0xc(%rbp),%xmm0
  mov    -0x8(%rbp),%eax
  mov    0x50(%rbp),%r8d
  push   %r8
  mov    0x48(%rbp),%r8d
  push   %r8
  mov    0x40(%rbp),%r8d
  push   %r8
  push   0x38(%rbp)
  mov    0x30(%rbp),%r8d
  push   %r8
  mov    0x28(%rbp),%r8d
  push   %r8
  mov    0x20(%rbp),%r8d
  push   %r8
  push   0x18(%rbp)
  mov    0x10(%rbp),%r9d
  mov    %r10d,%r8d
  movaps %xmm0,%xmm1
  movd   %eax,%xmm0
  call   <c_linear_combine_channels_word32@plt>
  add    $0x40,%rsp
  jmp    L22
L47:
  mov    -0x24(%rbp),%r10d
  mov    -0x18(%rbp),%ecx
  mov    -0x20(%rbp),%rdx
  mov    -0x14(%rbp),%esi
  mov    -0x10(%rbp),%edi
  movss  -0xc(%rbp),%xmm0
  mov    -0x8(%rbp),%eax
  mov    0x50(%rbp),%r8d
  push   %r8
  mov    0x48(%rbp),%r8d
  push   %r8
  mov    0x40(%rbp),%r8d
  push   %r8
  push   0x38(%rbp)
  mov    0x30(%rbp),%r8d
  push   %r8
  mov    0x28(%rbp),%r8d
  push   %r8
  mov    0x20(%rbp),%r8d
  push   %r8
  push   0x18(%rbp)
  mov    0x10(%rbp),%r9d
  mov    %r10d,%r8d
  movaps %xmm0,%xmm1
  movd   %eax,%xmm0
  call   <c_linear_combine_channels_float@plt>
  add    $0x40,%rsp
  nop
L22:
  nop
  leave
  ret
```

assistant: ```c
void c_linear_combine_channels(int k_type, float weight1, float weight2, int width, int height, void *p1, int nchn1, int pad1, int ofs1, void *p2, int nchn2, int pad2, int ofs2, void *p3, int nchn3, int pad3, int ofs3) {
  switch (k_type) {
  case 1:
    c_linear_combine_channels_word8(weight1, weight2, width, height, p1, nchn1, pad1, ofs1, p2, nchn2, pad2, ofs2, p3, nchn3, pad3, ofs3);
    ;
    break;
  case 2:
    c_linear_combine_channels_word16(weight1, weight2, width, height, p1, nchn1, pad1, ofs1, p2, nchn2, pad2, ofs2, p3, nchn3, pad3, ofs3);
    ;
    break;
  case 3:
    c_linear_combine_channels_word32(weight1, weight2, width, height, p1, nchn1, pad1, ofs1, p2, nchn2, pad2, ofs2, p3, nchn3, pad3, ofs3);
    ;
    break;
  case 4:
    c_linear_combine_channels_float(weight1, weight2, width, height, p1, nchn1, pad1, ofs1, p2, nchn2, pad2, ofs2, p3, nchn3, pad3, ofs3);
    ;
    break;
  }
}
```