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

```asm
<test_basic_mtx_op>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x290,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x3,-0x284(%rbp)
  movl   $0x3,-0x280(%rbp)
  movl   $0x4,-0x27c(%rbp)
  movsd  D263(%rip),%xmm0
  movsd  %xmm0,-0x270(%rbp)
  movsd  D56(%rip),%xmm0
  movsd  %xmm0,-0x268(%rbp)
  movsd  D160(%rip),%xmm0
  movsd  %xmm0,-0x260(%rbp)
  movsd  D184(%rip),%xmm0
  movsd  %xmm0,-0x258(%rbp)
  movsd  D80(%rip),%xmm0
  movsd  %xmm0,-0x250(%rbp)
  movsd  D0(%rip),%xmm0
  movsd  %xmm0,-0x248(%rbp)
  movsd  D169(%rip),%xmm0
  movsd  %xmm0,-0x240(%rbp)
  movsd  D294(%rip),%xmm0
  movsd  %xmm0,-0x238(%rbp)
  movsd  D356(%rip),%xmm0
  movsd  %xmm0,-0x230(%rbp)
  movsd  D206(%rip),%xmm0
  movsd  %xmm0,-0x130(%rbp)
  movsd  D342(%rip),%xmm0
  movsd  %xmm0,-0x128(%rbp)
  movsd  D188(%rip),%xmm0
  movsd  %xmm0,-0x120(%rbp)
  movsd  D352(%rip),%xmm0
  movsd  %xmm0,-0x118(%rbp)
  movsd  D249(%rip),%xmm0
  movsd  %xmm0,-0x110(%rbp)
  movsd  D242(%rip),%xmm0
  movsd  %xmm0,-0x108(%rbp)
  movsd  D98(%rip),%xmm0
  movsd  %xmm0,-0x100(%rbp)
  movsd  D315(%rip),%xmm0
  movsd  %xmm0,-0xf8(%rbp)
  movsd  D257(%rip),%xmm0
  movsd  %xmm0,-0xf0(%rbp)
  movsd  D236(%rip),%xmm0
  movsd  %xmm0,-0xe8(%rbp)
  movsd  D145(%rip),%xmm0
  movsd  %xmm0,-0xe0(%rbp)
  movsd  D317(%rip),%xmm0
  movsd  %xmm0,-0xd8(%rbp)
  movsd  D239(%rip),%xmm0
  movsd  %xmm0,-0x220(%rbp)
  movsd  D350(%rip),%xmm0
  movsd  %xmm0,-0x218(%rbp)
  movsd  D310(%rip),%xmm0
  movsd  %xmm0,-0x210(%rbp)
  movsd  D350(%rip),%xmm0
  movsd  %xmm0,-0x208(%rbp)
  movsd  D362(%rip),%xmm0
  movsd  %xmm0,-0x200(%rbp)
  movsd  D216(%rip),%xmm0
  movsd  %xmm0,-0x1f8(%rbp)
  movsd  D310(%rip),%xmm0
  movsd  %xmm0,-0x1f0(%rbp)
  movsd  D216(%rip),%xmm0
  movsd  %xmm0,-0x1e8(%rbp)
  movsd  D149(%rip),%xmm0
  movsd  %xmm0,-0x1e0(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x278(%rbp)
  lea    D97(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    -0x280(%rbp),%edx
  mov    -0x284(%rbp),%ecx
  lea    -0x270(%rbp),%rax
  mov    %ecx,%esi
  mov    %rax,%rdi
  call   <show_matrix@plt>
  lea    D243(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    -0x27c(%rbp),%edx
  mov    -0x280(%rbp),%ecx
  lea    -0x130(%rbp),%rax
  mov    %ecx,%esi
  mov    %rax,%rdi
  call   <show_matrix@plt>
  lea    D62(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    -0x27c(%rbp),%r8d
  mov    -0x280(%rbp),%edi
  mov    -0x284(%rbp),%ecx
  lea    -0xd0(%rbp),%rdx
  lea    -0x130(%rbp),%rsi
  lea    -0x270(%rbp),%rax
  mov    %r8d,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  call   <mtx_mult@plt>
  mov    -0x27c(%rbp),%edx
  mov    -0x284(%rbp),%ecx
  lea    -0xd0(%rbp),%rax
  mov    %ecx,%esi
  mov    %rax,%rdi
  call   <show_matrix@plt>
  lea    D301(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    -0x27c(%rbp),%ecx
  mov    -0x280(%rbp),%edx
  lea    -0x70(%rbp),%rsi
  lea    -0x130(%rbp),%rax
  mov    %rax,%rdi
  call   <mtx_transpose@plt>
  mov    -0x280(%rbp),%edx
  mov    -0x27c(%rbp),%ecx
  lea    -0x70(%rbp),%rax
  mov    %ecx,%esi
  mov    %rax,%rdi
  call   <show_matrix@plt>
  lea    D155(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    -0x280(%rbp),%edx
  mov    -0x284(%rbp),%ecx
  lea    -0x220(%rbp),%rax
  mov    %ecx,%esi
  mov    %rax,%rdi
  call   <show_matrix@plt>
  lea    D388(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    -0x284(%rbp),%edx
  lea    -0x1d0(%rbp),%rcx
  lea    -0x220(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <mtx_chol@plt>
  mov    -0x284(%rbp),%edx
  mov    -0x284(%rbp),%ecx
  lea    -0x1d0(%rbp),%rax
  mov    %ecx,%esi
  mov    %rax,%rdi
  call   <show_matrix@plt>
  lea    D43(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    -0x284(%rbp),%ecx
  mov    -0x284(%rbp),%edx
  lea    -0x180(%rbp),%rsi
  lea    -0x1d0(%rbp),%rax
  mov    %rax,%rdi
  call   <mtx_transpose@plt>
  mov    -0x284(%rbp),%r8d
  mov    -0x284(%rbp),%edi
  mov    -0x284(%rbp),%ecx
  lea    -0x220(%rbp),%rdx
  lea    -0x180(%rbp),%rsi
  lea    -0x1d0(%rbp),%rax
  mov    %r8d,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  call   <mtx_mult@plt>
  mov    -0x284(%rbp),%edx
  mov    -0x284(%rbp),%ecx
  lea    -0x220(%rbp),%rax
  mov    %ecx,%esi
  mov    %rax,%rdi
  call   <show_matrix@plt>
  lea    D20(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D210(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L4
  call   <__stack_chk_fail@plt>
L4:
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: data_tag: D263
type_infered: f64
name: retrieve_data
arguments: data_tag: D56
type_infered: f64
name: retrieve_data
arguments: data_tag: D160
type_infered: f64
name: retrieve_data
arguments: data_tag: D184
type_infered: f64
name: retrieve_data
arguments: data_tag: D80
type_infered: f64
name: retrieve_data
arguments: data_tag: D0
type_infered: f64
name: retrieve_data
arguments: data_tag: D169
type_infered: f64
name: retrieve_data
arguments: data_tag: D294
type_infered: f64
name: retrieve_data
arguments: data_tag: D356
type_infered: f64
name: retrieve_data
arguments: data_tag: D206
type_infered: f64
name: retrieve_data
arguments: data_tag: D342
type_infered: f64
name: retrieve_data
arguments: data_tag: D188
type_infered: f64
name: retrieve_data
arguments: data_tag: D352
type_infered: f64
name: retrieve_data
arguments: data_tag: D249
type_infered: f64
name: retrieve_data
arguments: data_tag: D242
type_infered: f64
name: retrieve_data
arguments: data_tag: D98
type_infered: f64
name: retrieve_data
arguments: data_tag: D315
type_infered: f64
name: retrieve_data
arguments: data_tag: D257
type_infered: f64
name: retrieve_data
arguments: data_tag: D236
type_infered: f64
name: retrieve_data
arguments: data_tag: D145
type_infered: f64
name: retrieve_data
arguments: data_tag: D317
type_infered: f64
name: retrieve_data
arguments: data_tag: D239
type_infered: f64
name: retrieve_data
arguments: data_tag: D350
type_infered: f64
name: retrieve_data
arguments: data_tag: D310
type_infered: f64
name: retrieve_data
arguments: data_tag: D362
type_infered: f64
name: retrieve_data
arguments: data_tag: D216
type_infered: f64
name: retrieve_data
arguments: data_tag: D149
type_infered: f64
name: retrieve_data
arguments: data_tag: D97
type_infered: string
name: retrieve_data
arguments: data_tag: D243
type_infered: string
name: retrieve_data
arguments: data_tag: D62
type_infered: string
name: retrieve_data
arguments: data_tag: D301
type_infered: string
name: retrieve_data
arguments: data_tag: D155
type_infered: string
name: retrieve_data
arguments: data_tag: D388
type_infered: string
name: retrieve_data
arguments: data_tag: D43
type_infered: string
name: retrieve_data
arguments: data_tag: D20
type_infered: string
name: retrieve_data
arguments: data_tag: D210
type_infered: string

tool: D263: 0.9572

tool: D56: 0.1419

tool: D160: 0.7922

tool: D184: 0.4854

tool: D80: 0.4218

tool: D0: 0.9595

tool: D169: 0.8003

tool: D294: 0.9157

tool: D356: 0.6557

tool: D206: 0.8147

tool: D342: 0.9134

tool: D188: 0.2785

tool: D352: 0.9649

tool: D249: 0.9058

tool: D242: 0.6324

tool: D98: 0.5469

tool: D315: 0.1576

tool: D257: 0.127

tool: D236: 0.0975

tool: D145: 0.9575

tool: D317: 0.9706

tool: D239: 3.5712

tool: D350: 1.4007

tool: D310: 2.5214

tool: D362: 84.9129

tool: D216: 2.703

tool: D149: 93.3993

tool: D97: Show Matrix A


tool: D243: Show Matrix B


tool: D62: C = A * B


tool: D301: B' = B


tool: D155: Show Symmetric Matrix D


tool: D388: L = chol(D)


tool: D43: D = L*L'


tool: D20: Matrix test results validated using Matlab: 


tool: D210: All good! 05/15, FS


assistant: ```c
void test_basic_mtx_op(void) {
  int dim_i = 3;
  int dim_j = 3;
  int dim_k = 4;
  double matrix_A[9] = {0.9572, 0.1419, 0.7922, 0.4854, 0.4218, 0.9595, 0.8003, 0.9157, 0.6557};
  double matrix_B[12] = {0.8147, 0.9134, 0.2785, 0.9649, 0.9058, 0.6324, 0.5469, 0.1576, 0.1270, 0.0975, 0.9575, 0.9706};
  double matrix_D[9] = {3.5712, 1.4007, 2.5214, 1.4007, 84.9129, 2.7030, 2.5214, 2.7030, 93.3993};
  double matrix_C[12];
  double matrix_B_prime[12];
  double matrix_L[9];
  double matrix_L_prime[9];
  double result = 0.0;
  printf("Show Matrix A\n");
  show_matrix(matrix_A, dim_i, dim_j);
  printf("Show Matrix B\n");
  show_matrix(matrix_B, dim_j, dim_k);
  printf("C = A * B\n");
  mtx_mult(matrix_A, matrix_B, matrix_C, dim_i, dim_j, dim_k);
  show_matrix(matrix_C, dim_i, dim_k);
  printf("B' = B\n");
  mtx_transpose(matrix_B, matrix_B_prime, dim_j, dim_k);
  show_matrix(matrix_B_prime, dim_k, dim_j);
  printf("Show Symmetric Matrix D\n");
  show_matrix(matrix_D, dim_i, dim_j);
  printf("L = chol(D)\n");
  mtx_chol(matrix_D, matrix_L, dim_i);
  show_matrix(matrix_L, dim_i, dim_i);
  printf("D = L*L'\n");
  mtx_transpose(matrix_L, matrix_L_prime, dim_i, dim_i);
  mtx_mult(matrix_L, matrix_L_prime, matrix_D, dim_i, dim_i, dim_i);
  show_matrix(matrix_D, dim_i, dim_i);
  printf("Matrix test results validated using Matlab: \n");
  printf("All good! 05/15, FS\n");
}
```