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

```asm
<topsin_series>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %edi,-0x34(%rbp)
  mov    %esi,-0x38(%rbp)
  mov    %edx,-0x3c(%rbp)
  mov    -0x34(%rbp),%eax
  mov    $0x0,%esi
  mov    %eax,%edi
  call   <mpf_set_ui@plt>
  cmpl   $0x0,-0x38(%rbp)
  je     L49
  mov    -0x24(%rbp),%eax
  mov    %eax,%edi
  call   <mpf_init@plt>
  mov    -0x20(%rbp),%eax
  mov    %eax,%edi
  call   <mpf_init@plt>
  mov    -0x1c(%rbp),%eax
  mov    %eax,%edi
  call   <mpf_init@plt>
  mov    -0x18(%rbp),%eax
  mov    %eax,%edi
  call   <mpf_init@plt>
  mov    -0x14(%rbp),%eax
  mov    %eax,%edi
  call   <mpf_init@plt>
  mov    -0x10(%rbp),%eax
  mov    %eax,%edi
  call   <mpf_init@plt>
  mov    -0xc(%rbp),%eax
  mov    %eax,%edi
  call   <mpz_init@plt>
  mov    -0x3c(%rbp),%edx
  mov    -0x20(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <fp_two_pi@plt>
  mov    -0x20(%rbp),%edx
  mov    -0x20(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <mpf_neg@plt>
  mov    -0x20(%rbp),%edx
  mov    -0x20(%rbp),%ecx
  mov    -0x24(%rbp),%eax
  mov    %ecx,%esi
  mov    %eax,%edi
  call   <mpf_mul@plt>
  mov    -0x24(%rbp),%edx
  mov    -0x24(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <mpf_neg@plt>
  mov    -0x1c(%rbp),%eax
  mov    $0x1,%esi
  mov    %eax,%edi
  call   <mpf_set_ui@plt>
  mov    -0x3c(%rbp),%eax
  test   %rax,%rax
  js     L51
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
  jmp    L62
L51:
  mov    %rax,%rdx
  shr    %rdx
  and    $0x1,%eax
  or     %rax,%rdx
  pxor   %xmm0,%xmm0
  cvtsi2sd %rdx,%xmm0
  addsd  %xmm0,%xmm0
L62:
  movsd  D7(%rip),%xmm1
  mulsd  %xmm1,%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <floor@plt>
  mov    %rax,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  lea    0x20(%rax),%rdx
  mov    -0x1c(%rbp),%ecx
  mov    -0x18(%rbp),%eax
  mov    %ecx,%esi
  mov    %eax,%edi
  call   <mpf_div_2exp@plt>
  movl   $0x0,-0x28(%rbp)
  jmp    L70
L29:
  mov    -0x28(%rbp),%eax
  add    %eax,%eax
  mov    %eax,%edx
  mov    -0x28(%rbp),%eax
  lea    (%rax,%rax,1),%ecx
  mov    -0x38(%rbp),%eax
  add    %ecx,%eax
  mov    %eax,%ecx
  mov    -0xc(%rbp),%eax
  mov    %ecx,%esi
  mov    %eax,%edi
  call   <mpz_bin_uiui@plt>
  mov    -0xc(%rbp),%edx
  mov    -0x14(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <mpf_set_z@plt>
  mov    -0x20(%rbp),%edx
  mov    -0x14(%rbp),%ecx
  mov    -0x10(%rbp),%eax
  mov    %ecx,%esi
  mov    %eax,%edi
  call   <mpf_mul@plt>
  mov    -0x1c(%rbp),%edx
  mov    -0x10(%rbp),%ecx
  mov    -0x14(%rbp),%eax
  mov    %ecx,%esi
  mov    %eax,%edi
  call   <mpf_div@plt>
  mov    -0x14(%rbp),%edx
  mov    -0x34(%rbp),%ecx
  mov    -0x34(%rbp),%eax
  mov    %ecx,%esi
  mov    %eax,%edi
  call   <mpf_add@plt>
  mov    -0x14(%rbp),%edx
  mov    -0x10(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <mpf_abs@plt>
  mov    -0x18(%rbp),%edx
  mov    -0x10(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <mpf_cmp@plt>
  test   %rax,%rax
  js     L76
  mov    -0x24(%rbp),%edx
  mov    -0x20(%rbp),%ecx
  mov    -0x20(%rbp),%eax
  mov    %ecx,%esi
  mov    %eax,%edi
  call   <mpf_mul@plt>
  mov    -0x28(%rbp),%eax
  shl    $0x2,%eax
  lea    0x6(%rax),%edx
  mov    -0x28(%rbp),%eax
  add    $0x1,%eax
  imul   %edx,%eax
  mov    %eax,%edx
  mov    -0x1c(%rbp),%ecx
  mov    -0x1c(%rbp),%eax
  mov    %ecx,%esi
  mov    %eax,%edi
  call   <mpf_mul_ui@plt>
  addl   $0x1,-0x28(%rbp)
L70:
  cmpl   $0x789668b2,-0x28(%rbp)
  jbe    L29
  jmp    L15
L76:
  nop
L15:
  mov    -0x38(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  jne    L43
  mov    -0x34(%rbp),%edx
  mov    -0x34(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <mpf_neg@plt>
L43:
  mov    -0x24(%rbp),%eax
  mov    %eax,%edi
  call   <mpf_clear@plt>
  mov    -0x20(%rbp),%eax
  mov    %eax,%edi
  call   <mpf_clear@plt>
  mov    -0x1c(%rbp),%eax
  mov    %eax,%edi
  call   <mpf_clear@plt>
  mov    -0x18(%rbp),%eax
  mov    %eax,%edi
  call   <mpf_clear@plt>
  mov    -0x14(%rbp),%eax
  mov    %eax,%edi
  call   <mpf_clear@plt>
  mov    -0x10(%rbp),%eax
  mov    %eax,%edi
  call   <mpf_clear@plt>
  mov    -0xc(%rbp),%eax
  mov    %eax,%edi
  call   <mpz_clear@plt>
  jmp    L5
L49:
  nop
L5:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: tag: D7
data_type: f64

tool: D7: 3.321

assistant: ```c
void topsin_series(mpf_t a_k, unsigned int k, unsigned int prec) {
  unsigned int n;
  mpf_t fourpi, numer, fact, low_bound, term, xterm;
  mpz_t bino;
  mpf_set_ui(a_k, 0);
  if (0 == k)
    return;
  mpf_init(fourpi);
  mpf_init(numer);
  mpf_init(fact);
  mpf_init(low_bound);
  mpf_init(term);
  mpf_init(xterm);
  mpz_init(bino);
  fp_two_pi(numer, prec);
  mpf_neg(numer, numer);
  mpf_mul(fourpi, numer, numer);
  mpf_neg(fourpi, fourpi);
  mpf_set_ui(fact, 1);
  long nbits = (long)floor(3.321 * prec);
  mpf_div_2exp(low_bound, fact, nbits + 32);
  for (n = 0; n < 2023123123; n++) {
    mpz_bin_uiui(bino, 2 * n + k, 2 * n);
    mpf_set_z(term, bino);
    mpf_mul(xterm, term, numer);
    mpf_div(term, xterm, fact);
    mpf_add(a_k, a_k, term);
    mpf_abs(xterm, term);
    if (mpf_cmp(xterm, low_bound) < 0)
      break;
    mpf_mul(numer, numer, fourpi);
    mpf_mul_ui(fact, fact, (2 * n + 3) * 2 * (n + 1));
  }
  if (k % 2 == 0)
    mpf_neg(a_k, a_k);
  mpf_clear(fourpi);
  mpf_clear(numer);
  mpf_clear(fact);
  mpf_clear(low_bound);
  mpf_clear(term);
  mpf_clear(xterm);
  mpz_clear(bino);
}
```