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

```asm
<nnp_conv1x1_upto_2x4__scalar>:
  endbr64
  push   %rbp
  mov    %edi,%r11d
  push   %rbx
  mov    %rcx,%rbx
  movss  (%r9),%xmm5
  lea    0x0(,%rbx,4),%rax
  mov    0x18(%rsp),%rcx
  lea    (%r8,%rax,1),%r10
  cmp    $0x1,%edi
  jle    L143
  movss  0x4(%r9),%xmm9
  cmp    $0x1,%esi
  jle    L152
  shl    $0x2,%rdx
  add    %rdx,%r9
  movss  (%r9),%xmm6
  movss  0x4(%r9),%xmm10
  cmp    $0x2,%esi
  je     L152
  add    %rdx,%r9
  movss  (%r9),%xmm7
  movss  0x4(%r9),%xmm11
  cmp    $0x3,%esi
  je     L152
  add    %rdx,%r9
  movss  (%r9),%xmm8
  movss  0x4(%r9),%xmm12
  xchg   %ax,%ax
L152:
  lea    (%rcx,%rax,1),%rdx
  lea    (%rdx,%rax,1),%rdi
  lea    (%rdi,%rax,1),%r9
  xor    %eax,%eax
  xchg   %ax,%ax
L84:
  movss  (%rcx,%rax,4),%xmm13
  cmp    $0x1,%esi
  jle    L62
  movss  (%rdx),%xmm2
  cmp    $0x2,%esi
  je     L62
  movss  (%rdi),%xmm3
  cmp    $0x3,%esi
  je     L62
  movss  (%r9),%xmm4
L62:
  movss  (%r8,%rax,4),%xmm0
  movaps %xmm5,%xmm1
  mulss  %xmm0,%xmm1
  addss  %xmm13,%xmm1
  movaps %xmm6,%xmm13
  mulss  %xmm0,%xmm13
  addss  %xmm13,%xmm2
  movaps %xmm7,%xmm13
  mulss  %xmm0,%xmm13
  mulss  %xmm8,%xmm0
  addss  %xmm13,%xmm3
  addss  %xmm0,%xmm4
  cmp    $0x1,%r11d
  jle    L87
  movss  (%r10),%xmm0
  add    $0x4,%r10
  movaps %xmm0,%xmm13
  mulss  %xmm9,%xmm13
  addss  %xmm13,%xmm1
  movaps %xmm10,%xmm13
  mulss  %xmm0,%xmm13
  addss  %xmm13,%xmm2
  movaps %xmm11,%xmm13
  mulss  %xmm0,%xmm13
  mulss  %xmm12,%xmm0
  addss  %xmm13,%xmm3
  addss  %xmm0,%xmm4
L87:
  movss  %xmm1,(%rcx,%rax,4)
  cmp    $0x1,%esi
  jle    L80
  movss  %xmm2,(%rdx)
  add    $0x4,%rdx
  cmp    $0x2,%esi
  je     L80
  lea    0x4(%rdi),%rbp
  movss  %xmm3,(%rdi)
  mov    %rbp,%rdi
  cmp    $0x3,%esi
  je     L80
  movss  %xmm4,(%r9)
  add    $0x4,%r9
L80:
  add    $0x1,%rax
  cmp    %rax,%rbx
  jne    L84
  pop    %rbx
  pop    %rbp
  ret
  nopl   0x0(%rax,%rax,1)
L143:
  cmp    $0x1,%esi
  jle    L152
  lea    0x0(,%rdx,4),%rdi
  add    %rdi,%r9
  movss  (%r9),%xmm6
  cmp    $0x2,%esi
  je     L152
  add    %rdi,%r9
  movss  (%r9),%xmm7
  cmp    $0x3,%esi
  je     L152
  movss  (%r9,%rdx,4),%xmm8
  jmp    L152
```

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);
}
```