user: Converte this assembly snippet into its equivalent C code:

```asm
<test_MatrixT>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xe0,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movsd  D91(%rip),%xmm0
  movsd  %xmm0,-0xd0(%rbp)
  movsd  D47(%rip),%xmm0
  movsd  %xmm0,-0xc8(%rbp)
  movsd  D32(%rip),%xmm0
  movsd  %xmm0,-0xc0(%rbp)
  movsd  D41(%rip),%xmm0
  movsd  %xmm0,-0xb8(%rbp)
  movsd  D121(%rip),%xmm0
  movsd  %xmm0,-0xb0(%rbp)
  movsd  D108(%rip),%xmm0
  movsd  %xmm0,-0xa8(%rbp)
  movsd  D3(%rip),%xmm0
  movsd  %xmm0,-0xa0(%rbp)
  movsd  D9(%rip),%xmm0
  movsd  %xmm0,-0x98(%rbp)
  movsd  D58(%rip),%xmm0
  movsd  %xmm0,-0x90(%rbp)
  movsd  D25(%rip),%xmm0
  movsd  %xmm0,-0x88(%rbp)
  movsd  D10(%rip),%xmm0
  movsd  %xmm0,-0x80(%rbp)
  movsd  D65(%rip),%xmm0
  movsd  %xmm0,-0x78(%rbp)
  lea    -0x70(%rbp),%rdx
  lea    -0xd0(%rbp),%rax
  mov    %rdx,%rcx
  mov    $0x3,%edx
  mov    $0x4,%esi
  mov    %rax,%rdi
  call   <MatrixT@plt>
  movl   $0x0,-0xd8(%rbp)
  jmp    L13
L43:
  movl   $0x0,-0xd4(%rbp)
  jmp    L32
L41:
  mov    -0xd4(%rbp),%eax
  movslq %eax,%rdx
  mov    -0xd8(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  mov    -0x70(%rbp,%rax,8),%rax
  movq   %rax,%xmm0
  lea    D8(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  addl   $0x1,-0xd4(%rbp)
L32:
  cmpl   $0x3,-0xd4(%rbp)
  jle    L41
  mov    $0xa,%edi
  call   <putchar@plt>
  addl   $0x1,-0xd8(%rbp)
L13:
  cmpl   $0x2,-0xd8(%rbp)
  jle    L43
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L24
  call   <__stack_chk_fail@plt>
L24:
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_tag: D91
datatype: byte[8]
name: parse_data
arguments: data_tag: D47
datatype: byte[8]
name: parse_data
arguments: data_tag: D32
datatype: byte[8]
name: parse_data
arguments: data_tag: D41
datatype: byte[8]
name: parse_data
arguments: data_tag: D121
datatype: byte[8]
name: parse_data
arguments: data_tag: D108
datatype: byte[8]
name: parse_data
arguments: data_tag: D3
datatype: byte[8]
name: parse_data
arguments: data_tag: D9
datatype: byte[8]
name: parse_data
arguments: data_tag: D58
datatype: byte[8]
name: parse_data
arguments: data_tag: D25
datatype: byte[8]
name: parse_data
arguments: data_tag: D10
datatype: byte[8]
name: parse_data
arguments: data_tag: D65
datatype: byte[8]
name: parse_data
arguments: data_tag: D8
datatype: string

tool: {"D91": [0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f]}

tool: {"D47": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40]}

tool: {"D32": [0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x40]}

tool: {"D41": [0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x40]}

tool: {"D121": [0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x40]}

tool: {"D108": [0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x40]}

tool: {"D3": [0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x40]}

tool: {"D9": [0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x40]}

tool: {"D58": [0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x40]}

tool: {"D25": [0x00,0x00,0x00,0x00,0x00,0x00,0x24,0x40]}

tool: {"D10": [0x00,0x00,0x00,0x00,0x00,0x00,0x26,0x40]}

tool: {"D65": [0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x40]}

tool: D8: %lf  

assistant: ```c
void test_MatrixT() {
  double a[4][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
  double c[3][4];
  MatrixT((double *)a, 4, 3, (double *)c);
  int i, j;
  for (i = 0; i < 3; i++) {
    for (j = 0; j < 4; j++) {
      printf("%lf  ", c[i][j]);
    }
    printf("\n");
  }
  return;
}
```