user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<vfdlib_drawLineUnclipped>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    %esi,-0x1c(%rbp)
  mov    %edx,-0x20(%rbp)
  mov    %ecx,-0x24(%rbp)
  mov    %r8d,-0x28(%rbp)
  mov    %r9d,%eax
  mov    %al,-0x2c(%rbp)
  mov    -0x24(%rbp),%eax
  sub    -0x1c(%rbp),%eax
  mov    %eax,-0x8(%rbp)
  mov    -0x28(%rbp),%eax
  sub    -0x20(%rbp),%eax
  mov    %eax,-0x4(%rbp)
  cmpl   $0x0,-0x8(%rbp)
  jne    L58
  cmpl   $0x0,-0x4(%rbp)
  js     L110
  movsbl -0x2c(%rbp),%edi
  mov    -0x4(%rbp),%eax
  lea    0x1(%rax),%ecx
  mov    -0x20(%rbp),%edx
  mov    -0x1c(%rbp),%esi
  mov    -0x18(%rbp),%rax
  mov    %edi,%r8d
  mov    %rax,%rdi
  call   <vfdlib_drawLineVertUnclipped@plt>
  jmp    L38
L110:
  movsbl -0x2c(%rbp),%edi
  mov    $0x1,%eax
  sub    -0x4(%rbp),%eax
  mov    %eax,%ecx
  mov    -0x28(%rbp),%edx
  mov    -0x1c(%rbp),%esi
  mov    -0x18(%rbp),%rax
  mov    %edi,%r8d
  mov    %rax,%rdi
  call   <vfdlib_drawLineVertUnclipped@plt>
  jmp    L38
L58:
  cmpl   $0x0,-0x4(%rbp)
  jne    L30
  cmpl   $0x0,-0x8(%rbp)
  js     L47
  movsbl -0x2c(%rbp),%edi
  mov    -0x8(%rbp),%eax
  lea    0x1(%rax),%ecx
  mov    -0x1c(%rbp),%edx
  mov    -0x20(%rbp),%esi
  mov    -0x18(%rbp),%rax
  mov    %edi,%r8d
  mov    %rax,%rdi
  call   <vfdlib_drawLineHorizUnclipped@plt>
  jmp    L38
L47:
  movsbl -0x2c(%rbp),%edi
  mov    $0x1,%eax
  sub    -0x8(%rbp),%eax
  mov    %eax,%ecx
  mov    -0x24(%rbp),%edx
  mov    -0x20(%rbp),%esi
  mov    -0x18(%rbp),%rax
  mov    %edi,%r8d
  mov    %rax,%rdi
  call   <vfdlib_drawLineHorizUnclipped@plt>
  jmp    L38
L30:
  cmpl   $0x0,-0x8(%rbp)
  jns    L53
  mov    -0x24(%rbp),%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x28(%rbp),%eax
  mov    %eax,-0x20(%rbp)
  negl   -0x4(%rbp)
  negl   -0x8(%rbp)
L53:
  cmpl   $0x0,-0x4(%rbp)
  jns    L133
  mov    -0x4(%rbp),%eax
  neg    %eax
  cmp    %eax,-0x8(%rbp)
  jle    L92
  movsbl -0x2c(%rbp),%r8d
  mov    -0x4(%rbp),%edi
  mov    -0x8(%rbp),%ecx
  mov    -0x20(%rbp),%edx
  mov    -0x1c(%rbp),%esi
  mov    -0x18(%rbp),%rax
  mov    %r8d,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  call   <drawLineHMaxUnclipped@plt>
  jmp    L38
L92:
  movsbl -0x2c(%rbp),%r8d
  mov    -0x4(%rbp),%edi
  mov    -0x8(%rbp),%ecx
  mov    -0x20(%rbp),%edx
  mov    -0x1c(%rbp),%esi
  mov    -0x18(%rbp),%rax
  mov    %r8d,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  call   <drawLineVMaxUnclipped@plt>
  jmp    L38
L133:
  mov    -0x8(%rbp),%eax
  cmp    -0x4(%rbp),%eax
  jle    L61
  movsbl -0x2c(%rbp),%r8d
  mov    -0x4(%rbp),%edi
  mov    -0x8(%rbp),%ecx
  mov    -0x20(%rbp),%edx
  mov    -0x1c(%rbp),%esi
  mov    -0x18(%rbp),%rax
  mov    %r8d,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  call   <drawLineHMaxUnclipped@plt>
  jmp    L38
L61:
  movsbl -0x2c(%rbp),%r8d
  mov    -0x4(%rbp),%edi
  mov    -0x8(%rbp),%ecx
  mov    -0x20(%rbp),%edx
  mov    -0x1c(%rbp),%esi
  mov    -0x18(%rbp),%rax
  mov    %r8d,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  call   <drawLineVMaxUnclipped@plt>
L38:
  leave
  ret
```

assistant: ```c
void vfdlib_drawLineUnclipped(char *buffer, int x0, int y0, int x1, int y1, char shade) {
  int dx = x1 - x0;
  int dy = y1 - y0;
  if (dx == 0) {
    if (dy >= 0)
      vfdlib_drawLineVertUnclipped(buffer, x0, y0, dy + 1, shade);
    else
      vfdlib_drawLineVertUnclipped(buffer, x0, y1, -dy + 1, shade);
    return;
  }
  if (dy == 0) {
    if (dx >= 0)
      vfdlib_drawLineHorizUnclipped(buffer, y0, x0, dx + 1, shade);
    else
      vfdlib_drawLineHorizUnclipped(buffer, y0, x1, -dx + 1, shade);
    return;
  }
  if (dx < 0) {
    x0 = x1;
    y0 = y1;
    dy = -dy;
    dx = -dx;
  }
  if (dy < 0) {
    if (dx > -dy)
      drawLineHMaxUnclipped(buffer, x0, y0, dx, dy, shade);
    else
      drawLineVMaxUnclipped(buffer, x0, y0, dx, dy, shade);
  } else {
    if (dx > dy)
      drawLineHMaxUnclipped(buffer, x0, y0, dx, dy, shade);
    else
      drawLineVMaxUnclipped(buffer, x0, y0, dx, dy, shade);
  }
}
```