user: What is the c source code of the assembly code below?

```asm
<drift_kepu_stumpff>:
  endbr64
  movq   D26(%rip),%xmm3
  movsd  D101(%rip),%xmm2
  movapd %xmm0,%xmm1
  xor    %eax,%eax
  movsd  D99(%rip),%xmm4
  andpd  %xmm3,%xmm1
  comisd %xmm2,%xmm1
  jb     L24
  nopl   0x0(%rax)
L19:
  mulsd  %xmm4,%xmm0
  add    $0x1,%eax
  movapd %xmm0,%xmm1
  andpd  %xmm3,%xmm1
  comisd %xmm2,%xmm1
  jae    L19
L24:
  movsd  D106(%rip),%xmm2
  movapd %xmm0,%xmm3
  divsd  D146(%rip),%xmm3
  movapd %xmm2,%xmm1
  movapd %xmm2,%xmm4
  subsd  %xmm3,%xmm1
  movapd %xmm2,%xmm3
  mulsd  %xmm0,%xmm1
  divsd  D157(%rip),%xmm1
  subsd  %xmm1,%xmm3
  movapd %xmm2,%xmm1
  mulsd  %xmm0,%xmm3
  divsd  D6(%rip),%xmm3
  subsd  %xmm3,%xmm1
  movapd %xmm2,%xmm3
  mulsd  %xmm0,%xmm1
  divsd  D114(%rip),%xmm1
  subsd  %xmm1,%xmm3
  movapd %xmm2,%xmm1
  mulsd  %xmm0,%xmm3
  divsd  D35(%rip),%xmm3
  subsd  %xmm3,%xmm1
  movsd  D2(%rip),%xmm3
  mulsd  %xmm0,%xmm1
  divsd  D139(%rip),%xmm1
  subsd  %xmm1,%xmm4
  movapd %xmm0,%xmm1
  divsd  D67(%rip),%xmm1
  mulsd  %xmm3,%xmm4
  movsd  %xmm4,(%rdx)
  movapd %xmm2,%xmm4
  subsd  %xmm1,%xmm4
  movapd %xmm2,%xmm1
  mulsd  %xmm0,%xmm4
  divsd  D110(%rip),%xmm4
  subsd  %xmm4,%xmm1
  movapd %xmm2,%xmm4
  mulsd  %xmm0,%xmm1
  divsd  D147(%rip),%xmm1
  subsd  %xmm1,%xmm4
  movapd %xmm2,%xmm1
  mulsd  %xmm0,%xmm4
  divsd  D25(%rip),%xmm4
  subsd  %xmm4,%xmm1
  movapd %xmm2,%xmm4
  mulsd  %xmm0,%xmm1
  divsd  D112(%rip),%xmm1
  subsd  %xmm1,%xmm4
  movapd %xmm2,%xmm1
  mulsd  %xmm0,%xmm4
  divsd  D75(%rip),%xmm4
  subsd  %xmm4,%xmm1
  movapd %xmm2,%xmm4
  divsd  D183(%rip),%xmm1
  movsd  %xmm1,(%rcx)
  mulsd  %xmm0,%xmm1
  subsd  %xmm1,%xmm4
  movsd  %xmm4,(%rsi)
  movsd  (%rdx),%xmm1
  movsd  D99(%rip),%xmm4
  mulsd  %xmm0,%xmm1
  movapd %xmm2,%xmm0
  subsd  %xmm1,%xmm0
  movsd  %xmm0,(%rdi)
  test   %eax,%eax
  je     L35
  nopl   0x0(%rax)
L8:
  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    L8
L35:
  ret
```

tool_calls: name: unpack_data
arguments: tag: D26
data_type: qword
name: unpack_data
arguments: tag: D101
data_type: f64
name: unpack_data
arguments: tag: D99
data_type: byte[8]
name: unpack_data
arguments: tag: D106
data_type: f64
name: unpack_data
arguments: tag: D146
data_type: f64
name: unpack_data
arguments: tag: D157
data_type: f64
name: unpack_data
arguments: tag: D6
data_type: f64
name: unpack_data
arguments: tag: D114
data_type: f64
name: unpack_data
arguments: tag: D35
data_type: f64
name: unpack_data
arguments: tag: D2
data_type: byte[8]
name: unpack_data
arguments: tag: D139
data_type: f64
name: unpack_data
arguments: tag: D67
data_type: f64
name: unpack_data
arguments: tag: D110
data_type: f64
name: unpack_data
arguments: tag: D147
data_type: f64
name: unpack_data
arguments: tag: D25
data_type: f64
name: unpack_data
arguments: tag: D112
data_type: f64
name: unpack_data
arguments: tag: D75
data_type: f64
name: unpack_data
arguments: tag: D183
data_type: f64

tool: D26: 9223372036854775807

tool: D101: 0.1

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

tool: D106: 1

tool: D146: 182

tool: D157: 132

tool: D6: 90

tool: D114: 56

tool: D35: 30

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

tool: D139: 12

tool: D67: 210

tool: D110: 156

tool: D147: 110

tool: D25: 72

tool: D112: 42

tool: D75: 20

tool: D183: 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.;
  }
}
```