LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_lmeter.c
// Function: lv_lmeter_signal
static lv_res_t lv_lmeter_signal(lv_obj_t * lmeter, lv_signal_t sign, void * param)
{
    lv_res_t res;

    /* Include the ancient signal function */
    res = ancestor_signal(lmeter, sign, param);
    if(res != LV_RES_OK) return res;
    if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);

    if(sign == LV_SIGNAL_CLEANUP) {
        /*Nothing to cleanup. (No dynamically allocated memory in 'ext')*/
    } else if(sign == LV_SIGNAL_STYLE_CHG) {
        lv_obj_refresh_ext_draw_pad(lmeter);
    } else if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) {
        const lv_style_t * style = lv_lmeter_get_style(lmeter, LV_LMETER_STYLE_MAIN);
        lmeter->ext_draw_pad     = LV_MATH_MAX(lmeter->ext_draw_pad, style->line.width);
    }

    return res;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdx, %r15
movl %esi, %ebp
movq %rdi, %r14
callq *0x3b718(%rip)          # 0x60460
movl %eax, %ebx
cmpb $0x1, %al
jne 0x24da2
movb $0x1, %bl
cmpb $0x4, %bpl
je 0x24d9a
movzbl %bpl, %eax
cmpl $0x6, %eax
je 0x24d7d
cmpl $0x7, %eax
jne 0x24da2
leaq 0x1ae1c(%rip), %rsi     # 0x3fb87
movq %r15, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x6c02
movq %r14, %rdi
callq 0x66b6
movl 0x5c(%r14), %ecx
movzwl 0x3e(%rax), %eax
cmpw %ax, %cx
cmovgl %ecx, %eax
movw %ax, 0x5c(%r14)
jmp 0x24da2
movq %r14, %rdi
callq 0x6514
movl %ebx, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_lmeter.c
// Function: lv_lmeter_set_value
void lv_lmeter_set_value(lv_obj_t * lmeter, int16_t value)
{
    LV_ASSERT_OBJ(lmeter, LV_OBJX_NAME);

    lv_lmeter_ext_t * ext = lv_obj_get_ext_attr(lmeter);
    if(ext->cur_value == value) return;

    ext->cur_value = value > ext->max_value ? ext->max_value : value;
    ext->cur_value = ext->cur_value < ext->min_value ? ext->min_value : ext->cur_value;
    lv_obj_invalidate(lmeter);
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x2515d
movq %rbx, %rdi
callq 0x6af7
cmpw %bp, 0x6(%rax)
jne 0x2516e
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
leaq 0x1a080(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x2516c
movzwl 0xa(%rax), %ecx
cmpw %bp, %cx
cmovgel %ebp, %ecx
movzwl 0x8(%rax), %edx
cmpw %dx, %cx
cmovlel %edx, %ecx
movw %cx, 0x6(%rax)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x4c4d
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_lmeter.c
// Function: lv_lmeter_set_range
void lv_lmeter_set_range(lv_obj_t * lmeter, int16_t min, int16_t max)
{
    LV_ASSERT_OBJ(lmeter, LV_OBJX_NAME);

    lv_lmeter_ext_t * ext = lv_obj_get_ext_attr(lmeter);
    if(ext->min_value == min && ext->max_value == max) return;

    ext->max_value = max;
    ext->min_value = min;
    if(ext->cur_value > max) {
        ext->cur_value = max;
        lv_lmeter_set_value(lmeter, ext->cur_value);
    }
    if(ext->cur_value < min) {
        ext->cur_value = min;
        lv_lmeter_set_value(lmeter, ext->cur_value);
    }
    lv_obj_invalidate(lmeter);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movl %edx, %r14d
movl %esi, %ebp
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x251cf
movq %rbx, %rdi
callq 0x6af7
movq %rax, %r15
cmpw %bp, 0x8(%rax)
jne 0x251e0
cmpw %r14w, 0xa(%r15)
jne 0x251e0
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
leaq 0x1a00e(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x251de
movw %r14w, 0xa(%r15)
movw %bp, 0x8(%r15)
movzwl 0x6(%r15), %eax
cmpw %r14w, %ax
jle 0x2520b
movw %r14w, 0x6(%r15)
movswl %r14w, %esi
movq %rbx, %rdi
callq 0x25137
movzwl 0x6(%r15), %eax
cmpw %bp, %ax
jge 0x25220
movw %bp, 0x6(%r15)
movswl %bp, %esi
movq %rbx, %rdi
callq 0x25137
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x4c4d
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_lmeter.c
// Function: lv_lmeter_set_scale
void lv_lmeter_set_scale(lv_obj_t * lmeter, uint16_t angle, uint16_t line_cnt)
{
    LV_ASSERT_OBJ(lmeter, LV_OBJX_NAME);

    lv_lmeter_ext_t * ext = lv_obj_get_ext_attr(lmeter);
    if(ext->scale_angle == angle && ext->line_cnt == line_cnt) return;

    ext->scale_angle = angle;
    ext->line_cnt    = line_cnt;

    lv_obj_invalidate(lmeter);
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %edx, %ebp
movl %esi, %r14d
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x25260
movq %rbx, %rdi
callq 0x6af7
cmpw %r14w, (%rax)
jne 0x25271
cmpw %bp, 0x4(%rax)
jne 0x25271
popq %rbx
popq %r14
popq %rbp
retq
leaq 0x19f7d(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x2526f
movw %r14w, (%rax)
movw %bp, 0x4(%rax)
movq %rbx, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0x4c4d
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_lmeter.c
// Function: lv_lmeter_set_angle_offset
void lv_lmeter_set_angle_offset(lv_obj_t * lmeter, uint16_t angle)
{
    lv_lmeter_ext_t * ext = lv_obj_get_ext_attr(lmeter);
    if(ext->angle_ofs == angle) return;

    ext->angle_ofs = angle;

    lv_obj_invalidate(lmeter);
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x6af7
cmpw %bp, 0x2(%rax)
jne 0x2529f
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
movw %bp, 0x2(%rax)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x4c4d
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_page.c
// Function: lv_scrl_design
static bool lv_scrl_design(lv_obj_t * scrl, const lv_area_t * mask, lv_design_mode_t mode)
{
    if(mode == LV_DESIGN_COVER_CHK) {
        return ancestor_design(scrl, mask, mode);
    } else if(mode == LV_DESIGN_DRAW_MAIN) {
#if LV_USE_GROUP
        /* If the page is focused in a group and
         * the background object is not visible (transparent)
         * then "activate" the style of the scrollable*/
        const lv_style_t * style_scrl_ori = lv_obj_get_style(scrl);
        lv_obj_t * page                   = lv_obj_get_parent(scrl);
        const lv_style_t * style_page     = lv_obj_get_style(page);
        lv_group_t * g                    = lv_obj_get_group(page);
        if((style_page->body.opa == LV_OPA_TRANSP) &&
           style_page->body.border.width == 0) { /*Is the background visible?*/
            if(lv_group_get_focused(g) == page) {
                lv_style_t * style_mod;
                style_mod = lv_group_mod_style(g, style_scrl_ori);
                /*If still not visible modify the style a littel bit*/
                if((style_mod->body.opa == LV_OPA_TRANSP) && style_mod->body.border.width == 0) {
                    style_mod->body.opa          = LV_OPA_50;
                    style_mod->body.border.width = 1;
                    style_mod                    = lv_group_mod_style(g, style_mod);
                }

                scrl->style_p = style_mod; /*Temporally change the style to the activated */
            }
        }
#endif
        ancestor_design(scrl, mask, mode);

#if LV_USE_GROUP
        scrl->style_p = style_scrl_ori; /*Revert the style*/
#endif
    } else if(mode == LV_DESIGN_DRAW_POST) {
        ancestor_design(scrl, mask, mode);
    }

    return true;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rsi, %r14
movq %rdi, %rbx
testl %edx, %edx
je 0x25c29
cmpl $0x1, %edx
je 0x25c13
cmpl $0x2, %edx
jne 0x25cb2
movq 0x3a878(%rip), %rax     # 0x60470
movq %rbx, %rdi
movq %r14, %rsi
movl $0x2, %edx
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmpq *%rax
movq %rbx, %rdi
movq %r14, %rsi
movl $0x1, %edx
callq *0x3a84c(%rip)          # 0x60470
jmp 0x25cb2
movq %rbx, %rdi
callq 0x66b6
movq %rax, %r15
movq %rbx, %rdi
callq 0x4ab5
movq %rax, %r13
movq %rax, %rdi
callq 0x66b6
movq %rax, %rbp
movq %r13, %rdi
callq 0x4ed1
cmpb $0x0, 0x8(%rbp)
jne 0x25ca0
cmpw $0x0, 0xc(%rbp)
jne 0x25ca0
movq %rax, %r12
movq %rax, %rdi
callq 0x2a19
cmpq %r13, %rax
jne 0x25ca0
movq %r12, %rdi
movq %r15, %rsi
callq 0x2aa5
cmpb $0x0, 0x8(%rax)
jne 0x25c9c
cmpw $0x0, 0xc(%rax)
jne 0x25c9c
movb $0x7f, 0x8(%rax)
movw $0x1, 0xc(%rax)
movq %r12, %rdi
movq %rax, %rsi
callq 0x2aa5
movq %rax, 0x48(%rbx)
movq %rbx, %rdi
movq %r14, %rsi
xorl %edx, %edx
callq *0x3a7c2(%rip)          # 0x60470
movq %r15, 0x48(%rbx)
movb $0x1, %al
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_page.c
// Function: lv_page_set_sb_mode
void lv_page_set_sb_mode(lv_obj_t * page, lv_sb_mode_t sb_mode)
{
    LV_ASSERT_OBJ(page, LV_OBJX_NAME);

    lv_page_ext_t * ext = lv_obj_get_ext_attr(page);
    if(ext->sb.mode == sb_mode) return;

    if(sb_mode == LV_SB_MODE_HIDE)
        ext->sb.mode |= LV_SB_MODE_HIDE; /*Set the hidden flag*/
    else if(sb_mode == LV_SB_MODE_UNHIDE)
        ext->sb.mode &= (~LV_SB_MODE_HIDE); /*Clear the hidden flag*/
    else {
        if(ext->sb.mode & LV_SB_MODE_HIDE) sb_mode |= LV_SB_MODE_HIDE;
        ext->sb.mode = sb_mode;
    }

    ext->sb.hor_draw = 0;
    ext->sb.ver_draw = 0;

    lv_page_sb_refresh(page);
    lv_obj_invalidate(page);
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x2639f
movq %rbx, %rdi
callq 0x6af7
movb 0x28(%rax), %cl
movl %ecx, %edx
shrb $0x2, %dl
andb $0x7, %dl
cmpb %bpl, %dl
jne 0x263b0
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
leaq 0x18e3e(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x263ae
cmpb $0x5, %bpl
je 0x263cc
movzbl %bpl, %esi
cmpl $0x4, %esi
jne 0x263d1
shlb $0x2, %dl
andb $-0x1d, %cl
orb %dl, %cl
orb $0x10, %cl
jmp 0x263ef
andb $-0x11, %cl
jmp 0x263ef
shlb $0x2, %bpl
movzbl %bpl, %esi
orb $0x10, %bpl
cmpb $0x4, %dl
movzbl %bpl, %edx
cmovbl %esi, %edx
andb $0x1c, %dl
andb $-0x1d, %cl
orb %dl, %cl
andb $-0x4, %cl
movb %cl, 0x28(%rax)
movq %rbx, %rdi
callq 0x26538
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x4c4d
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_page.c
// Function: lv_page_set_style
void lv_page_set_style(lv_obj_t * page, lv_page_style_t type, const lv_style_t * style)
{
    LV_ASSERT_OBJ(page, LV_OBJX_NAME);

    lv_page_ext_t * ext = lv_obj_get_ext_attr(page);

    switch(type) {
        case LV_PAGE_STYLE_BG: lv_obj_set_style(page, style); break;
        case LV_PAGE_STYLE_SCRL: lv_obj_set_style(ext->scrl, style); break;
        case LV_PAGE_STYLE_SB:
            ext->sb.style = style;
            lv_area_set_height(&ext->sb.hor_area, ext->sb.style->body.padding.inner);
            lv_area_set_width(&ext->sb.ver_area, ext->sb.style->body.padding.inner);
            lv_page_sb_refresh(page);
            lv_obj_refresh_ext_draw_pad(page);
            lv_obj_invalidate(page);
            break;
#if LV_USE_ANIMATION
        case LV_PAGE_STYLE_EDGE_FLASH: ext->edge_flash.style = style; break;
#endif
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdx, %r14
movl %esi, %ebp
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x2644d
movq %rbx, %rdi
callq 0x6af7
cmpb $0x3, %bpl
ja 0x264aa
movq %rax, %r15
movzbl %bpl, %eax
leaq 0x1977d(%rip), %rcx     # 0x3fbbc
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %rbx, %rdi
jmp 0x264b9
leaq 0x18d90(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x2645c
movq %r14, 0x10(%r15)
leaq 0x18(%r15), %rdi
movswl 0x1e(%r14), %esi
callq 0x28cd7
movq %r15, %rdi
addq $0x20, %rdi
movq 0x10(%r15), %rax
movswl 0x1e(%rax), %esi
callq 0x28ccd
movq %rbx, %rdi
callq 0x26538
movq %rbx, %rdi
callq 0x6514
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x4c4d
movq %r14, 0x38(%r15)
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
movq 0x8(%r15), %rdi
movq %r14, %rsi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x5d9f
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_page.c
// Function: lv_page_get_style
const lv_style_t * lv_page_get_style(const lv_obj_t * page, lv_page_style_t type)
{
    LV_ASSERT_OBJ(page, LV_OBJX_NAME);

    const lv_style_t * style = NULL;
    lv_page_ext_t * ext      = lv_obj_get_ext_attr(page);

    switch(type) {
        case LV_PAGE_STYLE_BG: style = lv_obj_get_style(page); break;
        case LV_PAGE_STYLE_SCRL: style = lv_obj_get_style(ext->scrl); break;
        case LV_PAGE_STYLE_SB: style = ext->sb.style; break;
#if LV_USE_ANIMATION
        case LV_PAGE_STYLE_EDGE_FLASH: style = ext->edge_flash.style; break;
#endif
        default: style = NULL; break;
    }

    return style;
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x26503
movq %rbx, %rdi
callq 0x6af7
cmpb $0x3, %bpl
ja 0x2652f
movzbl %bpl, %ecx
leaq 0x196d7(%rip), %rdx     # 0x3fbcc
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movq %rbx, %rdi
jmp 0x26524
leaq 0x18cda(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x26512
movq 0x10(%rax), %rax
jmp 0x26531
movq 0x38(%rax), %rax
jmp 0x26531
movq 0x8(%rax), %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x66b6
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_page.c
// Function: lv_page_set_anim_time
void lv_page_set_anim_time(lv_obj_t * page, uint16_t anim_time)
{
    LV_ASSERT_OBJ(page, LV_OBJX_NAME);

#if LV_USE_ANIMATION
    lv_page_ext_t * ext = lv_obj_get_ext_attr(page);
    ext->anim_time      = anim_time;
#else
    (void)page;      /*Unused*/
    (void)anim_time; /*Unused*/
#endif
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movl %esi, %ebx
movq %rdi, %r14
callq 0x80e4
testb %al, %al
je 0x269b0
movq %r14, %rdi
callq 0x6af7
movw %bx, 0x48(%rax)
addq $0x8, %rsp
popq %rbx
popq %r14
retq
leaq 0x1882d(%rip), %rdi     # 0x3f1e4
movq %r14, %rsi
callq 0x8294
jmp 0x269bf
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_page.c
// Function: lv_page_set_edge_flash
void lv_page_set_edge_flash(lv_obj_t * page, bool en)
{
    LV_ASSERT_OBJ(page, LV_OBJX_NAME);

#if LV_USE_ANIMATION
    lv_page_ext_t * ext     = lv_obj_get_ext_attr(page);
    ext->edge_flash.enabled = en ? 1 : 0;
#else
    (void)page;
    (void)en;
#endif
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movl %esi, %ebx
movq %rdi, %r14
callq 0x80e4
testb %al, %al
je 0x26a2c
movq %r14, %rdi
callq 0x6af7
movb 0x40(%rax), %cl
andb $-0x2, %cl
orb %bl, %cl
movb %cl, 0x40(%rax)
addq $0x8, %rsp
popq %rbx
popq %r14
retq
leaq 0x187b1(%rip), %rdi     # 0x3f1e4
movq %r14, %rsi
callq 0x8294
jmp 0x26a3b
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_page.c
// Function: lv_page_get_anim_time
uint16_t lv_page_get_anim_time(const lv_obj_t * page)
{
    LV_ASSERT_OBJ(page, LV_OBJX_NAME);

#if LV_USE_ANIMATION
    lv_page_ext_t * ext = lv_obj_get_ext_attr(page);
    return ext->anim_time;
#else
    (void)page; /*Unused*/
    return 0;
#endif
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x26a58
movq %rbx, %rdi
callq 0x6af7
movzwl 0x48(%rax), %eax
popq %rbx
retq
leaq 0x18785(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x26a67
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_page.c
// Function: lv_page_get_edge_flash
bool lv_page_get_edge_flash(lv_obj_t * page)
{
    LV_ASSERT_OBJ(page, LV_OBJX_NAME);

#if LV_USE_ANIMATION
    lv_page_ext_t * ext = lv_obj_get_ext_attr(page);
    return ext->edge_flash.enabled == 0 ? false : true;
#else
    (void)page;
    return false;
#endif
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x26ae2
movq %rbx, %rdi
callq 0x6af7
movb 0x40(%rax), %al
andb $0x1, %al
popq %rbx
retq
leaq 0x186fb(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x26af1
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_page.c
// Function: lv_page_get_fit_width
lv_coord_t lv_page_get_fit_width(lv_obj_t * page)
{
    LV_ASSERT_OBJ(page, LV_OBJX_NAME);

    const lv_style_t * bg_style   = lv_page_get_style(page, LV_PAGE_STYLE_BG);
    const lv_style_t * scrl_style = lv_page_get_style(page, LV_PAGE_STYLE_SCRL);

    return lv_obj_get_width(page) - bg_style->body.padding.left - bg_style->body.padding.right -
           scrl_style->body.padding.left - scrl_style->body.padding.right;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x26b45
movq %rbx, %rdi
xorl %esi, %esi
callq 0x264cb
movq %rax, %r14
movq %rbx, %rdi
movl $0x1, %esi
callq 0x264cb
movq %rax, %r15
movq %rbx, %rdi
callq 0x566d
movzwl 0x1a(%r14), %ecx
addw 0x1c(%r14), %cx
addw 0x1a(%r15), %cx
addw 0x1c(%r15), %cx
subl %ecx, %eax
popq %rbx
popq %r14
popq %r15
retq
leaq 0x18698(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x26b54
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_page.c
// Function: lv_page_get_fit_height
lv_coord_t lv_page_get_fit_height(lv_obj_t * page)
{
    LV_ASSERT_OBJ(page, LV_OBJX_NAME);

    const lv_style_t * bg_style   = lv_page_get_style(page, LV_PAGE_STYLE_BG);
    const lv_style_t * scrl_style = lv_page_get_style(page, LV_PAGE_STYLE_SCRL);

    return lv_obj_get_height(page) - bg_style->body.padding.top - bg_style->body.padding.bottom -
           scrl_style->body.padding.top - scrl_style->body.padding.bottom;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x26ba8
movq %rbx, %rdi
xorl %esi, %esi
callq 0x264cb
movq %rax, %r14
movq %rbx, %rdi
movl $0x1, %esi
callq 0x264cb
movq %rax, %r15
movq %rbx, %rdi
callq 0x5697
movzwl 0x16(%r14), %ecx
addw 0x18(%r14), %cx
addw 0x16(%r15), %cx
addw 0x18(%r15), %cx
subl %ecx, %eax
popq %rbx
popq %r14
popq %r15
retq
leaq 0x18635(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x26bb7
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_page.c
// Function: lv_page_on_edge
bool lv_page_on_edge(lv_obj_t * page, lv_page_edge_t edge)
{
    const lv_style_t * page_style = lv_obj_get_style(page);
    lv_obj_t * scrl               = lv_page_get_scrl(page);
    lv_area_t page_coords;
    lv_area_t scrl_coords;

    lv_obj_get_coords(scrl, &scrl_coords);
    lv_obj_get_coords(page, &page_coords);

    if((edge & LV_PAGE_EDGE_TOP) && scrl_coords.y1 == page_coords.y1 + page_style->body.padding.top) return true;
    if((edge & LV_PAGE_EDGE_BOTTOM) && scrl_coords.y2 == page_coords.y2 - page_style->body.padding.bottom) return true;
    if((edge & LV_PAGE_EDGE_LEFT) && scrl_coords.x1 == page_coords.x1 + page_style->body.padding.left) return true;
    if((edge & LV_PAGE_EDGE_RIGHT) && scrl_coords.x2 == page_coords.x2 - page_style->body.padding.right) return true;

    return false;
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
subq $0x10, %rsp
movl %esi, %ebp
movq %rdi, %r14
callq 0x66b6
movq %rax, %rbx
movq %r14, %rdi
callq 0x2695e
movq %rsp, %rsi
movq %rax, %rdi
callq 0x542b
leaq 0x8(%rsp), %rsi
movq %r14, %rdi
callq 0x542b
testb $0x2, %bpl
je 0x26c0a
movswl 0x2(%rsp), %ecx
movswl 0xa(%rsp), %eax
movswl 0x16(%rbx), %edx
addl %eax, %edx
movb $0x1, %al
cmpl %ecx, %edx
je 0x26c5f
testb $0x8, %bpl
je 0x26c26
movswl 0x6(%rsp), %ecx
movswl 0xe(%rsp), %edx
movswl 0x18(%rbx), %eax
subl %eax, %edx
movb $0x1, %al
cmpl %ecx, %edx
je 0x26c5f
testb $0x1, %bpl
je 0x26c41
movswl (%rsp), %ecx
movswl 0x8(%rsp), %eax
movswl 0x1a(%rbx), %edx
addl %eax, %edx
movb $0x1, %al
cmpl %ecx, %edx
je 0x26c5f
testb $0x4, %bpl
je 0x26c5d
movswl 0x4(%rsp), %ecx
movswl 0xc(%rsp), %edx
movswl 0x1c(%rbx), %eax
subl %eax, %edx
movb $0x1, %al
cmpl %ecx, %edx
je 0x26c5f
xorl %eax, %eax
addq $0x10, %rsp
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_page.c
// Function: lv_page_scroll_hor
void lv_page_scroll_hor(lv_obj_t * page, lv_coord_t dist)
{
    lv_obj_t * scrl = lv_page_get_scrl(page);

#if LV_USE_ANIMATION
    lv_anim_t a;
    a.var            = scrl;
    a.start          = lv_obj_get_x(scrl);
    a.end            = a.start + dist;
    a.exec_cb        = (lv_anim_exec_xcb_t)lv_obj_set_x;
    a.path_cb        = lv_anim_path_linear;
    a.ready_cb       = NULL;
    a.act_time       = 0;
    a.time           = LV_PAGE_SCROLL_ANIM_TIME;
    a.playback       = 0;
    a.playback_pause = 0;
    a.repeat         = 0;
    a.repeat_pause   = 0;
    lv_anim_create(&a);
#else
    lv_obj_set_x(scrl, lv_obj_get_x(scrl) + dist);
#endif
}

// Assembly:
pushq %r14
pushq %rbx
subq $0x38, %rsp
movl %esi, %ebx
callq 0x2695e
movq %rsp, %r14
movq %rax, (%r14)
movq %rax, %rdi
callq 0x4bdd
cwtl
movl %eax, 0x20(%r14)
addl %eax, %ebx
movl %ebx, 0x24(%r14)
leaq -0x21ab7(%rip), %rax    # 0x54db
movq %rax, 0x8(%r14)
leaq 0x2beb(%rip), %rax      # 0x29b88
movq %rax, 0x10(%r14)
movq $0x0, 0x18(%r14)
movq $0xc8, 0x28(%r14)
movb $0x0, 0x30(%r14)
movq %r14, %rdi
callq 0x29bb4
addq $0x38, %rsp
popq %rbx
popq %r14
retq
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_page.c
// Function: lv_page_scroll_ver
void lv_page_scroll_ver(lv_obj_t * page, lv_coord_t dist)
{
    lv_obj_t * scrl = lv_page_get_scrl(page);

#if LV_USE_ANIMATION
    lv_anim_t a;
    a.var            = scrl;
    a.start          = lv_obj_get_y(scrl);
    a.end            = a.start + dist;
    a.exec_cb        = (lv_anim_exec_xcb_t)lv_obj_set_y;
    a.path_cb        = lv_anim_path_linear;
    a.ready_cb       = NULL;
    a.act_time       = 0;
    a.time           = LV_PAGE_SCROLL_ANIM_TIME;
    a.playback       = 0;
    a.playback_pause = 0;
    a.repeat         = 0;
    a.repeat_pause   = 0;
    lv_anim_create(&a);
#else
    lv_obj_set_y(scrl, lv_obj_get_y(scrl) + dist);
#endif
}

// Assembly:
pushq %r14
pushq %rbx
subq $0x38, %rsp
movl %esi, %ebx
callq 0x2695e
movq %rsp, %r14
movq %rax, (%r14)
movq %rax, %rdi
callq 0x4c15
cwtl
movl %eax, 0x20(%r14)
addl %eax, %ebx
movl %ebx, 0x24(%r14)
leaq -0x21adb(%rip), %rax    # 0x5519
movq %rax, 0x8(%r14)
leaq 0x2b89(%rip), %rax      # 0x29b88
movq %rax, 0x10(%r14)
movq $0x0, 0x18(%r14)
movq $0xc8, 0x28(%r14)
movb $0x0, 0x30(%r14)
movq %r14, %rdi
callq 0x29bb4
addq $0x38, %rsp
popq %rbx
popq %r14
retq
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_page.c
// Function: lv_page_start_edge_flash
void lv_page_start_edge_flash(lv_obj_t * page)
{
#if LV_USE_ANIMATION
    lv_page_ext_t * ext = lv_obj_get_ext_attr(page);
    if(ext->edge_flash.enabled) {
        lv_anim_t a;
        a.var            = page;
        a.start          = 0;
        a.end            = LV_PAGE_END_FLASH_SIZE;
        a.exec_cb        = (lv_anim_exec_xcb_t)edge_flash_anim;
        a.path_cb        = lv_anim_path_linear;
        a.ready_cb       = edge_flash_anim_end;
        a.act_time       = 0;
        a.time           = LV_PAGE_END_ANIM_TIME;
        a.playback       = 1;
        a.playback_pause = LV_PAGE_END_ANIM_WAIT_TIME;
        a.repeat         = 0;
        a.repeat_pause   = 0;
        lv_anim_create(&a);
    }
#else
    (void)page; /*Unused*/
#endif
}

// Assembly:
pushq %rbx
subq $0x40, %rsp
movq %rdi, %rbx
callq 0x6af7
testb $0x1, 0x40(%rax)
je 0x27089
leaq 0x8(%rsp), %rdi
movq %rbx, (%rdi)
movabsq $0x1900000000, %rax     # imm = 0x1900000000
movq %rax, 0x20(%rdi)
leaq 0x37(%rip), %rax        # 0x2708f
movq %rax, 0x8(%rdi)
leaq 0x2b25(%rip), %rax      # 0x29b88
movq %rax, 0x10(%rdi)
leaq 0x42(%rip), %rax        # 0x270b0
movq %rax, 0x18(%rdi)
movabsq $0x12c0000012c, %rax    # imm = 0x12C0000012C
movq %rax, 0x28(%rdi)
movb $-0x3, 0x30(%rdi)
callq 0x29bb4
addq $0x40, %rsp
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_sw.c
// Function: lv_sw_set_style
void lv_sw_set_style(lv_obj_t * sw, lv_sw_style_t type, const lv_style_t * style)
{
    LV_ASSERT_OBJ(sw, LV_OBJX_NAME);

    lv_sw_ext_t * ext = lv_obj_get_ext_attr(sw);

    switch(type) {
        case LV_SLIDER_STYLE_BG: lv_slider_set_style(sw, LV_SLIDER_STYLE_BG, style); break;
        case LV_SLIDER_STYLE_INDIC: lv_bar_set_style(sw, LV_SLIDER_STYLE_INDIC, style); break;
        case LV_SW_STYLE_KNOB_OFF:
            ext->style_knob_off = style;
            if(lv_sw_get_state(sw) == 0) lv_slider_set_style(sw, LV_SLIDER_STYLE_KNOB, style);
            break;
        case LV_SW_STYLE_KNOB_ON:
            ext->style_knob_on = style;
            if(lv_sw_get_state(sw) != 0) lv_slider_set_style(sw, LV_SLIDER_STYLE_KNOB, style);
            break;
    }
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movq %rdx, %rbx
movl %esi, %ebp
movq %rdi, %r14
callq 0x80e4
testb %al, %al
je 0x27581
movq %r14, %rdi
callq 0x6af7
cmpb $0x3, %bpl
ja 0x275a4
movzbl %bpl, %ecx
leaq 0x1869b(%rip), %rdx     # 0x3fc0c
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movq %r14, %rdi
xorl %esi, %esi
jmp 0x275c3
leaq 0x17c5c(%rip), %rdi     # 0x3f1e4
movq %r14, %rsi
callq 0x8294
jmp 0x27590
movq %rbx, 0x28(%rax)
movq %r14, %rdi
callq 0x94aa
cmpw $0x31, %ax
jle 0x275bb
popq %rbx
popq %r14
popq %rbp
retq
movq %rbx, 0x30(%rax)
movq %r14, %rdi
callq 0x94aa
cmpw $0x32, %ax
jl 0x275a4
movq %r14, %rdi
movl $0x2, %esi
movq %rbx, %rdx
popq %rbx
popq %r14
popq %rbp
jmp 0x1dfe8
movq %r14, %rdi
movl $0x1, %esi
movq %rbx, %rdx
popq %rbx
popq %r14
popq %rbp
jmp 0x92f5
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_sw.c
// Function: lv_sw_on
void lv_sw_on(lv_obj_t * sw, lv_anim_enable_t anim)
{
    LV_ASSERT_OBJ(sw, LV_OBJX_NAME);

#if LV_USE_ANIMATION == 0
    anim = LV_ANIM_OFF;
#endif
    lv_sw_ext_t * ext = lv_obj_get_ext_attr(sw);
    lv_slider_set_value(sw, LV_SW_MAX_VALUE, anim);
    lv_slider_set_style(sw, LV_SLIDER_STYLE_KNOB, ext->style_knob_on);
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %esi, %ebp
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x27626
movq %rbx, %rdi
callq 0x6af7
movq %rax, %r14
movzbl %bpl, %edx
movq %rbx, %rdi
movl $0x64, %esi
callq 0x920b
movq 0x30(%r14), %rdx
movq %rbx, %rdi
movl $0x2, %esi
popq %rbx
popq %r14
popq %rbp
jmp 0x1dfe8
leaq 0x17bb7(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x27635
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_sw.c
// Function: lv_sw_off
void lv_sw_off(lv_obj_t * sw, lv_anim_enable_t anim)
{
    LV_ASSERT_OBJ(sw, LV_OBJX_NAME);

#if LV_USE_ANIMATION == 0
    anim = LV_ANIM_OFF;
#endif
    lv_sw_ext_t * ext = lv_obj_get_ext_attr(sw);
    lv_slider_set_value(sw, 0, anim);
    lv_slider_set_style(sw, LV_SLIDER_STYLE_KNOB, ext->style_knob_off);
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %esi, %ebp
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x27677
movq %rbx, %rdi
callq 0x6af7
movq %rax, %r14
movzbl %bpl, %edx
movq %rbx, %rdi
xorl %esi, %esi
callq 0x920b
movq 0x28(%r14), %rdx
movq %rbx, %rdi
movl $0x2, %esi
popq %rbx
popq %r14
popq %rbp
jmp 0x1dfe8
leaq 0x17b66(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x27686
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_sw.c
// Function: lv_sw_toggle
bool lv_sw_toggle(lv_obj_t * sw, lv_anim_enable_t anim)
{
    LV_ASSERT_OBJ(sw, LV_OBJX_NAME);

#if LV_USE_ANIMATION == 0
    anim = LV_ANIM_OFF;
#endif

    bool state = lv_sw_get_state(sw);
    if(state)
        lv_sw_off(sw, anim);
    else
        lv_sw_on(sw, anim);

    return !state;
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %esi, %ebp
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x276b9
movq %rbx, %rdi
callq 0x94aa
movl %eax, %r14d
movzbl %bpl, %esi
movq %rbx, %rdi
cmpw $0x32, %ax
jge 0x276ca
callq 0x275e3
jmp 0x276cf
leaq 0x17b24(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x276c8
callq 0x27637
cmpw $0x32, %r14w
setl %al
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_sw.c
// Function: lv_sw_set_anim_time
void lv_sw_set_anim_time(lv_obj_t * sw, uint16_t anim_time)
{
    LV_ASSERT_OBJ(sw, LV_OBJX_NAME);

#if LV_USE_ANIMATION
    lv_sw_ext_t * ext = lv_obj_get_ext_attr(sw);
    ext->anim_time    = anim_time;
#else
    (void)sw;
    (void)anim_time;
#endif
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movl %esi, %ebx
movq %rdi, %r14
callq 0x80e4
testb %al, %al
je 0x27702
movq %r14, %rdi
callq 0x6af7
movw %bx, 0x3c(%rax)
addq $0x8, %rsp
popq %rbx
popq %r14
retq
leaq 0x17adb(%rip), %rdi     # 0x3f1e4
movq %r14, %rsi
callq 0x8294
jmp 0x27711
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_sw.c
// Function: lv_sw_get_style
const lv_style_t * lv_sw_get_style(const lv_obj_t * sw, lv_sw_style_t type)
{
    LV_ASSERT_OBJ(sw, LV_OBJX_NAME);

    const lv_style_t * style = NULL;
    lv_sw_ext_t * ext        = lv_obj_get_ext_attr(sw);

    switch(type) {
        case LV_SW_STYLE_BG: style = lv_slider_get_style(sw, LV_SLIDER_STYLE_BG); break;
        case LV_SW_STYLE_INDIC: style = lv_slider_get_style(sw, LV_SLIDER_STYLE_INDIC); break;
        case LV_SW_STYLE_KNOB_OFF: style = ext->style_knob_off; break;
        case LV_SW_STYLE_KNOB_ON: style = ext->style_knob_on; break;
        default: style = NULL; break;
    }

    return style;
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x2774d
movq %rbx, %rdi
callq 0x6af7
cmpb $0x3, %bpl
ja 0x2777d
movzbl %bpl, %ecx
leaq 0x184df(%rip), %rdx     # 0x3fc1c
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movq %rbx, %rdi
xorl %esi, %esi
jmp 0x27772
leaq 0x17a90(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x2775c
movq 0x28(%rax), %rax
jmp 0x2777f
movq 0x30(%rax), %rax
jmp 0x2777f
movq %rbx, %rdi
movl $0x1, %esi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x1e148
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_sw.c
// Function: lv_sw_get_anim_time
uint16_t lv_sw_get_anim_time(const lv_obj_t * sw)
{
    LV_ASSERT_OBJ(sw, LV_OBJX_NAME);

#if LV_USE_ANIMATION
    lv_sw_ext_t * ext = lv_obj_get_ext_attr(sw);
    return ext->anim_time;
#else
    (void)sw; /*Unused*/
    return 0;
#endif
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x277a1
movq %rbx, %rdi
callq 0x6af7
movzwl 0x3c(%rax), %eax
popq %rbx
retq
leaq 0x17a3c(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x277b0
nop
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_win.c
// Function: lv_win_set_style
void lv_win_set_style(lv_obj_t * win, lv_win_style_t type, const lv_style_t * style)
{
    LV_ASSERT_OBJ(win, LV_OBJX_NAME);

    lv_win_ext_t * ext = lv_obj_get_ext_attr(win);

    switch(type) {
        case LV_WIN_STYLE_BG:
            lv_obj_set_style(win, style);
            lv_win_realign(win);
            break;
        case LV_WIN_STYLE_CONTENT: lv_page_set_style(ext->page, LV_PAGE_STYLE_SCRL, style); break;
        case LV_WIN_STYLE_SB: lv_page_set_style(ext->page, LV_PAGE_STYLE_SB, style); break;
        case LV_WIN_STYLE_HEADER:
            lv_obj_set_style(ext->header, style);
            lv_win_realign(win);
            break;
        case LV_WIN_STYLE_BTN_REL: ext->style_btn_rel = style; break;
        case LV_WIN_STYLE_BTN_PR: ext->style_btn_pr = style; break;
    }

    /*Refresh the existing buttons*/
    if(type == LV_WIN_STYLE_BTN_REL || type == LV_WIN_STYLE_BTN_PR) {
        lv_obj_t * btn;
        btn = lv_obj_get_child_back(ext->header, NULL);
        btn = lv_obj_get_child_back(ext->header, btn); /*Skip the title*/
        while(btn != NULL) {
            if(type == LV_WIN_STYLE_BTN_REL)
                lv_btn_set_style(btn, LV_BTN_STYLE_REL, style);
            else
                lv_btn_set_style(btn, LV_BTN_STYLE_PR, style);
            btn = lv_obj_get_child_back(ext->header, btn);
        }
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movq %rdx, %rbx
movl %esi, %ebp
movq %rdi, %r15
callq 0x80e4
testb %al, %al
je 0x27c53
movq %r15, %rdi
callq 0x6af7
movq %rax, %r14
cmpb $0x5, %bpl
ja 0x27d00
movzbl %bpl, %eax
leaq 0x18003(%rip), %rcx     # 0x3fc48
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
jmp 0x27c79
leaq 0x1758a(%rip), %rdi     # 0x3f1e4
movq %r15, %rsi
callq 0x8294
jmp 0x27c62
movl $0x18, %eax
jmp 0x27cae
movq (%r14), %rdi
movl $0x2, %esi
jmp 0x27c99
movq 0x8(%r14), %rdi
movq %rbx, %rsi
callq 0x5d9f
movq %r15, %rdi
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x27d16
movq (%r14), %rdi
movl $0x1, %esi
movq %rbx, %rdx
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x2640b
movl $0x20, %eax
movq %rbx, (%r14,%rax)
cmpb $0x4, %bpl
setne %r12b
movq 0x8(%r14), %rdi
xorl %esi, %esi
callq 0x654e
movq 0x8(%r14), %rdi
movq %rax, %rsi
callq 0x654e
testq %rax, %rax
je 0x27d0d
movq %rax, %r15
movzbl %r12b, %ebp
movq %r15, %rdi
movl %ebp, %esi
movq %rbx, %rdx
callq 0x13534
movq 0x8(%r14), %rdi
movq %r15, %rsi
callq 0x654e
movq %rax, %r15
testq %rax, %rax
jne 0x27cdd
jmp 0x27d0d
andb $-0x2, %bpl
movb $0x1, %r12b
cmpb $0x4, %bpl
je 0x27cba
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_win.c
// Function: lv_win_add_btn
lv_obj_t * lv_win_add_btn(lv_obj_t * win, const void * img_src)
{
    LV_ASSERT_OBJ(win, LV_OBJX_NAME);
    LV_ASSERT_NULL(img_src);

    lv_win_ext_t * ext = lv_obj_get_ext_attr(win);

    lv_obj_t * btn = lv_btn_create(ext->header, NULL);
    lv_btn_set_style(btn, LV_BTN_STYLE_REL, ext->style_btn_rel);
    lv_btn_set_style(btn, LV_BTN_STYLE_PR, ext->style_btn_pr);
    lv_obj_set_size(btn, ext->btn_size, ext->btn_size);

    lv_obj_t * img = lv_img_create(btn, NULL);
    lv_obj_set_click(img, false);
    lv_img_set_src(img, img_src);

    lv_win_realign(win);

    return btn;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rsi, %r14
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x27f85
movq %r14, %rdi
callq 0x80e4
testb %al, %al
je 0x27f96
movq %rbx, %rdi
callq 0x6af7
movq %rax, %r12
movq 0x8(%rax), %rdi
xorl %esi, %esi
callq 0x13104
movq %rax, %r15
movq 0x18(%r12), %rdx
movq %rax, %rdi
xorl %esi, %esi
callq 0x13534
movq 0x20(%r12), %rdx
movq %r15, %rdi
movl $0x1, %esi
callq 0x13534
movswl 0x28(%r12), %edx
movq %r15, %rdi
movl %edx, %esi
callq 0x5557
movq %r15, %rdi
xorl %esi, %esi
callq 0x23c3c
movq %rax, %r12
movq %rax, %rdi
xorl %esi, %esi
callq 0x5ff7
movq %r12, %rdi
movq %r14, %rsi
callq 0x24066
movq %rbx, %rdi
callq 0x27d16
movq %r15, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
leaq 0x17258(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x27f94
leaq 0x17247(%rip), %rdi     # 0x3f1e4
movq %r14, %rsi
callq 0x8294
jmp 0x27fa5
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_win.c
// Function: lv_win_close_event_cb
void lv_win_close_event_cb(lv_obj_t * btn, lv_event_t event)
{
    LV_ASSERT_OBJ(btn, "lv_btn");

    if(event == LV_EVENT_RELEASED) {
        lv_obj_t * win = lv_win_get_from_btn(btn);

        lv_obj_del(win);
    }
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x27fd4
cmpb $0x7, %bpl
jne 0x27fe5
movq %rbx, %rdi
callq 0x27fec
movq %rax, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x4d59
leaq 0x17209(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x27fe3
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_win.c
// Function: lv_win_get_from_btn
lv_obj_t * lv_win_get_from_btn(const lv_obj_t * ctrl_btn)
{
    LV_ASSERT_OBJ(ctrl_btn, "lv_btn");

    lv_obj_t * header = lv_obj_get_parent(ctrl_btn);
    lv_obj_t * win    = lv_obj_get_parent(header);

    return win;
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x2800a
movq %rbx, %rdi
callq 0x4ab5
movq %rax, %rdi
popq %rbx
jmp 0x4ab5
leaq 0x171d3(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x28019
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_win.c
// Function: lv_win_set_title
void lv_win_set_title(lv_obj_t * win, const char * title)
{
    LV_ASSERT_OBJ(win, LV_OBJX_NAME);
    LV_ASSERT_STR(title);

    lv_win_ext_t * ext = lv_obj_get_ext_attr(win);

    lv_label_set_text(ext->title, title);
    lv_win_realign(win);
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %r14
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x2805d
movq %r14, %rdi
callq 0x80e4
testb %al, %al
je 0x2806e
movq %rbx, %rdi
callq 0x6af7
movq 0x10(%rax), %rdi
movq %r14, %rsi
callq 0x1a6da
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x27d16
leaq 0x17180(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x2806c
leaq 0x1716f(%rip), %rdi     # 0x3f1e4
movq %r14, %rsi
callq 0x8294
jmp 0x2807d
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_win.c
// Function: lv_win_set_btn_size
void lv_win_set_btn_size(lv_obj_t * win, lv_coord_t size)
{
    LV_ASSERT_OBJ(win, LV_OBJX_NAME);

    lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
    if(ext->btn_size == size) return;

    ext->btn_size = size;

    lv_win_realign(win);
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x280a5
movq %rbx, %rdi
callq 0x6af7
cmpw %bp, 0x28(%rax)
jne 0x280b6
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
leaq 0x17138(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x280b4
movw %bp, 0x28(%rax)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x27d16
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_win.c
// Function: lv_win_set_content_size
void lv_win_set_content_size(lv_obj_t * win, lv_coord_t w, lv_coord_t h)
{
    LV_ASSERT_OBJ(win, LV_OBJX_NAME);

    lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
    h += lv_obj_get_height(ext->header);

    lv_obj_set_size(win, w, h);
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %edx, %r14d
movl %esi, %ebp
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x28104
movq %rbx, %rdi
callq 0x6af7
movq 0x8(%rax), %rdi
callq 0x5697
addl %eax, %r14d
movswl %r14w, %edx
movswl %bp, %esi
movq %rbx, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0x5557
leaq 0x170d9(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x28113
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_win.c
// Function: lv_win_set_drag
void lv_win_set_drag(lv_obj_t * win, bool en)
{
    LV_ASSERT_OBJ(win, LV_OBJX_NAME);

    lv_win_ext_t * ext    = lv_obj_get_ext_attr(win);
    lv_obj_t * win_header = ext->header;
    lv_obj_set_drag_parent(win_header, en);
    lv_obj_set_drag(win, en);
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x28237
movq %rbx, %rdi
callq 0x6af7
movq 0x8(%rax), %rdi
movzbl %bpl, %ebp
movl %ebp, %esi
callq 0x6153
movq %rbx, %rdi
movl %ebp, %esi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x606c
leaq 0x16fa6(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x28246
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_win.c
// Function: lv_win_get_width
lv_coord_t lv_win_get_width(lv_obj_t * win)
{
    LV_ASSERT_OBJ(win, LV_OBJX_NAME);

    lv_win_ext_t * ext            = lv_obj_get_ext_attr(win);
    lv_obj_t * scrl               = lv_page_get_scrl(ext->page);
    const lv_style_t * style_scrl = lv_obj_get_style(scrl);

    return lv_obj_get_width(scrl) - style_scrl->body.padding.left - style_scrl->body.padding.right;
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x28383
movq %rbx, %rdi
callq 0x6af7
movq (%rax), %rdi
callq 0x2695e
movq %rax, %rbx
movq %rax, %rdi
callq 0x66b6
movq %rax, %r14
movq %rbx, %rdi
callq 0x566d
movzwl 0x1a(%r14), %ecx
addw 0x1c(%r14), %cx
subl %ecx, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
retq
leaq 0x16e5a(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x28392
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_win.c
// Function: lv_win_get_style
const lv_style_t * lv_win_get_style(const lv_obj_t * win, lv_win_style_t type)
{
    LV_ASSERT_OBJ(win, LV_OBJX_NAME);

    const lv_style_t * style = NULL;
    lv_win_ext_t * ext       = lv_obj_get_ext_attr(win);

    switch(type) {
        case LV_WIN_STYLE_BG: style = lv_obj_get_style(win); break;
        case LV_WIN_STYLE_CONTENT: style = lv_page_get_style(ext->page, LV_PAGE_STYLE_SCRL); break;
        case LV_WIN_STYLE_SB: style = lv_page_get_style(ext->page, LV_PAGE_STYLE_SB); break;
        case LV_WIN_STYLE_HEADER: style = lv_obj_get_style(ext->header); break;
        case LV_WIN_STYLE_BTN_REL: style = ext->style_btn_rel; break;
        case LV_WIN_STYLE_BTN_PR: style = ext->style_btn_pr; break;
        default: style = NULL; break;
    }

    return style;
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x283cc
movq %rbx, %rdi
callq 0x6af7
cmpb $0x5, %bpl
ja 0x28415
movzbl %bpl, %ecx
leaq 0x178a2(%rip), %rdx     # 0x3fc60
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movq %rbx, %rdi
jmp 0x283f1
leaq 0x16e11(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x283db
movq 0x18(%rax), %rax
jmp 0x28417
movq (%rax), %rdi
movl $0x2, %esi
jmp 0x28404
movq 0x8(%rax), %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x66b6
movq (%rax), %rdi
movl $0x1, %esi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x264cb
movq 0x20(%rax), %rax
jmp 0x28417
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_win.c
// Function: lv_win_focus
void lv_win_focus(lv_obj_t * win, lv_obj_t * obj, lv_anim_enable_t anim_en)
{
    LV_ASSERT_OBJ(win, LV_OBJX_NAME);
    LV_ASSERT_OBJ(obj, "");


    lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
    lv_page_focus(ext->page, obj, anim_en);
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %edx, %ebp
movq %rsi, %rbx
movq %rdi, %r14
callq 0x80e4
testb %al, %al
je 0x2845a
movq %rbx, %rdi
callq 0x80e4
testb %al, %al
je 0x2846b
movq %r14, %rdi
callq 0x6af7
movq (%rax), %rdi
movzbl %bpl, %edx
movq %rbx, %rsi
popq %rbx
popq %r14
popq %rbp
jmp 0x26c87
leaq 0x16d83(%rip), %rdi     # 0x3f1e4
movq %r14, %rsi
callq 0x8294
jmp 0x28469
leaq 0x16d72(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x2847a
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_font/lv_font_fmt_txt.c
// Function: bits_write
static void bits_write(uint8_t * out, uint32_t bit_pos, uint8_t val, uint8_t len)
{
    if(len == 3) {
        len = 4;
        switch(val) {
        case 0: val = 0; break;
        case 1: val = 2; break;
        case 2: val = 4; break;
        case 3: val = 6; break;
        case 4: val = 9; break;
        case 5: val = 11; break;
        case 6: val = 13; break;
        case 7: val = 15; break;
        }
    }

    uint16_t byte_pos = bit_pos >> 3;
    bit_pos = bit_pos & 0x7;
    bit_pos = 8 - bit_pos - len;

    uint8_t bit_mask = (uint16_t)((uint16_t) 1 << len) - 1;
    out[byte_pos] &= ((~bit_mask) << bit_pos);
    out[byte_pos] |= (val << bit_pos);
}

// Assembly:
cmpl $0x3, %ecx
jne 0x28c3a
movb $0x4, %al
cmpb $0x7, %dl
ja 0x28c3c
shlb $0x3, %dl
movabsq $0xf0d0b0906040200, %r8 # imm = 0xF0D0B0906040200
movl %edx, %ecx
shrq %cl, %r8
movl %r8d, %edx
jmp 0x28c3c
movl %ecx, %eax
movl %esi, %r8d
movzbl %al, %ecx
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
shll %cl, %eax
andl $0x7, %esi
addl %ecx, %esi
movb $0x8, %cl
subb %sil, %cl
shll %cl, %eax
shrl $0x3, %r8d
movzwl %r8w, %esi
movzbl %dl, %edx
shll %cl, %edx
andb (%rdi,%rsi), %al
orb %al, %dl
movb %dl, (%rdi,%rsi)
retq
nop
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_misc/lv_circ.c
// Function: lv_circ_next
void lv_circ_next(lv_point_t * c, lv_coord_t * tmp)
{
    c->y++;

    if(*tmp <= 0) {
        (*tmp) += 2 * c->y + 1; /*Change in decision criterion for y -> y+1*/
    } else {
        c->x--;
        (*tmp) += 2 * (c->y - c->x) + 1; /*Change for y -> y+1, x -> x-1*/
    }
}

// Assembly:
movzwl 0x2(%rdi), %eax
incl %eax
movw %ax, 0x2(%rdi)
movzwl (%rsi), %ecx
testw %cx, %cx
jle 0x28cb0
movzwl (%rdi), %ecx
decl %ecx
movw %cx, (%rdi)
subl %ecx, %eax
addl %eax, %eax
addw (%rsi), %ax
incl %eax
jmp 0x28cb5
leal (%rcx,%rax,2), %eax
incl %eax
movw %ax, (%rsi)
retq
nopl (%rax)
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_misc/lv_area.c
// Function: lv_area_set_pos
void lv_area_set_pos(lv_area_t * area_p, lv_coord_t x, lv_coord_t y)
{
    lv_coord_t w = lv_area_get_width(area_p);
    lv_coord_t h = lv_area_get_height(area_p);
    area_p->x1   = x;
    area_p->y1   = y;
    lv_area_set_width(area_p, w);
    lv_area_set_height(area_p, h);
}

// Assembly:
movd (%rdi), %xmm0
movd 0x4(%rdi), %xmm1
movw %si, (%rdi)
movd %esi, %xmm2
pinsrw $0x1, %edx, %xmm2
movw %dx, 0x2(%rdi)
psubw %xmm0, %xmm2
paddw %xmm1, %xmm2
movd %xmm2, 0x4(%rdi)
retq
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_misc/lv_area.c
// Function: lv_area_is_point_on
bool lv_area_is_point_on(const lv_area_t * a_p, const lv_point_t * p_p)
{
    bool is_on = false;

    if((p_p->x >= a_p->x1 && p_p->x <= a_p->x2) && ((p_p->y >= a_p->y1 && p_p->y <= a_p->y2))) {
        is_on = true;
    }

    return is_on;
}

// Assembly:
movzwl (%rsi), %eax
cmpw (%rdi), %ax
jl 0x28d9f
cmpw 0x4(%rdi), %ax
jg 0x28d9f
movzwl 0x2(%rsi), %eax
cmpw 0x2(%rdi), %ax
jge 0x28da2
xorl %eax, %eax
retq
cmpw 0x6(%rdi), %ax
setle %al
retq
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_misc/lv_area.c
// Function: lv_area_is_in
bool lv_area_is_in(const lv_area_t * ain_p, const lv_area_t * aholder_p)
{
    bool is_in = false;

    if(ain_p->x1 >= aholder_p->x1 && ain_p->y1 >= aholder_p->y1 && ain_p->x2 <= aholder_p->x2 &&
       ain_p->y2 <= aholder_p->y2) {
        is_in = true;
    }

    return is_in;
}

// Assembly:
movzwl (%rdi), %eax
cmpw (%rsi), %ax
jl 0x28df1
movzwl 0x2(%rdi), %eax
cmpw 0x2(%rsi), %ax
jl 0x28df1
movzwl 0x4(%rdi), %eax
cmpw 0x4(%rsi), %ax
jle 0x28df4
xorl %eax, %eax
retq
movzwl 0x6(%rdi), %eax
cmpw 0x6(%rsi), %ax
setle %al
retq
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_misc/lv_task.c
// Function: lv_task_exec
static bool lv_task_exec(lv_task_t * task)
{
    bool exec = false;

    /*Execute if at least 'period' time elapsed*/
    uint32_t elp = lv_tick_elaps(task->last_run);
    if(elp >= task->period) {
        task->last_run = lv_tick_get();
        task_deleted   = false;
        task_created   = false;
        if(task->task_cb) task->task_cb(task);

        /*Delete if it was a one shot lv_task*/
        if(task_deleted == false) { /*The task might be deleted by itself as well*/
            if(task->once != 0) {
                lv_task_del(task);
            }
        }
        exec = true;
    }

    return exec;
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movq %rdi, %rbx
movl 0x4(%rdi), %edi
callq 0x87cd
movl %eax, %ebp
movl (%rbx), %r14d
cmpl %r14d, %eax
jb 0x29023
callq 0x87b6
movl %eax, 0x4(%rbx)
xorl %eax, %eax
movb %al, 0x374c1(%rip)      # 0x604b9
movb %al, 0x374bc(%rip)      # 0x604ba
movq 0x8(%rbx), %rax
testq %rax, %rax
je 0x29015
movq %rbx, %rdi
callq *%rax
cmpb $0x0, 0x374a6(%rip)     # 0x604b9
jne 0x29023
testb $0x8, 0x18(%rbx)
je 0x29023
movq %rbx, %rdi
callq 0x2920c
cmpl %r14d, %ebp
setae %al
popq %rbx
popq %r14
popq %rbp
retq