user: Translate the below assembly code into C programming language:

```asm
<FP_Atan>:
  endbr64
  push   %r14
  pxor   %xmm1,%xmm1
  push   %rbx
  sub    $0x18,%rsp
  movss  %xmm0,0x8(%rsp)
  call   <FP_Cmp@plt>
  movss  0x8(%rsp),%xmm2
  test   %rax,%rax
  js     L50
  movss  D174(%rip),%xmm1
  movaps %xmm2,%xmm0
  call   <FP_Cmp@plt>
  movss  0x8(%rsp),%xmm2
  test   %rax,%rax
  jg     L25
L24:
  movss  D176(%rip),%xmm1
  movaps %xmm2,%xmm0
  movss  %xmm2,0x8(%rsp)
  call   <FP_Cmp@plt>
  movss  0x8(%rsp),%xmm2
  test   %rax,%rax
  jg     L31
  movss  D40(%rip),%xmm1
  movaps %xmm2,%xmm0
  movss  %xmm2,0x8(%rsp)
  call   <FP_Cmp@plt>
  movss  0x8(%rsp),%xmm2
  test   %rax,%rax
  movaps %xmm2,%xmm0
  js     L1
  movss  %xmm2,0x8(%rsp)
  mov    $0x3,%ebx
  call   <__negsf2@plt>
  movss  0x8(%rsp),%xmm2
  movaps %xmm2,%xmm1
  call   <__mulsf3@plt>
  movss  0x8(%rsp),%xmm2
  movd   %xmm0,%r14d
  movaps %xmm2,%xmm3
  nopl   0x0(%rax)
L4:
  movd   %r14d,%xmm1
  movaps %xmm2,%xmm0
  movss  %xmm3,0xc(%rsp)
  call   <__mulsf3@plt>
  mov    %ebx,%edi
  add    $0x2,%ebx
  movss  %xmm0,0x8(%rsp)
  call   <__floatsisf@plt>
  movss  0x8(%rsp),%xmm2
  movaps %xmm0,%xmm1
  movaps %xmm2,%xmm0
  call   <__divsf3@plt>
  movss  0xc(%rsp),%xmm3
  movaps %xmm0,%xmm1
  movaps %xmm3,%xmm0
  call   <__addsf3@plt>
  cmp    $0xf,%ebx
  movss  0x8(%rsp),%xmm2
  movaps %xmm0,%xmm3
  jne    L4
  add    $0x18,%rsp
  pop    %rbx
  pop    %r14
  ret
  nopl   0x0(%rax,%rax,1)
L31:
  movss  D101(%rip),%xmm1
  movaps %xmm2,%xmm0
  movss  %xmm2,0xc(%rsp)
  call   <__mulsf3@plt>
  movaps %xmm0,%xmm1
  movss  D174(%rip),%xmm0
  call   <__addsf3@plt>
  movss  0xc(%rsp),%xmm2
  movss  D101(%rip),%xmm1
  movss  %xmm0,0x8(%rsp)
  movaps %xmm2,%xmm0
  call   <__subsf3@plt>
  movss  0x8(%rsp),%xmm3
  movaps %xmm3,%xmm1
  call   <__divsf3@plt>
  call   <FP_Atan>
  movaps %xmm0,%xmm1
  movss  D88(%rip),%xmm0
  call   <__addsf3@plt>
  movss  D89(%rip),%xmm1
  add    $0x18,%rsp
  pop    %rbx
  pop    %r14
  jmp    10c0 <__subsf3@plt>
  nopl   0x0(%rax)
L50:
  movss  D117(%rip),%xmm1
  movaps %xmm2,%xmm0
  movss  %xmm2,0x8(%rsp)
  call   <FP_Cmp@plt>
  movss  0x8(%rsp),%xmm2
  test   %rax,%rax
  jle    L24
  movss  D174(%rip),%xmm0
  movaps %xmm2,%xmm1
  call   <__divsf3@plt>
  call   <FP_Atan>
  movaps %xmm0,%xmm1
  movss  D138(%rip),%xmm0
  add    $0x18,%rsp
  pop    %rbx
  pop    %r14
  jmp    10c0 <__subsf3@plt>
  nopl   0x0(%rax)
L25:
  movss  D174(%rip),%xmm0
  movaps %xmm2,%xmm1
  call   <__divsf3@plt>
  call   <FP_Atan>
  movaps %xmm0,%xmm1
  movss  D169(%rip),%xmm0
  add    $0x18,%rsp
  pop    %rbx
  pop    %r14
  jmp    10c0 <__subsf3@plt>
  nopl   0x0(%rax)
L1:
  call   <__negsf2@plt>
  movss  D101(%rip),%xmm1
  movss  %xmm0,0xc(%rsp)
  call   <__mulsf3@plt>
  movaps %xmm0,%xmm1
  movss  D174(%rip),%xmm0
  call   <__addsf3@plt>
  movss  0xc(%rsp),%xmm2
  movss  D101(%rip),%xmm1
  movss  %xmm0,0x8(%rsp)
  movaps %xmm2,%xmm0
  call   <__subsf3@plt>
  movss  0x8(%rsp),%xmm3
  movaps %xmm3,%xmm1
  call   <__divsf3@plt>
  call   <FP_Atan>
  movaps %xmm0,%xmm1
  movss  D88(%rip),%xmm0
  call   <__addsf3@plt>
  movss  D89(%rip),%xmm1
  call   <__subsf3@plt>
  add    $0x18,%rsp
  pop    %rbx
  pop    %r14
  jmp    10e0 <__negsf2@plt>
```

tool_calls: name: disassemble_data
arguments: data_tag: D174
type_infered: f32
name: disassemble_data
arguments: data_tag: D176
type_infered: f32
name: disassemble_data
arguments: data_tag: D40
type_infered: byte[4]
name: disassemble_data
arguments: data_tag: D101
type_infered: f32
name: disassemble_data
arguments: data_tag: D88
type_infered: byte[4]
name: disassemble_data
arguments: data_tag: D89
type_infered: f32
name: disassemble_data
arguments: data_tag: D117
type_infered: byte[4]
name: disassemble_data
arguments: data_tag: D138
type_infered: byte[4]
name: disassemble_data
arguments: data_tag: D169
type_infered: byte[4]

tool: D174: 1

tool: D176: 0.45

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

tool: D101: 0.37419668

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

tool: D89: 0.034633

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

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

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

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;
}
```