user: 下面的汇编指令对应的C源代码是什么：

```asm
<StartTangent>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x18(%rbp),%xmm1
  movsd  D52(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  pxor   %xmm0,%xmm0
  ucomisd -0x18(%rbp),%xmm0
  jp     L51
  pxor   %xmm0,%xmm0
  ucomisd -0x18(%rbp),%xmm0
  jne    L51
  jmp    L258
L77:
  movsd  -0x8(%rbp),%xmm1
  movsd  D52(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
L258:
  mov    -0x8(%rbp),%rax
  movq   %rax,%xmm0
  call   <cos@plt>
  movq   %xmm0,%rax
  pxor   %xmm0,%xmm0
  movq   %rax,%xmm2
  comisd %xmm0,%xmm2
  ja     L77
  mov    -0x8(%rbp),%rax
  movq   %rax,%xmm0
  call   <sin@plt>
  movq   %xmm0,%rax
  pxor   %xmm0,%xmm0
  movq   %rax,%xmm3
  comisd %xmm0,%xmm3
  jae    L77
  jmp    L279
L51:
  movsd  -0x18(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jbe    L143
  movsd  D52(%rip),%xmm0
  comisd -0x18(%rbp),%xmm0
  jb     L143
  jmp    L107
L14:
  movsd  -0x8(%rbp),%xmm1
  movsd  D52(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
L107:
  mov    -0x8(%rbp),%rax
  movq   %rax,%xmm0
  call   <cos@plt>
  pxor   %xmm1,%xmm1
  comisd %xmm0,%xmm1
  ja     L14
  mov    -0x8(%rbp),%rax
  movq   %rax,%xmm0
  call   <sin@plt>
  movq   %xmm0,%rax
  pxor   %xmm0,%xmm0
  movq   %rax,%xmm4
  comisd %xmm0,%xmm4
  ja     L14
  jmp    L279
L143:
  movsd  -0x18(%rbp),%xmm0
  comisd D52(%rip),%xmm0
  jbe    L67
  movsd  D8(%rip),%xmm0
  comisd -0x18(%rbp),%xmm0
  jb     L67
  jmp    L229
L34:
  movsd  -0x8(%rbp),%xmm1
  movsd  D52(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
L229:
  mov    -0x8(%rbp),%rax
  movq   %rax,%xmm0
  call   <cos@plt>
  pxor   %xmm1,%xmm1
  comisd %xmm0,%xmm1
  ja     L34
  mov    -0x8(%rbp),%rax
  movq   %rax,%xmm0
  call   <sin@plt>
  pxor   %xmm1,%xmm1
  comisd %xmm0,%xmm1
  ja     L34
  jmp    L279
L67:
  movsd  -0x18(%rbp),%xmm0
  comisd D8(%rip),%xmm0
  jbe    L20
  movsd  D28(%rip),%xmm0
  comisd -0x18(%rbp),%xmm0
  jb     L20
  jmp    L225
L179:
  movsd  -0x8(%rbp),%xmm1
  movsd  D52(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
L225:
  mov    -0x8(%rbp),%rax
  movq   %rax,%xmm0
  call   <cos@plt>
  movq   %xmm0,%rax
  pxor   %xmm0,%xmm0
  movq   %rax,%xmm5
  comisd %xmm0,%xmm5
  jae    L179
  mov    -0x8(%rbp),%rax
  movq   %rax,%xmm0
  call   <sin@plt>
  pxor   %xmm1,%xmm1
  comisd %xmm0,%xmm1
  ja     L179
  jmp    L279
L20:
  movsd  -0x18(%rbp),%xmm0
  comisd D28(%rip),%xmm0
  jbe    L279
  movsd  D32(%rip),%xmm0
  comisd -0x18(%rbp),%xmm0
  jb     L279
  jmp    L170
L167:
  movsd  -0x8(%rbp),%xmm1
  movsd  D52(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
L170:
  mov    -0x8(%rbp),%rax
  movq   %rax,%xmm0
  call   <cos@plt>
  movq   %xmm0,%rax
  pxor   %xmm0,%xmm0
  movq   %rax,%xmm6
  comisd %xmm0,%xmm6
  ja     L167
  mov    -0x8(%rbp),%rax
  movq   %rax,%xmm0
  call   <sin@plt>
  movq   %xmm0,%rax
  pxor   %xmm0,%xmm0
  movq   %rax,%xmm7
  comisd %xmm0,%xmm7
  jae    L167
L279:
  movsd  -0x8(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  leave
  ret
```

tool_calls: name: unpack_data
arguments: tag: D52
type: f64[2]
name: unpack_data
arguments: tag: D8
type: f64[2]
name: unpack_data
arguments: tag: D28
type: byte[16]
name: unpack_data
arguments: tag: D32
type: byte[8]

tool: {"D52": [1.5707963267948966,3.141592653589793]}

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

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

tool: {"D32": [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;
}
```