// File: /workspace/github_cpp_makefile_star2_O3/Ciaxur[P]yagb-emu/src/../include/imgui_club/imgui_memory_editor/imgui_memory_editor.h
// Function: MemoryEditor::DrawOptionsLine(MemoryEditor::Sizes const&, void*, unsigned long, unsigned long)
void DrawOptionsLine(const Sizes& s, void* mem_data, size_t mem_size, size_t base_display_addr)
    {
        IM_UNUSED(mem_data);
        ImGuiStyle& style = ImGui::GetStyle();
        const char* format_range = OptUpperCaseHex ? "Range %0*" _PRISizeT "X..%0*" _PRISizeT "X" : "Range %0*" _PRISizeT "x..%0*" _PRISizeT "x";

        // Options menu
        if (ImGui::Button("Options"))
            ImGui::OpenPopup("context");
        if (ImGui::BeginPopup("context"))
        {
            ImGui::PushItemWidth(56);
            if (ImGui::DragInt("##cols", &Cols, 0.2f, 4, 32, "%d cols")) { ContentsWidthChanged = true; if (Cols < 1) Cols = 1; }
            ImGui::PopItemWidth();
            ImGui::Checkbox("Show Data Preview", &OptShowDataPreview);
            ImGui::Checkbox("Show HexII", &OptShowHexII);
            if (ImGui::Checkbox("Show Ascii", &OptShowAscii)) { ContentsWidthChanged = true; }
            ImGui::Checkbox("Grey out zeroes", &OptGreyOutZeroes);
            ImGui::Checkbox("Uppercase Hex", &OptUpperCaseHex);

            ImGui::EndPopup();
        }

        ImGui::SameLine();
        ImGui::Text(format_range, s.AddrDigitsCount, base_display_addr, s.AddrDigitsCount, base_display_addr + mem_size - 1);
        ImGui::SameLine();
        ImGui::PushItemWidth((s.AddrDigitsCount + 1) * s.GlyphWidth + style.FramePadding.x * 2.0f);
        if (ImGui::InputText("##addr", AddrInputBuf, 32, ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_EnterReturnsTrue))
        {
            size_t goto_addr;
            if (sscanf(AddrInputBuf, "%" _PRISizeT "X", &goto_addr) == 1)
            {
                GotoAddr = goto_addr - base_display_addr;
                HighlightMin = HighlightMax = (size_t)-1;
            }
        }
        ImGui::PopItemWidth();

        if (GotoAddr != (size_t)-1)
        {
            if (GotoAddr < mem_size)
            {
                ImGui::BeginChild("##scrolling");
                ImGui::SetScrollFromPosY(ImGui::GetCursorStartPos().y + (GotoAddr / Cols) * ImGui::GetTextLineHeight());
                ImGui::EndChild();
                DataEditingAddr = DataPreviewAddr = GotoAddr;
                DataEditingTakeFocus = true;
            }
            GotoAddr = (size_t)-1;
        }
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x28, %rsp
movq %r8, %r15
movq %rcx, %r13
movq %rsi, %r12
movq %rdi, %rbx
callq 0x43b94
movq %rax, -0x50(%rbp)
leaq 0x75db1(%rip), %rax     # 0xb5460
leaq 0x75dbd(%rip), %r14     # 0xb5473
cmpb $0x0, 0xd(%rbx)
cmovneq %rax, %r14
leaq -0x38(%rbp), %rsi
movq $0x0, (%rsi)
leaq 0x75db6(%rip), %rdi     # 0xb5486
callq 0x9141e
testb %al, %al
je 0x3f6e7
leaq 0x78ba9(%rip), %rdi     # 0xb8289
xorl %esi, %esi
callq 0x56c96
leaq 0x78b9b(%rip), %rdi     # 0xb8289
xorl %esi, %esi
callq 0x573f5
testb %al, %al
je 0x3f7bc
movq %r13, -0x30(%rbp)
movss 0x758f3(%rip), %xmm0    # 0xb4ffc
callq 0x55d0a
leaq 0x4(%rbx), %r13
leaq 0x75d75(%rip), %rdi     # 0xb548e
leaq 0x75d75(%rip), %r8      # 0xb5495
movss 0x758d8(%rip), %xmm0    # 0xb5000
movq %r13, %rsi
movl $0x4, %edx
movl $0x20, %ecx
xorl %r9d, %r9d
callq 0x96766
testb %al, %al
je 0x3f753
movb $0x1, 0x38(%rbx)
cmpl $0x0, 0x4(%rbx)
jg 0x3f753
movl $0x1, (%r13)
leaq 0xd(%rbx), %r13
callq 0x560da
leaq 0x9(%rbx), %rsi
leaq 0x75d36(%rip), %rdi     # 0xb549d
callq 0x9286b
leaq 0xa(%rbx), %rsi
leaq 0x75d38(%rip), %rdi     # 0xb54af
callq 0x9286b
leaq 0xb(%rbx), %rsi
leaq 0x75d33(%rip), %rdi     # 0xb54ba
callq 0x9286b
testb %al, %al
je 0x3f794
movb $0x1, 0x38(%rbx)
leaq 0xc(%rbx), %rsi
leaq 0x75d26(%rip), %rdi     # 0xb54c5
callq 0x9286b
leaq 0x75d2a(%rip), %rdi     # 0xb54d5
movq %r13, %rsi
callq 0x9286b
callq 0x5732f
movq -0x30(%rbp), %r13
movss 0x7580c(%rip), %xmm1    # 0xb4fd0
xorps %xmm0, %xmm0
callq 0x5591d
movl (%r12), %ecx
leaq (%r15,%r13), %r8
decq %r8
movq %r14, %rdi
movl %ecx, %esi
movq %r15, %rdx
xorl %eax, %eax
callq 0x90323
xorps %xmm0, %xmm0
movss 0x757df(%rip), %xmm1    # 0xb4fd0
callq 0x5591d
movl (%r12), %eax
incl %eax
xorps %xmm0, %xmm0
cvtsi2ss %eax, %xmm0
movq -0x50(%rbp), %rax
movss 0x38(%rax), %xmm1
addss %xmm1, %xmm1
mulss 0x8(%r12), %xmm0
addss %xmm1, %xmm0
callq 0x55d0a
leaq 0x71(%rbx), %r14
leaq 0x75cb8(%rip), %rdi     # 0xb54e3
movl $0x20, %edx
movq %r14, %rsi
movl $0x22, %ecx
xorl %r8d, %r8d
xorl %r9d, %r9d
callq 0x9b17a
testb %al, %al
je 0x3f87b
leaq 0x75c9c(%rip), %rsi     # 0xb54ea
leaq -0x38(%rbp), %rdx
movq %r14, %rdi
xorl %eax, %eax
callq 0xc0c0
cmpl $0x1, %eax
jne 0x3f87b
movq -0x38(%rbp), %rax
subq %r15, %rax
movq %rax, 0x98(%rbx)
pcmpeqd %xmm0, %xmm0
movdqu %xmm0, 0xa0(%rbx)
callq 0x560da
movq 0x98(%rbx), %rax
cmpq $-0x1, %rax
je 0x3f93d
cmpq %r13, %rax
jae 0x3f932
leaq -0x38(%rbp), %rsi
movq $0x0, (%rsi)
leaq 0x75a72(%rip), %rdi     # 0xb531e
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x5207d
callq 0x55c31
shufps $0x55, %xmm0, %xmm0     # xmm0 = xmm0[1,1,1,1]
movaps %xmm0, -0x50(%rbp)
movq 0x98(%rbx), %rax
movslq 0x4(%rbx), %rcx
xorl %edx, %edx
divq %rcx
testq %rax, %rax
js 0x3f8e1
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x3f8f9
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
movss %xmm0, -0x30(%rbp)
callq 0x562cd
mulss -0x30(%rbp), %xmm0
addss -0x50(%rbp), %xmm0
movss 0x756ef(%rip), %xmm1    # 0xb5004
callq 0x569e1
callq 0x52109
movq 0x98(%rbx), %rax
movq %rax, 0x40(%rbx)
movq %rax, 0x48(%rbx)
movb $0x1, 0x50(%rbx)
movq $-0x1, 0x98(%rbx)
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq