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

```asm
<jacobi>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x210,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movsd  D110(%rip),%xmm0
  movsd  %xmm0,-0x140(%rbp)
  movsd  D110(%rip),%xmm0
  movsd  %xmm0,-0x138(%rbp)
  movsd  D23(%rip),%xmm0
  movsd  %xmm0,-0x130(%rbp)
  movsd  D23(%rip),%xmm0
  movsd  %xmm0,-0x128(%rbp)
  movsd  D138(%rip),%xmm0
  movsd  %xmm0,-0x120(%rbp)
  movsd  D67(%rip),%xmm0
  movsd  %xmm0,-0x118(%rbp)
  movsd  D138(%rip),%xmm0
  movsd  %xmm0,-0x110(%rbp)
  movsd  D138(%rip),%xmm0
  movsd  %xmm0,-0x108(%rbp)
  movsd  D51(%rip),%xmm0
  movsd  %xmm0,-0x100(%rbp)
  movsd  D130(%rip),%xmm0
  movsd  %xmm0,-0x200(%rbp)
  movsd  D160(%rip),%xmm0
  movsd  %xmm0,-0x1f8(%rbp)
  movsd  D52(%rip),%xmm0
  movsd  %xmm0,-0x1f0(%rbp)
  movq   $0x0,-0xf0(%rbp)
  movq   $0x0,-0xe8(%rbp)
  movq   $0x0,-0xe0(%rbp)
  movq   $0x0,-0xd8(%rbp)
  movq   $0x0,-0xd0(%rbp)
  movq   $0x0,-0xc8(%rbp)
  movq   $0x0,-0xc0(%rbp)
  movq   $0x0,-0xb8(%rbp)
  movq   $0x0,-0xb0(%rbp)
  movq   $0x0,-0xa0(%rbp)
  movq   $0x0,-0x98(%rbp)
  movq   $0x0,-0x90(%rbp)
  movq   $0x0,-0x88(%rbp)
  movq   $0x0,-0x80(%rbp)
  movq   $0x0,-0x78(%rbp)
  movq   $0x0,-0x70(%rbp)
  movq   $0x0,-0x68(%rbp)
  movq   $0x0,-0x60(%rbp)
  movq   $0x0,-0x50(%rbp)
  movq   $0x0,-0x48(%rbp)
  movq   $0x0,-0x40(%rbp)
  movq   $0x0,-0x38(%rbp)
  movq   $0x0,-0x30(%rbp)
  movq   $0x0,-0x28(%rbp)
  movq   $0x0,-0x20(%rbp)
  movq   $0x0,-0x18(%rbp)
  movq   $0x0,-0x10(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x1e0(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x1d8(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x1d0(%rbp)
  movq   $0x0,-0x1c0(%rbp)
  movq   $0x0,-0x1b8(%rbp)
  movq   $0x0,-0x1b0(%rbp)
  movq   $0x0,-0x1a0(%rbp)
  movq   $0x0,-0x198(%rbp)
  movq   $0x0,-0x190(%rbp)
  movq   $0x0,-0x180(%rbp)
  movq   $0x0,-0x178(%rbp)
  movq   $0x0,-0x170(%rbp)
  movq   $0x0,-0x160(%rbp)
  movq   $0x0,-0x158(%rbp)
  movq   $0x0,-0x150(%rbp)
  movl   $0x0,-0x210(%rbp)
  movl   $0x0,-0x20c(%rbp)
  lea    D24(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  movl   $0x0,-0x208(%rbp)
  jmp    L21
L64:
  movl   $0x0,-0x204(%rbp)
  jmp    L11
L179:
  mov    -0x208(%rbp),%eax
  cmp    -0x204(%rbp),%eax
  jne    L96
  mov    -0x204(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x208(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  add    %rcx,%rax
  movsd  -0x140(%rbp,%rax,8),%xmm0
  mov    -0x204(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x208(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  add    %rcx,%rax
  movsd  %xmm0,-0xf0(%rbp,%rax,8)
  mov    -0x204(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x208(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  add    %rcx,%rax
  movsd  -0x140(%rbp,%rax,8),%xmm1
  movsd  D110(%rip),%xmm0
  divsd  %xmm1,%xmm0
  mov    -0x204(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x208(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  add    %rcx,%rax
  movsd  %xmm0,-0xa0(%rbp,%rax,8)
  jmp    L34
L96:
  mov    -0x204(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x208(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  add    %rcx,%rax
  movsd  -0x140(%rbp,%rax,8),%xmm0
  mov    -0x204(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x208(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  add    %rcx,%rax
  movsd  %xmm0,-0x50(%rbp,%rax,8)
L34:
  addl   $0x1,-0x204(%rbp)
L11:
  cmpl   $0x2,-0x204(%rbp)
  jle    L179
  addl   $0x1,-0x208(%rbp)
L21:
  cmpl   $0x2,-0x208(%rbp)
  jle    L64
  jmp    L18
L229:
  movl   $0x0,-0x208(%rbp)
  jmp    L132
L8:
  mov    -0x208(%rbp),%eax
  cltq
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x1c0(%rbp,%rax,8)
  mov    -0x208(%rbp),%eax
  cltq
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x1a0(%rbp,%rax,8)
  mov    -0x208(%rbp),%eax
  cltq
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x180(%rbp,%rax,8)
  addl   $0x1,-0x208(%rbp)
L132:
  cmpl   $0x2,-0x208(%rbp)
  jle    L8
  movl   $0x0,-0x208(%rbp)
  jmp    L212
L198:
  movl   $0x0,-0x204(%rbp)
  jmp    L234
L74:
  mov    -0x208(%rbp),%eax
  cltq
  movsd  -0x1c0(%rbp,%rax,8),%xmm1
  mov    -0x204(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x208(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  add    %rcx,%rax
  movsd  -0x50(%rbp,%rax,8),%xmm2
  mov    -0x204(%rbp),%eax
  cltq
  movsd  -0x1e0(%rbp,%rax,8),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  mov    -0x208(%rbp),%eax
  cltq
  movsd  %xmm0,-0x1c0(%rbp,%rax,8)
  addl   $0x1,-0x204(%rbp)
L234:
  cmpl   $0x2,-0x204(%rbp)
  jle    L74
  mov    -0x208(%rbp),%eax
  cltq
  movsd  -0x200(%rbp,%rax,8),%xmm0
  mov    -0x208(%rbp),%eax
  cltq
  movsd  -0x1c0(%rbp,%rax,8),%xmm1
  subsd  %xmm1,%xmm0
  mov    -0x208(%rbp),%eax
  cltq
  movsd  %xmm0,-0x1a0(%rbp,%rax,8)
  addl   $0x1,-0x208(%rbp)
L212:
  cmpl   $0x2,-0x208(%rbp)
  jle    L198
  movl   $0x0,-0x208(%rbp)
  jmp    L87
L175:
  movl   $0x0,-0x204(%rbp)
  jmp    L227
L106:
  mov    -0x208(%rbp),%eax
  cltq
  movsd  -0x180(%rbp,%rax,8),%xmm1
  mov    -0x204(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x208(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  add    %rcx,%rax
  movsd  -0xa0(%rbp,%rax,8),%xmm2
  mov    -0x204(%rbp),%eax
  cltq
  movsd  -0x1a0(%rbp,%rax,8),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  mov    -0x208(%rbp),%eax
  cltq
  movsd  %xmm0,-0x180(%rbp,%rax,8)
  addl   $0x1,-0x204(%rbp)
L227:
  cmpl   $0x2,-0x204(%rbp)
  jle    L106
  mov    -0x208(%rbp),%eax
  cltq
  movsd  -0x180(%rbp,%rax,8),%xmm0
  mov    -0x208(%rbp),%eax
  cltq
  movsd  %xmm0,-0x1e0(%rbp,%rax,8)
  addl   $0x1,-0x208(%rbp)
L87:
  cmpl   $0x2,-0x208(%rbp)
  jle    L175
  addl   $0x1,-0x20c(%rbp)
  lea    -0x200(%rbp),%rdx
  lea    -0x1e0(%rbp),%rcx
  lea    -0x140(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <check_convergence@plt>
  mov    %eax,-0x210(%rbp)
L18:
  cmpl   $0x0,-0x210(%rbp)
  jne    L81
  cmpl   $0xf9,-0x20c(%rbp)
  jle    L229
L81:
  movl   $0x0,-0x208(%rbp)
  jmp    L143
L31:
  movl   $0x0,-0x204(%rbp)
  jmp    L226
L118:
  mov    -0x208(%rbp),%eax
  cltq
  movsd  -0x160(%rbp,%rax,8),%xmm1
  mov    -0x204(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x208(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  add    %rcx,%rax
  movsd  -0x140(%rbp,%rax,8),%xmm2
  mov    -0x204(%rbp),%eax
  cltq
  movsd  -0x1e0(%rbp,%rax,8),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  mov    -0x208(%rbp),%eax
  cltq
  movsd  %xmm0,-0x160(%rbp,%rax,8)
  addl   $0x1,-0x204(%rbp)
L226:
  cmpl   $0x2,-0x204(%rbp)
  jle    L118
  addl   $0x1,-0x208(%rbp)
L143:
  cmpl   $0x2,-0x208(%rbp)
  jle    L31
  cmpl   $0xfa,-0x20c(%rbp)
  jne    L190
  lea    D154(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  jmp    L46
L190:
  mov    -0x20c(%rbp),%eax
  mov    %eax,%esi
  lea    D174(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D37(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x1e0(%rbp),%rax
  mov    $0x3,%esi
  mov    %rax,%rdi
  call   <print_vector@plt>
L46:
  lea    D176(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L211
  call   <__stack_chk_fail@plt>
L211:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: tag: D110
type_guessed: f64
name: disassemble_data
arguments: tag: D23
type_guessed: f64
name: disassemble_data
arguments: tag: D138
type_guessed: f64
name: disassemble_data
arguments: tag: D67
type_guessed: f64
name: disassemble_data
arguments: tag: D51
type_guessed: f64
name: disassemble_data
arguments: tag: D130
type_guessed: f64
name: disassemble_data
arguments: tag: D160
type_guessed: f64
name: disassemble_data
arguments: tag: D52
type_guessed: f64
name: disassemble_data
arguments: tag: D24
type_guessed: string
name: disassemble_data
arguments: tag: D154
type_guessed: string
name: disassemble_data
arguments: tag: D174
type_guessed: string
name: disassemble_data
arguments: tag: D37
type_guessed: string
name: disassemble_data
arguments: tag: D176
type_guessed: string

tool: D110: 1

tool: D23: 2

tool: D138: 3

tool: D67: 5

tool: D51: 6

tool: D130: 12

tool: D160: 27

tool: D52: 36

tool: D24: 
----------Question1_Jacobi : ----------


tool: D154: Jacobi Method is failed! (Maximum number of iterations is reached)

tool: D174: Jacobi Method is converged in %d iterations.

tool: D37: Solution,  x: 

tool: D176: 
----------EndOfJacobiMethod----------


assistant: ```c
void jacobi() {
  double A[3][3] = {{1.0, 1.0, 2.0}, {2.0, 3.0, 5.0}, {3.0, 3.0, 6.0}};
  double b[3] = {12.0, 27.0, 36.0};
  double D[3][3] = {0};
  double D_1[3][3] = {0};
  double R[3][3] = {0};
  double x[3] = {0.0, 0.0, 0.0};
  double temp1[3] = {0};
  double temp2[3] = {0};
  double temp3[3] = {0};
  double b_check[3] = {0};
  int check = 0;
  int count = 0;
  int i, j;
  printf("\n----------Question1_Jacobi : ----------\n\n");
  for (i = 0; i < 3; i++) {
    for (j = 0; j < 3; j++) {
      if (i == j) {
        D[i][j] = A[i][j];
        D_1[i][j] = 1.0 / A[i][j];
      } else {
        R[i][j] = A[i][j];
      }
    }
  }
  while ((check == 0) && (count < 250)) {
    for (i = 0; i < 3; i++) {
      temp1[i] = 0.0;
      temp2[i] = 0.0;
      temp3[i] = 0.0;
    }
    for (i = 0; i < 3; i++) {
      for (j = 0; j < 3; j++) {
        temp1[i] = temp1[i] + R[i][j] * x[j];
      }
      temp2[i] = b[i] - temp1[i];
    }
    for (i = 0; i < 3; i++) {
      for (j = 0; j < 3; j++) {
        temp3[i] = temp3[i] + D_1[i][j] * temp2[j];
      }
      x[i] = temp3[i];
    }
    count = count + 1;
    check = check_convergence(A, x, b);
  }
  for (i = 0; i < 3; i++) {
    for (j = 0; j < 3; j++) {
      b_check[i] = b_check[i] + A[i][j] * x[j];
    }
  }
  if (count == 250) {
    printf("Jacobi Method is failed! (Maximum number of iterations is reached)\n");
  } else {
    printf("Jacobi Method is converged in %d iterations.", count);
    printf("Solution,  x: \n");
    print_vector(x, 3);
  }
  printf("\n----------EndOfJacobiMethod----------\n\n");
}
```