LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_slider.c
// Function: lv_slider_get_style
const lv_style_t * lv_slider_get_style(const lv_obj_t * slider, lv_slider_style_t type)
{
    LV_ASSERT_OBJ(slider, LV_OBJX_NAME);

    const lv_style_t * style = NULL;
    lv_slider_ext_t * ext    = lv_obj_get_ext_attr(slider);

    switch(type) {
        case LV_SLIDER_STYLE_BG: style = lv_bar_get_style(slider, LV_BAR_STYLE_BG); break;
        case LV_SLIDER_STYLE_INDIC: style = lv_bar_get_style(slider, LV_BAR_STYLE_INDIC); break;
        case LV_SLIDER_STYLE_KNOB: style = ext->style_knob; 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 0x1c2cf
movq %rbx, %rdi
callq 0x6747
cmpb $0x2, %bpl
je 0x1c2f1
movzbl %bpl, %eax
cmpl $0x1, %eax
je 0x1c2e0
testl %eax, %eax
jne 0x1c2f7
movq %rbx, %rdi
xorl %esi, %esi
jmp 0x1c2e6
leaq 0x1ee6e(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1c2de
pushq $0x1
popq %rsi
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x8dae
movq 0x18(%rax), %rax
jmp 0x1c2f9
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_ta.c
// Function: lv_ta_set_style
void lv_ta_set_style(lv_obj_t * ta, lv_ta_style_t type, const lv_style_t * style)
{
    LV_ASSERT_OBJ(ta, LV_OBJX_NAME);

    lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);

    switch(type) {
        case LV_TA_STYLE_BG: lv_page_set_style(ta, LV_PAGE_STYLE_BG, style); break;
        case LV_TA_STYLE_SB: lv_page_set_style(ta, LV_PAGE_STYLE_SB, style); break;
        case LV_TA_STYLE_EDGE_FLASH: lv_page_set_style(ta, LV_PAGE_STYLE_EDGE_FLASH, style); break;
        case LV_TA_STYLE_CURSOR:
            ext->cursor.style = style;
            lv_obj_refresh_ext_draw_pad(lv_page_get_scrl(ta)); /*Refresh ext. size because of cursor drawing*/
            refr_cursor_area(ta);
            break;
        case LV_TA_STYLE_PLACEHOLDER:
            if(ext->placeholder) lv_label_set_style(ext->placeholder, LV_LABEL_STYLE_MAIN, style);
            break;
    }
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movq %rdx, %rbx
movl %esi, %ebp
movq %rdi, %r14
callq 0x7994
testb %al, %al
je 0x1ce55
movq %r14, %rdi
callq 0x6747
cmpb $0x4, %bpl
ja 0x1ce7b
movzbl %bpl, %ecx
leaq 0x1ea87(%rip), %rdx     # 0x3b8cc
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movq %r14, %rdi
xorl %esi, %esi
jmp 0x1ceaa
leaq 0x1e2e8(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x1ce64
movq 0x58(%rax), %rdi
testq %rdi, %rdi
je 0x1ce7b
movq %rbx, %rsi
popq %rbx
popq %r14
popq %rbp
jmp 0x5a3d
popq %rbx
popq %r14
popq %rbp
retq
movq %rbx, 0x78(%rax)
movq %r14, %rdi
callq 0x245d9
movq %rax, %rdi
callq 0x617f
movq %r14, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0x1df9e
pushq $0x3
jmp 0x1cea6
pushq $0x2
popq %rsi
movq %r14, %rdi
movq %rbx, %rdx
popq %rbx
popq %r14
popq %rbp
jmp 0x24089
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ta.c
// Function: pwd_char_hider
static void pwd_char_hider(lv_obj_t * ta)
{
    lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
    if(ext->pwd_mode != 0) {
        char * txt  = lv_label_get_text(ext->label);
        int16_t len = lv_txt_get_encoded_length(txt);
        bool refr   = false;
        uint16_t i;
        for(i = 0; i < len; i++) {
            txt[i] = '*';
            refr   = true;
        }

        txt[i] = '\0';

        if(refr != false) lv_label_set_text(ext->label, txt);
    }
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
callq 0x6747
testb $0x1, 0x98(%rax)
je 0x1cf1e
movq %rax, %rbx
movq 0x50(%rax), %rdi
callq 0x18db9
movq %rax, %r14
leaq 0x34772(%rip), %rax     # 0x51650
movq %r14, %rdi
callq *(%rax)
cwtl
xorl %ecx, %ecx
testl %eax, %eax
cmovlel %ecx, %eax
xorl %edx, %edx
cmpq %rcx, %rax
je 0x1cefe
movb $0x2a, (%r14,%rcx)
incq %rcx
movb $0x1, %dl
jmp 0x1ceed
movzwl %ax, %eax
movb $0x0, (%r14,%rax)
testb $0x1, %dl
je 0x1cf1e
movq 0x50(%rbx), %rdi
movq %r14, %rsi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x18a9a
addq $0x8, %rsp
popq %rbx
popq %r14
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ta.c
// Function: lv_ta_set_one_line
void lv_ta_set_one_line(lv_obj_t * ta, bool en)
{
    LV_ASSERT_OBJ(ta, LV_OBJX_NAME);

    lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
    if(ext->one_line == en) return;

    if(en) {
        const lv_style_t * style_ta    = lv_obj_get_style(ta);
        const lv_style_t * style_scrl  = lv_obj_get_style(lv_page_get_scrl(ta));
        const lv_style_t * style_label = lv_obj_get_style(ext->label);
        lv_coord_t font_h              = lv_font_get_line_height(style_label->text.font);

        ext->one_line = 1;
        lv_page_set_scrl_fit2(ta, LV_FIT_TIGHT, LV_FIT_FLOOD);
        lv_obj_set_height(ta, font_h + style_ta->body.padding.top + style_ta->body.padding.bottom +
                                  style_scrl->body.padding.top + style_scrl->body.padding.bottom);
        lv_label_set_long_mode(ext->label, LV_LABEL_LONG_EXPAND);
        if(ext->placeholder) lv_label_set_long_mode(ext->placeholder, LV_LABEL_LONG_EXPAND);
        lv_obj_set_pos(lv_page_get_scrl(ta), style_ta->body.padding.left, style_ta->body.padding.top);
    } else {
        const lv_style_t * style_ta = lv_obj_get_style(ta);

        ext->one_line = 0;
        lv_page_set_scrl_fit2(ta, LV_FIT_FLOOD, LV_FIT_TIGHT);
        lv_label_set_long_mode(ext->label, LV_LABEL_LONG_BREAK);
        if(ext->placeholder) lv_label_set_long_mode(ext->placeholder, LV_LABEL_LONG_BREAK);

        lv_obj_set_height(ta, LV_TA_DEF_HEIGHT);
        lv_obj_set_pos(lv_page_get_scrl(ta), style_ta->body.padding.left, style_ta->body.padding.top);
    }

    placeholder_update(ta);
    refr_cursor_area(ta);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x1cf5f
movq %rbx, %rdi
callq 0x6747
movq %rax, %r15
testb $0x2, 0x98(%rax)
sete %al
xorb %bpl, %al
je 0x1cf70
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
leaq 0x1e1de(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1cf6e
movq %rbx, %rdi
callq 0x6316
movq %rax, %r14
testb %bpl, %bpl
je 0x1cff8
movq %rbx, %rdi
callq 0x245d9
movq %rax, %rdi
callq 0x6316
movq %rax, %r12
movq 0x50(%r15), %rdi
callq 0x6316
movq 0x28(%rax), %rax
movzbl 0x10(%rax), %ebp
orb $0x2, 0x98(%r15)
pushq $0x1
popq %rsi
pushq $0x2
popq %rdx
movq %rbx, %rdi
callq 0x1cc16
addw 0x16(%r14), %bp
addw 0x18(%r14), %bp
addw 0x16(%r12), %bp
addw 0x18(%r12), %bp
movswl %bp, %esi
movq %rbx, %rdi
callq 0x53e6
movq 0x50(%r15), %rdi
xorl %esi, %esi
callq 0x189c5
movq 0x58(%r15), %rdi
testq %rdi, %rdi
je 0x1d037
xorl %esi, %esi
callq 0x189c5
jmp 0x1d037
andb $-0x3, 0x98(%r15)
pushq $0x2
popq %rsi
pushq $0x1
popq %rbp
movq %rbx, %rdi
movl %ebp, %edx
callq 0x1cc16
movq 0x50(%r15), %rdi
movl %ebp, %esi
callq 0x189c5
movq 0x58(%r15), %rdi
testq %rdi, %rdi
je 0x1d02c
pushq $0x1
popq %rsi
callq 0x189c5
pushq $0x64
popq %rsi
movq %rbx, %rdi
callq 0x53e6
movq %rbx, %rdi
callq 0x245d9
movswl 0x1a(%r14), %esi
movswl 0x16(%r14), %edx
movq %rax, %rdi
callq 0x47df
movq %rbx, %rdi
callq 0x1d8ff
movq %rbx, %rdi
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x1df9e
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ta.c
// Function: lv_ta_get_style
const lv_style_t * lv_ta_get_style(const lv_obj_t * ta, lv_ta_style_t type)
{
    LV_ASSERT_OBJ(ta, LV_OBJX_NAME);

    const lv_style_t * style = NULL;
    lv_ta_ext_t * ext        = lv_obj_get_ext_attr(ta);

    switch(type) {
        case LV_TA_STYLE_BG: style = lv_page_get_style(ta, LV_PAGE_STYLE_BG); break;
        case LV_TA_STYLE_SB: style = lv_page_get_style(ta, LV_PAGE_STYLE_SB); break;
        case LV_TA_STYLE_EDGE_FLASH: style = lv_page_get_style(ta, LV_PAGE_STYLE_EDGE_FLASH); break;
        case LV_TA_STYLE_CURSOR: style = ext->cursor.style; break;
        case LV_TA_STYLE_PLACEHOLDER:
            if(ext->placeholder) style = lv_label_get_style(ext->placeholder, LV_LABEL_STYLE_MAIN);
            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 0x1d0a3
movq %rbx, %rdi
callq 0x6747
cmpb $0x4, %bpl
ja 0x1d0c8
movzbl %bpl, %ecx
leaq 0x1e84d(%rip), %rdx     # 0x3b8e0
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movq %rbx, %rdi
xorl %esi, %esi
jmp 0x1d0e1
leaq 0x1e09a(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1d0b2
movq 0x58(%rax), %rdi
testq %rdi, %rdi
je 0x1d0c8
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x6316
xorl %eax, %eax
jmp 0x1d0d0
movq 0x78(%rax), %rax
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
pushq $0x3
jmp 0x1d0dd
pushq $0x2
popq %rsi
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x24149
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ta.c
// Function: cursor_blink_anim
static void cursor_blink_anim(lv_obj_t * ta, lv_anim_value_t show)
{
    lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
    if(show != ext->cursor.state) {
        ext->cursor.state = show == 0 ? 0 : 1;
        if(ext->cursor.type != LV_CURSOR_NONE && (ext->cursor.type & LV_CURSOR_HIDDEN) == 0) {
            lv_disp_t * disp = lv_obj_get_disp(ta);
            lv_area_t area_tmp;
            lv_area_copy(&area_tmp, &ext->cursor.area);
            area_tmp.x1 += ext->label->coords.x1;
            area_tmp.y1 += ext->label->coords.y1;
            area_tmp.x2 += ext->label->coords.x1;
            area_tmp.y2 += ext->label->coords.y1;
            lv_inv_area(disp, &area_tmp);
        }
    }
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
subq $0x10, %rsp
movl %esi, %ebp
movq %rdi, %r14
callq 0x6747
movq %rax, %rbx
movzbl 0x90(%rax), %eax
movl %eax, %ecx
shrl $0x4, %ecx
andl $0x1, %ecx
cmpw %bp, %cx
je 0x1d16c
testw %bp, %bp
setne %cl
shlb $0x4, %cl
movl %eax, %edx
andb $-0x11, %dl
orb %cl, %dl
movb %dl, 0x90(%rbx)
testb $0xf, %al
sete %cl
andb $0x8, %al
shrb $0x3, %al
orb %cl, %al
jne 0x1d16c
movq %r14, %rdi
callq 0x4d17
movq 0x50(%rbx), %rcx
movq 0x20(%rcx), %xmm0
pshufd $0x50, %xmm0, %xmm0     # xmm0 = xmm0[0,0,1,1]
movq 0x86(%rbx), %xmm1
paddw %xmm0, %xmm1
leaq 0x8(%rsp), %rsi
movq %xmm1, (%rsi)
movq %rax, %rdi
callq 0x6cff
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_ta.c
// Function: placeholder_update
static void placeholder_update(lv_obj_t * ta)
{
    lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
    const char * ta_text;

    if(ext->placeholder == NULL) return;

    ta_text = lv_ta_get_text(ta);

    if(ta_text[0] == '\0') {
        /*Be sure the main label and the placeholder has the same coordinates*/
        lv_obj_t * scrl               = lv_page_get_scrl(ta);
        const lv_style_t * style_scrl = lv_obj_get_style(scrl);
        lv_obj_set_pos(ext->placeholder, style_scrl->body.padding.left, style_scrl->body.padding.top);
        lv_obj_set_pos(ext->label, style_scrl->body.padding.left, style_scrl->body.padding.top);

        lv_obj_set_width(ext->placeholder, lv_page_get_fit_width(ta));
        lv_obj_set_hidden(ext->placeholder, false);
    } else {
        lv_obj_set_hidden(ext->placeholder, true);
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %r14
callq 0x6747
cmpq $0x0, 0x58(%rax)
je 0x1d992
movq %rax, %rbx
movq %r14, %rdi
callq 0x1e680
movb (%rax), %bpl
testb %bpl, %bpl
jne 0x1d976
movq %r14, %rdi
callq 0x245d9
movq %rax, %rdi
callq 0x6316
movq %rax, %r15
movq 0x58(%rbx), %rdi
movswl 0x1a(%rax), %esi
movswl 0x16(%rax), %edx
callq 0x47df
movq 0x50(%rbx), %rdi
movswl 0x1a(%r15), %esi
movswl 0x16(%r15), %edx
callq 0x47df
movq 0x58(%rbx), %r15
movq %r14, %rdi
callq 0x2476e
movswl %ax, %esi
movq %r15, %rdi
callq 0x53a8
xorl %esi, %esi
testb %bpl, %bpl
setne %sil
movq 0x58(%rbx), %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x5bfe
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_ta.c
// Function: lv_ta_del_char_forward
void lv_ta_del_char_forward(lv_obj_t * ta)
{
    LV_ASSERT_OBJ(ta, LV_OBJX_NAME);

    uint16_t cp = lv_ta_get_cursor_pos(ta);
    lv_ta_set_cursor_pos(ta, cp + 1);
    if(cp != lv_ta_get_cursor_pos(ta)) lv_ta_del_char(ta);
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x1dbe7
movq %rbx, %rdi
callq 0x1d8d0
movl %eax, %r14d
leal 0x1(%r14), %eax
movswl %ax, %esi
movq %rbx, %rdi
callq 0x1d679
movq %rbx, %rdi
callq 0x1d8d0
cmpw %ax, %r14w
jne 0x1dbf8
addq $0x8, %rsp
popq %rbx
popq %r14
retq
leaq 0x1d556(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1dbf6
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x1d9f5
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ta.c
// Function: lv_ta_set_placeholder_text
void lv_ta_set_placeholder_text(lv_obj_t * ta, const char * txt)
{
    LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
    LV_ASSERT_NULL(txt);

    lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);

    /*Create the placeholder label only when it is needed*/
    if(ext->placeholder == NULL) {
        ext->placeholder = lv_label_create(ta, NULL);

        if(ext->one_line) {
            lv_label_set_long_mode(ext->placeholder, LV_LABEL_LONG_EXPAND);
        } else {
            lv_label_set_long_mode(ext->placeholder, LV_LABEL_LONG_BREAK);
        }
    }

    lv_label_set_text(ext->placeholder, txt);

    /*Refresh the placeholder's align*/
    lv_ta_set_text_align(ta, lv_label_get_align(ext->label));

    placeholder_update(ta);
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rsi, %r14
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x1de83
movq %r14, %rdi
callq 0x7994
testb %al, %al
je 0x1de94
movq %rbx, %rdi
callq 0x6747
movq %rax, %r15
cmpq $0x0, 0x58(%rax)
jne 0x1de56
movq %rbx, %rdi
xorl %esi, %esi
callq 0x182f0
movq %rax, 0x58(%r15)
xorl %esi, %esi
testb $0x2, 0x98(%r15)
sete %sil
movq %rax, %rdi
callq 0x189c5
movq 0x58(%r15), %rdi
movq %r14, %rsi
callq 0x18a9a
movq 0x50(%r15), %rdi
callq 0x18d7f
movzbl %al, %esi
movq %rbx, %rdi
callq 0x1dea5
movq %rbx, %rdi
popq %rbx
popq %r14
popq %r15
jmp 0x1d8ff
leaq 0x1d2ba(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1de92
leaq 0x1d2a9(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x1dea3
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ta.c
// Function: lv_ta_set_text_align
void lv_ta_set_text_align(lv_obj_t * ta, lv_label_align_t align)
{
    LV_ASSERT_OBJ(ta, LV_OBJX_NAME);

    lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
    lv_obj_t * label  = lv_ta_get_label(ta);
    if(!ext->one_line) {
        lv_label_set_align(label, align);
        if(ext->placeholder) lv_label_set_align(ext->placeholder, align);
    } else {
        /*Normal left align. Just let the text expand*/
        if(align == LV_LABEL_ALIGN_LEFT) {
            lv_label_set_long_mode(label, LV_LABEL_LONG_EXPAND);
            lv_page_set_scrl_fit2(ta, LV_FIT_TIGHT, LV_FIT_FLOOD);
            lv_label_set_align(label, align);
            if(ext->placeholder) lv_label_set_align(ext->placeholder, align);

        }
        /*Else use fix label width equal to the Text area width*/
        else {
            lv_label_set_long_mode(label, LV_LABEL_LONG_CROP);
            lv_page_set_scrl_fit2(ta, LV_FIT_FLOOD, LV_FIT_FLOOD);
            lv_label_set_align(label, align);
            if(ext->placeholder) lv_label_set_align(ext->placeholder, align);

            lv_obj_set_width(label, lv_page_get_fit_width(ta));
        }
    }

    refr_cursor_area(ta);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x1defc
movq %rbx, %rdi
callq 0x6747
movq %rax, %r15
movq %rbx, %rdi
callq 0x1e4d3
movq %rax, %r14
testb $0x2, 0x98(%r15)
jne 0x1df0d
movzbl %bpl, %ebp
movq %r14, %rdi
movl %ebp, %esi
callq 0x18d16
movq 0x58(%r15), %rdi
testq %rdi, %rdi
je 0x1df8f
movl %ebp, %esi
jmp 0x1df8a
leaq 0x1d241(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1df0b
testb %bpl, %bpl
je 0x1df5d
pushq $0x5
popq %rsi
movq %r14, %rdi
callq 0x189c5
pushq $0x2
popq %rdx
movq %rbx, %rdi
movl %edx, %esi
callq 0x1cc16
movzbl %bpl, %ebp
movq %r14, %rdi
movl %ebp, %esi
callq 0x18d16
movq 0x58(%r15), %rdi
testq %rdi, %rdi
je 0x1df48
movl %ebp, %esi
callq 0x18d16
movq %rbx, %rdi
callq 0x2476e
movswl %ax, %esi
movq %r14, %rdi
callq 0x53a8
jmp 0x1df8f
movq %r14, %rdi
xorl %esi, %esi
callq 0x189c5
pushq $0x1
popq %rsi
pushq $0x2
popq %rdx
movq %rbx, %rdi
callq 0x1cc16
movq %r14, %rdi
xorl %esi, %esi
callq 0x18d16
movq 0x58(%r15), %rdi
testq %rdi, %rdi
je 0x1df8f
xorl %esi, %esi
callq 0x18d16
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x1df9e
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ta.c
// Function: lv_ta_set_cursor_type
void lv_ta_set_cursor_type(lv_obj_t * ta, lv_cursor_type_t cur_type)
{
    LV_ASSERT_OBJ(ta, LV_OBJX_NAME);

    lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
    if(ext->cursor.type == cur_type) return;

    ext->cursor.type = cur_type;

    refr_cursor_area(ta);
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x1e324
movq %rbx, %rdi
callq 0x6747
movb 0x90(%rax), %cl
movl %ecx, %edx
andb $0xf, %dl
cmpb %bpl, %dl
jne 0x1e335
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
leaq 0x1ce19(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1e333
andb $0xf, %bpl
andb $-0x10, %cl
orb %bpl, %cl
movb %cl, 0x90(%rax)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x1df9e
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ta.c
// Function: lv_ta_set_pwd_mode
void lv_ta_set_pwd_mode(lv_obj_t * ta, bool en)
{
    LV_ASSERT_OBJ(ta, LV_OBJX_NAME);

    lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
    if(ext->pwd_mode == en) return;

    /*Pwd mode is now enabled*/
    if(ext->pwd_mode == 0 && en != false) {
        char * txt   = lv_label_get_text(ext->label);
        size_t len = strlen(txt);
        ext->pwd_tmp = lv_mem_alloc(len + 1);
        LV_ASSERT_MEM(ext->pwd_tmp);
        if(ext->pwd_tmp == NULL) return;

        strcpy(ext->pwd_tmp, txt);

        uint16_t i;
        uint16_t encoded_len = lv_txt_get_encoded_length(txt); 
        for(i = 0; i < encoded_len; i++) {
            txt[i] = '*'; /*All char to '*'*/
        }
        txt[i] = '\0';

        lv_ta_clear_selection(ta);

        lv_label_set_text(ext->label, NULL);
    }
    /*Pwd mode is now disabled*/
    else if(ext->pwd_mode == 1 && en == false) {
        lv_ta_clear_selection(ta);
        lv_label_set_text(ext->label, ext->pwd_tmp);
        lv_mem_free(ext->pwd_tmp);
        ext->pwd_tmp = NULL;
    }

    ext->pwd_mode = en == false ? 0 : 1;

    refr_cursor_area(ta);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x1e43a
movq %rbx, %rdi
callq 0x6747
movq %rax, %r14
movb 0x98(%rax), %al
movl %eax, %ecx
andb $0x1, %cl
cmpb %bpl, %cl
je 0x1e44b
movl %ebp, %ecx
notb %cl
orb %al, %cl
testb $0x1, %cl
jne 0x1e456
movq 0x50(%r14), %rdi
callq 0x18db9
movq %rax, %r15
movq %rax, %rdi
callq 0x2070
leaq 0x1(%rax), %rdi
callq 0x279f9
movq %rax, 0x60(%r14)
movq %rax, %rdi
callq 0x7994
movq 0x60(%r14), %rsi
testb %al, %al
je 0x1e485
testq %rsi, %rsi
je 0x1e44b
movq %rsi, %rdi
movq %r15, %rsi
callq 0x2040
leaq 0x3322f(%rip), %rax     # 0x51650
movq %r15, %rdi
callq *(%rax)
movzwl %ax, %ecx
xorl %edx, %edx
cmpq %rdx, %rcx
je 0x1e493
movb $0x2a, (%r15,%rdx)
incq %rdx
jmp 0x1e42b
leaq 0x1cd03(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1e449
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
testb $0x1, %al
sete %al
orb %bpl, %al
jne 0x1e4ae
movq %rbx, %rdi
callq 0x1d650
movq 0x50(%r14), %rdi
movq 0x60(%r14), %rsi
callq 0x18a9a
movq 0x60(%r14), %rdi
callq 0x27a7a
andq $0x0, 0x60(%r14)
jmp 0x1e4ae
leaq 0x1cbb4(%rip), %rdi     # 0x3b040
callq 0x7b01
jmp 0x1e491
movzwl %ax, %eax
movb $0x0, (%r15,%rax)
movq %rbx, %rdi
callq 0x1d650
movq 0x50(%r14), %rdi
xorl %esi, %esi
callq 0x18a9a
movb 0x98(%r14), %al
andb $-0x2, %al
orb %bpl, %al
movb %al, 0x98(%r14)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x1df9e
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ta.c
// Function: lv_ta_set_pwd_show_time
void lv_ta_set_pwd_show_time(lv_obj_t * ta, uint16_t time)
{
    LV_ASSERT_OBJ(ta, LV_OBJX_NAME);

#if LV_USE_ANIMATION == 0
    time = 0;
#endif

    lv_ta_ext_t * ext  = lv_obj_get_ext_attr(ta);
    ext->pwd_show_time = time;
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movl %esi, %ebx
movq %rdi, %r14
callq 0x7994
testb %al, %al
je 0x1e5e7
movq %r14, %rdi
callq 0x6747
movw %bx, 0x72(%rax)
addq $0x8, %rsp
popq %rbx
popq %r14
retq
leaq 0x1cb56(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x1e5f6
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ta.c
// Function: lv_ta_set_cursor_blink_time
void lv_ta_set_cursor_blink_time(lv_obj_t * ta, uint16_t time)
{
    LV_ASSERT_OBJ(ta, LV_OBJX_NAME);

#if LV_USE_ANIMATION == 0
    time = 0;
#endif

    lv_ta_ext_t * ext      = lv_obj_get_ext_attr(ta);
    ext->cursor.blink_time = time;

#if LV_USE_ANIMATION
    if(ext->cursor.blink_time) {
        /*Reset cursor blink animation*/
        lv_anim_t a;
        a.var            = ta;
        a.exec_cb        = (lv_anim_exec_xcb_t)cursor_blink_anim;
        a.time           = ext->cursor.blink_time;
        a.act_time       = 0;
        a.ready_cb       = NULL;
        a.start          = 1;
        a.end            = 0;
        a.repeat         = 1;
        a.repeat_pause   = 0;
        a.playback       = 1;
        a.playback_pause = 0;
        a.path_cb        = lv_anim_path_step;
        lv_anim_create(&a);
    } else {
        ext->cursor.state = 1;
    }
#else
    ext->cursor.state = 1;
#endif
}

// Assembly:
pushq %rbp
pushq %rbx
subq $0x38, %rsp
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x1e661
movq %rbx, %rdi
callq 0x6747
movw %bp, 0x84(%rax)
testw %bp, %bp
je 0x1e672
movq %rsp, %rdi
movq %rbx, (%rdi)
leaq -0x1541(%rip), %rax     # 0x1d0ec
movq %rax, 0x8(%rdi)
movw %bp, 0x28(%rdi)
andw $0x0, 0x2a(%rdi)
andq $0x0, 0x18(%rdi)
movq $0x1, 0x20(%rdi)
movb $-0x1, 0x30(%rdi)
andl $0x0, 0x2c(%rdi)
leaq 0x9373(%rip), %rax      # 0x279c9
movq %rax, 0x10(%rdi)
callq 0x27685
jmp 0x1e679
leaq 0x1cadc(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1e670
orb $0x10, 0x90(%rax)
addq $0x38, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ta.c
// Function: lv_ta_get_text
const char * lv_ta_get_text(const lv_obj_t * ta)
{
    LV_ASSERT_OBJ(ta, LV_OBJX_NAME);

    lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);

    const char * txt;
    if(ext->pwd_mode == 0) {
        txt = lv_label_get_text(ext->label);
    } else {
        txt = ext->pwd_tmp;
    }

    return txt;
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x1e6a8
movq %rbx, %rdi
callq 0x6747
testb $0x1, 0x98(%rax)
jne 0x1e6b9
movq 0x50(%rax), %rdi
popq %rbx
jmp 0x18db9
leaq 0x1ca95(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1e6b7
movq 0x60(%rax), %rax
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ta.c
// Function: lv_ta_get_placeholder_text
const char * lv_ta_get_placeholder_text(lv_obj_t * ta)
{
    LV_ASSERT_OBJ(ta, LV_OBJX_NAME);

    lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);

    const char * txt = NULL;

    if(ext->placeholder) txt = lv_label_get_text(ext->placeholder);

    return txt;
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x1e6e3
movq %rbx, %rdi
callq 0x6747
movq 0x58(%rax), %rdi
testq %rdi, %rdi
je 0x1e6f4
popq %rbx
jmp 0x18db9
leaq 0x1ca5a(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1e6f2
xorl %eax, %eax
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ta.c
// Function: lv_ta_cursor_right
void lv_ta_cursor_right(lv_obj_t * ta)
{
    LV_ASSERT_OBJ(ta, LV_OBJX_NAME);

    uint16_t cp = lv_ta_get_cursor_pos(ta);
    cp++;
    lv_ta_set_cursor_pos(ta, cp);
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x1e87f
movq %rbx, %rdi
callq 0x1d8d0
incl %eax
movswl %ax, %esi
movq %rbx, %rdi
popq %rbx
jmp 0x1d679
leaq 0x1c8be(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1e88e
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ta.c
// Function: lv_ta_cursor_left
void lv_ta_cursor_left(lv_obj_t * ta)
{
    LV_ASSERT_OBJ(ta, LV_OBJX_NAME);

    uint16_t cp = lv_ta_get_cursor_pos(ta);
    if(cp > 0) {
        cp--;
        lv_ta_set_cursor_pos(ta, cp);
    }
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x1e8b8
movq %rbx, %rdi
callq 0x1d8d0
testw %ax, %ax
je 0x1e8c9
decl %eax
movswl %ax, %esi
movq %rbx, %rdi
popq %rbx
jmp 0x1d679
leaq 0x1c885(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1e8c7
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ta.c
// Function: lv_ta_cursor_down
void lv_ta_cursor_down(lv_obj_t * ta)
{
    LV_ASSERT_OBJ(ta, LV_OBJX_NAME);

    lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
    lv_point_t pos;

    /*Get the position of the current letter*/
    lv_label_get_letter_pos(ext->label, lv_ta_get_cursor_pos(ta), &pos);

    /*Increment the y with one line and keep the valid x*/
    const lv_style_t * label_style = lv_obj_get_style(ext->label);
    const lv_font_t * font_p       = label_style->text.font;
    lv_coord_t font_h              = lv_font_get_line_height(font_p);
    pos.y += font_h + label_style->text.line_space + 1;
    pos.x = ext->cursor.valid_x;

    /*Do not go below the last line*/
    if(pos.y < lv_obj_get_height(ext->label)) {
        /*Get the letter index on the new cursor position and set it*/
        uint16_t new_cur_pos = lv_label_get_letter_on(ext->label, &pos);

        lv_coord_t cur_valid_x_tmp = ext->cursor.valid_x; /*Cursor position set overwrites the valid positon */
        lv_ta_set_cursor_pos(ta, new_cur_pos);
        ext->cursor.valid_x = cur_valid_x_tmp;
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x10, %rsp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x1e985
movq %rbx, %rdi
callq 0x6747
movq %rax, %r14
movq 0x50(%rax), %r15
movq %rbx, %rdi
callq 0x1d8d0
movzwl %ax, %esi
leaq 0xc(%rsp), %r12
movq %r15, %rdi
movq %r12, %rdx
callq 0x197e0
movq 0x50(%r14), %rdi
callq 0x6316
movq 0x28(%rax), %rcx
movzbl 0x10(%rcx), %ebp
addw 0x32(%rax), %bp
addw 0x2(%r12), %bp
incl %ebp
movw %bp, 0x2(%r12)
movzwl 0x80(%r14), %eax
movw %ax, (%r12)
movq 0x50(%r14), %rdi
callq 0x5332
cmpw %ax, %bp
jge 0x1e978
movq 0x50(%r14), %rdi
leaq 0xc(%rsp), %rsi
callq 0x19a81
movzwl 0x80(%r14), %ebp
movswl %ax, %esi
movq %rbx, %rdi
callq 0x1d679
movw %bp, 0x80(%r14)
addq $0x10, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
leaq 0x1c7b8(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1e994
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ta.c
// Function: lv_ta_cursor_up
void lv_ta_cursor_up(lv_obj_t * ta)
{
    LV_ASSERT_OBJ(ta, LV_OBJX_NAME);

    lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
    lv_point_t pos;

    /*Get the position of the current letter*/
    lv_label_get_letter_pos(ext->label, lv_ta_get_cursor_pos(ta), &pos);

    /*Decrement the y with one line and keep the valid x*/
    const lv_style_t * label_style = lv_obj_get_style(ext->label);
    const lv_font_t * font         = label_style->text.font;
    lv_coord_t font_h              = lv_font_get_line_height(font);
    pos.y -= font_h + label_style->text.line_space - 1;
    pos.x = ext->cursor.valid_x;

    /*Get the letter index on the new cursor position and set it*/
    uint16_t new_cur_pos       = lv_label_get_letter_on(ext->label, &pos);
    lv_coord_t cur_valid_x_tmp = ext->cursor.valid_x; /*Cursor position set overwrites the valid positon */
    lv_ta_set_cursor_pos(ta, new_cur_pos);
    ext->cursor.valid_x = cur_valid_x_tmp;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x10, %rsp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x1ea42
movq %rbx, %rdi
callq 0x6747
movq %rax, %r14
movq 0x50(%rax), %r15
movq %rbx, %rdi
callq 0x1d8d0
movzwl %ax, %esi
leaq 0xc(%rsp), %r12
movq %r15, %rdi
movq %r12, %rdx
callq 0x197e0
movq 0x50(%r14), %rdi
callq 0x6316
movq 0x28(%rax), %rcx
movzbl 0x10(%rcx), %ecx
movzwl 0x2(%r12), %edx
addw 0x32(%rax), %cx
subl %ecx, %edx
incl %edx
movw %dx, 0x2(%r12)
movzwl 0x80(%r14), %eax
movw %ax, (%r12)
movq 0x50(%r14), %rdi
movq %r12, %rsi
callq 0x19a81
movzwl 0x80(%r14), %ebp
movswl %ax, %esi
movq %rbx, %rdi
callq 0x1d679
movw %bp, 0x80(%r14)
addq $0x10, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
leaq 0x1c6fb(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1ea51
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_ta.c
// Function: get_cursor_style
static void get_cursor_style(lv_obj_t * ta, lv_style_t * style_res)
{
    lv_ta_ext_t * ext              = lv_obj_get_ext_attr(ta);
    const lv_style_t * label_style = lv_obj_get_style(ext->label);

    if(ext->cursor.style) {
        lv_style_copy(style_res, ext->cursor.style);
    } else {
        /*If cursor style is not specified then use the modified label style */
        lv_style_copy(style_res, label_style);
        lv_color_t clv_color_tmp = style_res->text.color; /*Make letter color to cursor color*/
        style_res->text.color =
            style_res->body.main_color; /*In block mode the letter color will be current background color*/
        style_res->body.main_color     = clv_color_tmp;
        style_res->body.grad_color     = clv_color_tmp;
        style_res->body.border.color   = clv_color_tmp;
        style_res->body.border.opa     = LV_OPA_COVER;
        style_res->body.border.width   = 1;
        style_res->body.shadow.width   = 0;
        style_res->body.radius         = 0;
        style_res->body.opa            = LV_OPA_COVER;
        style_res->body.padding.left   = 0;
        style_res->body.padding.right  = 0;
        style_res->body.padding.top    = 0;
        style_res->body.padding.bottom = 0;
        style_res->line.width          = 1;
    }
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %rbx
callq 0x6747
movq %rax, %r14
movq 0x50(%rax), %rdi
callq 0x6316
movq 0x78(%r14), %rsi
testq %rsi, %rsi
je 0x1ea83
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x74d4
movq %rbx, %rdi
movq %rax, %rsi
callq 0x74d4
movzwl 0x2(%rbx), %eax
movzwl 0x20(%rbx), %ecx
movw %ax, 0x20(%rbx)
movw %cx, 0x2(%rbx)
movw %cx, 0x4(%rbx)
movw %cx, 0xa(%rbx)
movb $-0x1, %al
movb %al, 0xf(%rbx)
movw $0x1, %cx
movw %cx, 0xc(%rbx)
andw $0x0, 0x12(%rbx)
andw $0x0, 0x6(%rbx)
movb %al, 0x8(%rbx)
andq $0x0, 0x16(%rbx)
movw %cx, 0x3e(%rbx)
addq $0x8, %rsp
popq %rbx
popq %r14
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_spinbox.c
// Function: lv_spinbox_set_value
void lv_spinbox_set_value(lv_obj_t * spinbox, int32_t i)
{
    LV_ASSERT_OBJ(spinbox, LV_OBJX_NAME);

    lv_spinbox_ext_t * ext = lv_obj_get_ext_attr(spinbox);
    if(ext == NULL) return;

    if(i > ext->range_max) i = ext->range_max;
    if(i < ext->range_min) i = ext->range_min;

    ext->value = i;

    lv_spinbox_updatevalue(spinbox);
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x1ef47
movq %rbx, %rdi
callq 0x6747
testq %rax, %rax
je 0x1ef58
movl 0xa4(%rax), %ecx
movl 0xa8(%rax), %edx
cmpl %ebp, %ecx
cmovll %ecx, %ebp
cmpl %edx, %ebp
cmovlel %edx, %ebp
movl %ebp, 0xa0(%rax)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x1f09d
leaq 0x1c1f6(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1ef56
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_spinbox.c
// Function: lv_spinbox_set_digit_format
void lv_spinbox_set_digit_format(lv_obj_t * spinbox, uint8_t digit_count, uint8_t separator_position)
{
    LV_ASSERT_OBJ(spinbox, LV_OBJX_NAME);

    lv_spinbox_ext_t * ext = lv_obj_get_ext_attr(spinbox);
    if(ext == NULL) return;

    if(digit_count > LV_SPINBOX_MAX_DIGIT_COUNT) digit_count = LV_SPINBOX_MAX_DIGIT_COUNT;

    if(separator_position > LV_SPINBOX_MAX_DIGIT_COUNT) separator_position = LV_SPINBOX_MAX_DIGIT_COUNT;

    ext->digit_count   = digit_count;
    ext->dec_point_pos = separator_position;

    lv_spinbox_updatevalue(spinbox);
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %edx, %ebp
movl %esi, %r14d
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x1efb3
movq %rbx, %rdi
callq 0x6747
testq %rax, %rax
je 0x1efc4
movzbl %r14b, %ecx
cmpb $0x10, %cl
pushq $0x10
popq %rdx
cmovael %edx, %ecx
movzbl %bpl, %esi
cmpb $0x10, %sil
cmovbl %esi, %edx
shlb $0x4, %dl
andb $0xf, %cl
orb %dl, %cl
movb %cl, 0xb0(%rax)
movq %rbx, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0x1f09d
leaq 0x1c18a(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1efc2
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_spinbox.c
// Function: lv_spinbox_set_range
void lv_spinbox_set_range(lv_obj_t * spinbox, int32_t range_min, int32_t range_max)
{
    LV_ASSERT_OBJ(spinbox, LV_OBJX_NAME);

    lv_spinbox_ext_t * ext = lv_obj_get_ext_attr(spinbox);
    if(ext == NULL) return;

    ext->range_max = range_max;
    ext->range_min = range_min;

    if(ext->value > ext->range_max) {
        ext->value = ext->range_max;
        lv_obj_invalidate(spinbox);
    }
    if(ext->value < ext->range_min) {
        ext->value = ext->range_min;
        lv_obj_invalidate(spinbox);
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movl %edx, %r15d
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x1f043
movq %rbx, %rdi
callq 0x6747
testq %rax, %rax
je 0x1f054
movq %rax, %r14
movl %r15d, 0xa4(%rax)
movl %ebp, 0xa8(%rax)
movl 0xa0(%rax), %eax
cmpl %r15d, %eax
jle 0x1f026
movl %r15d, 0xa0(%r14)
movq %rbx, %rdi
callq 0x493a
movl 0xa0(%r14), %eax
movl 0xa8(%r14), %ebp
cmpl %ebp, %eax
jge 0x1f054
movl %ebp, 0xa0(%r14)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x493a
leaq 0x1c0fa(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1f052
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_spinbox.c
// Function: lv_spinbox_set_step
void lv_spinbox_set_step(lv_obj_t * spinbox, uint32_t step)
{
    LV_ASSERT_OBJ(spinbox, LV_OBJX_NAME);

    lv_spinbox_ext_t * ext = lv_obj_get_ext_attr(spinbox);
    if(ext == NULL) return;

    ext->step = step;
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movl %esi, %ebx
movq %rdi, %r14
callq 0x7994
testb %al, %al
je 0x1f08c
movq %r14, %rdi
callq 0x6747
testq %rax, %rax
je 0x1f084
movl %ebx, 0xac(%rax)
addq $0x8, %rsp
popq %rbx
popq %r14
retq
leaq 0x1c0b1(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x1f09b
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_spinbox.c
// Function: lv_spinbox_set_padding_left
void lv_spinbox_set_padding_left(lv_obj_t * spinbox, uint8_t padding)
{
    LV_ASSERT_OBJ(spinbox, LV_OBJX_NAME);

    lv_spinbox_ext_t * ext  = lv_obj_get_ext_attr(spinbox);
    ext->digit_padding_left = padding;
    lv_spinbox_updatevalue(spinbox);
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x1f273
movq %rbx, %rdi
callq 0x6747
andb $0xf, %bpl
movzbl %bpl, %ecx
movl $0xfffff0ff, %edx       # imm = 0xFFFFF0FF
andl 0xb0(%rax), %edx
shll $0x8, %ecx
orl %ecx, %edx
movw %dx, 0xb0(%rax)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x1f09d
leaq 0x1beca(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1f282
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_spinbox.c
// Function: lv_spinbox_step_next
void lv_spinbox_step_next(lv_obj_t * spinbox)
{
    LV_ASSERT_OBJ(spinbox, LV_OBJX_NAME);

    lv_spinbox_ext_t * ext = lv_obj_get_ext_attr(spinbox);

    int32_t new_step = ext->step / 10;
    if((new_step) > 0)
        ext->step = new_step;
    else
        ext->step = 1;

    lv_spinbox_updatevalue(spinbox);
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x1f2f1
movq %rbx, %rdi
callq 0x6747
movq %rax, %rcx
movl 0xac(%rax), %esi
pushq $0xa
popq %rdi
movl %esi, %eax
xorl %edx, %edx
divl %edi
cmpl $0xa, %esi
pushq $0x1
popq %rdx
cmovgel %eax, %edx
movl %edx, 0xac(%rcx)
movq %rbx, %rdi
popq %rbx
jmp 0x1f09d
leaq 0x1be4c(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1f300
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_spinbox.c
// Function: lv_spinbox_step_prev
void lv_spinbox_step_prev(lv_obj_t * spinbox)
{
    LV_ASSERT_OBJ(spinbox, LV_OBJX_NAME);

    lv_spinbox_ext_t * ext = lv_obj_get_ext_attr(spinbox);
    int32_t step_limit;
    step_limit       = LV_MATH_MAX(ext->range_max, (ext->range_min < 0 ? (-ext->range_min) : ext->range_min));
    int32_t new_step = ext->step * 10;
    if(new_step <= step_limit) ext->step = new_step;

    lv_spinbox_updatevalue(spinbox);
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x1f349
movq %rbx, %rdi
callq 0x6747
movl 0xa8(%rax), %ecx
movl %ecx, %edx
negl %edx
cmovsl %ecx, %edx
movl 0xa4(%rax), %ecx
cmpl %edx, %ecx
cmovgl %ecx, %edx
imull $0xa, 0xac(%rax), %ecx
cmpl %edx, %ecx
jg 0x1f340
movl %ecx, 0xac(%rax)
movq %rbx, %rdi
popq %rbx
jmp 0x1f09d
leaq 0x1bdf4(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1f358
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_spinbox.c
// Function: lv_spinbox_increment
void lv_spinbox_increment(lv_obj_t * spinbox)
{
    LV_ASSERT_OBJ(spinbox, LV_OBJX_NAME);

    lv_spinbox_ext_t * ext = lv_obj_get_ext_attr(spinbox);

    if(ext->value + ext->step <= ext->range_max) {
        /*Special mode when zero crossing*/
        if((ext->value + ext->step) > 0 && ext->value < 0) ext->value = -ext->value;
        ext->value += ext->step;

    } else {
        ext->value = ext->range_max;
    }

    lv_spinbox_updatevalue(spinbox);
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x1f3a5
movq %rbx, %rdi
callq 0x6747
movl 0xa0(%rax), %edx
movl 0xa4(%rax), %edi
movl 0xac(%rax), %ecx
leal (%rcx,%rdx), %esi
cmpl %edi, %esi
jg 0x1f396
subl %edx, %ecx
testl %esi, %esi
cmovlel %esi, %ecx
testl %edx, %edx
cmovnsl %esi, %ecx
movl %ecx, %edi
movl %edi, 0xa0(%rax)
movq %rbx, %rdi
popq %rbx
jmp 0x1f09d
leaq 0x1bd98(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1f3b4
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_spinbox.c
// Function: lv_spinbox_decrement
void lv_spinbox_decrement(lv_obj_t * spinbox)
{
    LV_ASSERT_OBJ(spinbox, LV_OBJX_NAME);

    lv_spinbox_ext_t * ext = lv_obj_get_ext_attr(spinbox);

    if(ext->value - ext->step >= ext->range_min) {
        /*Special mode when zero crossing*/
        if((ext->value - ext->step) < 0 && ext->value > 0) ext->value = -ext->value;
        ext->value -= ext->step;
    } else {
        ext->value = ext->range_min;
    }

    lv_spinbox_updatevalue(spinbox);
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x1f40d
movq %rbx, %rdi
callq 0x6747
movl 0xa0(%rax), %ecx
movl 0xa8(%rax), %esi
movl 0xac(%rax), %edx
movl %ecx, %edi
subl %edx, %edi
cmpl %esi, %edi
jl 0x1f3fe
testl %edi, %edi
setns %sil
testl %ecx, %ecx
setle %r8b
orb %sil, %r8b
movl %edi, %esi
jne 0x1f3fe
addl %edx, %ecx
negl %ecx
movl %ecx, %esi
movl %esi, 0xa0(%rax)
movq %rbx, %rdi
popq %rbx
jmp 0x1f09d
leaq 0x1bd30(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1f41c
nop
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_btnm.c
// Function: lv_btnm_set_style
void lv_btnm_set_style(lv_obj_t * btnm, lv_btnm_style_t type, const lv_style_t * style)
{
    LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);

    lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);

    switch(type) {
        case LV_BTNM_STYLE_BG: lv_obj_set_style(btnm, style); break;
        case LV_BTNM_STYLE_BTN_REL:
            ext->styles_btn[LV_BTN_STATE_REL] = style;
            lv_obj_invalidate(btnm);
            break;
        case LV_BTNM_STYLE_BTN_PR:
            ext->styles_btn[LV_BTN_STATE_PR] = style;
            lv_obj_invalidate(btnm);
            break;
        case LV_BTNM_STYLE_BTN_TGL_REL:
            ext->styles_btn[LV_BTN_STATE_TGL_REL] = style;
            lv_obj_invalidate(btnm);
            break;
        case LV_BTNM_STYLE_BTN_TGL_PR:
            ext->styles_btn[LV_BTN_STATE_TGL_PR] = style;
            lv_obj_invalidate(btnm);
            break;
        case LV_BTNM_STYLE_BTN_INA:
            ext->styles_btn[LV_BTN_STATE_INA] = style;
            lv_obj_invalidate(btnm);
            break;
    }
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movq %rdx, %r14
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x202ff
movq %rbx, %rdi
callq 0x6747
cmpb $0x5, %bpl
ja 0x20338
movzbl %bpl, %ecx
leaq 0x1b6c5(%rip), %rdx     # 0x3b9ac
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movq %rbx, %rdi
movq %r14, %rsi
popq %rbx
popq %r14
popq %rbp
jmp 0x5a3d
leaq 0x1ae3e(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x2030e
movq %r14, 0x30(%rax)
jmp 0x2032c
movq %r14, 0x20(%rax)
jmp 0x2032c
movq %r14, 0x28(%rax)
jmp 0x2032c
movq %r14, 0x18(%rax)
jmp 0x2032c
movq %r14, 0x38(%rax)
movq %rbx, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0x493a
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_btnm.c
// Function: lv_btnm_get_style
const lv_style_t * lv_btnm_get_style(const lv_obj_t * btnm, lv_btnm_style_t type)
{
    LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);

    const lv_style_t * style = NULL;
    lv_btnm_ext_t * ext      = lv_obj_get_ext_attr(btnm);

    switch(type) {
        case LV_BTNM_STYLE_BG: style = lv_obj_get_style(btnm); break;
        case LV_BTNM_STYLE_BTN_REL: style = ext->styles_btn[LV_BTN_STATE_REL]; break;
        case LV_BTNM_STYLE_BTN_PR: style = ext->styles_btn[LV_BTN_STATE_PR]; break;
        case LV_BTNM_STYLE_BTN_TGL_REL: style = ext->styles_btn[LV_BTN_STATE_TGL_REL]; break;
        case LV_BTNM_STYLE_BTN_TGL_PR: style = ext->styles_btn[LV_BTN_STATE_TGL_PR]; break;
        case LV_BTNM_STYLE_BTN_INA: style = ext->styles_btn[LV_BTN_STATE_INA]; 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 0x203a9
movq %rbx, %rdi
callq 0x6747
cmpb $0x5, %bpl
ja 0x203d8
movzbl %bpl, %ecx
leaq 0x1b632(%rip), %rdx     # 0x3b9c4
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x6316
leaq 0x1ad94(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x203b8
movq 0x30(%rax), %rax
jmp 0x203da
movq 0x20(%rax), %rax
jmp 0x203da
movq 0x28(%rax), %rax
jmp 0x203da
movq 0x18(%rax), %rax
jmp 0x203da
movq 0x38(%rax), %rax
jmp 0x203da
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_btnm.c
// Function: lv_btnm_set_ctrl_map
void lv_btnm_set_ctrl_map(const lv_obj_t * btnm, const lv_btnm_ctrl_t ctrl_map[])
{
    LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);

    lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
    memcpy(ext->ctrl_bits, ctrl_map, sizeof(lv_btnm_ctrl_t) * ext->btn_cnt);

    lv_btnm_set_map(btnm, ext->map_p);
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rsi, %r14
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x20422
movq %rbx, %rdi
callq 0x6747
movq %rax, %r15
movq 0x10(%rax), %rdi
movzwl 0x40(%rax), %edx
addl %edx, %edx
movq %r14, %rsi
callq 0x20f0
movq (%r15), %rsi
movq %rbx, %rdi
popq %rbx
popq %r14
popq %r15
jmp 0x1fe53
leaq 0x1ad1b(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x20431
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_btnm.c
// Function: lv_btnm_set_pressed
void lv_btnm_set_pressed(const lv_obj_t * btnm, uint16_t id)
{
    LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);

    lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);

    if(id >= ext->btn_cnt && id != LV_BTNM_BTN_NONE) return;

    if(id == ext->btn_id_pr) return;

    ext->btn_id_pr = id;
    lv_obj_invalidate(btnm);
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x20465
movq %rbx, %rdi
callq 0x6747
cmpw $-0x1, %bp
je 0x20458
cmpw %bp, 0x40(%rax)
jbe 0x2045e
cmpw %bp, 0x42(%rax)
jne 0x20476
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
leaq 0x1acd8(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x20474
movw %bp, 0x42(%rax)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x493a
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_btnm.c
// Function: lv_btnm_set_recolor
void lv_btnm_set_recolor(const lv_obj_t * btnm, bool en)
{
    LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);

    lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);

    ext->recolor = en;
    lv_obj_invalidate(btnm);
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x204bb
movq %rbx, %rdi
callq 0x6747
movb 0x46(%rax), %cl
andb $-0x2, %cl
orb %bpl, %cl
movb %cl, 0x46(%rax)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x493a
leaq 0x1ac82(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x204ca
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_btnm.c
// Function: lv_btnm_set_btn_ctrl
void lv_btnm_set_btn_ctrl(const lv_obj_t * btnm, uint16_t btn_id, lv_btnm_ctrl_t ctrl)
{
    LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);

    lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);

    if(btn_id >= ext->btn_cnt) return;

    ext->ctrl_bits[btn_id] |= ctrl;
    invalidate_button_area(btnm, btn_id);
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %edx, %ebp
movl %esi, %r14d
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x20505
movq %rbx, %rdi
callq 0x6747
cmpw %r14w, 0x40(%rax)
jbe 0x20516
movq 0x10(%rax), %rax
movzwl %r14w, %esi
orw %bp, (%rax,%rsi,2)
movq %rbx, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0x2051b
leaq 0x1ac38(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x20514
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_btnm.c
// Function: invalidate_button_area
static void invalidate_button_area(const lv_obj_t * btnm, uint16_t btn_idx)
{
    if(btn_idx == LV_BTNM_BTN_NONE) return;

    lv_area_t btn_area;
    lv_area_t btnm_area;

    lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
    lv_area_copy(&btn_area, &ext->button_areas[btn_idx]);
    lv_obj_get_coords(btnm, &btnm_area);

    /* Convert relative coordinates to absolute */
    btn_area.x1 += btnm_area.x1;
    btn_area.y1 += btnm_area.y1;
    btn_area.x2 += btnm_area.x1;
    btn_area.y2 += btnm_area.y1;

    lv_inv_area(lv_obj_get_disp(btnm), &btn_area);
}

// Assembly:
cmpl $0xffff, %esi           # imm = 0xFFFF
je 0x20589
pushq %rbp
pushq %r14
pushq %rbx
subq $0x20, %rsp
movl %esi, %ebp
movq %rdi, %rbx
callq 0x6747
movq 0x8(%rax), %rax
movzwl %bp, %ecx
movsd (%rax,%rcx,8), %xmm0
movaps %xmm0, (%rsp)
leaq 0x18(%rsp), %r14
movq %rbx, %rdi
movq %r14, %rsi
callq 0x50e5
movd (%r14), %xmm0
pshufd $0x0, %xmm0, %xmm0      # xmm0 = xmm0[0,0,0,0]
paddw (%rsp), %xmm0
leaq 0x10(%rsp), %r14
movq %xmm0, (%r14)
movq %rbx, %rdi
callq 0x4d17
movq %rax, %rdi
movq %r14, %rsi
callq 0x6cff
addq $0x20, %rsp
popq %rbx
popq %r14
popq %rbp
retq