LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_c_makefile_star2_O1/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 %rbx
pushq %rax
movl %ecx, %ebx
movl %edx, %ebp
movl %esi, %r15d
movq %rdi, %r14
callq 0x80d4
testb %al, %al
je 0x103ca
movq %r14, %rdi
callq 0x6ad8
cmpw %r15w, 0x2(%rax)
jbe 0x103bf
movq %rax, %r14
movzwl (%rax), %eax
cmpw %bp, %ax
jbe 0x103bf
movzwl %r15w, %ecx
imull %ecx, %eax
movzwl %bp, %r15d
addl %eax, %r15d
movq 0x8(%r14), %rax
cmpq $0x0, (%rax,%r15,8)
jne 0x103ab
movl $0x2, %edi
callq 0x298d9
movq 0x8(%r14), %rcx
movq %rax, (%rcx,%r15,8)
movq 0x8(%r14), %rax
movq (%rax,%r15,8), %rax
xorl %ecx, %ecx
movb %cl, (%rax)
movq 0x8(%r14), %rax
movq (%rax,%r15,8), %rax
movb %cl, 0x1(%rax)
movq 0x8(%r14), %rax
movq (%rax,%r15,8), %rax
movb (%rax), %cl
andb $0x3, %bl
andb $-0x4, %cl
orb %bl, %cl
movb %cl, (%rax)
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
leaq 0x2ed63(%rip), %rdi     # 0x3f134
movq %r14, %rsi
callq 0x829e
jmp 0x103d9
// File: /workspace/github_c_makefile_star2_O1/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 %rbx
pushq %rax
movl %ecx, %ebx
movl %edx, %ebp
movl %esi, %r15d
movq %rdi, %r14
callq 0x80d4
testb %al, %al
je 0x1048a
movq %r14, %rdi
callq 0x6ad8
cmpw %r15w, 0x2(%rax)
jbe 0x1047f
movq %rax, %r14
movzwl (%rax), %eax
cmpw %bp, %ax
jbe 0x1047f
movzwl %r15w, %ecx
imull %ecx, %eax
movzwl %bp, %r15d
addl %eax, %r15d
movq 0x8(%r14), %rax
cmpq $0x0, (%rax,%r15,8)
jne 0x10455
movl $0x2, %edi
callq 0x298d9
movq 0x8(%r14), %rcx
movq %rax, (%rcx,%r15,8)
movq 0x8(%r14), %rax
movq (%rax,%r15,8), %rax
xorl %ecx, %ecx
movb %cl, (%rax)
movq 0x8(%r14), %rax
movq (%rax,%r15,8), %rax
movb %cl, 0x1(%rax)
xorl %eax, %eax
subb $0x1, %bl
movzbl %bl, %ecx
cmovbl %eax, %ecx
cmpb $0x3, %cl
movl $0x3, %eax
cmovbl %ecx, %eax
movq 0x8(%r14), %rcx
movq (%rcx,%r15,8), %rcx
movb (%rcx), %dl
shlb $0x3, %al
andb $-0x19, %dl
orb %al, %dl
movb %dl, (%rcx)
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
leaq 0x2eca3(%rip), %rdi     # 0x3f134
movq %r14, %rsi
callq 0x829e
jmp 0x10499
// File: /workspace/github_c_makefile_star2_O1/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 %rbx
pushq %rax
movl %ecx, %ebx
movl %edx, %ebp
movl %esi, %r15d
movq %rdi, %r14
callq 0x80d4
testb %al, %al
je 0x10530
movq %r14, %rdi
callq 0x6ad8
cmpw %r15w, 0x2(%rax)
jbe 0x10525
movq %rax, %r14
movzwl (%rax), %eax
cmpw %bp, %ax
jbe 0x10525
movzwl %r15w, %ecx
imull %ecx, %eax
movzwl %bp, %r15d
addl %eax, %r15d
movq 0x8(%r14), %rax
cmpq $0x0, (%rax,%r15,8)
jne 0x10511
movl $0x2, %edi
callq 0x298d9
movq 0x8(%r14), %rcx
movq %rax, (%rcx,%r15,8)
movq 0x8(%r14), %rax
movq (%rax,%r15,8), %rax
xorl %ecx, %ecx
movb %cl, (%rax)
movq 0x8(%r14), %rax
movq (%rax,%r15,8), %rax
movb %cl, 0x1(%rax)
movq 0x8(%r14), %rax
movq (%rax,%r15,8), %rax
movb (%rax), %cl
shlb $0x5, %bl
andb $-0x21, %cl
orb %bl, %cl
movb %cl, (%rax)
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
leaq 0x2ebfd(%rip), %rdi     # 0x3f134
movq %r14, %rsi
callq 0x829e
jmp 0x1053f
// File: /workspace/github_c_makefile_star2_O1/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 %r12
pushq %rbx
movl %ecx, %ebp
movl %edx, %r15d
movl %esi, %r12d
movq %rdi, %rbx
callq 0x80d4
testb %al, %al
je 0x105e8
movq %rbx, %rdi
callq 0x6ad8
cmpw %r12w, 0x2(%rax)
jbe 0x105f9
movq %rax, %r14
movzwl (%rax), %eax
cmpw %r15w, %ax
jbe 0x105f9
movzwl %r12w, %ecx
imull %ecx, %eax
movzwl %r15w, %r15d
addl %eax, %r15d
movq 0x8(%r14), %rax
cmpq $0x0, (%rax,%r15,8)
jne 0x105c2
movl $0x2, %edi
callq 0x298d9
movq 0x8(%r14), %rcx
movq %rax, (%rcx,%r15,8)
movq 0x8(%r14), %rax
movq (%rax,%r15,8), %rax
xorl %ecx, %ecx
movb %cl, (%rax)
movq 0x8(%r14), %rax
movq (%rax,%r15,8), %rax
movb %cl, 0x1(%rax)
movq 0x8(%r14), %rax
movq (%rax,%r15,8), %rax
movb (%rax), %cl
shlb $0x2, %bpl
andb $-0x5, %cl
orb %bpl, %cl
movb %cl, (%rax)
movq %rbx, %rdi
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x1024c
leaq 0x2eb45(%rip), %rdi     # 0x3f134
movq %rbx, %rsi
callq 0x829e
jmp 0x105f7
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O1/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_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 0x80d4
testb %al, %al
je 0x10660
movq %r14, %rdi
callq 0x6ad8
leaq 0x32da8(%rip), %rcx     # 0x433cd
cmpw %bp, 0x2(%rax)
jbe 0x10658
movzwl (%rax), %edx
cmpw %bx, %dx
jbe 0x10658
movzwl %bp, %ecx
imull %ecx, %edx
movzwl %bx, %ecx
addl %edx, %ecx
movq 0x8(%rax), %rax
movq (%rax,%rcx,8), %rax
leaq 0x1(%rax), %rdx
testq %rax, %rax
leaq 0x32d79(%rip), %rcx     # 0x433cd
cmovneq %rdx, %rcx
movq %rcx, %rax
popq %rbx
popq %r14
popq %rbp
retq
leaq 0x2eacd(%rip), %rdi     # 0x3f134
movq %r14, %rsi
callq 0x829e
jmp 0x1066f
// File: /workspace/github_c_makefile_star2_O1/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 0x80d4
testb %al, %al
je 0x106e4
cmpw $0xb, %bx
jbe 0x106f5
xorl %eax, %eax
jmp 0x10705
leaq 0x2ea49(%rip), %rdi     # 0x3f134
movq %r14, %rsi
callq 0x829e
jmp 0x106f3
movq %r14, %rdi
callq 0x6ad8
movzwl %bx, %ecx
movzwl 0x30(%rax,%rcx,2), %eax
addq $0x8, %rsp
popq %rbx
popq %r14
retq
// File: /workspace/github_c_makefile_star2_O1/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 0x80d4
testb %al, %al
je 0x10755
movq %r14, %rdi
callq 0x6ad8
cmpw %bp, 0x2(%rax)
jbe 0x10766
movzwl (%rax), %ecx
cmpw %bx, %cx
jbe 0x10766
movzwl %bp, %edx
imull %edx, %ecx
movzwl %bx, %edx
addl %ecx, %edx
movq 0x8(%rax), %rax
movq (%rax,%rdx,8), %rax
testq %rax, %rax
je 0x10766
movb (%rax), %al
andb $0x3, %al
jmp 0x10768
leaq 0x2e9d8(%rip), %rdi     # 0x3f134
movq %r14, %rsi
callq 0x829e
jmp 0x10764
xorl %eax, %eax
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O1/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 0x80d4
testb %al, %al
je 0x107c2
movq %r14, %rdi
callq 0x6ad8
movq %rax, %rcx
movb $0x1, %al
cmpw %bp, 0x2(%rcx)
jbe 0x107bd
movzwl (%rcx), %edx
cmpw %bx, %dx
jbe 0x107bd
movzwl %bp, %esi
imull %esi, %edx
movzwl %bx, %esi
addl %edx, %esi
movq 0x8(%rcx), %rcx
movq (%rcx,%rsi,8), %rcx
testq %rcx, %rcx
je 0x107bd
movb (%rcx), %al
shrb $0x3, %al
andb $0x3, %al
incb %al
popq %rbx
popq %r14
popq %rbp
retq
leaq 0x2e96b(%rip), %rdi     # 0x3f134
movq %r14, %rsi
callq 0x829e
jmp 0x107d1
// File: /workspace/github_c_makefile_star2_O1/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 0x80d4
testb %al, %al
je 0x1081e
movq %r14, %rdi
callq 0x6ad8
cmpw %bp, 0x2(%rax)
jbe 0x1082f
movzwl (%rax), %ecx
cmpw %bx, %cx
jbe 0x1082f
movzwl %bp, %edx
imull %edx, %ecx
movzwl %bx, %edx
addl %ecx, %edx
movq 0x8(%rax), %rax
movq (%rax,%rdx,8), %rax
testq %rax, %rax
je 0x1082f
movb (%rax), %al
shrb $0x5, %al
andb $0x1, %al
jmp 0x10831
leaq 0x2e90f(%rip), %rdi     # 0x3f134
movq %r14, %rsi
callq 0x829e
jmp 0x1082d
xorl %eax, %eax
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O1/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 0x80d4
testb %al, %al
je 0x10881
movq %r14, %rdi
callq 0x6ad8
cmpw %bp, 0x2(%rax)
jbe 0x10892
movzwl (%rax), %ecx
cmpw %bx, %cx
jbe 0x10892
movzwl %bp, %edx
imull %edx, %ecx
movzwl %bx, %edx
addl %ecx, %edx
movq 0x8(%rax), %rax
movq (%rax,%rdx,8), %rax
testq %rax, %rax
je 0x10892
movb (%rax), %al
andb $0x4, %al
shrb $0x2, %al
jmp 0x10894
leaq 0x2e8ac(%rip), %rdi     # 0x3f134
movq %r14, %rsi
callq 0x829e
jmp 0x10890
xorl %eax, %eax
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O1/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 0x80d4
testb %al, %al
je 0x108da
movq %rbx, %rdi
callq 0x6ad8
cmpb $0x4, %bpl
ja 0x10903
movzbl %bpl, %ecx
leaq 0x2ec75(%rip), %rdx     # 0x3f538
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x6697
leaq 0x2e853(%rip), %rdi     # 0x3f134
movq %rbx, %rsi
callq 0x829e
jmp 0x108e9
movq 0x28(%rax), %rax
jmp 0x10905
movq 0x18(%rax), %rax
jmp 0x10905
movq 0x20(%rax), %rax
jmp 0x10905
movq 0x10(%rax), %rax
jmp 0x10905
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O1/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_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 0x1114b
pushq %rbp
pushq %r14
pushq %rbx
subq $0x10, %rsp
movq %rdi, %rbx
callq 0x22131
cmpw $-0x1, %ax
je 0x11143
movl %eax, %ebp
movq %rbx, %rdi
movl $0x80, %esi
callq 0x21fb3
movzwl %bp, %ebp
movq %rbx, %rdi
movl %ebp, %esi
movl $0x80, %edx
callq 0x21e33
movq %rbx, %rdi
callq 0x4abf
movq %rax, %rbx
movq %rax, %rdi
callq 0x120df
movl %eax, %r14d
movq %rbx, %rdi
movl %ebp, %esi
movl $0x1, %edx
callq 0x11c4a
movq %rbx, %rdi
callq 0x120df
movzwl %ax, %eax
movl %eax, 0xc(%rsp)
cmpw %ax, %r14w
je 0x11143
leaq 0xc(%rsp), %rdx
movq %rbx, %rdi
movl $0xe, %esi
callq 0x4fea
addq $0x10, %rsp
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O1/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 0x80d4
testb %al, %al
je 0x1119e
movq %rbx, %rdi
callq 0x6ad8
cmpb $0x6, %bpl
ja 0x111e2
movq %rax, %r15
movzbl %bpl, %eax
leaq 0x2e3d8(%rip), %rcx     # 0x3f558
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 0x5d83
leaq 0x2df8f(%rip), %rdi     # 0x3f134
movq %rbx, %rsi
callq 0x829e
jmp 0x111ad
movq (%r15), %rdi
movl $0x2, %esi
jmp 0x11225
movq (%r15), %rdi
xorl %esi, %esi
jmp 0x111c8
movq (%r15), %rdi
movl $0x1, %esi
movq %r14, %rdx
callq 0x21c20
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x117cf
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
movq 0x8(%r15), %rdi
movq %r14, %rsi
callq 0x5d83
testb $0x40, 0x2a(%r15)
movq 0x8(%r15), %rdi
movzwl 0x1e(%r14), %eax
movswl %ax, %esi
jne 0x11237
callq 0x572f
jmp 0x111d0
movq (%r15), %rdi
movl $0x3, %esi
jmp 0x11225
movq (%r15), %rdi
movl $0x4, %esi
movq %r14, %rdx
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x21c20
callq 0x56f1
jmp 0x111d0
// File: /workspace/github_c_makefile_star2_O1/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_tabview.c
// Function: lv_tabview_get_tab
lv_obj_t * lv_tabview_get_tab(const lv_obj_t * tabview, uint16_t id)
{
    LV_ASSERT_OBJ(tabview, LV_OBJX_NAME);

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

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

    if(i == id) return page;

    return NULL;
}

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

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

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

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

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

    return res;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdx, %r15
