user: Demonstrate the C code that generates the assembly output below:

```asm
<drift_shep>:
  endbr64
  push   %r15
  push   %r14
  movq   %xmm0,%r14
  push   %r13
  push   %r12
  push   %rbp
  mov    %rdi,%rbp
  push   %rbx
  mov    %rsi,%rbx
  sub    $0x38,%rsp
  movsd  %xmm1,0x18(%rsp)
L18:
  movsd  0x18(%rsp),%xmm1
  mov    %rbx,%rsi
  mov    %rbp,%rdi
  movq   %r14,%xmm0
  call   <nkep_drift3@plt>
  cmp    $0xffffffff,%eax
  jne    L90
  movsd  D7(%rip),%xmm5
  mulsd  0x18(%rsp),%xmm5
  movsd  %xmm5,0x18(%rsp)
  movq   %xmm5,%r13
L45:
  movq   %r13,%xmm1
  mov    %rbx,%rsi
  movq   %r14,%xmm0
  mov    %rbp,%rdi
  call   <nkep_drift3@plt>
  cmp    $0xffffffff,%eax
  jne    L18
  movsd  D7(%rip),%xmm6
  movq   %r13,%xmm0
  mulsd  %xmm0,%xmm6
  movq   %xmm6,%r13
  movsd  %xmm6,0x8(%rsp)
L60:
  movsd  0x8(%rsp),%xmm1
  mov    %rbx,%rsi
  mov    %rbp,%rdi
  movq   %r14,%xmm0
  call   <nkep_drift3@plt>
  cmp    $0xffffffff,%eax
  jne    L45
  movsd  D7(%rip),%xmm7
  mulsd  0x8(%rsp),%xmm7
  movsd  %xmm7,0x8(%rsp)
  movsd  %xmm7,0x10(%rsp)
L77:
  movsd  0x10(%rsp),%xmm1
  mov    %rbx,%rsi
  mov    %rbp,%rdi
  movq   %r14,%xmm0
  call   <nkep_drift3@plt>
  cmp    $0xffffffff,%eax
  jne    L60
  movsd  D7(%rip),%xmm5
  mulsd  0x10(%rsp),%xmm5
  movsd  %xmm5,0x10(%rsp)
  movapd %xmm5,%xmm2
L35:
  movapd %xmm2,%xmm1
  mov    %rbx,%rsi
  mov    %rbp,%rdi
  movsd  %xmm2,(%rsp)
  movq   %r14,%xmm0
  call   <nkep_drift3@plt>
  cmp    $0xffffffff,%eax
  jne    L77
  movsd  (%rsp),%xmm2
  mulsd  D7(%rip),%xmm2
  movq   %xmm2,%r15
L96:
  movq   %r15,%xmm1
  mov    %rbx,%rsi
  mov    %rbp,%rdi
  movsd  %xmm2,(%rsp)
  movq   %r14,%xmm0
  call   <nkep_drift3@plt>
  movsd  (%rsp),%xmm2
  cmp    $0xffffffff,%eax
  jne    L35
  movsd  D7(%rip),%xmm4
  movq   %r15,%xmm6
  mulsd  %xmm6,%xmm4
  movq   %xmm4,%r15
  movq   %xmm4,%r12
L93:
  movq   %r12,%xmm1
  mov    %rbx,%rsi
  mov    %rbp,%rdi
  movsd  %xmm2,(%rsp)
  movq   %r14,%xmm0
  call   <nkep_drift3@plt>
  movsd  (%rsp),%xmm2
  cmp    $0xffffffff,%eax
  jne    L96
  movsd  D7(%rip),%xmm7
  movq   %r12,%xmm0
  mulsd  %xmm0,%xmm7
  movq   %xmm7,%r12
  movapd %xmm7,%xmm3
L95:
  movapd %xmm3,%xmm1
  mov    %rbx,%rsi
  mov    %rbp,%rdi
  movsd  %xmm2,0x20(%rsp)
  movq   %r14,%xmm0
  movsd  %xmm3,(%rsp)
  call   <nkep_drift3@plt>
  movsd  0x20(%rsp),%xmm2
  cmp    $0xffffffff,%eax
  jne    L93
  movsd  (%rsp),%xmm3
  mulsd  D7(%rip),%xmm3
  movapd %xmm3,%xmm1
L37:
  mov    %rbx,%rsi
  mov    %rbp,%rdi
  movq   %r14,%xmm0
  movsd  %xmm1,(%rsp)
  movsd  %xmm3,0x28(%rsp)
  movsd  %xmm2,0x20(%rsp)
  call   <nkep_drift3@plt>
  movsd  0x20(%rsp),%xmm2
  movsd  0x28(%rsp),%xmm3
  cmp    $0xffffffff,%eax
  jne    L95
  movsd  (%rsp),%xmm1
  mov    %rbx,%rsi
  mov    %rbp,%rdi
  movq   %r14,%xmm0
  mulsd  D7(%rip),%xmm1
  movsd  %xmm1,(%rsp)
  call   <drift_shep>
  movsd  (%rsp),%xmm1
  movsd  0x20(%rsp),%xmm2
  movsd  0x28(%rsp),%xmm3
  jmp    L37
L90:
  add    $0x38,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D7
datatype: byte[8]

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

assistant: ```c
void drift_shep(double mu, double *r0, double *v0, double dt) {
  if (nkep_drift3(mu, r0, v0, dt) == -1) {
    drift_shep(mu, r0, v0, dt / 2);
    drift_shep(mu, r0, v0, dt / 2);
  }
}
```