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

```asm
<cmxx_ejec>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0xd8,%rsp
  movsd  %xmm0,-0x58(%rbp)
  movsd  %xmm1,-0x60(%rbp)
  movsd  %xmm2,-0x68(%rbp)
  mov    %rdi,-0x70(%rbp)
  mov    %rsi,-0x78(%rbp)
  mov    %rdx,-0x80(%rbp)
  mov    %ecx,-0x84(%rbp)
  mov    %r8d,-0x88(%rbp)
  mov    %r9d,-0x8c(%rbp)
  mov    0x10(%rbp),%rax
  mov    %rax,-0x98(%rbp)
  mov    0x18(%rbp),%rax
  mov    %rax,-0xa0(%rbp)
  mov    0x20(%rbp),%rax
  mov    %rax,-0xa8(%rbp)
  mov    0x28(%rbp),%rax
  mov    %rax,-0xb0(%rbp)
  mov    0x30(%rbp),%rax
  mov    %rax,-0xb8(%rbp)
  mov    0x38(%rbp),%rax
  mov    %rax,-0xc0(%rbp)
  mov    0x40(%rbp),%rax
  mov    %rax,-0xc8(%rbp)
  mov    0x48(%rbp),%rax
  mov    %rax,-0xd0(%rbp)
  mov    0x50(%rbp),%rax
  mov    %rax,-0xd8(%rbp)
  mov    0x58(%rbp),%rax
  mov    %rax,-0xe0(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x18(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x50(%rbp)
  movl   $0x0,-0x4c(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x40(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  cmpl   $0x0,-0x84(%rbp)
  jg     L19
  movl   $0x2,-0x84(%rbp)
L19:
  movl   $0x0,-0x48(%rbp)
  movsd  -0x68(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  mov    -0xa8(%rbp),%r9
  mov    -0xa0(%rbp),%r8
  mov    -0x98(%rbp),%rcx
  mov    -0x8c(%rbp),%edx
  mov    -0x88(%rbp),%esi
  mov    -0x80(%rbp),%rax
  lea    -0x38(%rbp),%rdi
  push   %rdi
  push   -0xb0(%rbp)
  mov    %rax,%rdi
  call   <cmxx_en@plt>
  add    $0x10,%rsp
  movq   %xmm0,%rax
  mov    %rax,-0x20(%rbp)
  mov    -0x84(%rbp),%eax
  mov    %eax,-0x44(%rbp)
  jmp    L44
L30:
  mov    -0x44(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0xa0(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  movsd  (%rax),%xmm1
  mov    -0x44(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0xa0(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  movsd  (%rax),%xmm0
  mulsd  %xmm0,%xmm1
  mov    -0x44(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0xa0(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm2
  mov    -0x44(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0xa0(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm0,%xmm1
  mov    -0x44(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0xa0(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm2
  mov    -0x44(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0xa0(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  -0x30(%rbp),%xmm0
  comisd -0x28(%rbp),%xmm0
  jbe    L115
  movl   $0x1,-0x48(%rbp)
  mov    -0x44(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0xb8(%rbp),%rax
  add    %rdx,%rax
  movl   $0xfffffffd,(%rax)
  mov    -0x44(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x98(%rbp),%rax
  add    %rdx,%rax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x44(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0xb0(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x44(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0xb0(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  add    $0x8,%rax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x44(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0xb0(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  add    $0x10,%rax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,(%rax)
L115:
  mov    -0xc8(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%eax
  cmp    $0x1,%eax
  jne    L43
  lea    -0x40(%rbp),%rdx
  lea    -0x4c(%rbp),%rsi
  lea    -0x50(%rbp),%rcx
  mov    -0x58(%rbp),%rax
  mov    %rcx,%rdi
  movq   %rax,%xmm0
  call   <cmio_jd2y@plt>
  jmp    L80
L43:
  mov    -0xc8(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%eax
  cmp    $0x3,%eax
  jne    L105
  movsd  -0x58(%rbp),%xmm0
  subsd  -0x60(%rbp),%xmm0
  movsd  D8(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x40(%rbp)
  jmp    L80
L105:
  mov    -0xc8(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%eax
  test   %eax,%eax
  jne    L93
  movsd  -0x58(%rbp),%xmm0
  movsd  %xmm0,-0x40(%rbp)
L93:
  mov    -0xc8(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%eax
  cmp    $0x2,%eax
  jne    L80
  movsd  -0x58(%rbp),%xmm0
  subsd  -0x60(%rbp),%xmm0
  movsd  %xmm0,-0x40(%rbp)
L80:
  addl   $0x1,-0x44(%rbp)
L44:
  mov    -0x44(%rbp),%eax
  cmp    -0x88(%rbp),%eax
  jl     L30
  cmpl   $0x0,-0x48(%rbp)
  je     L83
  mov    -0x70(%rbp),%rax
  lea    0x8(%rax),%rdi
  mov    -0x78(%rbp),%rax
  lea    0x8(%rax),%rbx
  mov    -0xa8(%rbp),%r9
  mov    -0xa0(%rbp),%r8
  mov    -0x98(%rbp),%rcx
  mov    -0x8c(%rbp),%edx
  mov    -0x88(%rbp),%esi
  mov    -0x80(%rbp),%rax
  push   %rdi
  push   -0xb0(%rbp)
  mov    %rax,%rdi
  call   <cmxx_en@plt>
  add    $0x10,%rsp
  movq   %xmm0,%rax
  mov    %rax,(%rbx)
  mov    -0x70(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm1
  movsd  -0x38(%rbp),%xmm0
  mov    -0x70(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm2
  subsd  %xmm2,%xmm0
  mov    -0x70(%rbp),%rax
  add    $0x10,%rax
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x78(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm1
  mov    -0x78(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm2
  movsd  -0x20(%rbp),%xmm0
  subsd  %xmm2,%xmm0
  mov    -0x78(%rbp),%rax
  add    $0x10,%rax
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
L83:
  mov    -0x48(%rbp),%eax
  mov    -0x18(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L37
  call   <__stack_chk_fail@plt>
L37:
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: unpack_data
arguments: label: D8
datatype: f64

tool: D8: 365.25

assistant: ```c
int cmxx_ejec(double time, double tstart, double rmax, double en[3], double am[3], double jcen[3], int i0, int nbod, int nbig, double *m, const double **restrict x, const double **restrict v, double **s, int *stat, char **id, int opt[8], FILE *outfile, char mem[200], char lmem[200]) {
  int year = 0, month = 0;
  double r2 = 0.0, rmax2 = 0.0, t1 = 0.0, e = 0.0, l = 0.0;
  if (i0 <= 0) {
    i0 = 2;
  }
  int ejflag = 0;
  rmax2 = rmax * rmax;
  l = cmxx_en(jcen, nbod, nbig, m, x, v, s, &e);
  for (int j = i0; j < nbod; j++) {
    r2 = x[j][0] * x[j][0] + x[j][1] * x[j][1] + x[j][2] * x[j][2];
    if (r2 > rmax2) {
      ejflag = 1;
      stat[j] = -3;
      m[j] = 0.0;
      s[j][0] = 0.0;
      s[j][1] = 0.0;
      s[j][2] = 0.0;
    }
    if (opt[2] == 1) {
      cmio_jd2y(time, &year, &month, &t1);
    } else {
      if (opt[2] == 3) {
        t1 = (time - tstart) / 365.250;
        ;
      } else {
        if (opt[2] == 0) {
          t1 = time;
        }
        if (opt[2] == 2) {
          t1 = time - tstart;
        }
      }
    }
  }
  if (ejflag) {
    am[1] = cmxx_en(jcen, nbod, nbig, m, x, v, s, &en[1]);
    en[2] = en[2] + (e - en[1]);
    am[2] = am[2] + (l - am[1]);
  }
  return ejflag;
}
```