user: Demonstrate the C code that generates the assembly output below:

```asm
<tft_line>:
  endbr64
  push   %r15
  mov    %esi,%r15d
  push   %r14
  mov    %edi,%r14d
  push   %r13
  mov    %r8d,%r13d
  push   %r12
  mov    %ecx,%r12d
  push   %rbp
  push   %rbx
  mov    %edx,%ebx
  sub    $0x18,%rsp
  cmp    %ecx,%esi
  je     L123
  cmp    %r8d,%edx
  je     L123
  mov    %r8d,%ebp
  movl   $0x1,0xc(%rsp)
  sub    %edx,%ebp
  js     L81
  mov    %r12d,%eax
  movl   $0x1,0x8(%rsp)
  sub    %r15d,%eax
  js     L58
L19:
  add    %eax,%eax
  mov    %ebx,%edx
  mov    %r15d,%esi
  mov    %r14d,%edi
  mov    %eax,0x4(%rsp)
  add    %ebp,%ebp
  call   <tft_pixel@plt>
  mov    0x4(%rsp),%eax
  cmp    %eax,%ebp
  jge    L23
  sar    %eax
  mov    %ebp,%r13d
  sub    %eax,%r13d
  nopl   (%rax)
L36:
  test   %r13d,%r13d
  js     L13
  add    0xc(%rsp),%ebx
  add    0x8(%rsp),%r15d
  mov    %r14d,%edi
  sub    0x4(%rsp),%r13d
  mov    %ebx,%edx
  mov    %r15d,%esi
  add    %ebp,%r13d
  call   <tft_pixel@plt>
  cmp    %r12d,%r15d
  jne    L36
L138:
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax,%rax,1)
L23:
  mov    %eax,%r12d
  mov    %ebp,%eax
  sar    %eax
  sub    %eax,%r12d
L94:
  test   %r12d,%r12d
  js     L145
L82:
  add    0x8(%rsp),%r15d
  add    0xc(%rsp),%ebx
  mov    %r14d,%edi
  sub    %ebp,%r12d
  mov    %ebx,%edx
  mov    %r15d,%esi
  add    0x4(%rsp),%r12d
  call   <tft_pixel@plt>
  cmp    %r13d,%ebx
  je     L138
  test   %r12d,%r12d
  jns    L82
L145:
  add    0xc(%rsp),%ebx
  mov    %r15d,%esi
  mov    %r14d,%edi
  add    0x4(%rsp),%r12d
  mov    %ebx,%edx
  call   <tft_pixel@plt>
  cmp    %ebx,%r13d
  jne    L94
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L58:
  mov    %r15d,%eax
  movl   $0xffffffff,0x8(%rsp)
  sub    %r12d,%eax
  jmp    L19
  nopl   0x0(%rax,%rax,1)
L81:
  mov    %edx,%ebp
  mov    %r12d,%eax
  movl   $0xffffffff,0xc(%rsp)
  movl   $0x1,0x8(%rsp)
  sub    %r8d,%ebp
  sub    %r15d,%eax
  jns    L19
  jmp    L58
  nopl   0x0(%rax,%rax,1)
L13:
  add    0x8(%rsp),%r15d
  mov    %ebx,%edx
  mov    %r14d,%edi
  add    %ebp,%r13d
  mov    %r15d,%esi
  call   <tft_pixel@plt>
  cmp    %r15d,%r12d
  jne    L36
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   (%rax)
L123:
  add    $0x18,%rsp
  mov    %r13d,%r8d
  mov    %r12d,%ecx
  mov    %ebx,%edx
  mov    %r15d,%esi
  pop    %rbx
  mov    %r14d,%edi
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    1060 <tft_fill@plt>
```

assistant: ```c
void tft_line(int color, int x0, int y0, int x1, int y1) {
  int dx, dy, stepx, stepy, fraction;
  if (x0 == x1 || y0 == y1) {
    tft_fill(color, x0, y0, x1, y1);
    return;
  }
  dy = y1 - y0;
  if (dy < 0) {
    dy = -dy;
    stepy = -1;
  } else {
    stepy = 1;
  }
  dx = x1 - x0;
  if (dx < 0) {
    dx = -dx;
    stepx = -1;
  } else {
    stepx = 1;
  }
  dy <<= 1;
  dx <<= 1;
  tft_pixel(color, x0, y0);
  if (dx > dy) {
    fraction = dy - (dx >> 1);
    while (x0 != x1) {
      if (fraction >= 0) {
        y0 += stepy;
        fraction -= dx;
      }
      x0 += stepx;
      fraction += dy;
      tft_pixel(color, x0, y0);
    }
  } else {
    fraction = dx - (dy >> 1);
    while (y0 != y1) {
      if (fraction >= 0) {
        x0 += stepx;
        fraction -= dy;
      }
      y0 += stepy;
      fraction += dx;
      tft_pixel(color, x0, y0);
    }
  }
}
```