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

```asm
<airy>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x60,%rsp
  movss  %xmm0,-0x34(%rbp)
  mov    %rdi,-0x40(%rbp)
  mov    %rsi,-0x48(%rbp)
  mov    %rdx,-0x50(%rbp)
  mov    %rcx,-0x58(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x34(%rbp),%eax
  movd   %eax,%xmm0
  call   <fabs@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x14(%rbp),%eax
  movd   %eax,%xmm0
  call   <sqrt@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x10(%rbp)
  pxor   %xmm1,%xmm1
  cvtss2sd -0x14(%rbp),%xmm1
  movsd  D105(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  pxor   %xmm0,%xmm0
  cvtss2sd -0x10(%rbp),%xmm0
  mulsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0xc(%rbp)
  movss  -0x34(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  comiss %xmm1,%xmm0
  jbe    L25
  lea    -0x18(%rbp),%rcx
  lea    -0x20(%rbp),%rdx
  lea    -0x1c(%rbp),%rsi
  lea    -0x24(%rbp),%rdi
  mov    -0xc(%rbp),%eax
  movss  D167(%rip),%xmm1
  movd   %eax,%xmm0
  call   <bessik@plt>
  pxor   %xmm1,%xmm1
  cvtss2sd -0x10(%rbp),%xmm1
  movsd  D56(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movss  -0x1c(%rbp),%xmm0
  cvtss2sd %xmm0,%xmm0
  mulsd  %xmm1,%xmm0
  movsd  D171(%rip),%xmm1
  divsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  mov    -0x40(%rbp),%rax
  movss  %xmm0,(%rax)
  pxor   %xmm1,%xmm1
  cvtss2sd -0x10(%rbp),%xmm1
  movss  -0x1c(%rbp),%xmm0
  cvtss2sd %xmm0,%xmm0
  movsd  D171(%rip),%xmm3
  movapd %xmm0,%xmm2
  divsd  %xmm3,%xmm2
  movss  -0x24(%rbp),%xmm0
  pxor   %xmm3,%xmm3
  cvtss2sd %xmm0,%xmm3
  movsd  D12(%rip),%xmm0
  mulsd  %xmm3,%xmm0
  addsd  %xmm2,%xmm0
  mulsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  mov    -0x48(%rbp),%rax
  movss  %xmm0,(%rax)
  lea    -0x18(%rbp),%rcx
  lea    -0x20(%rbp),%rdx
  lea    -0x1c(%rbp),%rsi
  lea    -0x24(%rbp),%rdi
  mov    -0xc(%rbp),%eax
  movss  D200(%rip),%xmm1
  movd   %eax,%xmm0
  call   <bessik@plt>
  movss  -0x34(%rbp),%xmm0
  movss  D149(%rip),%xmm1
  xorps  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  movsd  D56(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movss  -0x1c(%rbp),%xmm0
  cvtss2sd %xmm0,%xmm0
  mulsd  %xmm1,%xmm0
  movsd  D171(%rip),%xmm1
  divsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  mov    -0x50(%rbp),%rax
  movss  %xmm0,(%rax)
  pxor   %xmm1,%xmm1
  cvtss2sd -0x34(%rbp),%xmm1
  movss  -0x1c(%rbp),%xmm0
  cvtss2sd %xmm0,%xmm0
  movsd  D171(%rip),%xmm3
  movapd %xmm0,%xmm2
  divsd  %xmm3,%xmm2
  movss  -0x24(%rbp),%xmm0
  pxor   %xmm3,%xmm3
  cvtss2sd %xmm0,%xmm3
  movsd  D12(%rip),%xmm0
  mulsd  %xmm3,%xmm0
  addsd  %xmm2,%xmm0
  mulsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  mov    -0x58(%rbp),%rax
  movss  %xmm0,(%rax)
  jmp    L49
L25:
  pxor   %xmm0,%xmm0
  comiss -0x34(%rbp),%xmm0
  jbe    L17
  lea    -0x18(%rbp),%rcx
  lea    -0x20(%rbp),%rdx
  lea    -0x1c(%rbp),%rsi
  lea    -0x24(%rbp),%rdi
  mov    -0xc(%rbp),%eax
  movss  D167(%rip),%xmm1
  movd   %eax,%xmm0
  call   <bessjy@plt>
  pxor   %xmm1,%xmm1
  cvtss2sd -0x10(%rbp),%xmm1
  movsd  D263(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movss  -0x24(%rbp),%xmm0
  cvtss2sd %xmm0,%xmm0
  movss  -0x1c(%rbp),%xmm2
  pxor   %xmm3,%xmm3
  cvtss2sd %xmm2,%xmm3
  movsd  D56(%rip),%xmm2
  mulsd  %xmm3,%xmm2
  subsd  %xmm2,%xmm0
  mulsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  mov    -0x40(%rbp),%rax
  movss  %xmm0,(%rax)
  pxor   %xmm1,%xmm1
  cvtss2sd -0x10(%rbp),%xmm1
  movsd  D16(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movss  -0x1c(%rbp),%xmm0
  pxor   %xmm2,%xmm2
  cvtss2sd %xmm0,%xmm2
  movss  -0x24(%rbp),%xmm0
  pxor   %xmm3,%xmm3
  cvtss2sd %xmm0,%xmm3
  movsd  D56(%rip),%xmm0
  mulsd  %xmm3,%xmm0
  addsd  %xmm2,%xmm0
  mulsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  mov    -0x48(%rbp),%rax
  movss  %xmm0,(%rax)
  lea    -0x18(%rbp),%rcx
  lea    -0x20(%rbp),%rdx
  lea    -0x1c(%rbp),%rsi
  lea    -0x24(%rbp),%rdi
  mov    -0xc(%rbp),%eax
  movss  D200(%rip),%xmm1
  movd   %eax,%xmm0
  call   <bessjy@plt>
  pxor   %xmm1,%xmm1
  cvtss2sd -0x14(%rbp),%xmm1
  movsd  D263(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movss  -0x1c(%rbp),%xmm0
  pxor   %xmm2,%xmm2
  cvtss2sd %xmm0,%xmm2
  movsd  D56(%rip),%xmm0
  mulsd  %xmm0,%xmm2
  movss  -0x24(%rbp),%xmm0
  cvtss2sd %xmm0,%xmm0
  addsd  %xmm2,%xmm0
  mulsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  mov    -0x50(%rbp),%rax
  movss  %xmm0,(%rax)
  pxor   %xmm1,%xmm1
  cvtss2sd -0x14(%rbp),%xmm1
  movsd  D263(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movss  -0x24(%rbp),%xmm0
  pxor   %xmm2,%xmm2
  cvtss2sd %xmm0,%xmm2
  movsd  D56(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  movss  -0x1c(%rbp),%xmm2
  cvtss2sd %xmm2,%xmm2
  subsd  %xmm2,%xmm0
  mulsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  mov    -0x58(%rbp),%rax
  movss  %xmm0,(%rax)
  jmp    L49
L17:
  mov    -0x40(%rbp),%rax
  movss  D106(%rip),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x40(%rbp),%rax
  movss  (%rax),%xmm0
  cvtss2sd %xmm0,%xmm0
  movsd  D56(%rip),%xmm1
  divsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  mov    -0x48(%rbp),%rax
  movss  %xmm0,(%rax)
  mov    -0x50(%rbp),%rax
  movss  D218(%rip),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x50(%rbp),%rax
  movss  (%rax),%xmm0
  movss  D149(%rip),%xmm1
  xorps  %xmm1,%xmm0
  cvtss2sd %xmm0,%xmm0
  movsd  D56(%rip),%xmm1
  divsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  mov    -0x58(%rbp),%rax
  movss  %xmm0,(%rax)
L49:
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L44
  call   <__stack_chk_fail@plt>
L44:
  leave
  ret
```

