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

```asm
<lpf_int>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x50,%rsp
  mov    %rdi,-0x18(%rbp)
  movsd  %xmm0,-0x20(%rbp)
  movsd  %xmm1,-0x28(%rbp)
  movsd  %xmm2,-0x30(%rbp)
  movsd  %xmm3,-0x38(%rbp)
  movsd  %xmm4,-0x40(%rbp)
  mov    -0x18(%rbp),%rax
  lea    D30(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fopen@plt>
  mov    %rax,-0x8(%rbp)
  movsd  -0x20(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jbe    L17
  movsd  -0x30(%rbp),%xmm1
  movsd  D19(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  mov    -0x38(%rbp),%rax
  lea    -0x40(%rbp),%rdx
  movapd %xmm0,%xmm1
  mov    %rdx,%rdi
  movq   %rax,%xmm0
  call   <advance_vel@plt>
L17:
  movsd  -0x38(%rbp),%xmm5
  movsd  %xmm5,-0x48(%rbp)
  mov    -0x20(%rbp),%rax
  movq   %rax,%xmm0
  call   <sin@plt>
  movq   %xmm0,%rdx
  mov    -0x20(%rbp),%rax
  movsd  -0x48(%rbp),%xmm2
  movq   %rdx,%xmm1
  movq   %rax,%xmm0
  lea    D42(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  movsd  -0x38(%rbp),%xmm6
  movsd  %xmm6,-0x48(%rbp)
  mov    -0x20(%rbp),%rax
  movq   %rax,%xmm0
  call   <sin@plt>
  movq   %xmm0,%rcx
  mov    -0x20(%rbp),%rdx
  mov    -0x8(%rbp),%rax
  movsd  -0x48(%rbp),%xmm2
  movq   %rcx,%xmm1
  movq   %rdx,%xmm0
  lea    D42(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fprintf@plt>
  movsd  -0x30(%rbp),%xmm1
  movsd  D61(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  mov    -0x38(%rbp),%rax
  lea    -0x40(%rbp),%rdx
  movapd %xmm0,%xmm1
  mov    %rdx,%rdi
  movq   %rax,%xmm0
  call   <advance_vel@plt>
  jmp    L21
L11:
  mov    -0x30(%rbp),%rsi
  lea    -0x20(%rbp),%rdx
  lea    -0x40(%rbp),%rcx
  lea    -0x38(%rbp),%rax
  movq   %rsi,%xmm0
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <leapfrog@plt>
  movsd  -0x38(%rbp),%xmm7
  movsd  %xmm7,-0x48(%rbp)
  mov    -0x20(%rbp),%rax
  movq   %rax,%xmm0
  call   <sin@plt>
  movq   %xmm0,%rdx
  mov    -0x20(%rbp),%rax
  movsd  -0x48(%rbp),%xmm2
  movq   %rdx,%xmm1
  movq   %rax,%xmm0
  lea    D42(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  movsd  -0x38(%rbp),%xmm3
  movsd  %xmm3,-0x48(%rbp)
  mov    -0x20(%rbp),%rax
  movq   %rax,%xmm0
  call   <sin@plt>
  movq   %xmm0,%rcx
  mov    -0x20(%rbp),%rdx
  mov    -0x8(%rbp),%rax
  movsd  -0x48(%rbp),%xmm2
  movq   %rcx,%xmm1
  movq   %rdx,%xmm0
  lea    D42(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fprintf@plt>
L21:
  movsd  -0x20(%rbp),%xmm1
  movsd  -0x28(%rbp),%xmm0
  comisd %xmm1,%xmm0
  ja     L11
  nop
  nop
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D30
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D19
type_guessed: byte[8]
name: extract_symbolic_data
arguments: data_label: D42
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D61
type_guessed: f64

tool: D30: w

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

tool: D42: %f	%e	%e


tool: D61: 0.5

assistant: ```c
void lpf_int(char *fout, double t, double tmax, double step, double x, double v) {
  int i;
  FILE *file;
  file = fopen(fout, "w");
  if (t > 0)
    advance_vel(x, &v, -0.5 * step);
  printf("%f\t%e\t%e\n", t, sin(t), x);
  fprintf(file, "%f\t%e\t%e\n", t, sin(t), x);
  advance_vel(x, &v, 0.5 * step);
  while (t < tmax) {
    leapfrog(&x, &v, &t, step);
    printf("%f\t%e\t%e\n", t, sin(t), x);
    fprintf(file, "%f\t%e\t%e\n", t, sin(t), x);
  }
}
```