user: 请将以下的汇编代码转换成C语言代码：

```asm
<jacobi_decompose>:
  endbr64
  push   %r15
  pxor   %xmm4,%xmm4
  mov    %rsi,%rcx
  mov    %rdx,%r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  mov    %rdi,%rbp
  push   %rbx
  sub    $0xa8,%rsp
  movsd  0x8(%rdi),%xmm1
  movq   D37(%rip),%xmm0
  mov    %fs:0x28,%rax
  mov    %rax,0x98(%rsp)
  xor    %eax,%eax
  movsd  0x10(%rdi),%xmm2
  xor    %eax,%eax
  movq   $0x0,0x8(%rdx)
  andpd  %xmm0,%xmm1
  movq   $0x0,0x10(%rdx)
  lea    0x8c(%rsp),%r8
  maxsd  %xmm4,%xmm1
  andpd  %xmm0,%xmm2
  movq   $0x0,0x18(%rdx)
  movq   $0x0,0x28(%rdx)
  movq   $0x0,0x30(%rdx)
  comisd %xmm1,%xmm2
  movsd  D79(%rip),%xmm1
  movq   $0x0,0x38(%rdx)
  movsd  %xmm1,(%rdx)
  seta   %al
  movsd  %xmm1,0x20(%rdx)
  xor    %esi,%esi
  add    $0x1,%eax
  movsd  %xmm1,0x40(%rdx)
  xor    %edx,%edx
  mov    %eax,0x80(%rsp)
  movabs $0x300000002,%rax
  mov    %rax,0x84(%rsp)
L263:
  mov    %rsi,%rax
  movl   $0x1,(%r8,%rsi,4)
  shl    $0x5,%rax
  movsd  0x0(%rbp,%rax,1),%xmm1
  xor    %eax,%eax
  movsd  %xmm1,(%rcx,%rsi,8)
L332:
  cmp    %eax,%esi
  je     L203
  ucomisd (%rdi,%rax,8),%xmm4
  jp     L346
  jne    L346
L203:
  add    $0x1,%rax
  cmp    $0x3,%rax
  jne    L332
  movl   $0x0,(%r8,%rsi,4)
  sub    $0x1,%edx
L346:
  add    $0x1,%rsi
  add    $0x18,%rdi
  cmp    $0x3,%rsi
  jne    L263
  add    $0x3,%edx
  je     L284
  movsd  D107(%rip),%xmm6
  movq   D127(%rip),%xmm7
  fldz
  mov    %edx,%r14d
  movsd  D39(%rip),%xmm5
  nopl   0x0(%rax)
L357:
  movslq 0x80(%rsp),%r8
  movslq 0x84(%rsp),%rax
  mov    $0x18,%edx
  mov    $0x0,%r9d
  movsd  0x18(%rbp,%rax,8),%xmm10
  movsd  0x0(%rbp,%r8,8),%xmm9
  xor    %eax,%eax
  mov    %r8,%rsi
  andpd  %xmm0,%xmm9
  andpd  %xmm0,%xmm10
  comisd %xmm9,%xmm10
  seta   %r13b
  cmovbe %r9,%rdx
  seta   %al
  movzbl %r13b,%r13d
  movslq 0x80(%rsp,%r13,4),%r12
  lea    0x0(%rbp,%rdx,1),%rbx
  movsd  (%rbx,%r12,8),%xmm1
  mov    %r12,%rdi
  ucomisd %xmm4,%xmm1
  jp     L201
  je     L2
L201:
  xor    %r10d,%r10d
  comisd %xmm9,%xmm10
  lea    (%rcx,%r12,8),%r9
  movsd  (%r9),%xmm11
  movapd %xmm1,%xmm2
  mulsd  %xmm1,%xmm2
  seta   %r10b
  lea    (%rcx,%r10,8),%r10
  movsd  (%r10),%xmm8
  subsd  %xmm8,%xmm11
  mulsd  %xmm6,%xmm11
  movapd %xmm11,%xmm3
  andpd  %xmm0,%xmm3
  movsd  %xmm3,(%rsp)
  movapd %xmm11,%xmm3
  fldl   (%rsp)
  mulsd  %xmm11,%xmm3
  addsd  %xmm2,%xmm3
  movsd  %xmm3,(%rsp)
  fldl   (%rsp)
  fld    %st(2)
  fucomip %st(1),%st
  ja     L212
  fsqrt
L222:
  faddp  %st,%st(1)
  fstpl  (%rsp)
  movsd  (%rsp),%xmm12
  movapd %xmm12,%xmm3
  mulsd  %xmm12,%xmm3
  addsd  %xmm2,%xmm3
  movsd  %xmm3,(%rsp)
  fldl   (%rsp)
  fld    %st(1)
  fucomip %st(1),%st
  ja     L348
  fsqrt
L219:
  comisd %xmm11,%xmm4
  fstpl  (%rsp)
  movsd  (%rsp),%xmm13
  movapd %xmm12,%xmm3
  divsd  %xmm12,%xmm2
  divsd  %xmm13,%xmm3
  divsd  %xmm13,%xmm1
  jbe    L299
  xorpd  %xmm7,%xmm1
  xorpd  %xmm7,%xmm2
L299:
  subsd  %xmm2,%xmm8
  movapd %xmm2,%xmm11
  andpd  %xmm0,%xmm11
  movsd  %xmm8,(%r10)
  mov    0x8c(%rsp,%r13,4),%r10d
  andpd  %xmm0,%xmm8
  mulsd  %xmm5,%xmm8
  test   %r10d,%r10d
  jne    L9
  comisd %xmm8,%xmm11
  jbe    L174
  movl   $0x1,0x8c(%rsp,%r13,4)
  add    $0x1,%r14d
L174:
  addsd  (%r9),%xmm2
  movsd  %xmm2,(%r9)
  mov    0x8c(%rsp,%r12,4),%r9d
  andpd  %xmm0,%xmm2
  mulsd  %xmm5,%xmm2
  test   %r9d,%r9d
  jne    L214
  comisd %xmm2,%xmm11
  jbe    L233
  movl   $0x1,0x8c(%rsp,%r12,4)
  add    $0x1,%r14d
L233:
  comisd %xmm9,%xmm10
  movq   $0x0,(%rbx,%r12,8)
  jbe    L255
  movsd  0x8(%rbp),%xmm2
  movapd %xmm3,%xmm9
  movapd %xmm1,%xmm10
  movsd  0x0(%rbp,%r12,8),%xmm8
  mulsd  %xmm2,%xmm9
  mulsd  %xmm8,%xmm10
  mulsd  %xmm1,%xmm2
  mulsd  %xmm3,%xmm8
  subsd  %xmm10,%xmm9
  addsd  %xmm8,%xmm2
  movsd  %xmm9,0x8(%rbp)
  movsd  %xmm2,0x0(%rbp,%r12,8)
  movsd  0x8(%rbp),%xmm8
  movsd  0x0(%rbp,%r8,8),%xmm9
  andpd  %xmm0,%xmm8
  andpd  %xmm0,%xmm9
  comisd %xmm9,%xmm8
  jbe    L197
  mov    $0x1,%esi
L62:
  andpd  %xmm0,%xmm2
  ucomisd %xmm8,%xmm2
  cmova  %edi,%esi
  mov    %esi,0x80(%rsp)
L255:
  lea    (%r12,%r12,2),%rsi
  add    $0x1,%eax
  shl    $0x3,%rsi
  cmp    %eax,%edi
  jle    L216
  cltq
  lea    (%rax,%rax,2),%r8
  lea    0x0(%rbp,%r8,8),%r9
L12:
  movsd  (%rbx,%rax,8),%xmm2
  movsd  (%r9,%r12,8),%xmm8
  movapd %xmm3,%xmm9
  movapd %xmm1,%xmm10
  movslq 0x80(%rsp,%r13,4),%r10
  mulsd  %xmm2,%xmm9
  mulsd  %xmm8,%xmm10
  mov    %r10,%r8
  mulsd  %xmm3,%xmm8
  mulsd  %xmm1,%xmm2
  subsd  %xmm10,%xmm9
  addsd  %xmm8,%xmm2
  movsd  %xmm9,(%rbx,%rax,8)
  movsd  %xmm2,(%r9,%r12,8)
  movsd  (%rbx,%rax,8),%xmm8
  movapd %xmm8,%xmm9
  movsd  (%rbx,%r10,8),%xmm8
  andpd  %xmm0,%xmm9
  andpd  %xmm0,%xmm8
  comisd %xmm8,%xmm9
  cmova  %eax,%r8d
  mov    %r8d,0x80(%rsp,%r13,4)
  cmp    $0x2,%eax
  jg     L227
  movslq 0x80(%rsp,%rax,4),%r8
  andpd  %xmm0,%xmm2
  movsd  (%r9,%r8,8),%xmm8
  andpd  %xmm0,%xmm8
  comisd %xmm8,%xmm2
  jbe    L227
  lea    0x80(%rsp),%r8
  mov    %edi,(%r8,%rax,4)
L227:
  add    $0x1,%rax
  add    $0x18,%r9
  cmp    %eax,%edi
  jg     L12
L76:
  add    %r15,%rsi
  add    %r15,%rdx
  xor    %eax,%eax
L331:
  movsd  (%rdx,%rax,1),%xmm2
  movsd  (%rsi,%rax,1),%xmm8
  movapd %xmm3,%xmm9
  movapd %xmm1,%xmm10
  mulsd  %xmm2,%xmm9
  mulsd  %xmm8,%xmm10
  mulsd  %xmm1,%xmm2
  mulsd  %xmm3,%xmm8
  subsd  %xmm10,%xmm9
  addsd  %xmm8,%xmm2
  movsd  %xmm9,(%rdx,%rax,1)
  movsd  %xmm2,(%rsi,%rax,1)
  add    $0x8,%rax
  cmp    $0x18,%rax
  jne    L331
  test   %r14d,%r14d
  jne    L357
  fstp   %st(0)
  jmp    L284
L2:
  fstp   %st(0)
L284:
  movsd  0x18(%rbp),%xmm0
  movsd  %xmm0,0x8(%rbp)
  movsd  0x30(%rbp),%xmm0
  movsd  %xmm0,0x10(%rbp)
  movsd  0x38(%rbp),%xmm0
  movsd  %xmm0,0x28(%rbp)
  mov    0x98(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L107
  add    $0xa8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopw   0x0(%rax,%rax,1)
L197:
  movapd %xmm9,%xmm8
  jmp    L62
  nopw   0x0(%rax,%rax,1)
L216:
  lea    0x1(%rdi),%eax
  cmp    $0x2,%edi
  je     L76
  lea    0x0(%rbp,%rsi,1),%r8
  cltq
L253:
  movsd  (%rbx,%rax,8),%xmm2
  movsd  (%r8,%rax,8),%xmm8
  movapd %xmm3,%xmm9
  movapd %xmm1,%xmm10
  movslq 0x80(%rsp,%r13,4),%r9
  mulsd  %xmm2,%xmm9
  mulsd  %xmm8,%xmm10
  mov    %r9,%rdi
  mulsd  %xmm3,%xmm8
  mulsd  %xmm1,%xmm2
  subsd  %xmm10,%xmm9
  addsd  %xmm8,%xmm2
  movsd  %xmm9,(%rbx,%rax,8)
  movsd  %xmm2,(%r8,%rax,8)
  movsd  (%rbx,%rax,8),%xmm8
  andpd  %xmm0,%xmm2
  movapd %xmm8,%xmm9
  movsd  (%rbx,%r9,8),%xmm8
  andpd  %xmm0,%xmm9
  andpd  %xmm0,%xmm8
  ucomisd %xmm8,%xmm9
  cmova  %eax,%edi
  mov    %edi,0x80(%rsp,%r13,4)
  movslq 0x80(%rsp,%r12,4),%rdi
  movsd  (%r8,%rdi,8),%xmm8
  andpd  %xmm0,%xmm8
  comisd %xmm8,%xmm2
  jbe    L4
  mov    %eax,0x80(%rsp,%r12,4)
L4:
  add    $0x1,%rax
  cmp    $0x2,%eax
  jle    L253
  jmp    L76
  nop
L9:
  comisd %xmm11,%xmm8
  jbe    L174
  movl   $0x0,0x8c(%rsp,%r13,4)
  sub    $0x1,%r14d
  jmp    L174
L214:
  comisd %xmm11,%xmm2
  jbe    L233
  movl   $0x0,0x8c(%rsp,%r12,4)
  sub    $0x1,%r14d
  jmp    L233
L212:
  fstp   %st(2)
  fstpt  0x30(%rsp)
  sub    $0x10,%rsp
  mov    %rcx,0x88(%rsp)
  mov    %r8,0x80(%rsp)
  movsd  %xmm11,0x78(%rsp)
  movsd  %xmm1,0x70(%rsp)
  mov    %edi,0x68(%rsp)
  movsd  %xmm9,0x60(%rsp)
  mov    %eax,0x58(%rsp)
  movsd  %xmm2,0x50(%rsp)
  movsd  %xmm8,0x38(%rsp)
  mov    %r10,0x30(%rsp)
  mov    %r9,0x28(%rsp)
  mov    %rdx,0x20(%rsp)
  movsd  %xmm10,0x18(%rsp)
  mov    %esi,0x10(%rsp)
  fstpt  (%rsp)
  call   <sqrtl@plt>
  pop    %rax
  pxor   %xmm4,%xmm4
  pop    %rdx
  mov    D39(%rip),%rax
  fldt   0x30(%rsp)
  fldz
  fxch   %st(2)
  mov    (%rsp),%esi
  mov    0x78(%rsp),%rcx
  movq   %rax,%xmm5
  mov    D107(%rip),%rax
  movq   D127(%rip),%xmm7
  mov    0x70(%rsp),%r8
  movq   %rax,%xmm6
  movsd  0x60(%rsp),%xmm1
  mov    0x58(%rsp),%edi
  movq   D37(%rip),%xmm0
  movsd  0x68(%rsp),%xmm11
  movsd  0x50(%rsp),%xmm9
  mov    0x48(%rsp),%eax
  movsd  0x40(%rsp),%xmm2
  movsd  0x28(%rsp),%xmm8
  mov    0x20(%rsp),%r10
  mov    0x18(%rsp),%r9
  mov    0x10(%rsp),%rdx
  movsd  0x8(%rsp),%xmm10
  jmp    L222
L107:
  call   <__stack_chk_fail@plt>
  nopl   0x0(%rax)
L348:
  fstp   %st(1)
  mov    %rcx,0x78(%rsp)
  sub    $0x10,%rsp
  mov    %r8,0x80(%rsp)
  movsd  %xmm12,0x78(%rsp)
  movsd  %xmm11,0x70(%rsp)
  movsd  %xmm1,0x68(%rsp)
  mov    %edi,0x60(%rsp)
  movsd  %xmm9,0x58(%rsp)
  mov    %eax,0x50(%rsp)
  movsd  %xmm2,0x40(%rsp)
  movsd  %xmm8,0x38(%rsp)
  mov    %r10,0x30(%rsp)
  mov    %r9,0x28(%rsp)
  mov    %rdx,0x20(%rsp)
  movsd  %xmm10,0x18(%rsp)
  mov    %esi,0x10(%rsp)
  fstpt  (%rsp)
  call   <sqrtl@plt>
  pop    %r11
  pop    %rax
  pxor   %xmm4,%xmm4
  mov    D39(%rip),%rax
  mov    0x78(%rsp),%rcx
  fldz
  fxch   %st(1)
  movq   D127(%rip),%xmm7
  mov    0x70(%rsp),%r8
  movq   %rax,%xmm5
  mov    D107(%rip),%rax
  movq   D37(%rip),%xmm0
  movsd  0x68(%rsp),%xmm12
  movsd  0x60(%rsp),%xmm11
  movq   %rax,%xmm6
  movsd  0x58(%rsp),%xmm1
  mov    (%rsp),%esi
  mov    0x50(%rsp),%edi
  movsd  0x48(%rsp),%xmm9
  mov    0x40(%rsp),%eax
  movsd  0x30(%rsp),%xmm2
  movsd  0x28(%rsp),%xmm8
  mov    0x20(%rsp),%r10
  mov    0x18(%rsp),%r9
  mov    0x10(%rsp),%rdx
  movsd  0x8(%rsp),%xmm10
  jmp    L219
```

