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

```asm
<test_lu>:
  endbr64
  push   %r12
  lea    D198(%rip),%rdi
  push   %rbp
  sub    $0x8,%rsp
  call   <printf@plt>
  mov    $0x240,%edi
  call   <malloc@plt>
  mov    $0x40,%edi
  mov    %rax,%rbp
  call   <malloc@plt>
  movsd  D59(%rip),%xmm0
  mov    %rbp,%rdi
  movsd  D282(%rip),%xmm1
  mov    %rax,%r12
  mov    D46(%rip),%rax
  movsd  D167(%rip),%xmm9
  movq   $0x0,0x18(%rbp)
  movsd  D136(%rip),%xmm6
  movsd  %xmm0,0x40(%rbp)
  mov    $0x8,%esi
  movsd  D16(%rip),%xmm8
  mov    %rax,0x0(%rbp)
  mov    D216(%rip),%rax
  movsd  D25(%rip),%xmm7
  movsd  %xmm1,0x80(%rbp)
  mov    %rax,0x48(%rbp)
  mov    D218(%rip),%rax
  movsd  %xmm0,0x8(%rbp)
  movsd  D80(%rip),%xmm0
  movsd  %xmm1,0x10(%rbp)
  movsd  D286(%rip),%xmm1
  mov    %rax,0x90(%rbp)
  movsd  %xmm0,0x88(%rbp)
  movsd  %xmm0,0x50(%rbp)
  movsd  %xmm9,0x28(%rbp)
  movsd  %xmm6,0xa8(%rbp)
  movsd  %xmm8,0x30(%rbp)
  movsd  %xmm7,0x70(%rbp)
  movsd  %xmm1,0xb0(%rbp)
  movq   $0x0,0x58(%rbp)
  movq   $0x0,0x98(%rbp)
  movq   $0x0,0x20(%rbp)
  movq   $0x0,0x60(%rbp)
  movq   $0x0,0xa0(%rbp)
  movq   $0x0,0x68(%rbp)
  movsd  D11(%rip),%xmm5
  movsd  D263(%rip),%xmm0
  movsd  D250(%rip),%xmm4
  movsd  %xmm9,0x140(%rbp)
  movsd  D220(%rip),%xmm3
  movsd  D306(%rip),%xmm2
  movsd  %xmm5,0x38(%rbp)
  mov    D290(%rip),%rax
  movsd  %xmm0,0xf0(%rbp)
  movsd  %xmm0,0x198(%rbp)
  movsd  D321(%rip),%xmm0
  mov    %rax,0xd8(%rbp)
  movsd  %xmm4,0x78(%rbp)
  movsd  %xmm3,0xb8(%rbp)
  movsd  %xmm2,0xf8(%rbp)
  movsd  %xmm8,0x180(%rbp)
  movsd  %xmm7,0x188(%rbp)
  movsd  %xmm6,0x150(%rbp)
  movsd  %xmm1,0x190(%rbp)
  movsd  %xmm0,0x160(%rbp)
  movq   $0x0,0xc0(%rbp)
  movq   $0x0,0xc8(%rbp)
  movq   $0x0,0xd0(%rbp)
  movq   $0x0,0xe0(%rbp)
  movq   $0x0,0xe8(%rbp)
  movq   $0x0,0x100(%rbp)
  movq   $0x0,0x108(%rbp)
  movq   $0x0,0x148(%rbp)
  movq   $0x0,0x110(%rbp)
  movq   $0x0,0x118(%rbp)
  movq   $0x0,0x158(%rbp)
  movq   $0x0,0x120(%rbp)
  movq   $0x0,0x1a0(%rbp)
  mov    D43(%rip),%rax
  movsd  D237(%rip),%xmm1
  movsd  %xmm0,0x128(%rbp)
  movsd  D149(%rip),%xmm0
  mov    %rax,0x1b0(%rbp)
  mov    D115(%rip),%rax
  movsd  %xmm1,0x178(%rbp)
  mov    %rax,0x200(%rbp)
  mov    D117(%rip),%rax
  movsd  %xmm0,0x1b8(%rbp)
  mov    %rax,0x208(%rbp)
  mov    D209(%rip),%rax
  movsd  %xmm5,0x1c0(%rbp)
  mov    %rax,0x210(%rbp)
  mov    D183(%rip),%rax
  movsd  %xmm4,0x1c8(%rbp)
  mov    %rax,0x218(%rbp)
  mov    D309(%rip),%rax
  movsd  %xmm3,0x1d0(%rbp)
  mov    %rax,0x220(%rbp)
  mov    D195(%rip),%rax
  movsd  %xmm2,0x1d8(%rbp)
  mov    %rax,0x228(%rbp)
  mov    D12(%rip),%rax
  movsd  %xmm1,0x1e8(%rbp)
  movsd  %xmm0,0x1f0(%rbp)
  movq   $0x0,0x168(%rbp)
  movq   $0x0,0x1a8(%rbp)
  movq   $0x0,0x130(%rbp)
  movq   $0x0,0x170(%rbp)
  movq   $0x0,0x138(%rbp)
  movq   $0x0,0x1e0(%rbp)
  mov    %rax,0x230(%rbp)
  mov    D95(%rip),%rax
  mov    %rax,0x1f8(%rbp)
  mov    D28(%rip),%rax
  mov    %rax,0x238(%rbp)
  call   <NUM_print_matrix@plt>
  mov    $0x8,%edx
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <NUM_lu@plt>
  test   %rax,%rax
  je     L6
  lea    D89(%rip),%rdi
  call   <printf@plt>
L2:
  lea    D31(%rip),%rdi
  call   <printf@plt>
  add    $0x8,%rsp
  xor    %eax,%eax
  pop    %rbp
  pop    %r12
  ret
  nopl   (%rax)
L6:
  mov    $0x8,%esi
  mov    %r12,%rdi
  call   <NUM_print_vec@plt>
  jmp    L2
```

