user: 请将以下的汇编代码转换成C语言代码:

```asm
<vmatm>:
  endbr64
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x20,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x18(%rsp)
  xor    %eax,%eax
  test   %edi,%edi
  jle    L107
  mov    %edi,%r13d
  mov    %rsp,%r8
  mov    %edi,%ebx
  mov    %rsi,%r12
  shl    $0x2,%r13
  mov    %rdx,%rbp
  lea    -0x1(%rdi),%r14d
  xor    %esi,%esi
  mov    %r8,%rdi
  mov    %r13,%rdx
  call   <memset@plt>
  movss  (%rsp),%xmm0
  mov    %rax,%r8
  cmp    $0x2,%r14d
  jbe    L240
  movups 0x0(%rbp),%xmm2
  movups (%r12),%xmm1
  mov    %ebx,%eax
  and    $0xfffffffc,%eax
  mulps  %xmm2,%xmm1
  addss  %xmm1,%xmm0
  movaps %xmm1,%xmm2
  shufps $0x55,%xmm1,%xmm2
  addss  %xmm2,%xmm0
  movaps %xmm1,%xmm2
  unpckhps %xmm1,%xmm2
  shufps $0xff,%xmm1,%xmm1
  addss  %xmm2,%xmm0
  addss  %xmm1,%xmm0
  test   $0x3,%bl
  je     L160
L144:
  movslq %eax,%rdx
  movss  (%r12,%rdx,4),%xmm1
  mulss  0x0(%rbp,%rdx,4),%xmm1
  lea    0x0(,%rdx,4),%rcx
  lea    0x1(%rax),%edx
  addss  %xmm1,%xmm0
  cmp    %edx,%ebx
  jle    L136
  movss  0x4(%r12,%rcx,1),%xmm1
  mulss  0x4(%rbp,%rcx,1),%xmm1
  add    $0x2,%eax
  addss  %xmm1,%xmm0
  cmp    %eax,%ebx
  jle    L160
  movss  0x8(%r12,%rcx,1),%xmm1
  mulss  0x8(%rbp,%rcx,1),%xmm1
  addss  %xmm1,%xmm0
L160:
  movss  %xmm0,(%rsp)
L247:
  movss  0x4(%rsp),%xmm0
  movslq %ebx,%rax
  cmp    $0x2,%r14d
  jbe    L276
  movups (%r12,%rax,4),%xmm1
  movups 0x0(%rbp),%xmm2
  mov    %ebx,%eax
  and    $0xfffffffc,%eax
  mulps  %xmm2,%xmm1
  addss  %xmm1,%xmm0
  movaps %xmm1,%xmm2
  shufps $0x55,%xmm1,%xmm2
  addss  %xmm2,%xmm0
  movaps %xmm1,%xmm2
  unpckhps %xmm1,%xmm2
  shufps $0xff,%xmm1,%xmm1
  addss  %xmm2,%xmm0
  addss  %xmm1,%xmm0
  test   $0x3,%bl
  je     L87
  lea    (%rbx,%rax,1),%edx
  movslq %eax,%rsi
  add    $0x1,%eax
  movslq %edx,%rdx
  lea    0x0(,%rsi,4),%rcx
  movss  (%r12,%rdx,4),%xmm1
  mulss  0x0(%rbp,%rsi,4),%xmm1
  addss  %xmm1,%xmm0
  cmp    %eax,%ebx
  jle    L22
L182:
  lea    0x1(%rbx),%eax
  cltq
  movss  (%r12,%rax,4),%xmm1
  mulss  0x4(%rbp,%rcx,1),%xmm1
  addss  %xmm1,%xmm0
  cmp    $0x2,%ebx
  jle    L22
  lea    0x2(%rbx),%eax
  cltq
  movss  (%r12,%rax,4),%xmm1
  mulss  0x8(%rbp,%rcx,1),%xmm1
  addss  %xmm1,%xmm0
L87:
  movss  %xmm0,0x4(%rsp)
L180:
  lea    (%rbx,%rbx,1),%eax
  movss  0x8(%rsp),%xmm1
  movslq %eax,%rdx
  cmp    $0x2,%r14d
  jbe    L169
  movups (%r12,%rdx,4),%xmm0
  movups 0x0(%rbp),%xmm2
  mov    %ebx,%edx
  and    $0xfffffffc,%edx
  mulps  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  movaps %xmm0,%xmm3
  shufps $0x55,%xmm0,%xmm3
  addss  %xmm3,%xmm1
  movaps %xmm0,%xmm3
  unpckhps %xmm0,%xmm3
  shufps $0xff,%xmm0,%xmm0
  addss  %xmm3,%xmm1
  addss  %xmm0,%xmm1
  test   $0x3,%bl
  je     L135
  lea    (%rax,%rdx,1),%ecx
  movslq %edx,%rdi
  add    $0x1,%edx
  movslq %ecx,%rcx
  lea    0x0(,%rdi,4),%rsi
  movss  (%r12,%rcx,4),%xmm0
  mulss  0x0(%rbp,%rdi,4),%xmm0
  addss  %xmm1,%xmm0
  cmp    %edx,%ebx
  jle    L95
L165:
  lea    0x1(%rax),%edx
  movslq %edx,%rdx
  movss  (%r12,%rdx,4),%xmm1
  mulss  0x4(%rbp,%rsi,1),%xmm1
  addss  %xmm1,%xmm0
  cmp    $0x2,%ebx
  jle    L95
  add    $0x2,%eax
  cltq
  movss  (%r12,%rax,4),%xmm1
  mulss  0x8(%rbp,%rsi,1),%xmm1
  addss  %xmm1,%xmm0
L95:
  movss  %xmm0,0x8(%rsp)
  cmp    $0x3,%ebx
  jle    L37
  movss  0xc(%rsp),%xmm3
  cmp    $0x2,%r14d
  jbe    L57
  movups 0x0(%rbp),%xmm2
L155:
  movups 0x30(%r12),%xmm1
  mov    %ebx,%eax
  and    $0xfffffffc,%eax
  mulps  %xmm2,%xmm1
  movaps %xmm1,%xmm0
  movaps %xmm1,%xmm2
  addss  %xmm3,%xmm0
  shufps $0x55,%xmm1,%xmm2
  addss  %xmm2,%xmm0
  movaps %xmm1,%xmm2
  unpckhps %xmm1,%xmm2
  shufps $0xff,%xmm1,%xmm1
  addss  %xmm2,%xmm0
  addss  %xmm1,%xmm0
  test   $0x3,%bl
  je     L141
  lea    0xc(%rax),%edx
  movslq %eax,%rcx
  add    $0x1,%eax
  movslq %edx,%rdx
  lea    0x0(,%rcx,4),%rsi
  movss  (%r12,%rdx,4),%xmm1
  mulss  0x0(%rbp,%rcx,4),%xmm1
  addss  %xmm1,%xmm0
  cmp    %eax,%ebx
  jle    L141
L79:
  movss  0x4(%rbp,%rsi,1),%xmm1
  mulss  0x34(%r12),%xmm1
  addss  %xmm1,%xmm0
  cmp    $0x2,%ebx
  jle    L141
  movss  0x8(%rbp,%rsi,1),%xmm1
  mulss  0x38(%r12),%xmm1
  addss  %xmm1,%xmm0
L141:
  movss  %xmm0,0xc(%rsp)
L37:
  mov    %r13,%rdx
  mov    %r8,%rsi
  mov    %rbp,%rdi
  call   <memcpy@plt>
L107:
  mov    0x18(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L125
  add    $0x20,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
L136:
  movss  %xmm0,(%rsp)
  cmp    $0x1,%ebx
  je     L37
  jmp    L247
  nopl   (%rax)
L22:
  movss  %xmm0,0x4(%rsp)
  cmp    $0x2,%ebx
  jle    L37
  jmp    L180
L135:
  movss  0xc(%rsp),%xmm3
  movss  %xmm1,0x8(%rsp)
  jmp    L155
L240:
  xor    %eax,%eax
  jmp    L144
L276:
  movss  (%r12,%rax,4),%xmm1
  mulss  0x0(%rbp),%xmm1
  xor    %ecx,%ecx
  addss  %xmm1,%xmm0
  jmp    L182
L169:
  movss  (%r12,%rdx,4),%xmm0
  mulss  0x0(%rbp),%xmm0
  xor    %esi,%esi
  addss  %xmm1,%xmm0
  jmp    L165
L57:
  movss  0x30(%r12),%xmm0
  mulss  0x0(%rbp),%xmm0
  xor    %esi,%esi
  addss  %xmm3,%xmm0
  jmp    L79
L125:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
void vmatm(int SIZE, float *pA, float *pB) {
  int i, j;
  float temp[4];
  for (i = 0; i < SIZE; i++)
    temp[i] = 0.0;
  for (i = 0; i < SIZE; i++)
    for (j = 0; j < SIZE; j++)
      temp[i] += *(pA + (i * SIZE + j)) * *(pB + j);
  for (i = 0; i < SIZE; i++)
    *(pB + i) = temp[i];
}
```