LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_c_makefile_star2_O1/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 0x80d4
testb %al, %al
je 0x26ea6
movq %r14, %rdi
callq 0x6ad8
cmpb $0x3, %bpl
ja 0x26ec9
movzbl %bpl, %ecx
leaq 0x18bde(%rip), %rdx     # 0x3fa74
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movq %r14, %rdi
xorl %esi, %esi
jmp 0x26ee8
leaq 0x18287(%rip), %rdi     # 0x3f134
movq %r14, %rsi
callq 0x829e
jmp 0x26eb5
movq %rbx, 0x28(%rax)
movq %r14, %rdi
callq 0x9525
cmpw $0x31, %ax
jle 0x26ee0
popq %rbx
popq %r14
popq %rbp
retq
movq %rbx, 0x30(%rax)
movq %r14, %rdi
callq 0x9525
cmpw $0x32, %ax
jl 0x26ec9
movq %r14, %rdi
movl $0x2, %esi
movq %rbx, %rdx
popq %rbx
popq %r14
popq %rbp
jmp 0x1d7e4
movq %r14, %rdi
movl $0x1, %esi
movq %rbx, %rdx
popq %rbx
popq %r14
popq %rbp
jmp 0x9377
// File: /workspace/github_c_makefile_star2_O1/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 0x80d4
testb %al, %al
je 0x26f4b
movq %rbx, %rdi
callq 0x6ad8
movq %rax, %r14
movzbl %bpl, %edx
movq %rbx, %rdi
movl $0x64, %esi
callq 0x928d
movq 0x30(%r14), %rdx
movq %rbx, %rdi
movl $0x2, %esi
popq %rbx
popq %r14
popq %rbp
jmp 0x1d7e4
leaq 0x181e2(%rip), %rdi     # 0x3f134
movq %rbx, %rsi
callq 0x829e
jmp 0x26f5a
// File: /workspace/github_c_makefile_star2_O1/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 0x80d4
testb %al, %al
je 0x26f9c
movq %rbx, %rdi
callq 0x6ad8
movq %rax, %r14
movzbl %bpl, %edx
movq %rbx, %rdi
xorl %esi, %esi
callq 0x928d
movq 0x28(%r14), %rdx
movq %rbx, %rdi
movl $0x2, %esi
popq %rbx
popq %r14
popq %rbp
jmp 0x1d7e4
leaq 0x18191(%rip), %rdi     # 0x3f134
movq %rbx, %rsi
callq 0x829e
jmp 0x26fab
// File: /workspace/github_c_makefile_star2_O1/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 0x80d4
testb %al, %al
je 0x26fde
movq %rbx, %rdi
callq 0x9525
movl %eax, %r14d
movzbl %bpl, %esi
movq %rbx, %rdi
cmpw $0x32, %ax
jge 0x26fef
callq 0x26f08
jmp 0x26ff4
leaq 0x1814f(%rip), %rdi     # 0x3f134
movq %rbx, %rsi
callq 0x829e
jmp 0x26fed
callq 0x26f5c
cmpw $0x32, %r14w
setl %al
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O1/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 0x80d4
testb %al, %al
je 0x27027
movq %r14, %rdi
callq 0x6ad8
movw %bx, 0x3c(%rax)
addq $0x8, %rsp
popq %rbx
popq %r14
retq
leaq 0x18106(%rip), %rdi     # 0x3f134
movq %r14, %rsi
callq 0x829e
jmp 0x27036
// File: /workspace/github_c_makefile_star2_O1/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 0x80d4
testb %al, %al
je 0x27072
movq %rbx, %rdi
callq 0x6ad8
cmpb $0x3, %bpl
ja 0x270a2
movzbl %bpl, %ecx
leaq 0x18a22(%rip), %rdx     # 0x3fa84
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movq %rbx, %rdi
xorl %esi, %esi
jmp 0x27097
leaq 0x180bb(%rip), %rdi     # 0x3f134
movq %rbx, %rsi
callq 0x829e
jmp 0x27081
movq 0x28(%rax), %rax
jmp 0x270a4
movq 0x30(%rax), %rax
jmp 0x270a4
movq %rbx, %rdi
movl $0x1, %esi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x1d944
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O1/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 0x80d4
testb %al, %al
je 0x270c6
movq %rbx, %rdi
callq 0x6ad8
movzwl 0x3c(%rax), %eax
popq %rbx
retq
leaq 0x18067(%rip), %rdi     # 0x3f134
movq %rbx, %rsi
callq 0x829e
jmp 0x270d5
nop
// File: /workspace/github_c_makefile_star2_O1/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 0x80d4
testb %al, %al
je 0x2756c
movq %r15, %rdi
callq 0x6ad8
movq %rax, %r14
cmpb $0x5, %bpl
ja 0x275b9
movzbl %bpl, %eax
leaq 0x18552(%rip), %rcx     # 0x3fab0
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
jmp 0x27591
leaq 0x17bc1(%rip), %rdi     # 0x3f134
movq %r15, %rsi
callq 0x829e
jmp 0x2757b
movq %rbx, 0x18(%r14)
jmp 0x275b9
movq (%r14), %rdi
movl $0x2, %esi
jmp 0x275ab
movq 0x8(%r14), %rdi
movq %rbx, %rsi
callq 0x5d83
movq %r15, %rdi
callq 0x27616
jmp 0x275b9
movq (%r14), %rdi
movl $0x1, %esi
movq %rbx, %rdx
callq 0x25d1f
jmp 0x275b9
movq %rbx, 0x20(%r14)
movl %ebp, %eax
andb $-0x2, %al
cmpb $0x4, %al
jne 0x2760d
movq 0x8(%r14), %rdi
xorl %esi, %esi
callq 0x652f
movq 0x8(%r14), %rdi
movq %rax, %rsi
callq 0x652f
testq %rax, %rax
je 0x2760d
movq %rax, %r15
xorl %r12d, %r12d
cmpb $0x4, %bpl
setne %r12b
movq %r15, %rdi
movl %r12d, %esi
movq %rbx, %rdx
callq 0x1353c
movq 0x8(%r14), %rdi
movq %r15, %rsi
callq 0x652f
movq %rax, %r15
testq %rax, %rax
jne 0x275eb
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O1/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 0x80d4
testb %al, %al
je 0x27885
movq %r14, %rdi
callq 0x80d4
testb %al, %al
je 0x27896
movq %rbx, %rdi
callq 0x6ad8
movq %rax, %r12
movq 0x8(%rax), %rdi
xorl %esi, %esi
callq 0x130d4
movq %rax, %r15
movq 0x18(%r12), %rdx
movq %rax, %rdi
xorl %esi, %esi
callq 0x1353c
movq 0x20(%r12), %rdx
movq %r15, %rdi
movl $0x1, %esi
callq 0x1353c
movswl 0x28(%r12), %edx
movq %r15, %rdi
movl %edx, %esi
callq 0x553f
movq %r15, %rdi
xorl %esi, %esi
callq 0x2350c
movq %rax, %r12
movq %rax, %rdi
xorl %esi, %esi
callq 0x5fd8
movq %r12, %rdi
movq %r14, %rsi
callq 0x23916
movq %rbx, %rdi
callq 0x27616
movq %r15, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
leaq 0x178a8(%rip), %rdi     # 0x3f134
movq %rbx, %rsi
callq 0x829e
jmp 0x27894
leaq 0x17897(%rip), %rdi     # 0x3f134
movq %r14, %rsi
callq 0x829e
jmp 0x278a5
// File: /workspace/github_c_makefile_star2_O1/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 0x80d4
testb %al, %al
je 0x278d4
cmpb $0x7, %bpl
jne 0x278e5
movq %rbx, %rdi
callq 0x278ec
movq %rax, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x4d2b
leaq 0x17859(%rip), %rdi     # 0x3f134
movq %rbx, %rsi
callq 0x829e
jmp 0x278e3
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O1/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 0x80d4
testb %al, %al
je 0x2790a
movq %rbx, %rdi
callq 0x4abf
movq %rax, %rdi
popq %rbx
jmp 0x4abf
leaq 0x17823(%rip), %rdi     # 0x3f134
movq %rbx, %rsi
callq 0x829e
jmp 0x27919
// File: /workspace/github_c_makefile_star2_O1/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 0x80d4
testb %al, %al
je 0x2795d
movq %r14, %rdi
callq 0x80d4
testb %al, %al
je 0x2796e
movq %rbx, %rdi
callq 0x6ad8
movq 0x10(%rax), %rdi
movq %r14, %rsi
callq 0x19f13
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x27616
leaq 0x177d0(%rip), %rdi     # 0x3f134
movq %rbx, %rsi
callq 0x829e
jmp 0x2796c
leaq 0x177bf(%rip), %rdi     # 0x3f134
movq %r14, %rsi
callq 0x829e
jmp 0x2797d
// File: /workspace/github_c_makefile_star2_O1/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 0x80d4
testb %al, %al
je 0x279a5
movq %rbx, %rdi
callq 0x6ad8
cmpw %bp, 0x28(%rax)
jne 0x279b6
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
leaq 0x17788(%rip), %rdi     # 0x3f134
movq %rbx, %rsi
callq 0x829e
jmp 0x279b4
movw %bp, 0x28(%rax)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x27616
// File: /workspace/github_c_makefile_star2_O1/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 0x80d4
testb %al, %al
je 0x27a04
movq %rbx, %rdi
callq 0x6ad8
movq 0x8(%rax), %rdi
callq 0x567b
addl %eax, %r14d
movswl %r14w, %edx
movswl %bp, %esi
movq %rbx, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0x553f
leaq 0x17729(%rip), %rdi     # 0x3f134
movq %rbx, %rsi
callq 0x829e
jmp 0x27a13
// File: /workspace/github_c_makefile_star2_O1/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 0x80d4
testb %al, %al
je 0x27b37
movq %rbx, %rdi
callq 0x6ad8
movq 0x8(%rax), %rdi
movzbl %bpl, %ebp
movl %ebp, %esi
callq 0x6134
movq %rbx, %rdi
movl %ebp, %esi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x604d
leaq 0x175f6(%rip), %rdi     # 0x3f134
movq %rbx, %rsi
callq 0x829e
jmp 0x27b46
// File: /workspace/github_c_makefile_star2_O1/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 0x80d4
testb %al, %al
je 0x27c83
movq %rbx, %rdi
callq 0x6ad8
movq (%rax), %rdi
callq 0x26288
movq %rax, %rbx
movq %rax, %rdi
callq 0x6697
movq %rax, %r14
movq %rbx, %rdi
callq 0x5651
movzwl 0x1a(%r14), %ecx
addw 0x1c(%r14), %cx
subl %ecx, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
retq
leaq 0x174aa(%rip), %rdi     # 0x3f134
movq %rbx, %rsi
callq 0x829e
jmp 0x27c92
// File: /workspace/github_c_makefile_star2_O1/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 0x80d4
testb %al, %al
je 0x27ccc
movq %rbx, %rdi
callq 0x6ad8
cmpb $0x5, %bpl
ja 0x27d15
movzbl %bpl, %ecx
leaq 0x17e0a(%rip), %rdx     # 0x3fac8
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movq %rbx, %rdi
jmp 0x27cf1
leaq 0x17461(%rip), %rdi     # 0x3f134
movq %rbx, %rsi
callq 0x829e
jmp 0x27cdb
movq 0x18(%rax), %rax
jmp 0x27d17
movq (%rax), %rdi
movl $0x2, %esi
jmp 0x27d04
movq 0x8(%rax), %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x6697
movq (%rax), %rdi
movl $0x1, %esi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x25ddf
movq 0x20(%rax), %rax
jmp 0x27d17
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O1/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 0x80d4
testb %al, %al
je 0x27d5a
movq %rbx, %rdi
callq 0x80d4
testb %al, %al
je 0x27d6b
movq %r14, %rdi
callq 0x6ad8
movq (%rax), %rdi
movzbl %bpl, %edx
movq %rbx, %rsi
popq %rbx
popq %r14
popq %rbp
jmp 0x265b1
leaq 0x173d3(%rip), %rdi     # 0x3f134
movq %r14, %rsi
callq 0x829e
jmp 0x27d69
leaq 0x173c2(%rip), %rdi     # 0x3f134
movq %rbx, %rsi
callq 0x829e
jmp 0x27d7a
// File: /workspace/github_c_makefile_star2_O1/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 0x28577
movb $0x4, %al
cmpb $0x7, %dl
ja 0x28579
shlb $0x3, %dl
movabsq $0xf0d0b0906040200, %r8 # imm = 0xF0D0B0906040200
movl %edx, %ecx
shrq %cl, %r8
movl %r8d, %edx
jmp 0x28579
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
// File: /workspace/github_c_makefile_star2_O1/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 0x285ec
movzwl (%rdi), %ecx
decl %ecx
movw %cx, (%rdi)
subl %ecx, %eax
addl %eax, %eax
addw (%rsi), %ax
incl %eax
jmp 0x285f1
leal (%rcx,%rax,2), %eax
incl %eax
movw %ax, (%rsi)
retq
nopl (%rax)
// File: /workspace/github_c_makefile_star2_O1/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:
movzwl 0x4(%rdi), %eax
addw %si, %ax
subw (%rdi), %ax
movw %si, (%rdi)
movzwl 0x6(%rdi), %ecx
addw %dx, %cx
subw 0x2(%rdi), %cx
movw %dx, 0x2(%rdi)
movw %ax, 0x4(%rdi)
movw %cx, 0x6(%rdi)
retq
// File: /workspace/github_c_makefile_star2_O1/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:
movzwl (%rsi), %ecx
movzwl (%rdx), %eax
cmpw %ax, %cx
cmovgl %ecx, %eax
movw %ax, (%rdi)
movzwl 0x2(%rsi), %ecx
movzwl 0x2(%rdx), %r8d
cmpw %r8w, %cx
cmovgl %ecx, %r8d
movw %r8w, 0x2(%rdi)
movzwl 0x4(%rsi), %ecx
movzwl 0x4(%rdx), %r9d
cmpw %r9w, %cx
cmovll %ecx, %r9d
movw %r9w, 0x4(%rdi)
movzwl 0x6(%rsi), %ecx
movzwl 0x6(%rdx), %edx
cmpw %dx, %cx
cmovll %ecx, %edx
movw %dx, 0x6(%rdi)
cmpw %r9w, %ax
setle %cl
cmpw %dx, %r8w
setle %al
andb %cl, %al
retq
// File: /workspace/github_c_makefile_star2_O1/OnionIoT[P]lv_example/lvgl/src/lv_misc/lv_area.c
// Function: lv_area_join
void lv_area_join(lv_area_t * a_res_p, const lv_area_t * a1_p, const lv_area_t * a2_p)
{
    a_res_p->x1 = LV_MATH_MIN(a1_p->x1, a2_p->x1);
    a_res_p->y1 = LV_MATH_MIN(a1_p->y1, a2_p->y1);
    a_res_p->x2 = LV_MATH_MAX(a1_p->x2, a2_p->x2);
    a_res_p->y2 = LV_MATH_MAX(a1_p->y2, a2_p->y2);
}

