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

```asm
<sncndn>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xd0,%rsp
  movss  %xmm0,-0xb4(%rbp)
  movss  %xmm1,-0xb8(%rbp)
  mov    %rdi,-0xc0(%rbp)
  mov    %rsi,-0xc8(%rbp)
  mov    %rdx,-0xd0(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movss  -0xb8(%rbp),%xmm0
  movss  %xmm0,-0x9c(%rbp)
  movss  -0xb4(%rbp),%xmm0
  movss  %xmm0,-0x98(%rbp)
  pxor   %xmm0,%xmm0
  ucomiss -0x9c(%rbp),%xmm0
  jp     L109
  pxor   %xmm0,%xmm0
  ucomiss -0x9c(%rbp),%xmm0
  je     L16
L109:
  pxor   %xmm0,%xmm0
  comiss -0x9c(%rbp),%xmm0
  seta   %al
  movzbl %al,%eax
  mov    %eax,-0x88(%rbp)
  cmpl   $0x0,-0x88(%rbp)
  je     L31
  movss  D78(%rip),%xmm0
  subss  -0x9c(%rbp),%xmm0
  movss  %xmm0,-0xa0(%rbp)
  pxor   %xmm0,%xmm0
  cvtss2sd -0x9c(%rbp),%xmm0
  pxor   %xmm2,%xmm2
  cvtss2sd -0xa0(%rbp),%xmm2
  movsd  D83(%rip),%xmm1
  divsd  %xmm2,%xmm1
  divsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x9c(%rbp)
  mov    -0xa0(%rbp),%eax
  movd   %eax,%xmm0
  call   <sqrt@plt>
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0xa0(%rbp)
  movss  -0xa0(%rbp),%xmm0
  movss  -0x98(%rbp),%xmm1
  mulss  %xmm1,%xmm0
  movss  %xmm0,-0x98(%rbp)
L31:
  movss  D78(%rip),%xmm0
  movss  %xmm0,-0xa8(%rbp)
  mov    -0xd0(%rbp),%rax
  movss  D78(%rip),%xmm0
  movss  %xmm0,(%rax)
  movl   $0x1,-0x94(%rbp)
  jmp    L112
L98:
  mov    -0x94(%rbp),%eax
  mov    %eax,-0x8c(%rbp)
  mov    -0x94(%rbp),%eax
  cltq
  movss  -0xa8(%rbp),%xmm0
  movss  %xmm0,-0x80(%rbp,%rax,4)
  mov    -0x9c(%rbp),%eax
  movd   %eax,%xmm0
  call   <sqrt@plt>
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x9c(%rbp)
  mov    -0x94(%rbp),%eax
  cltq
  movss  -0x9c(%rbp),%xmm0
  movss  %xmm0,-0x40(%rbp,%rax,4)
  movss  -0xa8(%rbp),%xmm0
  movaps %xmm0,%xmm1
  addss  -0x9c(%rbp),%xmm1
  movss  D7(%rip),%xmm0
  mulss  %xmm1,%xmm0
  movss  %xmm0,-0xa4(%rbp)
  movss  -0xa8(%rbp),%xmm0
  subss  -0x9c(%rbp),%xmm0
  movd   %xmm0,%eax
  movd   %eax,%xmm0
  call   <fabs@plt>
  pxor   %xmm2,%xmm2
  cvtss2sd -0xa8(%rbp),%xmm2
  movsd  D34(%rip),%xmm1
  mulsd  %xmm2,%xmm1
  comisd %xmm0,%xmm1
  jae    L44
  movss  -0x9c(%rbp),%xmm0
  mulss  -0xa8(%rbp),%xmm0
  movss  %xmm0,-0x9c(%rbp)
  movss  -0xa4(%rbp),%xmm0
  movss  %xmm0,-0xa8(%rbp)
  addl   $0x1,-0x94(%rbp)
L112:
  cmpl   $0xd,-0x94(%rbp)
  jle    L98
  jmp    L132
L44:
  nop
L132:
  movss  -0x98(%rbp),%xmm0
  mulss  -0xa4(%rbp),%xmm0
  movss  %xmm0,-0x98(%rbp)
  mov    -0x98(%rbp),%eax
  movd   %eax,%xmm0
  call   <sin@plt>
  movd   %xmm0,%eax
  mov    -0xc0(%rbp),%rdx
  mov    %eax,(%rdx)
  mov    -0x98(%rbp),%eax
  movd   %eax,%xmm0
  call   <cos@plt>
  movd   %xmm0,%eax
  mov    -0xc8(%rbp),%rdx
  mov    %eax,(%rdx)
  mov    -0xc0(%rbp),%rax
  movss  (%rax),%xmm0
  pxor   %xmm1,%xmm1
  ucomiss %xmm1,%xmm0
  jp     L66
  pxor   %xmm1,%xmm1
  ucomiss %xmm1,%xmm0
  je     L64
L66:
  mov    -0xc8(%rbp),%rax
  movss  (%rax),%xmm0
  mov    -0xc0(%rbp),%rax
  movss  (%rax),%xmm1
  divss  %xmm1,%xmm0
  movss  %xmm0,-0xa8(%rbp)
  movss  -0xa4(%rbp),%xmm0
  mulss  -0xa8(%rbp),%xmm0
  movss  %xmm0,-0xa4(%rbp)
  mov    -0x8c(%rbp),%eax
  mov    %eax,-0x90(%rbp)
  jmp    L131
L26:
  mov    -0x90(%rbp),%eax
  cltq
  movss  -0x80(%rbp,%rax,4),%xmm0
  movss  %xmm0,-0x84(%rbp)
  movss  -0xa8(%rbp),%xmm0
  mulss  -0xa4(%rbp),%xmm0
  movss  %xmm0,-0xa8(%rbp)
  mov    -0xd0(%rbp),%rax
  movss  (%rax),%xmm0
  movss  -0xa4(%rbp),%xmm1
  mulss  %xmm1,%xmm0
  movss  %xmm0,-0xa4(%rbp)
  mov    -0x90(%rbp),%eax
  cltq
  movss  -0x40(%rbp,%rax,4),%xmm0
  addss  -0xa8(%rbp),%xmm0
  movss  -0x84(%rbp),%xmm1
  addss  -0xa8(%rbp),%xmm1
  divss  %xmm1,%xmm0
  mov    -0xd0(%rbp),%rax
  movss  %xmm0,(%rax)
  movss  -0xa4(%rbp),%xmm0
  divss  -0x84(%rbp),%xmm0
  movss  %xmm0,-0xa8(%rbp)
  subl   $0x1,-0x90(%rbp)
L131:
  cmpl   $0x0,-0x90(%rbp)
  jg     L26
  movss  -0xa4(%rbp),%xmm0
  movaps %xmm0,%xmm1
  mulss  %xmm0,%xmm1
  movss  D78(%rip),%xmm0
  addss  %xmm0,%xmm1
  movd   %xmm1,%eax
  movd   %eax,%xmm0
  call   <sqrt@plt>
  movsd  D10(%rip),%xmm1
  divsd  %xmm0,%xmm1
  pxor   %xmm0,%xmm0
  cvtsd2ss %xmm1,%xmm0
  movss  %xmm0,-0xa8(%rbp)
  mov    -0xc0(%rbp),%rax
  movss  (%rax),%xmm0
  pxor   %xmm1,%xmm1
  comiss %xmm1,%xmm0
  jb     L1
  movss  -0xa8(%rbp),%xmm0
  jmp    L18
L1:
  movss  -0xa8(%rbp),%xmm0
  movss  D98(%rip),%xmm1
  xorps  %xmm1,%xmm0
L18:
  mov    -0xc0(%rbp),%rax
  movss  %xmm0,(%rax)
  mov    -0xc0(%rbp),%rax
  movss  (%rax),%xmm0
  mulss  -0xa4(%rbp),%xmm0
  mov    -0xc8(%rbp),%rax
  movss  %xmm0,(%rax)
L64:
  cmpl   $0x0,-0x88(%rbp)
  je     L32
  mov    -0xd0(%rbp),%rax
  movss  (%rax),%xmm0
  movss  %xmm0,-0xa8(%rbp)
  mov    -0xc8(%rbp),%rax
  movss  (%rax),%xmm0
  mov    -0xd0(%rbp),%rax
  movss  %xmm0,(%rax)
  mov    -0xc8(%rbp),%rax
  movss  -0xa8(%rbp),%xmm0
  movss  %xmm0,(%rax)
  mov    -0xc0(%rbp),%rax
  movss  (%rax),%xmm0
  divss  -0xa0(%rbp),%xmm0
  mov    -0xc0(%rbp),%rax
  movss  %xmm0,(%rax)
  jmp    L32
L16:
  mov    -0x98(%rbp),%eax
  movd   %eax,%xmm0
  call   <cosh@plt>
  movsd  D10(%rip),%xmm1
  divsd  %xmm0,%xmm1
  pxor   %xmm0,%xmm0
  cvtsd2ss %xmm1,%xmm0
  mov    -0xc8(%rbp),%rax
  movss  %xmm0,(%rax)
  mov    -0xc8(%rbp),%rax
  movss  (%rax),%xmm0
  mov    -0xd0(%rbp),%rax
  movss  %xmm0,(%rax)
  mov    -0x98(%rbp),%eax
  movd   %eax,%xmm0
  call   <tanh@plt>
  movd   %xmm0,%eax
  mov    -0xc0(%rbp),%rdx
  mov    %eax,(%rdx)
L32:
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L24
  call   <__stack_chk_fail@plt>
L24:
  leave
  ret
```

