LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_cpp_makefile_star2_O2/Ciaxur[P]yagb-emu/include/imgui/imgui_demo.cpp
// Function: ImGui::ShowFontSelector(char const*)
void ImGui::ShowFontSelector(const char* label)
{
    ImGuiIO& io = ImGui::GetIO();
    ImFont* font_current = ImGui::GetFont();
    if (ImGui::BeginCombo(label, font_current->GetDebugName()))
    {
        for (int n = 0; n < io.Fonts->Fonts.Size; n++)
        {
            ImFont* font = io.Fonts->Fonts[n];
            ImGui::PushID((void*)font);
            if (ImGui::Selectable(font->GetDebugName(), font == font_current))
                io.FontDefault = font;
            ImGui::PopID();
        }
        ImGui::EndCombo();
    }
    ImGui::SameLine();
    HelpMarker(
        "- Load additional fonts with io.Fonts->AddFontFromFileTTF().\n"
        "- The font atlas is built when calling io.Fonts->GetTexDataAsXXXX() or io.Fonts->Build().\n"
        "- Read FAQ and docs/FONTS.md for more details.\n"
        "- If you need to add/remove fonts at runtime (e.g. for DPI change), do it before calling NewFrame().");
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rdi, %r12
callq 0x37e82
movq %rax, %rbx
callq 0x42b1a
movq %rax, %r14
movq 0x48(%rax), %rax
leaq 0x56(%rax), %rsi
testq %rax, %rax
leaq 0x4d54f(%rip), %rax     # 0xac204
cmoveq %rax, %rsi
xorl %r15d, %r15d
movq %r12, %rdi
xorl %edx, %edx
callq 0x7cfa7
testb %al, %al
je 0x5ed3a
leaq -0x30(%rbp), %r12
movq 0xa0(%rbx), %rdi
cmpl 0x40(%rdi), %r15d
jge 0x5ed35
addq $0x40, %rdi
movl %r15d, %esi
callq 0x4c056
movq (%rax), %r13
movq %r13, %rdi
callq 0x42f1f
movq 0x48(%r13), %rax
leaq 0x56(%rax), %rdi
testq %rax, %rax
leaq 0x4d500(%rip), %rax     # 0xac204
cmoveq %rax, %rdi
xorl %esi, %esi
cmpq %r14, %r13
sete %sil
andq $0x0, -0x30(%rbp)
xorl %edx, %edx
movq %r12, %rcx
callq 0x7d81c
testb %al, %al
je 0x5ed2b
movq %r13, 0xb0(%rbx)
callq 0x42fea
incl %r15d
jmp 0x5ecce
callq 0x7d6af
movss 0x3d2ae(%rip), %xmm1    # 0x9bff0
xorps %xmm0, %xmm0
callq 0x437ec
leaq 0x44cec(%rip), %rdi     # 0xa3a3d
callq 0x530bc
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop
// File: /workspace/github_cpp_makefile_star2_O2/Ciaxur[P]yagb-emu/include/imgui/imgui_demo.cpp
// Function: ShowDemoWindowWidgets()::Funcs::MyCallback(ImGuiInputTextCallbackData*)
static int MyCallback(ImGuiInputTextCallbackData* data)
                {
                    if (data->EventFlag == ImGuiInputTextFlags_CallbackCompletion)
                    {
                        data->InsertChars(data->CursorPos, "..");
                    }
                    else if (data->EventFlag == ImGuiInputTextFlags_CallbackHistory)
                    {
                        if (data->EventKey == ImGuiKey_UpArrow)
                        {
                            data->DeleteChars(0, data->BufTextLen);
                            data->InsertChars(0, "Pressed Up!");
                            data->SelectAll();
                        }
                        else if (data->EventKey == ImGuiKey_DownArrow)
                        {
                            data->DeleteChars(0, data->BufTextLen);
                            data->InsertChars(0, "Pressed Down!");
                            data->SelectAll();
                        }
                    }
                    else if (data->EventFlag == ImGuiInputTextFlags_CallbackEdit)
                    {
                        // Toggle casing of first character
                        char c = data->Buf[0];
                        if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) data->Buf[0] ^= 32;
                        data->BufDirty = true;

                        // Increment a counter
                        int* p_int = (int*)data->UserData;
                        *p_int = *p_int + 1;
                    }
                    return 0;
                }

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %rbx
pushq %rax
movq %rdi, %rbx
movl (%rdi), %eax
cmpl $0x80000, %eax          # imm = 0x80000
je 0x5ee05
cmpl $0x80, %eax
je 0x5ede2
cmpl $0x40, %eax
jne 0x5ee53
movl 0x2c(%rbx), %esi
leaq 0x4cc21(%rip), %rdx     # 0xab9f7
movq %rbx, %rdi
xorl %ecx, %ecx
callq 0x84c0a
jmp 0x5ee53
movl 0x14(%rbx), %eax
cmpl $0x4, %eax
je 0x5ee29
cmpl $0x3, %eax
jne 0x5ee53
movl 0x20(%rbx), %edx
movq %rbx, %rdi
xorl %esi, %esi
callq 0x84b9c
leaq 0x489a0(%rip), %rdx     # 0xa77a3
jmp 0x5ee3d
movq 0x18(%rbx), %rax
movb (%rax), %cl
movl %ecx, %edx
andb $-0x21, %dl
addb $-0x41, %dl
cmpb $0x19, %dl
ja 0x5ee1d
xorb $0x20, %cl
movb %cl, (%rax)
movb $0x1, 0x28(%rbx)
movq 0x8(%rbx), %rax
incl (%rax)
jmp 0x5ee53
movl 0x20(%rbx), %edx
movq %rbx, %rdi
xorl %esi, %esi
callq 0x84b9c
leaq 0x48972(%rip), %rdx     # 0xa77af
movq %rbx, %rdi
xorl %esi, %esi
xorl %ecx, %ecx
callq 0x84c0a
andl $0x0, 0x30(%rbx)
movl 0x20(%rbx), %eax
movl %eax, 0x34(%rbx)
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_cpp_makefile_star2_O2/Ciaxur[P]yagb-emu/include/imgui/imgui_demo.cpp
// Function: ShowDemoWindowWidgets()::Funcs::MyResizeCallback(ImGuiInputTextCallbackData*)
static int MyResizeCallback(ImGuiInputTextCallbackData* data)
                {
                    if (data->EventFlag == ImGuiInputTextFlags_CallbackResize)
                    {
                        ImVector<char>* my_str = (ImVector<char>*)data->UserData;
                        IM_ASSERT(my_str->begin() == data->Buf);
                        my_str->resize(data->BufSize); // NB: On resizing calls, generally data->BufSize == data->BufTextLen + 1
                        data->Buf = my_str->begin();
                    }
                    return 0;
                }

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
cmpl $0x40000, (%rdi)        # imm = 0x40000
jne 0x5eec1
movq %rdi, %rbx
movq 0x8(%rdi), %r14
movq 0x8(%r14), %rax
cmpq 0x18(%rdi), %rax
jne 0x5eec8
movl 0x24(%rbx), %esi
movq %r14, %rdi
callq 0x49cb6
movq 0x8(%r14), %rax
movq %rax, 0x18(%rbx)
xorl %eax, %eax
popq %rbx
popq %r14
popq %rbp
retq
leaq 0x488ee(%rip), %rdi     # 0xa77bd
leaq 0x43ae1(%rip), %rsi     # 0xa29b7
leaq 0x488fd(%rip), %rcx     # 0xa77da
movl $0x52f, %edx            # imm = 0x52F
callq 0xc140
// File: /workspace/github_cpp_makefile_star2_O2/Ciaxur[P]yagb-emu/include/imgui/imgui_demo.cpp
// Function: ShowDemoWindowTables()::MyTreeNode::DisplayNode(MyTreeNode const*, MyTreeNode const*)
static void DisplayNode(const MyTreeNode* node, const MyTreeNode* all_nodes)
                {
                    ImGui::TableNextRow();
                    ImGui::TableNextColumn();
                    const bool is_folder = (node->ChildCount > 0);
                    if (is_folder)
                    {
                        bool open = ImGui::TreeNodeEx(node->Name, ImGuiTreeNodeFlags_SpanFullWidth);
                        ImGui::TableNextColumn();
                        ImGui::TextDisabled("--");
                        ImGui::TableNextColumn();
                        ImGui::TextUnformatted(node->Type);
                        if (open)
                        {
                            for (int child_n = 0; child_n < node->ChildCount; child_n++)
                                DisplayNode(&all_nodes[node->ChildIdx + child_n], all_nodes);
                            ImGui::TreePop();
                        }
                    }
                    else
                    {
                        ImGui::TreeNodeEx(node->Name, ImGuiTreeNodeFlags_Leaf | ImGuiTreeNodeFlags_Bullet | ImGuiTreeNodeFlags_NoTreePushOnOpen | ImGuiTreeNodeFlags_SpanFullWidth);
                        ImGui::TableNextColumn();
                        ImGui::Text("%d", node->Size);
                        ImGui::TableNextColumn();
                        ImGui::TextUnformatted(node->Type);
                    }
                }

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
xorps %xmm0, %xmm0
xorl %edi, %edi
callq 0x74d33
callq 0x75209
cmpl $0x0, 0x18(%rbx)
movq (%rbx), %rdi
jle 0x5f178
movl $0x1000, %esi           # imm = 0x1000
callq 0x89346
movl %eax, %r14d
callq 0x75209
leaq 0x5957a(%rip), %rdi     # 0xb86ae
xorl %eax, %eax
callq 0x79774
callq 0x75209
movq 0x8(%rbx), %rdi
xorl %esi, %esi
callq 0x7959d
testb %r14b, %r14b
je 0x5f1b2
xorl %r14d, %r14d
leaq 0x7f596(%rip), %r15     # 0xde6f0
cmpl 0x18(%rbx), %r14d
jge 0x5f1bd
movslq 0x14(%rbx), %rdi
addq %r14, %rdi
shlq $0x5, %rdi
addq %r15, %rdi
callq 0x5f0f6
incq %r14
jmp 0x5f15a
movl $0x1308, %esi           # imm = 0x1308
callq 0x89346
callq 0x75209
movl 0x10(%rbx), %esi
leaq 0x445f1(%rip), %rdi     # 0xa3782
xorl %eax, %eax
callq 0x795ac
callq 0x75209
movq 0x8(%rbx), %rdi
xorl %esi, %esi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x7959d
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x89637
// File: /workspace/github_cpp_makefile_star2_O2/Ciaxur[P]yagb-emu/include/imgui/imgui_demo.cpp
// Function: (anonymous namespace)::MyItem::CompareWithSortSpecs(void const*, void const*)
CompareWithSortSpecs(const void* lhs, const void* rhs)
    {
        const MyItem* a = (const MyItem*)lhs;
        const MyItem* b = (const MyItem*)rhs;
        for (int n = 0; n < s_current_sort_specs->SpecsCount; n++)
        {
            // Here we identify columns using the ColumnUserID value that we ourselves passed to TableSetupColumn()
            // We could also choose to identify columns based on their index (sort_spec->ColumnIndex), which is simpler!
            const ImGuiTableColumnSortSpecs* sort_spec = &s_current_sort_specs->Specs[n];
            int delta = 0;
            switch (sort_spec->ColumnUserID)
            {
            case MyItemColumnID_ID:             delta = (a->ID - b->ID);                break;
            case MyItemColumnID_Name:           delta = (strcmp(a->Name, b->Name));     break;
            case MyItemColumnID_Quantity:       delta = (a->Quantity - b->Quantity);    break;
            case MyItemColumnID_Description:    delta = (strcmp(a->Name, b->Name));     break;
            default: IM_ASSERT(0); break;
            }
            if (delta > 0)
                return (sort_spec->SortDirection == ImGuiSortDirection_Ascending) ? +1 : -1;
            if (delta < 0)
                return (sort_spec->SortDirection == ImGuiSortDirection_Ascending) ? -1 : +1;
        }

        // qsort() is instable so always return a way to differenciate items.
        // Your own compare function may want to avoid fallback on implicit sort specs e.g. a Name compare if it wasn't already part of the sort specs.
        return (a->ID - b->ID);
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq 0x858c2(%rip), %rcx     # 0xe4bb0
movl 0x8(%rcx), %eax
xorl %r15d, %r15d
testl %eax, %eax
cmovlel %r15d, %eax
imulq $0xc, %rax, %r13
addq $0xc, %r13
leaq 0x430ff(%rip), %rdx     # 0xa2408
movq %rsi, -0x30(%rbp)
movq %rcx, -0x38(%rbp)
movq %rdi, %r14
leaq 0xc(%r15), %r12
cmpq %r12, %r13
je 0x5f37a
movq (%rcx), %rbx
movl (%rbx,%r15), %eax
cmpq $0x4, %rax
ja 0x5f3a1
movslq (%rdx,%rax,4), %rax
addq %rdx, %rax
jmpq *%rax
movq 0x8(%r14), %rdi
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rsi
callq 0xc760
leaq 0x430bd(%rip), %rdx     # 0xa2408
movq %r14, %rdi
movq -0x38(%rbp), %rcx
movq -0x30(%rbp), %rsi
jmp 0x5f364
movl 0x10(%rdi), %eax
subl 0x10(%rsi), %eax
jmp 0x5f364
movl (%rdi), %eax
subl (%rsi), %eax
testl %eax, %eax
jg 0x5f380
movq %r12, %r15
jns 0x5f314
xorl %eax, %eax
cmpb $0x1, -0x4(%rbx,%r12)
setne %al
jmp 0x5f38b
movl (%rdi), %eax
subl (%rsi), %eax
jmp 0x5f392
xorl %eax, %eax
cmpb $0x1, 0x8(%rbx,%r15)
sete %al
leal -0x1(,%rax,2), %eax
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x3fd74(%rip), %rdi     # 0x9f11c
leaq 0x43608(%rip), %rsi     # 0xa29b7
leaq 0x4c3cb(%rip), %rcx     # 0xab781
movl $0xd00, %edx            # imm = 0xD00
callq 0xc140
// File: /workspace/github_cpp_makefile_star2_O2/Ciaxur[P]yagb-emu/include/imgui/imgui_demo.cpp
// Function: ExampleAppConsole::ExampleAppConsole()
ExampleAppConsole()
    {
        ClearLog();
        memset(InputBuf, 0, sizeof(InputBuf));
        HistoryPos = -1;

        // "CLASSIFY" is here to provide the test case where "C"+[tab] completes to "CL" and display multiple matches.
        Commands.push_back("HELP");
        Commands.push_back("HISTORY");
        Commands.push_back("CLEAR");
        Commands.push_back("CLASSIFY");
        AutoScroll = true;
        ScrollToBottom = false;
        AddLog("Welcome to Dear ImGui!");
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x10, %rsp
movq %rdi, %r14
leaq 0x110(%rdi), %rbx
addq $0x138, %rdi            # imm = 0x138
xorps %xmm0, %xmm0
movups %xmm0, 0x120(%r14)
movups %xmm0, 0x110(%r14)
movups %xmm0, 0x100(%r14)
leaq 0x3c719(%rip), %rsi     # 0x9bf21
callq 0x352ee
movq %r14, %rdi
callq 0x5fd78
movl $0x100, %edx            # imm = 0x100
movq %r14, %rdi
xorl %esi, %esi
callq 0xc270
orl $-0x1, 0x130(%r14)
leaq 0x4ce14(%rip), %rax     # 0xac647
leaq -0x28(%rbp), %rsi
movq %rax, (%rsi)
movq %rbx, %rdi
callq 0x5fdb6
leaq 0x4ce03(%rip), %rax     # 0xac64c
leaq -0x28(%rbp), %rsi
movq %rax, (%rsi)
movq %rbx, %rdi
callq 0x5fdb6
leaq 0x4cdf5(%rip), %rax     # 0xac654
leaq -0x28(%rbp), %rsi
movq %rax, (%rsi)
movq %rbx, %rdi
callq 0x5fdb6
leaq 0x4cde5(%rip), %rax     # 0xac65a
leaq -0x28(%rbp), %rsi
movq %rax, (%rsi)
movq %rbx, %rdi
callq 0x5fdb6
movw $0x1, 0x250(%r14)
leaq 0x4cdce(%rip), %rsi     # 0xac663
movq %r14, %rdi
xorl %eax, %eax
callq 0x5fe04
addq $0x10, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
jmp 0x5f8b9
jmp 0x5f8b9
jmp 0x5f8b9
jmp 0x5f8b9
movq %rax, %r15
jmp 0x5f8c8
movq %rax, %r15
leaq 0x238(%r14), %rdi
callq 0x49b4c
leaq 0x100(%r14), %r12
addq $0x120, %r14            # imm = 0x120
movq %r14, %rdi
callq 0x5fec2
movq %rbx, %rdi
callq 0x5fede
movq %r12, %rdi
callq 0x5fec2
movq %r15, %rdi
callq 0xc580
// File: /workspace/github_cpp_makefile_star2_O2/Ciaxur[P]yagb-emu/include/imgui/imgui_demo.cpp
// Function: ExampleAppDocuments::ExampleAppDocuments()
ExampleAppDocuments()
    {
        Documents.push_back(MyDocument("Lettuce",             true,  ImVec4(0.4f, 0.8f, 0.4f, 1.0f)));
        Documents.push_back(MyDocument("Eggplant",            true,  ImVec4(0.8f, 0.5f, 1.0f, 1.0f)));
        Documents.push_back(MyDocument("Carrot",              true,  ImVec4(1.0f, 0.8f, 0.5f, 1.0f)));
        Documents.push_back(MyDocument("Tomato",              false, ImVec4(1.0f, 0.3f, 0.4f, 1.0f)));
        Documents.push_back(MyDocument("A Rather Long Title", false));
        Documents.push_back(MyDocument("Some Document",       false));
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
subq $0x20, %rsp
movq %rdi, %rbx
xorps %xmm0, %xmm0
movups %xmm0, (%rdi)
leaq 0x4c77d(%rip), %rax     # 0xad4d8
leaq -0x30(%rbp), %rsi
movq %rax, (%rsi)
movl $0x101, 0x8(%rsi)       # imm = 0x101
movaps 0x41600(%rip), %xmm0    # 0xa2370
movups %xmm0, 0xc(%rsi)
callq 0x610a6
leaq 0x4c760(%rip), %rax     # 0xad4e0
leaq -0x30(%rbp), %rsi
movq %rax, (%rsi)
movl $0x101, 0x8(%rsi)       # imm = 0x101
movaps 0x415eb(%rip), %xmm0    # 0xa2380
movups %xmm0, 0xc(%rsi)
movq %rbx, %rdi
callq 0x610a6
leaq 0x4c741(%rip), %rax     # 0xad4e9
leaq -0x30(%rbp), %rsi
movq %rax, (%rsi)
movl $0x101, 0x8(%rsi)       # imm = 0x101
movaps 0x415d3(%rip), %xmm0    # 0xa2390
movups %xmm0, 0xc(%rsi)
movq %rbx, %rdi
callq 0x610a6
leaq 0x4c720(%rip), %rax     # 0xad4f0
leaq -0x30(%rbp), %rsi
movq %rax, (%rsi)
andl $0x0, 0x8(%rsi)
movaps 0x415be(%rip), %xmm0    # 0xa23a0
movups %xmm0, 0xc(%rsi)
movq %rbx, %rdi
callq 0x610a6
leaq 0x4c702(%rip), %rax     # 0xad4f7
leaq -0x30(%rbp), %rsi
movq %rax, (%rsi)
andl $0x0, 0x8(%rsi)
movaps 0x3b169(%rip), %xmm0    # 0x9bf70
movups %xmm0, 0xc(%rsi)
movq %rbx, %rdi
callq 0x610a6
leaq 0x4c6f1(%rip), %rax     # 0xad50b
leaq -0x30(%rbp), %rsi
movq %rax, (%rsi)
andl $0x0, 0x8(%rsi)
movaps 0x3b144(%rip), %xmm0    # 0x9bf70
movups %xmm0, 0xc(%rsi)
movq %rbx, %rdi
callq 0x610a6
addq $0x20, %rsp
popq %rbx
popq %r14
popq %rbp
retq
jmp 0x60e4b
jmp 0x60e4b
jmp 0x60e4b
jmp 0x60e4b
jmp 0x60e4b
movq %rax, %r14
movq %rbx, %rdi
callq 0x61104
movq %r14, %rdi
callq 0xc580
// File: /workspace/github_cpp_makefile_star2_O2/Ciaxur[P]yagb-emu/include/imgui/imgui_demo.cpp
// Function: MyDocument::DisplayContextMenu(MyDocument*)
static void DisplayContextMenu(MyDocument* doc)
    {
        if (!ImGui::BeginPopupContextItem())
            return;

        char buf[256];
        sprintf(buf, "Save %s", doc->Name);
        if (ImGui::MenuItem(buf, "CTRL+S", false, doc->Open))
            doc->DoSave();
        if (ImGui::MenuItem("Close", "CTRL+W", false, doc->Open))
            doc->DoQueueClose();
        ImGui::EndPopup();
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
subq $0x100, %rsp            # imm = 0x100
movq %rdi, %rbx
pushq $0x1
popq %rsi
xorl %edi, %edi
callq 0x44e6b
testb %al, %al
je 0x60f1b
movq (%rbx), %rdx
leaq 0x4c68c(%rip), %rsi     # 0xad553
leaq -0x110(%rbp), %r14
movq %r14, %rdi
xorl %eax, %eax
callq 0xc8d0
movzbl 0x8(%rbx), %ecx
leaq 0x4c678(%rip), %rsi     # 0xad55b
movq %r14, %rdi
xorl %edx, %edx
callq 0x8b583
testb %al, %al
je 0x60ef5
movb $0x0, 0xa(%rbx)
movzbl 0x8(%rbx), %ecx
leaq 0x46818(%rip), %rdi     # 0xa7718
leaq 0x4c65b(%rip), %rsi     # 0xad562
xorl %edx, %edx
callq 0x8b583
testb %al, %al
je 0x60f16
movb $0x1, 0xb(%rbx)
callq 0x44bbe
addq $0x100, %rsp            # imm = 0x100
popq %rbx
popq %r14
popq %rbp
retq
nop
// File: /workspace/github_cpp_makefile_star2_O2/Ciaxur[P]yagb-emu/include/imgui/imgui_demo.cpp
// Function: MyDocument::DisplayContents(MyDocument*)
static void DisplayContents(MyDocument* doc)
    {
        ImGui::PushID(doc);
        ImGui::Text("Document \"%s\"", doc->Name);
        ImGui::PushStyleColor(ImGuiCol_Text, doc->Color);
        ImGui::TextWrapped("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.");
        ImGui::PopStyleColor();
        if (ImGui::Button("Modify", ImVec2(100, 0)))
            doc->Dirty = true;
        ImGui::SameLine();
        if (ImGui::Button("Save", ImVec2(100, 0)))
            doc->DoSave();
        ImGui::ColorEdit3("color", &doc->Color.x);  // Useful to test drag and drop and hold-dragged-to-open-tab behavior.
        ImGui::PopID();
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
subq $0x10, %rsp
movq %rdi, %rbx
callq 0x42f1f
movq (%rbx), %rsi
leaq 0x4c624(%rip), %rdi     # 0xad569
xorl %eax, %eax
callq 0x795ac
leaq 0xc(%rbx), %r14
xorl %edi, %edi
movq %r14, %rsi
callq 0x35e60
leaq 0x4c616(%rip), %rdi     # 0xad577
xorl %eax, %eax
callq 0x7986e
pushq $0x1
popq %rdi
callq 0x35eb4
leaq -0x18(%rbp), %rsi
movq $0x42c80000, (%rsi)     # imm = 0x42C80000
leaq 0x4c671(%rip), %rdi     # 0xad5f3
callq 0x7a64b
testb %al, %al
je 0x60f8f
movb $0x1, 0xa(%rbx)
movss 0x3b059(%rip), %xmm1    # 0x9bff0
xorps %xmm0, %xmm0
callq 0x437ec
leaq -0x18(%rbp), %rsi
movq $0x42c80000, (%rsi)     # imm = 0x42C80000
leaq 0x4308c(%rip), %rdi     # 0xa403d
callq 0x7a64b
testb %al, %al
je 0x60fbe
movb $0x0, 0xa(%rbx)
leaq 0x49693(%rip), %rdi     # 0xaa658
movq %r14, %rsi
xorl %edx, %edx
callq 0x85094
callq 0x42fea
addq $0x10, %rsp
popq %rbx
popq %r14
popq %rbp
retq
nop
// File: /workspace/github_cpp_makefile_star2_O2/Ciaxur[P]yagb-emu/include/imgui/imgui_draw.cpp
// Function: ImDrawListSharedData::ImDrawListSharedData()
ImDrawListSharedData::ImDrawListSharedData()
{
    memset(this, 0, sizeof(*this));
    for (int i = 0; i < IM_ARRAYSIZE(ArcFastVtx); i++)
    {
        const float a = ((float)i * 2 * IM_PI) / (float)IM_ARRAYSIZE(ArcFastVtx);
        ArcFastVtx[i] = ImVec2(ImCos(a), ImSin(a));
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
subq $0x10, %rsp
movq %rdi, %rbx
xorl %r14d, %r14d
movl $0xd8, %edx
xorl %esi, %esi
callq 0xc270
cmpq $0xc, %r14
je 0x61c8b
cvtsi2ss %r14d, %xmm0
addss %xmm0, %xmm0
mulss 0x4c02e(%rip), %xmm0    # 0xadc80
divss 0x3acde(%rip), %xmm0    # 0x9c938
movss %xmm0, -0x14(%rbp)
callq 0xc610
movss %xmm0, -0x18(%rbp)
movss -0x14(%rbp), %xmm0
callq 0xc050
movss -0x18(%rbp), %xmm1
movss %xmm1, 0x30(%rbx,%r14,8)
movss %xmm0, 0x34(%rbx,%r14,8)
incq %r14
jmp 0x61c3b
addq $0x10, %rsp
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_cpp_makefile_star2_O2/Ciaxur[P]yagb-emu/include/imgui/imgui_draw.cpp
// Function: ImDrawListSharedData::SetCircleSegmentMaxError(float)
void ImDrawListSharedData::SetCircleSegmentMaxError(float max_error)
{
    if (CircleSegmentMaxError == max_error)
        return;
    CircleSegmentMaxError = max_error;
    for (int i = 0; i < IM_ARRAYSIZE(CircleSegmentCounts); i++)
    {
        const float radius = (float)i;
        const int segment_count = IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_CALC(radius, CircleSegmentMaxError);
        CircleSegmentCounts[i] = (ImU8)ImMin(segment_count, 255);
    }
}

// Assembly:
movss 0x18(%rdi), %xmm1
ucomiss %xmm0, %xmm1
jne 0x61ca1
jp 0x61ca1
retq
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
movss %xmm0, 0x18(%rdi)
xorl %r14d, %r14d
pushq $0xc
popq %r15
cmpq $0x40, %r14
je 0x61d17
cvtsi2ss %r14d, %xmm1
movaps %xmm1, %xmm0
subss 0x18(%rbx), %xmm0
divss %xmm1, %xmm0
callq 0xc4f0
movss 0x4bfa6(%rip), %xmm1    # 0xadc84
divss %xmm0, %xmm1
cvttss2si %xmm1, %eax
movl $0x200, %ecx            # imm = 0x200
cmpl %ecx, %eax
jl 0x61cf4
movl $0x200, %eax            # imm = 0x200
cmpl $0xd, %eax
jge 0x61cfc
movl %r15d, %eax
movl $0xff, %ecx
cmpl %ecx, %eax
jl 0x61d0a
movl $0xff, %eax
movb %al, 0x90(%rbx,%r14)
incq %r14
jmp 0x61cba
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_cpp_makefile_star2_O2/Ciaxur[P]yagb-emu/include/imgui/imgui_draw.cpp
// Function: ImDrawList::_ResetForNewFrame()
void ImDrawList::_ResetForNewFrame()
{
    // Verify that the ImDrawCmd fields we want to memcmp() are contiguous in memory.
    // (those should be IM_STATIC_ASSERT() in theory but with our pre C++11 setup the whole check doesn't compile with GCC)
    IM_ASSERT(IM_OFFSETOF(ImDrawCmd, ClipRect) == 0);
    IM_ASSERT(IM_OFFSETOF(ImDrawCmd, TextureId) == sizeof(ImVec4));
    IM_ASSERT(IM_OFFSETOF(ImDrawCmd, VtxOffset) == sizeof(ImVec4) + sizeof(ImTextureID));

    CmdBuffer.resize(0);
    IdxBuffer.resize(0);
    VtxBuffer.resize(0);
    Flags = _Data->InitialFlags;
    memset(&_CmdHeader, 0, sizeof(_CmdHeader));
    _VtxCurrentIdx = 0;
    _VtxWritePtr = NULL;
    _IdxWritePtr = NULL;
    _ClipRectStack.resize(0);
    _TextureIdStack.resize(0);
    _Path.resize(0);
    _Splitter.Clear();
    CmdBuffer.push_back(ImDrawCmd());
    _FringeScale = 1.0f;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %rbx
subq $0x38, %rsp
movq %rdi, %rbx
xorl %esi, %esi
callq 0x6f004
leaq 0x10(%rbx), %rdi
xorl %esi, %esi
callq 0x49a10
leaq 0x20(%rbx), %rdi
xorl %esi, %esi
callq 0x6f042
movq 0x38(%rbx), %rax
movl 0x2c(%rax), %eax
movl %eax, 0x30(%rbx)
xorps %xmm0, %xmm0
movups %xmm0, 0x88(%rbx)
movups %xmm0, 0x98(%rbx)
andl $0x0, 0x34(%rbx)
leaq 0x58(%rbx), %rdi
movups %xmm0, 0x48(%rbx)
xorl %esi, %esi
callq 0x6f080
leaq 0x68(%rbx), %rdi
xorl %esi, %esi
callq 0x6f0be
leaq 0x78(%rbx), %rdi
xorl %esi, %esi
callq 0x60ca4
movabsq $0x100000000, %rax      # imm = 0x100000000
movq %rax, 0xa8(%rbx)
leaq -0x40(%rbp), %rsi
xorps %xmm0, %xmm0
movaps %xmm0, 0x20(%rsi)
movaps %xmm0, 0x10(%rsi)
movaps %xmm0, (%rsi)
andq $0x0, 0x30(%rsi)
movq %rbx, %rdi
callq 0x6f0fc
movl $0x3f800000, 0xc0(%rbx) # imm = 0x3F800000
addq $0x38, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_cpp_makefile_star2_O2/Ciaxur[P]yagb-emu/include/imgui/imgui_draw.cpp
// Function: ImDrawList::_ClearFreeMemory()
void ImDrawList::_ClearFreeMemory()
{
    CmdBuffer.clear();
    IdxBuffer.clear();
    VtxBuffer.clear();
    Flags = ImDrawListFlags_None;
    _VtxCurrentIdx = 0;
    _VtxWritePtr = NULL;
    _IdxWritePtr = NULL;
    _ClipRectStack.clear();
    _TextureIdStack.clear();
    _Path.clear();
    _Splitter.ClearFreeMemory();
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %rbx
pushq %rax
movq %rdi, %rbx
callq 0x6f16c
leaq 0x10(%rbx), %rdi
callq 0x4c100
leaq 0x20(%rbx), %rdi
callq 0x6f194
andq $0x0, 0x30(%rbx)
leaq 0x58(%rbx), %rdi
xorps %xmm0, %xmm0
movups %xmm0, 0x48(%rbx)
callq 0x6f1bc
leaq 0x68(%rbx), %rdi
callq 0x6f1e4
leaq 0x78(%rbx), %rdi
callq 0x60ce2
addq $0xa8, %rbx
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x61e2c
// File: /workspace/github_cpp_makefile_star2_O2/Ciaxur[P]yagb-emu/include/imgui/imgui_draw.cpp
// Function: ImDrawListSplitter::ClearFreeMemory()
void ImDrawListSplitter::ClearFreeMemory()
{
    for (int i = 0; i < _Channels.Size; i++)
    {
        if (i == _Current)
            memset(&_Channels[i], 0, sizeof(_Channels[i]));  // Current channel is a copy of CmdBuffer/IdxBuffer, don't destruct again
        _Channels[i]._CmdBuffer.clear();
        _Channels[i]._IdxBuffer.clear();
    }
    _Current = 0;
    _Count = 1;
    _Channels.clear();
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %r14
leaq 0x8(%rdi), %rbx
xorl %r15d, %r15d
cmpl (%rbx), %r15d
jge 0x61e8b
cmpl (%r14), %r15d
jne 0x61e5f
movq %rbx, %rdi
movl %r15d, %esi
callq 0x6f49a
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
movups %xmm0, 0x10(%rax)
movq %rbx, %rdi
movl %r15d, %esi
callq 0x6f49a
movq %rax, %rdi
callq 0x6f16c
movq %rbx, %rdi
movl %r15d, %esi
callq 0x6f49a
leaq 0x10(%rax), %rdi
callq 0x4c100
incl %r15d
jmp 0x61e40
movabsq $0x100000000, %rax      # imm = 0x100000000
movq %rax, (%r14)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x4b184
// File: /workspace/github_cpp_makefile_star2_O2/Ciaxur[P]yagb-emu/include/imgui/imgui_draw.cpp
// Function: ImDrawList::CloneOutput() const
ImDrawList* ImDrawList::CloneOutput() const
{
    ImDrawList* dst = IM_NEW(ImDrawList(_Data));
    dst->CmdBuffer = CmdBuffer;
    dst->IdxBuffer = IdxBuffer;
    dst->VtxBuffer = VtxBuffer;
    dst->Flags = Flags;
    return dst;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
movl $0xc8, %edi
callq 0x3440d
movq %rax, %r14
movq 0x38(%rbx), %r15
movl $0xc8, %edx
movq %rax, %rdi
xorl %esi, %esi
callq 0xc270
movq %r15, 0x38(%r14)
movq %r14, %rdi
movq %rbx, %rsi
callq 0x6f20c
leaq 0x10(%rbx), %rsi
leaq 0x10(%r14), %rdi
callq 0x6f244
leaq 0x20(%rbx), %rsi
leaq 0x20(%r14), %rdi
callq 0x6f27c
movl 0x30(%rbx), %eax
movl %eax, 0x30(%r14)
movq %r14, %rax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
nop
// File: /workspace/github_cpp_makefile_star2_O2/Ciaxur[P]yagb-emu/include/imgui/imgui_draw.cpp
// Function: ImDrawList::AddDrawCmd()
void ImDrawList::AddDrawCmd()
{
    ImDrawCmd draw_cmd;
    draw_cmd.ClipRect = _CmdHeader.ClipRect;    // Same as calling ImDrawCmd_HeaderCopy()
    draw_cmd.TextureId = _CmdHeader.TextureId;
    draw_cmd.VtxOffset = _CmdHeader.VtxOffset;
    draw_cmd.IdxOffset = IdxBuffer.Size;

    IM_ASSERT(draw_cmd.ClipRect.x <= draw_cmd.ClipRect.z && draw_cmd.ClipRect.y <= draw_cmd.ClipRect.w);
    CmdBuffer.push_back(draw_cmd);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
xorps %xmm0, %xmm0
movaps %xmm0, -0x20(%rbp)
andq $0x0, -0x10(%rbp)
movups 0x88(%rdi), %xmm0
movaps %xmm0, -0x40(%rbp)
movq 0x98(%rdi), %rax
movq %rax, -0x30(%rbp)
movl 0xa0(%rdi), %eax
movl %eax, -0x28(%rbp)
movl 0x10(%rdi), %eax
movl %eax, -0x24(%rbp)
movss -0x38(%rbp), %xmm0
ucomiss -0x40(%rbp), %xmm0
jb 0x61f74
movss -0x34(%rbp), %xmm0
ucomiss -0x3c(%rbp), %xmm0
jb 0x61f74
leaq -0x40(%rbp), %rsi
callq 0x6f0fc
addq $0x40, %rsp
popq %rbp
retq
leaq 0x52502(%rip), %rdi     # 0xb447d
leaq 0x52554(%rip), %rsi     # 0xb44d6
leaq 0x5256a(%rip), %rcx     # 0xb44f3
movl $0x1bc, %edx            # imm = 0x1BC
callq 0xc140
nop
// File: /workspace/github_cpp_makefile_star2_O2/Ciaxur[P]yagb-emu/include/imgui/imgui_draw.cpp
// Function: ImDrawList::_PopUnusedDrawCmd()
void ImDrawList::_PopUnusedDrawCmd()
{
    if (CmdBuffer.Size == 0)
        return;
    ImDrawCmd* curr_cmd = &CmdBuffer.Data[CmdBuffer.Size - 1];
    if (curr_cmd->ElemCount == 0 && curr_cmd->UserCallback == NULL)
        CmdBuffer.pop_back();
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
movslq (%rdi), %rcx
testq %rcx, %rcx
je 0x61fb9
movq 0x8(%rdi), %rax
imulq $0x38, %rcx, %rcx
cmpl $0x0, -0x18(%rax,%rcx)
jne 0x61fb9
addq %rcx, %rax
cmpq $0x0, -0x10(%rax)
je 0x61fbb
popq %rbp
retq
popq %rbp
jmp 0x6f2b4
nop
// File: /workspace/github_cpp_makefile_star2_O2/Ciaxur[P]yagb-emu/include/imgui/imgui_draw.cpp
// Function: ImDrawList::AddCallback(void (*)(ImDrawList const*, ImDrawCmd const*), void*)
void ImDrawList::AddCallback(ImDrawCallback callback, void* callback_data)
{
    ImDrawCmd* curr_cmd = &CmdBuffer.Data[CmdBuffer.Size - 1];
    IM_ASSERT(curr_cmd->UserCallback == NULL);
    if (curr_cmd->ElemCount != 0)
    {
        AddDrawCmd();
        curr_cmd = &CmdBuffer.Data[CmdBuffer.Size - 1];
    }
    curr_cmd->UserCallback = callback;
    curr_cmd->UserCallbackData = callback_data;

    AddDrawCmd(); // Force a new command after us (see comment below)
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq 0x8(%rdi), %rax
movslq (%rdi), %rcx
imulq $0x38, %rcx, %rcx
cmpq $0x0, -0x10(%rax,%rcx)
jne 0x6201e
movq %rdx, %rbx
movq %rsi, %r15
movq %rdi, %r14
addq %rcx, %rax
cmpl $0x0, -0x18(%rax)
je 0x62004
movq %r14, %rdi
callq 0x61f16
movslq (%r14), %rax
imulq $0x38, %rax, %rax
addq 0x8(%r14), %rax
movq %r15, -0x10(%rax)
movq %rbx, -0x8(%rax)
movq %r14, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x61f16
leaq 0x524ec(%rip), %rdi     # 0xb4511
leaq 0x524aa(%rip), %rsi     # 0xb44d6
leaq 0x524ff(%rip), %rcx     # 0xb4532
movl $0x1ce, %edx            # imm = 0x1CE
callq 0xc140
nop
// File: /workspace/github_cpp_makefile_star2_O2/Ciaxur[P]yagb-emu/include/imgui/imgui_draw.cpp
// Function: ImDrawList::_OnChangedClipRect()
void ImDrawList::_OnChangedClipRect()
{
    // If current command is used with different settings we need to add a new command
    ImDrawCmd* curr_cmd = &CmdBuffer.Data[CmdBuffer.Size - 1];
    if (curr_cmd->ElemCount != 0 && memcmp(&curr_cmd->ClipRect, &_CmdHeader.ClipRect, sizeof(ImVec4)) != 0)
    {
        AddDrawCmd();
        return;
    }
    IM_ASSERT(curr_cmd->UserCallback == NULL);

    // Try to merge with previous command if it matches, else use current command
    ImDrawCmd* prev_cmd = curr_cmd - 1;
    if (curr_cmd->ElemCount == 0 && CmdBuffer.Size > 1 && ImDrawCmd_HeaderCompare(&_CmdHeader, prev_cmd) == 0 && prev_cmd->UserCallback == NULL)
    {
        CmdBuffer.pop_back();
        return;
    }

    curr_cmd->ClipRect = _CmdHeader.ClipRect;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
movq 0x8(%rdi), %r15
movslq (%rdi), %rcx
imulq $0x38, %rcx, %rdx
leaq (%r15,%rdx), %r14
addq $-0x38, %r14
movl 0x20(%r14), %eax
testl %eax, %eax
je 0x62095
movdqu 0x88(%rbx), %xmm0
movdqu (%r14), %xmm1
pcmpeqb %xmm0, %xmm1
pmovmskb %xmm1, %esi
cmpl $0xffff, %esi           # imm = 0xFFFF
je 0x62095
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x61f16
addq %rdx, %r15
cmpq $0x0, -0x10(%r15)
jne 0x620ee
cmpl $0x2, %ecx
jl 0x620c6
testl %eax, %eax
jne 0x620c6
leaq -0x70(%r15), %rsi
leaq 0x88(%rbx), %rdi
pushq $0x1c
popq %rdx
callq 0xc5f0
testl %eax, %eax
jne 0x620c6
cmpq $0x0, -0x48(%r15)
je 0x620dc
movups 0x88(%rbx), %xmm0
movups %xmm0, (%r14)
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x6f2b4
leaq 0x5241c(%rip), %rdi     # 0xb4511
leaq 0x523da(%rip), %rsi     # 0xb44d6
leaq 0x52464(%rip), %rcx     # 0xb4567
movl $0x1ea, %edx            # imm = 0x1EA
callq 0xc140
nop
// File: /workspace/github_cpp_makefile_star2_O2/Ciaxur[P]yagb-emu/include/imgui/imgui_draw.cpp
// Function: ImDrawList::_OnChangedTextureID()
void ImDrawList::_OnChangedTextureID()
{
    // If current command is used with different settings we need to add a new command
    ImDrawCmd* curr_cmd = &CmdBuffer.Data[CmdBuffer.Size - 1];
    if (curr_cmd->ElemCount != 0 && curr_cmd->TextureId != _CmdHeader.TextureId)
    {
        AddDrawCmd();
        return;
    }
    IM_ASSERT(curr_cmd->UserCallback == NULL);

    // Try to merge with previous command if it matches, else use current command
    ImDrawCmd* prev_cmd = curr_cmd - 1;
    if (curr_cmd->ElemCount == 0 && CmdBuffer.Size > 1 && ImDrawCmd_HeaderCompare(&_CmdHeader, prev_cmd) == 0 && prev_cmd->UserCallback == NULL)
    {
        CmdBuffer.pop_back();
        return;
    }

    curr_cmd->TextureId = _CmdHeader.TextureId;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
movq %rdi, %rbx
movq 0x8(%rdi), %rax
movslq (%rdi), %rcx
imulq $0x38, %rcx, %rdx
leaq (%rax,%rdx), %r14
movl -0x18(%rax,%rdx), %eax
testl %eax, %eax
je 0x62148
movq -0x28(%r14), %rdx
cmpq 0x98(%rbx), %rdx
je 0x62148
movq %rbx, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0x61f16
cmpq $0x0, -0x10(%r14)
jne 0x62192
cmpl $0x2, %ecx
jl 0x62176
testl %eax, %eax
jne 0x62176
leaq -0x70(%r14), %rsi
leaq 0x88(%rbx), %rdi
pushq $0x1c
popq %rdx
callq 0xc5f0
testl %eax, %eax
jne 0x62176
cmpq $0x0, -0x48(%r14)
je 0x62186
movq 0x98(%rbx), %rax
movq %rax, -0x28(%r14)
popq %rbx
popq %r14
popq %rbp
retq
movq %rbx, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0x6f2b4
leaq 0x52378(%rip), %rdi     # 0xb4511
leaq 0x52336(%rip), %rsi     # 0xb44d6
leaq 0x523e6(%rip), %rcx     # 0xb458d
movl $0x200, %edx            # imm = 0x200
callq 0xc140
nop
// File: /workspace/github_cpp_makefile_star2_O2/Ciaxur[P]yagb-emu/include/imgui/imgui_draw.cpp
// Function: ImDrawList::_OnChangedVtxOffset()
void ImDrawList::_OnChangedVtxOffset()
{
    // We don't need to compare curr_cmd->VtxOffset != _CmdHeader.VtxOffset because we know it'll be different at the time we call this.
    _VtxCurrentIdx = 0;
    ImDrawCmd* curr_cmd = &CmdBuffer.Data[CmdBuffer.Size - 1];
    //IM_ASSERT(curr_cmd->VtxOffset != _CmdHeader.VtxOffset); // See #3349
    if (curr_cmd->ElemCount != 0)
    {
        AddDrawCmd();
        return;
    }
    IM_ASSERT(curr_cmd->UserCallback == NULL);
    curr_cmd->VtxOffset = _CmdHeader.VtxOffset;
}

// Assembly:
andl $0x0, 0x34(%rdi)
movq 0x8(%rdi), %rax
movslq (%rdi), %rcx
imulq $0x38, %rcx, %rcx
cmpl $0x0, -0x18(%rax,%rcx)
jne 0x61f16
addq %rcx, %rax
cmpq $0x0, -0x10(%rax)
jne 0x621e0
movl 0xa0(%rdi), %ecx
movl %ecx, -0x20(%rax)
retq
pushq %rbp
movq %rsp, %rbp
leaq 0x52326(%rip), %rdi     # 0xb4511
leaq 0x522e4(%rip), %rsi     # 0xb44d6
leaq 0x523bb(%rip), %rcx     # 0xb45b4
movl $0x218, %edx            # imm = 0x218
callq 0xc140
nop
// File: /workspace/github_cpp_makefile_star2_O2/Ciaxur[P]yagb-emu/include/imgui/imgui_draw.cpp
// Function: ImDrawList::PushClipRect(ImVec2, ImVec2, bool)
void ImDrawList::PushClipRect(ImVec2 cr_min, ImVec2 cr_max, bool intersect_with_current_clip_rect)
{
    ImVec4 cr(cr_min.x, cr_min.y, cr_max.x, cr_max.y);
    if (intersect_with_current_clip_rect)
    {
        ImVec4 current = _CmdHeader.ClipRect;
        if (cr.x < current.x) cr.x = current.x;
        if (cr.y < current.y) cr.y = current.y;
        if (cr.z > current.z) cr.z = current.z;
        if (cr.w > current.w) cr.w = current.w;
    }
    cr.z = ImMax(cr.x, cr.z);
    cr.w = ImMax(cr.y, cr.w);

    _ClipRectStack.push_back(cr);
    _CmdHeader.ClipRect = cr;
    _OnChangedClipRect();
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
subq $0x10, %rsp
movq %rdi, %rbx
movaps %xmm0, %xmm2
shufps $0x55, %xmm0, %xmm2     # xmm2 = xmm2[1,1],xmm0[1,1]
movaps %xmm1, %xmm5
shufps $0x55, %xmm1, %xmm5     # xmm5 = xmm5[1,1],xmm1[1,1]
movss %xmm0, -0x20(%rbp)
movss %xmm2, -0x1c(%rbp)
testl %esi, %esi
je 0x62276
movss 0x88(%rbx), %xmm3
movss 0x8c(%rbx), %xmm6
ucomiss %xmm0, %xmm3
jbe 0x6224b
movss %xmm3, -0x20(%rbp)
movaps %xmm3, %xmm0
movss 0x90(%rbx), %xmm4
movss 0x94(%rbx), %xmm3
ucomiss %xmm2, %xmm6
jbe 0x62268
movss %xmm6, -0x1c(%rbp)
movaps %xmm6, %xmm2
minss %xmm1, %xmm4
ucomiss %xmm3, %xmm5
ja 0x6227c
movaps %xmm5, %xmm3
jmp 0x6227c
movaps %xmm5, %xmm3
movaps %xmm1, %xmm4
movaps %xmm4, %xmm1
cmpless %xmm0, %xmm1
andps %xmm1, %xmm0
andnps %xmm4, %xmm1
orps %xmm0, %xmm1
leaq -0x20(%rbp), %r14
movss %xmm1, 0x8(%r14)
movaps %xmm3, %xmm0
cmpless %xmm2, %xmm0
andps %xmm0, %xmm2
andnps %xmm3, %xmm0
orps %xmm2, %xmm0
movss %xmm0, 0xc(%r14)
leaq 0x58(%rbx), %rdi
movq %r14, %rsi
callq 0x6f2e2
movups (%r14), %xmm0
movups %xmm0, 0x88(%rbx)
movq %rbx, %rdi
callq 0x6203e
addq $0x10, %rsp
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_cpp_makefile_star2_O2/Ciaxur[P]yagb-emu/include/imgui/imgui_draw.cpp
// Function: ImDrawList::PrimReserve(int, int)
void ImDrawList::PrimReserve(int idx_count, int vtx_count)
{
    // Large mesh support (when enabled)
    IM_ASSERT_PARANOID(idx_count >= 0 && vtx_count >= 0);
    if (sizeof(ImDrawIdx) == 2 && (_VtxCurrentIdx + vtx_count >= (1 << 16)) && (Flags & ImDrawListFlags_AllowVtxOffset))
    {
        // FIXME: In theory we should be testing that vtx_count <64k here.
        // In practice, RenderText() relies on reserving ahead for a worst case scenario so it is currently useful for us
        // to not make that check until we rework the text functions to handle clipping and large horizontal lines better.
        _CmdHeader.VtxOffset = VtxBuffer.Size;
        _OnChangedVtxOffset();
    }

    ImDrawCmd* draw_cmd = &CmdBuffer.Data[CmdBuffer.Size - 1];
    draw_cmd->ElemCount += idx_count;

    int vtx_buffer_old_size = VtxBuffer.Size;
    VtxBuffer.resize(vtx_buffer_old_size + vtx_count);
    _VtxWritePtr = VtxBuffer.Data + vtx_buffer_old_size;

    int idx_buffer_old_size = IdxBuffer.Size;
    IdxBuffer.resize(idx_buffer_old_size + idx_count);
    _IdxWritePtr = IdxBuffer.Data + idx_buffer_old_size;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movl %edx, %r15d
movl %esi, %r14d
movq %rdi, %rbx
movl 0x34(%rdi), %eax
addl %edx, %eax
cmpl $0x10000, %eax          # imm = 0x10000
jb 0x623ef
testb $0x8, 0x30(%rbx)
je 0x623ef
movl 0x20(%rbx), %eax
movl %eax, 0xa0(%rbx)
movq %rbx, %rdi
callq 0x621b2
movq 0x8(%rbx), %rax
movslq (%rbx), %rcx
imulq $0x38, %rcx, %rcx
addl %r14d, -0x18(%rax,%rcx)
leaq 0x20(%rbx), %rdi
movslq 0x20(%rbx), %r12
addl %r12d, %r15d
movl %r15d, %esi
callq 0x6f042
imulq $0x14, %r12, %rax
addq 0x28(%rbx), %rax
movq %rax, 0x48(%rbx)
leaq 0x10(%rbx), %rdi
movslq 0x10(%rbx), %r15
addl %r15d, %r14d
movl %r14d, %esi
callq 0x49a10
addq %r15, %r15
addq 0x18(%rbx), %r15
movq %r15, 0x50(%rbx)
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
nop
// File: /workspace/github_cpp_makefile_star2_O2/Ciaxur[P]yagb-emu/include/imgui/imgui_draw.cpp
// Function: ImDrawList::PrimUnreserve(int, int)
void ImDrawList::PrimUnreserve(int idx_count, int vtx_count)
{
    IM_ASSERT_PARANOID(idx_count >= 0 && vtx_count >= 0);

    ImDrawCmd* draw_cmd = &CmdBuffer.Data[CmdBuffer.Size - 1];
    draw_cmd->ElemCount -= idx_count;
    VtxBuffer.shrink(VtxBuffer.Size - vtx_count);
    IdxBuffer.shrink(IdxBuffer.Size - idx_count);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
movl %esi, %ebx
movq %rdi, %r14
movq 0x8(%rdi), %rax
movslq (%rdi), %rcx
imulq $0x38, %rcx, %rcx
subl %esi, -0x18(%rax,%rcx)
addq $0x20, %rdi
movl 0x20(%r14), %esi
subl %edx, %esi
callq 0x6f3e0
movl 0x10(%r14), %esi
addq $0x10, %r14
subl %ebx, %esi
movq %r14, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0x6f40a
// File: /workspace/github_cpp_makefile_star2_O2/Ciaxur[P]yagb-emu/include/imgui/imgui_draw.cpp
// Function: ImDrawList::PathArcToFast(ImVec2 const&, float, int, int)
void ImDrawList::PathArcToFast(const ImVec2& center, float radius, int a_min_of_12, int a_max_of_12)
{
    if (radius == 0.0f || a_min_of_12 > a_max_of_12)
    {
        _Path.push_back(center);
        return;
    }

    // For legacy reason the PathArcToFast() always takes angles where 2*PI is represented by 12,
    // but it is possible to set IM_DRAWLIST_ARCFAST_TESSELATION_MULTIPLIER to a higher value. This should compile to a no-op otherwise.
#if IM_DRAWLIST_ARCFAST_TESSELLATION_MULTIPLIER != 1
    a_min_of_12 *= IM_DRAWLIST_ARCFAST_TESSELLATION_MULTIPLIER;
    a_max_of_12 *= IM_DRAWLIST_ARCFAST_TESSELLATION_MULTIPLIER;
#endif

    _Path.reserve(_Path.Size + (a_max_of_12 - a_min_of_12 + 1));
    for (int a = a_min_of_12; a <= a_max_of_12; a++)
    {
        const ImVec2& c = _Data->ArcFastVtx[a % IM_ARRAYSIZE(_Data->ArcFastVtx)];
        _Path.push_back(ImVec2(center.x + c.x * radius, center.y + c.y * radius));
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movl %ecx, %ebx
movl %edx, %r15d
movq %rsi, %r14
xorps %xmm1, %xmm1
movss %xmm0, -0x2c(%rbp)
ucomiss %xmm1, %xmm0
setp %al
setne %cl
orb %al, %cl
movl %ebx, %eax
subl %edx, %eax
setge %dl
leaq 0x78(%rdi), %r13
testb %dl, %cl
jne 0x634d8
movq %r13, %rdi
movq %r14, %rsi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x4c382
movq %rdi, %r12
movl 0x78(%rdi), %ecx
leal (%rax,%rcx), %esi
incl %esi
movq %r13, %rdi
callq 0x4c3d0
cmpl %ebx, %r15d
jg 0x63540
movq 0x38(%r12), %rcx
movl %r15d, %eax
cltd
pushq $0xc
popq %rsi
idivl %esi
movslq %edx, %rax
movss 0x30(%rcx,%rax,8), %xmm0
movss -0x2c(%rbp), %xmm2
mulss %xmm2, %xmm0
addss (%r14), %xmm0
movss 0x34(%rcx,%rax,8), %xmm1
mulss %xmm2, %xmm1
addss 0x4(%r14), %xmm1
movss %xmm0, -0x34(%rbp)
movss %xmm1, -0x30(%rbp)
movq %r13, %rdi
leaq -0x34(%rbp), %rsi
callq 0x4c382
incl %r15d
jmp 0x634eb
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop
// File: /workspace/github_cpp_makefile_star2_O2/Ciaxur[P]yagb-emu/include/imgui/imgui_draw.cpp
// Function: ImDrawList::PathArcTo(ImVec2 const&, float, float, float, int)
void ImDrawList::PathArcTo(const ImVec2& center, float radius, float a_min, float a_max, int num_segments)
{
    if (radius == 0.0f)
    {
        _Path.push_back(center);
        return;
    }

    // Note that we are adding a point at both a_min and a_max.
    // If you are trying to draw a full closed circle you don't want the overlapping points!
    _Path.reserve(_Path.Size + (num_segments + 1));
    for (int i = 0; i <= num_segments; i++)
    {
        const float a = a_min + ((float)i / (float)num_segments) * (a_max - a_min);
        _Path.push_back(ImVec2(center.x + ImCos(a) * radius, center.y + ImSin(a) * radius));
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x28, %rsp
movq %rsi, %r14
movq %rdi, %r15
addq $0x78, %r15
xorps %xmm3, %xmm3
ucomiss %xmm3, %xmm0
jne 0x6358e
jp 0x6358e
movq %r15, %rdi
movq %r14, %rsi
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x4c382
movl %edx, %ebx
movss %xmm0, -0x38(%rbp)
movl (%r15), %eax
leal (%rbx,%rax), %esi
incl %esi
movq %r15, %rdi
movss %xmm2, -0x2c(%rbp)
movss %xmm1, -0x34(%rbp)
callq 0x4c3d0
cvtsi2ss %ebx, %xmm0
movss %xmm0, -0x3c(%rbp)
movss -0x2c(%rbp), %xmm0
subss -0x34(%rbp), %xmm0
movss %xmm0, -0x2c(%rbp)
xorl %r13d, %r13d
leaq -0x4c(%rbp), %r12
cmpl %ebx, %r13d
jg 0x63648
cvtsi2ss %r13d, %xmm0
divss -0x3c(%rbp), %xmm0
mulss -0x2c(%rbp), %xmm0
addss -0x34(%rbp), %xmm0
movss %xmm0, -0x44(%rbp)
movss (%r14), %xmm1
movss %xmm1, -0x30(%rbp)
callq 0xc610
mulss -0x38(%rbp), %xmm0
addss -0x30(%rbp), %xmm0
movss %xmm0, -0x30(%rbp)
movss 0x4(%r14), %xmm0
movss %xmm0, -0x40(%rbp)
movss -0x44(%rbp), %xmm0
callq 0xc050
mulss -0x38(%rbp), %xmm0
addss -0x40(%rbp), %xmm0
movss -0x30(%rbp), %xmm1
movss %xmm1, -0x4c(%rbp)
movss %xmm0, -0x48(%rbp)
movq %r15, %rdi
movq %r12, %rsi
callq 0x4c382
incl %r13d
jmp 0x635ce
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_cpp_makefile_star2_O2/Ciaxur[P]yagb-emu/include/imgui/imgui_draw.cpp
// Function: ImBezierCubicCalc(ImVec2 const&, ImVec2 const&, ImVec2 const&, ImVec2 const&, float)
ImVec2 ImBezierCubicCalc(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, float t)
{
    float u = 1.0f - t;
    float w1 = u * u * u;
    float w2 = 3 * u * u * t;
    float w3 = 3 * u * t * t;
    float w4 = t * t * t;
    return ImVec2(w1 * p1.x + w2 * p2.x + w3 * p3.x + w4 * p4.x, w1 * p1.y + w2 * p2.y + w3 * p3.y + w4 * p4.y);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
movss 0x38995(%rip), %xmm3    # 0x9bff8
subss %xmm0, %xmm3
movaps %xmm3, %xmm1
mulss %xmm3, %xmm1
mulss %xmm3, %xmm1
movss 0x3898a(%rip), %xmm2    # 0x9c004
mulss %xmm3, %xmm2
mulss %xmm2, %xmm3
mulss %xmm0, %xmm3
mulss %xmm0, %xmm2
mulss %xmm0, %xmm2
movaps %xmm0, %xmm4
mulss %xmm0, %xmm4
mulss %xmm0, %xmm4
movss (%rsi), %xmm0
mulss %xmm3, %xmm0
movss (%rdi), %xmm5
mulss %xmm1, %xmm5
addss %xmm0, %xmm5
movss (%rdx), %xmm6
mulss %xmm2, %xmm6
addss %xmm5, %xmm6
movss (%rcx), %xmm0
mulss %xmm4, %xmm0
mulss 0x4(%rsi), %xmm3
addss %xmm6, %xmm0
mulss 0x4(%rdi), %xmm1
addss %xmm3, %xmm1
mulss 0x4(%rdx), %xmm2
mulss 0x4(%rcx), %xmm4
addss %xmm1, %xmm2
addss %xmm2, %xmm4
unpcklps %xmm4, %xmm0            # xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1]
popq %rbp
retq
// File: /workspace/github_cpp_makefile_star2_O2/Ciaxur[P]yagb-emu/include/imgui/imgui_draw.cpp
// Function: ImDrawList::PathBezierCubicCurveTo(ImVec2 const&, ImVec2 const&, ImVec2 const&, int)
void ImDrawList::PathBezierCubicCurveTo(const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, int num_segments)
{
    ImVec2 p1 = _Path.back();
    if (num_segments == 0)
    {
        PathBezierCubicCurveToCasteljau(&_Path, p1.x, p1.y, p2.x, p2.y, p3.x, p3.y, p4.x, p4.y, _Data->CurveTessellationTol, 0); // Auto-tessellated
    }
    else
    {
        float t_step = 1.0f / (float)num_segments;
        for (int i_step = 1; i_step <= num_segments; i_step++)
            _Path.push_back(ImBezierCubicCalc(p1, p2, p3, p4, t_step * i_step));
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x38, %rsp
movl %r8d, %ebx
movq %rcx, -0x38(%rbp)
movq %rdx, %r12
movq %rsi, %r14
movq %rdi, %r13
leaq 0x78(%rdi), %r15
movq %r15, %rdi
callq 0x60c6c
movq (%rax), %rax
movq %rax, -0x50(%rbp)
testl %ebx, %ebx
je 0x637f2
movl %ebx, %ecx
movq %r14, -0x40(%rbp)
movq -0x38(%rbp), %rbx
cvtsi2ss %ecx, %xmm0
movss 0x3885e(%rip), %xmm1    # 0x9bff8
divss %xmm0, %xmm1
movss %xmm1, -0x2c(%rbp)
xorl %r13d, %r13d
testl %ecx, %ecx
cmovgl %ecx, %r13d
negl %r13d
pushq $0x1
popq %r14
leal (%r14,%r13), %eax
cmpl $0x1, %eax
je 0x63840
cvtsi2ss %r14d, %xmm0
mulss -0x2c(%rbp), %xmm0
leaq -0x50(%rbp), %rdi
movq -0x40(%rbp), %rsi
movq %r12, %rdx
movq %rbx, %rcx
callq 0x63657
movlps %xmm0, -0x48(%rbp)
movq %r15, %rdi
leaq -0x48(%rbp), %rsi
callq 0x4c382
incl %r14d
jmp 0x637b3
movq %rax, %rcx
shrq $0x20, %rcx
movd %ecx, %xmm1
movd %eax, %xmm0
movss (%r14), %xmm2
movss 0x4(%r14), %xmm3
movss (%r12), %xmm4
movss 0x4(%r12), %xmm5
movq -0x38(%rbp), %rax
movss (%rax), %xmm6
movss 0x4(%rax), %xmm7
movq 0x38(%r13), %rax
movss 0x14(%rax), %xmm8
movss %xmm8, (%rsp)
movq %r15, %rdi
xorl %esi, %esi
callq 0x6384f
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq