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

```asm
<lms_sin>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  movss  %xmm0,-0x14(%rbp)
  movl   $0x1,-0x4(%rbp)
  jmp    L35
L10:
  pxor   %xmm0,%xmm0
  cvtss2sd -0x14(%rbp),%xmm0
  movsd  D38(%rip),%xmm1
  subsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x14(%rbp)
L35:
  pxor   %xmm0,%xmm0
  cvtss2sd -0x14(%rbp),%xmm0
  comisd D38(%rip),%xmm0
  ja     L10
  jmp    L42
L37:
  pxor   %xmm1,%xmm1
  cvtss2sd -0x14(%rbp),%xmm1
  movsd  D38(%rip),%xmm0
  addsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x14(%rbp)
L42:
  pxor   %xmm1,%xmm1
  cvtss2sd -0x14(%rbp),%xmm1
  movsd  D60(%rip),%xmm0
  comisd %xmm1,%xmm0
  ja     L37
  movss  -0x14(%rbp),%xmm0
  movss  %xmm0,-0x8(%rbp)
  movss  -0x8(%rbp),%xmm0
  movss  %xmm0,-0xc(%rbp)
  movss  -0x14(%rbp),%xmm0
  mulss  %xmm0,%xmm0
  movss  D85(%rip),%xmm1
  xorps  %xmm1,%xmm0
  mulss  -0x8(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0x4(%rbp),%xmm0
  movapd %xmm0,%xmm2
  addsd  %xmm0,%xmm2
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0x4(%rbp),%xmm0
  movapd %xmm0,%xmm3
  addsd  %xmm0,%xmm3
  movsd  D29(%rip),%xmm0
  addsd  %xmm3,%xmm0
  mulsd  %xmm2,%xmm0
  divsd  %xmm0,%xmm1
  pxor   %xmm0,%xmm0
  cvtsd2ss %xmm1,%xmm0
  movss  %xmm0,-0x8(%rbp)
  movss  -0xc(%rbp),%xmm0
  addss  -0x8(%rbp),%xmm0
  movss  %xmm0,-0xc(%rbp)
  addl   $0x1,-0x4(%rbp)
  jmp    L44
L55:
  movss  -0x14(%rbp),%xmm0
  mulss  %xmm0,%xmm0
  movss  D85(%rip),%xmm1
  xorps  %xmm1,%xmm0
  mulss  -0x8(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0x4(%rbp),%xmm0
  movapd %xmm0,%xmm2
  addsd  %xmm0,%xmm2
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0x4(%rbp),%xmm0
  movapd %xmm0,%xmm3
  addsd  %xmm0,%xmm3
  movsd  D29(%rip),%xmm0
  addsd  %xmm3,%xmm0
  mulsd  %xmm2,%xmm0
  divsd  %xmm0,%xmm1
  pxor   %xmm0,%xmm0
  cvtsd2ss %xmm1,%xmm0
  movss  %xmm0,-0x8(%rbp)
  movss  -0xc(%rbp),%xmm0
  addss  -0x8(%rbp),%xmm0
  movss  %xmm0,-0xc(%rbp)
  addl   $0x1,-0x4(%rbp)
L44:
  mov    -0x8(%rbp),%eax
  movd   %eax,%xmm0
  call   <lms_fabs@plt>
  movq   %xmm0,%rax
  movq   %rax,%xmm4
  comisd D30(%rip),%xmm4
  jae    L55
  movss  -0xc(%rbp),%xmm0
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_tag: D38
type_guessed: byte[16]
name: parse_data
arguments: data_tag: D60
type_guessed: byte[8]
name: parse_data
arguments: data_tag: D85
type_guessed: byte[4]
name: parse_data
arguments: data_tag: D29
type_guessed: f64
name: parse_data
arguments: data_tag: D30
type_guessed: f64

tool: {"D38": [0x18,0x2d,0x44,0x54,0xfb,0x21,0x19,0x40,0x18,0x2d,0x44,0x54,0xfb,0x21,0x19,0xc0]}

tool: {"D60": [0x18,0x2d,0x44,0x54,0xfb,0x21,0x19,0xc0]}

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

tool: D29: 1

tool: D30: 1e-05

assistant: ```c
float lms_sin(float rad) {
  float app;
  float diff;
  int inc = 1;
  while (rad > 2 * 3.14159265358979323846)
    rad -= 2 * 3.14159265358979323846;
  while (rad < -2 * 3.14159265358979323846)
    rad += 2 * 3.14159265358979323846;
  app = diff = rad;
  diff = (diff * (-(rad * rad))) / ((2.0 * inc) * (2.0 * inc + 1.0));
  app = app + diff;
  inc++;
  while (lms_fabs(diff) >= 0.00001) {
    diff = (diff * (-(rad * rad))) / ((2.0 * inc) * (2.0 * inc + 1.0));
    app = app + diff;
    inc++;
  }
  return (app);
}
```