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

```asm
<log1minusbetai>:
  endbr64
  movapd %xmm0,%xmm5
  pxor   %xmm0,%xmm0
  comisd %xmm2,%xmm0
  ja     L45
  movsd  D26(%rip),%xmm7
  comisd %xmm7,%xmm2
  ja     L45
  sub    $0x48,%rsp
  ucomisd %xmm0,%xmm2
  mov    $0x0,%edx
  movapd %xmm1,%xmm6
  movapd %xmm5,%xmm1
  addsd  %xmm6,%xmm1
  setnp  %al
  cmovne %edx,%eax
  test   %al,%al
  jne    L51
  ucomisd %xmm7,%xmm2
  setnp  %dl
  cmove  %edx,%eax
  test   %al,%al
  je     L44
L51:
  movapd %xmm0,%xmm3
L52:
  movapd %xmm5,%xmm4
  addsd  D40(%rip),%xmm1
  addsd  %xmm7,%xmm4
  divsd  %xmm1,%xmm4
  comisd %xmm2,%xmm4
  jbe    L25
  movapd %xmm3,%xmm0
  movsd  %xmm2,0x18(%rsp)
  movsd  %xmm6,0x10(%rsp)
  movsd  %xmm5,0x8(%rsp)
  call   <exp@plt>
  movsd  0x8(%rsp),%xmm5
  movsd  0x10(%rsp),%xmm6
  movsd  0x18(%rsp),%xmm2
  movsd  %xmm0,(%rsp)
  movapd %xmm6,%xmm1
  movapd %xmm5,%xmm0
  call   <betacf@plt>
  mulsd  (%rsp),%xmm0
  movsd  0x8(%rsp),%xmm5
  mov    D26(%rip),%rax
  add    $0x48,%rsp
  movq   %rax,%xmm7
  divsd  %xmm5,%xmm0
  subsd  %xmm0,%xmm7
  movapd %xmm7,%xmm0
  jmp    1090 <log@plt>
  cs nopw 0x0(%rax,%rax,1)
L45:
  ret
  nopl   0x0(%rax)
L25:
  subsd  %xmm2,%xmm7
  movapd %xmm5,%xmm1
  movapd %xmm6,%xmm0
  movsd  %xmm3,0x10(%rsp)
  movsd  %xmm6,0x8(%rsp)
  movapd %xmm7,%xmm2
  call   <lbetacf@plt>
  movsd  0x8(%rsp),%xmm6
  movsd  %xmm0,(%rsp)
  movapd %xmm6,%xmm0
  call   <log@plt>
  movsd  0x10(%rsp),%xmm3
  movapd %xmm0,%xmm1
  movsd  (%rsp),%xmm0
  add    $0x48,%rsp
  addsd  %xmm3,%xmm0
  subsd  %xmm1,%xmm0
  ret
  nopl   0x0(%rax)
L44:
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x30(%rsp)
  movsd  %xmm2,0x38(%rsp)
  movsd  %xmm6,0x10(%rsp)
  movsd  %xmm5,0x8(%rsp)
  call   <gammln@plt>
  movsd  0x8(%rsp),%xmm5
  movsd  %xmm0,(%rsp)
  movapd %xmm5,%xmm0
  movsd  %xmm5,0x28(%rsp)
  call   <gammln@plt>
  movsd  (%rsp),%xmm3
  movsd  0x10(%rsp),%xmm6
  subsd  %xmm0,%xmm3
  movapd %xmm6,%xmm0
  movsd  %xmm6,0x18(%rsp)
  movsd  %xmm3,0x20(%rsp)
  call   <gammln@plt>
  movsd  0x38(%rsp),%xmm2
  movsd  %xmm0,(%rsp)
  movapd %xmm2,%xmm0
  movsd  %xmm2,0x8(%rsp)
  call   <log@plt>
  mov    D26(%rip),%rax
  movsd  0x8(%rsp),%xmm2
  movsd  %xmm0,0x10(%rsp)
  movq   %rax,%xmm3
  subsd  %xmm2,%xmm3
  movapd %xmm3,%xmm0
  call   <log@plt>
  movsd  0x10(%rsp),%xmm4
  movsd  0x28(%rsp),%xmm5
  movsd  0x20(%rsp),%xmm3
  subsd  (%rsp),%xmm3
  movapd %xmm0,%xmm8
  mulsd  %xmm5,%xmm4
  movsd  0x18(%rsp),%xmm6
  mov    D26(%rip),%rax
  movsd  0x8(%rsp),%xmm2
  movsd  0x30(%rsp),%xmm1
  movapd %xmm3,%xmm0
  movapd %xmm8,%xmm3
  movq   %rax,%xmm7
  mulsd  %xmm6,%xmm3
  addsd  %xmm4,%xmm0
  addsd  %xmm0,%xmm3
  jmp    L52
```

tool_calls: name: read_data
arguments: data_tag: D26
type_infered: f64
name: read_data
arguments: data_tag: D40
type_infered: f64

tool: D26: 1

tool: D40: 2

assistant: ```c
double log1minusbetai(double a, double b, double x) {
  double bt;
  if (x < 0.0 || x > 1.0)
    return 0.;
  if (x == 0.0 || x == 1.0)
    bt = 0.0;
  else
    bt = gammln(a + b) - gammln(a) - gammln(b) + a * log(x) + b * log(1.0 - x);
  if (x < (a + 1.0) / (a + b + 2.0))
    return log(1. - exp(bt) * betacf(a, b, x) / a);
  else
    return bt + lbetacf(b, a, 1.0 - x) - log(b);
}
```