user: 下面的汇编指令对应的C源代码是什么:

```asm
<GaussLegendreTet>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  add    $0xffffffffffffff80,%rsp
  mov    %edi,-0x64(%rbp)
  mov    %esi,-0x68(%rbp)
  mov    %edx,-0x6c(%rbp)
  mov    %rcx,-0x78(%rbp)
  mov    %r8,-0x80(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x4c(%rbp)
  movsd  D2(%rip),%xmm0
  movsd  %xmm0,-0x10(%rbp)
  lea    -0x30(%rbp),%rdx
  lea    -0x48(%rbp),%rcx
  mov    -0x64(%rbp),%eax
  mov    %rcx,%rsi
  mov    %eax,%edi
  call   <GaussLegendre1D@plt>
  lea    -0x28(%rbp),%rdx
  lea    -0x40(%rbp),%rcx
  mov    -0x68(%rbp),%eax
  mov    %rcx,%rsi
  mov    %eax,%edi
  call   <GaussLegendre1D@plt>
  lea    -0x20(%rbp),%rdx
  lea    -0x38(%rbp),%rcx
  mov    -0x6c(%rbp),%eax
  mov    %rcx,%rsi
  mov    %eax,%edi
  call   <GaussLegendre1D@plt>
  movl   $0x0,-0x58(%rbp)
  jmp    L6
L66:
  movl   $0x0,-0x54(%rbp)
  jmp    L3
L14:
  movl   $0x0,-0x50(%rbp)
  jmp    L55
L20:
  mov    -0x4c(%rbp),%eax
  cltq
  shl    $0x5,%rax
  mov    %rax,%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  lea    0x10(%rax),%rdi
  mov    -0x4c(%rbp),%eax
  cltq
  shl    $0x5,%rax
  mov    %rax,%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  lea    0x8(%rax),%rsi
  mov    -0x4c(%rbp),%eax
  cltq
  shl    $0x5,%rax
  mov    %rax,%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,%r8
  mov    -0x38(%rbp),%rdx
  mov    -0x50(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mov    -0x40(%rbp),%rdx
  mov    -0x54(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x48(%rbp),%rdx
  mov    -0x58(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  lea    -0x18(%rbp),%rdx
  mov    %rdx,%rcx
  mov    %rdi,%rdx
  mov    %r8,%rdi
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <brickToTet@plt>
  mov    -0x4c(%rbp),%eax
  cltq
  shl    $0x5,%rax
  mov    %rax,%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  movsd  D1(%rip),%xmm0
  subsd  %xmm1,%xmm0
  mov    -0x4c(%rbp),%eax
  cltq
  shl    $0x5,%rax
  mov    %rax,%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  movsd  0x8(%rax),%xmm1
  subsd  %xmm1,%xmm0
  mov    -0x4c(%rbp),%eax
  cltq
  shl    $0x5,%rax
  mov    %rax,%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  movsd  0x10(%rax),%xmm1
  mov    -0x4c(%rbp),%eax
  cltq
  shl    $0x5,%rax
  mov    %rax,%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  subsd  %xmm1,%xmm0
  movsd  %xmm0,0x18(%rax)
  mov    -0x30(%rbp),%rdx
  mov    -0x58(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  movsd  -0x18(%rbp),%xmm0
  mulsd  %xmm0,%xmm1
  mov    -0x28(%rbp),%rdx
  mov    -0x54(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mulsd  %xmm0,%xmm1
  mov    -0x20(%rbp),%rdx
  mov    -0x50(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mulsd  %xmm1,%xmm0
  mov    -0x4c(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x4c(%rbp)
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x80(%rbp),%rax
  add    %rdx,%rax
  mulsd  -0x10(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  addl   $0x1,-0x50(%rbp)
L55:
  mov    -0x50(%rbp),%eax
  cmp    -0x6c(%rbp),%eax
  jl     L20
  addl   $0x1,-0x54(%rbp)
L3:
  mov    -0x54(%rbp),%eax
  cmp    -0x68(%rbp),%eax
  jl     L14
  addl   $0x1,-0x58(%rbp)
L6:
  mov    -0x58(%rbp),%eax
  cmp    -0x64(%rbp),%eax
  jl     L66
  mov    -0x4c(%rbp),%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L4
  call   <__stack_chk_fail@plt>
L4:
  leave
  ret
```

tool_calls: name: parse_data
arguments: label: D2
type_infered: f64
name: parse_data
arguments: label: D1
type_infered: f64

tool: D2: 6

tool: D1: 1

assistant: ```c
int GaussLegendreTet(int n1, int n2, int n3, double GLrstw[][4], double *GLwt) {
  int i, j, k, index = 0;
  double *pt1, *pt2, *pt3, *wt1, *wt2, *wt3, dJ;
  const double six = 6.000000000000000;
  GaussLegendre1D(n1, &pt1, &wt1);
  GaussLegendre1D(n2, &pt2, &wt2);
  GaussLegendre1D(n3, &pt3, &wt3);
  for (i = 0; i < n1; i++) {
    for (j = 0; j < n2; j++) {
      for (k = 0; k < n3; k++) {
        brickToTet(pt1[i], pt2[j], pt3[k], &GLrstw[index][0], &GLrstw[index][1], &GLrstw[index][2], &dJ);
        GLrstw[index][3] = 1.0e0 - GLrstw[index][0] - GLrstw[index][1] - GLrstw[index][2];
        GLwt[index++] = dJ * wt1[i] * wt2[j] * wt3[k] * six;
      }
    }
  }
  return index;
}
```