tool_calls: name: read_data
arguments: data_tag: D198
type: string
name: read_data
arguments: data_tag: D59
type: byte[8]
name: read_data
arguments: data_tag: D282
type: byte[8]
name: read_data
arguments: data_tag: D46
type: byte[8]
name: read_data
arguments: data_tag: D167
type: byte[8]
name: read_data
arguments: data_tag: D136
type: byte[8]
name: read_data
arguments: data_tag: D16
type: byte[8]
name: read_data
arguments: data_tag: D216
type: byte[8]
name: read_data
arguments: data_tag: D25
type: byte[8]
name: read_data
arguments: data_tag: D218
type: byte[8]
name: read_data
arguments: data_tag: D80
type: byte[8]
name: read_data
arguments: data_tag: D286
type: byte[8]
name: read_data
arguments: data_tag: D11
type: byte[8]
name: read_data
arguments: data_tag: D263
type: byte[8]
name: read_data
arguments: data_tag: D250
type: byte[8]
name: read_data
arguments: data_tag: D220
type: byte[8]
name: read_data
arguments: data_tag: D306
type: byte[8]
name: read_data
arguments: data_tag: D290
type: byte[8]
name: read_data
arguments: data_tag: D321
type: byte[8]
name: read_data
arguments: data_tag: D43
type: byte[8]
name: read_data
arguments: data_tag: D237
type: byte[8]
name: read_data
arguments: data_tag: D149
type: byte[8]
name: read_data
arguments: data_tag: D115
type: byte[8]
name: read_data
arguments: data_tag: D117
type: byte[8]
name: read_data
arguments: data_tag: D209
type: byte[8]
name: read_data
arguments: data_tag: D183
type: byte[8]
name: read_data
arguments: data_tag: D309
type: byte[8]
name: read_data
arguments: data_tag: D195
type: byte[8]
name: read_data
arguments: data_tag: D12
type: byte[8]
name: read_data
arguments: data_tag: D95
type: byte[8]
name: read_data
arguments: data_tag: D28
type: byte[8]
name: read_data
arguments: data_tag: D89
type: string
name: read_data
arguments: data_tag: D31
type: string

tool: D198: Testing the LU factorisation algotythm.


tool: {"D59": [0xba,0xdb,0xf5,0xd2,0x14,0x01,0xbe,0x3f]}

tool: {"D282": [0xc9,0xff,0xe4,0xef,0xde,0x51,0x93,0x3f]}

tool: {"D46": [0xb1,0x7a,0x76,0xaf,0x49,0x6d,0xa8,0x3f]}

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

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

tool: {"D16": [0x8b,0x68,0xe0,0xec,0x7b,0x79,0x9e,0x3f]}

tool: {"D216": [0x0b,0x5e,0xf4,0x15,0xa4,0x19,0xda,0x3f]}

tool: {"D25": [0xae,0x39,0xf6,0xa2,0x2c,0x32,0xb6,0x3f]}

tool: {"D218": [0x49,0x48,0xa4,0x6d,0xfc,0x89,0xa6,0x3f]}

tool: {"D80": [0xbb,0xde,0xec,0xc5,0x06,0xc1,0x89,0x3f]}

tool: {"D286": [0x78,0x37,0x60,0xa1,0x20,0xc2,0x99,0x3f]}

tool: {"D11": [0x07,0xf0,0x16,0x48,0x50,0xcc,0x49,0x40]}

tool: {"D263": [0x6a,0xef,0x7c,0xd4,0x99,0x5a,0x7a,0x3f]}

tool: {"D250": [0xae,0x47,0xe1,0x7a,0x14,0xfe,0x64,0x40]}

tool: {"D220": [0x71,0x3d,0x0a,0xd7,0xa3,0xac,0x52,0xc0]}

tool: {"D306": [0x69,0xe5,0x5e,0x60,0x56,0x28,0xe7,0xbf]}

tool: {"D290": [0x24,0x13,0x4b,0x25,0x97,0x5a,0x8a,0x3f]}

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

tool: {"D43": [0x1b,0x2f,0x38,0xde,0x78,0xd2,0x8d,0x3f]}

tool: {"D237": [0xf6,0x28,0x5c,0x8f,0xa2,0xeb,0xc2,0xc0]}

