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

```asm
<CledirhGordanQuasispin>:
  endbr64
  lea    (%rsi,%rcx,1),%eax
  cmp    %r9d,%eax
  je     L206
  pxor   %xmm0,%xmm0
  ret
  nopl   0x0(%rax)
L206:
  push   %r15
  mov    %r8d,%r15d
  push   %r14
  mov    %edx,%r14d
  mov    %r8d,%edx
  push   %r13
  mov    %edi,%r13d
  push   %r12
  mov    %ecx,%r12d
  push   %rbp
  mov    %esi,%ebp
  mov    %r14d,%esi
  push   %rbx
  mov    %r9d,%ebx
  sub    $0x8,%rsp
  call   <Triangle@plt>
  test   %eax,%eax
  je     L34
  mov    %ebp,%eax
  neg    %eax
  cmovs  %ebp,%eax
  cmp    %r13d,%eax
  jg     L34
  mov    %r12d,%edx
  neg    %edx
  cmovs  %r12d,%edx
  cmp    %r14d,%edx
  jg     L34
  mov    %ebx,%ecx
  neg    %ecx
  cmovs  %ebx,%ecx
  cmp    %r15d,%ecx
  jg     L34
  add    %r13d,%eax
  test   $0x1,%al
  jne    L34
  add    %r14d,%edx
  and    $0x1,%edx
  jne    L34
  add    %r15d,%ecx
  and    $0x1,%ecx
  jne    L34
  cmp    $0x1,%r14d
  je     L81
  cmp    $0x2,%r14d
  je     L76
  test   %r14d,%r14d
  je     L286
  add    $0x8,%rsp
  mov    %ebx,%r9d
  mov    %r15d,%r8d
  mov    %r12d,%ecx
  pop    %rbx
  mov    %r14d,%edx
  mov    %ebp,%esi
  mov    %r13d,%edi
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    1080 <CledirhGordan@plt>
L286:
  cmp    %ebx,%ebp
  jne    L34
  movsd  D242(%rip),%xmm0
  cmp    %r15d,%r13d
  je     L84
  nopl   (%rax)
L34:
  pxor   %xmm0,%xmm0
L84:
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L81:
  lea    0x1(%r13),%eax
  cmp    %r15d,%eax
  je     L253
  sub    $0x1,%r13d
  cmp    %r15d,%r13d
  jne    L34
  imul   %r12d,%ebx
  mov    %r15d,%eax
  pxor   %xmm0,%xmm0
  neg    %r12d
  pxor   %xmm1,%xmm1
  movsd  D96(%rip),%xmm2
  cvtsi2sd %r15d,%xmm1
  sub    %ebx,%eax
  cvtsi2sd %eax,%xmm0
  addsd  %xmm2,%xmm1
  addsd  %xmm2,%xmm0
  mulsd  D47(%rip),%xmm0
  divsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%edi
  call   <sqrt@plt>
  movapd %xmm0,%xmm1
  pxor   %xmm0,%xmm0
  cvtsi2sd %r12d,%xmm0
  mulsd  %xmm1,%xmm0
  jmp    L84
L76:
  test   %r12d,%r12d
  jne    L153
  lea    0x2(%r13),%eax
  cmp    %r15d,%eax
  je     L100
  cmp    %r15d,%r13d
  je     L17
  sub    $0x2,%r13d
  cmp    %r15d,%r13d
  jne    L34
  pxor   %xmm2,%xmm2
  lea    (%rbx,%r15,1),%eax
  pxor   %xmm0,%xmm0
  movsd  D96(%rip),%xmm1
  cvtsi2sd %r15d,%xmm2
  pxor   %xmm3,%xmm3
  sub    %ebx,%r15d
  cvtsi2sd %eax,%xmm0
  cvtsi2sd %r15d,%xmm3
  addsd  %xmm1,%xmm0
  addsd  %xmm1,%xmm3
  addsd  %xmm2,%xmm1
  addsd  D185(%rip),%xmm2
  mulsd  %xmm3,%xmm0
  mulsd  D47(%rip),%xmm0
  mulsd  %xmm2,%xmm1
  divsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%edi
  call   <sqrt@plt>
  xorpd  D125(%rip),%xmm0
  jmp    L84
L153:
  lea    0x2(%r12),%eax
  and    $0xfffffffb,%eax
  jne    L34
  lea    0x2(%r13),%eax
  cmp    %r15d,%eax
  je     L72
  cmp    %r15d,%r13d
  je     L268
  sub    $0x2,%r13d
  cmp    %r15d,%r13d
  jne    L34
  imul   %r12d,%ebx
  pxor   %xmm2,%xmm2
  pxor   %xmm0,%xmm0
  cvtsi2sd %r15d,%xmm2
  cvtsi2sd %ebx,%xmm0
  mulsd  D47(%rip),%xmm0
  movapd %xmm2,%xmm3
  subsd  %xmm0,%xmm3
  movsd  D96(%rip),%xmm0
  movapd %xmm3,%xmm1
  addsd  D103(%rip),%xmm3
  addsd  %xmm0,%xmm1
  addsd  %xmm2,%xmm0
  addsd  D185(%rip),%xmm2
  mulsd  %xmm3,%xmm1
  mulsd  %xmm2,%xmm0
  divsd  %xmm0,%xmm1
  cvttsd2si %xmm1,%edi
  call   <sqrt@plt>
  mulsd  D47(%rip),%xmm0
  jmp    L84
L253:
  mov    %r12d,%eax
  pxor   %xmm0,%xmm0
  pxor   %xmm1,%xmm1
  imul   %ebx,%eax
  cvtsi2sd %r15d,%xmm1
  add    %r15d,%eax
  cvtsi2sd %eax,%xmm0
  mulsd  D47(%rip),%xmm0
L83:
  divsd  %xmm1,%xmm0
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  cvttsd2si %xmm0,%edi
  jmp    1070 <sqrt@plt>
L100:
  lea    (%rbx,%r15,1),%eax
  pxor   %xmm2,%xmm2
  pxor   %xmm0,%xmm0
  cvtsi2sd %r15d,%xmm2
  pxor   %xmm1,%xmm1
  sub    %ebx,%r15d
  cvtsi2sd %eax,%xmm0
  mulsd  D47(%rip),%xmm0
  cvtsi2sd %r15d,%xmm1
  mulsd  %xmm1,%xmm0
  movapd %xmm2,%xmm1
  subsd  D242(%rip),%xmm1
  mulsd  %xmm2,%xmm1
  jmp    L83
L17:
  pxor   %xmm1,%xmm1
  movsd  D96(%rip),%xmm0
  cvtsi2sd %r13d,%xmm1
  addsd  %xmm1,%xmm0
  mulsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%edi
  call   <sqrt@plt>
  movsd  D47(%rip),%xmm2
  movapd %xmm0,%xmm1
  pxor   %xmm0,%xmm0
  cvtsi2sd %ebx,%xmm0
  mulsd  %xmm2,%xmm1
  mulsd  %xmm2,%xmm0
  divsd  %xmm1,%xmm0
  jmp    L84
L268:
  imul   %r12d,%ebx
  pxor   %xmm3,%xmm3
  pxor   %xmm2,%xmm2
  movsd  D96(%rip),%xmm1
  cvtsi2sd %r13d,%xmm3
  neg    %r12d
  cvtsi2sd %ebx,%xmm2
  mulsd  D47(%rip),%xmm2
  movapd %xmm3,%xmm0
  subsd  %xmm2,%xmm0
  addsd  %xmm3,%xmm2
  addsd  %xmm1,%xmm0
  addsd  %xmm3,%xmm1
  mulsd  %xmm2,%xmm0
  mulsd  %xmm3,%xmm1
  mulsd  D47(%rip),%xmm0
  divsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%edi
  call   <sqrt@plt>
  movapd %xmm0,%xmm1
  pxor   %xmm0,%xmm0
  cvtsi2sd %r12d,%xmm0
  mulsd  D47(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  jmp    L84
L72:
  pxor   %xmm1,%xmm1
  pxor   %xmm3,%xmm3
  pxor   %xmm0,%xmm0
  mov    %r12d,%eax
  cvtsi2sd %r12d,%xmm1
  mulsd  D47(%rip),%xmm1
  pxor   %xmm2,%xmm2
  cvtsi2sd %ebx,%xmm3
  imul   %ebx,%eax
  cvtsi2sd %r15d,%xmm2
  mulsd  %xmm3,%xmm1
  cvtsi2sd %eax,%xmm0
  mulsd  D47(%rip),%xmm0
  addsd  %xmm2,%xmm1
  addsd  %xmm2,%xmm0
  subsd  D96(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movapd %xmm2,%xmm1
  subsd  D242(%rip),%xmm1
  mulsd  %xmm2,%xmm1
  divsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%edi
  call   <sqrt@plt>
  mulsd  D47(%rip),%xmm0
  jmp    L84
```

