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

```asm
<plot_arrow>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  movsd  %xmm0,-0x28(%rbp)
  movsd  %xmm1,-0x30(%rbp)
  movsd  %xmm2,-0x38(%rbp)
  movsd  %xmm3,-0x40(%rbp)
  movsd  D49(%rip),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x28(%rbp),%xmm0
  addsd  -0x38(%rbp),%xmm0
  movsd  D61(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x30(%rbp),%xmm0
  addsd  -0x40(%rbp),%xmm0
  movsd  D61(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x28(%rbp),%xmm0
  ucomisd -0x38(%rbp),%xmm0
  jp     L172
  movsd  -0x28(%rbp),%xmm0
  ucomisd -0x38(%rbp),%xmm0
  jne    L172
  movsd  -0x30(%rbp),%xmm0
  subsd  -0x40(%rbp),%xmm0
  movq   D64(%rip),%xmm1
  andpd  %xmm1,%xmm0
  comisd -0x18(%rbp),%xmm0
  jbe    L172
  movsd  -0x40(%rbp),%xmm0
  comisd -0x30(%rbp),%xmm0
  jbe    L172
  movsd  -0x8(%rbp),%xmm0
  movapd %xmm0,%xmm2
  subsd  -0x18(%rbp),%xmm2
  movsd  -0x10(%rbp),%xmm0
  movapd %xmm0,%xmm1
  subsd  -0x18(%rbp),%xmm1
  movsd  -0x8(%rbp),%xmm0
  mov    -0x10(%rbp),%rax
  mov    $0x1,%edi
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <plot_line@plt>
  movsd  -0x8(%rbp),%xmm0
  movapd %xmm0,%xmm2
  subsd  -0x18(%rbp),%xmm2
  movsd  -0x10(%rbp),%xmm0
  movapd %xmm0,%xmm1
  addsd  -0x18(%rbp),%xmm1
  movsd  -0x8(%rbp),%xmm0
  mov    -0x10(%rbp),%rax
  mov    $0x1,%edi
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <plot_line@plt>
  movsd  -0x8(%rbp),%xmm0
  movapd %xmm0,%xmm3
  subsd  -0x18(%rbp),%xmm3
  movsd  -0x10(%rbp),%xmm0
  movapd %xmm0,%xmm2
  addsd  -0x18(%rbp),%xmm2
  movsd  -0x8(%rbp),%xmm0
  movapd %xmm0,%xmm1
  subsd  -0x18(%rbp),%xmm1
  movsd  -0x10(%rbp),%xmm0
  subsd  -0x18(%rbp),%xmm0
  movq   %xmm0,%rax
  mov    $0x1,%edi
  movq   %rax,%xmm0
  call   <plot_line@plt>
  jmp    L67
L172:
  movsd  -0x28(%rbp),%xmm0
  ucomisd -0x38(%rbp),%xmm0
  jp     L224
  movsd  -0x28(%rbp),%xmm0
  ucomisd -0x38(%rbp),%xmm0
  jne    L224
  movsd  -0x30(%rbp),%xmm0
  subsd  -0x40(%rbp),%xmm0
  movq   D64(%rip),%xmm1
  andpd  %xmm1,%xmm0
  comisd -0x18(%rbp),%xmm0
  jbe    L224
  movsd  -0x30(%rbp),%xmm0
  comisd -0x40(%rbp),%xmm0
  jbe    L224
  movsd  -0x8(%rbp),%xmm0
  movapd %xmm0,%xmm2
  addsd  -0x18(%rbp),%xmm2
  movsd  -0x10(%rbp),%xmm0
  movapd %xmm0,%xmm1
  subsd  -0x18(%rbp),%xmm1
  movsd  -0x8(%rbp),%xmm0
  mov    -0x10(%rbp),%rax
  mov    $0x1,%edi
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <plot_line@plt>
  movsd  -0x8(%rbp),%xmm0
  movapd %xmm0,%xmm2
  addsd  -0x18(%rbp),%xmm2
  movsd  -0x10(%rbp),%xmm0
  movapd %xmm0,%xmm1
  addsd  -0x18(%rbp),%xmm1
  movsd  -0x8(%rbp),%xmm0
  mov    -0x10(%rbp),%rax
  mov    $0x1,%edi
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <plot_line@plt>
  movsd  -0x8(%rbp),%xmm0
  movapd %xmm0,%xmm3
  addsd  -0x18(%rbp),%xmm3
  movsd  -0x10(%rbp),%xmm0
  movapd %xmm0,%xmm2
  addsd  -0x18(%rbp),%xmm2
  movsd  -0x8(%rbp),%xmm0
  movapd %xmm0,%xmm1
  addsd  -0x18(%rbp),%xmm1
  movsd  -0x10(%rbp),%xmm0
  subsd  -0x18(%rbp),%xmm0
  movq   %xmm0,%rax
  mov    $0x1,%edi
  movq   %rax,%xmm0
  call   <plot_line@plt>
  jmp    L67
L224:
  movsd  -0x30(%rbp),%xmm0
  ucomisd -0x40(%rbp),%xmm0
  jp     L40
  movsd  -0x30(%rbp),%xmm0
  ucomisd -0x40(%rbp),%xmm0
  jne    L40
  movsd  -0x28(%rbp),%xmm0
  subsd  -0x38(%rbp),%xmm0
  movq   D64(%rip),%xmm1
  andpd  %xmm1,%xmm0
  comisd -0x18(%rbp),%xmm0
  jbe    L40
  movsd  -0x38(%rbp),%xmm0
  comisd -0x28(%rbp),%xmm0
  jbe    L40
  movsd  -0x8(%rbp),%xmm0
  movapd %xmm0,%xmm2
  subsd  -0x18(%rbp),%xmm2
  movsd  -0x10(%rbp),%xmm0
  movapd %xmm0,%xmm1
  subsd  -0x18(%rbp),%xmm1
  movsd  -0x8(%rbp),%xmm0
  mov    -0x10(%rbp),%rax
  mov    $0x1,%edi
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <plot_line@plt>
  movsd  -0x8(%rbp),%xmm0
  movapd %xmm0,%xmm2
  addsd  -0x18(%rbp),%xmm2
  movsd  -0x10(%rbp),%xmm0
  movapd %xmm0,%xmm1
  subsd  -0x18(%rbp),%xmm1
  movsd  -0x8(%rbp),%xmm0
  mov    -0x10(%rbp),%rax
  mov    $0x1,%edi
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <plot_line@plt>
  movsd  -0x8(%rbp),%xmm0
  movapd %xmm0,%xmm3
  addsd  -0x18(%rbp),%xmm3
  movsd  -0x10(%rbp),%xmm0
  movapd %xmm0,%xmm2
  subsd  -0x18(%rbp),%xmm2
  movsd  -0x8(%rbp),%xmm0
  movapd %xmm0,%xmm1
  subsd  -0x18(%rbp),%xmm1
  movsd  -0x10(%rbp),%xmm0
  subsd  -0x18(%rbp),%xmm0
  movq   %xmm0,%rax
  mov    $0x1,%edi
  movq   %rax,%xmm0
  call   <plot_line@plt>
  jmp    L67
L40:
  movsd  -0x30(%rbp),%xmm0
  ucomisd -0x40(%rbp),%xmm0
  jp     L67
  movsd  -0x30(%rbp),%xmm0
  ucomisd -0x40(%rbp),%xmm0
  je     L187
  jmp    L67
L187:
  movsd  -0x28(%rbp),%xmm0
  subsd  -0x38(%rbp),%xmm0
  movq   D64(%rip),%xmm1
  andpd  %xmm1,%xmm0
  comisd -0x18(%rbp),%xmm0
  ja     L210
  jmp    L67
L210:
  movsd  -0x28(%rbp),%xmm0
  comisd -0x38(%rbp),%xmm0
  ja     L96
  jmp    L67
L96:
  movsd  -0x8(%rbp),%xmm0
  movapd %xmm0,%xmm2
  subsd  -0x18(%rbp),%xmm2
  movsd  -0x10(%rbp),%xmm0
  movapd %xmm0,%xmm1
  addsd  -0x18(%rbp),%xmm1
  movsd  -0x8(%rbp),%xmm0
  mov    -0x10(%rbp),%rax
  mov    $0x1,%edi
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <plot_line@plt>
  movsd  -0x8(%rbp),%xmm0
  movapd %xmm0,%xmm2
  addsd  -0x18(%rbp),%xmm2
  movsd  -0x10(%rbp),%xmm0
  movapd %xmm0,%xmm1
  addsd  -0x18(%rbp),%xmm1
  movsd  -0x8(%rbp),%xmm0
  mov    -0x10(%rbp),%rax
  mov    $0x1,%edi
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <plot_line@plt>
  movsd  -0x8(%rbp),%xmm0
  movapd %xmm0,%xmm3
  addsd  -0x18(%rbp),%xmm3
  movsd  -0x10(%rbp),%xmm0
  movapd %xmm0,%xmm2
  addsd  -0x18(%rbp),%xmm2
  movsd  -0x8(%rbp),%xmm0
  movapd %xmm0,%xmm1
  subsd  -0x18(%rbp),%xmm1
  movsd  -0x10(%rbp),%xmm0
  addsd  -0x18(%rbp),%xmm0
  movq   %xmm0,%rax
  mov    $0x1,%edi
  movq   %rax,%xmm0
  call   <plot_line@plt>
  jmp    L67
L67:
  nop
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_tag: D49
type_guessed: f64
name: disassemble_data
arguments: data_tag: D61
type_guessed: f64
name: disassemble_data
arguments: data_tag: D64
type_guessed: qword

tool: D49: 0.01

tool: D61: 2

tool: D64: 9223372036854775807

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);
  }
}
```