// Assembly:
movzwl (%rsi), %eax
movzwl (%rdx), %ecx
cmpw %cx, %ax
cmovll %eax, %ecx
movw %cx, (%rdi)
movzwl 0x2(%rsi), %eax
movzwl 0x2(%rdx), %ecx
cmpw %cx, %ax
cmovll %eax, %ecx
movw %cx, 0x2(%rdi)
movzwl 0x4(%rsi), %eax
movzwl 0x4(%rdx), %ecx
cmpw %cx, %ax
cmovgl %eax, %ecx
movw %cx, 0x4(%rdi)
movzwl 0x6(%rsi), %eax
movzwl 0x6(%rdx), %ecx
cmpw %cx, %ax
cmovgl %eax, %ecx
movw %cx, 0x6(%rdi)
retq
// File: /workspace/github_c_makefile_star2_O1/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 0x2871a
cmpw 0x4(%rdi), %ax
jg 0x2871a
movzwl 0x2(%rsi), %eax
cmpw 0x2(%rdi), %ax
jge 0x2871d
xorl %eax, %eax
retq
cmpw 0x6(%rdi), %ax
setle %al
retq
// File: /workspace/github_c_makefile_star2_O1/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 0x2876c
movzwl 0x2(%rdi), %eax
cmpw 0x2(%rsi), %ax
jl 0x2876c
movzwl 0x4(%rdi), %eax
cmpw 0x4(%rsi), %ax
jle 0x2876f
xorl %eax, %eax
retq
movzwl 0x6(%rdi), %eax
cmpw 0x6(%rsi), %ax
setle %al
retq
// File: /workspace/github_c_makefile_star2_O1/OnionIoT[P]lv_example/lvgl/src/lv_misc/lv_area.c
// Function: lv_area_increment
void lv_area_increment(lv_area_t * a_p, const lv_coord_t amount)
{
    a_p->x1 -= amount;
    a_p->y1 -= amount;
    a_p->x2 += amount;
    a_p->y2 += amount;
}

