user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<exactJ>:
  endbr64
  push   %r15
  movapd %xmm0,%xmm5
  mov    %rdi,%r15
  push   %r14
  mov    %rsi,%r14
  push   %r13
  mov    %rdx,%r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0xf8,%rsp
  movsd  D89(%rip),%xmm4
  mov    %rcx,0x88(%rsp)
  lea    0x98(%rsp),%rbx
  lea    0x90(%rsp),%rbp
  movsd  %xmm0,0x60(%rsp)
  movapd D80(%rip),%xmm0
  mulsd  %xmm5,%xmm4
  movsd  %xmm1,0x68(%rsp)
  mov    %fs:0x28,%rax
  mov    %rax,0xe8(%rsp)
  xor    %eax,%eax
  movaps %xmm0,0xa0(%rsp)
  mov    D102(%rip),%rax
  movapd D63(%rip),%xmm0
  movaps %xmm0,0xb0(%rsp)
  movapd D37(%rip),%xmm0
  mov    %rax,0xe0(%rsp)
  movaps %xmm0,0xc0(%rsp)
  movapd D11(%rip),%xmm0
  movaps %xmm0,0xd0(%rsp)
  movapd %xmm4,%xmm0
  divsd  D72(%rip),%xmm0
  call   <cos@plt>
  movsd  D89(%rip),%xmm2
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  mulsd  0x68(%rsp),%xmm2
  movsd  %xmm0,(%rsp)
  divsd  D72(%rip),%xmm2
  movapd %xmm2,%xmm0
  movsd  %xmm2,0x8(%rsp)
  call   <sincos@plt>
  movsd  (%rsp),%xmm1
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  mulsd  D233(%rip),%xmm1
  movsd  0x90(%rsp),%xmm5
  movsd  D209(%rip),%xmm3
  movsd  0x98(%rsp),%xmm4
  movsd  %xmm5,0x40(%rsp)
  mulsd  D21(%rip),%xmm5
  movsd  %xmm4,0x48(%rsp)
  addsd  %xmm3,%xmm1
  mulsd  D59(%rip),%xmm1
  movapd %xmm5,%xmm0
  addsd  %xmm3,%xmm0
  mulsd  %xmm0,%xmm1
  movsd  D258(%rip),%xmm0
  divsd  %xmm1,%xmm0
  movsd  %xmm1,(%r15)
  movsd  0x68(%rsp),%xmm1
  mulsd  D159(%rip),%xmm1
  divsd  D72(%rip),%xmm1
  movsd  %xmm1,(%rsp)
  movsd  %xmm0,(%r14)
  movapd %xmm1,%xmm0
  mov    $0xfffffffe,%r14d
  call   <sincos@plt>
  movq   D113(%rip),%xmm3
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  movsd  0x90(%rsp),%xmm6
  movsd  0x8(%rsp),%xmm2
  movsd  %xmm6,0x20(%rsp)
  xorpd  %xmm3,%xmm2
  movsd  0x98(%rsp),%xmm6
  movapd %xmm2,%xmm0
  movsd  %xmm6,0x28(%rsp)
  call   <sincos@plt>
  movsd  (%rsp),%xmm1
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  movsd  0x90(%rsp),%xmm6
  movq   D113(%rip),%xmm3
  movsd  %xmm6,0x38(%rsp)
  xorpd  %xmm3,%xmm1
  movsd  0x98(%rsp),%xmm6
  movapd %xmm1,%xmm0
  movsd  %xmm6,0x30(%rsp)
  call   <sincos@plt>
  mov    D102(%rip),%rax
  pxor   %xmm10,%xmm10
  movsd  0x90(%rsp),%xmm6
  movapd %xmm10,%xmm3
  movsd  %xmm6,0x50(%rsp)
  movq   %rax,%xmm2
  movsd  0x98(%rsp),%xmm6
  movsd  %xmm6,0x58(%rsp)
