LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_tabview.c
// Function: lv_tabview_get_tab
lv_obj_t * lv_tabview_get_tab(const lv_obj_t * tabview, uint16_t id)
{
    LV_ASSERT_OBJ(tabview, LV_OBJX_NAME);

    lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
    uint16_t i             = 0;
    lv_obj_t * page        = lv_obj_get_child_back(ext->content, NULL);

    while(page != NULL && i != id) {
        i++;
        page = lv_obj_get_child_back(ext->content, page);
    }

    if(i == id) return page;

    return NULL;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movl %esi, %ebx
movq %rdi, %r14
callq 0x80e4
testb %al, %al
je 0x11641
movq %r14, %rdi
callq 0x6af7
movq %rax, %r14
movq 0x10(%rax), %rdi
xorl %r15d, %r15d
xorl %esi, %esi
callq 0x654e
testq %rax, %rax
sete %cl
testw %bx, %bx
sete %dl
orb %cl, %dl
jne 0x1162b
leal -0x1(%rbx), %ebp
xorl %r12d, %r12d
leal 0x1(%r12), %r15d
movq 0x10(%r14), %rdi
movq %rax, %rsi
callq 0x654e
testq %rax, %rax
je 0x1162b
cmpw %r12w, %bp
movl %r15d, %r12d
jne 0x1160c
xorl %ecx, %ecx
cmpw %bx, %r15w
cmoveq %rax, %rcx
movq %rcx, %rax
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
leaq 0x2db9c(%rip), %rdi     # 0x3f1e4
movq %r14, %rsi
callq 0x8294
jmp 0x11650
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_tabview.c
// Function: tabpage_signal
static lv_res_t tabpage_signal(lv_obj_t * tab_page, lv_signal_t sign, void * param)
{
    lv_res_t res;

    /* Include the ancient signal function */
    res = page_signal(tab_page, sign, param);
    if(res != LV_RES_OK) return res;
    if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, "");

    lv_obj_t * cont    = lv_obj_get_parent(tab_page);
    lv_obj_t * tabview = lv_obj_get_parent(cont);

    if(lv_tabview_get_sliding(tabview) == false) return res;

    if(sign == LV_SIGNAL_PRESSED) {
        tabpage_pressed_handler(tabview, tab_page);
    } else if(sign == LV_SIGNAL_PRESSING) {
        tabpage_pressing_handler(tabview, tab_page);
    } else if(sign == LV_SIGNAL_RELEASED || sign == LV_SIGNAL_PRESS_LOST) {
        tabpage_press_lost_handler(tabview, tab_page);
    }

    return res;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdx, %r15
movl %esi, %ebp
movq %rdi, %r14
callq *0x4eca2(%rip)          # 0x60338
movl %eax, %ebx
cmpb $0x1, %al
jne 0x11732
cmpb $0x7, %bpl
jne 0x116bf
leaq 0x31f10(%rip), %rsi     # 0x435bd
movq %r15, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x6c02
movq %r14, %rdi
callq 0x4ab5
movq %rax, %rdi
callq 0x4ab5
movq %rax, %r15
movq %rax, %rdi
callq 0x12165
movb $0x1, %bl
testb %al, %al
je 0x11732
cmpb $0x9, %bpl
je 0x11710
movzbl %bpl, %eax
cmpl $0x8, %eax
jne 0x1171d
movq %r15, %rdi
callq 0x6af7
movq %rax, %r14
callq 0x378a
addq $0x20, %r14
movq %rax, %rdi
movq %r14, %rsi
callq 0x3838
jmp 0x11732
movq %r15, %rdi
movq %r14, %rsi
callq 0x121f2
jmp 0x11732
andb $-0x2, %bpl
cmpb $0xa, %bpl
jne 0x11732
movq %r15, %rdi
movq %r14, %rsi
callq 0x123b9
movl %ebx, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_tabview.c
// Function: tabpage_scrl_signal
static lv_res_t tabpage_scrl_signal(lv_obj_t * tab_scrl, lv_signal_t sign, void * param)
{
    lv_res_t res;

    /* Include the ancient signal function */
    res = page_scrl_signal(tab_scrl, sign, param);
    if(res != LV_RES_OK) return res;
    if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, "");

    lv_obj_t * tab_page = lv_obj_get_parent(tab_scrl);
    lv_obj_t * cont     = lv_obj_get_parent(tab_page);
    lv_obj_t * tabview  = lv_obj_get_parent(cont);

    if(lv_tabview_get_sliding(tabview) == false) return res;

    if(sign == LV_SIGNAL_PRESSED) {
        tabpage_pressed_handler(tabview, tab_page);
    } else if(sign == LV_SIGNAL_PRESSING) {
        tabpage_pressing_handler(tabview, tab_page);
    } else if(sign == LV_SIGNAL_RELEASED || sign == LV_SIGNAL_PRESS_LOST) {
        tabpage_press_lost_handler(tabview, tab_page);
    }

    return res;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdx, %r14
movl %esi, %ebp
movq %rdi, %r15
callq *0x4ebec(%rip)          # 0x60340
movl %eax, %ebx
cmpb $0x1, %al
jne 0x117fb
cmpb $0x7, %bpl
jne 0x1177d
leaq 0x31e52(%rip), %rsi     # 0x435bd
movq %r14, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x6c02
movq %r15, %rdi
callq 0x4ab5
movq %rax, %r14
movq %rax, %rdi
callq 0x4ab5
movq %rax, %rdi
callq 0x4ab5
movq %rax, %r15
movq %rax, %rdi
callq 0x12165
movb $0x1, %bl
testb %al, %al
je 0x117fb
cmpb $0x9, %bpl
je 0x117d9
movzbl %bpl, %eax
cmpl $0x8, %eax
jne 0x117e6
movq %r15, %rdi
callq 0x6af7
movq %rax, %r14
callq 0x378a
addq $0x20, %r14
movq %rax, %rdi
movq %r14, %rsi
callq 0x3838
jmp 0x117fb
movq %r15, %rdi
movq %r14, %rsi
callq 0x121f2
jmp 0x117fb
andb $-0x2, %bpl
cmpb $0xa, %bpl
jne 0x117fb
movq %r15, %rdi
movq %r14, %rsi
callq 0x123b9
movl %ebx, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_tabview.c
// Function: lv_tabview_get_anim_time
uint16_t lv_tabview_get_anim_time(const lv_obj_t * tabview)
{
    LV_ASSERT_OBJ(tabview, LV_OBJX_NAME);

#if LV_USE_ANIMATION
    lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
    return ext->anim_time;
#else
    (void)tabview;
    return 0;
#endif
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x11f60
movq %rbx, %rdi
callq 0x6af7
movzwl 0x28(%rax), %eax
popq %rbx
retq
leaq 0x2d27d(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x11f6f
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_tabview.c
// Function: lv_tabview_get_style
const lv_style_t * lv_tabview_get_style(const lv_obj_t * tabview, lv_tabview_style_t type)
{
    LV_ASSERT_OBJ(tabview, LV_OBJX_NAME);

    const lv_style_t * style = NULL;
    lv_tabview_ext_t * ext   = lv_obj_get_ext_attr(tabview);

    switch(type) {
        case LV_TABVIEW_STYLE_BG: style = lv_obj_get_style(tabview); break;
        case LV_TABVIEW_STYLE_BTN_BG: style = lv_btnm_get_style(ext->btns, LV_BTNM_STYLE_BG); break;
        case LV_TABVIEW_STYLE_BTN_REL: style = lv_btnm_get_style(ext->btns, LV_BTNM_STYLE_BTN_REL); break;
        case LV_TABVIEW_STYLE_BTN_PR: style = lv_btnm_get_style(ext->btns, LV_BTNM_STYLE_BTN_PR); break;
        case LV_TABVIEW_STYLE_BTN_TGL_REL: style = lv_btnm_get_style(ext->btns, LV_BTNM_STYLE_BTN_TGL_REL); break;
        case LV_TABVIEW_STYLE_BTN_TGL_PR: style = lv_btnm_get_style(ext->btns, LV_BTNM_STYLE_BTN_TGL_PR); break;
        default: style = NULL; break;
    }

    return style;
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x11fb2
movq %rbx, %rdi
callq 0x6af7
cmpb $0x6, %bpl
ja 0x11fd7
movzbl %bpl, %ecx
leaq 0x2d705(%rip), %rdx     # 0x3f6a0
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x66b6
leaq 0x2d22b(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x11fc1
movq (%rax), %rdi
movl $0x1, %esi
jmp 0x11ff9
movq (%rax), %rdi
movl $0x4, %esi
jmp 0x11ff9
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
movq (%rax), %rdi
xorl %esi, %esi
jmp 0x11ff9
movq (%rax), %rdi
movl $0x2, %esi
jmp 0x11ff9
movq (%rax), %rdi
movl $0x3, %esi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x2248e
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_tabview.c
// Function: lv_tabview_set_anim_time
void lv_tabview_set_anim_time(lv_obj_t * tabview, uint16_t anim_time)
{
    LV_ASSERT_OBJ(tabview, LV_OBJX_NAME);

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

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movl %esi, %ebx
movq %rdi, %r14
callq 0x80e4
testb %al, %al
je 0x12068
movq %r14, %rdi
callq 0x6af7
movw %bx, 0x28(%rax)
addq $0x8, %rsp
popq %rbx
popq %r14
retq
leaq 0x2d175(%rip), %rdi     # 0x3f1e4
movq %r14, %rsi
callq 0x8294
jmp 0x12077
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_tabview.c
// Function: lv_tabview_set_btns_pos
void lv_tabview_set_btns_pos(lv_obj_t * tabview, lv_tabview_btns_pos_t btns_pos)
{
    LV_ASSERT_OBJ(tabview, LV_OBJX_NAME);

    lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);

    ext->btns_pos = btns_pos;
    tabview_realign(tabview);
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x120b4
movq %rbx, %rdi
callq 0x6af7
movb 0x2a(%rax), %cl
shlb $0x5, %bpl
andb $0x60, %bpl
andb $-0x61, %cl
orb %bpl, %cl
movb %cl, 0x2a(%rax)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x11808
leaq 0x2d129(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x120c3
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_tabview.c
// Function: lv_tabview_set_btns_hidden
void lv_tabview_set_btns_hidden(lv_obj_t * tabview, bool en)
{
    LV_ASSERT_OBJ(tabview, LV_OBJX_NAME);

    lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);

    ext->btns_hide = en;
    tabview_realign(tabview);
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x120fc
movq %rbx, %rdi
callq 0x6af7
movb 0x2a(%rax), %cl
shlb $0x4, %bpl
andb $-0x11, %cl
orb %bpl, %cl
movb %cl, 0x2a(%rax)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x11808
leaq 0x2d0e1(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x1210b
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_tileview.c
// Function: lv_tileview_add_element
void lv_tileview_add_element(lv_obj_t * tileview, lv_obj_t * element)
{
    LV_ASSERT_OBJ(tileview, LV_OBJX_NAME);
    LV_ASSERT_NULL(tileview);

    /* Let the objects event to propagate to the scrollable part of the tileview.
     * It is required the handle dargging of the tileview with the element.*/
    element->parent_event = 1;
    lv_obj_set_drag_parent(element, true);

    /* When adding a new element the coordinates may shift.
     * For example y=1 can become y=1 if an element is added to the top.
     * So be sure the current tile is correctly shown*/
    lv_tileview_ext_t * ext = lv_obj_get_ext_attr(tileview);
    lv_tileview_set_tile_act(tileview, ext->act_id.x, ext->act_id.y, false);
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %r14
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x12e2b
movq %rbx, %rdi
callq 0x80e4
testb %al, %al
je 0x12e3c
orb $-0x80, 0x58(%r14)
movq %r14, %rdi
movl $0x1, %esi
callq 0x6153
movq %rbx, %rdi
callq 0x6af7
movswl 0x5c(%rax), %esi
movswl 0x5e(%rax), %edx
movq %rbx, %rdi
xorl %ecx, %ecx
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x12e4d
leaq 0x2c3b2(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x12e3a
leaq 0x2c3a1(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x12e4b
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_tileview.c
// Function: lv_tileview_set_valid_positions
void lv_tileview_set_valid_positions(lv_obj_t * tileview, const lv_point_t valid_pos[], uint16_t valid_pos_cnt)
{
    LV_ASSERT_OBJ(tileview, LV_OBJX_NAME);
    LV_ASSERT_NULL(valid_pos);

    lv_tileview_ext_t * ext = lv_obj_get_ext_attr(tileview);
    ext->valid_pos          = valid_pos;
    ext->valid_pos_cnt      = valid_pos_cnt;

    /*If valid pos. is selected do nothing*/
    uint16_t i;
    for(i = 0; i < valid_pos_cnt; i++) {
        if(valid_pos[i].x == ext->act_id.x && valid_pos[i].y == ext->act_id.y) {
            return;
        }
    }

    /*Set a valid position if now an invalid is selected*/
    if(valid_pos_cnt > 0) {
        lv_tileview_set_tile_act(tileview, valid_pos[0].x, valid_pos[0].y, LV_ANIM_OFF);
    }
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %edx, %ebp
movq %rsi, %r14
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x1305e
movq %r14, %rdi
callq 0x80e4
testb %al, %al
je 0x1306f
movq %rbx, %rdi
callq 0x6af7
movq %r14, 0x50(%rax)
movw %bp, 0x58(%rax)
testw %bp, %bp
je 0x13080
movzwl 0x5c(%rax), %ecx
movzwl %bp, %edx
xorl %esi, %esi
cmpw %cx, (%r14,%rsi,4)
jne 0x1303a
movzwl 0x2(%r14,%rsi,4), %edi
cmpw 0x5e(%rax), %di
je 0x13080
incq %rsi
cmpq %rsi, %rdx
jne 0x13027
testw %bp, %bp
je 0x13080
movswl (%r14), %esi
movswl 0x2(%r14), %edx
movq %rbx, %rdi
xorl %ecx, %ecx
popq %rbx
popq %r14
popq %rbp
jmp 0x12e4d
leaq 0x2c17f(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x1306d
leaq 0x2c16e(%rip), %rdi     # 0x3f1e4
movq %r14, %rsi
callq 0x8294
jmp 0x1307e
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_tileview.c
// Function: lv_tileview_get_style
const lv_style_t * lv_tileview_get_style(const lv_obj_t * tileview, lv_tileview_style_t type)
{
    LV_ASSERT_OBJ(tileview, LV_OBJX_NAME);

    const lv_style_t * style = NULL;
    switch(type) {
        case LV_TILEVIEW_STYLE_MAIN: style = lv_obj_get_style(tileview); break;
        default: style = NULL;
    }

    return style;
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x130e3
testb %bpl, %bpl
je 0x130f4
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
leaq 0x2c0fa(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x130f2
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x66b6
nop
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_btn.c
// Function: lv_btn_set_style
void lv_btn_set_style(lv_obj_t * btn, lv_btn_style_t type, const lv_style_t * style)
{
    LV_ASSERT_OBJ(btn, LV_OBJX_NAME);

    lv_btn_ext_t * ext = lv_obj_get_ext_attr(btn);

    switch(type) {
        case LV_BTN_STYLE_REL: ext->styles[LV_BTN_STATE_REL] = style; break;
        case LV_BTN_STYLE_PR: ext->styles[LV_BTN_STATE_PR] = style; break;
        case LV_BTN_STYLE_TGL_REL: ext->styles[LV_BTN_STATE_TGL_REL] = style; break;
        case LV_BTN_STYLE_TGL_PR: ext->styles[LV_BTN_STATE_TGL_PR] = style; break;
        case LV_BTN_STYLE_INA: ext->styles[LV_BTN_STATE_INA] = style; break;
    }

    /*Refresh the object with the new style*/
    lv_obj_set_style(btn, ext->styles[ext->state]);
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movq %rdx, %r14
movl %esi, %ebp
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x13578
movq %rbx, %rdi
callq 0x6af7
cmpb $0x4, %bpl
ja 0x13560
movzbl %bpl, %ecx
movq %r14, 0x8(%rax,%rcx,8)
movzbl 0x30(%rax), %ecx
andl $0x7, %ecx
movq 0x8(%rax,%rcx,8), %rsi
movq %rbx, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0x5d9f
leaq 0x2bc65(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x13587
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_btn.c
// Function: lv_btn_set_state
void lv_btn_set_state(lv_obj_t * btn, lv_btn_state_t state)
{
    LV_ASSERT_OBJ(btn, LV_OBJX_NAME);

    lv_btn_ext_t * ext = lv_obj_get_ext_attr(btn);
    if(ext->state != state) {
        ext->state = state;
        lv_obj_set_style(btn, ext->styles[state]);
    }
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x135f7
movq %rbx, %rdi
callq 0x6af7
movb 0x30(%rax), %cl
movl %ecx, %edx
andb $0x7, %dl
cmpb %bpl, %dl
jne 0x13608
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
leaq 0x2bbe6(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x13606
movzbl %bpl, %edx
andb $0x7, %bpl
andb $-0x8, %cl
orb %bpl, %cl
movb %cl, 0x30(%rax)
movq 0x8(%rax,%rdx,8), %rsi
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x5d9f
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_btn.c
// Function: lv_btn_toggle
void lv_btn_toggle(lv_obj_t * btn)
{
    LV_ASSERT_OBJ(btn, LV_OBJX_NAME);

    lv_btn_ext_t * ext = lv_obj_get_ext_attr(btn);
    switch(ext->state) {
        case LV_BTN_STATE_REL: lv_btn_set_state(btn, LV_BTN_STATE_TGL_REL); break;
        case LV_BTN_STATE_PR: lv_btn_set_state(btn, LV_BTN_STATE_TGL_PR); break;
        case LV_BTN_STATE_TGL_REL: lv_btn_set_state(btn, LV_BTN_STATE_REL); break;
        case LV_BTN_STATE_TGL_PR: lv_btn_set_state(btn, LV_BTN_STATE_PR); break;
        default: break;
    }
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x13663
movq %rbx, %rdi
callq 0x6af7
movzbl 0x30(%rax), %ecx
andl $0x7, %ecx
cmpb $0x3, %cl
ja 0x13674
shll $0x3, %ecx
movl $0x1000302, %eax        # imm = 0x1000302
shrl %cl, %eax
movzbl %al, %esi
movq %rbx, %rdi
popq %rbx
jmp 0x135ca
leaq 0x2bb7a(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x13672
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_btn.c
// Function: lv_btn_get_style
const lv_style_t * lv_btn_get_style(const lv_obj_t * btn, lv_btn_style_t type)
{
    LV_ASSERT_OBJ(btn, LV_OBJX_NAME);

    const lv_style_t * style = NULL;
    lv_btn_ext_t * ext       = lv_obj_get_ext_attr(btn);
    lv_btn_state_t state     = lv_btn_get_state(btn);

    /* If the style of the current state is asked then return object style.
     * If the button is focused then this style is updated by the group's
     * `style_mod_cb` function */
    if((type == LV_BTN_STYLE_REL && state == LV_BTN_STATE_REL) ||
       (type == LV_BTN_STYLE_PR && state == LV_BTN_STATE_PR) ||
       (type == LV_BTN_STYLE_TGL_REL && state == LV_BTN_STATE_TGL_REL) ||
       (type == LV_BTN_STYLE_TGL_PR && state == LV_BTN_STATE_TGL_PR) ||
       (type == LV_BTN_STYLE_INA && state == LV_BTN_STATE_INA)) {

        style = lv_obj_get_style(btn);
    } else {
        switch(type) {
            case LV_BTN_STYLE_REL: style = ext->styles[LV_BTN_STATE_REL]; break;
            case LV_BTN_STYLE_PR: style = ext->styles[LV_BTN_STATE_PR]; break;
            case LV_BTN_STYLE_TGL_REL: style = ext->styles[LV_BTN_STATE_TGL_REL]; break;
            case LV_BTN_STYLE_TGL_PR: style = ext->styles[LV_BTN_STATE_TGL_PR]; break;
            case LV_BTN_STYLE_INA: style = ext->styles[LV_BTN_STATE_INA]; break;
            default: style = NULL; break;
        }
    }

    return style;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movl %esi, %ebx
movq %rdi, %r14
callq 0x80e4
testb %al, %al
je 0x13807
movq %r14, %rdi
callq 0x6af7
movq %rax, %r15
movq %r14, %rdi
callq 0x136d6
movl %ebx, %ecx
orb %al, %cl
je 0x137fa
movl %ebx, %ecx
xorb $0x1, %cl
movl %eax, %edx
xorb $0x1, %dl
orb %cl, %dl
je 0x137fa
movl %ebx, %ecx
xorb $0x2, %cl
movl %eax, %edx
xorb $0x2, %dl
orb %cl, %dl
je 0x137fa
movl %ebx, %ecx
xorb $0x3, %cl
movl %eax, %edx
xorb $0x3, %dl
orb %cl, %dl
je 0x137fa
movl %ebx, %ecx
xorb $0x4, %cl
xorb $0x4, %al
orb %cl, %al
jne 0x13818
movq %r14, %rdi
popq %rbx
popq %r14
popq %r15
jmp 0x66b6
leaq 0x2b9d6(%rip), %rdi     # 0x3f1e4
movq %r14, %rsi
callq 0x8294
jmp 0x13816
cmpb $0x4, %bl
ja 0x1384e
movzbl %bl, %eax
leaq 0x2bed9(%rip), %rcx     # 0x3f700
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x8(%r15), %rax
jmp 0x13850
movq 0x28(%r15), %rax
jmp 0x13850
movq 0x18(%r15), %rax
jmp 0x13850
movq 0x20(%r15), %rax
jmp 0x13850
movq 0x10(%r15), %rax
jmp 0x13850
xorl %eax, %eax
popq %rbx
popq %r14
popq %r15
retq
nop
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_calendar.c
// Function: lv_calendar_set_style
void lv_calendar_set_style(lv_obj_t * calendar, lv_calendar_style_t type, const lv_style_t * style)
{
    LV_ASSERT_OBJ(calendar, LV_OBJX_NAME);

    lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);

    switch(type) {
        case LV_CALENDAR_STYLE_BG: lv_obj_set_style(calendar, style); break;
        case LV_CALENDAR_STYLE_DAY_NAMES: ext->style_day_names = style; break;
        case LV_CALENDAR_STYLE_HEADER: ext->style_header = style; break;
        case LV_CALENDAR_STYLE_HEADER_PR: ext->style_header_pr = style; break;
        case LV_CALENDAR_STYLE_HIGHLIGHTED_DAYS: ext->style_highlighted_days = style; break;
        case LV_CALENDAR_STYLE_INACTIVE_DAYS: ext->style_inactive_days = style; break;
        case LV_CALENDAR_STYLE_TODAY_BOX: ext->style_today_box = style; break;
        case LV_CALENDAR_STYLE_WEEK_BOX: ext->style_week_box = style; break;
    }

    lv_obj_invalidate(calendar);
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movq %rdx, %r14
movl %esi, %ebp
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x14a6e
movq %rbx, %rdi
callq 0x6af7
cmpb $0x7, %bpl
ja 0x14aa7
movzbl %bpl, %ecx
leaq 0x2acf4(%rip), %rdx     # 0x3f74c
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x5d9f
jmp 0x14aa7
leaq 0x2a76f(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x14a7d
movq %r14, 0x40(%rax)
jmp 0x14aa7
movq %r14, 0x30(%rax)
jmp 0x14aa7
movq %r14, 0x38(%rax)
jmp 0x14aa7
movq %r14, 0x58(%rax)
jmp 0x14aa7
movq %r14, 0x28(%rax)
jmp 0x14aa7
movq %r14, 0x48(%rax)
jmp 0x14aa7
movq %r14, 0x50(%rax)
movq %rbx, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0x4c4d
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_calendar.c
// Function: lv_calendar_set_today_date
void lv_calendar_set_today_date(lv_obj_t * calendar, lv_calendar_date_t * today)
{
    LV_ASSERT_OBJ(calendar, LV_OBJX_NAME);
    LV_ASSERT_NULL(today);

    lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
    ext->today.year         = today->year;
    ext->today.month        = today->month;
    ext->today.day          = today->day;

    lv_obj_invalidate(calendar);
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %r14
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x14afe
movq %r14, %rdi
callq 0x80e4
testb %al, %al
je 0x14b0f
movq %rbx, %rdi
callq 0x6af7
movzwl (%r14), %ecx
movw %cx, (%rax)
movb 0x2(%r14), %cl
movb %cl, 0x2(%rax)
movb 0x3(%r14), %cl
movb %cl, 0x3(%rax)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x4c4d
leaq 0x2a6df(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x14b0d
leaq 0x2a6ce(%rip), %rdi     # 0x3f1e4
movq %r14, %rsi
callq 0x8294
jmp 0x14b1e
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_calendar.c
// Function: lv_calendar_set_showed_date
void lv_calendar_set_showed_date(lv_obj_t * calendar, lv_calendar_date_t * showed)
{
    LV_ASSERT_OBJ(calendar, LV_OBJX_NAME);
    LV_ASSERT_NULL(showed);

    lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
    ext->showed_date.year   = showed->year;
    ext->showed_date.month  = showed->month;
    ext->showed_date.day    = showed->day;

    lv_obj_invalidate(calendar);
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %r14
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x14b6c
movq %r14, %rdi
callq 0x80e4
testb %al, %al
je 0x14b7d
movq %rbx, %rdi
callq 0x6af7
movzwl (%r14), %ecx
movw %cx, 0x4(%rax)
movb 0x2(%r14), %cl
movb %cl, 0x6(%rax)
movb 0x3(%r14), %cl
movb %cl, 0x7(%rax)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x4c4d
leaq 0x2a671(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x14b7b
leaq 0x2a660(%rip), %rdi     # 0x3f1e4
movq %r14, %rsi
callq 0x8294
jmp 0x14b8c
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_calendar.c
// Function: lv_calendar_set_highlighted_dates
void lv_calendar_set_highlighted_dates(lv_obj_t * calendar, lv_calendar_date_t highlighted[], uint16_t date_num)
{
    LV_ASSERT_OBJ(calendar, LV_OBJX_NAME);
    LV_ASSERT_NULL(highlighted);

    lv_calendar_ext_t * ext    = lv_obj_get_ext_attr(calendar);
    ext->highlighted_dates     = highlighted;
    ext->highlighted_dates_num = date_num;

    lv_obj_invalidate(calendar);
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %edx, %ebp
movq %rsi, %r14
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x14bcb
movq %r14, %rdi
callq 0x80e4
testb %al, %al
je 0x14bdc
movq %rbx, %rdi
callq 0x6af7
movq %r14, 0x8(%rax)
movw %bp, 0x12(%rax)
movq %rbx, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0x4c4d
leaq 0x2a612(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x14bda
leaq 0x2a601(%rip), %rdi     # 0x3f1e4
movq %r14, %rsi
callq 0x8294
jmp 0x14beb
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_calendar.c
// Function: lv_calendar_set_day_names
void lv_calendar_set_day_names(lv_obj_t * calendar, const char ** day_names)
{
    LV_ASSERT_OBJ(calendar, LV_OBJX_NAME);
    LV_ASSERT_NULL(day_names);

    lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
    ext->day_names          = day_names;
    lv_obj_invalidate(calendar);
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %r14
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x14c27
movq %r14, %rdi
callq 0x80e4
testb %al, %al
je 0x14c38
movq %rbx, %rdi
callq 0x6af7
movq %r14, 0x18(%rax)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x4c4d
leaq 0x2a5b6(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x14c36
leaq 0x2a5a5(%rip), %rdi     # 0x3f1e4
movq %r14, %rsi
callq 0x8294
jmp 0x14c47
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_calendar.c
// Function: lv_calendar_set_month_names
void lv_calendar_set_month_names(lv_obj_t * calendar, const char ** month_names)
{
    LV_ASSERT_OBJ(calendar, LV_OBJX_NAME);
    LV_ASSERT_NULL(month_names);

    lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
    ext->month_names        = month_names;
    lv_obj_invalidate(calendar);
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %r14
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x14c83
movq %r14, %rdi
callq 0x80e4
testb %al, %al
je 0x14c94
movq %rbx, %rdi
callq 0x6af7
movq %r14, 0x20(%rax)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x4c4d
leaq 0x2a55a(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x14c92
leaq 0x2a549(%rip), %rdi     # 0x3f1e4
movq %r14, %rsi
callq 0x8294
jmp 0x14ca3
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_calendar.c
// Function: lv_calendar_get_style
const lv_style_t * lv_calendar_get_style(const lv_obj_t * calendar, lv_calendar_style_t type)
{
    LV_ASSERT_OBJ(calendar, LV_OBJX_NAME);

    const lv_style_t * style = NULL;
    lv_calendar_ext_t * ext  = lv_obj_get_ext_attr(calendar);

    switch(type) {
        case LV_CALENDAR_STYLE_BG: style = lv_obj_get_style(calendar); break;
        case LV_CALENDAR_STYLE_HEADER: style = ext->style_header; break;
        case LV_CALENDAR_STYLE_HEADER_PR: style = ext->style_header_pr; break;
        case LV_CALENDAR_STYLE_DAY_NAMES: style = ext->style_day_names; break;
        case LV_CALENDAR_STYLE_HIGHLIGHTED_DAYS: style = ext->style_highlighted_days; break;
        case LV_CALENDAR_STYLE_INACTIVE_DAYS: style = ext->style_inactive_days; break;
        case LV_CALENDAR_STYLE_WEEK_BOX: style = ext->style_week_box; break;
        case LV_CALENDAR_STYLE_TODAY_BOX: style = ext->style_today_box; break;
        default: style = NULL; break;
    }

    return style;
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x14e23
movq %rbx, %rdi
callq 0x6af7
cmpb $0x7, %bpl
ja 0x14e5e
movzbl %bpl, %ecx
leaq 0x2a960(%rip), %rdx     # 0x3f76c
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x66b6
leaq 0x2a3ba(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x14e32
movq 0x40(%rax), %rax
jmp 0x14e60
movq 0x30(%rax), %rax
jmp 0x14e60
movq 0x38(%rax), %rax
jmp 0x14e60
movq 0x58(%rax), %rax
jmp 0x14e60
movq 0x28(%rax), %rax
jmp 0x14e60
movq 0x48(%rax), %rax
jmp 0x14e60
movq 0x50(%rax), %rax
jmp 0x14e60
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_calendar.c
// Function: get_month_length
static uint8_t get_month_length(int32_t year, int32_t month)
{
    month--; /*Range of months id [1..12] but range of indexes is [0..11]*/
    if(month < 0) {
        year--;             /*Already in the previous year (won't be less then -12 to skip a whole year)*/
        month = 12 + month; /*`month` is negative, the result will be < 12*/
    }
    if(month >= 12) {
        year++;
        month -= 12;
    }

    /*month == 1 is february*/
    return (month == 1) ? (28 + is_leap_year(year)) : 31 - month % 7 % 2;
}

// Assembly:
xorl %edx, %edx
xorl %eax, %eax
testl %esi, %esi
setg %dl
setle %r8b
negl %edx
orl $0xb, %edx
leal (%rdx,%rsi), %r10d
xorl %ecx, %ecx
cmpl $0xc, %r10d
setge %r9b
leal -0xc(%rdx,%rsi), %edx
cmovll %r10d, %edx
cmpl $0x1, %edx
jne 0x14ea6
movb %r8b, %al
subl %eax, %edi
movb %r9b, %cl
addl %edi, %ecx
movb $0x1c, %al
testb $0x3, %cl
je 0x14ed9
retq
movslq %edx, %rax
imulq $-0x6db6db6d, %rax, %rcx # imm = 0x92492493
shrq $0x20, %rcx
addl %edx, %ecx
movl %ecx, %eax
shrl $0x1f, %eax
shrl $0x2, %ecx
addl %eax, %ecx
leal (,%rcx,8), %eax
subl %eax, %ecx
addl %edx, %ecx
movl %ecx, %eax
shrb $0x7, %al
addb %cl, %al
andb $-0x2, %al
subb %cl, %al
addb $0x1f, %al
retq
imull $0xc28f5c29, %ecx, %ecx # imm = 0xC28F5C29
movl %ecx, %edx
rorl $0x2, %edx
movb $0x1d, %al
cmpl $0x28f5c28, %edx        # imm = 0x28F5C28
ja 0x14ea5
rorl $0x4, %ecx
cmpl $0xa3d70b, %ecx         # imm = 0xA3D70B
setb %al
orb $0x1c, %al
retq
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_calendar.c
// Function: is_highlighted
static bool is_highlighted(lv_obj_t * calendar, int32_t year, int32_t month, int32_t day)
{
    lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);

    if(ext->highlighted_dates == NULL || ext->highlighted_dates_num == 0) return false;

    uint32_t i;
    for(i = 0; i < ext->highlighted_dates_num; i++) {
        if(ext->highlighted_dates[i].year == year && ext->highlighted_dates[i].month == month &&
           ext->highlighted_dates[i].day == day) {
            return true;
        }
    }

    return false;
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %ecx, %ebx
movl %edx, %ebp
movl %esi, %r14d
callq 0x6af7
movq 0x8(%rax), %rcx
testq %rcx, %rcx
je 0x14f44
movzwl 0x12(%rax), %eax
testq %rax, %rax
je 0x14f44
xorl %edx, %edx
movzwl (%rcx,%rdx,4), %esi
cmpl %r14d, %esi
jne 0x14f3c
movsbl 0x2(%rcx,%rdx,4), %esi
cmpl %ebp, %esi
jne 0x14f3c
movsbl 0x3(%rcx,%rdx,4), %esi
cmpl %ebx, %esi
je 0x14f4b
incq %rdx
cmpq %rdx, %rax
jne 0x14f21
xorl %eax, %eax
popq %rbx
popq %r14
popq %rbp
retq
movb $0x1, %al
jmp 0x14f46
nop
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_chart.c
// Function: lv_chart_signal
static lv_res_t lv_chart_signal(lv_obj_t * chart, lv_signal_t sign, void * param)
{
    /* Include the ancient signal function */
    lv_res_t res;
    res = ancestor_signal(chart, sign, param);
    if(res != LV_RES_OK) return res;
    if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);

    lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);

    if(sign == LV_SIGNAL_CLEANUP) {
        lv_coord_t ** datal;
        LV_LL_READ(ext->series_ll, datal)
        {
            lv_mem_free(*datal);
        }
        lv_ll_clear(&ext->series_ll);
    } else if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) {
        /*Provide extra px draw area around the chart*/
        chart->ext_draw_pad = ext->margin;
    }

    return res;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdx, %r14
movl %esi, %ebp
movq %rdi, %r15
callq *0x4b238(%rip)          # 0x60388
movl %eax, %ebx
cmpb $0x1, %al
jne 0x151cf
cmpb $0x7, %bpl
jne 0x15175
leaq 0x2a6cd(%rip), %rsi     # 0x3f830
movq %r14, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x6c02
movq %r15, %rdi
callq 0x6af7
movq %rax, %r14
movb $0x1, %bl
cmpb $0x6, %bpl
je 0x151c5
movzbl %bpl, %eax
testl %eax, %eax
jne 0x151cf
movq %r14, %rdi
callq 0x2a35c
testq %rax, %rax
je 0x151bb
movq %rax, %r15
movq (%r15), %rdi
callq 0x2a006
movq %r14, %rdi
movq %r15, %rsi
callq 0x2a448
movq %rax, %r15
testq %rax, %rax
jne 0x151a0
movq %r14, %rdi
callq 0x2a465
jmp 0x151cf
movzwl 0x58(%r14), %eax
movw %ax, 0x5c(%r15)
movl %ebx, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_chart.c
// Function: lv_chart_add_series
lv_chart_series_t * lv_chart_add_series(lv_obj_t * chart, lv_color_t color)
{
    LV_ASSERT_OBJ(chart, LV_OBJX_NAME);

    lv_chart_ext_t * ext    = lv_obj_get_ext_attr(chart);
    lv_chart_series_t * ser = lv_ll_ins_head(&ext->series_ll);
    LV_ASSERT_MEM(ser);
    if(ser == NULL) return NULL;

    lv_coord_t def = LV_CHART_POINT_DEF;

    if(ser == NULL) return NULL;

    ser->color  = color;
    ser->points = lv_mem_alloc(sizeof(lv_coord_t) * ext->point_cnt);
    LV_ASSERT_MEM(ser->points);
    if(ser->points == NULL) {
        lv_ll_rem(&ext->series_ll, ser);
        lv_mem_free(ser);
        return NULL;
    }

    ser->start_point = 0;

    uint16_t i;
    lv_coord_t * p_tmp = ser->points;
    for(i = 0; i < ext->point_cnt; i++) {
        *p_tmp = def;
        p_tmp++;
    }

    ext->series.num++;

    return ser;
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %esi, %ebp
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x1609c
movq %rbx, %rdi
callq 0x6af7
movq %rax, %r14
movq %rax, %rdi
callq 0x2a2a0
movq %rax, %rbx
movq %rax, %rdi
callq 0x80e4
testb %al, %al
je 0x160ad
testq %rbx, %rbx
je 0x160df
movw %bp, 0x8(%rbx)
movzwl 0x1e(%r14), %edi
addl %edi, %edi
callq 0x29f85
movq %rax, (%rbx)
movq %rax, %rdi
callq 0x80e4
movq (%rbx), %rsi
testb %al, %al
je 0x160be
testq %rsi, %rsi
je 0x160cc
movw $0x0, 0xa(%rbx)
cmpw $0x0, 0x1e(%r14)
je 0x16096
xorl %eax, %eax
movw $0x83e8, (%rsi,%rax,2)  # imm = 0x83E8
incq %rax
cmpw 0x1e(%r14), %ax
jb 0x16086
incb 0x5e(%r14)
jmp 0x160e1
leaq 0x29141(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x160ab
leaq 0x2901c(%rip), %rdi     # 0x3f0d0
movq %rbx, %rsi
callq 0x8294
jmp 0x160bc
leaq 0x2900b(%rip), %rdi     # 0x3f0d0
callq 0x8294
jmp 0x160ca
movq %r14, %rdi
movq %rbx, %rsi
callq 0x2a3c2
movq %rbx, %rdi
callq 0x2a006
xorl %ebx, %ebx
movq %rbx, %rax
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_chart.c
// Function: lv_chart_clear_serie
void lv_chart_clear_serie(lv_obj_t * chart, lv_chart_series_t * serie)
{
    LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
    LV_ASSERT_NULL(serie);

    if(chart == NULL || serie == NULL) return;
    lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
    if(ext == NULL) return;

    uint32_t i;
    for(i = 0; i < ext->point_cnt; i++) {
        serie->points[i] = LV_CHART_POINT_DEF;
    }

    serie->start_point = 0;
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %rbx
movq %rdi, %r14
callq 0x80e4
testb %al, %al
je 0x16151
movq %rbx, %rdi
callq 0x80e4
testb %al, %al
je 0x16162
testq %r14, %r14
sete %al
testq %rbx, %rbx
sete %cl
orb %al, %cl
jne 0x16149
movq %r14, %rdi
callq 0x6af7
testq %rax, %rax
je 0x16149
cmpw $0x0, 0x1e(%rax)
je 0x16143
movq (%rbx), %rcx
xorl %edx, %edx
movw $0x83e8, (%rcx,%rdx,2)  # imm = 0x83E8
incq %rdx
movzwl 0x1e(%rax), %esi
cmpq %rsi, %rdx
jb 0x16131
movw $0x0, 0xa(%rbx)
addq $0x8, %rsp
popq %rbx
popq %r14
retq
leaq 0x2908c(%rip), %rdi     # 0x3f1e4
movq %r14, %rsi
callq 0x8294
jmp 0x16160
leaq 0x2907b(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x16171
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_chart.c
// Function: lv_chart_set_div_line_count
void lv_chart_set_div_line_count(lv_obj_t * chart, uint8_t hdiv, uint8_t vdiv)
{
    LV_ASSERT_OBJ(chart, LV_OBJX_NAME);

    lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
    if(ext->hdiv_cnt == hdiv && ext->vdiv_cnt == vdiv) return;

    ext->hdiv_cnt = hdiv;
    ext->vdiv_cnt = vdiv;

    lv_obj_invalidate(chart);
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %edx, %ebp
movl %esi, %r14d
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x161a1
movq %rbx, %rdi
callq 0x6af7
cmpb %r14b, 0x1c(%rax)
jne 0x161b2
cmpb %bpl, 0x1d(%rax)
jne 0x161b2
popq %rbx
popq %r14
popq %rbp
retq
leaq 0x2903c(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x161b0
movb %r14b, 0x1c(%rax)
movb %bpl, 0x1d(%rax)
movq %rbx, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0x4c4d
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_chart.c
// Function: lv_chart_set_range
void lv_chart_set_range(lv_obj_t * chart, lv_coord_t ymin, lv_coord_t ymax)
{
    LV_ASSERT_OBJ(chart, LV_OBJX_NAME);

    lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
    if(ext->ymin == ymin && ext->ymax == ymax) return;

    ext->ymin = ymin;
    ext->ymax = ymax;

    lv_chart_refresh(chart);
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %edx, %ebp
movl %esi, %r14d
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x161f5
movq %rbx, %rdi
callq 0x6af7
cmpw %r14w, 0x18(%rax)
jne 0x16206
cmpw %bp, 0x1a(%rax)
jne 0x16206
popq %rbx
popq %r14
popq %rbp
retq
leaq 0x28fe8(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x16204
movw %r14w, 0x18(%rax)
movw %bp, 0x1a(%rax)
movq %rbx, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0x1621b
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_chart.c
// Function: lv_chart_set_type
void lv_chart_set_type(lv_obj_t * chart, lv_chart_type_t type)
{
    LV_ASSERT_OBJ(chart, LV_OBJX_NAME);

    lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
    if(ext->type == type) return;

    ext->type = type;

    lv_chart_refresh(chart);
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x16268
movq %rbx, %rdi
callq 0x6af7
cmpb %bpl, 0x20(%rax)
jne 0x16279
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
leaq 0x28f75(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x16277
movb %bpl, 0x20(%rax)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x1621b
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_chart.c
// Function: lv_chart_set_series_opa
void lv_chart_set_series_opa(lv_obj_t * chart, lv_opa_t opa)
{
    LV_ASSERT_OBJ(chart, LV_OBJX_NAME);

    lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
    if(ext->series.opa == opa) return;

    ext->series.opa = opa;
    lv_obj_invalidate(chart);
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x169e1
movq %rbx, %rdi
callq 0x6af7
cmpb %bpl, 0x5f(%rax)
jne 0x169f2
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
leaq 0x287fc(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x169f0
movb %bpl, 0x5f(%rax)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x4c4d
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_chart.c
// Function: lv_chart_set_series_width
void lv_chart_set_series_width(lv_obj_t * chart, lv_coord_t width)
{
    LV_ASSERT_OBJ(chart, LV_OBJX_NAME);

    lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
    if(ext->series.width == width) return;

    ext->series.width = width;
    lv_obj_invalidate(chart);
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x16a2a
movq %rbx, %rdi
callq 0x6af7
cmpw %bp, 0x5c(%rax)
jne 0x16a3b
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
leaq 0x287b3(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x16a39
movw %bp, 0x5c(%rax)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x4c4d
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_chart.c
// Function: lv_chart_set_series_darking
void lv_chart_set_series_darking(lv_obj_t * chart, lv_opa_t dark_eff)
{
    LV_ASSERT_OBJ(chart, LV_OBJX_NAME);

    lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
    if(ext->series.dark == dark_eff) return;

    ext->series.dark = dark_eff;
    lv_obj_invalidate(chart);
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x16a73
movq %rbx, %rdi
callq 0x6af7
cmpb %bpl, 0x60(%rax)
jne 0x16a84
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
leaq 0x2876a(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x16a82
movb %bpl, 0x60(%rax)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x4c4d
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_chart.c
// Function: lv_chart_init_points
void lv_chart_init_points(lv_obj_t * chart, lv_chart_series_t * ser, lv_coord_t y)
{
    LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
    LV_ASSERT_NULL(ser);

    lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
    uint16_t i;
    for(i = 0; i < ext->point_cnt; i++) {
        ser->points[i] = y;
    }
    ser->start_point = 0;
    lv_chart_refresh(chart);
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %edx, %ebp
movq %rsi, %r14
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x16aee
movq %r14, %rdi
callq 0x80e4
testb %al, %al
je 0x16aff
movq %rbx, %rdi
callq 0x6af7
cmpw $0x0, 0x1e(%rax)
je 0x16adb
movq (%r14), %rcx
xorl %edx, %edx
movw %bp, (%rcx,%rdx,2)
incq %rdx
movzwl 0x1e(%rax), %esi
cmpq %rsi, %rdx
jb 0x16acb
movw $0x0, 0xa(%r14)
movq %rbx, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0x1621b
leaq 0x286ef(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x16afd
leaq 0x286de(%rip), %rdi     # 0x3f1e4
movq %r14, %rsi
callq 0x8294
jmp 0x16b0e
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_chart.c
// Function: lv_chart_set_points
void lv_chart_set_points(lv_obj_t * chart, lv_chart_series_t * ser, lv_coord_t y_array[])
{
    LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
    LV_ASSERT_NULL(ser);

    lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
    memcpy(ser->points, y_array, ext->point_cnt * (sizeof(lv_coord_t)));
    ser->start_point = 0;
    lv_chart_refresh(chart);
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rdx, %r15
movq %rsi, %r14
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x16b60
movq %r14, %rdi
callq 0x80e4
testb %al, %al
je 0x16b71
movq %rbx, %rdi
callq 0x6af7
movq (%r14), %rdi
movzwl 0x1e(%rax), %edx
addl %edx, %edx
movq %r15, %rsi
callq 0x20f0
movw $0x0, 0xa(%r14)
movq %rbx, %rdi
popq %rbx
popq %r14
popq %r15
jmp 0x1621b
leaq 0x2867d(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x16b6f
leaq 0x2866c(%rip), %rdi     # 0x3f1e4
movq %r14, %rsi
callq 0x8294
jmp 0x16b80
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_chart.c
// Function: lv_chart_inv_lines
static void lv_chart_inv_lines(lv_obj_t * chart, uint16_t i)
{
    lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);

    lv_coord_t w     = lv_obj_get_width(chart);
    lv_coord_t x_ofs = chart->coords.x1;

    if(i < ext->point_cnt) {
        lv_area_t coords;
        lv_obj_get_coords(chart, &coords);
        if(i < ext->point_cnt - 1) {
            coords.x1 = ((w * i) / (ext->point_cnt - 1)) + x_ofs - ext->series.width;
            coords.x2 = ((w * (i + 1)) / (ext->point_cnt - 1)) + x_ofs + ext->series.width;
            lv_inv_area(lv_obj_get_disp(chart), &coords);
        }

        if(i > 0) {
            coords.x1 = ((w * (i - 1)) / (ext->point_cnt - 1)) + x_ofs - ext->series.width;
            coords.x2 = ((w * i) / (ext->point_cnt - 1)) + x_ofs + ext->series.width;
            lv_inv_area(lv_obj_get_disp(chart), &coords);
        }
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movl %esi, %r14d
movq %rdi, %rbx
callq 0x6af7
movq %rax, %r15
movq %rbx, %rdi
callq 0x566d
cmpw %r14w, 0x1e(%r15)
jbe 0x16e61
movl %eax, %ebp
movzwl 0x20(%rbx), %r13d
movq %rsp, %rsi
movq %rbx, %rdi
callq 0x542b
movzwl 0x1e(%r15), %ecx
decl %ecx
movswl %bp, %ebp
cmpl %r14d, %ecx
jle 0x16e14
movl %ebp, %eax
imull %r14d, %eax
cltd
idivl %ecx
movl 0x5c(%r15), %esi
addl %r13d, %eax
subl %esi, %eax
movq %rsp, %r12
movw %ax, (%r12)
leal 0x1(%r14), %eax
imull %ebp, %eax
cltd
idivl %ecx
addl %r13d, %esi
addl %eax, %esi
movw %si, 0x4(%r12)
movq %rbx, %rdi
callq 0x5061
movq %rax, %rdi
movq %r12, %rsi
callq 0x7170
testw %r14w, %r14w
je 0x16e61
leal -0x1(%r14), %eax
imull %ebp, %eax
movzwl 0x1e(%r15), %ecx
decl %ecx
cltd
idivl %ecx
movl 0x5c(%r15), %esi
addl %r13d, %eax
subl %esi, %eax
movq %rsp, %r15
movw %ax, (%r15)
imull %r14d, %ebp
movl %ebp, %eax
cltd
idivl %ecx
addl %r13d, %esi
addl %eax, %esi
movw %si, 0x4(%r15)
movq %rbx, %rdi
callq 0x5061
movq %rax, %rdi
movq %r15, %rsi
callq 0x7170
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_chart.c
// Function: lv_chart_set_update_mode
void lv_chart_set_update_mode(lv_obj_t * chart, lv_chart_update_mode_t update_mode)
{
    LV_ASSERT_OBJ(chart, LV_OBJX_NAME);

    lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
    if(ext->update_mode == update_mode) return;

    ext->update_mode = update_mode;
    lv_obj_invalidate(chart);
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x80e4
testb %al, %al
je 0x16e9d
movq %rbx, %rdi
callq 0x6af7
movb 0x5a(%rax), %cl
movl %ecx, %edx
andb $0x1, %dl
cmpb %bpl, %dl
jne 0x16eae
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
leaq 0x28340(%rip), %rdi     # 0x3f1e4
movq %rbx, %rsi
callq 0x8294
jmp 0x16eac
andb $0x1, %bpl
andb $-0x2, %cl
orb %bpl, %cl
movb %cl, 0x5a(%rax)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x4c4d
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_chart.c
// Function: lv_chart_set_x_tick_length
void lv_chart_set_x_tick_length(lv_obj_t * chart, uint8_t major_tick_len, uint8_t minor_tick_len)
{
    LV_ASSERT_OBJ(chart, LV_OBJX_NAME);

    lv_chart_ext_t * ext       = lv_obj_get_ext_attr(chart);
    ext->x_axis.major_tick_len = major_tick_len;
    ext->x_axis.minor_tick_len = minor_tick_len;
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %edx, %ebx
movl %esi, %ebp
movq %rdi, %r14
callq 0x80e4
testb %al, %al
je 0x16ef1
movq %r14, %rdi
callq 0x6af7
movb %bpl, 0x42(%rax)
movb %bl, 0x43(%rax)
popq %rbx
popq %r14
popq %rbp
retq
leaq 0x282ec(%rip), %rdi     # 0x3f1e4
movq %r14, %rsi
callq 0x8294
jmp 0x16f00
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_chart.c
// Function: lv_chart_set_y_tick_length
void lv_chart_set_y_tick_length(lv_obj_t * chart, uint8_t major_tick_len, uint8_t minor_tick_len)
{
    LV_ASSERT_OBJ(chart, LV_OBJX_NAME);

    lv_chart_ext_t * ext       = lv_obj_get_ext_attr(chart);
    ext->y_axis.major_tick_len = major_tick_len;
    ext->y_axis.minor_tick_len = minor_tick_len;
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %edx, %ebx
movl %esi, %ebp
movq %rdi, %r14
callq 0x80e4
testb %al, %al
je 0x16f2a
movq %r14, %rdi
callq 0x6af7
movb %bpl, 0x32(%rax)
movb %bl, 0x33(%rax)
popq %rbx
popq %r14
popq %rbp
retq
leaq 0x282b3(%rip), %rdi     # 0x3f1e4
movq %r14, %rsi
callq 0x8294
jmp 0x16f39
// File: /workspace/github_c_makefile_star2_O3/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_chart.c
// Function: lv_chart_set_secondary_y_tick_length
void lv_chart_set_secondary_y_tick_length(lv_obj_t * chart, uint8_t major_tick_len, uint8_t minor_tick_len)
{
    LV_ASSERT_OBJ(chart, LV_OBJX_NAME);

    lv_chart_ext_t * ext       = lv_obj_get_ext_attr(chart);
    ext->secondary_y_axis.major_tick_len = major_tick_len;
    ext->secondary_y_axis.minor_tick_len = minor_tick_len;
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %edx, %ebx
movl %esi, %ebp
movq %rdi, %r14
callq 0x80e4
testb %al, %al
je 0x16f63
movq %r14, %rdi
callq 0x6af7
movb %bpl, 0x52(%rax)
movb %bl, 0x53(%rax)
popq %rbx
popq %r14
popq %rbp
retq
leaq 0x2827a(%rip), %rdi     # 0x3f1e4
movq %r14, %rsi
callq 0x8294
jmp 0x16f72