// File: donqustix[P]SoftwareRenderer/src/main.cpp
// Function: (anonymous namespace)::rasterize_triangle(SDL_Surface*, (anonymous namespace)::Vertex, (anonymous namespace)::Vertex, (anonymous namespace)::Vertex)
void rasterize_triangle(SDL_Surface* surface, Vertex vert1, Vertex vert2, Vertex vert3) noexcept
    {
        if (vert1.position.get_y() > vert2.position.get_y())
            std::swap(vert1, vert2);
        if (vert1.position.get_y() > vert3.position.get_y())
            std::swap(vert1, vert3);
        if (vert2.position.get_y() > vert3.position.get_y())
            std::swap(vert2, vert3);

        ::scanline(surface, {vert1, vert2}, {vert1, vert3}, std::greater<>{});
        ::scanline(surface, {vert2, vert3}, {vert1, vert3}, std::less   <>{});
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x140, %rsp            # imm = 0x140
movq %rdi, %rax
leaq 0x50(%rbp), %rcx
movq %rcx, -0x130(%rbp)
leaq 0x30(%rbp), %rcx
movq %rcx, -0x120(%rbp)
leaq 0x10(%rbp), %rdi
movq %rdi, -0x128(%rbp)
movq %rax, -0x8(%rbp)
callq 0x5dd0
movq -0x120(%rbp), %rdi
movss %xmm0, -0x114(%rbp)
callq 0x5dd0
movaps %xmm0, %xmm1
movss -0x114(%rbp), %xmm0
ucomiss %xmm1, %xmm0
jbe 0x5aaf
movq -0x120(%rbp), %rsi
movq -0x128(%rbp), %rdi
callq 0x5e10
movq -0x128(%rbp), %rdi
callq 0x5dd0
movq -0x130(%rbp), %rdi
movss %xmm0, -0x134(%rbp)
callq 0x5dd0
movaps %xmm0, %xmm1
movss -0x134(%rbp), %xmm0
ucomiss %xmm1, %xmm0
jbe 0x5af2
movq -0x130(%rbp), %rsi
movq -0x128(%rbp), %rdi
callq 0x5e10
movq -0x120(%rbp), %rdi
callq 0x5dd0
movq -0x130(%rbp), %rdi
movss %xmm0, -0x138(%rbp)
callq 0x5dd0
movaps %xmm0, %xmm1
movss -0x138(%rbp), %xmm0
ucomiss %xmm1, %xmm0
jbe 0x5b35
movq -0x130(%rbp), %rsi
movq -0x120(%rbp), %rdi
callq 0x5e10
movq -0x130(%rbp), %rax
movq -0x128(%rbp), %rcx
movq -0x120(%rbp), %rdx
movq -0x8(%rbp), %rdi
movq (%rcx), %rsi
movq %rsi, -0x48(%rbp)
movq 0x8(%rcx), %rsi
movq %rsi, -0x40(%rbp)
movq 0x10(%rcx), %rsi
movq %rsi, -0x38(%rbp)
movq 0x18(%rcx), %rsi
movq %rsi, -0x30(%rbp)
movq (%rdx), %rsi
movq %rsi, -0x28(%rbp)
movq 0x8(%rdx), %rsi
movq %rsi, -0x20(%rbp)
movq 0x10(%rdx), %rsi
movq %rsi, -0x18(%rbp)
movq 0x18(%rdx), %rdx
movq %rdx, -0x10(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x88(%rbp)
movq 0x8(%rcx), %rdx
movq %rdx, -0x80(%rbp)
movq 0x10(%rcx), %rdx
movq %rdx, -0x78(%rbp)
movq 0x18(%rcx), %rcx
movq %rcx, -0x70(%rbp)
movq (%rax), %rcx
movq %rcx, -0x68(%rbp)
movq 0x8(%rax), %rcx
movq %rcx, -0x60(%rbp)
movq 0x10(%rax), %rcx
movq %rcx, -0x58(%rbp)
movq 0x18(%rax), %rax
movq %rax, -0x50(%rbp)
leaq -0x48(%rbp), %rsi
leaq -0x88(%rbp), %rdx
callq 0x5e90
movq -0x120(%rbp), %rdx
movq -0x128(%rbp), %rcx
movq -0x130(%rbp), %rax
movq -0x8(%rbp), %rdi
movq (%rdx), %rsi
movq %rsi, -0xcc(%rbp)
movq 0x8(%rdx), %rsi
movq %rsi, -0xc4(%rbp)
movq 0x10(%rdx), %rsi
movq %rsi, -0xbc(%rbp)
movq 0x18(%rdx), %rdx
movq %rdx, -0xb4(%rbp)
movq (%rax), %rdx
movq %rdx, -0xac(%rbp)
movq 0x8(%rax), %rdx
movq %rdx, -0xa4(%rbp)
movq 0x10(%rax), %rdx
movq %rdx, -0x9c(%rbp)
movq 0x18(%rax), %rdx
movq %rdx, -0x94(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x10c(%rbp)
movq 0x8(%rcx), %rdx
movq %rdx, -0x104(%rbp)
movq 0x10(%rcx), %rdx
movq %rdx, -0xfc(%rbp)
movq 0x18(%rcx), %rcx
movq %rcx, -0xf4(%rbp)
movq (%rax), %rcx
movq %rcx, -0xec(%rbp)
movq 0x8(%rax), %rcx
movq %rcx, -0xe4(%rbp)
movq 0x10(%rax), %rcx
movq %rcx, -0xdc(%rbp)
movq 0x18(%rax), %rax
movq %rax, -0xd4(%rbp)
leaq -0xcc(%rbp), %rsi
leaq -0x10c(%rbp), %rdx
callq 0x6680
addq $0x140, %rsp            # imm = 0x140
popq %rbp
retq
nop