user: 请从给定的汇编指令推导出C源代码：

```asm
<ATM_Dos>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x58(%rbp)
  mov    %rsi,-0x60(%rbp)
  mov    %rdx,-0x68(%rbp)
  subq   $0x8,-0x58(%rbp)
  mov    -0x58(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm0
  mov    -0x58(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x48(%rbp)
  mov    -0x58(%rbp),%rax
  add    $0x18,%rax
  movsd  (%rax),%xmm0
  mov    -0x58(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x40(%rbp)
  mov    -0x58(%rbp),%rax
  add    $0x18,%rax
  movsd  (%rax),%xmm0
  mov    -0x58(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  mov    -0x58(%rbp),%rax
  add    $0x20,%rax
  movsd  (%rax),%xmm0
  mov    -0x58(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  mov    -0x58(%rbp),%rax
  add    $0x20,%rax
  movsd  (%rax),%xmm0
  mov    -0x58(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  mov    -0x58(%rbp),%rax
  add    $0x20,%rax
  movsd  (%rax),%xmm0
  mov    -0x58(%rbp),%rax
  add    $0x18,%rax
  movsd  (%rax),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  mov    -0x60(%rbp),%rax
  movsd  (%rax),%xmm1
  mov    -0x58(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm0
  comisd %xmm1,%xmm0
  jbe    L13
  mov    -0x68(%rbp),%rax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,(%rax)
  jmp    L103
L13:
  mov    -0x60(%rbp),%rax
  movsd  (%rax),%xmm0
  mov    -0x58(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm1
  comisd %xmm1,%xmm0
  jbe    L95
  mov    -0x60(%rbp),%rax
  movsd  (%rax),%xmm1
  mov    -0x58(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm0
  comisd %xmm1,%xmm0
  jbe    L95
  mov    -0x60(%rbp),%rax
  movsd  (%rax),%xmm0
  mov    -0x58(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x18(%rbp),%xmm1
  movsd  D6(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  mulsd  -0x18(%rbp),%xmm0
  movsd  -0x48(%rbp),%xmm1
  mulsd  -0x40(%rbp),%xmm1
  mulsd  -0x30(%rbp),%xmm1
  divsd  %xmm1,%xmm0
  mov    -0x68(%rbp),%rax
  movsd  %xmm0,(%rax)
  jmp    L103
L95:
  mov    -0x60(%rbp),%rax
  movsd  (%rax),%xmm0
  mov    -0x58(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm1
  comisd %xmm1,%xmm0
  jbe    L127
  mov    -0x60(%rbp),%rax
  movsd  (%rax),%xmm1
  mov    -0x58(%rbp),%rax
  add    $0x18,%rax
  movsd  (%rax),%xmm0
  comisd %xmm1,%xmm0
  jbe    L127
  mov    -0x60(%rbp),%rax
  movsd  (%rax),%xmm0
  mov    -0x58(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x48(%rbp),%xmm1
  movsd  D6(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  -0x10(%rbp),%xmm2
  movsd  D8(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  movsd  -0x40(%rbp),%xmm1
  movapd %xmm1,%xmm2
  addsd  -0x28(%rbp),%xmm2
  movsd  D6(%rip),%xmm1
  mulsd  %xmm2,%xmm1
  mulsd  -0x10(%rbp),%xmm1
  mulsd  -0x10(%rbp),%xmm1
  movsd  -0x38(%rbp),%xmm2
  mulsd  -0x28(%rbp),%xmm2
  divsd  %xmm2,%xmm1
  subsd  %xmm1,%xmm0
  movsd  -0x40(%rbp),%xmm1
  mulsd  -0x30(%rbp),%xmm1
  divsd  %xmm1,%xmm0
  mov    -0x68(%rbp),%rax
  movsd  %xmm0,(%rax)
  jmp    L103
L127:
  mov    -0x60(%rbp),%rax
  movsd  (%rax),%xmm0
  mov    -0x58(%rbp),%rax
  add    $0x18,%rax
  movsd  (%rax),%xmm1
  comisd %xmm1,%xmm0
  jbe    L53
  mov    -0x60(%rbp),%rax
  movsd  (%rax),%xmm1
  mov    -0x58(%rbp),%rax
  add    $0x20,%rax
  movsd  (%rax),%xmm0
  comisd %xmm1,%xmm0
  jbe    L53
  mov    -0x58(%rbp),%rax
  add    $0x20,%rax
  movsd  (%rax),%xmm0
  mov    -0x60(%rbp),%rax
  movsd  (%rax),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x8(%rbp),%xmm1
  movsd  D6(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  mulsd  -0x8(%rbp),%xmm0
  movsd  -0x30(%rbp),%xmm1
  mulsd  -0x28(%rbp),%xmm1
  mulsd  -0x20(%rbp),%xmm1
  divsd  %xmm1,%xmm0
  mov    -0x68(%rbp),%rax
  movsd  %xmm0,(%rax)
  jmp    L103
L53:
  mov    -0x60(%rbp),%rax
  movsd  (%rax),%xmm0
  mov    -0x58(%rbp),%rax
  add    $0x20,%rax
  movsd  (%rax),%xmm1
  comisd %xmm1,%xmm0
  ja     L79
  jmp    L103
L79:
  mov    -0x68(%rbp),%rax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,(%rax)
  jmp    L103
L103:
  nop
  pop    %rbp
  ret
```

tool_calls: name: unpack_data
arguments: data_tag: D6
data_type: f64
name: unpack_data
arguments: data_tag: D8
data_type: f64

tool: D6: 3

tool: D8: 6

assistant: ```c
void ATM_Dos(double *et, double *e, double *dos) {
  double e21, e31, e32, e41, e42, e43;
  double e1, e2, e4;
  --et;
  e21 = et[2] - et[1];
  e31 = et[3] - et[1];
  e32 = et[3] - et[2];
  e41 = et[4] - et[1];
  e42 = et[4] - et[2];
  e43 = et[4] - et[3];
  if (*e < et[1]) {
    *dos = 0.;
  } else if (*e > et[1] && *e < et[2]) {
    e1 = (*e - et[1]);
    *dos = 3.0 * e1 * e1 / (e21 * e31 * e41);
  } else if (*e > et[2] && *e < et[3]) {
    e2 = (*e - et[2]);
    *dos = (e21 * 3. + e2 * 6. - (e31 + e42) * 3. * e2 * e2 / (e32 * e42)) / (e31 * e41);
  } else if (*e > et[3] && *e < et[4]) {
    e4 = (et[4] - *e);
    *dos = 3.0 * e4 * e4 / (e41 * e42 * e43);
  } else if (*e > et[4]) {
    *dos = 0.;
  }
}
```