user: Demonstrate the C code that generates the assembly output below:

```asm
<CledirhGordanQuasispin>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %edi,-0x14(%rbp)
  mov    %esi,-0x18(%rbp)
  mov    %edx,-0x1c(%rbp)
  mov    %ecx,-0x20(%rbp)
  mov    %r8d,-0x24(%rbp)
  mov    %r9d,-0x28(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  mov    -0x18(%rbp),%edx
  mov    -0x20(%rbp),%eax
  add    %edx,%eax
  cmp    %eax,-0x28(%rbp)
  je     L220
  movsd  -0x8(%rbp),%xmm0
  jmp    L285
L220:
  mov    -0x24(%rbp),%edx
  mov    -0x1c(%rbp),%ecx
  mov    -0x14(%rbp),%eax
  mov    %ecx,%esi
  mov    %eax,%edi
  call   <Triangle@plt>
  test   %eax,%eax
  jne    L260
  movsd  -0x8(%rbp),%xmm0
  jmp    L285
L260:
  mov    -0x18(%rbp),%eax
  mov    %eax,%edx
  neg    %edx
  cmovns %edx,%eax
  cmp    %eax,-0x14(%rbp)
  jl     L162
  mov    -0x20(%rbp),%eax
  mov    %eax,%edx
  neg    %edx
  cmovns %edx,%eax
  cmp    %eax,-0x1c(%rbp)
  jl     L162
  mov    -0x28(%rbp),%eax
  mov    %eax,%edx
  neg    %edx
  cmovns %edx,%eax
  cmp    %eax,-0x24(%rbp)
  jge    L340
L162:
  movsd  -0x8(%rbp),%xmm0
  jmp    L285
L340:
  mov    -0x18(%rbp),%eax
  mov    %eax,%edx
  neg    %edx
  cmovs  %eax,%edx
  mov    -0x14(%rbp),%eax
  add    %edx,%eax
  mov    %eax,%edx
  neg    %edx
  cmovns %edx,%eax
  and    $0x1,%eax
  test   %al,%al
  jne    L124
  mov    -0x20(%rbp),%eax
  mov    %eax,%edx
  neg    %edx
  cmovs  %eax,%edx
  mov    -0x1c(%rbp),%eax
  add    %edx,%eax
  mov    %eax,%edx
  neg    %edx
  cmovns %edx,%eax
  and    $0x1,%eax
  test   %al,%al
  jne    L124
  mov    -0x28(%rbp),%eax
  mov    %eax,%edx
  neg    %edx
  cmovs  %eax,%edx
  mov    -0x24(%rbp),%eax
  add    %edx,%eax
  mov    %eax,%edx
  neg    %edx
  cmovns %edx,%eax
  and    $0x1,%eax
  test   %al,%al
  je     L402
L124:
  movsd  -0x8(%rbp),%xmm0
  jmp    L285
L402:
  cmpl   $0x2,-0x1c(%rbp)
  je     L138
  cmpl   $0x2,-0x1c(%rbp)
  jg     L60
  cmpl   $0x0,-0x1c(%rbp)
  je     L385
  cmpl   $0x1,-0x1c(%rbp)
  je     L352
  jmp    L60
L385:
  mov    -0x14(%rbp),%eax
  cmp    -0x24(%rbp),%eax
  je     L411
  movsd  -0x8(%rbp),%xmm0
  jmp    L285
L411:
  mov    -0x18(%rbp),%eax
  cmp    -0x28(%rbp),%eax
  je     L29
  movsd  -0x8(%rbp),%xmm0
  jmp    L285
L29:
  movsd  D257(%rip),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  jmp    L213
L352:
  mov    -0x14(%rbp),%eax
  add    $0x1,%eax
  cmp    %eax,-0x24(%rbp)
  jne    L275
  mov    -0x20(%rbp),%eax
  imul   -0x28(%rbp),%eax
  mov    %eax,%edx
  mov    -0x24(%rbp),%eax
  add    %edx,%eax
  pxor   %xmm1,%xmm1
  cvtsi2sd %eax,%xmm1
  movsd  D75(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x24(%rbp),%xmm1
  divsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  mov    %eax,%edi
  call   <sqrt@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x8(%rbp)
  jmp    L413
L275:
  mov    -0x14(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0x24(%rbp)
  jne    L413
  mov    -0x20(%rbp),%eax
  neg    %eax
  pxor   %xmm5,%xmm5
  cvtsi2sd %eax,%xmm5
  movsd  %xmm5,-0x30(%rbp)
  mov    -0x20(%rbp),%eax
  imul   -0x28(%rbp),%eax
  mov    %eax,%edx
  mov    -0x24(%rbp),%eax
  sub    %edx,%eax
  pxor   %xmm1,%xmm1
  cvtsi2sd %eax,%xmm1
  movsd  D290(%rip),%xmm0
  addsd  %xmm0,%xmm1
  movsd  D75(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  pxor   %xmm2,%xmm2
  cvtsi2sdl -0x24(%rbp),%xmm2
  movsd  D290(%rip),%xmm1
  addsd  %xmm2,%xmm1
  divsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  mov    %eax,%edi
  call   <sqrt@plt>
  mulsd  -0x30(%rbp),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  jmp    L413
L138:
  cmpl   $0x0,-0x20(%rbp)
  jne    L52
  mov    -0x14(%rbp),%eax
  add    $0x2,%eax
  cmp    %eax,-0x24(%rbp)
  jne    L304
  mov    -0x24(%rbp),%edx
  mov    -0x28(%rbp),%eax
  add    %edx,%eax
  pxor   %xmm1,%xmm1
  cvtsi2sd %eax,%xmm1
  movsd  D75(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  mov    -0x24(%rbp),%eax
  sub    -0x28(%rbp),%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mulsd  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x24(%rbp),%xmm1
  movsd  D257(%rip),%xmm3
  movapd %xmm1,%xmm2
  subsd  %xmm3,%xmm2
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x24(%rbp),%xmm1
  mulsd  %xmm2,%xmm1
  divsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  mov    %eax,%edi
  call   <sqrt@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x8(%rbp)
  jmp    L68
L304:
  mov    -0x14(%rbp),%eax
  cmp    -0x24(%rbp),%eax
  jne    L276
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x28(%rbp),%xmm1
  movsd  D75(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,-0x30(%rbp)
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x24(%rbp),%xmm1
  pxor   %xmm2,%xmm2
  cvtsi2sdl -0x24(%rbp),%xmm2
  movsd  D290(%rip),%xmm0
  addsd  %xmm2,%xmm0
  mulsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  mov    %eax,%edi
  call   <sqrt@plt>
  movsd  D75(%rip),%xmm1
  mulsd  %xmm0,%xmm1
  movsd  -0x30(%rbp),%xmm0
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  jmp    L68
L276:
  mov    -0x14(%rbp),%eax
  sub    $0x2,%eax
  cmp    %eax,-0x24(%rbp)
  jne    L68
  mov    -0x24(%rbp),%edx
  mov    -0x28(%rbp),%eax
  add    %edx,%eax
  pxor   %xmm1,%xmm1
  cvtsi2sd %eax,%xmm1
  movsd  D290(%rip),%xmm0
  addsd  %xmm0,%xmm1
  mov    -0x24(%rbp),%eax
  sub    -0x28(%rbp),%eax
  pxor   %xmm2,%xmm2
  cvtsi2sd %eax,%xmm2
  movsd  D290(%rip),%xmm0
  addsd  %xmm2,%xmm0
  mulsd  %xmm0,%xmm1
  movsd  D75(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  pxor   %xmm2,%xmm2
  cvtsi2sdl -0x24(%rbp),%xmm2
  movsd  D290(%rip),%xmm1
  addsd  %xmm1,%xmm2
  pxor   %xmm3,%xmm3
  cvtsi2sdl -0x24(%rbp),%xmm3
  movsd  D77(%rip),%xmm1
  addsd  %xmm3,%xmm1
  mulsd  %xmm2,%xmm1
  divsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  mov    %eax,%edi
  call   <sqrt@plt>
  movq   %xmm0,%rax
  movq   D106(%rip),%xmm0
  movq   %rax,%xmm4
  xorpd  %xmm0,%xmm4
  movapd %xmm4,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  jmp    L68
L52:
  cmpl   $0x2,-0x20(%rbp)
  je     L420
  cmpl   $0xfffffffe,-0x20(%rbp)
  jne    L68
L420:
  mov    -0x14(%rbp),%eax
  add    $0x2,%eax
  cmp    %eax,-0x24(%rbp)
  jne    L252
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x24(%rbp),%xmm1
  mov    -0x20(%rbp),%eax
  imul   -0x28(%rbp),%eax
  pxor   %xmm2,%xmm2
  cvtsi2sd %eax,%xmm2
  movsd  D75(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  movsd  D290(%rip),%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  pxor   %xmm2,%xmm2
  cvtsi2sdl -0x24(%rbp),%xmm2
  pxor   %xmm3,%xmm3
  cvtsi2sdl -0x20(%rbp),%xmm3
  movsd  D75(%rip),%xmm0
  mulsd  %xmm0,%xmm3
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0x28(%rbp),%xmm0
  mulsd  %xmm3,%xmm0
  addsd  %xmm2,%xmm0
  mulsd  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x24(%rbp),%xmm1
  movsd  D257(%rip),%xmm3
  movapd %xmm1,%xmm2
  subsd  %xmm3,%xmm2
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x24(%rbp),%xmm1
  mulsd  %xmm2,%xmm1
  divsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  mov    %eax,%edi
  call   <sqrt@plt>
  movsd  D75(%rip),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  jmp    L68
L252:
  mov    -0x14(%rbp),%eax
  cmp    -0x24(%rbp),%eax
  jne    L134
  mov    -0x20(%rbp),%eax
  neg    %eax
  pxor   %xmm1,%xmm1
  cvtsi2sd %eax,%xmm1
  movsd  D75(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,-0x30(%rbp)
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0x24(%rbp),%xmm0
  mov    -0x20(%rbp),%eax
  imul   -0x28(%rbp),%eax
  pxor   %xmm2,%xmm2
  cvtsi2sd %eax,%xmm2
  movsd  D75(%rip),%xmm1
  mulsd  %xmm1,%xmm2
  subsd  %xmm2,%xmm0
  movapd %xmm0,%xmm1
  movsd  D290(%rip),%xmm0
  addsd  %xmm0,%xmm1
  pxor   %xmm2,%xmm2
  cvtsi2sdl -0x24(%rbp),%xmm2
  mov    -0x20(%rbp),%eax
  imul   -0x28(%rbp),%eax
  pxor   %xmm3,%xmm3
  cvtsi2sd %eax,%xmm3
  movsd  D75(%rip),%xmm0
  mulsd  %xmm3,%xmm0
  addsd  %xmm2,%xmm0
  mulsd  %xmm0,%xmm1
  movsd  D75(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  pxor   %xmm2,%xmm2
  cvtsi2sdl -0x24(%rbp),%xmm2
  movsd  D290(%rip),%xmm1
  addsd  %xmm1,%xmm2
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x24(%rbp),%xmm1
  mulsd  %xmm2,%xmm1
  divsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  mov    %eax,%edi
  call   <sqrt@plt>
  mulsd  -0x30(%rbp),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  jmp    L68
L134:
  mov    -0x14(%rbp),%eax
  sub    $0x2,%eax
  cmp    %eax,-0x24(%rbp)
  jne    L68
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0x24(%rbp),%xmm0
  mov    -0x20(%rbp),%eax
  imul   -0x28(%rbp),%eax
  pxor   %xmm2,%xmm2
  cvtsi2sd %eax,%xmm2
  movsd  D75(%rip),%xmm1
  mulsd  %xmm1,%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  D290(%rip),%xmm0
  addsd  %xmm0,%xmm1
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0x24(%rbp),%xmm0
  mov    -0x20(%rbp),%eax
  imul   -0x28(%rbp),%eax
  pxor   %xmm3,%xmm3
  cvtsi2sd %eax,%xmm3
  movsd  D75(%rip),%xmm2
  mulsd  %xmm2,%xmm3
  movapd %xmm0,%xmm2
  subsd  %xmm3,%xmm2
  movsd  D149(%rip),%xmm0
  addsd  %xmm2,%xmm0
  mulsd  %xmm1,%xmm0
  pxor   %xmm2,%xmm2
  cvtsi2sdl -0x24(%rbp),%xmm2
  movsd  D290(%rip),%xmm1
  addsd  %xmm1,%xmm2
  pxor   %xmm3,%xmm3
  cvtsi2sdl -0x24(%rbp),%xmm3
  movsd  D77(%rip),%xmm1
  addsd  %xmm3,%xmm1
  mulsd  %xmm2,%xmm1
  divsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  mov    %eax,%edi
  call   <sqrt@plt>
  movsd  D75(%rip),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  jmp    L68
L60:
  mov    -0x28(%rbp),%r8d
  mov    -0x24(%rbp),%edi
  mov    -0x20(%rbp),%ecx
  mov    -0x1c(%rbp),%edx
  mov    -0x18(%rbp),%esi
  mov    -0x14(%rbp),%eax
  mov    %r8d,%r9d
  mov    %edi,%r8d
  mov    %eax,%edi
  call   <CledirhGordan@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x8(%rbp)
  jmp    L213
L413:
  nop
  jmp    L213
L68:
  nop
L213:
  movsd  -0x8(%rbp),%xmm0
L285:
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  leave
  ret
```

tool_calls: name: unpack_data
arguments: data_tag: D257
data_type: f64
name: unpack_data
arguments: data_tag: D75
data_type: f64
name: unpack_data
arguments: data_tag: D290
data_type: f64
name: unpack_data
arguments: data_tag: D77
data_type: f64
name: unpack_data
arguments: data_tag: D106
data_type: f32[2]
name: unpack_data
arguments: data_tag: D149
data_type: f64

tool: D257: 1

tool: D75: 0.5

tool: D290: 2

tool: D77: 3

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

tool: D149: 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;
}
```