// File: /workspace/github_cpp_makefile_star2_O2/Ciaxur[P]yagb-emu/include/imgui/imgui_widgets.cpp
// Function: ImGui::DataTypeApplyOp(int, int, void*, void const*, void const*)
void ImGui::DataTypeApplyOp(ImGuiDataType data_type, int op, void* output, const void* arg1, const void* arg2)
{
    IM_ASSERT(op == '+' || op == '-');
    switch (data_type)
    {
        case ImGuiDataType_S8:
            if (op == '+') { *(ImS8*)output  = ImAddClampOverflow(*(const ImS8*)arg1,  *(const ImS8*)arg2,  IM_S8_MIN,  IM_S8_MAX); }
            if (op == '-') { *(ImS8*)output  = ImSubClampOverflow(*(const ImS8*)arg1,  *(const ImS8*)arg2,  IM_S8_MIN,  IM_S8_MAX); }
            return;
        case ImGuiDataType_U8:
            if (op == '+') { *(ImU8*)output  = ImAddClampOverflow(*(const ImU8*)arg1,  *(const ImU8*)arg2,  IM_U8_MIN,  IM_U8_MAX); }
            if (op == '-') { *(ImU8*)output  = ImSubClampOverflow(*(const ImU8*)arg1,  *(const ImU8*)arg2,  IM_U8_MIN,  IM_U8_MAX); }
            return;
        case ImGuiDataType_S16:
            if (op == '+') { *(ImS16*)output = ImAddClampOverflow(*(const ImS16*)arg1, *(const ImS16*)arg2, IM_S16_MIN, IM_S16_MAX); }
            if (op == '-') { *(ImS16*)output = ImSubClampOverflow(*(const ImS16*)arg1, *(const ImS16*)arg2, IM_S16_MIN, IM_S16_MAX); }
            return;
        case ImGuiDataType_U16:
            if (op == '+') { *(ImU16*)output = ImAddClampOverflow(*(const ImU16*)arg1, *(const ImU16*)arg2, IM_U16_MIN, IM_U16_MAX); }
            if (op == '-') { *(ImU16*)output = ImSubClampOverflow(*(const ImU16*)arg1, *(const ImU16*)arg2, IM_U16_MIN, IM_U16_MAX); }
            return;
        case ImGuiDataType_S32:
            if (op == '+') { *(ImS32*)output = ImAddClampOverflow(*(const ImS32*)arg1, *(const ImS32*)arg2, IM_S32_MIN, IM_S32_MAX); }
            if (op == '-') { *(ImS32*)output = ImSubClampOverflow(*(const ImS32*)arg1, *(const ImS32*)arg2, IM_S32_MIN, IM_S32_MAX); }
            return;
        case ImGuiDataType_U32:
            if (op == '+') { *(ImU32*)output = ImAddClampOverflow(*(const ImU32*)arg1, *(const ImU32*)arg2, IM_U32_MIN, IM_U32_MAX); }
            if (op == '-') { *(ImU32*)output = ImSubClampOverflow(*(const ImU32*)arg1, *(const ImU32*)arg2, IM_U32_MIN, IM_U32_MAX); }
            return;
        case ImGuiDataType_S64:
            if (op == '+') { *(ImS64*)output = ImAddClampOverflow(*(const ImS64*)arg1, *(const ImS64*)arg2, IM_S64_MIN, IM_S64_MAX); }
            if (op == '-') { *(ImS64*)output = ImSubClampOverflow(*(const ImS64*)arg1, *(const ImS64*)arg2, IM_S64_MIN, IM_S64_MAX); }
            return;
        case ImGuiDataType_U64:
            if (op == '+') { *(ImU64*)output = ImAddClampOverflow(*(const ImU64*)arg1, *(const ImU64*)arg2, IM_U64_MIN, IM_U64_MAX); }
            if (op == '-') { *(ImU64*)output = ImSubClampOverflow(*(const ImU64*)arg1, *(const ImU64*)arg2, IM_U64_MIN, IM_U64_MAX); }
            return;
        case ImGuiDataType_Float:
            if (op == '+') { *(float*)output = *(const float*)arg1 + *(const float*)arg2; }
            if (op == '-') { *(float*)output = *(const float*)arg1 - *(const float*)arg2; }
            return;
        case ImGuiDataType_Double:
            if (op == '+') { *(double*)output = *(const double*)arg1 + *(const double*)arg2; }
            if (op == '-') { *(double*)output = *(const double*)arg1 - *(const double*)arg2; }
            return;
        case ImGuiDataType_COUNT: break;
    }
    IM_ASSERT(0);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
cmpl $0x2b, %esi
je 0x7dee9
cmpl $0x2d, %esi
jne 0x7e2a5
cmpl $0x9, %edi
ja 0x7e2c4
movl %edi, %eax
leaq 0x3a2bd(%rip), %rdi     # 0xb81b8
movslq (%rdi,%rax,4), %rax
addq %rdi, %rax
jmpq *%rax
cmpl $0x2b, %esi
jne 0x7e185
movsbl (%rcx), %eax
movsbl (%r8), %ecx
testl %ecx, %ecx
js 0x7e243
testb %cl, %cl
je 0x7e24f
pushq $0x7f
popq %rdi
subl %ecx, %edi
movb $0x7f, %sil
cmpl %eax, %edi
jl 0x7e2a0
jmp 0x7e24f
cmpl $0x2b, %esi
jne 0x7e0b2
movl (%rcx), %esi
movl (%r8), %ecx
testl %ecx, %ecx
sets %dil
movl $0x80000000, %eax       # imm = 0x80000000
movl $0x80000000, %r8d       # imm = 0x80000000
subl %ecx, %r8d
cmpl %esi, %r8d
setg %r8b
testb %r8b, %dil
jne 0x7e1e2
movl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movl %ecx, %edi
xorl %eax, %edi
leal (%rcx,%rsi), %r8d
cmpl %esi, %edi
cmovgel %r8d, %eax
testl %ecx, %ecx
cmovlel %r8d, %eax
jmp 0x7e1e2
cmpl $0x2b, %esi
jne 0x7e0ff
movsd (%rcx), %xmm0
addsd (%r8), %xmm0
jmp 0x7e111
cmpl $0x2b, %esi
jne 0x7e11a
movswl (%rcx), %ecx
movswl (%r8), %eax
testl %eax, %eax
js 0x7e230
testw %ax, %ax
je 0x7e23f
movl $0x7fff, %edi           # imm = 0x7FFF
subl %eax, %edi
movw $0x7fff, %si            # imm = 0x7FFF
cmpl %ecx, %edi
jl 0x7e289
jmp 0x7e23f
cmpl $0x2b, %esi
jne 0x7e14b
movzwl (%r8), %eax
addw (%rcx), %ax
movl $0xffff, %ecx           # imm = 0xFFFF
cmovael %eax, %ecx
movw %cx, (%rdx)
jmp 0x7e2a3
cmpl $0x2b, %esi
jne 0x7e168
movq (%r8), %rax
addq (%rcx), %rax
pushq $-0x1
popq %rcx
jmp 0x7e179
cmpl $0x2b, %esi
jne 0x7e1b2
movb (%r8), %al
addb (%rcx), %al
movzbl %al, %eax
movl $0xff, %ecx
cmovael %eax, %ecx
movb %cl, (%rdx)
jmp 0x7e2a3
cmpl $0x2b, %esi
jne 0x7e1cf
movl (%r8), %eax
addl (%rcx), %eax
pushq $-0x1
popq %rcx
cmovael %eax, %ecx
movl %ecx, (%rdx)
jmp 0x7e2a3
cmpl $0x2b, %esi
jne 0x7e1e9
movabsq $0x7fffffffffffffff, %rax # imm = 0x7FFFFFFFFFFFFFFF
movq (%rcx), %rsi
movq (%r8), %rcx
testq %rcx, %rcx
jns 0x7e078
leaq 0x1(%rax), %rdi
movq %rdi, %r8
subq %rcx, %r8
cmpq %rsi, %r8
jg 0x7e093
movq %rax, %rdi
subq %rcx, %rdi
leaq (%rcx,%rsi), %r8
cmpq %rsi, %rdi
cmovgeq %r8, %rax
testq %rcx, %rcx
cmovleq %r8, %rax
movq %rax, %rdi
movq %rdi, (%rdx)
jmp 0x7e2a3
cmpl $0x2b, %esi
jne 0x7e218
movss (%rcx), %xmm0
addss (%r8), %xmm0
jmp 0x7e22a
cmpl $0x2d, %esi
jne 0x7e2a3
movl (%rcx), %ecx
movl (%r8), %eax
testl %eax, %eax
setg %dil
movl %eax, %esi
orl $0x80000000, %esi       # imm = 0x80000000
cmpl %ecx, %esi
setg %r8b
movl $0x80000000, %esi       # imm = 0x80000000
testb %r8b, %dil
jne 0x7e0f8
movl $0x7fffffff, %esi       # imm = 0x7FFFFFFF
leal (%rax,%rsi), %edi
movl %ecx, %r8d
subl %eax, %r8d
cmpl %ecx, %edi
cmovgel %r8d, %esi
testl %eax, %eax
cmovnsl %r8d, %esi
movl %esi, (%rdx)
jmp 0x7e2a3
cmpl $0x2d, %esi
jne 0x7e2a3
movsd (%rcx), %xmm0
subsd (%r8), %xmm0
movsd %xmm0, (%rdx)
jmp 0x7e2a3
cmpl $0x2d, %esi
jne 0x7e2a3
movswl (%rcx), %eax
movswl (%r8), %ecx
testl %ecx, %ecx
jle 0x7e272
movl %ecx, %edi
orl $0xffff8000, %edi       # imm = 0xFFFF8000
movw $0x8000, %si            # imm = 0x8000
cmpl %eax, %edi
jle 0x7e285
jmp 0x7e289
cmpl $0x2d, %esi
jne 0x7e2a3
movzwl (%rcx), %eax
xorl %ecx, %ecx
subw (%r8), %ax
cmovbl %ecx, %eax
movw %ax, (%rdx)
jmp 0x7e2a3
cmpl $0x2d, %esi
jne 0x7e2a3
movq (%rcx), %rax
xorl %ecx, %ecx
subq (%r8), %rax
cmovaeq %rax, %rcx
movq %rcx, (%rdx)
jmp 0x7e2a3
cmpl $0x2d, %esi
jne 0x7e2a3
movsbl (%rcx), %eax
movsbl (%r8), %ecx
testl %ecx, %ecx
jle 0x7e28e
movl %ecx, %edi
orl $-0x80, %edi
movb $-0x80, %sil
cmpl %eax, %edi
jle 0x7e29c
jmp 0x7e2a0
cmpl $0x2d, %esi
jne 0x7e2a3
movb (%rcx), %al
xorl %ecx, %ecx
subb (%r8), %al
movzbl %al, %eax
cmovbl %ecx, %eax
movb %al, (%rdx)
jmp 0x7e2a3
cmpl $0x2d, %esi
jne 0x7e2a3
movl (%rcx), %eax
xorl %ecx, %ecx
subl (%r8), %eax
cmovbl %ecx, %eax
movl %eax, (%rdx)
jmp 0x7e2a3
cmpl $0x2d, %esi
jne 0x7e2a3
movabsq $0x7fffffffffffffff, %rax # imm = 0x7FFFFFFFFFFFFFFF
movq (%rcx), %rsi
movq (%r8), %rcx
testq %rcx, %rcx
jle 0x7e255
leaq (%rcx,%rax), %rdi
incq %rdi
cmpq %rsi, %rdi
jle 0x7e255
incq %rax
jmp 0x7e26d
cmpl $0x2d, %esi
jne 0x7e2a3
movss (%rcx), %xmm0
subss (%r8), %xmm0
movss %xmm0, (%rdx)
jmp 0x7e2a3
movl $0xffff8000, %edi       # imm = 0xFFFF8000
subl %eax, %edi
movw $0x8000, %si            # imm = 0x8000
cmpl %ecx, %edi
jg 0x7e289
addl %ecx, %eax
jmp 0x7e287
pushq $-0x80
popq %rdi
subl %ecx, %edi
movb $-0x80, %sil
cmpl %eax, %edi
jg 0x7e2a0
addb %al, %cl
movl %ecx, %esi
jmp 0x7e2a0
leaq (%rcx,%rax), %rdi
movq %rsi, %r8
subq %rcx, %r8
cmpq %rsi, %rdi
cmovgeq %r8, %rax
testq %rcx, %rcx
cmovnsq %r8, %rax
movq %rax, (%rdx)
jmp 0x7e2a3
testw %cx, %cx
je 0x7e285
leal 0x7fff(%rcx), %edi
movw $0x7fff, %si            # imm = 0x7FFF
cmpl %eax, %edi
jl 0x7e289
subl %ecx, %eax
movl %eax, %esi
movw %si, (%rdx)
jmp 0x7e2a3
testb %cl, %cl
je 0x7e29c
leal 0x7f(%rcx), %edi
movb $0x7f, %sil
cmpl %eax, %edi
jl 0x7e2a0
subb %cl, %al
movl %eax, %esi
movb %sil, (%rdx)
popq %rbp
retq
leaq 0x3a668(%rip), %rdi     # 0xb8914
leaq 0x3a0d5(%rip), %rsi     # 0xb8388
leaq 0x3a671(%rip), %rcx     # 0xb892b
movl $0x72a, %edx            # imm = 0x72A
callq 0xc140
leaq 0x20e51(%rip), %rdi     # 0x9f11c
leaq 0x3a0b6(%rip), %rsi     # 0xb8388
leaq 0x3a652(%rip), %rcx     # 0xb892b
movl $0x757, %edx            # imm = 0x757
callq 0xc140