user: Please show me the C implementation that matches the assembly code listed below:

```asm
<FP_Atan>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x38,%rsp
  movss  %xmm0,-0x34(%rbp)
  movss  D39(%rip),%xmm0
  movss  %xmm0,-0x1c(%rbp)
  movss  D28(%rip),%xmm0
  movss  %xmm0,-0x18(%rbp)
  mov    -0x34(%rbp),%eax
  pxor   %xmm1,%xmm1
  movd   %eax,%xmm0
  call   <FP_Cmp@plt>
  test   %rax,%rax
  js     L56
  mov    -0x34(%rbp),%eax
  movss  D33(%rip),%xmm1
  movd   %eax,%xmm0
  call   <FP_Cmp@plt>
  test   %rax,%rax
  jle    L63
  movss  -0x34(%rbp),%xmm0
  movaps %xmm0,%xmm1
  mov    D33(%rip),%eax
  movd   %eax,%xmm0
  call   <__divsf3@plt>
  movd   %xmm0,%eax
  movd   %eax,%xmm0
  call   <FP_Atan>
  movd   %xmm0,%eax
  movd   %eax,%xmm1
  mov    D114(%rip),%eax
  movd   %eax,%xmm0
  call   <__subsf3@plt>
  movd   %xmm0,%eax
  jmp    L9
L56:
  mov    -0x34(%rbp),%eax
  movss  D12(%rip),%xmm1
  movd   %eax,%xmm0
  call   <FP_Cmp@plt>
  test   %rax,%rax
  jle    L63
  movss  -0x34(%rbp),%xmm0
  movaps %xmm0,%xmm1
  mov    D33(%rip),%eax
  movd   %eax,%xmm0
  call   <__divsf3@plt>
  movd   %xmm0,%eax
  movd   %eax,%xmm0
  call   <FP_Atan>
  movd   %xmm0,%eax
  movd   %eax,%xmm1
  mov    D118(%rip),%eax
  movd   %eax,%xmm0
  call   <__subsf3@plt>
  movd   %xmm0,%eax
  jmp    L9
L63:
  mov    -0x34(%rbp),%eax
  movss  D22(%rip),%xmm1
  movd   %eax,%xmm0
  call   <FP_Cmp@plt>
  test   %rax,%rax
  jle    L86
  movss  -0x18(%rbp),%xmm0
  mov    -0x34(%rbp),%eax
  movaps %xmm0,%xmm1
  movd   %eax,%xmm0
  call   <__mulsf3@plt>
  movd   %xmm0,%eax
  movd   %eax,%xmm1
  mov    D33(%rip),%eax
  movd   %eax,%xmm0
  call   <__addsf3@plt>
  movd   %xmm0,%ebx
  movss  -0x18(%rbp),%xmm0
  mov    -0x34(%rbp),%eax
  movaps %xmm0,%xmm1
  movd   %eax,%xmm0
  call   <__subsf3@plt>
  movd   %xmm0,%eax
  movd   %ebx,%xmm1
  movd   %eax,%xmm0
  call   <__divsf3@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x24(%rbp),%eax
  movd   %eax,%xmm0
  call   <FP_Atan>
  movd   %xmm0,%edx
  mov    -0x1c(%rbp),%eax
  movd   %edx,%xmm1
  movd   %eax,%xmm0
  call   <__addsf3@plt>
  movd   %xmm0,%eax
  movss  D137(%rip),%xmm1
  movd   %eax,%xmm0
  call   <__subsf3@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x24(%rbp),%eax
  jmp    L9
L86:
  mov    -0x34(%rbp),%eax
  movss  D45(%rip),%xmm1
  movd   %eax,%xmm0
  call   <FP_Cmp@plt>
  test   %rax,%rax
  jns    L65
  mov    -0x34(%rbp),%eax
  movd   %eax,%xmm0
  call   <__negsf2@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x34(%rbp)
  movss  -0x18(%rbp),%xmm0
  mov    -0x34(%rbp),%eax
  movaps %xmm0,%xmm1
  movd   %eax,%xmm0
  call   <__mulsf3@plt>
  movd   %xmm0,%eax
  movd   %eax,%xmm1
  mov    D33(%rip),%eax
  movd   %eax,%xmm0
  call   <__addsf3@plt>
  movd   %xmm0,%ebx
  movss  -0x18(%rbp),%xmm0
  mov    -0x34(%rbp),%eax
  movaps %xmm0,%xmm1
  movd   %eax,%xmm0
  call   <__subsf3@plt>
  movd   %xmm0,%eax
  movd   %ebx,%xmm1
  movd   %eax,%xmm0
  call   <__divsf3@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x24(%rbp),%eax
  movd   %eax,%xmm0
  call   <FP_Atan>
  movd   %xmm0,%edx
  mov    -0x1c(%rbp),%eax
  movd   %edx,%xmm1
  movd   %eax,%xmm0
  call   <__addsf3@plt>
  movd   %xmm0,%eax
  movss  D137(%rip),%xmm1
  movd   %eax,%xmm0
  call   <__subsf3@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x24(%rbp),%eax
  movd   %eax,%xmm0
  call   <__negsf2@plt>
  movd   %xmm0,%eax
  jmp    L9
L65:
  movss  -0x34(%rbp),%xmm0
  movss  %xmm0,-0x24(%rbp)
  mov    -0x34(%rbp),%eax
  movd   %eax,%xmm0
  call   <__negsf2@plt>
  movd   %xmm0,%eax
  movss  -0x34(%rbp),%xmm0
  movaps %xmm0,%xmm1
  movd   %eax,%xmm0
  call   <__mulsf3@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x14(%rbp)
  movss  -0x34(%rbp),%xmm0
  movss  %xmm0,-0x20(%rbp)
  movl   $0x3,-0x28(%rbp)
  jmp    L57
L77:
  movss  -0x14(%rbp),%xmm0
  mov    -0x20(%rbp),%eax
  movaps %xmm0,%xmm1
  movd   %eax,%xmm0
  call   <__mulsf3@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x20(%rbp)
  mov    -0x28(%rbp),%eax
  mov    %eax,%edi
  call   <__floatsisf@plt>
  movd   %xmm0,%edx
  mov    -0x20(%rbp),%eax
  movd   %edx,%xmm1
  movd   %eax,%xmm0
  call   <__divsf3@plt>
  movd   %xmm0,%edx
  mov    -0x24(%rbp),%eax
  movd   %edx,%xmm1
  movd   %eax,%xmm0
  call   <__addsf3@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x24(%rbp)
  addl   $0x2,-0x28(%rbp)
L57:
  cmpl   $0xd,-0x28(%rbp)
  jle    L77
  mov    -0x24(%rbp),%eax
L9:
  movd   %eax,%xmm0
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: label: D39
type_infered: byte[4]
name: disassemble_data
arguments: label: D28
type_infered: f32
name: disassemble_data
arguments: label: D33
type_infered: f32
name: disassemble_data
arguments: label: D114
type_infered: byte[4]
name: disassemble_data
arguments: label: D12
type_infered: byte[4]
name: disassemble_data
arguments: label: D118
type_infered: byte[4]
name: disassemble_data
arguments: label: D22
type_infered: f32
name: disassemble_data
arguments: label: D137
type_infered: f32
name: disassemble_data
arguments: label: D45
type_infered: byte[4]

tool: {"D39": [0xda,0x0f,0xc9,0x3e]}

tool: D28: 0.37419668

tool: D33: 1

tool: {"D114": [0xda,0x0f,0xc9,0x3f]}

tool: {"D12": [0x00,0x00,0x80,0xbf]}

tool: {"D118": [0xda,0x0f,0xc9,0xbf]}

tool: D22: 0.45

tool: D137: 0.034633

tool: {"D45": [0x66,0x66,0xe6,0xbe]}

assistant: ```c
float FP_Atan(float x) {
  const float b = (float)(((float)3.1415926) / 8.0);
  const float atan_b = (float)0.37419668;
  int n;
  float answer, x2, top;
  if (FP_Cmp(x, (float)0.0) >= 0) {
    if (FP_Cmp(x, (float)1.0) > 0)
      return __subsf3(((float)(((float)3.1415926) / 2.0)), FP_Atan(__divsf3((float)1.0, x)));
  } else {
    if (FP_Cmp(x, (float)-1.0) > 0)
      return __subsf3(-((float)(((float)3.1415926) / 2.0)), FP_Atan(__divsf3((float)1.0, x)));
  }
  if (FP_Cmp(x, (float)0.45) > 0) {
    answer = __divsf3(__subsf3(x, atan_b), __addsf3(1.0, __mulsf3(x, atan_b)));
    answer = __subsf3(__addsf3(b, FP_Atan(answer)), (float)0.034633);
    return answer;
  }
  if (FP_Cmp(x, (float)-0.45) < 0) {
    x = __negsf2(x);
    answer = __divsf3(__subsf3(x, atan_b), __addsf3(1.0, __mulsf3(x, atan_b)));
    answer = __subsf3(__addsf3(b, FP_Atan(answer)), (float)0.034633);
    return __negsf2(answer);
  }
  answer = x;
  x2 = __mulsf3(__negsf2(x), x);
  top = x;
  for (n = 3; n < 14; n += 2) {
    top = __mulsf3(top, x2);
    answer = __addsf3(answer, __divsf3(top, __floatsisf(n)));
  }
  return answer;
}
```