tool_calls: name: read_data
arguments: data_tag: D78
type: f32
name: read_data
arguments: data_tag: D83
type: f32[2]
name: read_data
arguments: data_tag: D7
type: f32
name: read_data
arguments: data_tag: D34
type: f64
name: read_data
arguments: data_tag: D10
type: f32[2]
name: read_data
arguments: data_tag: D98
type: byte[4]

tool: D78: 1

tool: {"D83": [0.0,-1.875]}

tool: D7: 0.5

tool: D34: 0.0003

tool: {"D10": [0.0,1.875]}

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

assistant: ```c
void sncndn(float uu, float emmc, float *sn, float *cn, float *dn) {
  float a, b, c, d, emc, u;
  float em[14], en[14];
  int i, ii, l, bo;
  emc = emmc;
  u = uu;
  if (emc) {
    bo = (emc < 0.0);
    if (bo) {
      d = 1.0 - emc;
      emc /= -1.0 / d;
      u *= (d = sqrt(d));
    }
    a = 1.0;
    *dn = 1.0;
    for (i = 1; i <= 13; i++) {
      l = i;
      em[i] = a;
      en[i] = (emc = sqrt(emc));
      c = 0.5 * (a + emc);
      if (fabs(a - emc) <= 0.0003 * a)
        break;
      emc *= a;
      a = c;
    }
    u *= c;
    *sn = sin(u);
    *cn = cos(u);
    if (*sn) {
      a = (*cn) / (*sn);
      c *= a;
      for (ii = l; ii >= 1; ii--) {
        b = em[ii];
        a *= c;
        c *= (*dn);
        *dn = (en[ii] + a) / (b + a);
        a = c / b;
      }
      a = 1.0 / sqrt(c * c + 1.0);
      *sn = (*sn >= 0.0 ? a : -a);
      *cn = c * (*sn);
    }
    if (bo) {
      a = (*dn);
      *dn = (*cn);
      *cn = a;
      *sn /= d;
    }
  } else {
    *cn = 1.0 / cosh(u);
    *dn = (*cn);
    *sn = tanh(u);
  }
}
```