LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0x13c43
movq %r14, %rdi
callq 0x7994
testb %al, %al
je 0x13c54
movq %rbx, %rdi
callq 0x6747
movq %r14, 0x20(%rax)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x493a
leaq 0x274fa(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x13c52
leaq 0x274e9(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x13c63
// File: /workspace/github_c_makefile_star2_O2/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 0x7994
testb %al, %al
je 0x13de3
movq %rbx, %rdi
callq 0x6747
cmpb $0x7, %bpl
ja 0x13e1e
movzbl %bpl, %ecx
leaq 0x278c0(%rip), %rdx     # 0x3b68c
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x6316
leaq 0x2735a(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x13df2
movq 0x40(%rax), %rax
jmp 0x13e20
movq 0x30(%rax), %rax
jmp 0x13e20
movq 0x38(%rax), %rax
jmp 0x13e20
movq 0x58(%rax), %rax
jmp 0x13e20
movq 0x28(%rax), %rax
jmp 0x13e20
movq 0x48(%rax), %rax
jmp 0x13e20
movq 0x50(%rax), %rax
jmp 0x13e20
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_calendar.c
// Function: get_day_of_week
static uint8_t get_day_of_week(uint32_t year, uint32_t month, uint32_t day)
{
    uint32_t a = month < 3 ? 1 : 0;
    uint32_t b = year - a;

    uint32_t day_of_week = (day + (31 * (month - 2 + 12 * a) / 12) + b + (b / 4) - (b / 100) + (b / 400)) % 7;

    return day_of_week;
}

// Assembly:
cmpl $0x3, %esi
sbbl $0x0, %edi
leal 0xc(%rsi), %eax
cmpl $0x3, %esi
cmovael %esi, %eax
imull $0x1f, %eax, %eax
addl $-0x3e, %eax
pushq $0xc
popq %rcx
xorl %edx, %edx
divl %ecx
movl %eax, %ecx
movl %edi, %r8d
shrl $0x2, %r8d
pushq $0x64
popq %rsi
movl %edi, %eax
xorl %edx, %edx
divl %esi
movl %eax, %esi
movl $0x190, %r9d            # imm = 0x190
movl %edi, %eax
xorl %edx, %edx
divl %r9d
addl %edi, %r8d
subl %esi, %r8d
addl %eax, %r8d
leal (%rcx,%r8), %eax
incl %eax
pushq $0x7
popq %rcx
xorl %edx, %edx
divl %ecx
movl %edx, %eax
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_calendar.c
// Function: get_month_length
static uint8_t get_month_length(int32_t year, int32_t month)
{
    month--; /*Range of months id [1..12] but range of indexes is [0..11]*/
    if(month < 0) {
        year--;             /*Already in the previous year (won't be less then -12 to skip a whole year)*/
        month = 12 + month; /*`month` is negative, the result will be < 12*/
    }
    if(month >= 12) {
        year++;
        month -= 12;
    }

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

// Assembly:
xorl %eax, %eax
xorl %edx, %edx
testl %esi, %esi
setg %al
setle %r8b
negl %eax
orl $0xb, %eax
leal (%rax,%rsi), %r10d
xorl %ecx, %ecx
cmpl $0xc, %r10d
setge %r9b
leal -0xc(%rax,%rsi), %eax
cmovll %r10d, %eax
cmpl $0x1, %eax
jne 0x13ed8
movb %r8b, %dl
subl %edx, %edi
movb %r9b, %cl
addl %edi, %ecx
movb $0x1c, %al
testb $0x3, %cl
je 0x13eed
retq
pushq $0x7
popq %rcx
cltd
idivl %ecx
movsbl %dl, %eax
movb $0x2, %cl
idivb %cl
movsbl %ah, %ecx
movb $0x1f, %al
subb %cl, %al
retq
pushq $0x64
popq %rsi
movl %ecx, %eax
xorl %edx, %edx
divl %esi
movb $0x1d, %al
testl %edx, %edx
jne 0x13ed7
movl $0x190, %esi            # imm = 0x190
movl %ecx, %eax
xorl %edx, %edx
divl %esi
testl %edx, %edx
sete %al
orb $0x1c, %al
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_calendar.c
// Function: is_highlighted
static bool is_highlighted(lv_obj_t * calendar, int32_t year, int32_t month, int32_t day)
{
    lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);

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

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

    return false;
}

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

    lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);

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

    return res;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdx, %r14
movl %esi, %ebp
movq %rdi, %r15
callq *0x4a22a(%rip)          # 0x5e388
movl %eax, %ebx
cmpb $0x1, %al
jne 0x141d7
cmpb $0x7, %bpl
jne 0x14183
leaq 0x275b2(%rip), %rsi     # 0x3b723
movq %r14, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x684b
movq %r15, %rdi
callq 0x6747
movq %rax, %r14
movb $0x1, %bl
cmpb $0x6, %bpl
je 0x141cd
movzbl %bpl, %eax
testl %eax, %eax
jne 0x141d7
movq %r14, %rdi
callq 0x27db9
movq %rax, %r15
testq %rax, %rax
je 0x141c3
movq (%r15), %rdi
callq 0x27a7a
movq %r14, %rdi
movq %r15, %rsi
callq 0x27e93
jmp 0x141a6
movq %r14, %rdi
callq 0x27eb0
jmp 0x141d7
movzwl 0x58(%r14), %eax
movw %ax, 0x5c(%r15)
movl %ebx, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_chart.c
// Function: lv_chart_add_series
lv_chart_series_t * lv_chart_add_series(lv_obj_t * chart, lv_color_t color)
{
    LV_ASSERT_OBJ(chart, LV_OBJX_NAME);

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

    lv_coord_t def = LV_CHART_POINT_DEF;

    if(ser == NULL) return NULL;

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

    ser->start_point = 0;

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

    ext->series.num++;

    return ser;
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x14f55
movq %rbx, %rdi
callq 0x6747
movq %rax, %r14
movq %rax, %rdi
callq 0x27d00
movq %rax, %rbx
movq %rax, %rdi
callq 0x7994
testb %al, %al
je 0x14f66
testq %rbx, %rbx
je 0x14f9e
movw %bp, 0x8(%rbx)
movzwl 0x1e(%r14), %edi
addl %edi, %edi
callq 0x279f9
movq %rax, (%rbx)
movq %rax, %rdi
callq 0x7994
movq (%rbx), %rsi
testb %al, %al
je 0x14f77
testq %rsi, %rsi
je 0x14f8b
andw $0x0, 0xa(%rbx)
xorl %eax, %eax
cmpw 0x1e(%r14), %ax
jae 0x14f85
movw $0x83e8, (%rsi,%rax,2)  # imm = 0x83E8
incq %rax
jmp 0x14f43
leaq 0x261e8(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x14f64
leaq 0x260d3(%rip), %rdi     # 0x3b040
movq %rbx, %rsi
callq 0x7b01
jmp 0x14f75
leaq 0x260c2(%rip), %rdi     # 0x3b040
callq 0x7b01
jmp 0x14f83
incb 0x5e(%r14)
jmp 0x14fa0
movq %r14, %rdi
movq %rbx, %rsi
callq 0x27e1c
movq %rbx, %rdi
callq 0x27a7a
xorl %ebx, %ebx
movq %rbx, %rax
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_chart.c
// Function: lv_chart_clear_serie
void lv_chart_clear_serie(lv_obj_t * chart, lv_chart_series_t * serie)
{
    LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
    LV_ASSERT_NULL(serie);

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

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

    serie->start_point = 0;
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %rbx
movq %rdi, %r14
callq 0x7994
testb %al, %al
je 0x14ffd
movq %rbx, %rdi
callq 0x7994
testb %al, %al
je 0x1500e
testq %r14, %r14
sete %al
testq %rbx, %rbx
sete %cl
orb %al, %cl
jne 0x15024
movq %r14, %rdi
callq 0x6747
testq %rax, %rax
je 0x15024
xorl %ecx, %ecx
movzwl 0x1e(%rax), %edx
cmpq %rdx, %rcx
jae 0x1501f
movq (%rbx), %rdx
movw $0x83e8, (%rdx,%rcx,2)  # imm = 0x83E8
incq %rcx
jmp 0x14fe6
leaq 0x26140(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x1500c
leaq 0x2612f(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1501d
andw $0x0, 0xa(%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_chart.c
// Function: lv_chart_set_div_line_count
void lv_chart_set_div_line_count(lv_obj_t * chart, uint8_t hdiv, uint8_t vdiv)
{
    LV_ASSERT_OBJ(chart, LV_OBJX_NAME);

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

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

    lv_obj_invalidate(chart);
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %edx, %ebp
movl %esi, %r14d
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x1505a
movq %rbx, %rdi
callq 0x6747
cmpb %r14b, 0x1c(%rax)
jne 0x1506b
cmpb %bpl, 0x1d(%rax)
jne 0x1506b
popq %rbx
popq %r14
popq %rbp
retq
leaq 0x260e3(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x15069
movb %r14b, 0x1c(%rax)
movb %bpl, 0x1d(%rax)
movq %rbx, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0x493a
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_chart.c
// Function: lv_chart_set_range
void lv_chart_set_range(lv_obj_t * chart, lv_coord_t ymin, lv_coord_t ymax)
{
    LV_ASSERT_OBJ(chart, LV_OBJX_NAME);

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

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

    lv_chart_refresh(chart);
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %edx, %ebp
movl %esi, %r14d
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x150ae
movq %rbx, %rdi
callq 0x6747
cmpw %r14w, 0x18(%rax)
jne 0x150bf
cmpw %bp, 0x1a(%rax)
jne 0x150bf
popq %rbx
popq %r14
popq %rbp
retq
leaq 0x2608f(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x150bd
movw %r14w, 0x18(%rax)
movw %bp, 0x1a(%rax)
movq %rbx, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0x150d4
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_chart.c
// Function: lv_chart_set_type
void lv_chart_set_type(lv_obj_t * chart, lv_chart_type_t type)
{
    LV_ASSERT_OBJ(chart, LV_OBJX_NAME);

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

    ext->type = type;

    lv_chart_refresh(chart);
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x15121
movq %rbx, %rdi
callq 0x6747
cmpb %bpl, 0x20(%rax)
jne 0x15132
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
leaq 0x2601c(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x15130
movb %bpl, 0x20(%rax)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x150d4
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_chart.c
// Function: lv_chart_set_series_opa
void lv_chart_set_series_opa(lv_obj_t * chart, lv_opa_t opa)
{
    LV_ASSERT_OBJ(chart, LV_OBJX_NAME);

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

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

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x15349
movq %rbx, %rdi
callq 0x6747
cmpb %bpl, 0x5f(%rax)
jne 0x1535a
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
leaq 0x25df4(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x15358
movb %bpl, 0x5f(%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_chart.c
// Function: lv_chart_set_series_width
void lv_chart_set_series_width(lv_obj_t * chart, lv_coord_t width)
{
    LV_ASSERT_OBJ(chart, LV_OBJX_NAME);

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

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

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x15392
movq %rbx, %rdi
callq 0x6747
cmpw %bp, 0x5c(%rax)
jne 0x153a3
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
leaq 0x25dab(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x153a1
movw %bp, 0x5c(%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_chart.c
// Function: lv_chart_set_series_darking
void lv_chart_set_series_darking(lv_obj_t * chart, lv_opa_t dark_eff)
{
    LV_ASSERT_OBJ(chart, LV_OBJX_NAME);

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

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

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x153db
movq %rbx, %rdi
callq 0x6747
cmpb %bpl, 0x60(%rax)
jne 0x153ec
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
leaq 0x25d62(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x153ea
movb %bpl, 0x60(%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_chart.c
// Function: lv_chart_init_points
void lv_chart_init_points(lv_obj_t * chart, lv_chart_series_t * ser, lv_coord_t y)
{
    LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
    LV_ASSERT_NULL(ser);

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

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %edx, %ebp
movq %rsi, %r14
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x1543e
movq %r14, %rdi
callq 0x7994
testb %al, %al
je 0x1544f
movq %rbx, %rdi
callq 0x6747
xorl %ecx, %ecx
movzwl 0x1e(%rax), %edx
cmpq %rdx, %rcx
jae 0x15460
movq (%r14), %rdx
movw %bp, (%rdx,%rcx,2)
incq %rcx
jmp 0x15429
leaq 0x25cff(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1544d
leaq 0x25cee(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x1545e
andw $0x0, 0xa(%r14)
movq %rbx, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0x150d4
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_chart.c
// Function: lv_chart_set_points
void lv_chart_set_points(lv_obj_t * chart, lv_chart_series_t * ser, lv_coord_t y_array[])
{
    LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
    LV_ASSERT_NULL(ser);

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

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rdx, %r15
movq %rsi, %r14
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x154c1
movq %r14, %rdi
callq 0x7994
testb %al, %al
je 0x154d2
movq %rbx, %rdi
callq 0x6747
movq (%r14), %rdi
movzwl 0x1e(%rax), %edx
addl %edx, %edx
movq %r15, %rsi
callq 0x20f0
andw $0x0, 0xa(%r14)
movq %rbx, %rdi
popq %rbx
popq %r14
popq %r15
jmp 0x150d4
leaq 0x25c7c(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x154d0
leaq 0x25c6b(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x154e1
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_chart.c
// Function: lv_chart_inv_lines
static void lv_chart_inv_lines(lv_obj_t * chart, uint16_t i)
{
    lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);

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

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

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

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

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

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

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x157f3
movq %rbx, %rdi
callq 0x6747
movb 0x5a(%rax), %cl
movl %ecx, %edx
andb $0x1, %dl
cmpb %bpl, %dl
jne 0x15804
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
leaq 0x2594a(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x15802
andb $0x1, %bpl
andb $-0x2, %cl
orb %bpl, %cl
movb %cl, 0x5a(%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_chart.c
// Function: lv_chart_set_x_tick_length
void lv_chart_set_x_tick_length(lv_obj_t * chart, uint8_t major_tick_len, uint8_t minor_tick_len)
{
    LV_ASSERT_OBJ(chart, LV_OBJX_NAME);

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

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %edx, %ebx
movl %esi, %ebp
movq %rdi, %r14
callq 0x7994
testb %al, %al
je 0x15847
movq %r14, %rdi
callq 0x6747
movb %bpl, 0x42(%rax)
movb %bl, 0x43(%rax)
popq %rbx
popq %r14
popq %rbp
retq
leaq 0x258f6(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x15856
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_chart.c
// Function: lv_chart_set_y_tick_length
void lv_chart_set_y_tick_length(lv_obj_t * chart, uint8_t major_tick_len, uint8_t minor_tick_len)
{
    LV_ASSERT_OBJ(chart, LV_OBJX_NAME);

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

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %edx, %ebx
movl %esi, %ebp
movq %rdi, %r14
callq 0x7994
testb %al, %al
je 0x15880
movq %r14, %rdi
callq 0x6747
movb %bpl, 0x32(%rax)
movb %bl, 0x33(%rax)
popq %rbx
popq %r14
popq %rbp
retq
leaq 0x258bd(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x1588f
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_chart.c
// Function: lv_chart_set_secondary_y_tick_length
void lv_chart_set_secondary_y_tick_length(lv_obj_t * chart, uint8_t major_tick_len, uint8_t minor_tick_len)
{
    LV_ASSERT_OBJ(chart, LV_OBJX_NAME);

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

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %edx, %ebx
movl %esi, %ebp
movq %rdi, %r14
callq 0x7994
testb %al, %al
je 0x158b9
movq %r14, %rdi
callq 0x6747
movb %bpl, 0x52(%rax)
movb %bl, 0x53(%rax)
popq %rbx
popq %r14
popq %rbp
retq
leaq 0x25884(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x158c8
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_chart.c
// Function: lv_chart_set_x_tick_texts
void lv_chart_set_x_tick_texts(lv_obj_t * chart, const char * list_of_values, uint8_t num_tick_marks,
                               lv_chart_axis_options_t options)
{
    LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
    LV_ASSERT_NULL(list_of_values);

    lv_chart_ext_t * ext       = lv_obj_get_ext_attr(chart);
    ext->x_axis.num_tick_marks = num_tick_marks;
    ext->x_axis.list_of_values = list_of_values;
    ext->x_axis.options        = options;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movl %ecx, %ebp
movl %edx, %r14d
movq %rsi, %rbx
movq %rdi, %r15
callq 0x7994
testb %al, %al
je 0x15910
movq %rbx, %rdi
callq 0x7994
testb %al, %al
je 0x15921
movq %r15, %rdi
callq 0x6747
movb %r14b, 0x41(%rax)
movq %rbx, 0x38(%rax)
movb %bpl, 0x40(%rax)
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
leaq 0x2582d(%rip), %rdi     # 0x3b144
movq %r15, %rsi
callq 0x7b01
jmp 0x1591f
leaq 0x2581c(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x15930
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_chart.c
// Function: lv_chart_set_y_tick_texts
void lv_chart_set_y_tick_texts(lv_obj_t * chart, const char * list_of_values, uint8_t num_tick_marks,
                               lv_chart_axis_options_t options)
{
    LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
    LV_ASSERT_NULL(list_of_values);

    lv_chart_ext_t * ext       = lv_obj_get_ext_attr(chart);
    ext->y_axis.num_tick_marks = num_tick_marks;
    ext->y_axis.list_of_values = list_of_values;
    ext->y_axis.options        = options;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movl %ecx, %ebp
movl %edx, %r14d
movq %rsi, %rbx
movq %rdi, %r15
callq 0x7994
testb %al, %al
je 0x15978
movq %rbx, %rdi
callq 0x7994
testb %al, %al
je 0x15989
movq %r15, %rdi
callq 0x6747
movb %r14b, 0x31(%rax)
movq %rbx, 0x28(%rax)
movb %bpl, 0x30(%rax)
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
leaq 0x257c5(%rip), %rdi     # 0x3b144
movq %r15, %rsi
callq 0x7b01
jmp 0x15987
leaq 0x257b4(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x15998
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_chart.c
// Function: lv_chart_set_secondary_y_tick_texts
void lv_chart_set_secondary_y_tick_texts(lv_obj_t * chart, const char * list_of_values, uint8_t num_tick_marks,
                                        lv_chart_axis_options_t options)
{
    LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
    LV_ASSERT_NULL(list_of_values);

    lv_chart_ext_t * ext       = lv_obj_get_ext_attr(chart);
    ext->secondary_y_axis.num_tick_marks = num_tick_marks;
    ext->secondary_y_axis.list_of_values = list_of_values;
    ext->secondary_y_axis.options        = options;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movl %ecx, %ebp
movl %edx, %r14d
movq %rsi, %rbx
movq %rdi, %r15
callq 0x7994
testb %al, %al
je 0x159e0
movq %rbx, %rdi
callq 0x7994
testb %al, %al
je 0x159f1
movq %r15, %rdi
callq 0x6747
movb %r14b, 0x51(%rax)
movq %rbx, 0x48(%rax)
movb %bpl, 0x50(%rax)
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
leaq 0x2575d(%rip), %rdi     # 0x3b144
movq %r15, %rsi
callq 0x7b01
jmp 0x159ef
leaq 0x2574c(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x15a00
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_chart.c
// Function: lv_chart_set_margin
void lv_chart_set_margin(lv_obj_t * chart, uint16_t margin)
{
    LV_ASSERT_OBJ(chart, LV_OBJX_NAME);

    lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
    ext->margin          = margin;
    lv_obj_refresh_ext_draw_pad(chart);
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x15a2d
movq %rbx, %rdi
callq 0x6747
movw %bp, 0x58(%rax)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x617f
leaq 0x25710(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x15a3c
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_chart.c
// Function: lv_chart_create_label_iter
static lv_chart_label_iterator_t lv_chart_create_label_iter(const char * list, uint8_t iterator_dir)
{
    lv_chart_label_iterator_t iterator = {0};
    uint8_t j;

    iterator.list_start = list;

    /* count number of list items */
    for(j = 0; list[j] != '\0'; j++) {
            if(list[j] == '\n')
               iterator.items_left++;
    }

    if(iterator_dir == LV_CHART_LABEL_ITERATOR_FORWARD) {
        iterator.is_reverse_iter = 0;
        iterator.current_pos = list;
    } else {
        iterator.is_reverse_iter = 1;
        // -1 to skip '\0' at the end of the string
        iterator.current_pos = list + j - 1;
    }
    iterator.items_left++;
    return iterator;
}

// Assembly:
movq %rdi, %rax
andq $0x0, 0x10(%rdi)
movq %rsi, (%rdi)
xorl %ecx, %ecx
xorl %edi, %edi
movzbl %dil, %edi
movzbl (%rsi,%rdi), %r8d
cmpl $0xa, %r8d
je 0x160bb
testl %r8d, %r8d
jne 0x160bd
jmp 0x160c2
incb %cl
incb %dil
jmp 0x160a5
cmpb $0x1, %dl
leaq -0x1(%rsi,%rdi), %rdx
cmoveq %rsi, %rdx
setne 0x11(%rax)
movq %rdx, 0x8(%rax)
incb %cl
movb %cl, 0x10(%rax)
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_chart.c
// Function: lv_chart_get_next_label
static void lv_chart_get_next_label(lv_chart_label_iterator_t * iterator, char * buf)
{
    uint8_t label_len = 0;
    if (iterator->is_reverse_iter) {
        const char * label_start;
        /* count the length of the current label*/
        while ((*iterator->current_pos != '\n') &&
                (iterator->current_pos != iterator->list_start)) {
            iterator->current_pos--;
            label_len++;
        }

        label_start = iterator->current_pos;

        if (*iterator->current_pos == '\n') {
            /* do not copy \n symbol, +1 to skip it*/
            label_start++;
            /* skip newline*/
            iterator->current_pos--;
        } else {
            /* it is last label in list (first one from the beginning )*/
            label_len++;
        }

        /* do not allow output buffer overflow */
        if (label_len > LV_CHART_AXIS_TICK_LABEL_MAX_LEN) {
            label_len = LV_CHART_AXIS_TICK_LABEL_MAX_LEN;
        }

        strncpy(buf, label_start, label_len);
    } else {
        /* search for tick string */
        while(iterator->current_pos[label_len] != '\n' &&
            iterator->current_pos[label_len] != '\0') {
            /* do not overflow the buffer, but move to the end of the current label */
            if(label_len < LV_CHART_AXIS_TICK_LABEL_MAX_LEN) {
                buf[label_len] = iterator->current_pos[label_len];
                label_len++;
            } else {
                label_len++;
            }
        }

        iterator->current_pos += label_len;

        /* do not allow output buffer overflow */
        if (label_len > LV_CHART_AXIS_TICK_LABEL_MAX_LEN) {
            label_len = LV_CHART_AXIS_TICK_LABEL_MAX_LEN;
        }

        if(*iterator->current_pos == '\n') iterator->current_pos++;
    }

    /* terminate the string */
    buf[label_len] = '\0';
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movq %rsi, %rbx
cmpb $0x0, 0x11(%rdi)
je 0x16103
movq 0x8(%rdi), %rsi
movb $0x1, %al
cmpb $0xa, (%rsi)
je 0x16143
cmpq (%rdi), %rsi
je 0x16153
decq %rsi
movq %rsi, 0x8(%rdi)
incb %al
jmp 0x160ee
xorl %eax, %eax
movq 0x8(%rdi), %rcx
movzbl %al, %eax
movzbl (%rcx,%rax), %edx
testl %edx, %edx
je 0x16124
cmpl $0xa, %edx
je 0x16124
cmpb $0x13, %al
ja 0x16120
movb %dl, (%rbx,%rax)
incb %al
jmp 0x16105
leaq (%rcx,%rax), %rdx
movq %rdx, 0x8(%rdi)
cmpb $0x14, %al
pushq $0x14
popq %rbp
cmovbl %eax, %ebp
cmpb $0xa, (%rcx,%rax)
jne 0x1616a
incq %rdx
movq %rdx, 0x8(%rdi)
jmp 0x1616a
leaq 0x1(%rsi), %rcx
decq %rsi
movq %rsi, 0x8(%rdi)
decb %al
movq %rcx, %rsi
movzbl %al, %eax
cmpb $0x14, %al
pushq $0x14
popq %rbp
cmovbl %eax, %ebp
movzbl %bpl, %edx
movq %rbx, %rdi
callq 0x2030
movzbl %bpl, %eax
movb $0x0, (%rbx,%rax)
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
nopl (%rax)
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_canvas.c
// Function: lv_canvas_create
lv_obj_t * lv_canvas_create(lv_obj_t * par, const lv_obj_t * copy)
{
    LV_LOG_TRACE("canvas create started");

    /*Create the ancestor of canvas*/
    lv_obj_t * new_canvas = lv_img_create(par, copy);
    LV_ASSERT_MEM(new_canvas);
    if(new_canvas == NULL) return NULL;

    /*Allocate the canvas type specific extended data*/
    lv_canvas_ext_t * ext = lv_obj_allocate_ext_attr(new_canvas, sizeof(lv_canvas_ext_t));
    LV_ASSERT_MEM(ext);
    if(ext == NULL) return NULL;
    if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_canvas);
    if(ancestor_design == NULL) ancestor_design = lv_obj_get_design_cb(new_canvas);

    /*Initialize the allocated 'ext' */
    ext->dsc.header.always_zero = 0;
    ext->dsc.header.cf          = LV_IMG_CF_TRUE_COLOR;
    ext->dsc.header.h           = 0;
    ext->dsc.header.w           = 0;
    ext->dsc.data_size          = 0;
    ext->dsc.data               = NULL;

    lv_img_set_src(new_canvas, &ext->dsc);

    /*The signal and design functions are not copied so set them here*/
    lv_obj_set_signal_cb(new_canvas, lv_canvas_signal);

    /*Init the new canvas canvas*/
    if(copy == NULL) {

    }
    /*Copy an existing canvas*/
    else {
        /*Refresh the style with new signal function*/
        lv_obj_refresh_style(new_canvas);
    }

    LV_LOG_INFO("canvas created");

    return new_canvas;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rsi, %r14
callq 0x21a28
movq %rax, %rbx
movq %rax, %rdi
callq 0x7994
testb %al, %al
je 0x16245
testq %rbx, %rbx
je 0x16256
pushq $0x28
popq %rsi
movq %rbx, %rdi
callq 0x6146
movq %rax, %r15
movq %rax, %rdi
callq 0x7994
testb %al, %al
je 0x16261
testq %r15, %r15
je 0x16256
cmpq $0x0, 0x481bc(%rip)     # 0x5e390
jne 0x161e5
movq %rbx, %rdi
callq 0x66db
movq %rax, 0x481ab(%rip)     # 0x5e390
cmpq $0x0, 0x481ab(%rip)     # 0x5e398
jne 0x161fe
movq %rbx, %rdi
callq 0x66ff
movq %rax, 0x4819a(%rip)     # 0x5e398
movq %r15, %rsi
movl $0x300, %eax            # imm = 0x300
andl 0x18(%r15), %eax
orl $0x4, %eax
movl %eax, 0x18(%r15)
andl $0x0, 0x1c(%r15)
addq $0x18, %rsi
andq $0x0, 0x20(%r15)
movq %rbx, %rdi
callq 0x21e19
leaq 0x44(%rip), %rsi        # 0x16272
movq %rbx, %rdi
callq 0x60e6
testq %r14, %r14
je 0x16258
movq %rbx, %rdi
callq 0x5ae7
jmp 0x16258
leaq 0x24df4(%rip), %rdi     # 0x3b040
movq %rbx, %rsi
callq 0x7b01
jmp 0x16254
xorl %ebx, %ebx
movq %rbx, %rax
popq %rbx
popq %r14
popq %r15
retq
leaq 0x24dd8(%rip), %rdi     # 0x3b040
movq %r15, %rsi
callq 0x7b01
jmp 0x16270
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_canvas.c
// Function: lv_canvas_set_buffer
void lv_canvas_set_buffer(lv_obj_t * canvas, void * buf, lv_coord_t w, lv_coord_t h, lv_img_cf_t cf)
{
    LV_ASSERT_OBJ(canvas, LV_OBJX_NAME);
    LV_ASSERT_NULL(buf);

    lv_canvas_ext_t * ext = lv_obj_get_ext_attr(canvas);

    ext->dsc.header.cf = cf;
    ext->dsc.header.w  = w;
    ext->dsc.header.h  = h;
    ext->dsc.data      = buf;
    ext->dsc.data_size = (lv_img_color_format_get_px_size(cf) * w * h) / 8;

    lv_img_set_src(canvas, &ext->dsc);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movl %r8d, %ebp
movl %ecx, %r13d
movl %edx, %r15d
movq %rsi, %r14
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x16373
movq %r14, %rdi
callq 0x7994
testb %al, %al
je 0x16384
movq %rbx, %rdi
callq 0x6747
movq %rax, %r12
addq $0x18, %rax
movq %rax, 0x10(%rsp)
movl %ebp, %eax
andb $0x1f, %al
movzbl %al, %eax
movl $0x3e0, %ecx            # imm = 0x3E0
andl 0x18(%r12), %ecx
movswl %r15w, %edx
movl %edx, 0xc(%rsp)
shll $0xa, %edx
movswl %r13w, %r15d
movl %r15d, %esi
shll $0x15, %esi
andl $0x1ffc00, %edx         # imm = 0x1FFC00
orl %esi, %edx
orl %eax, %edx
orl %ecx, %edx
movl %edx, 0x18(%r12)
movq %r14, 0x20(%r12)
movzbl %bpl, %edi
callq 0x38514
movzbl %al, %eax
imull 0xc(%rsp), %r15d
imull %eax, %r15d
pushq $0x8
popq %rcx
movl %r15d, %eax
cltd
idivl %ecx
movl %eax, 0x1c(%r12)
movq %rbx, %rdi
movq 0x10(%rsp), %rsi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x21e19
leaq 0x24dca(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x16382
leaq 0x24db9(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x16393
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_canvas.c
// Function: lv_canvas_set_px
void lv_canvas_set_px(lv_obj_t * canvas, lv_coord_t x, lv_coord_t y, lv_color_t c)
{
    LV_ASSERT_OBJ(canvas, LV_OBJX_NAME);

    lv_canvas_ext_t * ext = lv_obj_get_ext_attr(canvas);

    lv_img_buf_set_px_color(&ext->dsc, x, y, c);
    lv_obj_invalidate(canvas);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movl %ecx, %ebp
movl %edx, %r14d
movl %esi, %r15d
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x163dd
movq %rbx, %rdi
callq 0x6747
leaq 0x18(%rax), %rdi
movswl %r15w, %esi
movswl %r14w, %edx
movl %ebp, %ecx
callq 0x3864c
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x493a
leaq 0x24d60(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x163ec
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_canvas.c
// Function: lv_canvas_set_palette
void lv_canvas_set_palette(lv_obj_t * canvas, uint8_t id, lv_color_t c)
{
    LV_ASSERT_OBJ(canvas, LV_OBJX_NAME);

    lv_canvas_ext_t * ext = lv_obj_get_ext_attr(canvas);

    lv_img_buf_set_palette(&ext->dsc, id, c);
    lv_obj_invalidate(canvas);
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %edx, %ebp
movl %esi, %r14d
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x16426
movq %rbx, %rdi
callq 0x6747
leaq 0x18(%rax), %rdi
movzbl %r14b, %esi
movl %ebp, %edx
callq 0x38914
movq %rbx, %rdi
popq %rbx
popq %r14
popq %rbp
jmp 0x493a
leaq 0x24d17(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x16435
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_canvas.c
// Function: lv_canvas_get_px
lv_color_t lv_canvas_get_px(lv_obj_t * canvas, lv_coord_t x, lv_coord_t y)
{
    LV_ASSERT_OBJ(canvas, LV_OBJX_NAME);

    lv_canvas_ext_t * ext    = lv_obj_get_ext_attr(canvas);
    const lv_style_t * style = lv_canvas_get_style(canvas, LV_CANVAS_STYLE_MAIN);

    return lv_img_buf_get_px_color(&ext->dsc, x, y, style);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movl %edx, %ebx
movl %esi, %ebp
movq %rdi, %r14
callq 0x7994
testb %al, %al
je 0x164c1
movq %r14, %rdi
callq 0x6747
movq %rax, %r15
movq %r14, %rdi
xorl %esi, %esi
callq 0x164d2
addq $0x18, %r15
movswl %bp, %esi
movswl %bx, %edx
movq %r15, %rdi
movq %rax, %rcx
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x383d3
leaq 0x24c7c(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x164d0
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_canvas.c
// Function: lv_canvas_get_style
const lv_style_t * lv_canvas_get_style(const lv_obj_t * canvas, lv_canvas_style_t type)
{
    LV_ASSERT_OBJ(canvas, LV_OBJX_NAME);

    const lv_style_t * style = NULL;

    switch(type) {
        case LV_CANVAS_STYLE_MAIN: style = lv_img_get_style(canvas, LV_IMG_STYLE_MAIN); break;
        default: style = NULL;
    }

    return style;
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x164f1
testb %bpl, %bpl
je 0x16502
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
leaq 0x24c4c(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x16500
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %rbp
jmp 0x6316
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_canvas.c
// Function: lv_canvas_copy_buf
void lv_canvas_copy_buf(lv_obj_t * canvas, const void * to_copy, lv_coord_t x, lv_coord_t y, lv_coord_t w, lv_coord_t h)
{
    LV_ASSERT_OBJ(canvas, LV_OBJX_NAME);
    LV_ASSERT_NULL(to_copy);

    lv_canvas_ext_t * ext = lv_obj_get_ext_attr(canvas);
    if(x + w >= (lv_coord_t)ext->dsc.header.w || y + h >= (lv_coord_t)ext->dsc.header.h) {
        LV_LOG_WARN("lv_canvas_copy_buf: x or y out of the canvas");
        return;
    }

    uint32_t px_size   = lv_img_color_format_get_px_size(ext->dsc.header.cf) >> 3;
    uint32_t px        = ext->dsc.header.w * y * px_size + x * px_size;
    uint8_t * to_copy8 = (uint8_t *)to_copy;
    lv_coord_t i;
    for(i = 0; i < h; i++) {
        memcpy((void *)&ext->dsc.data[px], to_copy8, w * px_size);
        px += ext->dsc.header.w * px_size;
        to_copy8 += w * px_size;
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movl %r9d, %ebp
movl %r8d, %r15d
movl %ecx, %r12d
movl %edx, %r13d
movq %rsi, %rbx
movq %rdi, %r14
callq 0x7994
testb %al, %al
je 0x16633
movq %rbx, %rdi
callq 0x7994
testb %al, %al
je 0x16644
movl %ebp, 0xc(%rsp)
movq %r14, %rdi
callq 0x6747
movq %rax, %r14
movswl %r13w, %edx
movswl %r15w, %r15d
leal (%r15,%rdx), %eax
movl 0x18(%r14), %edi
movl %edi, %ecx
shrl $0xa, %ecx
andl $0x7ff, %ecx            # imm = 0x7FF
cmpl %ecx, %eax
jge 0x16655
movswl %r12w, %ebp
movswl 0xc(%rsp), %eax
addl %ebp, %eax
movl %edi, %ecx
shrl $0x15, %ecx
cmpl %ecx, %eax
jge 0x16655
andl $0x1f, %edi
movq %rdx, 0x10(%rsp)
callq 0x38514
shrb $0x3, %al
movzbl %al, %r12d
movl 0x18(%r14), %r13d
shrl $0xa, %r13d
andl $0x7ff, %r13d           # imm = 0x7FF
imull %ebp, %r13d
addl 0x10(%rsp), %r13d
imull %r12d, %r13d
imull %r12d, %r15d
xorl %ebp, %ebp
movl 0xc(%rsp), %eax
testw %ax, %ax
cmovgl %eax, %ebp
subw $0x1, %bp
jb 0x16655
movl %r13d, %edi
addq 0x20(%r14), %rdi
movq %rbx, %rsi
movq %r15, %rdx
callq 0x20f0
movl 0x18(%r14), %eax
shrl $0xa, %eax
andl $0x7ff, %eax            # imm = 0x7FF
imull %r12d, %eax
addl %eax, %r13d
addq %r15, %rbx
jmp 0x16603
leaq 0x24b0a(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x16642
leaq 0x24af9(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x16653
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_canvas.c
// Function: lv_canvas_fill_bg
void lv_canvas_fill_bg(lv_obj_t * canvas, lv_color_t color)
{
    LV_ASSERT_OBJ(canvas, LV_OBJX_NAME);

    lv_img_dsc_t * dsc = lv_canvas_get_img(canvas);

    uint32_t x = dsc->header.w * dsc->header.h;
    uint32_t y;
    for(y = 0; y < dsc->header.h; y++) {
        for(x = 0; x < dsc->header.w; x++) {
            lv_img_buf_set_px_color(dsc, x, y, color);
        }
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movl %esi, %ebx
movq %rdi, %r14
callq 0x7994
testb %al, %al
je 0x16d55
movq %r14, %rdi
callq 0x16510
movq %rax, %r14
movl (%rax), %eax
xorl %r15d, %r15d
movl %eax, %ecx
shrl $0x15, %ecx
cmpl %ecx, %r15d
jae 0x16d66
xorl %r12d, %r12d
movswl %r15w, %ebp
movl %eax, %ecx
shrl $0xa, %ecx
andl $0x7ff, %ecx            # imm = 0x7FF
cmpl %ecx, %r12d
jae 0x16d50
movswl %r12w, %esi
movq %r14, %rdi
movl %ebp, %edx
movl %ebx, %ecx
callq 0x3864c
incl %r12d
movl (%r14), %eax
jmp 0x16d28
incl %r15d
jmp 0x16d17
leaq 0x243e8(%rip), %rdi     # 0x3b144
movq %r14, %rsi
callq 0x7b01
jmp 0x16d64
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_gauge.c
// Function: lv_gauge_signal
static lv_res_t lv_gauge_signal(lv_obj_t * gauge, lv_signal_t sign, void * param)
{
    lv_res_t res;

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

    lv_gauge_ext_t * ext = lv_obj_get_ext_attr(gauge);
    if(sign == LV_SIGNAL_CLEANUP) {
        lv_mem_free(ext->values);
        ext->values = NULL;
    }

    return res;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdx, %r14
movl %esi, %ebx
movq %rdi, %r15
callq *0x46a38(%rip)          # 0x5e3a0
movl %eax, %ebp
cmpb $0x1, %al
jne 0x179ac
cmpb $0x7, %bl
jne 0x1798c
leaq 0x23dbc(%rip), %rsi     # 0x3b736
movq %r14, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x684b
movq %r15, %rdi
callq 0x6747
movb $0x1, %bpl
testb %bl, %bl
jne 0x179ac
movq %rax, %r14
movq 0x10(%rax), %rdi
callq 0x27a7a
andq $0x0, 0x10(%r14)
movl %ebp, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_gauge.c
// Function: lv_gauge_set_scale
void lv_gauge_set_scale(lv_obj_t * gauge, uint16_t angle, uint8_t line_cnt, uint8_t label_cnt)
{
    LV_ASSERT_OBJ(gauge, LV_OBJX_NAME);

    lv_lmeter_set_scale(gauge, angle, line_cnt);

    lv_gauge_ext_t * ext = lv_obj_get_ext_attr(gauge);
    ext->label_count     = label_cnt;
    lv_obj_invalidate(gauge);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movl %ecx, %ebp
movl %edx, %r14d
movl %esi, %r15d
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x180e7
movzwl %r15w, %esi
movzbl %r14b, %edx
movq %rbx, %rdi
callq 0x22f27
movq %rbx, %rdi
callq 0x6747
movb %bpl, 0x21(%rax)
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x493a
leaq 0x23056(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x180f6
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_gauge.c
// Function: lv_gauge_set_needle_count
void lv_gauge_set_needle_count(lv_obj_t * gauge, uint8_t needle_cnt, const lv_color_t colors[])
{
    LV_ASSERT_OBJ(gauge, LV_OBJX_NAME);

    lv_gauge_ext_t * ext = lv_obj_get_ext_attr(gauge);

    if(ext->needle_count != needle_cnt) {
        if(ext->values != NULL) {
            lv_mem_free(ext->values);
            ext->values = NULL;
        }

        ext->values = lv_mem_realloc(ext->values, needle_cnt * sizeof(int16_t));
        LV_ASSERT_MEM(ext->values);
        if(ext->values == NULL) return;

        int16_t min = lv_gauge_get_min_value(gauge);
        uint8_t n;
        for(n = ext->needle_count; n < needle_cnt; n++) {
            ext->values[n] = min;
        }

        ext->needle_count = needle_cnt;
    }

    ext->needle_colors = colors;
    lv_obj_invalidate(gauge);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movq %rdx, %r14
movl %esi, %ebp
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x1817c
movq %rbx, %rdi
callq 0x6747
movq %rax, %r15
cmpb %bpl, 0x20(%rax)
je 0x1819f
movq 0x10(%r15), %rdi
testq %rdi, %rdi
je 0x18135
callq 0x27a7a
andq $0x0, 0x10(%r15)
movzbl %bpl, %r12d
leal (%r12,%r12), %esi
xorl %edi, %edi
callq 0x27ad9
movq %rax, 0x10(%r15)
movq %rax, %rdi
callq 0x7994
movq 0x10(%r15), %rsi
testb %al, %al
je 0x1818d
testq %rsi, %rsi
je 0x181b3
movq %rbx, %rdi
callq 0x22fd2
movzbl 0x20(%r15), %ecx
cmpq %r12, %rcx
jae 0x1819b
movq 0x10(%r15), %rdx
movw %ax, (%rdx,%rcx,2)
incq %rcx
jmp 0x1816a
leaq 0x22fc1(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1818b
leaq 0x22eac(%rip), %rdi     # 0x3b040
callq 0x7b01
jmp 0x18199
movb %bpl, 0x20(%r15)
movq %r14, 0x18(%r15)
movq %rbx, %rdi
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x493a
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O2/OnionIoT[P]lv_example/lvgl/src/lv_objx/lv_gauge.c
// Function: lv_gauge_set_value
void lv_gauge_set_value(lv_obj_t * gauge, uint8_t needle_id, int16_t value)
{
    LV_ASSERT_OBJ(gauge, LV_OBJX_NAME);

    lv_gauge_ext_t * ext = lv_obj_get_ext_attr(gauge);

    if(needle_id >= ext->needle_count) return;
    if(ext->values[needle_id] == value) return;

    int16_t min = lv_gauge_get_min_value(gauge);
    int16_t max = lv_gauge_get_max_value(gauge);

    if(value > max)
        value = max;
    else if(value < min)
        value = min;

    ext->values[needle_id] = value;

    lv_obj_invalidate(gauge);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movl %edx, %ebp
movl %esi, %r15d
movq %rdi, %rbx
callq 0x7994
testb %al, %al
je 0x181fe
movq %rbx, %rdi
callq 0x6747
cmpb %r15b, 0x20(%rax)
jbe 0x181f5
movq %rax, %r14
movq 0x10(%rax), %rax
movzbl %r15b, %r12d
cmpw %bp, (%rax,%r12,2)
jne 0x1820f
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
leaq 0x22f3f(%rip), %rdi     # 0x3b144
movq %rbx, %rsi
callq 0x7b01
jmp 0x1820d
movq %rbx, %rdi
callq 0x22fd2
movl %eax, %r15d
movq %rbx, %rdi
callq 0x22ffe
cmpw %bp, %r15w
cmovlel %ebp, %r15d
cmpw %bp, %ax
cmovgel %r15d, %eax
movq 0x10(%r14), %rcx
movw %ax, (%rcx,%r12,2)
movq %rbx, %rdi
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x493a