// Assembly:
subw %si, (%rdi)
subw %si, 0x2(%rdi)
addw %si, 0x4(%rdi)
addw %si, 0x6(%rdi)
retq
nop
// File: /workspace/github_c_makefile_star2_O1/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 0x8855
movl %eax, %ebp
movl (%rbx), %r14d
cmpl %r14d, %eax
jb 0x28982
callq 0x883e
movl %eax, 0x4(%rbx)
xorl %eax, %eax
movb %al, 0x37b62(%rip)      # 0x604b9
movb %al, 0x37b5d(%rip)      # 0x604ba
movq 0x8(%rbx), %rax
testq %rax, %rax
je 0x2896b
movq %rbx, %rdi
callq *%rax
cmpb $0x0, 0x37b47(%rip)     # 0x604b9
jne 0x28982
testb $0x8, 0x18(%rbx)
je 0x28982
movq %rbx, %rdi
callq 0x28b7f
cmpl %r14d, %ebp
setae %al
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O1/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 %rbp
pushq %r14
pushq %rbx
leaq 0x3fb48(%rip), %rdi     # 0x684e0
callq 0x29cce
testq %rax, %rax
je 0x289c7
leaq 0x3fb37(%rip), %r14     # 0x684e0
xorl %ebx, %ebx
movb 0x18(%rax), %bpl
testb $0x4, %bpl
je 0x289f3
movq %r14, %rdi
movq %rax, %rsi
callq 0x29dfb
testq %rax, %rax
jne 0x289ab
jmp 0x28a16
leaq 0x3fb12(%rip), %rdi     # 0x684e0
callq 0x29c08
movq %rax, %rbx
movq %rax, %rdi
callq 0x80d4
testb %al, %al
jne 0x28a37
leaq 0x16657(%rip), %rdi     # 0x3f040
movq %rbx, %rsi
callq 0x829e
jmp 0x289f1
leaq 0x3fae6(%rip), %rdi     # 0x684e0
movq %rax, %rsi
callq 0x29c51
movq %rax, %rbx
movq %rax, %rdi
callq 0x80d4
testb %al, %al
je 0x28a72
testq %rbx, %rbx
je 0x28a68
testb $0x4, %bpl
je 0x28a3c
leaq 0x3fabd(%rip), %rdi     # 0x684e0
callq 0x29cea
movq %rax, %rbx
movq %rax, %rdi
callq 0x80d4
testb %al, %al
je 0x28a83
testq %rbx, %rbx
je 0x28a68
movl $0x1f4, (%rbx)          # imm = 0x1F4
xorl %r14d, %r14d
movq %r14, 0x8(%rbx)
movb 0x18(%rbx), %al
andb $-0x10, %al
orb $0x3, %al
movb %al, 0x18(%rbx)
callq 0x883e
movl %eax, 0x4(%rbx)
movq %r14, 0x10(%rbx)
movb $0x1, 0x37a54(%rip)     # 0x604ba
jmp 0x28a6a
xorl %ebx, %ebx
movq %rbx, %rax
popq %rbx
popq %r14
popq %rbp
retq
leaq 0x165c7(%rip), %rdi     # 0x3f040
movq %rbx, %rsi
callq 0x829e
jmp 0x28a81
leaq 0x165b6(%rip), %rdi     # 0x3f040
movq %rbx, %rsi
callq 0x829e
jmp 0x28a92
// File: /workspace/github_c_makefile_star2_O1/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, %r14
movl %edx, %ebp
movl %esi, %r15d
movq %rdi, %r12
callq 0x2898d
movq %rax, %rbx
movq %rax, %rdi
callq 0x80d4
testb %al, %al
je 0x28ad9
testq %rbx, %rbx
je 0x28aea
movq %r12, 0x8(%rbx)
movl %r15d, (%rbx)
movzbl %bpl, %esi
movq %rbx, %rdi
callq 0x28b00
movq %r14, 0x10(%rbx)
jmp 0x28aec
leaq 0x16560(%rip), %rdi     # 0x3f040
movq %rbx, %rsi
callq 0x829e
jmp 0x28ae8
xorl %ebx, %ebx
movq %rbx, %rax
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O1/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 0x28b7a
movq %rdi, %rbx
leaq 0x3f9c6(%rip), %rdi     # 0x684e0
callq 0x29cce
testq %rax, %rax
je 0x28b46
leaq 0x3f9b5(%rip), %r14     # 0x684e0
movb 0x18(%rax), %cl
andb $0x7, %cl
cmpb %bpl, %cl
jbe 0x28b54
movq %r14, %rdi
movq %rax, %rsi
callq 0x29dfb
testq %rax, %rax
jne 0x28b2b
leaq 0x3f993(%rip), %rdi     # 0x684e0
movq %rbx, %rsi
xorl %edx, %edx
jmp 0x28b66
cmpq %rbx, %rax
je 0x28b6b
leaq 0x3f980(%rip), %rdi     # 0x684e0
movq %rbx, %rsi
movq %rax, %rdx
callq 0x29f31
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_O1/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 0x28c13
testq %rax, %rax
je 0x28c0b
movq 0x8(%rax), %rcx
testq %rcx, %rcx
je 0x28c0f
movq %rax, %rdi
popq %rax
jmpq *%rcx
xorl %eax, %eax
jmp 0x28c11
movb $0x1, %al
popq %rcx
retq
// File: /workspace/github_c_makefile_star2_O1/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 %r14
pushq %rbx
xorps %xmm0, %xmm0
movups %xmm0, (%rdi)
testq %rsi, %rsi
je 0x28ce2
movl %edx, %ebp
movq %rsi, %r14
movq %rdi, %rbx
movsbl (%rsi), %edi
callq 0x28c13
movq %rax, 0x8(%rbx)
testq %rax, %rax
je 0x28ce7
movq 0x8(%rax), %rcx
testq %rcx, %rcx
je 0x28c8d
movq %rax, %rdi
callq *%rcx
testb %al, %al
je 0x28d01
movq 0x8(%rbx), %rax
movzwl 0x2(%rax), %edi
callq 0x298d9
movq %rax, (%rbx)
movq %rax, %rdi
callq 0x80d4
movq (%rbx), %rsi
testb %al, %al
je 0x28cf3
testq %rsi, %rsi
je 0x28d2b
movq 0x8(%rbx), %rdi
movq 0x10(%rdi), %rax
testq %rax, %rax
je 0x28d38
incq %r14
movabsq $0x200000000801, %rcx   # imm = 0x200000000801
movzbl (%r14), %edx
addl $-0x2f, %edx
cmpl $0x2d, %edx
ja 0x28d0c
btq %rdx, %rcx
jae 0x28d0c
incq %r14
jmp 0x28ccb
movb $0xb, %bpl
jmp 0x28d3b
movq $0x0, (%rbx)
movb $0x3, %bpl
jmp 0x28d3b
leaq 0x16346(%rip), %rdi     # 0x3f040
callq 0x829e
jmp 0x28cff
xorps %xmm0, %xmm0
movups %xmm0, (%rbx)
movb $0x1, %bpl
jmp 0x28d3b
movzbl %bpl, %ecx
movq %r14, %rdx
callq *%rax
movl %eax, %ebp
testb %al, %al
je 0x28d3b
movq (%rbx), %rdi
callq 0x29984
xorps %xmm0, %xmm0
movups %xmm0, (%rbx)
jmp 0x28d3b
movq $0x0, 0x8(%rbx)
movb $0xa, %bpl
jmp 0x28d3b
movb $0x9, %bpl
movl %ebp, %eax
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O1/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 0x28d73
movq 0x18(%rdi), %rax
testq %rax, %rax
je 0x28d77
movq (%rbx), %rsi
callq *%rax
movl %eax, %ebp
movq (%rbx), %rdi
callq 0x29984
xorps %xmm0, %xmm0
movups %xmm0, (%rbx)
movl %ebp, %eax
jmp 0x28d79
movb $0xb, %al
jmp 0x28d79
movb $0x9, %al
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O1/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 0x28dde
movq %rdi, %rbx
movsbl (%rdi), %edi
callq 0x28c13
testq %rax, %rax
je 0x28de2
movq %rax, %r14
movq 0x8(%rax), %rax
testq %rax, %rax
je 0x28db2
movq %r14, %rdi
callq *%rax
movl %eax, %ecx
movb $0x1, %al
testb %cl, %cl
je 0x28df7
movq 0x20(%r14), %rax
testq %rax, %rax
je 0x28df5
incq %rbx
movabsq $0x200000000801, %rcx   # imm = 0x200000000801
movzbl (%rbx), %edx
addl $-0x2f, %edx
cmpl $0x2d, %edx
ja 0x28de6
btq %rdx, %rcx
jae 0x28de6
incq %rbx
jmp 0x28dc8
movb $0xb, %al
jmp 0x28df7
movb $0x3, %al
jmp 0x28df7
movq %r14, %rdi
movq %rbx, %rsi
addq $0x8, %rsp
popq %rbx
popq %r14
jmpq *%rax
movb $0x9, %al
addq $0x8, %rsp
popq %rbx
popq %r14
retq
// File: /workspace/github_c_makefile_star2_O1/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 0x28e17
movl $0x0, (%rbx)
movq 0x8(%rdi), %rax
testq %rax, %rax
je 0x28e4b
movq 0x28(%rax), %r9
testq %r9, %r9
je 0x28e4f
leaq 0xc(%rsp), %r8
movl $0x0, (%r8)
movq (%rdi), %rsi
movq %rax, %rdi
callq *%r9
testq %rbx, %rbx
je 0x28e51
movl 0xc(%rsp), %ecx
movl %ecx, (%rbx)
jmp 0x28e51
movb $0xb, %al
jmp 0x28e51
movb $0x9, %al
addq $0x10, %rsp
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O1/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 0x28e6f
movl $0x0, (%rbx)
movq 0x8(%rdi), %rax
testq %rax, %rax
je 0x28ea3
movq 0x30(%rax), %r9
testq %r9, %r9
je 0x28ea7
leaq 0xc(%rsp), %r8
movl $0x0, (%r8)
movq (%rdi), %rsi
movq %rax, %rdi
callq *%r9
testq %rbx, %rbx
je 0x28ea9
movl 0xc(%rsp), %ecx
movl %ecx, (%rbx)
jmp 0x28ea9
movb $0xb, %al
jmp 0x28ea9
movb $0x9, %al
addq $0x10, %rsp
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O1/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 0x28f3b
movq 0x50(%rdi), %r8
testq %r8, %r8
je 0x28f3c
movq %rsi, %rdx
testq %rsi, %rsi
je 0x28f3b
movq (%rcx), %rsi
jmpq *%r8
retq
movb $0x9, %al
retq
// File: /workspace/github_c_makefile_star2_O1/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 %rbx
testq %rdi, %rdi
sete %cl
testq %rsi, %rsi
sete %dl
movb $0xb, %al
orb %cl, %dl
jne 0x28fdd
movq %rsi, %rbx
movq %rdi, %r14
movsbl (%rdi), %edi
callq 0x28c13
testq %rax, %rax
je 0x28fd7
movq %rax, %r15
movq 0x8(%rax), %rax
testq %rax, %rax
je 0x28f86
movq %r15, %rdi
callq *%rax
movl %eax, %ecx
movb $0x1, %al
testb %cl, %cl
je 0x28fdd
movq 0x58(%r15), %rax
testq %rax, %rax
je 0x28fdb
incq %r14
movabsq $0x200000000801, %rcx   # imm = 0x200000000801
movzbl (%r14), %edx
addl $-0x2f, %edx
cmpl $0x2d, %edx
ja 0x28fb9
btq %rdx, %rcx
jae 0x28fb9
incq %r14
jmp 0x28f9c
btq %rdx, %rcx
jae 0x28fc7
incq %rbx
movzbl (%rbx), %edx
addl $-0x2f, %edx
cmpl $0x2d, %edx
jbe 0x28fb3
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
popq %rbx
popq %r14
popq %r15
jmpq *%rax
movb $0x3, %al
jmp 0x28fdd
movb $0x9, %al
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O1/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 %r14
pushq %rbx
pushq %rax
testq %rsi, %rsi
je 0x29053
movq %rsi, %rbx
movq %rdi, %r14
movsbl (%rsi), %edi
callq 0x28c13
movq %rax, 0x8(%r14)
testq %rax, %rax
je 0x29057
movzwl 0x4(%rax), %edi
callq 0x298d9
movq %rax, (%r14)
movq %rax, %rdi
callq 0x80d4
movq (%r14), %rsi
testb %al, %al
je 0x29062
testq %rsi, %rsi
je 0x2907c
movq 0x8(%r14), %rdi
movq 0x68(%rdi), %rax
testq %rax, %rax
je 0x29087
incq %rbx
movabsq $0x200000000801, %rcx   # imm = 0x200000000801
movzbl (%rbx), %edx
addl $-0x2f, %edx
cmpl $0x2d, %edx
ja 0x29070
btq %rdx, %rcx
jae 0x29070
incq %rbx
jmp 0x2903d
movb $0xb, %al
jmp 0x29089
movq $0x0, (%r14)
movb $0x3, %al
jmp 0x29089
leaq 0x15fd7(%rip), %rdi     # 0x3f040
callq 0x829e
jmp 0x2906e
movq %rbx, %rdx
addq $0x8, %rsp
popq %rbx
popq %r14
jmpq *%rax
movq $0x0, (%r14)
movb $0xa, %al
jmp 0x29089
movb $0x9, %al
addq $0x8, %rsp
popq %rbx
popq %r14
retq
// File: /workspace/github_c_makefile_star2_O1/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 0x290b3
movq (%rax), %rsi
testq %rsi, %rsi
je 0x290b3
movq 0x70(%rdi), %rax
testq %rax, %rax
je 0x290b9
jmpq *%rax
movb $0x0, (%rdx)
movb $0xb, %al
retq
movb $0x9, %al
retq
// File: /workspace/github_c_makefile_star2_O1/OnionIoT[P]lv_example/lvgl/src/lv_misc/lv_fs.c
// Function: lv_fs_dir_close
lv_fs_res_t lv_fs_dir_close(lv_fs_dir_t * rddir_p)
{
    if(rddir_p->drv == NULL || rddir_p->dir_d == NULL) {
        return LV_FS_RES_INV_PARAM;
    }

    lv_fs_res_t res;

    if(rddir_p->drv->dir_close_cb == NULL) {
        res = LV_FS_RES_NOT_IMP;
    } else {
        res = rddir_p->drv->dir_close_cb(rddir_p->drv, rddir_p->dir_d);
    }

    lv_mem_free(rddir_p->dir_d); /*Clean up*/
    rddir_p->dir_d = NULL;
    rddir_p->drv   = NULL;
    rddir_p->dir_d = NULL;

    return res;
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movq %rdi, %rbx
movq 0x8(%rdi), %rdi
movb $0xb, %bpl
testq %rdi, %rdi
je 0x290f6
movq (%rbx), %rsi
testq %rsi, %rsi
je 0x290f6
movq 0x78(%rdi), %rax
testq %rax, %rax
je 0x290e5
callq *%rax
movl %eax, %ebp
jmp 0x290e8
movb $0x9, %bpl
movq (%rbx), %rdi
callq 0x29984
xorps %xmm0, %xmm0
movups %xmm0, (%rbx)
movl %ebp, %eax
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O1/OnionIoT[P]lv_example/lvgl/src/lv_misc/lv_fs.c
// Function: lv_fs_free_space
lv_fs_res_t lv_fs_free_space(char letter, uint32_t * total_p, uint32_t * free_p)
{
    lv_fs_drv_t * drv = lv_fs_get_drv(letter);

    if(drv == NULL) {
        return LV_FS_RES_INV_PARAM;
    }

    lv_fs_res_t res;

    if(drv->free_space_cb == NULL) {
        res = LV_FS_RES_NOT_IMP;
    } else {
        uint32_t total_tmp = 0;
        uint32_t free_tmp  = 0;
        res                = drv->free_space_cb(drv, &total_tmp, &free_tmp);

        if(total_p != NULL) *total_p = total_tmp;
        if(free_p != NULL) *free_p = free_tmp;
    }

    return res;
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rdx, %rbx
movq %rsi, %r14
callq 0x28c13
testq %rax, %rax
je 0x29147
movq 0x60(%rax), %rcx
testq %rcx, %rcx
je 0x2914b
xorl %edi, %edi
leaq 0x4(%rsp), %rsi
movl %edi, (%rsi)
movq %rsp, %rdx
movl %edi, (%rdx)
movq %rax, %rdi
callq *%rcx
testq %r14, %r14
je 0x2913b
movl 0x4(%rsp), %ecx
movl %ecx, (%r14)
testq %rbx, %rbx
je 0x2914d
movl (%rsp), %ecx
movl %ecx, (%rbx)
jmp 0x2914d
movb $0xb, %al
jmp 0x2914d
movb $0x9, %al
addq $0x8, %rsp
popq %rbx
popq %r14
retq
// File: /workspace/github_c_makefile_star2_O1/OnionIoT[P]lv_example/lvgl/src/lv_misc/lv_fs.c
// Function: lv_fs_drv_register
void lv_fs_drv_register(lv_fs_drv_t * drv_p)
{
    /*Save the new driver*/
    lv_fs_drv_t * new_drv;
    new_drv = lv_ll_ins_head(&LV_GC_ROOT(_lv_drv_ll));
    LV_ASSERT_MEM(new_drv);
    if(new_drv == NULL) return;

    memcpy(new_drv, drv_p, sizeof(lv_fs_drv_t));
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
leaq 0x3f3a2(%rip), %rdi     # 0x68528
callq 0x29c08
movq %rax, %r14
movq %rax, %rdi
callq 0x80d4
testb %al, %al
je 0x291b5
testq %r14, %r14
je 0x291ad
movl $0x10, %ecx
movq %r14, %rdi
movq %rbx, %rsi
rep  movsq (%rsi), %es:(%rdi)
addq $0x8, %rsp
popq %rbx
popq %r14
retq
leaq 0x15e84(%rip), %rdi     # 0x3f040
movq %r14, %rsi
callq 0x829e
jmp 0x291c4
// File: /workspace/github_c_makefile_star2_O1/OnionIoT[P]lv_example/lvgl/src/lv_misc/lv_fs.c
// Function: lv_fs_get_letters
char * lv_fs_get_letters(char * buf)
{
    lv_fs_drv_t * drv;
    uint8_t i = 0;

    LV_LL_READ(LV_GC_ROOT(_lv_drv_ll), drv)
    {
        buf[i] = drv->letter;
        i++;
    }

    buf[i] = '\0';

    return buf;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rdi, %rbx
leaq 0x3f353(%rip), %rdi     # 0x68528
callq 0x29cce
testq %rax, %rax
je 0x2920c
xorl %r15d, %r15d
leaq 0x3f33f(%rip), %r14     # 0x68528
movb (%rax), %cl
movzbl %r15b, %r15d
movb %cl, (%rbx,%r15)
incb %r15b
movq %r14, %rdi
movq %rax, %rsi
callq 0x29dfb
testq %rax, %rax
jne 0x291e9
movzbl %r15b, %eax
jmp 0x2920e
xorl %eax, %eax
movb $0x0, (%rbx,%rax)
movq %rbx, %rax
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O1/OnionIoT[P]lv_example/lvgl/src/lv_misc/lv_fs.c
// Function: lv_fs_get_ext
const char * lv_fs_get_ext(const char * fn)
{
    size_t i;
    for(i = strlen(fn); i > 0; i--) {
        if(fn[i] == '.') {
            return &fn[i + 1];
        } else if(fn[i] == '/' || fn[i] == '\\') {
            return ""; /*No extension if a '\' or '/' found*/
        }
    }

    return ""; /*Empty string if no '.' in the file name. */
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
callq 0x2070
movq %rax, %rcx
leaq 0x1a19f(%rip), %rax     # 0x433cd
testq %rcx, %rcx
je 0x2925a
leaq (%rcx,%rbx), %rdx
incq %rdx
movzbl -0x1(%rdx), %esi
cmpl $0x5c, %esi
je 0x2925a
cmpl $0x2f, %esi
je 0x2925a
cmpl $0x2e, %esi
je 0x29257
decq %rdx
decq %rcx
jne 0x2923a
jmp 0x2925a
movq %rdx, %rax
popq %rbx
retq