user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<_drawline>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xe0,%rsp
  mov    %rdi,-0xa8(%rbp)
  mov    %rsi,-0xb0(%rbp)
  mov    %edx,-0xb4(%rbp)
  mov    %rcx,-0xc0(%rbp)
  movsd  %xmm0,-0xc8(%rbp)
  movsd  %xmm1,-0xd0(%rbp)
  mov    %r8d,-0xb8(%rbp)
  mov    %r9d,-0xd4(%rbp)
  mov    0x30(%rbp),%eax
  mov    %al,-0xd8(%rbp)
  mov    -0xd0(%rbp),%rax
  movq   %rax,%xmm0
  call   <cos@plt>
  movsd  %xmm0,-0xe0(%rbp)
  mov    -0xc8(%rbp),%rax
  movq   %rax,%xmm0
  call   <sin@plt>
  mulsd  -0xe0(%rbp),%xmm0
  movsd  %xmm0,-0x48(%rbp)
  mov    -0xd0(%rbp),%rax
  movq   %rax,%xmm0
  call   <sin@plt>
  movsd  %xmm0,-0xe0(%rbp)
  mov    -0xc8(%rbp),%rax
  movq   %rax,%xmm0
  call   <sin@plt>
  mulsd  -0xe0(%rbp),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  mov    -0xc8(%rbp),%rax
  movq   %rax,%xmm0
  call   <cos@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x38(%rbp)
  movsd  -0x48(%rbp),%xmm0
  movq   D47(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movsd  -0x40(%rbp),%xmm1
  movq   D47(%rip),%xmm2
  andpd  %xmm2,%xmm1
  comisd %xmm1,%xmm0
  jb     L43
  movsd  -0x48(%rbp),%xmm0
  movq   D47(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movsd  -0x38(%rbp),%xmm1
  movq   D47(%rip),%xmm2
  andpd  %xmm2,%xmm1
  comisd %xmm1,%xmm0
  jb     L43
  movsd  D196(%rip),%xmm0
  movsd  %xmm0,-0x60(%rbp)
  movsd  -0x40(%rbp),%xmm0
  divsd  -0x48(%rbp),%xmm0
  movsd  %xmm0,-0x58(%rbp)
  movsd  -0x38(%rbp),%xmm0
  divsd  -0x48(%rbp),%xmm0
  movsd  %xmm0,-0x50(%rbp)
  jmp    L28
L43:
  movsd  -0x40(%rbp),%xmm0
  movq   D47(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movsd  -0x48(%rbp),%xmm1
  movq   D47(%rip),%xmm2
  andpd  %xmm2,%xmm1
  comisd %xmm1,%xmm0
  jb     L4
  movsd  -0x40(%rbp),%xmm0
  movq   D47(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movsd  -0x38(%rbp),%xmm1
  movq   D47(%rip),%xmm2
  andpd  %xmm2,%xmm1
  comisd %xmm1,%xmm0
  jb     L4
  movsd  D196(%rip),%xmm0
  movsd  %xmm0,-0x58(%rbp)
  movsd  -0x48(%rbp),%xmm0
  divsd  -0x40(%rbp),%xmm0
  movsd  %xmm0,-0x60(%rbp)
  movsd  -0x38(%rbp),%xmm0
  divsd  -0x40(%rbp),%xmm0
  movsd  %xmm0,-0x50(%rbp)
  jmp    L28
L4:
  movsd  D196(%rip),%xmm0
  movsd  %xmm0,-0x50(%rbp)
  movsd  -0x48(%rbp),%xmm0
  divsd  -0x38(%rbp),%xmm0
  movsd  %xmm0,-0x60(%rbp)
  movsd  -0x40(%rbp),%xmm0
  divsd  -0x38(%rbp),%xmm0
  movsd  %xmm0,-0x58(%rbp)
L28:
  movsd  -0x48(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jbe    L154
  movsd  -0x60(%rbp),%xmm0
  movq   D47(%rip),%xmm1
  andpd  %xmm1,%xmm0
  jmp    L88
L154:
  movsd  -0x60(%rbp),%xmm0
  movq   D47(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movq   D26(%rip),%xmm1
  xorpd  %xmm1,%xmm0
L88:
  movsd  %xmm0,-0x60(%rbp)
  movsd  -0x40(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jbe    L204
  movsd  -0x58(%rbp),%xmm0
  movq   D47(%rip),%xmm1
  andpd  %xmm1,%xmm0
  jmp    L236
L204:
  movsd  -0x58(%rbp),%xmm0
  movq   D47(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movq   D26(%rip),%xmm1
  xorpd  %xmm1,%xmm0
L236:
  movsd  %xmm0,-0x58(%rbp)
  movsd  -0x38(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jbe    L262
  movsd  -0x50(%rbp),%xmm0
  movq   D47(%rip),%xmm1
  andpd  %xmm1,%xmm0
  jmp    L59
L262:
  movsd  -0x50(%rbp),%xmm0
  movq   D47(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movq   D26(%rip),%xmm1
  xorpd  %xmm1,%xmm0
L59:
  movsd  %xmm0,-0x50(%rbp)
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0xb8(%rbp),%xmm0
  movsd  %xmm0,-0x90(%rbp)
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0xd4(%rbp),%xmm0
  movsd  %xmm0,-0x88(%rbp)
  pxor   %xmm0,%xmm0
  cvtsi2sdl 0x10(%rbp),%xmm0
  movsd  %xmm0,-0x80(%rbp)
  movsd  -0x88(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  imul   0x18(%rbp),%eax
  mov    %eax,%edx
  movsd  -0x90(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  add    %eax,%edx
  movsd  -0x80(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  imul   0x18(%rbp),%eax
  imul   0x20(%rbp),%eax
  add    %edx,%eax
  movslq %eax,%rdx
  mov    -0xa8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %al,-0x92(%rbp)
  movsd  -0x88(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  imul   0x18(%rbp),%eax
  mov    %eax,%edx
  movsd  -0x90(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  add    %eax,%edx
  movsd  -0x80(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  imul   0x18(%rbp),%eax
  imul   0x20(%rbp),%eax
  add    %edx,%eax
  movslq %eax,%rdx
  mov    -0xa8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %al,-0x91(%rbp)
  movsd  -0x90(%rbp),%xmm0
  movsd  %xmm0,-0x78(%rbp)
  movsd  -0x88(%rbp),%xmm0
  movsd  %xmm0,-0x70(%rbp)
  movsd  -0x80(%rbp),%xmm0
  movsd  %xmm0,-0x68(%rbp)
  jmp    L1
L73:
  movsd  -0x88(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  imul   0x18(%rbp),%eax
  mov    %eax,%edx
  movsd  -0x90(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  add    %eax,%edx
  movsd  -0x80(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  imul   0x18(%rbp),%eax
  imul   0x20(%rbp),%eax
  add    %edx,%eax
  movslq %eax,%rdx
  mov    -0xc0(%rbp),%rax
  add    %rax,%rdx
  movzbl -0xd8(%rbp),%eax
  mov    %al,(%rdx)
  movsd  -0x88(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  imul   0x18(%rbp),%eax
  mov    %eax,%edx
  movsd  -0x90(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  add    %eax,%edx
  movsd  -0x80(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  imul   0x18(%rbp),%eax
  imul   0x20(%rbp),%eax
  add    %edx,%eax
  movslq %eax,%rdx
  mov    -0xa8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %al,-0x91(%rbp)
  movzbl -0x91(%rbp),%eax
  cmp    -0x92(%rbp),%al
  je     L68
  movzbl -0x91(%rbp),%eax
  mov    %al,-0x92(%rbp)
L68:
  movsd  -0x90(%rbp),%xmm0
  movsd  %xmm0,-0x78(%rbp)
  movsd  -0x88(%rbp),%xmm0
  movsd  %xmm0,-0x70(%rbp)
  movsd  -0x80(%rbp),%xmm0
  movsd  %xmm0,-0x68(%rbp)
  movsd  -0x90(%rbp),%xmm0
  addsd  -0x60(%rbp),%xmm0
  movsd  %xmm0,-0x90(%rbp)
  movsd  -0x88(%rbp),%xmm0
  addsd  -0x58(%rbp),%xmm0
  movsd  %xmm0,-0x88(%rbp)
  movsd  -0x80(%rbp),%xmm0
  addsd  -0x50(%rbp),%xmm0
  movsd  %xmm0,-0x80(%rbp)
L1:
  movsd  -0x90(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jb     L72
  pxor   %xmm0,%xmm0
  cvtsi2sdl 0x18(%rbp),%xmm0
  comisd -0x90(%rbp),%xmm0
  jbe    L72
  movsd  -0x88(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jb     L72
  pxor   %xmm0,%xmm0
  cvtsi2sdl 0x20(%rbp),%xmm0
  comisd -0x88(%rbp),%xmm0
  jbe    L72
  movsd  -0x80(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jb     L72
  pxor   %xmm0,%xmm0
  cvtsi2sdl 0x28(%rbp),%xmm0
  comisd -0x80(%rbp),%xmm0
  jbe    L72
  movsd  -0x88(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  imul   0x18(%rbp),%eax
  mov    %eax,%edx
  movsd  -0x90(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  add    %eax,%edx
  movsd  -0x80(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  imul   0x18(%rbp),%eax
  imul   0x20(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0xb0(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    %eax,-0xb4(%rbp)
  je     L73
L72:
  movsd  -0x78(%rbp),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  -0x70(%rbp),%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movsd  -0x68(%rbp),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0xb8(%rbp),%xmm0
  movsd  %xmm0,-0x90(%rbp)
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0xd4(%rbp),%xmm0
  movsd  %xmm0,-0x88(%rbp)
  pxor   %xmm0,%xmm0
  cvtsi2sdl 0x10(%rbp),%xmm0
  movsd  %xmm0,-0x80(%rbp)
  movsd  -0x88(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  imul   0x18(%rbp),%eax
  mov    %eax,%edx
  movsd  -0x90(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  add    %eax,%edx
  movsd  -0x80(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  imul   0x18(%rbp),%eax
  imul   0x20(%rbp),%eax
  add    %edx,%eax
  movslq %eax,%rdx
  mov    -0xa8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %al,-0x92(%rbp)
  movsd  -0x88(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  imul   0x18(%rbp),%eax
  mov    %eax,%edx
  movsd  -0x90(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  add    %eax,%edx
  movsd  -0x80(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  imul   0x18(%rbp),%eax
  imul   0x20(%rbp),%eax
  add    %edx,%eax
  movslq %eax,%rdx
  mov    -0xa8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %al,-0x91(%rbp)
  movsd  -0x90(%rbp),%xmm0
  movsd  %xmm0,-0x78(%rbp)
  movsd  -0x88(%rbp),%xmm0
  movsd  %xmm0,-0x70(%rbp)
  movsd  -0x80(%rbp),%xmm0
  movsd  %xmm0,-0x68(%rbp)
  jmp    L215
L279:
  movsd  -0x88(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  imul   0x18(%rbp),%eax
  mov    %eax,%edx
  movsd  -0x90(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  add    %eax,%edx
  movsd  -0x80(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  imul   0x18(%rbp),%eax
  imul   0x20(%rbp),%eax
  add    %edx,%eax
  movslq %eax,%rdx
  mov    -0xc0(%rbp),%rax
  add    %rax,%rdx
  movzbl -0xd8(%rbp),%eax
  mov    %al,(%rdx)
  movsd  -0x88(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  imul   0x18(%rbp),%eax
  mov    %eax,%edx
  movsd  -0x90(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  add    %eax,%edx
  movsd  -0x80(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  imul   0x18(%rbp),%eax
  imul   0x20(%rbp),%eax
  add    %edx,%eax
  movslq %eax,%rdx
  mov    -0xa8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %al,-0x91(%rbp)
  movzbl -0x91(%rbp),%eax
  cmp    -0x92(%rbp),%al
  je     L135
  movzbl -0x91(%rbp),%eax
  mov    %al,-0x92(%rbp)
L135:
  movsd  -0x90(%rbp),%xmm0
  movsd  %xmm0,-0x78(%rbp)
  movsd  -0x88(%rbp),%xmm0
  movsd  %xmm0,-0x70(%rbp)
  movsd  -0x80(%rbp),%xmm0
  movsd  %xmm0,-0x68(%rbp)
  movsd  -0x90(%rbp),%xmm0
  subsd  -0x60(%rbp),%xmm0
  movsd  %xmm0,-0x90(%rbp)
  movsd  -0x88(%rbp),%xmm0
  subsd  -0x58(%rbp),%xmm0
  movsd  %xmm0,-0x88(%rbp)
  movsd  -0x80(%rbp),%xmm0
  subsd  -0x50(%rbp),%xmm0
  movsd  %xmm0,-0x80(%rbp)
L215:
  movsd  -0x90(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jb     L45
  pxor   %xmm0,%xmm0
  cvtsi2sdl 0x18(%rbp),%xmm0
  comisd -0x90(%rbp),%xmm0
  jbe    L45
  movsd  -0x88(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jb     L45
  pxor   %xmm0,%xmm0
  cvtsi2sdl 0x20(%rbp),%xmm0
  comisd -0x88(%rbp),%xmm0
  jbe    L45
  movsd  -0x80(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jb     L45
  pxor   %xmm0,%xmm0
  cvtsi2sdl 0x28(%rbp),%xmm0
  comisd -0x80(%rbp),%xmm0
  jbe    L45
  movsd  -0x88(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  imul   0x18(%rbp),%eax
  mov    %eax,%edx
  movsd  -0x90(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  add    %eax,%edx
  movsd  -0x80(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  imul   0x18(%rbp),%eax
  imul   0x20(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0xb0(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    %eax,-0xb4(%rbp)
  je     L279
L45:
  movsd  -0x78(%rbp),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x70(%rbp),%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x68(%rbp),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  nop
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: tag: D47
datatype: qword
name: extract_symbolic_data
arguments: tag: D196
datatype: f64
name: extract_symbolic_data
arguments: tag: D26
datatype: byte[8]

tool: D47: 9223372036854775807

tool: D196: 1

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

assistant: ```c
void _drawline(unsigned char *in_im, unsigned int *lbl_im, unsigned int curr_lbl, unsigned char *out_im, const double theta, const double phi, const int cen_i, const int cen_j, const int cen_k, const int dimx, const int dimy, const int dimz, unsigned char lbl) {
  double x, y, z;
  double prec_x, prec_y, prec_z;
  double end_x1, end_y1, end_z1;
  double end_x2, end_y2, end_z2;
  unsigned char prec_status, curr_status;
  double r_0, r_1, r_2;
  double normr_0, normr_1, normr_2;
  r_0 = cos(phi) * sin(theta);
  r_1 = sin(phi) * sin(theta);
  r_2 = cos(theta);
  if ((fabs(r_0) >= fabs(r_1)) && (fabs(r_0) >= fabs(r_2))) {
    normr_0 = 1.0;
    normr_1 = r_1 / r_0;
    normr_2 = r_2 / r_0;
  } else if ((fabs(r_1) >= fabs(r_0)) && (fabs(r_1) >= fabs(r_2))) {
    normr_1 = 1.0;
    normr_0 = r_0 / r_1;
    normr_2 = r_2 / r_1;
  } else {
    normr_2 = 1.0;
    normr_0 = r_0 / r_2;
    normr_1 = r_1 / r_2;
  }
  normr_0 = (r_0 > 0) ? fabs(normr_0) : (-fabs(normr_0));
  normr_1 = (r_1 > 0) ? fabs(normr_1) : (-fabs(normr_1));
  normr_2 = (r_2 > 0) ? fabs(normr_2) : (-fabs(normr_2));
  x = cen_i;
  y = cen_j;
  z = cen_k;
  prec_status = in_im[(((int)y) * (dimx) + ((int)x) + ((int)z) * (dimx) * (dimy))];
  curr_status = in_im[(((int)y) * (dimx) + ((int)x) + ((int)z) * (dimx) * (dimy))];
  prec_x = x;
  prec_y = y;
  prec_z = z;
  while ((x >= 0) && (x < dimx) && (y >= 0) && (y < dimy) && (z >= 0) && (z < dimz) && (lbl_im[(((int)y) * (dimx) + ((int)x) + ((int)z) * (dimx) * (dimy))] == curr_lbl)) {
    out_im[(((int)y) * (dimx) + ((int)x) + ((int)z) * (dimx) * (dimy))] = lbl;
    curr_status = in_im[(((int)y) * (dimx) + ((int)x) + ((int)z) * (dimx) * (dimy))];
    if (curr_status != prec_status) {
      prec_status = curr_status;
    }
    prec_x = x;
    prec_y = y;
    prec_z = z;
    x = x + normr_0;
    y = y + normr_1;
    z = z + normr_2;
  }
  end_x1 = prec_x;
  end_y1 = prec_y;
  end_z1 = prec_z;
  x = cen_i;
  y = cen_j;
  z = cen_k;
  prec_status = in_im[(((int)y) * (dimx) + ((int)x) + ((int)z) * (dimx) * (dimy))];
  curr_status = in_im[(((int)y) * (dimx) + ((int)x) + ((int)z) * (dimx) * (dimy))];
  prec_x = x;
  prec_y = y;
  prec_z = z;
  while ((x >= 0) && (x < dimx) && (y >= 0) && (y < dimy) && (z >= 0) && (z < dimz) && (lbl_im[(((int)y) * (dimx) + ((int)x) + ((int)z) * (dimx) * (dimy))] == curr_lbl)) {
    out_im[(((int)y) * (dimx) + ((int)x) + ((int)z) * (dimx) * (dimy))] = lbl;
    curr_status = in_im[(((int)y) * (dimx) + ((int)x) + ((int)z) * (dimx) * (dimy))];
    if (curr_status != prec_status) {
      prec_status = curr_status;
    }
    prec_x = x;
    prec_y = y;
    prec_z = z;
    x = x - normr_0;
    y = y - normr_1;
    z = z - normr_2;
  }
  end_x2 = prec_x;
  end_y2 = prec_y;
  end_z2 = prec_z;
}
```