movl %esi, %ebp
movq %rdi, %r14
callq *0x4ecd7(%rip)          # 0x60338
movl %eax, %ebx
cmpb $0x1, %al
jne 0x116fb
cmpb $0x7, %bpl
jne 0x1168a
leaq 0x31d55(%rip), %rsi     # 0x433cd
movq %r15, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x6bf5
movq %r14, %rdi
callq 0x4abf
movq %rax, %rdi
callq 0x4abf
movq %rax, %r15
movq %rax, %rdi
callq 0x12137
testb %al, %al
je 0x116fb
cmpb $0x9, %bpl
je 0x116d9
movzbl %bpl, %eax
cmpl $0x8, %eax
jne 0x116e6
movq %r15, %rdi
callq 0x6ad8
movq %rax, %r14
callq 0x3784
addq $0x20, %r14
movq %rax, %rdi
movq %r14, %rsi
callq 0x3832
jmp 0x116fb
movq %r15, %rdi
movq %r14, %rsi
callq 0x121c4
jmp 0x116fb
andb $-0x2, %bpl
cmpb $0xa, %bpl
jne 0x116fb
movq %r15, %rdi
movq %r14, %rsi
callq 0x123a1
movl %ebx, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O1/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_tabview.c
// Function: tabpage_scrl_signal
static lv_res_t tabpage_scrl_signal(lv_obj_t * tab_scrl, lv_signal_t sign, void * param)
{
    lv_res_t res;

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

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

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

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

    return res;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdx, %r14
movl %esi, %ebp
movq %rdi, %r15
callq *0x4ec23(%rip)          # 0x60340
movl %eax, %ebx
cmpb $0x1, %al
jne 0x117c2
cmpb $0x7, %bpl
jne 0x11746
leaq 0x31c99(%rip), %rsi     # 0x433cd
movq %r14, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x6bf5
movq %r15, %rdi
callq 0x4abf
movq %rax, %r14
movq %rax, %rdi
callq 0x4abf
movq %rax, %rdi
callq 0x4abf
movq %rax, %r15
movq %rax, %rdi
callq 0x12137
testb %al, %al
je 0x117c2
cmpb $0x9, %bpl
je 0x117a0
movzbl %bpl, %eax
cmpl $0x8, %eax
jne 0x117ad
movq %r15, %rdi
callq 0x6ad8
movq %rax, %r14
callq 0x3784
addq $0x20, %r14
movq %rax, %rdi
movq %r14, %rsi
callq 0x3832
jmp 0x117c2
movq %r15, %rdi
movq %r14, %rsi
callq 0x121c4
jmp 0x117c2
andb $-0x2, %bpl
cmpb $0xa, %bpl
jne 0x117c2
movq %r15, %rdi
movq %r14, %rsi
callq 0x123a1
movl %ebx, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O1/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 0x80d4
testb %al, %al
je 0x11f32
movq %rbx, %rdi
callq 0x6ad8
movzwl 0x28(%rax), %eax
popq %rbx
retq
leaq 0x2d1fb(%rip), %rdi     # 0x3f134
movq %rbx, %rsi
callq 0x829e
jmp 0x11f41
// File: /workspace/github_c_makefile_star2_O1/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 0x80d4
testb %al, %al
je 0x11f84
movq %rbx, %rdi
callq 0x6ad8
cmpb $0x6, %bpl
ja 0x11fa9
movzbl %bpl, %ecx
leaq 0x2d617(%rip), %rdx     # 0x3f584
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x6697
leaq 0x2d1a9(%rip), %rdi     # 0x3f134
movq %rbx, %rsi
callq 0x829e
jmp 0x11f93
movq (%rax), %rdi
movl $0x1, %esi
jmp 0x11fcb
movq (%rax), %rdi
movl $0x4, %esi
jmp 0x11fcb
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
movq (%rax), %rdi
xorl %esi, %esi
jmp 0x11fcb
movq (%rax), %rdi
movl $0x2, %esi
jmp 0x11fcb
movq (%rax), %rdi
movl $0x3, %esi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x21ccf
// File: /workspace/github_c_makefile_star2_O1/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 0x80d4
testb %al, %al
je 0x1203a
movq %r14, %rdi
callq 0x6ad8
movw %bx, 0x28(%rax)
addq $0x8, %rsp
popq %rbx
popq %r14
retq
leaq 0x2d0f3(%rip), %rdi     # 0x3f134
movq %r14, %rsi
callq 0x829e
jmp 0x12049
// File: /workspace/github_c_makefile_star2_O1/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 0x80d4
testb %al, %al
je 0x12086
movq %rbx, %rdi
callq 0x6ad8
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 0x117cf
leaq 0x2d0a7(%rip), %rdi     # 0x3f134
movq %rbx, %rsi
callq 0x829e
jmp 0x12095
// File: /workspace/github_c_makefile_star2_O1/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 0x80d4
testb %al, %al
je 0x120ce
movq %rbx, %rdi
callq 0x6ad8
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 0x117cf
leaq 0x2d05f(%rip), %rdi     # 0x3f134
movq %rbx, %rsi
callq 0x829e
jmp 0x120dd
// File: /workspace/github_c_makefile_star2_O1/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 0x80d4
testb %al, %al
je 0x12df8
movq %rbx, %rdi
callq 0x80d4
testb %al, %al
je 0x12e09
orb $-0x80, 0x58(%r14)
movq %r14, %rdi
movl $0x1, %esi
callq 0x6134
movq %rbx, %rdi
callq 0x6ad8
movswl 0x5c(%rax), %esi
movswl 0x5e(%rax), %edx
movq %rbx, %rdi
xorl %ecx, %ecx
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x12e1a
leaq 0x2c335(%rip), %rdi     # 0x3f134
movq %rbx, %rsi
callq 0x829e
jmp 0x12e07
leaq 0x2c324(%rip), %rdi     # 0x3f134
movq %rbx, %rsi
callq 0x829e
jmp 0x12e18
// File: /workspace/github_c_makefile_star2_O1/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 0x80d4
testb %al, %al
je 0x13030
movq %r14, %rdi
callq 0x80d4
testb %al, %al
je 0x13041
movq %rbx, %rdi
callq 0x6ad8
movq %r14, 0x50(%rax)
movw %bp, 0x58(%rax)
testw %bp, %bp
je 0x13052
movzwl 0x5c(%rax), %ecx
movzwl %bp, %edx
xorl %esi, %esi
cmpw %cx, (%r14,%rsi,4)
jne 0x13011
movzwl 0x2(%r14,%rsi,4), %edi
cmpw 0x5e(%rax), %di
je 0x13052
incq %rsi
cmpq %rsi, %rdx
jne 0x12ffe
movswl (%r14), %esi
movswl 0x2(%r14), %edx
movq %rbx, %rdi
xorl %ecx, %ecx
popq %rbx
popq %r14
popq %rbp
jmp 0x12e1a
leaq 0x2c0fd(%rip), %rdi     # 0x3f134
movq %rbx, %rsi
callq 0x829e
jmp 0x1303f
leaq 0x2c0ec(%rip), %rdi     # 0x3f134
movq %r14, %rsi
callq 0x829e
jmp 0x13050
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O1/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 0x80d4
testb %al, %al
je 0x130b5
testb %bpl, %bpl
je 0x130c6
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
leaq 0x2c078(%rip), %rdi     # 0x3f134
movq %rbx, %rsi
callq 0x829e
jmp 0x130c4
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x6697
// File: /workspace/github_c_makefile_star2_O1/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 0x80d4
testb %al, %al
je 0x13580
movq %rbx, %rdi
callq 0x6ad8
cmpb $0x4, %bpl
ja 0x13568
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 0x5d83
leaq 0x2bbad(%rip), %rdi     # 0x3f134
movq %rbx, %rsi
callq 0x829e
jmp 0x1358f
// File: /workspace/github_c_makefile_star2_O1/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 0x80d4
testb %al, %al
je 0x135ff
movq %rbx, %rdi
callq 0x6ad8
movb 0x30(%rax), %cl
movl %ecx, %edx
andb $0x7, %dl
cmpb %bpl, %dl
jne 0x13610
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
leaq 0x2bb2e(%rip), %rdi     # 0x3f134
movq %rbx, %rsi
callq 0x829e
jmp 0x1360e
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 0x5d83
// File: /workspace/github_c_makefile_star2_O1/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 0x80d4
testb %al, %al
je 0x1366b
movq %rbx, %rdi
callq 0x6ad8
movzbl 0x30(%rax), %ecx
andl $0x7, %ecx
cmpb $0x3, %cl
ja 0x1367c
shll $0x3, %ecx
movl $0x1000302, %eax        # imm = 0x1000302
shrl %cl, %eax
movzbl %al, %esi
movq %rbx, %rdi
popq %rbx
jmp 0x135d2
leaq 0x2bac2(%rip), %rdi     # 0x3f134
movq %rbx, %rsi
callq 0x829e
jmp 0x1367a
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O1/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 0x80d4
testb %al, %al
je 0x1380f
movq %r14, %rdi
callq 0x6ad8
movq %rax, %r15
movq %r14, %rdi
callq 0x136de
movl %ebx, %ecx
orb %al, %cl
je 0x13802
movl %ebx, %ecx
xorb $0x1, %cl
movl %eax, %edx
xorb $0x1, %dl
orb %cl, %dl
je 0x13802
movl %ebx, %ecx
xorb $0x2, %cl
movl %eax, %edx
xorb $0x2, %dl
orb %cl, %dl
je 0x13802
movl %ebx, %ecx
xorb $0x3, %cl
movl %eax, %edx
xorb $0x3, %dl
orb %cl, %dl
je 0x13802
movl %ebx, %ecx
xorb $0x4, %cl
xorb $0x4, %al
orb %cl, %al
jne 0x13820
movq %r14, %rdi
popq %rbx
popq %r14
popq %r15
jmp 0x6697
leaq 0x2b91e(%rip), %rdi     # 0x3f134
movq %r14, %rsi
callq 0x829e
jmp 0x1381e
cmpb $0x4, %bl
ja 0x13856
movzbl %bl, %eax
leaq 0x2bdb5(%rip), %rcx     # 0x3f5e4
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x8(%r15), %rax
jmp 0x13858
movq 0x28(%r15), %rax
jmp 0x13858
movq 0x18(%r15), %rax
jmp 0x13858
movq 0x20(%r15), %rax
jmp 0x13858
movq 0x10(%r15), %rax
jmp 0x13858
xorl %eax, %eax
popq %rbx
popq %r14
popq %r15
retq
nop
// File: /workspace/github_c_makefile_star2_O1/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 0x80d4
testb %al, %al
je 0x14abd
movq %rbx, %rdi
callq 0x6ad8
cmpb $0x7, %bpl
ja 0x14af6
movzbl %bpl, %ecx
leaq 0x2ab89(%rip), %rdx     # 0x3f630
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x5d83
jmp 0x14af6
leaq 0x2a670(%rip), %rdi     # 0x3f134
movq %rbx, %rsi
callq 0x829e
jmp 0x14acc
movq %r14, 0x40(%rax)
jmp 0x14af6
movq %r14, 0x30(%rax)
jmp 0x14af6
movq %r14, 0x38(%rax)
jmp 0x14af6
movq %r14, 0x58(%rax)
jmp 0x14af6
movq %r14, 0x28(%rax)
jmp 0x14af6
movq %r14, 0x48(%rax)
jmp 0x14af6
movq %r14, 0x50(%rax)
movq %rbx, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0x4c36
// File: /workspace/github_c_makefile_star2_O1/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 0x80d4
testb %al, %al
je 0x14b4d
movq %r14, %rdi
callq 0x80d4
testb %al, %al
je 0x14b5e
movq %rbx, %rdi
callq 0x6ad8
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 0x4c36
leaq 0x2a5e0(%rip), %rdi     # 0x3f134
movq %rbx, %rsi
callq 0x829e
jmp 0x14b5c
leaq 0x2a5cf(%rip), %rdi     # 0x3f134
movq %r14, %rsi
callq 0x829e
jmp 0x14b6d
// File: /workspace/github_c_makefile_star2_O1/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 0x80d4
testb %al, %al
je 0x14bbb
movq %r14, %rdi
callq 0x80d4
testb %al, %al
je 0x14bcc
movq %rbx, %rdi
callq 0x6ad8
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 0x4c36
leaq 0x2a572(%rip), %rdi     # 0x3f134
movq %rbx, %rsi
callq 0x829e
jmp 0x14bca
leaq 0x2a561(%rip), %rdi     # 0x3f134
movq %r14, %rsi
callq 0x829e
jmp 0x14bdb
// File: /workspace/github_c_makefile_star2_O1/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 0x80d4
testb %al, %al
je 0x14c1a
movq %r14, %rdi
callq 0x80d4
testb %al, %al
je 0x14c2b
movq %rbx, %rdi
callq 0x6ad8
movq %r14, 0x8(%rax)
movw %bp, 0x12(%rax)
movq %rbx, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0x4c36
leaq 0x2a513(%rip), %rdi     # 0x3f134
movq %rbx, %rsi
callq 0x829e
jmp 0x14c29
leaq 0x2a502(%rip), %rdi     # 0x3f134
movq %r14, %rsi
callq 0x829e
jmp 0x14c3a
// File: /workspace/github_c_makefile_star2_O1/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 0x80d4
testb %al, %al
je 0x14c76
movq %r14, %rdi
callq 0x80d4
testb %al, %al
je 0x14c87
movq %rbx, %rdi
callq 0x6ad8
movq %r14, 0x18(%rax)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x4c36
leaq 0x2a4b7(%rip), %rdi     # 0x3f134
movq %rbx, %rsi
callq 0x829e
jmp 0x14c85
leaq 0x2a4a6(%rip), %rdi     # 0x3f134
movq %r14, %rsi
callq 0x829e
jmp 0x14c96
// File: /workspace/github_c_makefile_star2_O1/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_calendar.c
// Function: lv_calendar_set_month_names
void lv_calendar_set_month_names(lv_obj_t * calendar, const char ** month_names)
{
    LV_ASSERT_OBJ(calendar, LV_OBJX_NAME);
    LV_ASSERT_NULL(month_names);

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

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %r14
movq %rdi, %rbx
callq 0x80d4
testb %al, %al
je 0x14cd2
movq %r14, %rdi
callq 0x80d4
testb %al, %al
je 0x14ce3
movq %rbx, %rdi
callq 0x6ad8
movq %r14, 0x20(%rax)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x4c36
leaq 0x2a45b(%rip), %rdi     # 0x3f134
movq %rbx, %rsi
callq 0x829e
jmp 0x14ce1
leaq 0x2a44a(%rip), %rdi     # 0x3f134
movq %r14, %rsi
callq 0x829e
jmp 0x14cf2
// File: /workspace/github_c_makefile_star2_O1/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_calendar.c
// Function: lv_calendar_get_style
const lv_style_t * lv_calendar_get_style(const lv_obj_t * calendar, lv_calendar_style_t type)
{
    LV_ASSERT_OBJ(calendar, LV_OBJX_NAME);

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

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

    return style;
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x80d4
testb %al, %al
je 0x14e72
movq %rbx, %rdi
callq 0x6ad8
cmpb $0x7, %bpl
ja 0x14ead
movzbl %bpl, %ecx
leaq 0x2a7f5(%rip), %rdx     # 0x3f650
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x6697
leaq 0x2a2bb(%rip), %rdi     # 0x3f134
movq %rbx, %rsi
callq 0x829e
jmp 0x14e81
movq 0x40(%rax), %rax
jmp 0x14eaf
movq 0x30(%rax), %rax
jmp 0x14eaf
movq 0x38(%rax), %rax
jmp 0x14eaf
movq 0x58(%rax), %rax
jmp 0x14eaf
movq 0x28(%rax), %rax
jmp 0x14eaf
movq 0x48(%rax), %rax
jmp 0x14eaf
movq 0x50(%rax), %rax
jmp 0x14eaf
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %rbp
retq