LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_table.c
// Function: refr_size
static void refr_size(lv_obj_t * table)
{
    lv_coord_t h = 0;
    lv_coord_t w = 0;

    lv_table_ext_t * ext = lv_obj_get_ext_attr(table);

    uint16_t i;
    for(i = 0; i < ext->col_cnt; i++) {
        w += ext->col_w[i];
    }
    for(i = 0; i < ext->row_cnt; i++) {
        h += get_row_height(table, i);
    }

    const lv_style_t * bg_style = lv_obj_get_style(table);

    w += bg_style->body.padding.left + bg_style->body.padding.right;
    h += bg_style->body.padding.top + bg_style->body.padding.bottom;

    lv_obj_set_size(table, w + 1, h + 1);
    lv_obj_invalidate(table);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movq %rdi, %rbx
callq 0x6747
movq %rax, %r14
movzwl (%rax), %eax
xorl %ecx, %ecx
xorl %r15d, %r15d
cmpq %rcx, %rax
je 0xf63b
addw 0x30(%r14,%rcx,2), %r15w
incq %rcx
jmp 0xf62b
xorl %r12d, %r12d
xorl %ebp, %ebp
cmpw 0x2(%r14), %r12w
jae 0xf65a
movzwl %r12w, %esi
movq %rbx, %rdi
callq 0xfce3
addl %eax, %ebp
incl %r12d
jmp 0xf640
movq %rbx, %rdi
callq 0x6316
addw 0x1a(%rax), %r15w
addw 0x1c(%rax), %r15w
addw 0x16(%rax), %bp
addw 0x18(%rax), %bp
incl %r15d
incl %ebp
movswl %r15w, %esi
movswl %bp, %edx
movq %rbx, %rdi
callq 0x520e
movq %rbx, %rdi
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x493a
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_table.c
// Function: lv_table_set_col_width
void lv_table_set_col_width(lv_obj_t * table, uint16_t col_id, lv_coord_t w)
{
    LV_ASSERT_OBJ(table, LV_OBJX_NAME);

    if(col_id >= LV_TABLE_COL_MAX) {
        LV_LOG_WARN("lv_table_set_col_width: too big 'col_id'. Must be < LV_TABLE_COL_MAX.");
        return;
    }

    lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
    ext->col_w[col_id]   = w;
    refr_size(table);
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %edx, %ebp
movl %esi, %r14d
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0xf6b9
cmpw $0xb, %r14w
jbe 0xf6ca
popq %rbx
popq %r14
popq %rbp
retq
leaq 0x2ba84(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xf6c8
movq %rbx, %rdi
callq 0x6747
movzwl %r14w, %ecx
movw %bp, 0x30(%rax,%rcx,2)
movq %rbx, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0xf610
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_table.c
// Function: lv_table_set_cell_align
void lv_table_set_cell_align(lv_obj_t * table, uint16_t row, uint16_t col, lv_label_align_t align)
{
    LV_ASSERT_OBJ(table, LV_OBJX_NAME);

    lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
    if(row >= ext->row_cnt || col >= ext->col_cnt) {
        LV_LOG_WARN("lv_table_set_cell_align: invalid row or column");
        return;
    }
    uint32_t cell = row * ext->col_cnt + col;

    if(ext->cell_data[cell] == NULL) {
        ext->cell_data[cell]    = lv_mem_alloc(2); /*+1: trailing '\0; +1: format byte*/
        ext->cell_data[cell][0] = 0;
        ext->cell_data[cell][1] = '\0';
    }

    lv_table_cell_format_t format;
    format.format_byte      = ext->cell_data[cell][0];
    format.s.align          = align;
    ext->cell_data[cell][0] = format.format_byte;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movl %ecx, %ebx
movl %edx, %ebp
movl %esi, %r15d
movq %rdi, %r14
callq 0x7994
testb %al, %al
je 0xf77d
movq %r14, %rdi
callq 0x6747
cmpw %r15w, 0x2(%rax)
jbe 0xf774
movq %rax, %r14
movzwl (%rax), %r12d
cmpw %bp, %r12w
jbe 0xf774
movzwl %r15w, %eax
movzwl %bp, %ecx
imulq %rax, %r12
addq %rcx, %r12
movq 0x8(%r14), %rax
movq (%rax,%r12,8), %rax
testq %rax, %rax
jne 0xf768
pushq $0x2
popq %rdi
callq 0x279f9
movq 0x8(%r14), %rcx
movq %rax, (%rcx,%r12,8)
movq 0x8(%r14), %rax
movq (%rax,%r12,8), %rax
xorl %ecx, %ecx
movb %cl, (%rax)
movq 0x8(%r14), %rax
movq (%rax,%r12,8), %rax
movb %cl, 0x1(%rax)
movq 0x8(%r14), %rax
movq (%rax,%r12,8), %rax
movb (%rax), %cl
andb $0x3, %bl
andb $-0x4, %cl
orb %bl, %cl
movb %cl, (%rax)
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
leaq 0x2b9c0(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0xf78c
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_table.c
// Function: lv_table_set_cell_type
void lv_table_set_cell_type(lv_obj_t * table, uint16_t row, uint16_t col, uint8_t type)
{
    LV_ASSERT_OBJ(table, LV_OBJX_NAME);

    lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
    if(row >= ext->row_cnt || col >= ext->col_cnt) {
        LV_LOG_WARN("lv_table_set_cell_type: invalid row or column");
        return;
    }
    uint32_t cell = row * ext->col_cnt + col;

    if(ext->cell_data[cell] == NULL) {
        ext->cell_data[cell]    = lv_mem_alloc(2); /*+1: trailing '\0; +1: format byte*/
        ext->cell_data[cell][0] = 0;
        ext->cell_data[cell][1] = '\0';
    }

    if(type > 0) type--; /*User gives 1,2,3,4 but easier to handle 0, 1, 2, 3*/
    if(type >= LV_TABLE_CELL_STYLE_CNT) type = LV_TABLE_CELL_STYLE_CNT - 1;

    lv_table_cell_format_t format;
    format.format_byte      = ext->cell_data[cell][0];
    format.s.type           = type;
    ext->cell_data[cell][0] = format.format_byte;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movl %ecx, %ebx
movl %edx, %ebp
movl %esi, %r15d
movq %rdi, %r14
callq 0x7994
testb %al, %al
je 0xf83c
movq %r14, %rdi
callq 0x6747
cmpw %r15w, 0x2(%rax)
jbe 0xf833
movq %rax, %r14
movzwl (%rax), %r12d
cmpw %bp, %r12w
jbe 0xf833
movzwl %r15w, %eax
movzwl %bp, %ecx
imulq %rax, %r12
addq %rcx, %r12
movq 0x8(%r14), %rax
movq (%rax,%r12,8), %rax
testq %rax, %rax
jne 0xf813
pushq $0x2
popq %rdi
callq 0x279f9
movq 0x8(%r14), %rcx
movq %rax, (%rcx,%r12,8)
movq 0x8(%r14), %rax
movq (%rax,%r12,8), %rax
xorl %ecx, %ecx
movb %cl, (%rax)
movq 0x8(%r14), %rax
movq (%rax,%r12,8), %rax
movb %cl, 0x1(%rax)
movq 0x8(%r14), %rax
movq (%rax,%r12,8), %rax
xorl %ecx, %ecx
subb $0x1, %bl
movzbl %bl, %edx
cmovbl %ecx, %edx
cmpb $0x3, %dl
pushq $0x3
popq %rcx
cmovbl %edx, %ecx
movb (%rax), %dl
shlb $0x3, %cl
andb $-0x19, %dl
orb %cl, %dl
movb %dl, (%rax)
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
leaq 0x2b901(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0xf84b
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_table.c
// Function: lv_table_set_cell_crop
void lv_table_set_cell_crop(lv_obj_t * table, uint16_t row, uint16_t col, bool crop)
{
    LV_ASSERT_OBJ(table, LV_OBJX_NAME);

    lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
    if(row >= ext->row_cnt || col >= ext->col_cnt) {
        LV_LOG_WARN("lv_table_set_cell_crop: invalid row or column");
        return;
    }
    uint32_t cell = row * ext->col_cnt + col;

    if(ext->cell_data[cell] == NULL) {
        ext->cell_data[cell]    = lv_mem_alloc(2); /*+1: trailing '\0; +1: format byte*/
        ext->cell_data[cell][0] = 0;
        ext->cell_data[cell][1] = '\0';
    }

    lv_table_cell_format_t format;
    format.format_byte      = ext->cell_data[cell][0];
    format.s.crop           = crop;
    ext->cell_data[cell][0] = format.format_byte;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movl %ecx, %ebx
movl %edx, %ebp
movl %esi, %r15d
movq %rdi, %r14
callq 0x7994
testb %al, %al
je 0xf8e3
movq %r14, %rdi
callq 0x6747
cmpw %r15w, 0x2(%rax)
jbe 0xf8da
movq %rax, %r14
movzwl (%rax), %r12d
cmpw %bp, %r12w
jbe 0xf8da
movzwl %r15w, %eax
movzwl %bp, %ecx
imulq %rax, %r12
addq %rcx, %r12
movq 0x8(%r14), %rax
movq (%rax,%r12,8), %rax
testq %rax, %rax
jne 0xf8ce
pushq $0x2
popq %rdi
callq 0x279f9
movq 0x8(%r14), %rcx
movq %rax, (%rcx,%r12,8)
movq 0x8(%r14), %rax
movq (%rax,%r12,8), %rax
xorl %ecx, %ecx
movb %cl, (%rax)
movq 0x8(%r14), %rax
movq (%rax,%r12,8), %rax
movb %cl, 0x1(%rax)
movq 0x8(%r14), %rax
movq (%rax,%r12,8), %rax
movb (%rax), %cl
shlb $0x5, %bl
andb $-0x21, %cl
orb %bl, %cl
movb %cl, (%rax)
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
leaq 0x2b85a(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0xf8f2
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_table.c
// Function: lv_table_set_cell_merge_right
void lv_table_set_cell_merge_right(lv_obj_t * table, uint16_t row, uint16_t col, bool en)
{
    LV_ASSERT_OBJ(table, LV_OBJX_NAME);

    lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
    if(row >= ext->row_cnt || col >= ext->col_cnt) {
        LV_LOG_WARN("lv_table_set_cell_merge_right: invalid row or column");
        return;
    }

    uint32_t cell = row * ext->col_cnt + col;

    if(ext->cell_data[cell] == NULL) {
        ext->cell_data[cell]    = lv_mem_alloc(2); /*+1: trailing '\0; +1: format byte*/
        ext->cell_data[cell][0] = 0;
        ext->cell_data[cell][1] = '\0';
    }

    lv_table_cell_format_t format;
    format.format_byte      = ext->cell_data[cell][0];
    format.s.right_merge    = en ? 1 : 0;
    ext->cell_data[cell][0] = format.format_byte;
    refr_size(table);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movl %ecx, %ebp
movl %edx, %r15d
movl %esi, %r12d
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0xf9aa
movq %rbx, %rdi
callq 0x6747
cmpw %r12w, 0x2(%rax)
jbe 0xf9bb
movq %rax, %r14
movzwl (%rax), %r13d
cmpw %r15w, %r13w
jbe 0xf9bb
movzwl %r12w, %eax
movzwl %r15w, %ecx
imulq %rax, %r13
addq %rcx, %r13
movq 0x8(%r14), %rax
movq (%rax,%r13,8), %rax
testq %rax, %rax
jne 0xf986
pushq $0x2
popq %rdi
callq 0x279f9
movq 0x8(%r14), %rcx
movq %rax, (%rcx,%r13,8)
movq 0x8(%r14), %rax
movq (%rax,%r13,8), %rax
xorl %ecx, %ecx
movb %cl, (%rax)
movq 0x8(%r14), %rax
movq (%rax,%r13,8), %rax
movb %cl, 0x1(%rax)
movq 0x8(%r14), %rax
movq (%rax,%r13,8), %rax
movb (%rax), %cl
shlb $0x2, %bpl
andb $-0x5, %cl
orb %bpl, %cl
movb %cl, (%rax)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0xf610
leaq 0x2b793(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xf9b9
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_table.c
// Function: lv_table_get_cell_value
const char * lv_table_get_cell_value(lv_obj_t * table, uint16_t row, uint16_t col)
{
    LV_ASSERT_OBJ(table, LV_OBJX_NAME);

    lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
    if(row >= ext->row_cnt || col >= ext->col_cnt) {
        LV_LOG_WARN("lv_table_set_cell_value: invalid row or column");
        return "";
    }
    uint32_t cell = row * ext->col_cnt + col;

    if(ext->cell_data[cell] == NULL) return "";

    return &ext->cell_data[cell][1]; /*Skip the format byte*/
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %edx, %ebx
movl %esi, %ebp
movq %rdi, %r14
callq 0x7994
testb %al, %al
je 0xfa2b
movq %r14, %rdi
callq 0x6747
leaq 0x2fa58(%rip), %rcx     # 0x3f445
cmpw %bp, 0x2(%rax)
jbe 0xfa23
movzwl (%rax), %edx
cmpw %bx, %dx
jbe 0xfa23
movzwl %bp, %ecx
imulq %rcx, %rdx
shlq $0x3, %rdx
addq 0x8(%rax), %rdx
movzwl %bx, %eax
movq (%rdx,%rax,8), %rax
leaq 0x1(%rax), %rdx
testq %rax, %rax
leaq 0x2fa26(%rip), %rcx     # 0x3f445
cmovneq %rdx, %rcx
movq %rcx, %rax
popq %rbx
popq %r14
popq %rbp
retq
leaq 0x2b712(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0xfa3a
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_table.c
// Function: lv_table_get_col_width
lv_coord_t lv_table_get_col_width(lv_obj_t * table, uint16_t col_id)
{
    LV_ASSERT_OBJ(table, LV_OBJX_NAME);

    if(col_id >= LV_TABLE_COL_MAX) {
        LV_LOG_WARN("lv_table_set_col_width: too big 'col_id'. Must be < LV_TABLE_COL_MAX.");
        return 0;
    }

    lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
    return ext->col_w[col_id];
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movl %esi, %ebx
movq %rdi, %r14
callq 0x7994
testb %al, %al
je 0xfaaf
cmpw $0xb, %bx
jbe 0xfac0
xorl %eax, %eax
jmp 0xfad0
leaq 0x2b68e(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0xfabe
movq %r14, %rdi
callq 0x6747
movzwl %bx, %ecx
movzwl 0x30(%rax,%rcx,2), %eax
addq $0x8, %rsp
popq %rbx
popq %r14
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_table.c
// Function: lv_table_get_cell_align
lv_label_align_t lv_table_get_cell_align(lv_obj_t * table, uint16_t row, uint16_t col)
{
    LV_ASSERT_OBJ(table, LV_OBJX_NAME);

    lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
    if(row >= ext->row_cnt || col >= ext->col_cnt) {
        LV_LOG_WARN("lv_table_set_cell_align: invalid row or column");
        return LV_LABEL_ALIGN_LEFT; /*Just return with something*/
    }
    uint32_t cell = row * ext->col_cnt + col;

    if(ext->cell_data[cell] == NULL)
        return LV_LABEL_ALIGN_LEFT; /*Just return with something*/
    else {
        lv_table_cell_format_t format;
        format.format_byte = ext->cell_data[cell][0];
        return format.s.align;
    }
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %edx, %ebx
movl %esi, %ebp
movq %rdi, %r14
callq 0x7994
testb %al, %al
je 0xfb23
movq %r14, %rdi
callq 0x6747
cmpw %bp, 0x2(%rax)
jbe 0xfb34
movzwl (%rax), %ecx
cmpw %bx, %cx
jbe 0xfb34
movzwl %bp, %edx
imulq %rdx, %rcx
shlq $0x3, %rcx
addq 0x8(%rax), %rcx
movzwl %bx, %eax
movq (%rcx,%rax,8), %rax
testq %rax, %rax
je 0xfb34
movb (%rax), %al
andb $0x3, %al
jmp 0xfb36
leaq 0x2b61a(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0xfb32
xorl %eax, %eax
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_table.c
// Function: lv_table_get_cell_type
lv_label_align_t lv_table_get_cell_type(lv_obj_t * table, uint16_t row, uint16_t col)
{
    LV_ASSERT_OBJ(table, LV_OBJX_NAME);

    lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
    if(row >= ext->row_cnt || col >= ext->col_cnt) {
        LV_LOG_WARN("lv_table_get_cell_type: invalid row or column");
        return 1; /*Just return with something*/
    }
    uint32_t cell = row * ext->col_cnt + col;

    if(ext->cell_data[cell] == NULL)
        return 1; /*Just return with something*/
    else {
        lv_table_cell_format_t format;
        format.format_byte = ext->cell_data[cell][0];
        return format.s.type + 1; /*0,1,2,3 is stored but user sees 1,2,3,4*/
    }
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %edx, %ebx
movl %esi, %ebp
movq %rdi, %r14
callq 0x7994
testb %al, %al
je 0xfb93
movq %r14, %rdi
callq 0x6747
movq %rax, %rcx
movb $0x1, %al
cmpw %bp, 0x2(%rcx)
jbe 0xfb8e
movzwl (%rcx), %edx
cmpw %bx, %dx
jbe 0xfb8e
movzwl %bp, %esi
imulq %rsi, %rdx
shlq $0x3, %rdx
addq 0x8(%rcx), %rdx
movzwl %bx, %ecx
movq (%rdx,%rcx,8), %rcx
testq %rcx, %rcx
je 0xfb8e
movb (%rcx), %al
shrb $0x3, %al
andb $0x3, %al
incb %al
popq %rbx
popq %r14
popq %rbp
retq
leaq 0x2b5aa(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0xfba2
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_table.c
// Function: lv_table_get_cell_crop
lv_label_align_t lv_table_get_cell_crop(lv_obj_t * table, uint16_t row, uint16_t col)
{
    LV_ASSERT_OBJ(table, LV_OBJX_NAME);

    lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
    if(row >= ext->row_cnt || col >= ext->col_cnt) {
        LV_LOG_WARN("lv_table_get_cell_crop: invalid row or column");
        return false; /*Just return with something*/
    }
    uint32_t cell = row * ext->col_cnt + col;

    if(ext->cell_data[cell] == NULL)
        return false; /*Just return with something*/
    else {
        lv_table_cell_format_t format;
        format.format_byte = ext->cell_data[cell][0];
        return format.s.crop;
    }
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %edx, %ebx
movl %esi, %ebp
movq %rdi, %r14
callq 0x7994
testb %al, %al
je 0xfbf2
movq %r14, %rdi
callq 0x6747
cmpw %bp, 0x2(%rax)
jbe 0xfc03
movzwl (%rax), %ecx
cmpw %bx, %cx
jbe 0xfc03
movzwl %bp, %edx
imulq %rdx, %rcx
shlq $0x3, %rcx
addq 0x8(%rax), %rcx
movzwl %bx, %eax
movq (%rcx,%rax,8), %rax
testq %rax, %rax
je 0xfc03
movb (%rax), %al
shrb $0x5, %al
andb $0x1, %al
jmp 0xfc05
leaq 0x2b54b(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0xfc01
xorl %eax, %eax
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_table.c
// Function: lv_table_get_cell_merge_right
bool lv_table_get_cell_merge_right(lv_obj_t * table, uint16_t row, uint16_t col)
{
    LV_ASSERT_OBJ(table, LV_OBJX_NAME);

    lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
    if(row >= ext->row_cnt || col >= ext->col_cnt) {
        LV_LOG_WARN("lv_table_get_cell_merge_right: invalid row or column");
        return false;
    }

    uint32_t cell = row * ext->col_cnt + col;

    if(ext->cell_data[cell] == NULL)
        return false;
    else {
        lv_table_cell_format_t format;
        format.format_byte = ext->cell_data[cell][0];
        return format.s.right_merge ? true : false;
    }
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %edx, %ebx
movl %esi, %ebp
movq %rdi, %r14
callq 0x7994
testb %al, %al
je 0xfc58
movq %r14, %rdi
callq 0x6747
cmpw %bp, 0x2(%rax)
jbe 0xfc69
movzwl (%rax), %ecx
cmpw %bx, %cx
jbe 0xfc69
movzwl %bp, %edx
imulq %rdx, %rcx
shlq $0x3, %rcx
addq 0x8(%rax), %rcx
movzwl %bx, %eax
movq (%rcx,%rax,8), %rax
testq %rax, %rax
je 0xfc69
movb (%rax), %al
andb $0x4, %al
shrb $0x2, %al
jmp 0xfc6b
leaq 0x2b4e5(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0xfc67
xorl %eax, %eax
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_table.c
// Function: lv_table_get_style
const lv_style_t * lv_table_get_style(const lv_obj_t * table, lv_table_style_t type)
{
    LV_ASSERT_OBJ(table, LV_OBJX_NAME);

    lv_table_ext_t * ext     = lv_obj_get_ext_attr(table);
    const lv_style_t * style = NULL;

    switch(type) {
        case LV_TABLE_STYLE_BG: style = lv_obj_get_style(table); break;
        case LV_TABLE_STYLE_CELL1: style = ext->cell_style[0]; break;
        case LV_TABLE_STYLE_CELL2: style = ext->cell_style[1]; break;
        case LV_TABLE_STYLE_CELL3: style = ext->cell_style[2]; break;
        case LV_TABLE_STYLE_CELL4: style = ext->cell_style[3]; break;
        default: return NULL;
    }

    return style;
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0xfcb1
movq %rbx, %rdi
callq 0x6747
cmpb $0x4, %bpl
ja 0xfcda
movzbl %bpl, %ecx
leaq 0x2b8da(%rip), %rdx     # 0x3b574
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x6316
leaq 0x2b48c(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0xfcc0
movq 0x28(%rax), %rax
jmp 0xfcdc
movq 0x18(%rax), %rax
jmp 0xfcdc
movq 0x20(%rax), %rax
jmp 0xfcdc
movq 0x10(%rax), %rax
jmp 0xfcdc
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_tabview.c
// Function: tab_btnm_event_cb
static void tab_btnm_event_cb(lv_obj_t * tab_btnm, lv_event_t event)
{
    if(event != LV_EVENT_CLICKED) return;

    uint16_t btn_id = lv_btnm_get_active_btn(tab_btnm);
    if(btn_id == LV_BTNM_BTN_NONE) return;

    lv_btnm_clear_btn_ctrl_all(tab_btnm, LV_BTNM_CTRL_TGL_STATE);
    lv_btnm_set_btn_ctrl(tab_btnm, btn_id, LV_BTNM_CTRL_TGL_STATE);

    lv_obj_t * tabview = lv_obj_get_parent(tab_btnm);

    uint32_t id_prev = lv_tabview_get_tab_act(tabview);
    lv_tabview_set_tab_act(tabview, btn_id, LV_ANIM_ON);
    uint32_t id_new = lv_tabview_get_tab_act(tabview);

    lv_res_t res = LV_RES_OK;
    if(id_prev != id_new) res = lv_event_send(tabview, LV_EVENT_VALUE_CHANGED, &id_new);

    if(res != LV_RES_OK) return;
}

// Assembly:
cmpl $0x6, %esi
jne 0x104be
pushq %rbp
pushq %r14
pushq %rbx
subq $0x10, %rsp
movq %rdi, %rbx
callq 0x207b0
cmpw $-0x1, %ax
je 0x104b6
movl %eax, %ebp
movq %rbx, %rdi
movl $0x80, %esi
callq 0x2063a
movzwl %bp, %ebp
movq %rbx, %rdi
movl %ebp, %esi
movl $0x80, %edx
callq 0x204cc
movq %rbx, %rdi
callq 0x47bc
movq %rax, %rbx
movq %rax, %rdi
callq 0x11381
movl %eax, %r14d
pushq $0x1
popq %rdx
movq %rbx, %rdi
movl %ebp, %esi
callq 0x10f12
movq %rbx, %rdi
callq 0x11381
movzwl %ax, %eax
movl %eax, 0xc(%rsp)
cmpw %ax, %r14w
je 0x104b6
pushq $0xe
popq %rsi
leaq 0xc(%rsp), %rdx
movq %rbx, %rdi
callq 0x4caf
addq $0x10, %rsp
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_tabview.c
// Function: lv_tabview_set_style
void lv_tabview_set_style(lv_obj_t * tabview, lv_tabview_style_t type, const lv_style_t * style)
{
    LV_ASSERT_OBJ(tabview, LV_OBJX_NAME);

    lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);

    switch(type) {
        case LV_TABVIEW_STYLE_BG: lv_obj_set_style(tabview, style); break;
        case LV_TABVIEW_STYLE_BTN_BG:
            lv_btnm_set_style(ext->btns, LV_BTNM_STYLE_BG, style);
            tabview_realign(tabview);
            break;
        case LV_TABVIEW_STYLE_BTN_REL:
            lv_btnm_set_style(ext->btns, LV_BTNM_STYLE_BTN_REL, style);
            tabview_realign(tabview);
            break;
        case LV_TABVIEW_STYLE_BTN_PR: lv_btnm_set_style(ext->btns, LV_BTNM_STYLE_BTN_PR, style); break;
        case LV_TABVIEW_STYLE_BTN_TGL_REL: lv_btnm_set_style(ext->btns, LV_BTNM_STYLE_BTN_TGL_REL, style); break;
        case LV_TABVIEW_STYLE_BTN_TGL_PR: lv_btnm_set_style(ext->btns, LV_BTNM_STYLE_BTN_TGL_PR, style); break;
        case LV_TABVIEW_STYLE_INDIC:
            lv_obj_set_style(ext->indic, style);

            switch(ext->btns_pos) {
                case LV_TABVIEW_BTNS_POS_TOP:
                case LV_TABVIEW_BTNS_POS_BOTTOM: lv_obj_set_height(ext->indic, style->body.padding.inner); break;
                case LV_TABVIEW_BTNS_POS_LEFT:
                case LV_TABVIEW_BTNS_POS_RIGHT: lv_obj_set_width(ext->indic, style->body.padding.inner); break;
            }

            tabview_realign(tabview);
            break;
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdx, %r14
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x10520
movq %rbx, %rdi
callq 0x6747
cmpb $0x6, %bpl
ja 0x1055f
movq %rax, %r15
movzbl %bpl, %eax
leaq 0x2b092(%rip), %rcx     # 0x3b594
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %rbx, %rdi
movq %r14, %rsi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x5a3d
leaq 0x2ac1d(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1052f
movq (%r15), %rdi
pushq $0x2
jmp 0x1059c
movq (%r15), %rdi
xorl %esi, %esi
jmp 0x10545
movq (%r15), %rdi
pushq $0x1
popq %rsi
movq %r14, %rdx
callq 0x202b9
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x10ae4
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
movq 0x8(%r15), %rdi
movq %r14, %rsi
callq 0x5a3d
testb $0x40, 0x2a(%r15)
movq 0x8(%r15), %rdi
movzwl 0x1e(%r14), %eax
movswl %ax, %esi
jne 0x105af
callq 0x53e6
jmp 0x1054d
movq (%r15), %rdi
pushq $0x3
jmp 0x1059c
movq (%r15), %rdi
pushq $0x4
popq %rsi
movq %r14, %rdx
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x202b9
callq 0x53a8
jmp 0x1054d
// File: /workspace/github_c_makefile_star2_O2/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 %r14
pushq %rbx
movl %esi, %ebx
movq %rdi, %r14
callq 0x7994
testb %al, %al
je 0x10940
movq %r14, %rdi
callq 0x6747
movq %rax, %r14
movq 0x10(%rax), %rdi
xorl %esi, %esi
callq 0x61b6
movl %ebx, %ebp
addw $-0x1, %bp
setb %cl
testq %rax, %rax
je 0x10951
testb %cl, %cl
je 0x10951
movq 0x10(%r14), %rdi
movq %rax, %rsi
callq 0x61b6
movl %ebp, %ebx
jmp 0x10920
leaq 0x2a7fd(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x1094f
xorl %ecx, %ecx
testw %bx, %bx
cmoveq %rax, %rcx
movq %rcx, %rax
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/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, %r14d
movq %rdi, %rbx
callq *0x4d991(%rip)          # 0x5e338
movl %eax, %ebp
cmpb $0x1, %al
jne 0x10a29
cmpb $0x7, %r14b
jne 0x109cc
leaq 0x2ea8b(%rip), %rsi     # 0x3f445
movq %r15, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x684b
movq %rbx, %rdi
callq 0x47bc
movq %rax, %rdi
callq 0x47bc
movq %rax, %r15
movq %rax, %rdi
callq 0x113d9
movb $0x1, %bpl
testb %al, %al
je 0x10a29
cmpb $0x9, %r14b
je 0x10a07
movzbl %r14b, %eax
cmpl $0x8, %eax
jne 0x10a14
movq %r15, %rdi
callq 0x11466
jmp 0x10a29
movq %r15, %rdi
movq %rbx, %rsi
callq 0x11484
jmp 0x10a29
andb $-0x2, %r14b
cmpb $0xa, %r14b
jne 0x10a29
movq %r15, %rdi
movq %rbx, %rsi
callq 0x11647
movl %ebp, %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_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, %ebx
movq %rdi, %r15
callq *0x4d8f5(%rip)          # 0x5e340
movl %eax, %ebp
cmpb $0x1, %al
jne 0x10ad7
cmpb $0x7, %bl
jne 0x10a73
leaq 0x2e9e4(%rip), %rsi     # 0x3f445
movq %r14, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x684b
movq %r15, %rdi
callq 0x47bc
movq %rax, %r14
movq %rax, %rdi
callq 0x47bc
movq %rax, %rdi
callq 0x47bc
movq %rax, %r15
movq %rax, %rdi
callq 0x113d9
movb $0x1, %bpl
testb %al, %al
je 0x10ad7
cmpb $0x9, %bl
je 0x10ab7
movzbl %bl, %eax
cmpl $0x8, %eax
jne 0x10ac4
movq %r15, %rdi
callq 0x11466
jmp 0x10ad7
movq %r15, %rdi
movq %r14, %rsi
callq 0x11484
jmp 0x10ad7
andb $-0x2, %bl
cmpb $0xa, %bl
jne 0x10ad7
movq %r15, %rdi
movq %r14, %rsi
callq 0x11647
movl %ebp, %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_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 0x7994
testb %al, %al
je 0x111df
movq %rbx, %rdi
callq 0x6747
movzwl 0x28(%rax), %eax
popq %rbx
retq
leaq 0x29f5e(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x111ee
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0x11231
movq %rbx, %rdi
callq 0x6747
cmpb $0x6, %bpl
ja 0x11250
movzbl %bpl, %ecx
leaq 0x2a3a6(%rip), %rdx     # 0x3b5c0
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x6316
leaq 0x29f0c(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x11240
movq (%rax), %rdi
pushq $0x1
jmp 0x1126c
movq (%rax), %rdi
pushq $0x4
jmp 0x1126c
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
movq (%rax), %rdi
xorl %esi, %esi
jmp 0x1126d
movq (%rax), %rdi
pushq $0x2
jmp 0x1126c
movq (%rax), %rdi
pushq $0x3
popq %rsi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x20368
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0x112dc
movq %r14, %rdi
callq 0x6747
movw %bx, 0x28(%rax)
addq $0x8, %rsp
popq %rbx
popq %r14
retq
leaq 0x29e61(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x112eb
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0x11328
movq %rbx, %rdi
callq 0x6747
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 0x10ae4
leaq 0x29e15(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x11337
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0x11370
movq %rbx, %rdi
callq 0x6747
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 0x10ae4
leaq 0x29dcd(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1137f
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0x12035
movq %rbx, %rdi
callq 0x7994
testb %al, %al
je 0x12046
orb $-0x80, 0x58(%r14)
pushq $0x1
popq %rsi
movq %r14, %rdi
callq 0x5dc7
movq %rbx, %rdi
callq 0x6747
movswl 0x5c(%rax), %esi
movswl 0x5e(%rax), %edx
movq %rbx, %rdi
xorl %ecx, %ecx
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x12057
leaq 0x29108(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x12044
leaq 0x290f7(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x12055
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0x12230
movq %r14, %rdi
callq 0x7994
testb %al, %al
je 0x12241
movq %rbx, %rdi
callq 0x6747
movq %r14, 0x50(%rax)
movw %bp, 0x58(%rax)
movzwl %bp, %ecx
xorl %edx, %edx
cmpq %rdx, %rcx
je 0x12252
movzwl (%r14,%rdx,4), %esi
cmpw 0x5c(%rax), %si
jne 0x1222b
movzwl 0x2(%r14,%rdx,4), %esi
cmpw 0x5e(%rax), %si
je 0x1226e
incq %rdx
jmp 0x1220f
leaq 0x28f0d(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1223f
leaq 0x28efc(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x12250
testw %bp, %bp
je 0x1226e
movswl (%r14), %esi
movswl 0x2(%r14), %edx
movq %rbx, %rdi
xorl %ecx, %ecx
popq %rbx
popq %r14
popq %rbp
jmp 0x12057
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0x122d1
testb %bpl, %bpl
je 0x122e2
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
leaq 0x28e6c(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x122e0
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_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 0x7994
testb %al, %al
je 0x1273c
movq %rbx, %rdi
callq 0x6747
cmpb $0x4, %bpl
ja 0x12724
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 0x5a3d
leaq 0x28a01(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1274b
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0x127bb
movq %rbx, %rdi
callq 0x6747
movb 0x30(%rax), %cl
movl %ecx, %edx
andb $0x7, %dl
cmpb %bpl, %dl
jne 0x127cc
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
leaq 0x28982(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x127ca
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 0x5a3d
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0x12827
movq %rbx, %rdi
callq 0x6747
movzbl 0x30(%rax), %ecx
andl $0x7, %ecx
cmpb $0x3, %cl
ja 0x12838
shll $0x3, %ecx
movl $0x1000302, %eax        # imm = 0x1000302
shrl %cl, %eax
movzbl %al, %esi
movq %rbx, %rdi
popq %rbx
jmp 0x1278e
leaq 0x28916(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x12836
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0x129cb
movq %r14, %rdi
callq 0x6747
movq %rax, %r15
movq %r14, %rdi
callq 0x1289a
movl %ebx, %ecx
orb %al, %cl
je 0x129be
movl %ebx, %ecx
xorb $0x1, %cl
movl %eax, %edx
xorb $0x1, %dl
orb %cl, %dl
je 0x129be
movl %ebx, %ecx
xorb $0x2, %cl
movl %eax, %edx
xorb $0x2, %dl
orb %cl, %dl
je 0x129be
movl %ebx, %ecx
xorb $0x3, %cl
movl %eax, %edx
xorb $0x3, %dl
orb %cl, %dl
je 0x129be
movl %ebx, %ecx
xorb $0x4, %cl
xorb $0x4, %al
orb %cl, %al
jne 0x129dc
movq %r14, %rdi
popq %rbx
popq %r14
popq %r15
jmp 0x6316
leaq 0x28772(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x129da
cmpb $0x4, %bl
ja 0x12a12
movzbl %bl, %eax
leaq 0x28c35(%rip), %rcx     # 0x3b620
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x8(%r15), %rax
jmp 0x12a14
movq 0x28(%r15), %rax
jmp 0x12a14
movq 0x18(%r15), %rax
jmp 0x12a14
movq 0x20(%r15), %rax
jmp 0x12a14
movq 0x10(%r15), %rax
jmp 0x12a14
xorl %eax, %eax
popq %rbx
popq %r14
popq %r15
retq
nop
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0x13a2e
movq %rbx, %rdi
callq 0x6747
cmpb $0x7, %bpl
ja 0x13a67
movzbl %bpl, %ecx
leaq 0x27c54(%rip), %rdx     # 0x3b66c
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x5a3d
jmp 0x13a67
leaq 0x2770f(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x13a3d
movq %r14, 0x40(%rax)
jmp 0x13a67
movq %r14, 0x30(%rax)
jmp 0x13a67
movq %r14, 0x38(%rax)
jmp 0x13a67
movq %r14, 0x58(%rax)
jmp 0x13a67
movq %r14, 0x28(%rax)
jmp 0x13a67
movq %r14, 0x48(%rax)
jmp 0x13a67
movq %r14, 0x50(%rax)
movq %rbx, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0x493a
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0x13abe
movq %r14, %rdi
callq 0x7994
testb %al, %al
je 0x13acf
movq %rbx, %rdi
callq 0x6747
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 0x493a
leaq 0x2767f(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x13acd
leaq 0x2766e(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x13ade
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0x13b2c
movq %r14, %rdi
callq 0x7994
testb %al, %al
je 0x13b3d
movq %rbx, %rdi
callq 0x6747
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 0x493a
leaq 0x27611(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x13b3b
leaq 0x27600(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x13b4c
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0x13b8b
movq %r14, %rdi
callq 0x7994
testb %al, %al
je 0x13b9c
movq %rbx, %rdi
callq 0x6747
movq %r14, 0x8(%rax)
movw %bp, 0x12(%rax)
movq %rbx, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0x493a
leaq 0x275b2(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x13b9a
leaq 0x275a1(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x13bab
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0x13be7
movq %r14, %rdi
callq 0x7994
testb %al, %al
je 0x13bf8
movq %rbx, %rdi
callq 0x6747
movq %r14, 0x18(%rax)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x493a
leaq 0x27556(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x13bf6
leaq 0x27545(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x13c07