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

```asm
<mult_cpx_matrix_h>:
  endbr64
  push   %r14
  test   %r9w,%r9w
  mov    %rdx,%r14
  mov    $0x1,%r9d
  push   %r13
  mov    %rsi,%r13
  push   %r12
  mov    %ecx,%r12d
  push   %rbp
  mov    %rdi,%rbp
  push   %rbx
  movzwl %r8w,%ebx
  mov    (%rdx),%rdx
  mov    (%rsi),%r10
  mov    (%rdi),%rdi
  mov    %ebx,%r8d
  je     L18
  mov    %rdi,%rsi
  mov    %r10,%rdi
  call   <mult_cpx_vector_h@plt>
  mov    0x8(%rbp),%rsi
  mov    0x8(%r13),%rdi
  mov    %ebx,%r8d
  mov    (%r14),%rdx
  mov    $0x1,%r9d
  mov    %r12d,%ecx
  call   <mult_cpx_vector_h@plt>
  mov    0x10(%r14),%rdx
  mov    0x10(%rbp),%rsi
  mov    %ebx,%r8d
  mov    0x0(%r13),%rdi
  mov    $0x1,%r9d
  mov    %r12d,%ecx
  call   <mult_cpx_vector_h@plt>
  mov    0x10(%r14),%rdx
  mov    0x18(%rbp),%rsi
  mov    %ebx,%r8d
  mov    0x8(%r13),%rdi
  mov    $0x1,%r9d
  mov    %r12d,%ecx
  call   <mult_cpx_vector_h@plt>
  mov    0x8(%r14),%rdx
  mov    0x10(%r13),%rdi
  mov    %ebx,%r8d
  mov    0x0(%rbp),%rsi
  mov    $0x1,%r9d
  mov    %r12d,%ecx
  call   <mult_cpx_vector_h@plt>
  mov    0x8(%r14),%rdx
  mov    0x8(%rbp),%rsi
  mov    %ebx,%r8d
  mov    0x18(%r13),%rdi
  mov    $0x1,%r9d
  mov    %r12d,%ecx
  call   <mult_cpx_vector_h@plt>
  mov    0x18(%r14),%rdx
  mov    0x10(%rbp),%rsi
  mov    %ebx,%r8d
  mov    0x10(%r13),%rdi
  mov    $0x1,%r9d
  mov    %r12d,%ecx
  call   <mult_cpx_vector_h@plt>
  mov    0x18(%r14),%rdx
  mov    0x18(%rbp),%rsi
  mov    0x18(%r13),%rdi
L1:
  mov    %ebx,%r8d
  mov    %r12d,%ecx
  pop    %rbx
  mov    $0x1,%r9d
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  jmp    1050 <mult_cpx_vector_h@plt>
  nopl   (%rax)
L18:
  mov    %r10,%rsi
  call   <mult_cpx_vector_h@plt>
  mov    0x8(%r13),%rsi
  mov    0x8(%rbp),%rdi
  mov    %ebx,%r8d
  mov    (%r14),%rdx
  mov    $0x1,%r9d
  mov    %r12d,%ecx
  call   <mult_cpx_vector_h@plt>
  mov    0x8(%r14),%rdx
  mov    0x10(%r13),%rsi
  mov    %ebx,%r8d
  mov    0x0(%rbp),%rdi
  mov    $0x1,%r9d
  mov    %r12d,%ecx
  call   <mult_cpx_vector_h@plt>
  mov    0x8(%r14),%rdx
  mov    0x18(%r13),%rsi
  mov    %ebx,%r8d
  mov    0x8(%rbp),%rdi
  mov    $0x1,%r9d
  mov    %r12d,%ecx
  call   <mult_cpx_vector_h@plt>
  mov    0x10(%r14),%rdx
  mov    0x10(%rbp),%rdi
  mov    %ebx,%r8d
  mov    0x0(%r13),%rsi
  mov    $0x1,%r9d
  mov    %r12d,%ecx
  call   <mult_cpx_vector_h@plt>
  mov    0x10(%r14),%rdx
  mov    0x8(%r13),%rsi
  mov    %ebx,%r8d
  mov    0x18(%rbp),%rdi
  mov    $0x1,%r9d
  mov    %r12d,%ecx
  call   <mult_cpx_vector_h@plt>
  mov    0x18(%r14),%rdx
  mov    0x10(%r13),%rsi
  mov    %ebx,%r8d
  mov    0x10(%rbp),%rdi
  mov    $0x1,%r9d
  mov    %r12d,%ecx
  call   <mult_cpx_vector_h@plt>
  mov    0x18(%r14),%rdx
  mov    0x18(%r13),%rsi
  mov    0x18(%rbp),%rdi
  jmp    L1
```

assistant: ```c
int mult_cpx_matrix_h(short *x1[2][2], short *x2[2][2], short *y[2][2], unsigned int N, unsigned short output_shift, short hermitian) {
  if (hermitian) {
    mult_cpx_vector_h(x2[0][0], x1[0][0], y[0][0], N, output_shift, 1);
    mult_cpx_vector_h(x2[0][1], x1[0][1], y[0][0], N, output_shift, 1);
    mult_cpx_vector_h(x2[0][0], x1[1][0], y[1][0], N, output_shift, 1);
    mult_cpx_vector_h(x2[0][1], x1[1][1], y[1][0], N, output_shift, 1);
    mult_cpx_vector_h(x2[1][0], x1[0][0], y[0][1], N, output_shift, 1);
    mult_cpx_vector_h(x2[1][1], x1[0][1], y[0][1], N, output_shift, 1);
    mult_cpx_vector_h(x2[1][0], x1[1][0], y[1][1], N, output_shift, 1);
    mult_cpx_vector_h(x2[1][1], x1[1][1], y[1][1], N, output_shift, 1);
  } else {
    mult_cpx_vector_h(x1[0][0], x2[0][0], y[0][0], N, output_shift, 1);
    mult_cpx_vector_h(x1[0][1], x2[0][1], y[0][0], N, output_shift, 1);
    mult_cpx_vector_h(x1[0][0], x2[1][0], y[0][1], N, output_shift, 1);
    mult_cpx_vector_h(x1[0][1], x2[1][1], y[0][1], N, output_shift, 1);
    mult_cpx_vector_h(x1[1][0], x2[0][0], y[1][0], N, output_shift, 1);
    mult_cpx_vector_h(x1[1][1], x2[0][1], y[1][0], N, output_shift, 1);
    mult_cpx_vector_h(x1[1][0], x2[1][0], y[1][1], N, output_shift, 1);
    mult_cpx_vector_h(x1[1][1], x2[1][1], y[1][1], N, output_shift, 1);
  }
}
```