L14:
  pxor   %xmm4,%xmm4
  mov    %r14d,%r15d
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  cvtsi2sd %r14d,%xmm4
  movsd  D89(%rip),%xmm0
  movsd  %xmm10,0x18(%rsp)
  imul   %r14d,%r15d
  movsd  %xmm3,0x10(%rsp)
  movsd  %xmm2,0x8(%rsp)
  mulsd  %xmm4,%xmm0
  movsd  %xmm4,(%rsp)
  mulsd  0x60(%rsp),%xmm0
  divsd  D72(%rip),%xmm0
  call   <sincos@plt>
  mov    %r14d,%eax
  lea    0x4(%r15),%edx
  pxor   %xmm0,%xmm0
  movsd  (%rsp),%xmm4
  neg    %eax
  movsd  D97(%rip),%xmm5
  cvtsi2sd %edx,%xmm0
  movsd  0x8(%rsp),%xmm2
  mulsd  D210(%rip),%xmm2
  lea    0x1(%r15),%edx
  movapd %xmm4,%xmm8
  movsd  0x10(%rsp),%xmm3
  movsd  0x90(%rsp),%xmm1
  cmovs  %r14d,%eax
  movsd  0x98(%rsp),%xmm6
  movsd  0x30(%rsp),%xmm7
  cltq
  movsd  0x18(%rsp),%xmm10
  divsd  %xmm0,%xmm5
  movsd  0x20(%rsp),%xmm0
  lea    (%rax,%rax,2),%rax
  mulsd  %xmm1,%xmm7
  lea    0x0(,%rax,8),%r12
  mulsd  %xmm6,%xmm0
  mulsd  %xmm2,%xmm5
  movsd  0x28(%rsp),%xmm2
  mulsd  %xmm1,%xmm2
  addsd  %xmm0,%xmm2
  pxor   %xmm0,%xmm0
  cvtsi2sd %edx,%xmm0
  mulsd  %xmm5,%xmm2
  mulsd  %xmm2,%xmm8
  mulsd  D147(%rip),%xmm2
  addsd  %xmm3,%xmm8
  movsd  D97(%rip),%xmm3
  addsd  %xmm10,%xmm2
  divsd  %xmm0,%xmm3
  movsd  D210(%rip),%xmm0
  mulsd  0xa8(%rsp,%rax,8),%xmm0
  mulsd  %xmm0,%xmm3
  movsd  0x38(%rsp),%xmm0
  mulsd  %xmm6,%xmm0
  addsd  %xmm7,%xmm0
  movapd %xmm4,%xmm7
  mulsd  %xmm3,%xmm0
  mulsd  %xmm0,%xmm7
  subsd  %xmm0,%xmm2
  addsd  %xmm8,%xmm7
  test   %r14d,%r14d
  je     L13
  pxor   %xmm0,%xmm0
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  movsd  %xmm3,0x78(%rsp)
  mulsd  0x68(%rsp),%xmm0
  movsd  %xmm5,0x70(%rsp)
  movsd  %xmm4,0x18(%rsp)
  divsd  D72(%rip),%xmm0
  movsd  %xmm7,0x80(%rsp)
  movsd  %xmm6,0x10(%rsp)
  movsd  %xmm1,0x8(%rsp)
  movsd  %xmm2,(%rsp)
  call   <sincos@plt>
  pxor   %xmm8,%xmm8
  pxor   %xmm5,%xmm5
  movsd  D97(%rip),%xmm0
  cvtsi2sd %r15d,%xmm8
  movsd  0x8(%rsp),%xmm1
  movsd  0x10(%rsp),%xmm6
  movsd  0x90(%rsp),%xmm9
  movsd  0x18(%rsp),%xmm4
  movsd  0x80(%rsp),%xmm7
  movsd  (%rsp),%xmm2
  mulsd  %xmm6,%xmm9
  movsd  0x78(%rsp),%xmm3
  divsd  %xmm8,%xmm0
  movsd  D210(%rip),%xmm8
  mulsd  0xa0(%rsp,%r12,1),%xmm8
  mulsd  %xmm8,%xmm0
  movsd  0x98(%rsp),%xmm8
  mulsd  %xmm1,%xmm8
  addsd  %xmm9,%xmm8
  mulsd  %xmm8,%xmm0
  movapd %xmm4,%xmm8
  mulsd  %xmm0,%xmm8
  mulsd  %xmm5,%xmm0
  movsd  0x70(%rsp),%xmm5
  addsd  %xmm8,%xmm7
  addsd  %xmm0,%xmm2
L13:
  movsd  0x48(%rsp),%xmm10
  movsd  0x40(%rsp),%xmm0
  add    $0x1,%r14d
  mulsd  %xmm1,%xmm10
  mulsd  %xmm6,%xmm0
  mulsd  0x58(%rsp),%xmm1
  mulsd  0x50(%rsp),%xmm6
  addsd  %xmm0,%xmm10
  addsd  %xmm6,%xmm1
  mulsd  %xmm3,%xmm10
  movapd %xmm4,%xmm3
  mulsd  %xmm5,%xmm1
  mulsd  %xmm10,%xmm3
  addsd  %xmm10,%xmm2
  mulsd  %xmm1,%xmm4
  addsd  %xmm1,%xmm1
  addsd  %xmm7,%xmm3
  addsd  %xmm2,%xmm1
  addsd  %xmm4,%xmm3
  movapd %xmm1,%xmm10
  cmp    $0x3,%r14d
  je     L10
  mov    %r14d,%eax
  neg    %eax
  cmovs  %r14d,%eax
  cltq
  lea    (%rax,%rax,2),%rax
  movsd  0xb0(%rsp,%rax,8),%xmm2
  jmp    L14
  nopl   (%rax)