tool_calls: name: parse_data
arguments: label: D105
type_infered: byte[8]
name: parse_data
arguments: label: D167
type_infered: byte[4]
name: parse_data
arguments: label: D56
type_infered: f64
name: parse_data
arguments: label: D171
type_infered: f64
name: parse_data
arguments: label: D12
type_infered: byte[8]
name: parse_data
arguments: label: D200
type_infered: byte[4]
name: parse_data
arguments: label: D149
type_infered: byte[4]
name: parse_data
arguments: label: D263
type_infered: f64
name: parse_data
arguments: label: D16
type_infered: f32[2]
name: parse_data
arguments: label: D106
type_infered: f32
name: parse_data
arguments: label: D218
type_infered: byte[4]

tool: {"D105": [0x55,0x55,0x55,0x55,0x55,0x55,0xe5,0x3f]}

tool: {"D167": [0xab,0xaa,0xaa,0x3e]}

tool: D56: 0.57735027

tool: D171: 3.1415927

tool: {"D12": [0x9f,0x93,0xff,0x45,0xa7,0x79,0xf2,0x3f]}

tool: {"D200": [0xab,0xaa,0x2a,0x3f]}

tool: {"D149": [0x00,0x00,0x00,0x80]}

tool: D263: 0.5

tool: {"D16": [0.0,-1.75]}

tool: D106: 0.35502805

tool: {"D218": [0xfa,0x83,0x84,0xbe]}

assistant: ```c
void airy(float x, float *ai, float *bi, float *aip, float *bip) {
  void bessik(float x, float xnu, float *ri, float *rk, float *rip, float *rkp);
  void bessjy(float x, float xnu, float *rj, float *ry, float *rjp, float *ryp);
  float absx, ri, rip, rj, rjp, rk, rkp, rootx, ry, ryp, z;
  absx = fabs(x);
  rootx = sqrt(absx);
  z = (2.0 * (1.0 / 3.0)) * absx * rootx;
  if (x > 0.0) {
    bessik(z, (1.0 / 3.0), &ri, &rk, &rip, &rkp);
    *ai = rootx * 0.57735027 * rk / 3.1415927;
    *bi = rootx * (rk / 3.1415927 + 2.0 * 0.57735027 * ri);
    bessik(z, (2.0 * (1.0 / 3.0)), &ri, &rk, &rip, &rkp);
    *aip = -x * 0.57735027 * rk / 3.1415927;
    *bip = x * (rk / 3.1415927 + 2.0 * 0.57735027 * ri);
  } else if (x < 0.0) {
    bessjy(z, (1.0 / 3.0), &rj, &ry, &rjp, &ryp);
    *ai = 0.5 * rootx * (rj - 0.57735027 * ry);
    *bi = -0.5 * rootx * (ry + 0.57735027 * rj);
    bessjy(z, (2.0 * (1.0 / 3.0)), &rj, &ry, &rjp, &ryp);
    *aip = 0.5 * absx * (0.57735027 * ry + rj);
    *bip = 0.5 * absx * (0.57735027 * rj - ry);
  } else {
    *ai = 0.35502805;
    *bi = (*ai) / 0.57735027;
    *aip = -0.25881940;
    *bip = -(*aip) / 0.57735027;
  }
}
```