user: 下面的汇编指令对应的C源代码是什么：

```asm
<nnp_conv1x1_upto_2x4__scalar>:
  endbr64
  push   %rbp
  push   %rbx
  mov    %edi,%r10d
  mov    %rcx,%r11
  mov    0x18(%rsp),%rcx
  lea    0x0(,%r11,4),%rax
  lea    (%r8,%rax,1),%rdi
  movss  (%r9),%xmm4
  cmp    $0x1,%r10d
  jle    L79
  movss  0x4(%r9),%xmm8
  cmp    $0x1,%esi
  jle    L25
  shl    $0x2,%rdx
  add    %rdx,%r9
  movss  (%r9),%xmm5
  movss  0x4(%r9),%xmm9
  cmp    $0x2,%esi
  jg     L48
L25:
  lea    (%rcx,%rax,1),%rdx
  lea    (%rdx,%rax,1),%rbx
  lea    (%rbx,%rax,1),%rbp
  mov    $0x0,%eax
  jmp    L173
L153:
  mov    %rdx,%rbx
  mov    %r9,%rdx
L88:
  add    $0x1,%rax
  cmp    %r11,%rax
  je     L53
L173:
  movss  (%rcx,%rax,4),%xmm13
  cmp    $0x1,%esi
  jle    L3
  movss  (%rdx),%xmm2
  cmp    $0x2,%esi
  jle    L3
  movss  (%rbx),%xmm12
  cmp    $0x3,%esi
  jle    L3
  movss  0x0(%rbp),%xmm3
L3:
  movss  (%r8,%rax,4),%xmm0
  movaps %xmm4,%xmm1
  mulss  %xmm0,%xmm1
  addss  %xmm13,%xmm1
  movaps %xmm5,%xmm13
  mulss  %xmm0,%xmm13
  addss  %xmm13,%xmm2
  movaps %xmm6,%xmm13
  mulss  %xmm0,%xmm13
  addss  %xmm13,%xmm12
  mulss  %xmm7,%xmm0
  addss  %xmm0,%xmm3
  cmp    $0x1,%r10d
  jle    L143
  movss  (%rdi),%xmm0
  movaps %xmm0,%xmm13
  mulss  %xmm8,%xmm13
  addss  %xmm13,%xmm1
  movaps %xmm9,%xmm13
  mulss  %xmm0,%xmm13
  addss  %xmm13,%xmm2
  movaps %xmm10,%xmm13
  mulss  %xmm0,%xmm13
  addss  %xmm13,%xmm12
  mulss  %xmm11,%xmm0
  addss  %xmm0,%xmm3
  lea    0x4(%rdi),%rdi
L143:
  movss  %xmm1,(%rcx,%rax,4)
  cmp    $0x1,%esi
  jle    L88
  lea    0x4(%rdx),%r9
  movss  %xmm2,(%rdx)
  mov    %r9,%rdx
  cmp    $0x2,%esi
  jle    L88
  lea    0x4(%rbx),%rdx
  movss  %xmm12,(%rbx)
  cmp    $0x3,%esi
  jle    L153
  movss  %xmm3,0x0(%rbp)
  lea    0x4(%rbp),%rbp
  mov    %rdx,%rbx
  mov    %r9,%rdx
  jmp    L88
L48:
  add    %rdx,%r9
  movss  (%r9),%xmm6
  movss  0x4(%r9),%xmm10
  cmp    $0x3,%esi
  jle    L25
  add    %rdx,%r9
  movss  (%r9),%xmm7
  movss  0x4(%r9),%xmm11
  jmp    L25
L79:
  cmp    $0x1,%esi
  jle    L25
  lea    0x0(,%rdx,4),%rbx
  add    %rbx,%r9
  movss  (%r9),%xmm5
  cmp    $0x2,%esi
  jle    L25
  add    %rbx,%r9
  movss  (%r9),%xmm6
  cmp    $0x3,%esi
  jle    L25
  movss  (%r9,%rdx,4),%xmm7
  jmp    L25
L53:
  pop    %rbx
  pop    %rbp
  ret
```

assistant: ```c
void nnp_conv1x1_upto_2x4__scalar(uint32_t input_channels_subblock_size, uint32_t output_channels_subblock_size, size_t input_channels, size_t image_size, const float *input, const float *kernel, float *output) {
  const float *pinput0 = input;
  const float *pinput1 = input + image_size;
  float kernel00, kernel01, kernel10, kernel11, kernel20, kernel21, kernel30, kernel31;
  kernel00 = kernel[0];
  if (input_channels_subblock_size > 1) {
    kernel01 = kernel[1];
  }
  if (output_channels_subblock_size > 1) {
    kernel += input_channels;
    kernel10 = kernel[0];
    if (input_channels_subblock_size > 1) {
      kernel11 = kernel[1];
    }
    if (output_channels_subblock_size > 2) {
      kernel += input_channels;
      kernel20 = kernel[0];
      if (input_channels_subblock_size > 1) {
        kernel21 = kernel[1];
      }
      if (output_channels_subblock_size > 3) {
        kernel += input_channels;
        kernel30 = kernel[0];
        if (input_channels_subblock_size > 1) {
          kernel31 = kernel[1];
        }
      }
    }
  }
  float *poutput0 = output;
  float *poutput1 = poutput0 + image_size;
  float *poutput2 = poutput1 + image_size;
  float *poutput3 = poutput2 + image_size;
  do {
    float output0, output1, output2, output3;
    output0 = *poutput0;
    if (output_channels_subblock_size > 1) {
      output1 = *poutput1;
      if (output_channels_subblock_size > 2) {
        output2 = *poutput2;
        if (output_channels_subblock_size > 3) {
          output3 = *poutput3;
        }
      }
    }
    const float input0 = *pinput0++;
    output0 += kernel00 * input0;
    output1 += kernel10 * input0;
    output2 += kernel20 * input0;
    output3 += kernel30 * input0;
    if (input_channels_subblock_size > 1) {
      const float input1 = *pinput1++;
      output0 += kernel01 * input1;
      output1 += kernel11 * input1;
      output2 += kernel21 * input1;
      output3 += kernel31 * input1;
    }
    *poutput0++ = output0;
    if (output_channels_subblock_size > 1) {
      *poutput1++ = output1;
      if (output_channels_subblock_size > 2) {
        *poutput2++ = output2;
        if (output_channels_subblock_size > 3) {
          *poutput3++ = output3;
        }
      }
    }
  } while (--image_size != 0);
}
```