tool_calls: name: disassemble_data
arguments: data_tag: D37
data_type: qword
name: disassemble_data
arguments: data_tag: D79
data_type: byte[8]
name: disassemble_data
arguments: data_tag: D107
data_type: f64
name: disassemble_data
arguments: data_tag: D127
data_type: byte[8]
name: disassemble_data
arguments: data_tag: D39
data_type: byte[8]

tool: D37: 9223372036854775807

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

tool: D107: 0.5

tool: {"D127": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80]}

tool: {"D39": [0x8d,0xed,0xb5,0xa0,0xf7,0xc6,0xb0,0x3e]}

assistant: ```c
void jacobi_decompose(double cov_matrix[][3], double *eigenvalues, double orth_matrix[][3]) {
  int i, j, k, l;
  int max_col[3];
  int changed[3];
  int n = 3;
  int max_row;
  int state = 0;
  double max, c, s, t, u, a;
  int count = 0;
  for (i = 0; i < n; i++) {
    max = 0;
    max_col[i] = i + 1;
    for (j = i + 1; j < n; j++) {
      if (fabs(cov_matrix[i][j]) > max) {
        max_col[i] = j;
        max = fabs(cov_matrix[i][j]);
      }
    }
  }
  for (i = 0; i < n; i++)
    for (j = 0; j < n; j++)
      orth_matrix[i][j] = (i == j) ? 1 : 0;
  for (i = 0; i < n; i++) {
    eigenvalues[i] = cov_matrix[i][i];
    changed[i] = 1;
    for (j = 0; j < n; j++)
      if (j != i && cov_matrix[i][j])
        break;
    if (j == n) {
      state--;
      changed[i] = 0;
    }
  }
  state += n;
  while (state) {
    count++;
    max = fabs(cov_matrix[0][max_col[0]]);
    max_row = 0;
    for (i = 1; i < n - 1; i++) {
      if (fabs(cov_matrix[i][max_col[i]]) > max) {
        max = fabs(cov_matrix[i][max_col[i]]);
        max_row = i;
      }
    }
    k = max_row;
    l = max_col[k];
    max = cov_matrix[k][l];
    if (max == 0)
      break;
    a = (eigenvalues[l] - eigenvalues[k]) * 0.5;
    t = fabsl(a) + sqrtl(max * max + a * a);
    s = sqrtl(max * max + t * t);
    c = t / s;
    s = max / s;
    t = max * max / t;
    if (a < 0) {
      s = -s;
      t = -t;
    }
    a = eigenvalues[k];
    eigenvalues[k] += -t;
    if (changed[k] && (fabs(-t) < 1e-6 * fabs(eigenvalues[k]))) {
      changed[k] = 0;
      state--;
    } else if (!changed[k] && (fabs(-t) > 1e-6 * fabs(eigenvalues[k]))) {
      changed[k] = 1;
      state++;
    };
    a = eigenvalues[l];
    eigenvalues[l] += t;
    if (changed[l] && (fabs(t) < 1e-6 * fabs(eigenvalues[l]))) {
      changed[l] = 0;
      state--;
    } else if (!changed[l] && (fabs(t) > 1e-6 * fabs(eigenvalues[l]))) {
      changed[l] = 1;
      state++;
    };
    cov_matrix[k][l] = 0;
    for (i = 0; i < k; i++) {
      t = cov_matrix[i][k];
      u = cov_matrix[i][l];
      cov_matrix[i][k] = t * c - s * u;
      cov_matrix[i][l] = s * t + c * u;
      if (1) {
        if (fabs(cov_matrix[i][k]) > fabs(cov_matrix[i][max_col[i]]))
          max_col[i] = k;
        if (i < 3 && fabs(cov_matrix[i][l]) > fabs(cov_matrix[i][max_col[i]]))
          max_col[i] = l;
      };
    }
    for (i = k + 1; i < l; i++) {
      t = cov_matrix[k][i];
      u = cov_matrix[i][l];
      cov_matrix[k][i] = t * c - s * u;
      cov_matrix[i][l] = s * t + c * u;
      if (1) {
        if (fabs(cov_matrix[k][i]) > fabs(cov_matrix[k][max_col[k]]))
          max_col[k] = i;
        if (i < 3 && fabs(cov_matrix[i][l]) > fabs(cov_matrix[i][max_col[i]]))
          max_col[i] = l;
      };
    }
    for (i = l + 1; i < n; i++) {
      t = cov_matrix[k][i];
      u = cov_matrix[l][i];
      cov_matrix[k][i] = t * c - s * u;
      cov_matrix[l][i] = s * t + c * u;
      if (1) {
        if (fabs(cov_matrix[k][i]) > fabs(cov_matrix[k][max_col[k]]))
          max_col[k] = i;
        if (l < 3 && fabs(cov_matrix[l][i]) > fabs(cov_matrix[l][max_col[l]]))
          max_col[l] = i;
      };
    }
    for (i = 0; i < n; i++) {
      t = orth_matrix[k][i];
      u = orth_matrix[l][i];
      orth_matrix[k][i] = t * c - s * u;
      orth_matrix[l][i] = s * t + c * u;
      if (0) {
        if (fabs(orth_matrix[k][i]) > fabs(orth_matrix[k][max_col[k]]))
          max_col[k] = i;
        if (l < 3 && fabs(orth_matrix[l][i]) > fabs(orth_matrix[l][max_col[l]]))
          max_col[l] = i;
      };
    }
  }
  for (k = 0; k < n - 1; k++) {
    for (l = k + 1; l < n; l++) {
      cov_matrix[k][l] = cov_matrix[l][k];
    }
  }
}
```