user: What is the c source code of the assembly code below?

```asm
<StartTangent>:
  endbr64
  push   %r14
  push   %rbx
  sub    $0x18,%rsp
  movapd %xmm0,%xmm6
  addsd  D37(%rip),%xmm6
  movq   %xmm6,%r14
  ucomisd D81(%rip),%xmm0
  jp     L233
  lea    0x8(%rsp),%rbx
  je     L59
L233:
  comisd D81(%rip),%xmm0
  jbe    L58
  movsd  D37(%rip),%xmm1
  lea    0x8(%rsp),%rbx
  comisd %xmm0,%xmm1
  jae    L237
L58:
  comisd D37(%rip),%xmm0
  jbe    L73
  movsd  D53(%rip),%xmm1
  lea    0x8(%rsp),%rbx
  comisd %xmm0,%xmm1
  jae    L78
L73:
  comisd D53(%rip),%xmm0
  jbe    L9
  movsd  D8(%rip),%xmm1
  lea    0x8(%rsp),%rbx
  comisd %xmm0,%xmm1
  jae    L190
L9:
  comisd D8(%rip),%xmm0
  jbe    L137
  movsd  D75(%rip),%xmm1
  lea    0x8(%rsp),%rbx
  comisd %xmm0,%xmm1
  jae    L110
  jmp    L137
L46:
  movq   %r14,%xmm2
  addsd  D37(%rip),%xmm2
  movq   %xmm2,%r14
L59:
  mov    %rsp,%rsi
  mov    %rbx,%rdi
  movq   %r14,%xmm0
  call   <sincos@plt>
  movsd  0x8(%rsp),%xmm1
  movsd  (%rsp),%xmm0
  pxor   %xmm3,%xmm3
  comisd %xmm3,%xmm0
  ja     L46
  comisd %xmm3,%xmm1
  jae    L46
L137:
  movq   %r14,%xmm0
  add    $0x18,%rsp
  pop    %rbx
  pop    %r14
  ret
L6:
  movq   %r14,%xmm4
  addsd  D37(%rip),%xmm4
  movq   %xmm4,%r14
L237:
  mov    %rsp,%rsi
  mov    %rbx,%rdi
  movq   %r14,%xmm0
  call   <sincos@plt>
  movsd  0x8(%rsp),%xmm0
  pxor   %xmm5,%xmm5
  comisd (%rsp),%xmm5
  ja     L6
  comisd %xmm5,%xmm0
  ja     L6
  jmp    L137
L166:
  movq   %r14,%xmm7
  addsd  D37(%rip),%xmm7
  movq   %xmm7,%r14
L78:
  mov    %rsp,%rsi
  mov    %rbx,%rdi
  movq   %r14,%xmm0
  call   <sincos@plt>
  movsd  0x8(%rsp),%xmm0
  pxor   %xmm4,%xmm4
  comisd (%rsp),%xmm4
  ja     L166
  comisd %xmm0,%xmm4
  ja     L166
  jmp    L137
L112:
  movq   %r14,%xmm6
  addsd  D37(%rip),%xmm6
  movq   %xmm6,%r14
L190:
  mov    %rsp,%rsi
  mov    %rbx,%rdi
  movq   %r14,%xmm0
  call   <sincos@plt>
  movsd  0x8(%rsp),%xmm1
  movsd  (%rsp),%xmm0
  pxor   %xmm5,%xmm5
  comisd %xmm5,%xmm0
  jae    L112
  comisd %xmm1,%xmm5
  ja     L112
  jmp    L137
L248:
  movq   %r14,%xmm7
  addsd  D37(%rip),%xmm7
  movq   %xmm7,%r14
L110:
  mov    %rsp,%rsi
  mov    %rbx,%rdi
  movq   %r14,%xmm0
  call   <sincos@plt>
  movsd  0x8(%rsp),%xmm1
  movsd  (%rsp),%xmm0
  pxor   %xmm7,%xmm7
  comisd %xmm7,%xmm0
  ja     L248
  comisd %xmm7,%xmm1
  jae    L248
  jmp    L137
```

tool_calls: name: unpack_data
arguments: label: D37
type_infered: f64[2]
name: unpack_data
arguments: label: D81
type_infered: f64[2]
name: unpack_data
arguments: label: D53
type_infered: f64[2]
name: unpack_data
arguments: label: D8
type_infered: byte[16]
name: unpack_data
arguments: label: D75
type_infered: byte[8]

tool: {"D37": [1.5707963267948966,0.0]}

tool: {"D81": [0.0,3.141592653589793]}

tool: {"D53": [3.141592653589793,4.71238898038469]}

tool: {"D8": [0xd2,0x21,0x33,0x7f,0x7c,0xd9,0x12,0x40,0x18,0x2d,0x44,0x54,0xfb,0x21,0x19,0x40]}

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

assistant: ```c
double StartTangent(double ang) {
  double tangent = ang + 1.5707963267948965580E0;
  if (ang == 0.0) {
    while ((cos(tangent) > 0.0) || (sin(tangent) >= 0.0))
      tangent += 1.5707963267948965580E0;
  } else if ((ang > 0.0) && (ang <= 1.5707963267948965580E0)) {
    while ((cos(tangent) < 0.0) || (sin(tangent) > 0.0))
      tangent += 1.5707963267948965580E0;
  } else if ((ang > 1.5707963267948965580E0) && (ang <= 3.1415926535897931160E0)) {
    while ((cos(tangent) < 0.0) || (sin(tangent) < 0.0))
      tangent += 1.5707963267948965580E0;
  } else if ((ang > 3.1415926535897931160E0) && (ang <= 3.0 * 1.5707963267948965580E0)) {
    while ((cos(tangent) >= 0.0) || (sin(tangent) < 0.0))
      tangent += 1.5707963267948965580E0;
  } else if ((ang > 3.0 * 1.5707963267948965580E0) && (ang <= 2.0 * 3.1415926535897931160E0)) {
    while ((cos(tangent) > 0.0) || (sin(tangent) >= 0.0))
      tangent += 1.5707963267948965580E0;
  }
  return tangent;
}
```