LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_c_makefile_star2_O2/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 0x6316
movq %rax, %rbx
movq %r14, %rdi
callq 0x245d9
movq %rsp, %rsi
movq %rax, %rdi
callq 0x50e5
leaq 0x8(%rsp), %rsi
movq %r14, %rdi
callq 0x50e5
testb $0x2, %bpl
je 0x24881
movswl 0x2(%rsp), %ecx
movswl 0xa(%rsp), %eax
movswl 0x16(%rbx), %edx
addl %eax, %edx
movb $0x1, %al
cmpl %ecx, %edx
je 0x248d6
testb $0x8, %bpl
je 0x2489d
movswl 0x6(%rsp), %ecx
movswl 0xe(%rsp), %edx
movswl 0x18(%rbx), %eax
subl %eax, %edx
movb $0x1, %al
cmpl %ecx, %edx
je 0x248d6
testb $0x1, %bpl
je 0x248b8
movswl (%rsp), %ecx
movswl 0x8(%rsp), %eax
movswl 0x1a(%rbx), %edx
addl %eax, %edx
movb $0x1, %al
cmpl %ecx, %edx
je 0x248d6
testb $0x4, %bpl
je 0x248d4
movswl 0x4(%rsp), %ecx
movswl 0xc(%rsp), %edx
movswl 0x1c(%rbx), %eax
subl %eax, %edx
movb $0x1, %al
cmpl %ecx, %edx
je 0x248d6
xorl %eax, %eax
addq $0x10, %rsp
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/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 0x245d9
movq %rsp, %r14
movq %rax, (%r14)
movq %rax, %rdi
callq 0x48ca
cwtl
movl %eax, 0x20(%r14)
addl %eax, %ebx
movl %ebx, 0x24(%r14)
leaq -0x1fa71(%rip), %rax    # 0x5192
movq %rax, 0x8(%r14)
leaq 0x2a4b(%rip), %rax      # 0x27659
movq %rax, 0x10(%r14)
andq $0x0, 0x18(%r14)
movq $0xc8, 0x28(%r14)
movb $0x0, 0x30(%r14)
movq %r14, %rdi
callq 0x27685
addq $0x38, %rsp
popq %rbx
popq %r14
retq
// File: /workspace/github_c_makefile_star2_O2/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 0x245d9
movq %rsp, %r14
movq %rax, (%r14)
movq %rax, %rdi
callq 0x4902
cwtl
movl %eax, 0x20(%r14)
addl %eax, %ebx
movl %ebx, 0x24(%r14)
leaq -0x1fa92(%rip), %rax    # 0x51d0
movq %rax, 0x8(%r14)
leaq 0x29ec(%rip), %rax      # 0x27659
movq %rax, 0x10(%r14)
andq $0x0, 0x18(%r14)
movq $0xc8, 0x28(%r14)
movb $0x0, 0x30(%r14)
movq %r14, %rdi
callq 0x27685
addq $0x38, %rsp
popq %rbx
popq %r14
retq
// File: /workspace/github_c_makefile_star2_O2/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 0x6747
testb $0x1, 0x40(%rax)
je 0x24cf4
leaq 0x8(%rsp), %rdi
movq %rbx, (%rdi)
movabsq $0x1900000000, %rax     # imm = 0x1900000000
movq %rax, 0x20(%rdi)
leaq 0x37(%rip), %rax        # 0x24cfa
movq %rax, 0x8(%rdi)
leaq 0x298b(%rip), %rax      # 0x27659
movq %rax, 0x10(%rdi)
leaq 0x42(%rip), %rax        # 0x24d1b
movq %rax, 0x18(%rdi)
movabsq $0x12c0000012c, %rax    # imm = 0x12C0000012C
movq %rax, 0x28(%rdi)
movb $-0x3, 0x30(%rdi)
callq 0x27685
addq $0x40, %rsp
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0x25180
movq %r14, %rdi
callq 0x6747
cmpb $0x3, %bpl
ja 0x251a1
movzbl %bpl, %ecx
leaq 0x16988(%rip), %rdx     # 0x3baf8
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movq %r14, %rdi
xorl %esi, %esi
jmp 0x251bc
leaq 0x15fbd(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x2518f
movq %rbx, 0x28(%rax)
movq %r14, %rdi
callq 0x251da
testb %al, %al
je 0x251b6
popq %rbx
popq %r14
popq %rbp
retq
movq %rbx, 0x30(%rax)
movq %r14, %rdi
callq 0x251da
testb %al, %al
je 0x251a1
pushq $0x2
popq %rsi
movq %r14, %rdi
movq %rbx, %rdx
popq %rbx
popq %r14
popq %rbp
jmp 0x1c13f
pushq $0x1
popq %rsi
movq %r14, %rdi
movq %rbx, %rdx
popq %rbx
popq %r14
popq %rbp
jmp 0x8b13
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0x25228
movq %rbx, %rdi
callq 0x6747
movq %rax, %r14
movzbl %bpl, %edx
pushq $0x64
popq %rsi
movq %rbx, %rdi
callq 0x8a31
movq 0x30(%r14), %rdx
pushq $0x2
popq %rsi
movq %rbx, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0x1c13f
leaq 0x15f15(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x25237
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0x25277
movq %rbx, %rdi
callq 0x6747
movq %rax, %r14
movzbl %bpl, %edx
movq %rbx, %rdi
xorl %esi, %esi
callq 0x8a31
movq 0x28(%r14), %rdx
pushq $0x2
popq %rsi
movq %rbx, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0x1c13f
leaq 0x15ec6(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x25286
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0x252b7
movq %rbx, %rdi
callq 0x251da
movl %eax, %r14d
movzbl %bpl, %esi
movq %rbx, %rdi
testb %al, %al
je 0x252c8
callq 0x25239
jmp 0x252cd
leaq 0x15e86(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x252c6
callq 0x251e9
xorb $0x1, %r14b
movl %r14d, %eax
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0x252ff
movq %r14, %rdi
callq 0x6747
movw %bx, 0x3c(%rax)
addq $0x8, %rsp
popq %rbx
popq %r14
retq
leaq 0x15e3e(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x2530e
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0x2534a
movq %rbx, %rdi
callq 0x6747
cmpb $0x3, %bpl
ja 0x25378
movzbl %bpl, %ecx
leaq 0x167ce(%rip), %rdx     # 0x3bb08
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movq %rbx, %rdi
xorl %esi, %esi
jmp 0x2536d
leaq 0x15df3(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x25359
movq 0x28(%rax), %rax
jmp 0x2537a
movq 0x30(%rax), %rax
jmp 0x2537a
pushq $0x1
popq %rsi
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x1c29c
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0x2539c
movq %rbx, %rdi
callq 0x6747
movzwl 0x3c(%rax), %eax
popq %rbx
retq
leaq 0x15da1(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x253ab
nopl (%rax)
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0x25824
movq %r15, %rdi
callq 0x6747
movq %rax, %r14
cmpb $0x5, %bpl
ja 0x258bf
movzbl %bpl, %eax
leaq 0x1631e(%rip), %rcx     # 0x3bb34
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
jmp 0x25844
leaq 0x15919(%rip), %rdi     # 0x3b144
movq %r15, %rsi
callq 0x7b01
jmp 0x25833
pushq $0x18
jmp 0x25871
movq (%r14), %rdi
pushq $0x2
jmp 0x2585e
movq 0x8(%r14), %rdi
movq %rbx, %rsi
callq 0x5a3d
movq %r15, %rdi
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x258d5
movq (%r14), %rdi
pushq $0x1
popq %rsi
movq %rbx, %rdx
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x24089
pushq $0x20
popq %rax
movq %rbx, (%r14,%rax)
cmpb $0x4, %bpl
setne %r12b
movq 0x8(%r14), %rdi
xorl %esi, %esi
callq 0x61b6
movq 0x8(%r14), %rdi
movq %rax, %rsi
callq 0x61b6
movq %rax, %r15
movzbl %r12b, %ebp
testq %r15, %r15
je 0x258cc
movq %r15, %rdi
movl %ebp, %esi
movq %rbx, %rdx
callq 0x126f8
movq 0x8(%r14), %rdi
movq %r15, %rsi
callq 0x61b6
movq %rax, %r15
jmp 0x2589c
andb $-0x2, %bpl
movb $0x1, %r12b
cmpb $0x4, %bpl
je 0x2587e
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0x25b3c
movq %r14, %rdi
callq 0x7994
testb %al, %al
je 0x25b4d
movq %rbx, %rdi
callq 0x6747
movq %rax, %r12
movq 0x8(%rax), %rdi
xorl %esi, %esi
callq 0x122f0
movq %rax, %r15
movq 0x18(%r12), %rdx
movq %rax, %rdi
xorl %esi, %esi
callq 0x126f8
movq 0x20(%r12), %rdx
pushq $0x1
popq %rsi
movq %r15, %rdi
callq 0x126f8
movswl 0x28(%r12), %edx
movq %r15, %rdi
movl %edx, %esi
callq 0x520e
movq %r15, %rdi
xorl %esi, %esi
callq 0x21a28
movq %rax, %r12
movq %rax, %rdi
xorl %esi, %esi
callq 0x5c6f
movq %r12, %rdi
movq %r14, %rsi
callq 0x21e19
movq %rbx, %rdi
callq 0x258d5
movq %r15, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
leaq 0x15601(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x25b4b
leaq 0x155f0(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x25b5c
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0x25b8b
cmpb $0x7, %bpl
jne 0x25b9c
movq %rbx, %rdi
callq 0x25ba3
movq %rax, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x4a42
leaq 0x155b2(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x25b9a
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0x25bc1
movq %rbx, %rdi
callq 0x47bc
movq %rax, %rdi
popq %rbx
jmp 0x47bc
leaq 0x1557c(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x25bd0
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0x25c14
movq %r14, %rdi
callq 0x7994
testb %al, %al
je 0x25c25
movq %rbx, %rdi
callq 0x6747
movq 0x10(%rax), %rdi
movq %r14, %rsi
callq 0x18a9a
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x258d5
leaq 0x15529(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x25c23
leaq 0x15518(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x25c34
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0x25c5c
movq %rbx, %rdi
callq 0x6747
cmpw %bp, 0x28(%rax)
jne 0x25c6d
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
leaq 0x154e1(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x25c6b
movw %bp, 0x28(%rax)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x258d5
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0x25cbb
movq %rbx, %rdi
callq 0x6747
movq 0x8(%rax), %rdi
callq 0x5332
addl %eax, %r14d
movswl %r14w, %edx
movswl %bp, %esi
movq %rbx, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0x520e
leaq 0x15482(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x25cca
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0x25dee
movq %rbx, %rdi
callq 0x6747
movq 0x8(%rax), %rdi
movzbl %bpl, %ebp
movl %ebp, %esi
callq 0x5dc7
movq %rbx, %rdi
movl %ebp, %esi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x5ce4
leaq 0x1534f(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x25dfd
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0x25f3a
movq %rbx, %rdi
callq 0x6747
movq (%rax), %rdi
callq 0x245d9
movq %rax, %rbx
movq %rax, %rdi
callq 0x6316
movq %rax, %r14
movq %rbx, %rdi
callq 0x5308
movzwl 0x1a(%r14), %ecx
addw 0x1c(%r14), %cx
subl %ecx, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
retq
leaq 0x15203(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x25f49
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0x25f83
movq %rbx, %rdi
callq 0x6747
cmpb $0x5, %bpl
ja 0x25fc7
movzbl %bpl, %ecx
leaq 0x15bd7(%rip), %rdx     # 0x3bb4c
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movq %rbx, %rdi
jmp 0x25fa5
leaq 0x151ba(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x25f92
movq 0x18(%rax), %rax
jmp 0x25fc9
movq (%rax), %rdi
pushq $0x2
jmp 0x25fb5
movq 0x8(%rax), %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x6316
movq (%rax), %rdi
pushq $0x1
popq %rsi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x24149
movq 0x20(%rax), %rax
jmp 0x25fc9
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0x2600c
movq %rbx, %rdi
callq 0x7994
testb %al, %al
je 0x2601d
movq %r14, %rdi
callq 0x6747
movq (%rax), %rdi
movzbl %bpl, %edx
movq %rbx, %rsi
popq %rbx
popq %r14
popq %rbp
jmp 0x248fe
leaq 0x15131(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x2601b
leaq 0x15120(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x2602c
nop
// File: /workspace/github_c_makefile_star2_O2/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 0x26775
movb $0x4, %al
cmpb $0x7, %dl
ja 0x26777
shlb $0x3, %dl
movabsq $0xf0d0b0906040200, %r8 # imm = 0xF0D0B0906040200
movl %edx, %ecx
shrq %cl, %r8
movl %r8d, %edx
jmp 0x26777
movl %ecx, %eax
movl %esi, %r8d
movzbl %al, %ecx
pushq $-0x1
popq %rax
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
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_font/lv_font_fmt_txt.c
// Function: get_bits
static uint8_t get_bits(const uint8_t * in, uint32_t bit_pos, uint8_t len)
{
    uint8_t res = 0;
    uint32_t byte_pos = bit_pos >> 3;
    bit_pos = bit_pos & 0x7;
    uint8_t bit_mask = (uint16_t)((uint16_t) 1 << len) - 1;
    uint16_t in16 = (in[byte_pos] << 8) + in[byte_pos + 1];

    res = (in16 >> (16 - bit_pos - len)) & bit_mask;
    return res;
}

// Assembly:
movl %edx, %ecx
movl %esi, %eax
shrl $0x3, %eax
pushq $0x1
popq %rdx
shll %cl, %edx
andl $0x7, %esi
movzwl (%rdi,%rax), %eax
rolw $0x8, %ax
movzwl %ax, %eax
addl %ecx, %esi
movb $0x10, %cl
subb %sil, %cl
shrl %cl, %eax
decl %edx
andl %edx, %eax
retq
// File: /workspace/github_c_makefile_star2_O2/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 0x2680d
movzwl (%rdi), %ecx
decl %ecx
movw %cx, (%rdi)
subl %ecx, %eax
addl %eax, %eax
addw (%rsi), %ax
incl %eax
jmp 0x26812
leal (%rcx,%rax,2), %eax
incl %eax
movw %ax, (%rsi)
retq
nop
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_misc/lv_area.c
// Function: lv_area_intersect
bool lv_area_intersect(lv_area_t * res_p, const lv_area_t * a1_p, const lv_area_t * a2_p)
{
    /* Get the smaller area from 'a1_p' and 'a2_p' */
    res_p->x1 = LV_MATH_MAX(a1_p->x1, a2_p->x1);
    res_p->y1 = LV_MATH_MAX(a1_p->y1, a2_p->y1);
    res_p->x2 = LV_MATH_MIN(a1_p->x2, a2_p->x2);
    res_p->y2 = LV_MATH_MIN(a1_p->y2, a2_p->y2);

    /*If x1 or y1 greater then x2 or y2 then the areas union is empty*/
    bool union_ok = true;
    if((res_p->x1 > res_p->x2) || (res_p->y1 > res_p->y2)) {
        union_ok = false;
    }

    return union_ok;
}

// Assembly:
movd (%rsi), %xmm0
movd (%rdx), %xmm1
pmaxsw %xmm0, %xmm1
movd %xmm1, (%rdi)
movd 0x4(%rsi), %xmm0
movd 0x4(%rdx), %xmm2
pminsw %xmm0, %xmm2
movd %xmm2, 0x4(%rdi)
pcmpgtw %xmm2, %xmm1
pshuflw $0x50, %xmm1, %xmm0     # xmm0 = xmm1[0,0,1,1,4,5,6,7]
pshufd $0x50, %xmm0, %xmm0     # xmm0 = xmm0[0,0,1,1]
movmskpd %xmm0, %eax
xorl $0x3, %eax
cmpl $0x3, %eax
sete %al
retq
// File: /workspace/github_c_makefile_star2_O2/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 0x268fb
cmpw 0x4(%rdi), %ax
jg 0x268fb
movzwl 0x2(%rsi), %eax
cmpw 0x2(%rdi), %ax
jge 0x268fe
xorl %eax, %eax
retq
cmpw 0x6(%rdi), %ax
setle %al
retq
// File: /workspace/github_c_makefile_star2_O2/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 0x2694d
movzwl 0x2(%rdi), %eax
cmpw 0x2(%rsi), %ax
jl 0x2694d
movzwl 0x4(%rdi), %eax
cmpw 0x4(%rsi), %ax
jle 0x26950
xorl %eax, %eax
retq
movzwl 0x6(%rdi), %eax
cmpw 0x6(%rsi), %ax
setle %al
retq
// File: /workspace/github_c_makefile_star2_O2/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 0x8031
movl %eax, %ebp
movl (%rbx), %r14d
cmpl %r14d, %eax
jb 0x26b43
callq 0x801a
movl %eax, 0x4(%rbx)
xorl %eax, %eax
movb %al, 0x379a1(%rip)      # 0x5e4b9
movb %al, 0x3799c(%rip)      # 0x5e4ba
movq 0x8(%rbx), %rax
testq %rax, %rax
je 0x26b35
movq %rbx, %rdi
callq *%rax
cmpb $0x0, 0x37986(%rip)     # 0x5e4b9
jne 0x26b43
testb $0x8, 0x18(%rbx)
je 0x26b43
movq %rbx, %rdi
callq 0x26d1b
cmpl %r14d, %ebp
setae %al
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_misc/lv_task.c
// Function: lv_task_create_basic
lv_task_t * lv_task_create_basic(void)
{
    lv_task_t * new_task = NULL;
    lv_task_t * tmp;

    /*Create task lists in order of priority from high to low*/
    tmp = lv_ll_get_head(&LV_GC_ROOT(_lv_task_ll));

    /*It's the first task*/
    if(NULL == tmp) {
        new_task = lv_ll_ins_head(&LV_GC_ROOT(_lv_task_ll));
        LV_ASSERT_MEM(new_task);
        if(new_task == NULL) return NULL;
    }
    /*Insert the new task to proper place according to its priority*/
    else {
        do {
            if(tmp->prio <= DEF_PRIO) {
                new_task = lv_ll_ins_prev(&LV_GC_ROOT(_lv_task_ll), tmp);
                LV_ASSERT_MEM(new_task);
                if(new_task == NULL) return NULL;
                break;
            }
            tmp = lv_ll_get_next(&LV_GC_ROOT(_lv_task_ll), tmp);
        } while(tmp != NULL);

        /*Only too high priority tasks were found. Add the task to the end*/
        if(tmp == NULL) {
            new_task = lv_ll_ins_tail(&LV_GC_ROOT(_lv_task_ll));
            LV_ASSERT_MEM(new_task);
            if(new_task == NULL) return NULL;
        }
    }

    new_task->period  = DEF_PERIOD;
    new_task->task_cb = NULL;
    new_task->prio    = DEF_PRIO;

    new_task->once     = 0;
    new_task->last_run = lv_tick_get();

    new_task->user_data = NULL;

    task_created = true;

    return new_task;
}

// Assembly:
pushq %rbx
leaq 0x3f98a(%rip), %rdi     # 0x664e0
callq 0x27db9
testq %rax, %rax
je 0x26ba9
leaq 0x3f979(%rip), %rbx     # 0x664e0
testb $0x4, 0x18(%rax)
je 0x26bd5
movq %rbx, %rdi
movq %rax, %rsi
callq 0x27e93
testq %rax, %rax
jne 0x26b67
leaq 0x3f95c(%rip), %rdi     # 0x664e0
callq 0x27dd5
movq %rax, %rbx
movq %rax, %rdi
callq 0x7994
testb %al, %al
jne 0x26bf3
leaq 0x144a1(%rip), %rdi     # 0x3b040
movq %rbx, %rsi
callq 0x7b01
jmp 0x26ba7
leaq 0x3f930(%rip), %rdi     # 0x664e0
callq 0x27d00
movq %rax, %rbx
movq %rax, %rdi
callq 0x7994
testb %al, %al
jne 0x26bf3
leaq 0x14475(%rip), %rdi     # 0x3b040
movq %rbx, %rsi
callq 0x7b01
jmp 0x26bd3
leaq 0x3f904(%rip), %rdi     # 0x664e0
movq %rax, %rsi
callq 0x27d46
movq %rax, %rbx
movq %rax, %rdi
callq 0x7994
testb %al, %al
je 0x26c2a
testq %rbx, %rbx
je 0x26c23
movl $0x1f4, (%rbx)          # imm = 0x1F4
andq $0x0, 0x8(%rbx)
movb 0x18(%rbx), %al
andb $-0x10, %al
orb $0x3, %al
movb %al, 0x18(%rbx)
callq 0x801a
movl %eax, 0x4(%rbx)
andq $0x0, 0x10(%rbx)
movb $0x1, 0x37899(%rip)     # 0x5e4ba
jmp 0x26c25
xorl %ebx, %ebx
movq %rbx, %rax
popq %rbx
retq
leaq 0x1440f(%rip), %rdi     # 0x3b040
movq %rbx, %rsi
callq 0x7b01
jmp 0x26c39
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_misc/lv_task.c
// Function: lv_task_create
lv_task_t * lv_task_create(lv_task_cb_t task_cb, uint32_t period, lv_task_prio_t prio, void * user_data)
{
    lv_task_t * new_task = lv_task_create_basic();
    LV_ASSERT_MEM(new_task);
    if(new_task == NULL) return NULL;

    lv_task_set_cb(new_task, task_cb);
    lv_task_set_period(new_task, period);
    lv_task_set_prio(new_task, prio);
    new_task->user_data = user_data;

    return new_task;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movq %rcx, %rbx
movl %edx, %ebp
movl %esi, %r15d
movq %rdi, %r12
callq 0x26b4e
movq %rax, %r14
movq %rax, %rdi
callq 0x7994
testb %al, %al
je 0x26c8a
testq %r14, %r14
je 0x26c7e
movq %r12, 0x8(%r14)
movl %r15d, (%r14)
movzbl %bpl, %esi
movq %r14, %rdi
callq 0x26ca3
movq %rbx, 0x10(%r14)
movq %r14, %rax
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
leaq 0x143af(%rip), %rdi     # 0x3b040
movq %r14, %rsi
callq 0x7b01
jmp 0x26c99
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_misc/lv_task.c
// Function: lv_task_set_prio
void lv_task_set_prio(lv_task_t * task, lv_task_prio_t prio)
{
    if(task->prio == prio) return;

    /*Find the tasks with new priority*/
    lv_task_t * i;
    LV_LL_READ(LV_GC_ROOT(_lv_task_ll), i)
    {
        if(i->prio <= prio) {
            if(i != task) lv_ll_move_before(&LV_GC_ROOT(_lv_task_ll), task, i);
            break;
        }
    }

    /*There was no such a low priority so far then add the node to the tail*/
    if(i == NULL) {
        lv_ll_move_before(&LV_GC_ROOT(_lv_task_ll), task, NULL);
    }

    task->prio = prio;
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %esi, %ebp
movb 0x18(%rdi), %al
andb $0x7, %al
cmpb %bpl, %al
je 0x26d16
movq %rdi, %rbx
leaq 0x3f823(%rip), %r14     # 0x664e0
movq %r14, %rdi
callq 0x27db9
testq %rax, %rax
je 0x26ce2
movb 0x18(%rax), %cl
andb $0x7, %cl
cmpb %bpl, %cl
jbe 0x26cf0
movq %r14, %rdi
movq %rax, %rsi
callq 0x27e93
jmp 0x26cc5
leaq 0x3f7f7(%rip), %rdi     # 0x664e0
movq %rbx, %rsi
xorl %edx, %edx
jmp 0x26d02
cmpq %rbx, %rax
je 0x26d07
leaq 0x3f7e4(%rip), %rdi     # 0x664e0
movq %rbx, %rsi
movq %rax, %rdx
callq 0x27fbf
movb 0x18(%rbx), %al
andb $0x7, %bpl
andb $-0x8, %al
orb %bpl, %al
movb %al, 0x18(%rbx)
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_misc/lv_fs.c
// Function: lv_fs_is_ready
bool lv_fs_is_ready(char letter)
{
    lv_fs_drv_t * drv = lv_fs_get_drv(letter);

    if(drv == NULL) return false; /*An unknown driver in not ready*/

    if(drv->ready_cb == NULL) return true; /*Assume the driver is always ready if no handler provided*/

    return drv->ready_cb(drv);
}

// Assembly:
pushq %rax
callq 0x26daf
testq %rax, %rax
je 0x26da7
movq 0x8(%rax), %rcx
testq %rcx, %rcx
je 0x26dab
movq %rax, %rdi
popq %rax
jmpq *%rcx
xorl %eax, %eax
jmp 0x26dad
movb $0x1, %al
popq %rcx
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_misc/lv_fs.c
// Function: lv_fs_open
lv_fs_res_t lv_fs_open(lv_fs_file_t * file_p, const char * path, lv_fs_mode_t mode)
{
    file_p->drv    = NULL;
    file_p->file_d = NULL;

    if(path == NULL) return LV_FS_RES_INV_PARAM;

    char letter = path[0];

    file_p->drv = lv_fs_get_drv(letter);

    if(file_p->drv == NULL) {
        file_p->file_d = NULL;
        return LV_FS_RES_NOT_EX;
    }

    if(file_p->drv->ready_cb != NULL) {
        if(file_p->drv->ready_cb(file_p->drv) == false) {
            file_p->drv    = NULL;
            file_p->file_d = NULL;
            return LV_FS_RES_HW_ERR;
        }
    }

    file_p->file_d = lv_mem_alloc(file_p->drv->file_size);
    LV_ASSERT_MEM(file_p->file_d);
    if(file_p->file_d == NULL) {
        file_p->drv = NULL;
        return LV_FS_RES_OUT_OF_MEM; /* Out of memory */
    }

    if(file_p->drv->open_cb == NULL) {
        return LV_FS_RES_NOT_IMP;
    }

    const char * real_path = lv_fs_get_real_path(path);
    lv_fs_res_t res        = file_p->drv->open_cb(file_p->drv, file_p->file_d, real_path, mode);

    if(res != LV_FS_RES_OK) {
        lv_mem_free(file_p->file_d);
        file_p->file_d = NULL;
        file_p->drv    = NULL;
    }

    return res;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
xorps %xmm0, %xmm0
movups %xmm0, (%rdi)
testq %rsi, %rsi
je 0x26e87
movl %edx, %ebp
movq %rsi, %r14
movq %rdi, %rbx
movsbl (%rsi), %edi
callq 0x26daf
movq %rax, 0x8(%rbx)
testq %rax, %rax
je 0x26e8c
movq 0x8(%rax), %rcx
testq %rcx, %rcx
je 0x26e2b
movq %rax, %rdi
callq *%rcx
testb %al, %al
je 0x26ea6
movq 0x8(%rbx), %rax
movzwl 0x2(%rax), %edi
callq 0x279f9
movq %rax, (%rbx)
movq %rax, %rdi
callq 0x7994
movq (%rbx), %r15
testb %al, %al
je 0x26e95
testq %r15, %r15
je 0x26eb1
movq 0x8(%rbx), %r12
movq 0x10(%r12), %r13
testq %r13, %r13
je 0x26ebb
movq %r14, %rdi
callq 0x26ed3
movzbl %bpl, %ecx
movq %r12, %rdi
movq %r15, %rsi
movq %rax, %rdx
callq *%r13
testb %al, %al
je 0x26ec0
movl %eax, %ebp
movq (%rbx), %rdi
callq 0x27a7a
xorps %xmm0, %xmm0
movups %xmm0, (%rbx)
jmp 0x26ec2
movb $0xb, %bpl
jmp 0x26ec2
andq $0x0, (%rbx)
movb $0x3, %bpl
jmp 0x26ec2
leaq 0x141a4(%rip), %rdi     # 0x3b040
movq %r15, %rsi
callq 0x7b01
jmp 0x26ea4
xorps %xmm0, %xmm0
movups %xmm0, (%rbx)
movb $0x1, %bpl
jmp 0x26ec2
andq $0x0, 0x8(%rbx)
movb $0xa, %bpl
jmp 0x26ec2
movb $0x9, %bpl
jmp 0x26ec2
xorl %ebp, %ebp
movl %ebp, %eax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_misc/lv_fs.c
// Function: lv_fs_close
lv_fs_res_t lv_fs_close(lv_fs_file_t * file_p)
{
    if(file_p->drv == NULL) {
        return LV_FS_RES_INV_PARAM;
    }

    if(file_p->drv->close_cb == NULL) {
        return LV_FS_RES_NOT_IMP;
    }

    lv_fs_res_t res = file_p->drv->close_cb(file_p->drv, file_p->file_d);

    lv_mem_free(file_p->file_d); /*Clean up*/
    file_p->file_d = NULL;
    file_p->drv    = NULL;
    file_p->file_d = NULL;

    return res;
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movq %rdi, %rbx
movq 0x8(%rdi), %rdi
testq %rdi, %rdi
je 0x26f2b
movq 0x18(%rdi), %rax
testq %rax, %rax
je 0x26f2f
movq (%rbx), %rsi
callq *%rax
movl %eax, %ebp
movq (%rbx), %rdi
callq 0x27a7a
xorps %xmm0, %xmm0
movups %xmm0, (%rbx)
movl %ebp, %eax
jmp 0x26f31
movb $0xb, %al
jmp 0x26f31
movb $0x9, %al
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_misc/lv_fs.c
// Function: lv_fs_remove
lv_fs_res_t lv_fs_remove(const char * path)
{
    if(path == NULL) return LV_FS_RES_INV_PARAM;
    lv_fs_drv_t * drv = NULL;

    char letter = path[0];

    drv = lv_fs_get_drv(letter);
    if(drv == NULL) return LV_FS_RES_NOT_EX;
    if(drv->ready_cb != NULL) {
        if(drv->ready_cb(drv) == false) return LV_FS_RES_HW_ERR;
    }

    if(drv->remove_cb == NULL) return LV_FS_RES_NOT_IMP;

    const char * real_path = lv_fs_get_real_path(path);
    lv_fs_res_t res        = drv->remove_cb(drv, real_path);

    return res;
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
testq %rdi, %rdi
je 0x26f90
movq %rdi, %rbx
movsbl (%rdi), %edi
callq 0x26daf
testq %rax, %rax
je 0x26f94
movq %rax, %r14
movq 0x8(%rax), %rax
testq %rax, %rax
je 0x26f6a
movq %r14, %rdi
callq *%rax
movl %eax, %ecx
movb $0x1, %al
testb %cl, %cl
je 0x26f9a
movq 0x20(%r14), %rax
testq %rax, %rax
je 0x26f98
movq %rbx, %rdi
movq %rax, %rbx
callq 0x26ed3
movq %r14, %rdi
movq %rax, %rsi
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %r14
jmpq *%rax
movb $0xb, %al
jmp 0x26f9a
movb $0x3, %al
jmp 0x26f9a
movb $0x9, %al
addq $0x8, %rsp
popq %rbx
popq %r14
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_misc/lv_fs.c
// Function: lv_fs_read
lv_fs_res_t lv_fs_read(lv_fs_file_t * file_p, void * buf, uint32_t btr, uint32_t * br)
{
    if(br != NULL) *br = 0;
    if(file_p->drv == NULL) return LV_FS_RES_INV_PARAM;
    if(file_p->drv->read_cb == NULL) return LV_FS_RES_NOT_IMP;

    uint32_t br_tmp = 0;
    lv_fs_res_t res = file_p->drv->read_cb(file_p->drv, file_p->file_d, buf, btr, &br_tmp);
    if(br != NULL) *br = br_tmp;

    return res;
}

// Assembly:
pushq %rbx
subq $0x10, %rsp
movq %rcx, %rbx
movl %edx, %ecx
movq %rsi, %rdx
testq %rbx, %rbx
je 0x26fb7
andl $0x0, (%rbx)
movq 0x8(%rdi), %rax
testq %rax, %rax
je 0x26fe8
movq 0x28(%rax), %r9
testq %r9, %r9
je 0x26fec
leaq 0xc(%rsp), %r8
andl $0x0, (%r8)
movq (%rdi), %rsi
movq %rax, %rdi
callq *%r9
testq %rbx, %rbx
je 0x26fee
movl 0xc(%rsp), %ecx
movl %ecx, (%rbx)
jmp 0x26fee
movb $0xb, %al
jmp 0x26fee
movb $0x9, %al
addq $0x10, %rsp
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_misc/lv_fs.c
// Function: lv_fs_write
lv_fs_res_t lv_fs_write(lv_fs_file_t * file_p, const void * buf, uint32_t btw, uint32_t * bw)
{
    if(bw != NULL) *bw = 0;

    if(file_p->drv == NULL) {
        return LV_FS_RES_INV_PARAM;
    }

    if(file_p->drv->write_cb == NULL) {
        return LV_FS_RES_NOT_IMP;
    }

    uint32_t bw_tmp = 0;
    lv_fs_res_t res = file_p->drv->write_cb(file_p->drv, file_p->file_d, buf, btw, &bw_tmp);
    if(bw != NULL) *bw = bw_tmp;

    return res;
}

// Assembly:
pushq %rbx
subq $0x10, %rsp
movq %rcx, %rbx
movl %edx, %ecx
movq %rsi, %rdx
testq %rbx, %rbx
je 0x27009
andl $0x0, (%rbx)
movq 0x8(%rdi), %rax
testq %rax, %rax
je 0x2703a
movq 0x30(%rax), %r9
testq %r9, %r9
je 0x2703e
leaq 0xc(%rsp), %r8
andl $0x0, (%r8)
movq (%rdi), %rsi
movq %rax, %rdi
callq *%r9
testq %rbx, %rbx
je 0x27040
movl 0xc(%rsp), %ecx
movl %ecx, (%rbx)
jmp 0x27040
movb $0xb, %al
jmp 0x27040
movb $0x9, %al
addq $0x10, %rsp
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_misc/lv_fs.c
// Function: lv_fs_size
lv_fs_res_t lv_fs_size(lv_fs_file_t * file_p, uint32_t * size)
{
    if(file_p->drv == NULL) {
        return LV_FS_RES_INV_PARAM;
    }

    if(file_p->drv->size_cb == NULL) return LV_FS_RES_NOT_IMP;

    if(size == NULL) return LV_FS_RES_INV_PARAM;

    lv_fs_res_t res = file_p->drv->size_cb(file_p->drv, file_p->file_d, size);

    return res;
}

// Assembly:
movq %rdi, %rcx
movq 0x8(%rdi), %rdi
movb $0xb, %al
testq %rdi, %rdi
je 0x270d2
movq 0x50(%rdi), %r8
testq %r8, %r8
je 0x270d3
movq %rsi, %rdx
testq %rsi, %rsi
je 0x270d2
movq (%rcx), %rsi
jmpq *%r8
retq
movb $0x9, %al
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_misc/lv_fs.c
// Function: lv_fs_rename
lv_fs_res_t lv_fs_rename(const char * oldname, const char * newname)
{
    if(!oldname || !newname) return LV_FS_RES_INV_PARAM;

    char letter = oldname[0];

    lv_fs_drv_t * drv = lv_fs_get_drv(letter);

    if(!drv) {
        return LV_FS_RES_NOT_EX;
    }

    if(drv->ready_cb != NULL) {
        if(drv->ready_cb(drv) == false) {
            return LV_FS_RES_HW_ERR;
        }
    }

    if(drv->rename_cb == NULL) return LV_FS_RES_NOT_IMP;

    const char * old_real = lv_fs_get_real_path(oldname);
    const char * new_real = lv_fs_get_real_path(newname);

    lv_fs_res_t res = drv->rename_cb(drv, old_real, new_real);

    return res;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
testq %rdi, %rdi
sete %cl
testq %rsi, %rsi
sete %dl
movb $0xb, %al
orb %cl, %dl
jne 0x2715a
movq %rsi, %rbx
movq %rdi, %r14
movsbl (%rdi), %edi
callq 0x26daf
testq %rax, %rax
je 0x27154
movq %rax, %r15
movq 0x8(%rax), %rax
testq %rax, %rax
je 0x2711c
movq %r15, %rdi
callq *%rax
movl %eax, %ecx
movb $0x1, %al
testb %cl, %cl
je 0x2715a
movq 0x58(%r15), %rax
testq %rax, %rax
je 0x27158
movq %r14, %rdi
movq %rax, %r12
callq 0x26ed3
movq %rax, %r14
movq %rbx, %rdi
callq 0x26ed3
movq %r15, %rdi
movq %r14, %rsi
movq %rax, %rdx
movq %r12, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
jmpq *%rax
movb $0x3, %al
jmp 0x2715a
movb $0x9, %al
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_misc/lv_fs.c
// Function: lv_fs_dir_open
lv_fs_res_t lv_fs_dir_open(lv_fs_dir_t * rddir_p, const char * path)
{
    if(path == NULL) return LV_FS_RES_INV_PARAM;

    char letter = path[0];

    rddir_p->drv = lv_fs_get_drv(letter);

    if(rddir_p->drv == NULL) {
        rddir_p->dir_d = NULL;
        return LV_FS_RES_NOT_EX;
    }

    rddir_p->dir_d = lv_mem_alloc(rddir_p->drv->rddir_size);
    LV_ASSERT_MEM(rddir_p->dir_d);
    if(rddir_p->dir_d == NULL) {
        rddir_p->dir_d = NULL;
        return LV_FS_RES_OUT_OF_MEM; /* Out of memory */
    }

    if(rddir_p->drv->dir_open_cb == NULL) {
        return LV_FS_RES_NOT_IMP;
    }

    const char * real_path = lv_fs_get_real_path(path);

    lv_fs_res_t res = rddir_p->drv->dir_open_cb(rddir_p->drv, rddir_p->dir_d, real_path);

    return res;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
testq %rsi, %rsi
je 0x271d2
movq %rsi, %rbx
movq %rdi, %r14
movsbl (%rsi), %edi
callq 0x26daf
movq %rax, 0x8(%r14)
testq %rax, %rax
je 0x271d6
movzwl 0x4(%rax), %edi
callq 0x279f9
movq %rax, (%r14)
movq %rax, %rdi
callq 0x7994
movq (%r14), %r15
testb %al, %al
je 0x271de
testq %r15, %r15
je 0x271ef
movq 0x8(%r14), %r14
movq 0x68(%r14), %rax
testq %rax, %rax
je 0x271f3
movq %rbx, %rdi
movq %rax, %rbx
callq 0x26ed3
movq %r14, %rdi
movq %r15, %rsi
movq %rax, %rdx
movq %rbx, %rax
popq %rbx
popq %r14
popq %r15
jmpq *%rax
movb $0xb, %al
jmp 0x271f5
andq $0x0, (%r14)
movb $0x3, %al
jmp 0x271f5
leaq 0x13e5b(%rip), %rdi     # 0x3b040
movq %r15, %rsi
callq 0x7b01
jmp 0x271ed
movb $0xa, %al
jmp 0x271f5
movb $0x9, %al
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_misc/lv_fs.c
// Function: lv_fs_dir_read
lv_fs_res_t lv_fs_dir_read(lv_fs_dir_t * rddir_p, char * fn)
{
    if(rddir_p->drv == NULL || rddir_p->dir_d == NULL) {
        fn[0] = '\0';
        return LV_FS_RES_INV_PARAM;
    }

    if(rddir_p->drv->dir_read_cb == NULL) {
        return LV_FS_RES_NOT_IMP;
    }

    lv_fs_res_t res = rddir_p->drv->dir_read_cb(rddir_p->drv, rddir_p->dir_d, fn);

    return res;
}

// Assembly:
movq %rsi, %rdx
movq %rdi, %rax
movq 0x8(%rdi), %rdi
testq %rdi, %rdi
je 0x2721d
movq (%rax), %rsi
testq %rsi, %rsi
je 0x2721d
movq 0x70(%rdi), %rax
testq %rax, %rax
je 0x27223
jmpq *%rax
movb $0x0, (%rdx)
movb $0xb, %al
retq
movb $0x9, %al
retq