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

```asm
<mat_multiply_matrix_i3>:
  endbr64
  sub    $0x38,%rsp
  movdqu (%rdx),%xmm3
  movdqu (%rsi),%xmm6
  movdqu 0x10(%rsi),%xmm2
  movdqu 0x10(%rdx),%xmm4
  pshufd $0x24,%xmm3,%xmm5
  movdqa %xmm3,%xmm10
  mov    0x20(%rdx),%r8d
  mov    0x20(%rsi),%ecx
  pshufd $0xc0,%xmm6,%xmm8
  movdqa %xmm5,%xmm9
  shufps $0x4e,%xmm4,%xmm10
  pshufd $0x79,%xmm10,%xmm10
  pmuludq %xmm8,%xmm9
  psrlq  $0x20,%xmm5
  movd   0x8(%rsi),%xmm1
  movd   0x1c(%rdx),%xmm7
  mov    %fs:0x28,%rax
  mov    %rax,0x28(%rsp)
  xor    %eax,%eax
  psrlq  $0x20,%xmm8
  movd   0x18(%rdx),%xmm11
  movd   0x14(%rsi),%xmm0
  pmuludq %xmm8,%xmm5
  pshufd $0x8,%xmm9,%xmm9
  pshufd $0x8,%xmm5,%xmm5
  punpckldq %xmm5,%xmm9
  movdqa %xmm6,%xmm5
  shufps $0xaf,%xmm2,%xmm6
  punpckldq %xmm2,%xmm5
  pshufd $0x6a,%xmm5,%xmm5
  movdqa %xmm5,%xmm8
  psrlq  $0x20,%xmm5
  pmuludq %xmm10,%xmm8
  psrlq  $0x20,%xmm10
  pmuludq %xmm10,%xmm5
  pshufd $0x8,%xmm8,%xmm8
  pshufd $0x8,%xmm5,%xmm5
  punpckldq %xmm5,%xmm8
  movdqa %xmm9,%xmm5
  movd   %r8d,%xmm9
  paddd  %xmm8,%xmm5
  movdqa %xmm1,%xmm8
  punpckldq %xmm11,%xmm9
  punpckldq %xmm0,%xmm8
  punpckldq %xmm7,%xmm11
  punpckldq %xmm1,%xmm1
  punpcklqdq %xmm8,%xmm1
  movdqa %xmm11,%xmm10
  punpckldq %xmm0,%xmm0
  punpcklqdq %xmm9,%xmm10
  movdqa %xmm1,%xmm9
  pmuludq %xmm10,%xmm9
  psrlq  $0x20,%xmm1
  psrlq  $0x20,%xmm10
  pmuludq %xmm10,%xmm1
  pshufd $0x8,%xmm9,%xmm9
  pshufd $0x8,%xmm1,%xmm1
  punpckldq %xmm1,%xmm9
  paddd  %xmm9,%xmm5
  movaps %xmm5,(%rsp)
  pshufd $0x49,%xmm3,%xmm5
  movdqa %xmm5,%xmm1
  psrlq  $0x20,%xmm5
  pmuludq %xmm6,%xmm1
  psrlq  $0x20,%xmm6
  pmuludq %xmm6,%xmm5
  movdqa %xmm4,%xmm6
  pshufd $0x55,%xmm4,%xmm4
  shufps $0xe4,%xmm3,%xmm6
  pshufd $0x34,%xmm6,%xmm6
  punpckhdq %xmm3,%xmm3
  movd   %xmm4,%esi
  movd   %xmm3,%eax
  pshufd $0x8,%xmm1,%xmm1
  pshufd $0x8,%xmm5,%xmm5
  punpckldq %xmm5,%xmm1
  pshufd $0xf0,%xmm2,%xmm5
  movdqa %xmm5,%xmm9
  psrlq  $0x20,%xmm5
  pmuludq %xmm6,%xmm9
  psrlq  $0x20,%xmm6
  pmuludq %xmm6,%xmm5
  pshufd $0x8,%xmm9,%xmm6
  pshufd $0x8,%xmm5,%xmm5
  punpckldq %xmm5,%xmm6
  movd   %ecx,%xmm5
  punpckldq %xmm5,%xmm5
  imul   %r8d,%ecx
  paddd  %xmm6,%xmm1
  punpcklqdq %xmm5,%xmm0
  movdqa %xmm7,%xmm5
  movd   %r8d,%xmm7
  punpckldq %xmm7,%xmm5
  movdqa %xmm0,%xmm6
  punpcklqdq %xmm11,%xmm5
  psrlq  $0x20,%xmm0
  pmuludq %xmm5,%xmm6
  psrlq  $0x20,%xmm5
  pmuludq %xmm5,%xmm0
  pshufd $0x8,%xmm6,%xmm5
  pshufd $0x8,%xmm0,%xmm0
  punpckldq %xmm0,%xmm5
  movdqa %xmm2,%xmm0
  punpckhdq %xmm2,%xmm0
  pshufd $0xff,%xmm2,%xmm2
  paddd  %xmm5,%xmm1
  movd   %xmm0,%edx
  movaps %xmm1,0x10(%rsp)
  imul   %eax,%edx
  movd   %xmm2,%eax
  imul   %esi,%eax
  mov    %rsp,%rsi
  add    %edx,%eax
  add    %ecx,%eax
  mov    %eax,0x20(%rsp)
  call   <mat_copy_matrix_i3@plt>
  mov    0x28(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L4
  add    $0x38,%rsp
  ret
L4:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
void mat_multiply_matrix_i3(int m[3][3], int a[3][3], int b[3][3]) {
  int i, j;
  int c[3][3];
  for (i = 0; i < 3; i++) {
    for (j = 0; j < 3; j++) {
      c[i][j] = a[i][0] * b[0][j] + a[i][1] * b[1][j] + a[i][2] * b[2][j];
    }
  }
  mat_copy_matrix_i3(m, c);
}
```