user: Translate the below assembly code into C programming language:

```asm
<Maxtrix_Add>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x48(%rbp)
  mov    %edx,%eax
  mov    %rcx,-0x58(%rbp)
  mov    %r8,-0x60(%rbp)
  mov    %esi,%edx
  mov    %dx,-0x4c(%rbp)
  mov    %ax,-0x50(%rbp)
  mov    -0x48(%rbp),%rax
  mov    %rax,-0x18(%rbp)
  mov    -0x58(%rbp),%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x60(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  movzwl -0x4c(%rbp),%edx
  movzwl -0x50(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x38(%rbp)
  mov    -0x38(%rbp),%eax
  shr    $0x2,%eax
  mov    %eax,-0x3c(%rbp)
  jmp    L9
L30:
  mov    -0x18(%rbp),%rax
  movss  (%rax),%xmm0
  movss  %xmm0,-0x30(%rbp)
  mov    -0x10(%rbp),%rax
  movss  (%rax),%xmm0
  movss  %xmm0,-0x2c(%rbp)
  mov    -0x18(%rbp),%rax
  movss  0x4(%rax),%xmm0
  movss  %xmm0,-0x28(%rbp)
  movss  -0x30(%rbp),%xmm0
  addss  -0x2c(%rbp),%xmm0
  movss  %xmm0,-0x24(%rbp)
  mov    -0x10(%rbp),%rax
  movss  0x4(%rax),%xmm0
  movss  %xmm0,-0x20(%rbp)
  mov    -0x18(%rbp),%rax
  movss  0x8(%rax),%xmm0
  movss  %xmm0,-0x30(%rbp)
  movss  -0x28(%rbp),%xmm0
  addss  -0x20(%rbp),%xmm0
  movss  %xmm0,-0x1c(%rbp)
  mov    -0x10(%rbp),%rax
  movss  0x8(%rax),%xmm0
  movss  %xmm0,-0x2c(%rbp)
  mov    -0x8(%rbp),%rax
  movss  -0x24(%rbp),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x8(%rbp),%rax
  add    $0x4,%rax
  movss  -0x1c(%rbp),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x18(%rbp),%rax
  movss  0xc(%rax),%xmm0
  movss  %xmm0,-0x28(%rbp)
  mov    -0x10(%rbp),%rax
  movss  0xc(%rax),%xmm0
  movss  %xmm0,-0x20(%rbp)
  movss  -0x30(%rbp),%xmm0
  addss  -0x2c(%rbp),%xmm0
  movss  %xmm0,-0x24(%rbp)
  movss  -0x28(%rbp),%xmm0
  addss  -0x20(%rbp),%xmm0
  movss  %xmm0,-0x1c(%rbp)
  mov    -0x8(%rbp),%rax
  add    $0x8,%rax
  movss  -0x24(%rbp),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x8(%rbp),%rax
  add    $0xc,%rax
  movss  -0x1c(%rbp),%xmm0
  movss  %xmm0,(%rax)
  addq   $0x10,-0x18(%rbp)
  addq   $0x10,-0x10(%rbp)
  addq   $0x10,-0x8(%rbp)
  subl   $0x1,-0x3c(%rbp)
L9:
  cmpl   $0x0,-0x3c(%rbp)
  jne    L30
  mov    -0x38(%rbp),%eax
  and    $0x3,%eax
  mov    %eax,-0x3c(%rbp)
  jmp    L4
L15:
  mov    -0x18(%rbp),%rax
  lea    0x4(%rax),%rdx
  mov    %rdx,-0x18(%rbp)
  movss  (%rax),%xmm1
  mov    -0x10(%rbp),%rax
  lea    0x4(%rax),%rdx
  mov    %rdx,-0x10(%rbp)
  movss  (%rax),%xmm0
  mov    -0x8(%rbp),%rax
  lea    0x4(%rax),%rdx
  mov    %rdx,-0x8(%rbp)
  addss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  subl   $0x1,-0x3c(%rbp)
L4:
  cmpl   $0x0,-0x3c(%rbp)
  jne    L15
  movl   $0x0,-0x34(%rbp)
  mov    -0x34(%rbp),%eax
  pop    %rbp
  ret
```

assistant: ```c
int Maxtrix_Add(float *pSrcA, unsigned short numRows, unsigned short numCols, float *pSrcB, float *pDst) {
  float *pIn1 = pSrcA;
  float *pIn2 = pSrcB;
  float *pOut = pDst;
  float inA1, inA2, inB1, inB2, out1, out2;
  unsigned int numSamples;
  unsigned int blkCnt;
  int status;
  numSamples = (unsigned int)numRows * numCols;
  blkCnt = numSamples >> 2u;
  while (blkCnt > 0u) {
    inA1 = pIn1[0];
    inB1 = pIn2[0];
    inA2 = pIn1[1];
    out1 = inA1 + inB1;
    inB2 = pIn2[1];
    inA1 = pIn1[2];
    out2 = inA2 + inB2;
    inB1 = pIn2[2];
    pOut[0] = out1;
    pOut[1] = out2;
    inA2 = pIn1[3];
    inB2 = pIn2[3];
    out1 = inA1 + inB1;
    out2 = inA2 + inB2;
    pOut[2] = out1;
    pOut[3] = out2;
    pIn1 += 4u;
    pIn2 += 4u;
    pOut += 4u;
    blkCnt--;
  }
  blkCnt = numSamples & 0x3u;
  while (blkCnt > 0u) {
    *pOut++ = (*pIn1++) + (*pIn2++);
    blkCnt--;
  }
  status = 0;
  return (status);
}
```