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

```asm
<betai>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x28,%rsp
  movss  %xmm0,-0x24(%rbp)
  movss  %xmm1,-0x28(%rbp)
  movss  %xmm2,-0x2c(%rbp)
  pxor   %xmm0,%xmm0
  comiss -0x2c(%rbp),%xmm0
  ja     L55
  movss  -0x2c(%rbp),%xmm0
  movss  D86(%rip),%xmm1
  comiss %xmm1,%xmm0
  jbe    L35
L55:
  lea    D11(%rip),%rax
  mov    %rax,%rdi
  call   <nrerror@plt>
L35:
  pxor   %xmm0,%xmm0
  ucomiss -0x2c(%rbp),%xmm0
  jp     L15
  pxor   %xmm0,%xmm0
  ucomiss -0x2c(%rbp),%xmm0
  je     L7
L15:
  movss  D86(%rip),%xmm0
  ucomiss -0x2c(%rbp),%xmm0
  jp     L75
  movss  D86(%rip),%xmm0
  ucomiss -0x2c(%rbp),%xmm0
  jne    L75
L7:
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x14(%rbp)
  jmp    L83
L75:
  movss  -0x24(%rbp),%xmm0
  addss  -0x28(%rbp),%xmm0
  movd   %xmm0,%eax
  movd   %eax,%xmm0
  call   <gammln@plt>
  movd   %xmm0,%ebx
  mov    -0x24(%rbp),%eax
  movd   %eax,%xmm0
  call   <gammln@plt>
  movd   %ebx,%xmm4
  subss  %xmm0,%xmm4
  movss  %xmm4,-0x30(%rbp)
  mov    -0x28(%rbp),%eax
  movd   %eax,%xmm0
  call   <gammln@plt>
  movss  -0x30(%rbp),%xmm4
  subss  %xmm0,%xmm4
  movss  %xmm4,-0x30(%rbp)
  pxor   %xmm5,%xmm5
  cvtss2sd -0x2c(%rbp),%xmm5
  movq   %xmm5,%rax
  movq   %rax,%xmm0
  call   <log@plt>
  movd   %xmm0,%eax
  movd   %eax,%xmm0
  mulss  -0x24(%rbp),%xmm0
  addss  -0x30(%rbp),%xmm0
  movss  %xmm0,-0x30(%rbp)
  pxor   %xmm1,%xmm1
  cvtss2sd -0x2c(%rbp),%xmm1
  movsd  D67(%rip),%xmm0
  movapd %xmm0,%xmm6
  subsd  %xmm1,%xmm6
  movq   %xmm6,%rax
  movq   %rax,%xmm0
  call   <log@plt>
  movd   %xmm0,%eax
  movd   %eax,%xmm7
  mulss  -0x28(%rbp),%xmm7
  movaps %xmm7,%xmm0
  movaps %xmm0,%xmm3
  addss  -0x30(%rbp),%xmm3
  movd   %xmm3,%eax
  movd   %eax,%xmm0
  call   <exp@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x14(%rbp)
L83:
  pxor   %xmm2,%xmm2
  cvtss2sd -0x2c(%rbp),%xmm2
  pxor   %xmm1,%xmm1
  cvtss2sd -0x24(%rbp),%xmm1
  movsd  D67(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movss  -0x24(%rbp),%xmm1
  addss  -0x28(%rbp),%xmm1
  pxor   %xmm3,%xmm3
  cvtss2sd %xmm1,%xmm3
  movsd  D58(%rip),%xmm1
  addsd  %xmm3,%xmm1
  divsd  %xmm1,%xmm0
  comisd %xmm2,%xmm0
  jbe    L30
  movss  -0x2c(%rbp),%xmm1
  movss  -0x28(%rbp),%xmm0
  mov    -0x24(%rbp),%eax
  movaps %xmm1,%xmm2
  movaps %xmm0,%xmm1
  movd   %eax,%xmm0
  call   <betacf@plt>
  movd   %xmm0,%eax
  movd   %eax,%xmm0
  mulss  -0x14(%rbp),%xmm0
  divss  -0x24(%rbp),%xmm0
  jmp    L58
L30:
  movss  D86(%rip),%xmm0
  movaps %xmm0,%xmm1
  subss  -0x2c(%rbp),%xmm1
  movss  -0x24(%rbp),%xmm0
  mov    -0x28(%rbp),%eax
  movaps %xmm1,%xmm2
  movaps %xmm0,%xmm1
  movd   %eax,%xmm0
  call   <betacf@plt>
  movd   %xmm0,%eax
  movd   %eax,%xmm0
  mulss  -0x14(%rbp),%xmm0
  divss  -0x28(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  movsd  D67(%rip),%xmm0
  subsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
L58:
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: parse_data
arguments: tag: D86
data_type: f32
name: parse_data
arguments: tag: D11
data_type: string
name: parse_data
arguments: tag: D67
data_type: f32[2]
name: parse_data
arguments: tag: D58
data_type: f64

tool: D86: 1

tool: D11: Bad x in routine betai

tool: {"D67": [0.0,1.875]}

tool: D58: 2

assistant: ```c
float betai(float a, float b, float x) {
  float betacf(float a, float b, float x);
  float gammln(float xx);
  void nrerror(char error_text[]);
  float bt;
  if (x < 0.0 || x > 1.0)
    nrerror("Bad x in routine betai");
  if (x == 0.0 || x == 1.0)
    bt = 0.0;
  else
    bt = exp(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 bt * betacf(a, b, x) / a;
  else
    return 1.0 - bt * betacf(b, a, 1.0 - x) / b;
}
```