user: 下面的汇编指令对应的C源代码是什么：

```asm
<gln_linegraphics_draw_line_if>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  mov    %ecx,0x8(%rsp)
  cmp    %r9d,%r8d
  je     L131
  mov    %edi,%ebp
  mov    %esi,%r14d
  mov    %edx,%ebx
  mov    %r8d,%r13d
  mov    %r9d,%r12d
  cmp    %edi,%edx
  jge    L132
  sub    %edx,%edi
  movl   $0xffffffff,0x4(%rsp)
  lea    (%rdi,%rdi,1),%eax
  mov    %eax,(%rsp)
  mov    0x8(%rsp),%eax
  cmp    %r14d,%eax
  jl     L105
L79:
  sub    %r14d,%eax
  cmp    %eax,%edi
  jge    L10
  mov    (%rsp),%r15d
  sub    %eax,%r15d
  cmp    %r14d,0x8(%rsp)
  je     L189
  add    %eax,%eax
  mov    $0x1,%ebx
  mov    %eax,0xc(%rsp)
  jmp    L61
  cs nopw 0x0(%rax,%rax,1)
L132:
  mov    %edx,%edi
  movl   $0x1,0x4(%rsp)
  sub    %ebp,%edi
  lea    (%rdi,%rdi,1),%eax
  mov    %eax,(%rsp)
  mov    0x8(%rsp),%eax
  cmp    %r14d,%eax
  jge    L79
L105:
  mov    %r14d,%eax
  sub    0x8(%rsp),%eax
  cmp    %eax,%edi
  jl     L175
  movl   $0xffffffff,0xc(%rsp)
L130:
  add    %eax,%eax
  mov    %eax,%r15d
  mov    %eax,0x8(%rsp)
  sub    %edi,%r15d
  cmp    %ebp,%ebx
  je     L189
  nopw   0x0(%rax,%rax,1)
L25:
  mov    %r12d,%ecx
  mov    %r13d,%edx
  mov    %r14d,%esi
  mov    %ebp,%edi
  call   <gln_linegraphics_plot_clip@plt>
  test   %r15d,%r15d
  js     L88
  mov    0x8(%rsp),%eax
  mov    %r15d,%r8d
  add    0x4(%rsp),%ebp
  sub    (%rsp),%r8d
  add    0xc(%rsp),%r14d
  lea    (%rax,%r8,1),%r15d
  cmp    %ebp,%ebx
  jne    L25
L189:
  add    $0x18,%rsp
  mov    %r12d,%ecx
  mov    %r13d,%edx
  mov    %r14d,%esi
  pop    %rbx
  mov    %ebp,%edi
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    1050 <gln_linegraphics_plot_clip@plt>
  nopl   0x0(%rax,%rax,1)
L131:
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nop
L175:
  mov    (%rsp),%r15d
  lea    (%rax,%rax,1),%ebx
  mov    %ebx,0xc(%rsp)
  mov    $0xffffffff,%ebx
  sub    %eax,%r15d
  nopl   0x0(%rax,%rax,1)
L61:
  mov    %r12d,%ecx
  mov    %r13d,%edx
  mov    %r14d,%esi
  mov    %ebp,%edi
  call   <gln_linegraphics_plot_clip@plt>
  test   %r15d,%r15d
  js     L129
  mov    (%rsp),%eax
  mov    %r15d,%r10d
  sub    0xc(%rsp),%r10d
  add    %ebx,%r14d
  add    0x4(%rsp),%ebp
  lea    (%r10,%rax,1),%r15d
  cmp    0x8(%rsp),%r14d
  jne    L61
  jmp    L189
  nop
L10:
  movl   $0x1,0xc(%rsp)
  jmp    L130
  nopl   (%rax)
L129:
  add    (%rsp),%r15d
  add    %ebx,%r14d
  cmp    %r14d,0x8(%rsp)
  jne    L61
  jmp    L189
  nopl   0x0(%rax,%rax,1)
L88:
  add    0x4(%rsp),%ebp
  add    0x8(%rsp),%r15d
  cmp    %ebp,%ebx
  jne    L25
  jmp    L189
```

assistant: ```c
void gln_linegraphics_draw_line_if(int x1, int y1, int x2, int y2, int colour1, int colour2) {
  int x, y, dx, dy, incx, incy, balance;
  if (colour1 == colour2)
    return;
  if (x2 >= x1) {
    dx = x2 - x1;
    incx = 1;
  } else {
    dx = x1 - x2;
    incx = -1;
  }
  if (y2 >= y1) {
    dy = y2 - y1;
    incy = 1;
  } else {
    dy = y1 - y2;
    incy = -1;
  }
  x = x1;
  y = y1;
  if (dx >= dy) {
    dy <<= 1;
    balance = dy - dx;
    dx <<= 1;
    while (x != x2) {
      gln_linegraphics_plot_clip(x, y, colour1, colour2);
      if (balance >= 0) {
        y += incy;
        balance -= dx;
      }
      balance += dy;
      x += incx;
    }
    gln_linegraphics_plot_clip(x, y, colour1, colour2);
  } else {
    dx <<= 1;
    balance = dx - dy;
    dy <<= 1;
    while (y != y2) {
      gln_linegraphics_plot_clip(x, y, colour1, colour2);
      if (balance >= 0) {
        x += incx;
        balance -= dy;
      }
      balance += dx;
      y += incy;
    }
    gln_linegraphics_plot_clip(x, y, colour1, colour2);
  }
}
```