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

```asm
<drift_kepu_stumpff>:
  endbr64
  movapd %xmm0,%xmm1
  andpd  D145(%rip),%xmm1
  mov    $0x0,%eax
  comisd D140(%rip),%xmm1
  jb     L5
  movsd  D77(%rip),%xmm4
  movq   D145(%rip),%xmm3
  movsd  D140(%rip),%xmm2
L39:
  add    $0x1,%eax
  mulsd  %xmm4,%xmm0
  movapd %xmm0,%xmm1
  andpd  %xmm3,%xmm1
  comisd %xmm2,%xmm1
  jae    L39
L38:
  movapd %xmm0,%xmm3
  divsd  D123(%rip),%xmm3
  movsd  D61(%rip),%xmm1
  movapd %xmm1,%xmm2
  subsd  %xmm3,%xmm2
  mulsd  %xmm0,%xmm2
  divsd  D173(%rip),%xmm2
  movapd %xmm1,%xmm3
  subsd  %xmm2,%xmm3
  mulsd  %xmm0,%xmm3
  divsd  D143(%rip),%xmm3
  movapd %xmm1,%xmm2
  subsd  %xmm3,%xmm2
  mulsd  %xmm0,%xmm2
  divsd  D224(%rip),%xmm2
  movapd %xmm1,%xmm3
  subsd  %xmm2,%xmm3
  mulsd  %xmm0,%xmm3
  divsd  D229(%rip),%xmm3
  movapd %xmm1,%xmm2
  subsd  %xmm3,%xmm2
  mulsd  %xmm0,%xmm2
  divsd  D6(%rip),%xmm2
  movapd %xmm1,%xmm3
  subsd  %xmm2,%xmm3
  mulsd  D19(%rip),%xmm3
  movsd  %xmm3,(%rdx)
  movapd %xmm0,%xmm2
  divsd  D207(%rip),%xmm2
  movapd %xmm1,%xmm3
  subsd  %xmm2,%xmm3
  mulsd  %xmm0,%xmm3
  divsd  D184(%rip),%xmm3
  movapd %xmm1,%xmm2
  subsd  %xmm3,%xmm2
  mulsd  %xmm0,%xmm2
  divsd  D170(%rip),%xmm2
  movapd %xmm1,%xmm3
  subsd  %xmm2,%xmm3
  mulsd  %xmm0,%xmm3
  divsd  D118(%rip),%xmm3
  movapd %xmm1,%xmm2
  subsd  %xmm3,%xmm2
  mulsd  %xmm0,%xmm2
  divsd  D107(%rip),%xmm2
  movapd %xmm1,%xmm3
  subsd  %xmm2,%xmm3
  mulsd  %xmm0,%xmm3
  divsd  D48(%rip),%xmm3
  movapd %xmm1,%xmm2
  subsd  %xmm3,%xmm2
  divsd  D28(%rip),%xmm2
  movsd  %xmm2,(%rcx)
  mulsd  %xmm0,%xmm2
  movapd %xmm1,%xmm3
  subsd  %xmm2,%xmm3
  movsd  %xmm3,(%rsi)
  mulsd  (%rdx),%xmm0
  subsd  %xmm0,%xmm1
  movsd  %xmm1,(%rdi)
  test   %eax,%eax
  jle    L44
  movsd  D77(%rip),%xmm4
  movsd  D19(%rip),%xmm3
  movsd  D61(%rip),%xmm2
L40:
  movsd  (%rdi),%xmm0
  mulsd  (%rcx),%xmm0
  addsd  (%rdx),%xmm0
  mulsd  %xmm4,%xmm0
  movsd  %xmm0,(%rcx)
  movsd  (%rsi),%xmm0
  mulsd  %xmm0,%xmm0
  mulsd  %xmm3,%xmm0
  movsd  %xmm0,(%rdx)
  movsd  (%rsi),%xmm0
  mulsd  (%rdi),%xmm0
  movsd  %xmm0,(%rsi)
  movsd  (%rdi),%xmm1
  movapd %xmm1,%xmm0
  addsd  %xmm1,%xmm0
  mulsd  %xmm1,%xmm0
  subsd  %xmm2,%xmm0
  movsd  %xmm0,(%rdi)
  sub    $0x1,%eax
  jne    L40
L44:
  ret
L5:
  mov    $0x0,%eax
  jmp    L38
```

tool_calls: name: parse_data
arguments: data_tag: D145
type: qword[2]
name: parse_data
arguments: data_tag: D140
type: f64[2]
name: parse_data
arguments: data_tag: D77
type: byte[8]
name: parse_data
arguments: data_tag: D123
type: f64
name: parse_data
arguments: data_tag: D61
type: f64
name: parse_data
arguments: data_tag: D173
type: f64
name: parse_data
arguments: data_tag: D143
type: f64
name: parse_data
arguments: data_tag: D224
type: f64
name: parse_data
arguments: data_tag: D229
type: f64
name: parse_data
arguments: data_tag: D6
type: f64
name: parse_data
arguments: data_tag: D19
type: byte[8]
name: parse_data
arguments: data_tag: D207
type: f64
name: parse_data
arguments: data_tag: D184
type: f64
name: parse_data
arguments: data_tag: D170
type: f64
name: parse_data
arguments: data_tag: D118
type: f64
name: parse_data
arguments: data_tag: D107
type: f64
name: parse_data
arguments: data_tag: D48
type: f64
name: parse_data
arguments: data_tag: D28
type: f64

tool: {"D145": [0x7fffffffffffffff,0x0000000000000000]}

tool: {"D140": [0.1,0.25]}

tool: {"D77": [0x00,0x00,0x00,0x00,0x00,0x00,0xd0,0x3f]}

tool: D123: 182

tool: D61: 1

tool: D173: 132

tool: D143: 90

tool: D224: 56

tool: D229: 30

tool: D6: 12

tool: {"D19": [0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x3f]}

tool: D207: 210

tool: D184: 156

tool: D170: 110

tool: D118: 72

tool: D107: 42

tool: D48: 20

tool: D28: 6

assistant: ```c
void drift_kepu_stumpff(double x, double *c0, double *c1, double *c2, double *c3) {
  int n = 0;
  double xm = 0.1;
  while (fabs(x) >= xm) {
    n++;
    x = x / 4.;
  }
  *c2 = (1. - x * (1. - x * (1. - x * (1. - x * (1. - x * (1. - x / 182.) / 132.) / 90.) / 56.) / 30.) / 12.) / 2.;
  *c3 = (1. - x * (1. - x * (1. - x * (1. - x * (1. - x * (1. - x / 210.) / 156.) / 110.) / 72.) / 42.) / 20.) / 6.;
  *c1 = 1. - x * (*c3);
  *c0 = 1. - x * (*c2);
  for (int i = n; i >= 1; i--) {
    *c3 = ((*c2) + (*c0) * (*c3)) / 4.;
    *c2 = (*c1) * (*c1) / 2.;
    *c1 = (*c0) * (*c1);
    *c0 = 2. * (*c0) * (*c0) - 1.;
    x = x * 4.;
  }
}
```