L10:
  mov    0x88(%rsp),%rax
  movsd  %xmm3,0x0(%r13)
  movsd  %xmm1,(%rax)
  mov    0xe8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L27
  add    $0xf8,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L27:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: retrieve_data
arguments: data_tag: D89
type_guessed: f64
name: retrieve_data
arguments: data_tag: D80
type_guessed: f64[2]
name: retrieve_data
arguments: data_tag: D102
type_guessed: f64
name: retrieve_data
arguments: data_tag: D63
type_guessed: f64[2]
name: retrieve_data
arguments: data_tag: D37
type_guessed: f64[2]
name: retrieve_data
arguments: data_tag: D11
type_guessed: f64[2]
name: retrieve_data
arguments: data_tag: D72
type_guessed: f64
name: retrieve_data
arguments: data_tag: D233
type_guessed: f64
name: retrieve_data
arguments: data_tag: D209
type_guessed: f64
name: retrieve_data
arguments: data_tag: D21
type_guessed: f64
name: retrieve_data
arguments: data_tag: D59
type_guessed: f64
name: retrieve_data
arguments: data_tag: D258
type_guessed: byte[8]
name: retrieve_data
arguments: data_tag: D159
type_guessed: byte[8]
name: retrieve_data
arguments: data_tag: D113
type_guessed: f32[2]
name: retrieve_data
arguments: data_tag: D97
type_guessed: byte[8]
name: retrieve_data
arguments: data_tag: D210
type_guessed: byte[8]
name: retrieve_data
arguments: data_tag: D147
type_guessed: f32[2]

tool: D89: 3.14159265358979

tool: {"D80": [1.0854,0.108]}

tool: D102: 0.0001

tool: {"D63": [0.0027,0.402]}

tool: {"D37": [0.04,0.001]}

tool: {"D11": [0.0402,0.004]}

tool: D72: 300000

tool: D233: 0.4

tool: D209: 1

tool: D21: 0.1

tool: D59: 500

tool: {"D258": [0x50,0xff,0x89,0x6b,0xc3,0x46,0x9a,0x43]}

tool: {"D159": [0x11,0x2d,0x44,0x54,0xfb,0x21,0x19,0xc0]}

tool: {"D113": [0.0,-0.0]}

tool: {"D97": [0x36,0x84,0x24,0x74,0x4f,0x50,0xd7,0x40]}

tool: {"D210": [0xd5,0xcd,0x83,0x9b,0x65,0x98,0xf2,0x3d]}

tool: {"D147": [0.0,-2.0]}

assistant: ```c
int exactJ(const double x, const double y, double *H, double *nu, double *u, double *v) {
  const double L = 300.0e3;
  const double H0 = 500.0;
  const double nu0 = 30.0 * 1.0e6 * 31556926.0;
  const double rho_ice = 910.0;
  const double rho_sw = 1028.0;
  const double g = 9.81;
  const double C = rho_ice * g * (1.0 - rho_ice / rho_sw) * H0 / (2.0 * nu0);
  const double my_gamma[3][3] = {{1.0854, 0.108, 0.0027}, {0.402, 0.04, 0.001}, {0.0402, 0.004, 0.0001}};
  const double A = L / (4.0 * 3.14159265358979);
  double uu = 0.0, vv = 0.0, denom, trig, kx, ly, B;
  int k, l;
  *H = H0 * (1.0 + 0.4 * cos(3.14159265358979 * x / L)) * (1.0 + 0.1 * cos(3.14159265358979 * y / L));
  *nu = (nu0 * H0) / *H;
  for (k = -2; k <= 2; k++) {
    for (l = -2; l <= 2; l++) {
      if ((k != 0) || (l != 0)) {
        denom = (double)(k * k + l * l);
        kx = (double)(k)*3.14159265358979 * x / L;
        ly = (double)(l)*3.14159265358979 * y / L;
        trig = cos(kx) * sin(ly) + sin(kx) * cos(ly);
        B = (A / denom) * (C * my_gamma[abs(k)][abs(l)]) * trig;
        uu += B * (double)(k);
        vv += B * (double)(l);
      }
    }
  }
  *u = uu;
  *v = vv;
  return 0;
}
```