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

```asm
<FastAsin>:
  endbr64
  pxor   %xmm2,%xmm2
  movss  D117(%rip),%xmm4
  movaps %xmm0,%xmm1
  comiss %xmm0,%xmm2
  jbe    L9
  xorps  D131(%rip),%xmm1
  movss  D129(%rip),%xmm4
L9:
  comiss D138(%rip),%xmm1
  jbe    L49
  movss  D117(%rip),%xmm3
  movaps %xmm2,%xmm0
  comiss %xmm3,%xmm1
  jbe    L44
L24:
  ret
  nopl   (%rax)
L49:
  movss  D81(%rip),%xmm0
  comiss %xmm1,%xmm0
  ja     L32
  movaps %xmm1,%xmm5
  movss  D235(%rip),%xmm0
  comiss %xmm4,%xmm2
  mulss  %xmm1,%xmm5
  mulss  %xmm5,%xmm0
  movaps %xmm5,%xmm3
  subss  D181(%rip),%xmm3
  addss  D38(%rip),%xmm0
  mulss  %xmm5,%xmm3
  mulss  %xmm5,%xmm0
  addss  D172(%rip),%xmm3
  subss  D189(%rip),%xmm0
  mulss  %xmm5,%xmm3
  mulss  %xmm5,%xmm0
  subss  D236(%rip),%xmm3
  divss  %xmm3,%xmm0
  mulss  %xmm1,%xmm0
  addss  %xmm1,%xmm0
  jbe    L24
  xorps  D131(%rip),%xmm0
  ret
L44:
  sub    $0x18,%rsp
  subss  %xmm1,%xmm3
  mulss  D138(%rip),%xmm3
  movss  %xmm4,0xc(%rsp)
  movaps %xmm3,%xmm0
  movss  %xmm3,0x8(%rsp)
  call   <FastSqrt@plt>
  movss  0x8(%rsp),%xmm1
  pxor   %xmm2,%xmm2
  movss  D235(%rip),%xmm3
  mulss  D123(%rip),%xmm0
  movss  0xc(%rsp),%xmm4
  mulss  %xmm1,%xmm3
  movaps %xmm1,%xmm5
  subss  D181(%rip),%xmm5
  addss  D38(%rip),%xmm3
  comiss %xmm4,%xmm2
  mulss  %xmm1,%xmm5
  mulss  %xmm1,%xmm3
  addss  D172(%rip),%xmm5
  subss  D189(%rip),%xmm3
  mulss  %xmm1,%xmm5
  mulss  %xmm1,%xmm3
  subss  D236(%rip),%xmm5
  movaps %xmm3,%xmm1
  divss  %xmm5,%xmm1
  mulss  %xmm0,%xmm1
  addss  %xmm1,%xmm0
  addss  D116(%rip),%xmm0
  jbe    L18
  xorps  D131(%rip),%xmm0
L18:
  add    $0x18,%rsp
  ret
  nopl   0x0(%rax,%rax,1)
L32:
  cmpltss %xmm2,%xmm4
  movaps %xmm1,%xmm0
  xorps  D131(%rip),%xmm0
  andps  %xmm4,%xmm0
  andnps %xmm1,%xmm4
  orps   %xmm4,%xmm0
  ret
```

tool_calls: name: disassemble_data
arguments: tag: D117
data_type: f32
name: disassemble_data
arguments: tag: D131
data_type: byte[16]
name: disassemble_data
arguments: tag: D129
data_type: byte[4]
name: disassemble_data
arguments: tag: D138
data_type: f32
name: disassemble_data
arguments: tag: D81
data_type: byte[4]
name: disassemble_data
arguments: tag: D235
data_type: byte[4]
name: disassemble_data
arguments: tag: D181
data_type: byte[4]
name: disassemble_data
arguments: tag: D38
data_type: byte[4]
name: disassemble_data
arguments: tag: D172
data_type: byte[4]
name: disassemble_data
arguments: tag: D189
data_type: byte[4]
name: disassemble_data
arguments: tag: D236
data_type: byte[4]
name: disassemble_data
arguments: tag: D123
data_type: byte[4]
name: disassemble_data
arguments: tag: D116
data_type: byte[4]

tool: D117: 1

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

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

tool: D138: 0.5

tool: {"D81": [0xf3,0x04,0xb5,0x39]}

tool: {"D235": [0x3f,0x31,0x18,0xbf]}

tool: {"D181": [0x85,0x57,0x25,0x41]}

tool: {"D38": [0xe0,0xf9,0x39,0x40]}

tool: {"D172": [0xf7,0xea,0xc6,0x41]}

tool: {"D189": [0x20,0x1b,0x30,0x40]}

tool: {"D236": [0x58,0x14,0x84,0x41]}

tool: {"D123": [0x00,0x00,0x00,0xc0]}

tool: {"D116": [0xdb,0x0f,0xc9,0x3f]}

assistant: ```c
float FastAsin(float x) {
  float y, g;
  float num, den, result;
  long i;
  float sign = 1.0;
  y = x;
  if (y < (float)0.0) {
    y = -y;
    sign = -sign;
  }
  if (y > (float)0.5) {
    i = 1;
    if (y > (float)1.0) {
      result = 0.0;
      return result;
    }
    g = (1.0f - y) * 0.5f;
    y = -2.0f * FastSqrt(g);
  } else {
    i = 0;
    if (y < (float)(+3.452669830012e-4f)) {
      result = y;
      if (sign < (float)0.0) {
        result = -result;
      }
      return result;
    }
    g = y * y;
  }
  num = (((-5.9450144193246e-1f) * g + (+2.9058762374859f)) * g + (-2.7516555290596f)) * g;
  den = ((g + (-1.0333867072113e+1f)) * g + (+2.4864728969164e+1f)) * g + (-1.6509933202424e+1f);
  result = num / den;
  result = result * y + y;
  if (i == 1) {
    result = result + (float)(1.5707963267948966192313216916398f);
  }
  if (sign < (float)0.0) {
    result = -result;
  }
  return result;
}
```