// File: Ciaxur[P]yagb-emu/include/imgui/imgui_draw.cpp
// Function: ImGui::ShadeVertsLinearUV(ImDrawList*, int, int, ImVec2 const&, ImVec2 const&, ImVec2 const&, ImVec2 const&, bool)
void ImGui::ShadeVertsLinearUV(ImDrawList* draw_list, int vert_start_idx, int vert_end_idx, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, bool clamp)
{
    const ImVec2 size = b - a;
    const ImVec2 uv_size = uv_b - uv_a;
    const ImVec2 scale = ImVec2(
        size.x != 0.0f ? (uv_size.x / size.x) : 0.0f,
        size.y != 0.0f ? (uv_size.y / size.y) : 0.0f);

    ImDrawVert* vert_start = draw_list->VtxBuffer.Data + vert_start_idx;
    ImDrawVert* vert_end = draw_list->VtxBuffer.Data + vert_end_idx;
    if (clamp)
    {
        const ImVec2 min = ImMin(uv_a, uv_b);
        const ImVec2 max = ImMax(uv_a, uv_b);
        for (ImDrawVert* vertex = vert_start; vertex < vert_end; ++vertex)
            vertex->uv = ImClamp(uv_a + ImMul(ImVec2(vertex->pos.x, vertex->pos.y) - a, scale), min, max);
    }
    else
    {
        for (ImDrawVert* vertex = vert_start; vertex < vert_end; ++vertex)
            vertex->uv = uv_a + ImMul(ImVec2(vertex->pos.x, vertex->pos.y) - a, scale);
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x100, %rsp            # imm = 0x100
movb 0x18(%rbp), %al
movq 0x10(%rbp), %r10
movq %rdi, -0x8(%rbp)
movl %esi, -0xc(%rbp)
movl %edx, -0x10(%rbp)
movq %rcx, -0x18(%rbp)
movq %r8, -0x20(%rbp)
movq %r9, -0x28(%rbp)
andb $0x1, %al
movb %al, -0x29(%rbp)
movq -0x20(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x111700
movlpd %xmm0, -0x34(%rbp)
movq 0x10(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x111700
movlpd %xmm0, -0x3c(%rbp)
movss -0x34(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jne 0x114a12
jp 0x114a12
jmp 0x114a26
movss -0x3c(%rbp), %xmm0
divss -0x34(%rbp), %xmm0
movss %xmm0, -0xcc(%rbp)
jmp 0x114a33
xorps %xmm0, %xmm0
movss %xmm0, -0xcc(%rbp)
jmp 0x114a33
movss -0xcc(%rbp), %xmm0
movss %xmm0, -0xd0(%rbp)
movss -0x30(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jne 0x114a54
jp 0x114a54
jmp 0x114a68
movss -0x38(%rbp), %xmm0
divss -0x30(%rbp), %xmm0
movss %xmm0, -0xd4(%rbp)
jmp 0x114a75
xorps %xmm0, %xmm0
movss %xmm0, -0xd4(%rbp)
jmp 0x114a75
movss -0xd0(%rbp), %xmm0
movss -0xd4(%rbp), %xmm1
leaq -0x44(%rbp), %rdi
callq 0xbf4c0
movq -0x8(%rbp), %rax
movq 0x28(%rax), %rax
movslq -0xc(%rbp), %rcx
imulq $0x14, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0x50(%rbp)
movq -0x8(%rbp), %rax
movq 0x28(%rax), %rax
movslq -0x10(%rbp), %rcx
imulq $0x14, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0x58(%rbp)
testb $0x1, -0x29(%rbp)
je 0x114bba
movq -0x28(%rbp), %rdi
movq 0x10(%rbp), %rsi
callq 0x115940
movlpd %xmm0, -0x60(%rbp)
movq -0x28(%rbp), %rdi
movq 0x10(%rbp), %rsi
callq 0x1159e0
movlpd %xmm0, -0x68(%rbp)
movq -0x50(%rbp), %rax
movq %rax, -0x70(%rbp)
movq -0x70(%rbp), %rax
cmpq -0x58(%rbp), %rax
jae 0x114bb5
movq -0x28(%rbp), %rax
movq %rax, -0xe0(%rbp)
movq -0x70(%rbp), %rax
movss (%rax), %xmm0
movss 0x4(%rax), %xmm1
leaq -0x98(%rbp), %rdi
movq %rdi, -0xe8(%rbp)
callq 0xbf4c0
movq -0xe8(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x111700
movlpd %xmm0, -0x90(%rbp)
leaq -0x90(%rbp), %rdi
leaq -0x44(%rbp), %rsi
callq 0x115b70
movq -0xe0(%rbp), %rdi
movlpd %xmm0, -0x88(%rbp)
leaq -0x88(%rbp), %rsi
callq 0x111670
movlpd %xmm0, -0x80(%rbp)
movq -0x68(%rbp), %rax
movq %rax, -0xa0(%rbp)
movsd -0xa0(%rbp), %xmm0
leaq -0x80(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0x115a80
movlpd %xmm0, -0x78(%rbp)
movq -0x70(%rbp), %rax
movq -0x78(%rbp), %rcx
movq %rcx, 0x8(%rax)
movq -0x70(%rbp), %rax
addq $0x14, %rax
movq %rax, -0x70(%rbp)
jmp 0x114af2
jmp 0x114c7a
movq -0x50(%rbp), %rax
movq %rax, -0xa8(%rbp)
movq -0xa8(%rbp), %rax
cmpq -0x58(%rbp), %rax
jae 0x114c78
movq -0x28(%rbp), %rax
movq %rax, -0xf0(%rbp)
movq -0xa8(%rbp), %rax
movss (%rax), %xmm0
movss 0x4(%rax), %xmm1
leaq -0xc8(%rbp), %rdi
movq %rdi, -0xf8(%rbp)
callq 0xbf4c0
movq -0xf8(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x111700
movlpd %xmm0, -0xc0(%rbp)
leaq -0xc0(%rbp), %rdi
leaq -0x44(%rbp), %rsi
callq 0x115b70
movq -0xf0(%rbp), %rdi
movlpd %xmm0, -0xb8(%rbp)
leaq -0xb8(%rbp), %rsi
callq 0x111670
movlpd %xmm0, -0xb0(%rbp)
movq -0xa8(%rbp), %rax
movq -0xb0(%rbp), %rcx
movq %rcx, 0x8(%rax)
movq -0xa8(%rbp), %rax
addq $0x14, %rax
movq %rax, -0xa8(%rbp)
jmp 0x114bc5
jmp 0x114c7a
addq $0x100, %rsp            # imm = 0x100
popq %rbp
retq
nopw %cs:(%rax,%rax)