LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_core/lv_obj.c
// Function: lv_obj_get_child_back
lv_obj_t * lv_obj_get_child_back(const lv_obj_t * obj, const lv_obj_t * child)
{
    LV_ASSERT_OBJ(obj, LV_OBJX_NAME);

    lv_obj_t * result = NULL;

    if(child == NULL) {
        result = lv_ll_get_tail(&obj->child_ll);
    } else {
        result = lv_ll_get_prev(&obj->child_ll, child);
    }

    return result;
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %r14
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x61e4
addq $0x8, %rbx
movq %rbx, %rdi
testq %r14, %r14
je 0x61f5
movq %r14, %rsi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x27dc6
leaq 0x34f59(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x61f3
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x27ea3
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_core/lv_obj.c
// Function: lv_obj_count_children
uint16_t lv_obj_count_children(const lv_obj_t * obj)
{
    LV_ASSERT_OBJ(obj, LV_OBJX_NAME);

    lv_obj_t * i;
    uint16_t cnt = 0;

    LV_LL_READ(obj->child_ll, i) cnt++;

    return cnt;
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x6232
addq $0x8, %rbx
movq %rbx, %rdi
callq 0x27db9
xorl %ebp, %ebp
testq %rax, %rax
je 0x6243
incl %ebp
movq %rbx, %rdi
movq %rax, %rsi
callq 0x27e93
jmp 0x621e
leaq 0x34f0b(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x6241
movl %ebp, %eax
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_core/lv_obj.c
// Function: lv_obj_count_children_recursive
uint16_t lv_obj_count_children_recursive(const lv_obj_t * obj)
{
    LV_ASSERT_OBJ(obj, LV_OBJX_NAME);

    lv_obj_t * i;
    uint16_t cnt = 0;

    LV_LL_READ(obj->child_ll, i)
    {
        cnt++;                                     /*Count the child*/
        cnt += lv_obj_count_children_recursive(i); /*recursively count children's children*/
    }

    return cnt;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x6292
addq $0x8, %rbx
movq %rbx, %rdi
callq 0x27db9
movq %rax, %r15
xorl %r14d, %r14d
testq %r15, %r15
je 0x62a3
movq %r15, %rdi
callq 0x624c
addl %eax, %r14d
incl %r14d
movq %rbx, %rdi
movq %r15, %rsi
callq 0x27e93
movq %rax, %r15
jmp 0x626f
leaq 0x34eab(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x62a1
movl %r14d, %eax
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_core/lv_obj.c
// Function: lv_obj_get_inner_coords
void lv_obj_get_inner_coords(const lv_obj_t * obj, lv_area_t * coords_p)
{
    LV_ASSERT_OBJ(obj, LV_OBJX_NAME);

    const lv_style_t * style = lv_obj_get_style(obj);
    if(style->body.border.part & LV_BORDER_LEFT) coords_p->x1 += style->body.border.width;

    if(style->body.border.part & LV_BORDER_RIGHT) coords_p->x2 -= style->body.border.width;

    if(style->body.border.part & LV_BORDER_TOP) coords_p->y1 += style->body.border.width;

    if(style->body.border.part & LV_BORDER_BOTTOM) coords_p->y2 -= style->body.border.width;
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %rbx
movq %rdi, %r14
callq 0x7994
testb %al, %al
je 0x6305
movq %r14, %rdi
callq 0x6316
movb 0xe(%rax), %cl
testb $0x4, %cl
je 0x62d6
movzwl 0xc(%rax), %edx
addw %dx, (%rbx)
testb $0x8, %cl
je 0x62e3
movzwl 0xc(%rax), %edx
subw %dx, 0x4(%rbx)
testb $0x2, %cl
je 0x62f0
movzwl 0xc(%rax), %edx
addw %dx, 0x2(%rbx)
testb $0x1, %cl
je 0x62fd
movzwl 0xc(%rax), %eax
subw %ax, 0x6(%rbx)
addq $0x8, %rsp
popq %rbx
popq %r14
retq
leaq 0x34e38(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x6314
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_core/lv_obj.c
// Function: lv_obj_get_style
const lv_style_t * lv_obj_get_style(const lv_obj_t * obj)
{
    LV_ASSERT_OBJ(obj, LV_OBJX_NAME);

    const lv_style_t * style_act = obj->style_p;
    if(style_act == NULL) {
        lv_obj_t * par = obj->par;

        while(par) {
            if(par->style_p) {
                if(par->style_p->glass == 0) {
#if LV_USE_GROUP == 0
                    style_act = par->style_p;
#else
                    /*If a parent is focused then use then focused style*/
                    lv_group_t * g = lv_obj_get_group(par);
                    if(lv_group_get_focused(g) == par) {
                        style_act = lv_group_mod_style(g, par->style_p);
                    } else {
                        style_act = par->style_p;
                    }
#endif
                    break;
                }
            }
            par = par->par;
        }
    }
#if LV_USE_GROUP
    if(obj->group_p) {
        if(lv_group_get_focused(obj->group_p) == obj) {
            style_act = lv_group_mod_style(obj->group_p, style_act);
        }
    }
#endif

    if(style_act == NULL) style_act = &lv_style_plain;

    return style_act;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x6370
movq 0x48(%rbx), %r14
testq %r14, %r14
je 0x6381
movq 0x50(%rbx), %rdi
testq %rdi, %rdi
je 0x6355
callq 0x29b8
cmpq %rbx, %rax
jne 0x6355
movq 0x50(%rbx), %rdi
movq %r14, %rsi
callq 0x2a44
movq %rax, %r14
testq %r14, %r14
jne 0x6361
leaq 0x57bb7(%rip), %r14     # 0x5df18
movq %r14, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
leaq 0x34dcd(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x637f
xorl %r14d, %r14d
movq %rbx, %r15
movq (%r15), %r15
testq %r15, %r15
je 0x6333
movq 0x48(%r15), %rax
testq %rax, %rax
je 0x6387
testb $0x1, (%rax)
jne 0x6387
movq %r15, %rdi
callq 0x4b8e
movq %rax, %r12
movq %rax, %rdi
callq 0x29b8
movq 0x48(%r15), %r14
cmpq %r15, %rax
jne 0x6333
movq %r12, %rdi
movq %r14, %rsi
callq 0x2a44
movq %rax, %r14
jmp 0x6333
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_core/lv_obj.c
// Function: lv_obj_get_opa_scale
lv_opa_t lv_obj_get_opa_scale(const lv_obj_t * obj)
{
    LV_ASSERT_OBJ(obj, LV_OBJX_NAME);

    const lv_obj_t * parent = obj;

    while(parent) {
        if(parent->opa_scale_en) return parent->opa_scale;
        parent = lv_obj_get_parent(parent);
    }

    return LV_OPA_COVER;
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x666e
testq %rbx, %rbx
je 0x667f
testb $0x40, 0x58(%rbx)
jne 0x6683
movq %rbx, %rdi
callq 0x47bc
movq %rax, %rbx
jmp 0x6656
leaq 0x34acf(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x667d
movb $-0x1, %al
jmp 0x6686
movb 0x5b(%rbx), %al
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_core/lv_obj.c
// Function: lv_obj_get_type
void lv_obj_get_type(const lv_obj_t * obj, lv_obj_type_t * buf)
{
    LV_ASSERT_NULL(buf);
    LV_ASSERT_NULL(obj);

    lv_obj_type_t tmp;

    memset(buf, 0, sizeof(lv_obj_type_t));
    memset(&tmp, 0, sizeof(lv_obj_type_t));

    obj->signal_cb((lv_obj_t *)obj, LV_SIGNAL_GET_TYPE, &tmp);

    uint8_t cnt;
    for(cnt = 0; cnt < LV_MAX_ANCESTOR_NUM; cnt++) {
        if(tmp.type[cnt] == NULL) break;
    }

    /*Swap the order. The real type comes first*/
    uint8_t i;
    for(i = 0; i < cnt; i++) {
        buf->type[i] = tmp.type[cnt - 1 - i];
    }
}

// Assembly:
pushq %r14
pushq %rbx
subq $0x48, %rsp
movq %rsi, %rbx
movq %rdi, %r14
movq %rsi, %rdi
callq 0x7994
testb %al, %al
je 0x67f0
movq %r14, %rdi
callq 0x7994
testb %al, %al
je 0x6801
xorps %xmm0, %xmm0
movups %xmm0, 0x30(%rbx)
movups %xmm0, 0x20(%rbx)
movups %xmm0, 0x10(%rbx)
movups %xmm0, (%rbx)
movq %rsp, %rdx
movaps %xmm0, 0x30(%rdx)
movaps %xmm0, 0x20(%rdx)
movaps %xmm0, 0x10(%rdx)
movaps %xmm0, (%rdx)
pushq $0x7
popq %rsi
movq %r14, %rdi
callq *0x30(%r14)
pushq $-0x1
popq %rax
cmpq $0x7, %rax
je 0x67e2
cmpq $0x0, 0x8(%rsp,%rax,8)
je 0x67e2
incq %rax
jmp 0x67c1
movq (%rsp,%rax,8), %rcx
movq %rcx, (%rbx)
decq %rax
addq $0x8, %rbx
cmpq $-0x1, %rax
jne 0x67d4
addq $0x48, %rsp
popq %rbx
popq %r14
retq
leaq 0x3494d(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x67ff
leaq 0x3493c(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x6810
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_core/lv_obj.c
// Function: lv_obj_is_focused
bool lv_obj_is_focused(const lv_obj_t * obj)
{
    LV_ASSERT_OBJ(obj, LV_OBJX_NAME);

    if(obj->group_p) {
        if(lv_group_get_focused(obj->group_p) == obj) return true;
    }

    return false;
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x6836
movq 0x50(%rbx), %rdi
testq %rdi, %rdi
je 0x6832
callq 0x29b8
cmpq %rbx, %rax
je 0x6847
xorl %eax, %eax
jmp 0x6849
leaq 0x34907(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x6845
movb $0x1, %al
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_core/lv_obj.c
// Function: lv_obj_handle_get_type_signal
lv_res_t lv_obj_handle_get_type_signal(lv_obj_type_t * buf, const char * name)
{
    uint8_t i;
    for(i = 0; i < LV_MAX_ANCESTOR_NUM - 1; i++) { /*Find the last set data*/
        if(buf->type[i] == NULL) break;
    }
    buf->type[i] = name;

    return LV_RES_OK;
}

// Assembly:
xorl %eax, %eax
cmpq $0x7, %rax
je 0x685f
cmpq $0x0, (%rdi,%rax,8)
je 0x685f
incq %rax
jmp 0x684d
movq %rsi, (%rdi,%rax,8)
movb $0x1, %al
retq
nop
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_core/lv_refr.c
// Function: lv_refr_now
void lv_refr_now(lv_disp_t * disp)
{
    if(disp) {
        lv_disp_refr_task(disp->refr_task);
    } else {
        lv_disp_t * d;
        d = lv_disp_get_next(NULL);
        while(d) {
            lv_disp_refr_task(d->refr_task);
            d = lv_disp_get_next(d);
        }
    }
}

// Assembly:
testq %rdi, %rdi
je 0x6877
movq 0x40(%rdi), %rdi
jmp 0x6897
pushq %rbx
xorl %edi, %edi
callq 0x7e25
movq %rax, %rbx
testq %rax, %rax
je 0x6895
movq 0x40(%rbx), %rdi
callq 0x6897
movq %rbx, %rdi
jmp 0x687a
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_core/lv_refr.c
// Function: lv_inv_area
void lv_inv_area(lv_disp_t * disp, const lv_area_t * area_p)
{
    if(!disp) disp = lv_disp_get_default();
    if(!disp) return;

    /*Clear the invalidate buffer if the parameter is NULL*/
    if(area_p == NULL) {
        disp->inv_p = 0;
        return;
    }

    lv_area_t scr_area;
    scr_area.x1 = 0;
    scr_area.y1 = 0;
    scr_area.x2 = lv_disp_get_hor_res(disp) - 1;
    scr_area.y2 = lv_disp_get_ver_res(disp) - 1;

    lv_area_t com_area;
    bool suc;

    suc = lv_area_intersect(&com_area, area_p, &scr_area);

    /*The area is truncated to the screen*/
    if(suc != false) {
        if(disp->driver.rounder_cb) disp->driver.rounder_cb(&disp->driver, &com_area);

        /*Save only if this area is not in one of the saved areas*/
        uint16_t i;
        for(i = 0; i < disp->inv_p; i++) {
            if(lv_area_is_in(&com_area, &disp->inv_areas[i]) != false) return;
        }

        /*Save the area*/
        if(disp->inv_p < LV_INV_BUF_SIZE) {
            lv_area_copy(&disp->inv_areas[disp->inv_p], &com_area);
        } else { /*If no place for the area add the screen*/
            disp->inv_p = 0;
            lv_area_copy(&disp->inv_areas[disp->inv_p], &scr_area);
        }
        disp->inv_p++;
    }
}

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x10, %rsp
movq %rsi, %r14
movq %rdi, %rbx
testq %rdi, %rdi
jne 0x6d28
callq 0x7df2
movq %rax, %rbx
testq %rax, %rax
je 0x6e00
testq %r14, %r14
je 0x6db9
leaq 0x8(%rsp), %r15
andl $0x0, (%r15)
movq %rbx, %rdi
callq 0x7d4c
decl %eax
movw %ax, 0x4(%r15)
movq %rbx, %rdi
callq 0x7d6e
decl %eax
movw %ax, 0x6(%r15)
movq %rsp, %rdi
movq %r14, %rsi
movq %r15, %rdx
callq 0x26880
testb %al, %al
je 0x6e00
movq 0x20(%rbx), %rax
testq %rax, %rax
je 0x6d7f
movq %rsp, %rsi
movq %rbx, %rdi
callq *%rax
leaq 0x78(%rbx), %r15
pushq $-0x1
popq %r12
movq %rsp, %r14
movq %r15, %rsi
movzwl 0x198(%rbx), %eax
movl %eax, %ecx
andl $0x3ff, %ecx            # imm = 0x3FF
incq %r12
cmpq %rcx, %r12
jae 0x6dc4
leaq 0x8(%rsi), %r13
movq %r14, %rdi
callq 0x26931
movq %r13, %rsi
testb %al, %al
je 0x6d8d
jmp 0x6e00
andw $0xfc00, 0x198(%rbx)    # imm = 0xFC00
jmp 0x6e00
cmpw $0x1f, %cx
ja 0x6ddc
movq (%rsp), %rax
movq %rax, 0x78(%rbx,%rcx,8)
movzwl 0x198(%rbx), %eax
jmp 0x6de9
andl $0xfc00, %eax           # imm = 0xFC00
movq 0x8(%rsp), %rcx
movq %rcx, (%r15)
leal 0x1(%rax), %ecx
andl $0x3ff, %ecx            # imm = 0x3FF
andl $0xfffffc00, %eax       # imm = 0xFFFFFC00
orl %ecx, %eax
movw %ax, 0x198(%rbx)
addq $0x10, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_core/lv_refr.c
// Function: lv_refr_vdb_flush
static void lv_refr_vdb_flush(void)
{
    lv_disp_buf_t * vdb = lv_disp_get_buf(disp_refr);

    /*In double buffered mode wait until the other buffer is flushed before flushing the current
     * one*/
    if(lv_disp_is_double_buf(disp_refr)) {
        while(vdb->flushing)
            ;
    }

    vdb->flushing = 1;

    /*Flush the rendered content to the display*/
    lv_disp_t * disp = lv_refr_get_disp_refreshing();
    if(disp->driver.flush_cb) disp->driver.flush_cb(&disp->driver, &vdb->area, vdb->buf_act);

    if(vdb->buf1 && vdb->buf2) {
        if(vdb->buf_act == vdb->buf1)
            vdb->buf_act = vdb->buf2;
        else
            vdb->buf_act = vdb->buf1;
    }
}

// Assembly:
pushq %rbx
movq 0x5709a(%rip), %rdi     # 0x5dec0
callq 0x7e45
movq %rax, %rbx
movq 0x5708b(%rip), %rdi     # 0x5dec0
callq 0x7e8b
testb %al, %al
je 0x6e44
testb $0x1, 0x24(%rbx)
jne 0x6e3e
orb $0x1, 0x24(%rbx)
movq 0x57071(%rip), %rdi     # 0x5dec0
movq 0x18(%rdi), %rax
testq %rax, %rax
je 0x6e65
movq %rbx, %rsi
addq $0x1c, %rsi
movq 0x10(%rbx), %rdx
callq *%rax
movq (%rbx), %rax
testq %rax, %rax
je 0x6e82
movq 0x8(%rbx), %rcx
testq %rcx, %rcx
je 0x6e82
cmpq %rax, 0x10(%rbx)
cmovneq %rax, %rcx
movq %rcx, 0x10(%rbx)
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_core/lv_refr.c
// Function: lv_refr_area_part
static void lv_refr_area_part(const lv_area_t * area_p)
{

    lv_disp_buf_t * vdb = lv_disp_get_buf(disp_refr);

    /*In non double buffered mode, before rendering the next part wait until the previous image is
     * flushed*/
    if(lv_disp_is_double_buf(disp_refr) == false) {
        while(vdb->flushing)
            ;
    }

    lv_obj_t * top_p;

    /*Get the new mask from the original area and the act. VDB
     It will be a part of 'area_p'*/
    lv_area_t start_mask;
    lv_area_intersect(&start_mask, area_p, &vdb->area);

    /*Get the most top object which is not covered by others*/
    top_p = lv_refr_get_top_obj(&start_mask, lv_disp_get_scr_act(disp_refr));

    /*Do the refreshing from the top object*/
    lv_refr_obj_and_children(top_p, &start_mask);

    /*Also refresh top and sys layer unconditionally*/
    lv_refr_obj_and_children(lv_disp_get_layer_top(disp_refr), &start_mask);
    lv_refr_obj_and_children(lv_disp_get_layer_sys(disp_refr), &start_mask);

    /* In true double buffered mode flush only once when all areas were rendered.
     * In normal mode flush after every area */
    if(lv_disp_is_true_double_buf(disp_refr) == false) {
        lv_refr_vdb_flush();
    }
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x10, %rsp
movq %rdi, %r14
movq 0x57029(%rip), %rdi     # 0x5dec0
callq 0x7e45
movq %rax, %r15
movq 0x5701a(%rip), %rdi     # 0x5dec0
callq 0x7e8b
testb %al, %al
jne 0x6eb6
testb $0x1, 0x24(%r15)
jne 0x6eaf
addq $0x1c, %r15
leaq 0x8(%rsp), %rbx
movq %rbx, %rdi
movq %r14, %rsi
movq %r15, %rdx
callq 0x26880
movq 0x56fec(%rip), %rdi     # 0x5dec0
callq 0x4140
movq %rbx, %rdi
movq %rax, %rsi
callq 0x6f3c
movq %rax, %rdi
movq %rbx, %rsi
callq 0x6fcf
movq 0x56fca(%rip), %rdi     # 0x5dec0
callq 0x4173
movq %rax, %rdi
movq %rbx, %rsi
callq 0x6fcf
movq 0x56fb3(%rip), %rdi     # 0x5dec0
callq 0x4190
movq %rax, %rdi
movq %rbx, %rsi
callq 0x6fcf
movq 0x56f9c(%rip), %rdi     # 0x5dec0
callq 0x7ea2
testb %al, %al
jne 0x6f32
callq 0x6e1e
addq $0x10, %rsp
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_core/lv_refr.c
// Function: lv_refr_get_top_obj
static lv_obj_t * lv_refr_get_top_obj(const lv_area_t * area_p, lv_obj_t * obj)
{
    lv_obj_t * found_p = NULL;

    /*If this object is fully cover the draw area check the children too */
    if(lv_area_is_in(area_p, &obj->coords) && obj->hidden == 0) {
        lv_obj_t * i;
        LV_LL_READ(obj->child_ll, i)
        {
            found_p = lv_refr_get_top_obj(area_p, i);

            /*If a children is ok then break*/
            if(found_p != NULL) {
                break;
            }
        }

        /*If no better children check this object*/
        if(found_p == NULL) {
            const lv_style_t * style = lv_obj_get_style(obj);
            if(style->body.opa == LV_OPA_COVER && obj->design_cb(obj, area_p, LV_DESIGN_COVER_CHK) != false &&
               lv_obj_get_opa_scale(obj) == LV_OPA_COVER) {
                found_p = obj;
            }
        }
    }

    return found_p;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rsi, %rbx
movq %rdi, %r14
addq $0x20, %rsi
callq 0x26931
testb %al, %al
je 0x6fc1
testb $0x10, 0x58(%rbx)
jne 0x6fc1
leaq 0x8(%rbx), %r15
movq %r15, %rdi
callq 0x27db9
movq %rax, %r12
testq %rax, %rax
je 0x6f8e
movq %r14, %rdi
movq %r12, %rsi
callq 0x6f3c
testq %rax, %rax
jne 0x6fc3
movq %r15, %rdi
movq %r12, %rsi
callq 0x27e93
jmp 0x6f69
movq %rbx, %rdi
callq 0x6316
cmpb $-0x1, 0x8(%rax)
jne 0x6fc1
pushq $0x2
popq %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq *0x38(%rbx)
testb %al, %al
je 0x6fc1
movq %rbx, %rdi
callq 0x6649
movl %eax, %ecx
xorl %eax, %eax
cmpb $-0x1, %cl
cmoveq %rbx, %rax
jmp 0x6fc3
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_core/lv_refr.c
// Function: lv_refr_obj_and_children
static void lv_refr_obj_and_children(lv_obj_t * top_p, const lv_area_t * mask_p)
{
    /* Normally always will be a top_obj (at least the screen)
     * but in special cases (e.g. if the screen has alpha) it won't.
     * In this case use the screen directly */
    if(top_p == NULL) top_p = lv_disp_get_scr_act(disp_refr);

    /*Refresh the top object and its children*/
    lv_refr_obj(top_p, mask_p);

    /*Draw the 'younger' sibling objects because they can be on top_obj */
    lv_obj_t * par;
    lv_obj_t * border_p = top_p;

    par = lv_obj_get_parent(top_p);

    /*Do until not reach the screen*/
    while(par != NULL) {
        /*object before border_p has to be redrawn*/
        lv_obj_t * i = lv_ll_get_prev(&(par->child_ll), border_p);

        while(i != NULL) {
            /*Refresh the objects*/
            lv_refr_obj(i, mask_p);
            i = lv_ll_get_prev(&(par->child_ll), i);
        }

        /*Call the post draw design function of the parents of the to object*/
        par->design_cb(par, mask_p, LV_DESIGN_DRAW_POST);

        /*The new border will be there last parents,
         *so the 'younger' brothers of parent will be refreshed*/
        border_p = par;
        /*Go a level deeper*/
        par = lv_obj_get_parent(par);
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movq %rsi, %rbx
movq %rdi, %r15
testq %rdi, %rdi
jne 0x6ff1
movq 0x56ed7(%rip), %rdi     # 0x5dec0
callq 0x4140
movq %rax, %r15
movq %r15, %rdi
movq %rbx, %rsi
callq 0x7055
movq %r15, %rdi
callq 0x47bc
pushq $0x1
popq %rbp
testq %rax, %rax
je 0x704c
movq %rax, %r14
leaq 0x8(%rax), %r12
movq %r12, %rdi
movq %r15, %rsi
callq 0x27dc6
movq %rax, %r15
testq %rax, %rax
je 0x7033
movq %r15, %rdi
movq %rbx, %rsi
callq 0x7055
jmp 0x7013
movq %r14, %rdi
movq %rbx, %rsi
movl %ebp, %edx
callq *0x38(%r14)
movq %r14, %rdi
callq 0x47bc
movq %r14, %r15
jmp 0x7007
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_core/lv_style.c
// Function: lv_style_anim_init
void lv_style_anim_init(lv_anim_t * a)
{
    lv_anim_init(a);
    a->start    = 0;
    a->end      = STYLE_MIX_MAX;
    a->exec_cb  = (lv_anim_exec_xcb_t)style_animator;
    a->path_cb  = lv_anim_path_linear;
    a->ready_cb = style_animation_common_end_cb;

    lv_style_anim_dsc_t * dsc;
    dsc = lv_mem_alloc(sizeof(lv_style_anim_dsc_t));
    LV_ASSERT_MEM(dsc);
    if(dsc == NULL) return;
    dsc->ready_cb   = NULL;
    dsc->style_anim = NULL;
    lv_style_copy(&dsc->style_start, &lv_style_plain);
    lv_style_copy(&dsc->style_end, &lv_style_plain);

    a->var = (void *)dsc;
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
callq 0x2762d
movabsq $0x10000000000, %rax    # imm = 0x10000000000
movq %rax, 0x20(%rbx)
leaq 0x85(%rip), %rax        # 0x7915
movq %rax, 0x8(%rbx)
leaq 0x1fdbe(%rip), %rax     # 0x27659
movq %rax, 0x10(%rbx)
leaq 0x96(%rip), %rax        # 0x793c
movq %rax, 0x18(%rbx)
movl $0xa0, %edi
callq 0x279f9
movq %rax, %r14
movq %rax, %rdi
callq 0x7994
testb %al, %al
je 0x7904
testq %r14, %r14
je 0x78fc
xorps %xmm0, %xmm0
movups %xmm0, 0x90(%r14)
leaq 0x5663e(%rip), %rax     # 0x5df18
pushq $0x9
popq %rdx
movq %rdx, %rcx
movq %r14, %rdi
movq %rax, %rsi
rep  movsq (%rsi), %es:(%rdi)
movq %r14, %rdi
addq $0x48, %rdi
movq %rdx, %rcx
movq %rax, %rsi
rep  movsq (%rsi), %es:(%rdi)
movq %r14, (%rbx)
addq $0x8, %rsp
popq %rbx
popq %r14
retq
leaq 0x33735(%rip), %rdi     # 0x3b040
movq %r14, %rsi
callq 0x7b01
jmp 0x7913
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_core/lv_style.c
// Function: style_animator
static void style_animator(lv_style_anim_dsc_t * dsc, lv_anim_value_t val)
{
    const lv_style_t * start = &dsc->style_start;
    const lv_style_t * end   = &dsc->style_end;
    lv_style_t * act         = dsc->style_anim;

    lv_style_mix(start, end, act, val);

    lv_obj_report_style_mod(dsc->style_anim);
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
leaq 0x48(%rdi), %rax
movq 0x90(%rdi), %rdx
movzwl %si, %ecx
movq %rax, %rsi
callq 0x74db
movq 0x90(%rbx), %rdi
popq %rbx
jmp 0x5b21
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_core/lv_style.c
// Function: lv_style_anim_set_styles
void lv_style_anim_set_styles(lv_anim_t * a, lv_style_t * to_anim, const lv_style_t * start, const lv_style_t * end)
{

    lv_style_anim_dsc_t * dsc = a->var;
    dsc->style_anim           = to_anim;
    memcpy(&dsc->style_start, start, sizeof(lv_style_t));
    memcpy(&dsc->style_end, end, sizeof(lv_style_t));
    memcpy(dsc->style_anim, start, sizeof(lv_style_t));
}

// Assembly:
movq %rcx, %rax
movq %rsi, %r8
movq (%rdi), %r9
movq %rsi, 0x90(%r9)
pushq $0x9
popq %r10
movq %r10, %rcx
movq %r9, %rdi
movq %rdx, %rsi
rep  movsq (%rsi), %es:(%rdi)
addq $0x48, %r9
movq %r10, %rcx
movq %r9, %rdi
movq %rax, %rsi
rep  movsq (%rsi), %es:(%rdi)
movq %r10, %rcx
movq %r8, %rdi
movq %rdx, %rsi
rep  movsq (%rsi), %es:(%rdi)
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_core/lv_debug.c
// Function: lv_debug_check_obj_type
bool lv_debug_check_obj_type(const lv_obj_t * obj, const char * obj_type)
{
    if(obj_type[0] == '\0') return true;

    lv_obj_type_t types;
    lv_obj_get_type((lv_obj_t *)obj, &types);

    uint8_t i;
    for(i = 0; i < LV_MAX_ANCESTOR_NUM; i++) {
        if(strcmp(types.type[i], obj_type) == 0) return true;
    }

    return false;
}

// Assembly:
cmpb $0x0, (%rsi)
je 0x79e3
pushq %r14
pushq %rbx
subq $0x48, %rsp
movq %rsi, %rbx
leaq 0x8(%rsp), %rsi
callq 0x676b
xorl %ecx, %ecx
movq %rcx, %r14
cmpq $0x8, %rcx
je 0x79d4
movq 0x8(%rsp,%r14,8), %rdi
movq %rbx, %rsi
callq 0x20e0
leaq 0x1(%r14), %rcx
testl %eax, %eax
jne 0x79b6
cmpq $0x8, %r14
setb %al
addq $0x48, %rsp
popq %rbx
popq %r14
retq
movb $0x1, %al
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_core/lv_debug.c
// Function: lv_debug_check_obj_valid
bool lv_debug_check_obj_valid(const lv_obj_t * obj)
{
    lv_disp_t * disp = lv_disp_get_next(NULL);
    while(disp) {
        lv_obj_t * scr;
        LV_LL_READ(disp->scr_ll, scr) {

            if(scr == obj) return true;
            bool found = obj_valid_child(scr, obj);
            if(found) return true;
        }

        disp = lv_disp_get_next(disp);
    }

    return false;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rdi, %rbx
xorl %edi, %edi
callq 0x7e25
movq %rax, %r14
testq %rax, %rax
je 0x7a3a
leaq 0x48(%r14), %r15
movq %r15, %rdi
callq 0x27db9
movq %rax, %r12
testq %rax, %rax
je 0x7a35
cmpq %rbx, %r12
je 0x7a3a
movq %r12, %rdi
movq %rbx, %rsi
callq 0x7a4c
testb %al, %al
jne 0x7a3a
movq %r15, %rdi
movq %r12, %rsi
callq 0x27e93
jmp 0x7a0c
movq %r14, %rdi
jmp 0x79f3
testq %r14, %r14
setne %al
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_core/lv_debug.c
// Function: lv_debug_check_str
bool lv_debug_check_str(const void * str)
{
    const uint8_t * s = (const uint8_t *)str;
    uint8_t last_byte = 0;
    uint32_t rep = 0;
    uint32_t i;

    for(i = 0; s[i] != '\0' && i < LV_DEBUG_STR_MAX_LENGTH; i++) {
        if(s[i] != last_byte) {
            last_byte = s[i];
            rep = 1;
        } else if(s[i] > 0x7F){
            rep++;
            if(rep > LV_DEBUG_STR_MAX_REPEAT) {
                LV_LOG_WARN("lv_debug_check_str: a non-ASCII char has repeated more than LV_DEBUG_STR_MAX_REPEAT times)");
                return false;
            }
        }

        if(s[i] < 10) {
            LV_LOG_WARN("lv_debug_check_str: invalid char in the string (< 10 value)");
            return false;   /*Shouldn't occur in strings*/
        }
    }

    if(s[i] == '\0') return true;

    LV_LOG_WARN("lv_debug_check_str: string is longer than LV_DEBUG_STR_MAX_LENGTH");
    return false;
}

// Assembly:
xorl %eax, %eax
pushq $0x1
popq %rcx
xorl %edx, %edx
xorl %esi, %esi
movb (%rdi,%rax), %r8b
cmpq $0x1fff, %rax           # imm = 0x1FFF
ja 0x7afa
testb %r8b, %r8b
je 0x7afa
movl %r8d, %r10d
movl %ecx, %r9d
cmpb %dl, %r8b
jne 0x7adc
testb %dl, %dl
js 0x7aed
movl %edx, %r10d
movl %esi, %r9d
movl %r10d, %edx
cmpb $0xa, %r8b
jb 0x7af7
incq %rax
movl %r9d, %esi
jmp 0x7ab6
incl %esi
movl %esi, %r9d
cmpl $0x8, %esi
jbe 0x7ae5
xorl %eax, %eax
retq
testb %r8b, %r8b
sete %al
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_hal/lv_hal_disp.c
// Function: lv_disp_drv_update
void lv_disp_drv_update(lv_disp_t * disp, lv_disp_drv_t * new_drv)
{
    memcpy(&disp->driver, new_drv, sizeof(lv_disp_drv_t));

    lv_obj_t * scr;
    LV_LL_READ(disp->scr_ll, scr)
    {
        lv_obj_set_size(scr, lv_disp_get_hor_res(disp), lv_disp_get_ver_res(disp));
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
movups (%rsi), %xmm0
movups 0x10(%rsi), %xmm1
movups 0x20(%rsi), %xmm2
movups 0x30(%rsi), %xmm3
movups %xmm3, 0x30(%rdi)
movups %xmm2, 0x20(%rdi)
movups %xmm1, 0x10(%rdi)
movups %xmm0, (%rdi)
leaq 0x48(%rdi), %r14
movq %r14, %rdi
callq 0x27db9
movq %rax, %r15
testq %rax, %rax
je 0x7d41
movq %rbx, %rdi
callq 0x7d4c
movl %eax, %ebp
movq %rbx, %rdi
callq 0x7d6e
movswl %bp, %esi
movswl %ax, %edx
movq %r15, %rdi
callq 0x520e
movq %r14, %rdi
movq %r15, %rsi
callq 0x27e93
jmp 0x7d0c
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_hal/lv_hal_disp.c
// Function: lv_disp_get_hor_res
lv_coord_t lv_disp_get_hor_res(lv_disp_t * disp)
{
    if(disp == NULL) disp = lv_disp_get_default();

    if(disp == NULL)
        return LV_HOR_RES_MAX;
    else
        return disp->driver.rotated == 0 ? disp->driver.hor_res : disp->driver.ver_res;
}

// Assembly:
testq %rdi, %rdi
jne 0x7d5d
movq 0x56520(%rip), %rdi     # 0x5e278
testq %rdi, %rdi
je 0x7d69
movzbl 0x10(%rdi), %eax
andl $0x2, %eax
movzwl (%rdi,%rax), %eax
retq
movw $0x140, %ax             # imm = 0x140
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_hal/lv_hal_disp.c
// Function: lv_disp_get_ver_res
lv_coord_t lv_disp_get_ver_res(lv_disp_t * disp)
{
    if(disp == NULL) disp = lv_disp_get_default();

    if(disp == NULL)
        return LV_VER_RES_MAX;
    else
        return disp->driver.rotated == 0 ? disp->driver.ver_res : disp->driver.hor_res;
}

// Assembly:
testq %rdi, %rdi
jne 0x7d7f
movq 0x564fe(%rip), %rdi     # 0x5e278
testq %rdi, %rdi
je 0x7d8c
movl 0x10(%rdi), %eax
notl %eax
andl $0x2, %eax
movzwl (%rdi,%rax), %eax
retq
movw $0xf0, %ax
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_hal/lv_hal_disp.c
// Function: lv_disp_remove
void lv_disp_remove(lv_disp_t * disp)
{
    bool was_default = false;
    if(disp == lv_disp_get_default()) was_default = true;

    /*Detach the input devices */
    lv_indev_t * indev;
    indev = lv_indev_get_next(NULL);
    while(indev) {
        if(indev->driver.disp == disp) {
            indev->driver.disp = NULL;
        }
        indev = lv_indev_get_next(indev);
    }

    lv_ll_rem(&LV_GC_ROOT(_lv_disp_ll), disp);
    lv_mem_free(disp);

    if(was_default) lv_disp_set_default(lv_ll_get_head(&LV_GC_ROOT(_lv_disp_ll)));
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
movq 0x564d9(%rip), %r14     # 0x5e278
xorl %edi, %edi
callq 0x7fb2
testq %rax, %rax
je 0x7dbb
cmpq %rbx, 0x18(%rax)
jne 0x7db6
andq $0x0, 0x18(%rax)
movq %rax, %rdi
jmp 0x7da1
leaq 0x5e736(%rip), %rdi     # 0x664f8
movq %rbx, %rsi
callq 0x27e1c
movq %rbx, %rdi
callq 0x27a7a
cmpq %rbx, %r14
jne 0x7dea
leaq 0x5e71a(%rip), %rdi     # 0x664f8
callq 0x27db9
movq %rax, 0x5648e(%rip)     # 0x5e278
addq $0x8, %rsp
popq %rbx
popq %r14
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_hal/lv_hal_disp.c
// Function: lv_disp_get_antialiasing
bool lv_disp_get_antialiasing(lv_disp_t * disp)
{
#if LV_ANTIALIAS == 0
    return false;
#else
    if(disp == NULL) disp = lv_disp_get_default();
    if(disp == NULL) return false;

    return disp->driver.antialiasing ? true : false;
#endif
}

// Assembly:
testq %rdi, %rdi
jne 0x7e13
movq 0x5646a(%rip), %rdi     # 0x5e278
testq %rdi, %rdi
je 0x7e19
movb 0x10(%rdi), %al
andb $0x1, %al
retq
xorl %eax, %eax
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_hal/lv_hal_indev.c
// Function: lv_indev_drv_register
lv_indev_t * lv_indev_drv_register(lv_indev_drv_t * driver)
{

    if(driver->disp == NULL) driver->disp = lv_disp_get_default();

    if(driver->disp == NULL) {
        LV_LOG_WARN("lv_indev_drv_register: no display registered hence can't attache the indev to "
                    "a display");
        return NULL;
    }

    lv_indev_t * indev = lv_ll_ins_head(&LV_GC_ROOT(_lv_indev_ll));
    if(!indev) {
        LV_ASSERT_MEM(indev);
        return NULL;
    }

    memset(indev, 0, sizeof(lv_indev_t));
    memcpy(&indev->driver, driver, sizeof(lv_indev_drv_t));

    indev->proc.reset_query = 1;
    indev->cursor           = NULL;
    indev->group            = NULL;
    indev->btn_points       = NULL;

    indev->driver.read_task = lv_task_create(lv_indev_read_task, LV_INDEV_DEF_READ_PERIOD, LV_TASK_PRIO_MID, indev);

    return indev;
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %r14
cmpq $0x0, 0x18(%rdi)
jne 0x7f04
callq 0x7df2
movq %rax, 0x18(%r14)
testq %rax, %rax
je 0x7f8e
leaq 0x5e605(%rip), %rdi     # 0x66510
callq 0x27d00
testq %rax, %rax
je 0x7f71
movq %rax, %rbx
movl $0x98, %edx
movq %rax, %rdi
xorl %esi, %esi
callq 0x20a0
movups (%r14), %xmm0
movups 0x10(%r14), %xmm1
movups 0x20(%r14), %xmm2
movups %xmm0, (%rbx)
movups %xmm1, 0x10(%rbx)
movups %xmm2, 0x20(%rbx)
movb $0x2, 0x78(%rbx)
xorps %xmm0, %xmm0
movups %xmm0, 0x80(%rbx)
andq $0x0, 0x90(%rbx)
leaq -0x5269(%rip), %rdi     # 0x2cf4
pushq $0x1e
popq %rsi
pushq $0x3
popq %rdx
movq %rbx, %rcx
callq 0x26c3b
movq %rax, 0x20(%rbx)
jmp 0x7f90
xorl %ebx, %ebx
xorl %edi, %edi
callq 0x7994
testb %al, %al
jne 0x7f90
leaq 0x330bb(%rip), %rdi     # 0x3b040
xorl %esi, %esi
callq 0x7b01
jmp 0x7f8c
xorl %ebx, %ebx
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %r14
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_arc.c
// Function: lv_arc_create
lv_obj_t * lv_arc_create(lv_obj_t * par, const lv_obj_t * copy)
{

    LV_LOG_TRACE("arc create started");

    /*Create the ancestor of arc*/
    lv_obj_t * new_arc = lv_obj_create(par, copy);
    LV_ASSERT_MEM(new_arc);
    if(new_arc == NULL) return NULL;

    /*Allocate the arc type specific extended data*/
    lv_arc_ext_t * ext = lv_obj_allocate_ext_attr(new_arc, sizeof(lv_arc_ext_t));
    LV_ASSERT_MEM(ext);
    if(ext == NULL) return NULL;

    if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_arc);
    if(ancestor_design == NULL) ancestor_design = lv_obj_get_design_cb(new_arc);

    /*Initialize the allocated 'ext' */
    ext->angle_start = 45;
    ext->angle_end   = 315;

    /*The signal and design functions are not copied so set them here*/
    lv_obj_set_signal_cb(new_arc, lv_arc_signal);
    lv_obj_set_design_cb(new_arc, lv_arc_design);

    /*Init the new arc arc*/
    if(copy == NULL) {
        /*Set the default styles*/
        lv_theme_t * th = lv_theme_get_current();
        if(th) {
            lv_arc_set_style(new_arc, LV_ARC_STYLE_MAIN, th->style.arc);
        } else {
            lv_arc_set_style(new_arc, LV_ARC_STYLE_MAIN, &lv_style_plain_color);
        }

    }
    /*Copy an existing arc*/
    else {
        lv_arc_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
        ext->angle_start        = copy_ext->angle_start;
        ext->angle_end          = copy_ext->angle_end;

        /*Refresh the style with new signal function*/
        lv_obj_refresh_style(new_arc);
    }

    LV_LOG_INFO("arc created");

    return new_arc;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rsi, %r14
callq 0x42c9
movq %rax, %rbx
movq %rax, %rdi
callq 0x7994
testb %al, %al
je 0x8103
testq %rbx, %rbx
je 0x8114
pushq $0x4
popq %rsi
movq %rbx, %rdi
callq 0x6146
movq %rax, %r15
movq %rax, %rdi
callq 0x7994
testb %al, %al
je 0x811f
testq %r15, %r15
je 0x8114
cmpq $0x0, 0x561f0(%rip)     # 0x5e288
jne 0x80a9
movq %rbx, %rdi
callq 0x66db
movq %rax, 0x561df(%rip)     # 0x5e288
cmpq $0x0, 0x561df(%rip)     # 0x5e290
jne 0x80c2
movq %rbx, %rdi
callq 0x66ff
movq %rax, 0x561ce(%rip)     # 0x5e290
movl $0x13b002d, (%r15)      # imm = 0x13B002D
leaq 0x86(%rip), %rsi        # 0x8156
movq %rbx, %rdi
callq 0x60e6
leaq 0xaf(%rip), %rsi        # 0x818e
movq %rbx, %rdi
callq 0x6116
testq %r14, %r14
je 0x8130
movq %r14, %rdi
callq 0x6747
movl (%rax), %eax
movl %eax, (%r15)
movq %rbx, %rdi
callq 0x5ae7
jmp 0x8116
leaq 0x32f36(%rip), %rdi     # 0x3b040
movq %rbx, %rsi
callq 0x7b01
jmp 0x8112
xorl %ebx, %ebx
movq %rbx, %rax
popq %rbx
popq %r14
popq %r15
retq
leaq 0x32f1a(%rip), %rdi     # 0x3b040
movq %r15, %rsi
callq 0x7b01
jmp 0x812e
callq 0x2be75
testq %rax, %rax
je 0x8143
movq 0xe0(%rax), %rdx
jmp 0x814a
leaq 0x55e16(%rip), %rdx     # 0x5df60
movq %rbx, %rdi
xorl %esi, %esi
callq 0x83c3
jmp 0x8116
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_arc.c
// Function: lv_arc_set_angles
void lv_arc_set_angles(lv_obj_t * arc, uint16_t start, uint16_t end)
{
    LV_ASSERT_OBJ(arc, LV_OBJX_NAME);

    lv_arc_ext_t * ext = lv_obj_get_ext_attr(arc);

    if(start > 360) start = 360;
    if(end > 360) end = 360;

    ext->angle_start = start;
    ext->angle_end   = end;

    lv_obj_invalidate(arc);
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %edx, %ebp
movl %esi, %r14d
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x844e
movq %rbx, %rdi
callq 0x6747
movw $0x168, %cx             # imm = 0x168
cmpw %cx, %r14w
movl $0x168, %edx            # imm = 0x168
cmovbl %r14d, %edx
movl $0x168, %esi            # imm = 0x168
cmpw %cx, %bp
cmovael %esi, %ebp
movw %dx, (%rax)
movw %bp, 0x2(%rax)
movq %rbx, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0x493a
leaq 0x32cef(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x845d
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_arc.c
// Function: lv_arc_get_style
const lv_style_t * lv_arc_get_style(const lv_obj_t * arc, lv_arc_style_t type)
{
    LV_ASSERT_OBJ(arc, LV_OBJX_NAME);

    const lv_style_t * style = NULL;

    switch(type) {
        case LV_ARC_STYLE_MAIN: style = lv_obj_get_style(arc); break;
        default: style = NULL; break;
    }

    return style;
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x84d5
testb %bpl, %bpl
je 0x84e6
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
leaq 0x32c68(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x84e4
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x6316
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_bar.c
// Function: lv_bar_signal
static lv_res_t lv_bar_signal(lv_obj_t * bar, lv_signal_t sign, void * param)
{
    lv_res_t res;

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

    if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) {
        const lv_style_t * style_indic = lv_bar_get_style(bar, LV_BAR_STYLE_INDIC);
        if(style_indic->body.shadow.width > bar->ext_draw_pad) bar->ext_draw_pad = style_indic->body.shadow.width;
    }

    return res;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdx, %r15
movl %esi, %ebp
movq %rdi, %r14
callq *0x55bdb(%rip)          # 0x5e298
movl %eax, %ebx
cmpb $0x1, %al
jne 0x8708
movb $0x1, %bl
cmpb $0x6, %bpl
je 0x86ed
movzbl %bpl, %eax
cmpl $0x7, %eax
jne 0x8708
leaq 0x32aad(%rip), %rsi     # 0x3b188
movq %r15, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x684b
pushq $0x1
popq %rsi
movq %r14, %rdi
callq 0x8dae
movzwl 0x12(%rax), %eax
cmpw 0x5c(%r14), %ax
jle 0x8708
movw %ax, 0x5c(%r14)
movl %ebx, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_bar.c
// Function: lv_bar_set_value
void lv_bar_set_value(lv_obj_t * bar, int16_t value, lv_anim_enable_t anim)
{
    LV_ASSERT_OBJ(bar, LV_OBJX_NAME);

#if LV_USE_ANIMATION == 0
    anim = false;
#endif
    lv_bar_ext_t * ext = lv_obj_get_ext_attr(bar);
    if(ext->cur_value == value) return;

    int16_t new_value;
    new_value = value > ext->max_value ? ext->max_value : value;
    new_value = new_value < ext->min_value ? ext->min_value : new_value;

    if(ext->cur_value == new_value) return;

    if(anim == LV_ANIM_OFF) {
        ext->cur_value = new_value;
        lv_obj_invalidate(bar);
    } else {
#if LV_USE_ANIMATION
        /*No animation in progress -> simply set the values*/
        if(ext->anim_state == LV_BAR_ANIM_STATE_INV) {
            ext->anim_start = ext->cur_value;
            ext->anim_end   = new_value;
        }
        /*Animation in progress. Start from the animation end value*/
        else {
            ext->anim_start = ext->anim_end;
            ext->anim_end   = new_value;
        }

        lv_anim_t a;
        a.var            = bar;
        a.start          = LV_BAR_ANIM_STATE_START;
        a.end            = LV_BAR_ANIM_STATE_END;
        a.exec_cb        = (lv_anim_exec_xcb_t)lv_bar_anim;
        a.path_cb        = lv_anim_path_linear;
        a.ready_cb       = lv_bar_anim_ready;
        a.act_time       = 0;
        a.time           = ext->anim_time;
        a.playback       = 0;
        a.playback_pause = 0;
        a.repeat         = 0;
        a.repeat_pause   = 0;

        lv_anim_create(&a);
#endif
    }
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
subq $0x40, %rsp
movl %edx, %ebp
movl %esi, %r14d
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x8aef
movq %rbx, %rdi
callq 0x6747
movzwl (%rax), %edx
cmpw %r14w, %dx
je 0x8ae6
movl 0x4(%rax), %ecx
cmpw %r14w, %cx
cmovgel %r14d, %ecx
movzwl 0x2(%rax), %esi
cmpw %si, %cx
cmovlel %esi, %ecx
cmpw %cx, %dx
je 0x8ae6
testb %bpl, %bpl
je 0x8b00
cmpw $-0x1, 0xa(%rax)
je 0x8a8d
movzwl 0x8(%rax), %edx
movw %dx, 0x6(%rax)
movw %cx, 0x8(%rax)
leaq 0x8(%rsp), %rdi
movq %rbx, (%rdi)
movabsq $0x10000000000, %rcx    # imm = 0x10000000000
movq %rcx, 0x20(%rdi)
leaq 0xc1(%rip), %rcx        # 0x8b73
movq %rcx, 0x8(%rdi)
leaq 0x1eb9c(%rip), %rcx     # 0x27659
movq %rcx, 0x10(%rdi)
leaq 0xcc(%rip), %rcx        # 0x8b94
movq %rcx, 0x18(%rdi)
andw $0x0, 0x2a(%rdi)
movzwl 0xc(%rax), %eax
movw %ax, 0x28(%rdi)
andl $0x0, 0x2c(%rdi)
movb $0x0, 0x30(%rdi)
callq 0x27685
addq $0x40, %rsp
popq %rbx
popq %r14
popq %rbp
retq
leaq 0x3264e(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x8afe
movw %cx, (%rax)
movq %rbx, %rdi
addq $0x40, %rsp
popq %rbx
popq %r14
popq %rbp
jmp 0x493a
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_bar.c
// Function: lv_bar_set_style
void lv_bar_set_style(lv_obj_t * bar, lv_bar_style_t type, const lv_style_t * style)
{
    LV_ASSERT_OBJ(bar, LV_OBJX_NAME);

    lv_bar_ext_t * ext = lv_obj_get_ext_attr(bar);

    switch(type) {
        case LV_BAR_STYLE_BG: lv_obj_set_style(bar, style); break;
        case LV_BAR_STYLE_INDIC:
            ext->style_indic = style;
            lv_obj_refresh_ext_draw_pad(bar);
            break;
    }
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movq %rdx, %r14
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x8b4d
movq %rbx, %rdi
callq 0x6747
cmpb $0x1, %bpl
je 0x8b5e
movzbl %bpl, %eax
testl %eax, %eax
jne 0x8b6e
movq %rbx, %rdi
movq %r14, %rsi
popq %rbx
popq %r14
popq %rbp
jmp 0x5a3d
leaq 0x325f0(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x8b5c
movq %r14, 0x10(%rax)
movq %rbx, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0x617f
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_bar.c
// Function: lv_bar_set_range
void lv_bar_set_range(lv_obj_t * bar, int16_t min, int16_t max)
{
    LV_ASSERT_OBJ(bar, LV_OBJX_NAME);

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

    ext->max_value = max;
    ext->min_value = min;
    if(ext->cur_value > max) {
        ext->cur_value = max;
        lv_bar_set_value(bar, ext->cur_value, false);
    }
    if(ext->cur_value < min) {
        ext->cur_value = min;
        lv_bar_set_value(bar, ext->cur_value, false);
    }
    lv_obj_invalidate(bar);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movl %edx, %r14d
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x8bef
movq %rbx, %rdi
callq 0x6747
movq %rax, %r15
cmpw %bp, 0x2(%rax)
jne 0x8c00
cmpw %r14w, 0x4(%r15)
jne 0x8c00
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
leaq 0x3254e(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x8bfe
movw %r14w, 0x4(%r15)
movw %bp, 0x2(%r15)
movzwl (%r15), %eax
cmpw %r14w, %ax
jle 0x8c2a
movw %r14w, (%r15)
movswl %r14w, %esi
movq %rbx, %rdi
xorl %edx, %edx
callq 0x8a31
movzwl (%r15), %eax
cmpw %bp, %ax
jge 0x8c40
movw %bp, (%r15)
movswl %bp, %esi
movq %rbx, %rdi
xorl %edx, %edx
callq 0x8a31
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x493a
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_bar.c
// Function: lv_bar_set_anim_time
void lv_bar_set_anim_time(lv_obj_t * bar, uint16_t anim_time)
{
    LV_ASSERT_OBJ(bar, LV_OBJX_NAME);

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

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movl %esi, %ebx
movq %rdi, %r14
callq 0x7994
testb %al, %al
je 0x8cb6
movq %r14, %rdi
callq 0x6747
movw %bx, 0xc(%rax)
addq $0x8, %rsp
popq %rbx
popq %r14
retq
leaq 0x32487(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x8cc5
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_bar.c
// Function: lv_bar_get_value
int16_t lv_bar_get_value(const lv_obj_t * bar)
{
    LV_ASSERT_OBJ(bar, LV_OBJX_NAME);

    lv_bar_ext_t * ext = lv_obj_get_ext_attr(bar);
    /*If animated tell that it's already at the end value*/
#if LV_USE_ANIMATION
    if(ext->anim_state != LV_BAR_ANIM_STATE_INV) return ext->anim_end;
#endif
    /*No animation, simple return the current value*/
    return ext->cur_value;
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x8cec
movq %rbx, %rdi
callq 0x6747
xorl %ecx, %ecx
cmpw $-0x1, 0xa(%rax)
setne %cl
movzwl (%rax,%rcx,8), %eax
popq %rbx
retq
leaq 0x32451(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x8cfb
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_bar.c
// Function: lv_bar_get_anim_time
uint16_t lv_bar_get_anim_time(lv_obj_t * bar)
{
    LV_ASSERT_OBJ(bar, LV_OBJX_NAME);

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

// Assembly:
pushq %rbx
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x8d9d
movq %rbx, %rdi
callq 0x6747
movzwl 0xc(%rax), %eax
popq %rbx
retq
leaq 0x323a0(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x8dac
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_bar.c
// Function: lv_bar_get_style
const lv_style_t * lv_bar_get_style(const lv_obj_t * bar, lv_bar_style_t type)
{
    LV_ASSERT_OBJ(bar, LV_OBJX_NAME);

    const lv_style_t * style = NULL;
    lv_bar_ext_t * ext       = lv_obj_get_ext_attr(bar);

    switch(type) {
        case LV_BAR_STYLE_BG: style = lv_obj_get_style(bar); break;
        case LV_BAR_STYLE_INDIC: style = ext->style_indic; break;
        default: style = NULL; break;
    }

    return style;
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x8de3
movq %rbx, %rdi
callq 0x6747
cmpb $0x1, %bpl
je 0x8df4
movzbl %bpl, %eax
testl %eax, %eax
jne 0x8dfa
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x6316
leaq 0x3235a(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x8df2
movq 0x10(%rax), %rax
jmp 0x8dfc
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
nop