user: What would the C source look like for the assembly code provided here?

```asm
<fp_gamma>:
  endbr64
  push   %r14
  mov    %edx,%r14d
  push   %r13
  mov    %esi,%r13d
  push   %r12
  mov    %edi,%r12d
  push   %rbp
  xor    %ebp,%ebp
  mov    %ebp,%edi
  sub    $0x18,%rsp
  call   <mpf_init@plt>
  mov    %r13d,%esi
  mov    %ebp,%edi
  call   <mpf_set@plt>
  mov    %ebp,%edi
  call   <mpf_get_d@plt>
  comisd D56(%rip),%xmm0
  movapd %xmm0,%xmm1
  ja     L7
  movsd  D22(%rip),%xmm2
  comisd %xmm0,%xmm2
  ja     L13
  mov    $0x1,%esi
  mov    %r12d,%edi
  call   <mpf_set_ui@plt>
L18:
  xor    %r13d,%r13d
  xor    %ebp,%ebp
  mov    %r13d,%edi
  call   <mpf_init@plt>
  mov    %r14d,%edx
  mov    %ebp,%esi
  mov    %r13d,%edi
  call   <reduced_gamma@plt>
  mov    %r13d,%edx
  mov    %r12d,%esi
  mov    %r12d,%edi
  call   <mpf_mul@plt>
  mov    %ebp,%edi
  call   <mpf_clear@plt>
  add    $0x18,%rsp
  mov    %r13d,%edi
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  jmp    1130 <mpf_clear@plt>
  nopl   0x0(%rax)
L13:
  movsd  D49(%rip),%xmm0
  movsd  %xmm1,0x8(%rsp)
  xor    %r13d,%r13d
  subsd  %xmm1,%xmm0
  call   <floor@plt>
  pxor   %xmm0,%xmm0
  movsd  0x8(%rsp),%xmm1
  mov    %r12d,%edi
  mov    %eax,%edx
  movsd  D22(%rip),%xmm3
  cvtsi2sd %rdx,%xmm0
  addsd  %xmm1,%xmm0
  comisd %xmm0,%xmm3
  seta   %r13b
  xor    %ebp,%ebp
  add    %eax,%r13d
  mov    %ebp,%esi
  mov    %r13d,%edx
  call   <fp_poch_rising@plt>
  mov    %r12d,%edx
  mov    %r12d,%edi
  mov    $0x1,%esi
  call   <mpf_ui_div@plt>
  mov    %r13d,%edx
  mov    %ebp,%esi
  mov    %ebp,%edi
  call   <mpf_add_ui@plt>
  jmp    L18
  nopw   0x0(%rax,%rax,1)
L7:
  movsd  %xmm0,0x8(%rsp)
  subsd  D15(%rip),%xmm0
  call   <floor@plt>
  pxor   %xmm0,%xmm0
  mov    %ebp,%esi
  mov    %ebp,%edi
  mov    %rax,%r13
  mov    %eax,%eax
  movsd  0x8(%rsp),%xmm1
  cvtsi2sd %rax,%xmm0
  xor    %eax,%eax
  subsd  %xmm0,%xmm1
  movsd  D22(%rip),%xmm0
  comisd %xmm1,%xmm0
  seta   %al
  sub    %eax,%r13d
  mov    %r13d,%edx
  call   <mpf_sub_ui@plt>
  mov    %r13d,%edx
  mov    %ebp,%esi
  mov    %r12d,%edi
  call   <fp_poch_rising@plt>
  jmp    L18
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D56
data_type: f64[2]
name: extract_symbolic_data
arguments: data_tag: D22
data_type: f64
name: extract_symbolic_data
arguments: data_tag: D49
data_type: f64
name: extract_symbolic_data
arguments: data_tag: D15
data_type: f64

tool: {"D56": [2.5,1.0]}

tool: D22: 1.5

tool: D49: 2

tool: D15: 1

assistant: ```c
void fp_gamma(mpf_t gam, const mpf_t z, int prec) {
  mpf_t zee;
  mpf_init(zee);
  mpf_set(zee, z);
  double flo = mpf_get_d(zee);
  if (flo > 2.5) {
    unsigned int intpart = (unsigned int)floor(flo - 1.0);
    if (flo - intpart < 1.5)
      intpart--;
    mpf_sub_ui(zee, zee, intpart);
    fp_poch_rising(gam, zee, intpart);
  } else if (flo < 1.5) {
    unsigned int intpart = (unsigned int)floor(2.0 - flo);
    if (flo + intpart < 1.5)
      intpart++;
    fp_poch_rising(gam, zee, intpart);
    mpf_ui_div(gam, 1, gam);
    mpf_add_ui(zee, zee, intpart);
  } else {
    mpf_set_ui(gam, 1);
  }
  mpf_t rgamma;
  mpf_init(rgamma);
  reduced_gamma(rgamma, zee, prec);
  mpf_mul(gam, gam, rgamma);
  mpf_clear(zee);
  mpf_clear(rgamma);
}
```