user: 请显示与下面列出的汇编代码相匹配的C语言实现:

```asm
<calc_mv>:
  endbr64
  mov    %rdi,%r8
  mov    %rcx,%rdi
  test   %r8,%r8
  jle    L76
  lea    0x10(%rdx),%r9
  mov    %r8,%rcx
  lea    (%rdi,%r8,4),%rax
  shl    $0x4,%rcx
  cmp    %r9,%rdi
  setae  %r10b
  cmp    %rax,%rdx
  setae  %r9b
  add    %rsi,%rcx
  or     %r9d,%r10d
  cmp    %rcx,%rdi
  setae  %r9b
  cmp    %rax,%rsi
  setae  %al
  or     %r9d,%eax
  test   %al,%r10b
  je     L47
  lea    -0x1(%r8),%rax
  cmp    $0x2,%rax
  jbe    L47
  mov    %r8,%r9
  movss  (%rdx),%xmm7
  movss  0x4(%rdx),%xmm6
  mov    %rsi,%rax
  shr    $0x2,%r9
  movss  0x8(%rdx),%xmm5
  movss  0xc(%rdx),%xmm4
  mov    %rdi,%rcx
  shl    $0x6,%r9
  shufps $0x0,%xmm7,%xmm7
  shufps $0x0,%xmm6,%xmm6
  add    %rsi,%r9
  shufps $0x0,%xmm5,%xmm5
  shufps $0x0,%xmm4,%xmm4
  nopl   0x0(%rax)
L51:
  movups (%rax),%xmm1
  movups 0x10(%rax),%xmm0
  add    $0x40,%rax
  add    $0x10,%rcx
  movups -0x20(%rax),%xmm3
  movaps %xmm1,%xmm2
  shufps $0xdd,%xmm0,%xmm1
  movaps %xmm1,%xmm8
  shufps $0x88,%xmm0,%xmm2
  movups -0x10(%rax),%xmm0
  movaps %xmm3,%xmm9
  shufps $0x88,%xmm0,%xmm9
  shufps $0xdd,%xmm0,%xmm3
  movaps %xmm2,%xmm0
  shufps $0x88,%xmm3,%xmm8
  shufps $0x88,%xmm9,%xmm0
  mulps  %xmm7,%xmm0
  shufps $0xdd,%xmm9,%xmm2
  shufps $0xdd,%xmm3,%xmm1
  mulps  %xmm6,%xmm8
  mulps  %xmm5,%xmm2
  mulps  %xmm4,%xmm1
  addps  %xmm8,%xmm0
  addps  %xmm2,%xmm0
  addps  %xmm1,%xmm0
  movups %xmm0,-0x10(%rcx)
  cmp    %r9,%rax
  jne    L51
  mov    %r8,%rax
  and    $0xfffffffffffffffc,%rax
  test   $0x3,%r8b
  je     L76
  mov    %rax,%rcx
  shl    $0x4,%rcx
  add    %rsi,%rcx
  movss  (%rcx),%xmm0
  movss  0x4(%rcx),%xmm1
  mulss  (%rdx),%xmm0
  mulss  0x4(%rdx),%xmm1
  addss  %xmm1,%xmm0
  movss  0x8(%rcx),%xmm1
  mulss  0x8(%rdx),%xmm1
  addss  %xmm1,%xmm0
  movss  0xc(%rcx),%xmm1
  mulss  0xc(%rdx),%xmm1
  lea    0x1(%rax),%rcx
  addss  %xmm1,%xmm0
  movss  %xmm0,(%rdi,%rax,4)
  cmp    %rcx,%r8
  jle    L76
  mov    %rcx,%r10
  add    $0x2,%rax
  lea    0x0(,%rcx,4),%r11
  shl    $0x4,%r10
  lea    (%rsi,%r10,1),%r9
  movss  (%r9),%xmm0
  movss  0x4(%r9),%xmm1
  mulss  (%rdx),%xmm0
  mulss  0x4(%rdx),%xmm1
  addss  %xmm1,%xmm0
  movss  0x8(%r9),%xmm1
  mulss  0x8(%rdx),%xmm1
  addss  %xmm1,%xmm0
  movss  0xc(%r9),%xmm1
  mulss  0xc(%rdx),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,(%rdi,%rcx,4)
  cmp    %rax,%r8
  jle    L76
  lea    0x10(%rsi,%r10,1),%rax
  movss  (%rax),%xmm0
  movss  0x4(%rax),%xmm1
  mulss  (%rdx),%xmm0
  mulss  0x4(%rdx),%xmm1
  addss  %xmm1,%xmm0
  movss  0x8(%rax),%xmm1
  mulss  0x8(%rdx),%xmm1
  addss  %xmm1,%xmm0
  movss  0xc(%rax),%xmm1
  mulss  0xc(%rdx),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,0x4(%rdi,%r11,1)
  ret
  nopw   0x0(%rax,%rax,1)
L47:
  mov    %rsi,%rax
  nopl   0x0(%rax,%rax,1)
L17:
  movss  0x4(%rdx),%xmm0
  movss  (%rdx),%xmm1
  add    $0x10,%rax
  add    $0x4,%rdi
  mulss  -0x10(%rax),%xmm1
  mulss  -0xc(%rax),%xmm0
  addss  %xmm1,%xmm0
  movss  0x8(%rdx),%xmm1
  mulss  -0x8(%rax),%xmm1
  addss  %xmm1,%xmm0
  movss  -0x4(%rax),%xmm1
  mulss  0xc(%rdx),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x4(%rdi)
  cmp    %rcx,%rax
  jne    L17
L76:
  ret
```

assistant: ```c
void calc_mv(long n, float matrix[][4], float vector[], float mv[]) {
  long i;
  for (i = 0; i < n; i++)
    mv[i] = matrix[i][0] * vector[0] + matrix[i][1] * vector[1] + matrix[i][2] * vector[2] + matrix[i][3] * vector[3];
}
```