// File: /workspace/github_cpp_makefile_star2_O3/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 0x94d3e
cmpl $0x2d, %esi
jne 0x95104
cmpl $0x9, %edi
ja 0x95123
movl %edi, %eax
leaq 0x3c0f8(%rip), %rdi     # 0xd0e48
movslq (%rdi,%rax,4), %rax
addq %rdi, %rax
jmpq *%rax
cmpl $0x2b, %esi
jne 0x94fe2
movsbl (%rcx), %eax
movsbl (%r8), %ecx
testl %ecx, %ecx
js 0x950a0
testb %cl, %cl
je 0x950ae
movl $0x7f, %edi
subl %ecx, %edi
movb $0x7f, %sil
cmpl %eax, %edi
jl 0x950ff
jmp 0x950ae
cmpl $0x2b, %esi
jne 0x94f0f
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 0x9503f
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 0x9503f
cmpl $0x2b, %esi
jne 0x94f5c
movsd (%rcx), %xmm0
addsd (%r8), %xmm0
jmp 0x94f6e
cmpl $0x2b, %esi
jne 0x94f77
movswl (%rcx), %ecx
movswl (%r8), %eax
testl %eax, %eax
js 0x9508d
testw %ax, %ax
je 0x9509c
movl $0x7fff, %edi           # imm = 0x7FFF
subl %eax, %edi
movw $0x7fff, %si            # imm = 0x7FFF
cmpl %ecx, %edi
jl 0x950e8
jmp 0x9509c
cmpl $0x2b, %esi
jne 0x94fa8
movzwl (%r8), %eax
addw (%rcx), %ax
movl $0xffff, %ecx           # imm = 0xFFFF
cmovael %eax, %ecx
movw %cx, (%rdx)
jmp 0x95102
cmpl $0x2b, %esi
jne 0x94fc5
movq (%r8), %rax
addq (%rcx), %rax
movq $-0x1, %rcx
jmp 0x94fd6
cmpl $0x2b, %esi
jne 0x9500f
movb (%r8), %al
addb (%rcx), %al
movzbl %al, %eax
movl $0xff, %ecx
cmovael %eax, %ecx
movb %cl, (%rdx)
jmp 0x95102
cmpl $0x2b, %esi
jne 0x9502c
movl (%r8), %eax
addl (%rcx), %eax
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
cmovael %eax, %ecx
movl %ecx, (%rdx)
jmp 0x95102
cmpl $0x2b, %esi
jne 0x95046
movabsq $0x7fffffffffffffff, %rax # imm = 0x7FFFFFFFFFFFFFFF
movq (%rcx), %rsi
movq (%r8), %rcx
testq %rcx, %rcx
jns 0x94ed5
leaq 0x1(%rax), %rdi
movq %rdi, %r8
subq %rcx, %r8
cmpq %rsi, %r8
jg 0x94ef0
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 0x95102
cmpl $0x2b, %esi
jne 0x95075
movss (%rcx), %xmm0
addss (%r8), %xmm0
jmp 0x95087
cmpl $0x2d, %esi
jne 0x95102
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 0x94f55
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 0x95102
cmpl $0x2d, %esi
jne 0x95102
movsd (%rcx), %xmm0
subsd (%r8), %xmm0
movsd %xmm0, (%rdx)
jmp 0x95102
cmpl $0x2d, %esi
jne 0x95102
movswl (%rcx), %eax
movswl (%r8), %ecx
testl %ecx, %ecx
jle 0x950d1
movl %ecx, %edi
orl $0xffff8000, %edi       # imm = 0xFFFF8000
movw $0x8000, %si            # imm = 0x8000
cmpl %eax, %edi
jle 0x950e4
jmp 0x950e8
cmpl $0x2d, %esi
jne 0x95102
movzwl (%rcx), %eax
xorl %ecx, %ecx
subw (%r8), %ax
cmovbl %ecx, %eax
movw %ax, (%rdx)
jmp 0x95102
cmpl $0x2d, %esi
jne 0x95102
movq (%rcx), %rax
xorl %ecx, %ecx
subq (%r8), %rax
cmovaeq %rax, %rcx
movq %rcx, (%rdx)
jmp 0x95102
cmpl $0x2d, %esi
jne 0x95102
movsbl (%rcx), %eax
movsbl (%r8), %ecx
testl %ecx, %ecx
jle 0x950ed
movl %ecx, %edi
orl $-0x80, %edi
movb $-0x80, %sil
cmpl %eax, %edi
jle 0x950fb
jmp 0x950ff
cmpl $0x2d, %esi
jne 0x95102
movb (%rcx), %al
xorl %ecx, %ecx
subb (%r8), %al
movzbl %al, %eax
cmovbl %ecx, %eax
movb %al, (%rdx)
jmp 0x95102
cmpl $0x2d, %esi
jne 0x95102
movl (%rcx), %eax
xorl %ecx, %ecx
subl (%r8), %eax
cmovbl %ecx, %eax
movl %eax, (%rdx)
jmp 0x95102
cmpl $0x2d, %esi
jne 0x95102
movabsq $0x7fffffffffffffff, %rax # imm = 0x7FFFFFFFFFFFFFFF
movq (%rcx), %rsi
movq (%r8), %rcx
testq %rcx, %rcx
jle 0x950b4
leaq (%rcx,%rax), %rdi
incq %rdi
cmpq %rsi, %rdi
jle 0x950b4
incq %rax
jmp 0x950cc
cmpl $0x2d, %esi
jne 0x95102
movss (%rcx), %xmm0
subss (%r8), %xmm0
movss %xmm0, (%rdx)
jmp 0x95102
movl $0xffff8000, %edi       # imm = 0xFFFF8000
subl %eax, %edi
movw $0x8000, %si            # imm = 0x8000
cmpl %ecx, %edi
jg 0x950e8
addl %ecx, %eax
jmp 0x950e6
movl $0xffffff80, %edi       # imm = 0xFFFFFF80
subl %ecx, %edi
movb $-0x80, %sil
cmpl %eax, %edi
jg 0x950ff
addb %al, %cl
movl %ecx, %esi
jmp 0x950ff
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 0x95102
testw %cx, %cx
je 0x950e4
leal 0x7fff(%rcx), %edi
movw $0x7fff, %si            # imm = 0x7FFF
cmpl %eax, %edi
jl 0x950e8
subl %ecx, %eax
movl %eax, %esi
movw %si, (%rdx)
jmp 0x95102
testb %cl, %cl
je 0x950fb
leal 0x7f(%rcx), %edi
movb $0x7f, %sil
cmpl %eax, %edi
jl 0x950ff
subb %cl, %al
movl %eax, %esi
movb %sil, (%rdx)
popq %rbp
retq
leaq 0x3c499(%rip), %rdi     # 0xd15a4
leaq 0x3bf06(%rip), %rsi     # 0xd1018
leaq 0x3c4a2(%rip), %rcx     # 0xd15bb
movl $0x72a, %edx            # imm = 0x72A
callq 0xc140
leaq 0x22fc2(%rip), %rdi     # 0xb80ec
leaq 0x3bee7(%rip), %rsi     # 0xd1018
leaq 0x3c483(%rip), %rcx     # 0xd15bb
movl $0x757, %edx            # imm = 0x757
callq 0xc140