tool_calls: name: unpack_data
arguments: data_tag: D242
data_type: f64
name: unpack_data
arguments: data_tag: D96
data_type: f64
name: unpack_data
arguments: data_tag: D47
data_type: f64
name: unpack_data
arguments: data_tag: D185
data_type: f64
name: unpack_data
arguments: data_tag: D125
data_type: f32[4]
name: unpack_data
arguments: data_tag: D103
data_type: f64

tool: D242: 1

tool: D96: 2

tool: D47: 0.5

tool: D185: 3

tool: {"D125": [0.0,-0.0,0.0,0.0]}

tool: D103: 4

assistant: ```c
double CledirhGordanQuasispin(int ja, int ma, int jb, int mb, int jab, int mab) {
  double CG;
  CG = 0.0;
  if (ma + mb != mab)
    return CG;
  if (!Triangle(ja, jb, jab))
    return CG;
  if (abs(ma) > ja || abs(mb) > jb || abs(mab) > jab)
    return CG;
  if (((abs((abs(ma) + ja)) & 0x01) ? 1 : 0) || ((abs((abs(mb) + jb)) & 0x01) ? 1 : 0) || ((abs((abs(mab) + jab)) & 0x01) ? 1 : 0))
    return CG;
  switch (jb) {
  case 0:
    if (ja != jab)
      return CG;
    if (ma != mab)
      return CG;
    CG = 1.0;
    break;
  case 1:
    if (ja + 1 == jab)
      CG = sqrt(0.5 * (jab + mb * mab) / jab);
    else if (ja - 1 == jab)
      CG = -mb * sqrt(0.5 * (jab - mb * mab + 2.0) / (jab + 2.0));
    break;
  case 2:
    if (mb == 0) {
      if (ja + 2 == jab)
        CG = sqrt((0.5 * (jab + mab) * (jab - mab)) / ((jab - 1.0) * jab));
      else if (ja == jab)
        CG = (0.5 * mab) / (0.5 * sqrt(jab * (jab + 2.0)));
      else if (ja - 2 == jab)
        CG = -sqrt(0.5 * ((jab + mab + 2.0) * (jab - mab + 2.0)) / ((jab + 2.0) * (jab + 3.0)));
    } else if (mb == 2 || mb == -2) {
      if (ja + 2 == jab)
        CG = 0.5 * sqrt(((jab + mb * mab * 0.5 - 2.0) * (jab + mb * 0.5 * mab)) / ((jab - 1.0) * jab));
      else if (ja == jab)
        CG = -mb * 0.5 * sqrt(0.5 * ((jab - mb * mab * 0.5 + 2.0) * (jab + mb * mab * 0.5)) / ((jab + 2.0) * jab));
      else if (ja - 2 == jab)
        CG = 0.5 * sqrt(((jab - mb * mab * 0.5 + 2.0) * (jab - mb * mab * 0.5 + 4.0)) / ((jab + 2.0) * (jab + 3.0)));
    }
    break;
  default:
    CG = CledirhGordan(ja, ma, jb, mb, jab, mab);
  }
  return CG;
}
```