user: Converte this assembly snippet into its equivalent C code:

```asm
<plot_arrow>:
  endbr64
  movapd %xmm1,%xmm6
  movapd %xmm0,%xmm4
  sub    $0x38,%rsp
  movsd  D1(%rip),%xmm5
  addsd  %xmm3,%xmm6
  addsd  %xmm2,%xmm4
  ucomisd %xmm2,%xmm0
  mulsd  %xmm5,%xmm4
  movapd %xmm6,%xmm7
  mulsd  %xmm5,%xmm7
  jp     L97
  jne    L97
  movapd %xmm1,%xmm6
  movsd  D27(%rip),%xmm5
  subsd  %xmm3,%xmm6
  andpd  D14(%rip),%xmm6
  comisd %xmm5,%xmm6
  ja     L89
L97:
  ucomisd %xmm3,%xmm1
  jp     L44
  jne    L44
  movapd %xmm0,%xmm1
  movsd  D27(%rip),%xmm5
  subsd  %xmm2,%xmm1
  andpd  D14(%rip),%xmm1
  comisd %xmm5,%xmm1
  jbe    L44
  comisd %xmm0,%xmm2
  ja     L100
  comisd %xmm2,%xmm0
  jbe    L44
  movapd %xmm7,%xmm6
  movapd %xmm4,%xmm2
  subsd  %xmm5,%xmm6
  addsd  %xmm5,%xmm2
L86:
  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)
L44:
  add    $0x38,%rsp
  ret
  nopl   (%rax)
L89:
  comisd %xmm1,%xmm3
  ja     L3
  comisd %xmm3,%xmm1
  jbe    L97
  movapd %xmm7,%xmm3
  addsd  %xmm5,%xmm3
  jmp    L0
  nopw   0x0(%rax,%rax,1)
L3:
  movapd %xmm7,%xmm3
  subsd  %xmm5,%xmm3
L0:
  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)
L100:
  movapd %xmm7,%xmm6
  movapd %xmm4,%xmm2
  subsd  %xmm5,%xmm6
  subsd  %xmm5,%xmm2
  jmp    L86
```

tool_calls: name: parse_data
arguments: data_tag: D1
type_guessed: byte[8]
name: parse_data
arguments: data_tag: D27
type_guessed: f64
name: parse_data
arguments: data_tag: D14
type_guessed: qword[2]

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

tool: D27: 0.01

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