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

```asm
<fractal_triangle>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %edi,-0x4(%rbp)
  mov    %esi,-0x8(%rbp)
  mov    %edx,-0xc(%rbp)
  mov    %ecx,-0x10(%rbp)
  mov    %r8d,-0x14(%rbp)
  mov    %r9d,-0x18(%rbp)
  mov    -0xc(%rbp),%eax
  sub    -0x4(%rbp),%eax
  cmp    $0xfffffffe,%eax
  jl     L25
  mov    -0xc(%rbp),%eax
  sub    -0x4(%rbp),%eax
  cmp    $0x2,%eax
  jle    L16
L25:
  mov    -0x18(%rbp),%r8d
  mov    -0x14(%rbp),%edi
  mov    -0x10(%rbp),%ecx
  mov    -0xc(%rbp),%edx
  mov    -0x8(%rbp),%esi
  mov    -0x4(%rbp),%eax
  mov    %r8d,%r9d
  mov    %edi,%r8d
  mov    %eax,%edi
  call   <drawTriangle@plt>
  mov    -0x8(%rbp),%edx
  mov    -0x18(%rbp),%eax
  add    %edx,%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %eax,%r8d
  mov    -0x4(%rbp),%edx
  mov    -0x14(%rbp),%eax
  add    %edx,%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %eax,%edi
  mov    -0x8(%rbp),%edx
  mov    -0x10(%rbp),%eax
  add    %edx,%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %eax,%ecx
  mov    -0x4(%rbp),%edx
  mov    -0xc(%rbp),%eax
  add    %edx,%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %eax,%edx
  mov    -0x8(%rbp),%esi
  mov    -0x4(%rbp),%eax
  mov    %r8d,%r9d
  mov    %edi,%r8d
  mov    %eax,%edi
  call   <fractal_triangle>
  mov    -0x10(%rbp),%edx
  mov    -0x18(%rbp),%eax
  add    %edx,%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %eax,%r8d
  mov    -0xc(%rbp),%edx
  mov    -0x14(%rbp),%eax
  add    %edx,%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %eax,%edi
  mov    -0x8(%rbp),%edx
  mov    -0x10(%rbp),%eax
  add    %edx,%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %eax,%ecx
  mov    -0x4(%rbp),%edx
  mov    -0xc(%rbp),%eax
  add    %edx,%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %eax,%edx
  mov    -0x10(%rbp),%esi
  mov    -0xc(%rbp),%eax
  mov    %r8d,%r9d
  mov    %edi,%r8d
  mov    %eax,%edi
  call   <fractal_triangle>
  mov    -0x8(%rbp),%edx
  mov    -0x18(%rbp),%eax
  add    %edx,%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %eax,%r8d
  mov    -0x4(%rbp),%edx
  mov    -0x14(%rbp),%eax
  add    %edx,%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %eax,%edi
  mov    -0x10(%rbp),%edx
  mov    -0x18(%rbp),%eax
  add    %edx,%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %eax,%ecx
  mov    -0xc(%rbp),%edx
  mov    -0x14(%rbp),%eax
  add    %edx,%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %eax,%edx
  mov    -0x18(%rbp),%esi
  mov    -0x14(%rbp),%eax
  mov    %r8d,%r9d
  mov    %edi,%r8d
  mov    %eax,%edi
  call   <fractal_triangle>
  jmp    L11
L16:
  nop
L11:
  leave
  ret
```

assistant: ```c
void fractal_triangle(int x1, int y1, int x2, int y2, int x3, int y3) {
  if (abs(x2 - x1) < 3)
    return;
  drawTriangle(x1, y1, x2, y2, x3, y3);
  fractal_triangle(x1, y1, (x1 + x2) / 2, (y1 + y2) / 2, (x1 + x3) / 2, (y1 + y3) / 2);
  fractal_triangle(x2, y2, (x1 + x2) / 2, (y1 + y2) / 2, (x2 + x3) / 2, (y2 + y3) / 2);
  fractal_triangle(x3, y3, (x2 + x3) / 2, (y2 + y3) / 2, (x1 + x3) / 2, (y1 + y3) / 2);
  return;
}
```