tool: {"D149": [0x78,0x9c,0xa2,0x23,0xb9,0xac,0x3e,0xc0]}

tool: {"D115": [0x45,0x47,0x72,0xf9,0x0f,0x89,0x26,0xc0]}

tool: {"D117": [0xd8,0xd8,0x25,0xaa,0xb7,0x96,0x20,0x40]}

tool: {"D209": [0x4a,0x0c,0x02,0x2b,0x87,0x7a,0x52,0xc0]}

tool: {"D183": [0x7d,0x24,0x25,0x3d,0x0c,0x2d,0xe3,0xbf]}

tool: {"D309": [0x9b,0xef,0x96,0x9a,0xf3,0x42,0x90,0x3f]}

tool: {"D195": [0xe1,0x7a,0x14,0xae,0x87,0xcd,0xc2,0xc0]}

tool: {"D12": [0xe0,0x2d,0x90,0xa0,0xf8,0x31,0x47,0xc0]}

tool: {"D95": [0x00,0x00,0x00,0x00,0xb8,0x99,0x1c,0x41]}

tool: {"D28": [0x00,0x00,0x00,0x00,0x90,0xf7,0x0c,0x41]}

tool: D89: No solution: Error in the numerical method,


tool: D31: 


assistant: ```c
int test_lu(void) {
  int i;
  double *matrix;
  double *solution;
  int size = 8;
  printf("Testing the LU factorisation algotythm.\n");
  matrix = (double *)malloc(sizeof(double) * size * (size + 1));
  solution = (double *)malloc(sizeof(double) * size);
  matrix[0] = 4.77088e-02;
  matrix[8] = 1.17204e-01;
  matrix[16] = 1.88670e-02;
  matrix[1] = 1.17204e-01;
  matrix[9] = 4.07815e-01;
  matrix[17] = 1.25752e-02;
  matrix[2] = 1.88670e-02;
  matrix[10] = 1.25752e-02;
  matrix[18] = 4.40215e-02;
  matrix[3] = 0.00000e+00;
  matrix[11] = 0.00000e+00;
  matrix[19] = 0.00000e+00;
  matrix[4] = 0.00000e+00;
  matrix[12] = 0.00000e+00;
  matrix[20] = 0.00000e+00;
  matrix[5] = 1.00000e+00;
  matrix[13] = 0.00000e+00;
  matrix[21] = 3.00000e+00;
  matrix[6] = 2.97603e-02;
  matrix[14] = 8.67031e-02;
  matrix[22] = 2.51546e-02;
  matrix[7] = 5.15962e+01;
  matrix[15] = 1.67940e+02;
  matrix[23] = -7.46975e+01;
  matrix[24] = 0.00000e+00;
  matrix[25] = 0.00000e+00;
  matrix[26] = 0.00000e+00;
  matrix[27] = 1.28681e-02;
  matrix[28] = 0.00000e+00;
  matrix[29] = 0.00000e+00;
  matrix[30] = 6.43406e-03;
  matrix[31] = -7.23674e-01;
  matrix[32] = 0.0000e+00;
  matrix[40] = 1.00000e+00;
  matrix[48] = 2.97603e-02;
  matrix[33] = 0.0000e+00;
  matrix[41] = 0.00000e+00;
  matrix[49] = 8.67031e-02;
  matrix[34] = 0.0000e+00;
  matrix[42] = 3.00000e+00;
  matrix[50] = 2.51546e-02;
  matrix[35] = 0.0000e+00;
  matrix[43] = 0.00000e+00;
  matrix[51] = 6.43406e-03;
  matrix[36] = 0.0000e+00;
  matrix[44] = 2.00000e+00;
  matrix[52] = 0.00000e+00;
  matrix[37] = 2.0000e+00;
  matrix[45] = 0.00000e+00;
  matrix[53] = 0.00000e+00;
  matrix[38] = 0.0000e+00;
  matrix[46] = 0.00000e+00;
  matrix[54] = 1.45616e-02;
  matrix[39] = 0.0000e+00;
  matrix[47] = -9.68727e+03;
  matrix[55] = -3.06747e+01;
  matrix[56] = 5.15962e+01;
  matrix[64] = -1.12677e+01;
  matrix[57] = 1.67940e+02;
  matrix[65] = 8.29437e+00;
  matrix[58] = -7.46975e+01;
  matrix[66] = -7.39145e+01;
  matrix[59] = -7.23674e-01;
  matrix[67] = -5.99249e-01;
  matrix[60] = 0.00000e+00;
  matrix[68] = 1.58804e-02;
  matrix[61] = -9.68727e+03;
  matrix[69] = -9.62706e+03;
  matrix[62] = -3.06747e+01;
  matrix[70] = -4.63904e+01;
  matrix[63] = 4.68590e+05;
  matrix[71] = 2.37298e+05;
  NUM_print_matrix(matrix, size);
  if (NUM_lu(matrix, solution, size))
    printf("No solution: Error in the numerical method,\n");
  else
    NUM_print_vec(solution, size);
  printf("\n");
  return 0;
}
```