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

```asm
<plot_arrow>:
  endbr64
  movapd %xmm1,%xmm6
  movapd %xmm0,%xmm4
  sub    $0x38,%rsp
  movsd  D22(%rip),%xmm5
  addsd  %xmm3,%xmm6
  addsd  %xmm2,%xmm4
  ucomisd %xmm2,%xmm0
  mulsd  %xmm5,%xmm4
  movapd %xmm6,%xmm7
  mulsd  %xmm5,%xmm7
  jp     L95
  jne    L95
  movapd %xmm1,%xmm6
  movsd  D18(%rip),%xmm5
  subsd  %xmm3,%xmm6
  andpd  D29(%rip),%xmm6
  comisd %xmm5,%xmm6
  ja     L47
L95:
  ucomisd %xmm3,%xmm1
  jp     L10
  jne    L10
  movapd %xmm0,%xmm1
  movsd  D18(%rip),%xmm5
  subsd  %xmm2,%xmm1
  andpd  D29(%rip),%xmm1
  comisd %xmm5,%xmm1
  jbe    L10
  comisd %xmm0,%xmm2
  ja     L13
  comisd %xmm2,%xmm0
  jbe    L10
  movapd %xmm7,%xmm6
  movapd %xmm4,%xmm2
  subsd  %xmm5,%xmm6
  addsd  %xmm5,%xmm2
L73:
  movapd %xmm6,%xmm3
  movapd %xmm7,%xmm1
  movapd %xmm4,%xmm0
  mov    $0x1,%edi
  movsd  %xmm6,0x28(%rsp)
  movsd  %xmm5,0x10(%rsp)
  movsd  %xmm2,0x20(%rsp)
  movsd  %xmm7,0x8(%rsp)
  movsd  %xmm4,0x18(%rsp)
  call   <plot_line@plt>
  movsd  0x8(%rsp),%xmm7
  mov    $0x1,%edi
  movsd  0x10(%rsp),%xmm5
  movsd  0x18(%rsp),%xmm4
  movsd  0x20(%rsp),%xmm2
  addsd  %xmm7,%xmm5
  movapd %xmm7,%xmm1
  movapd %xmm4,%xmm0
  movsd  %xmm2,0x8(%rsp)
  movapd %xmm5,%xmm3
  movsd  %xmm5,0x10(%rsp)
  call   <plot_line@plt>
  movsd  0x8(%rsp),%xmm2
  movsd  0x28(%rsp),%xmm6
  mov    $0x1,%edi
  movsd  0x10(%rsp),%xmm3
  add    $0x38,%rsp
  movapd %xmm6,%xmm1
  movapd %xmm2,%xmm0
  jmp    1050 <plot_line@plt>
  cs nopw 0x0(%rax,%rax,1)
L10:
  add    $0x38,%rsp
  ret
  nopl   (%rax)
L47:
  comisd %xmm1,%xmm3
  ja     L99
  comisd %xmm3,%xmm1
  jbe    L95
  movapd %xmm7,%xmm3
  addsd  %xmm5,%xmm3
  jmp    L18
  nopw   0x0(%rax,%rax,1)
L99:
  movapd %xmm7,%xmm3
  subsd  %xmm5,%xmm3
L18:
  movapd %xmm4,%xmm6
  movapd %xmm7,%xmm1
  movapd %xmm4,%xmm0
  mov    $0x1,%edi
  subsd  %xmm5,%xmm6
  movsd  %xmm5,0x28(%rsp)
  movsd  %xmm3,0x10(%rsp)
  movsd  %xmm7,0x18(%rsp)
  movapd %xmm6,%xmm2
  movsd  %xmm6,0x20(%rsp)
  movsd  %xmm4,0x8(%rsp)
  call   <plot_line@plt>
  movsd  0x8(%rsp),%xmm4
  mov    $0x1,%edi
  movsd  0x28(%rsp),%xmm5
  movsd  0x18(%rsp),%xmm7
  movsd  0x10(%rsp),%xmm3
  addsd  %xmm4,%xmm5
  movapd %xmm4,%xmm0
  movapd %xmm7,%xmm1
  movapd %xmm5,%xmm2
  movsd  %xmm5,0x8(%rsp)
  call   <plot_line@plt>
  movsd  0x10(%rsp),%xmm3
  movsd  0x20(%rsp),%xmm6
  mov    $0x1,%edi
  movsd  0x8(%rsp),%xmm2
  add    $0x38,%rsp
  movapd %xmm3,%xmm1
  movapd %xmm6,%xmm0
  jmp    1050 <plot_line@plt>
  nopl   0x0(%rax)
L13:
  movapd %xmm7,%xmm6
  movapd %xmm4,%xmm2
  subsd  %xmm5,%xmm6
  subsd  %xmm5,%xmm2
  jmp    L73
```

tool_calls: name: parse_data
arguments: data_tag: D22
data_type: byte[8]
name: parse_data
arguments: data_tag: D18
data_type: f64
name: parse_data
arguments: data_tag: D29
data_type: qword[2]

tool: {"D22": [0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x3f]}

tool: D18: 0.01

tool: {"D29": [0x7fffffffffffffff,0x0000000000000000]}

assistant: ```c
void plot_arrow(double x1, double y1, double x2, double y2) {
  double xm, ym, off;
  off = 0.01;
  xm = (x1 + x2) / 2.0;
  ym = (y1 + y2) / 2.0;
  if (x1 == x2 && fabs(y1 - y2) > off && y2 > y1) {
    plot_line(xm, ym, xm - off, ym - off, 1);
    plot_line(xm, ym, xm + off, ym - off, 1);
    plot_line(xm - off, ym - off, xm + off, ym - off, 1);
  } else if (x1 == x2 && fabs(y1 - y2) > off && y1 > y2) {
    plot_line(xm, ym, xm - off, ym + off, 1);
    plot_line(xm, ym, xm + off, ym + off, 1);
    plot_line(xm - off, ym + off, xm + off, ym + off, 1);
  } else if (y1 == y2 && fabs(x1 - x2) > off && x2 > x1) {
    plot_line(xm, ym, xm - off, ym - off, 1);
    plot_line(xm, ym, xm - off, ym + off, 1);
    plot_line(xm - off, ym - off, xm - off, ym + off, 1);
  } else if (y1 == y2 && fabs(x1 - x2) > off && x1 > x2) {
    plot_line(xm, ym, xm + off, ym - off, 1);
    plot_line(xm, ym, xm + off, ym + off, 1);
    plot_line(xm + off, ym - off, xm + off, ym + off, 1);
  }
}
```