// File: /workspace/github_c_makefile_star2_O0/algorithm-archivists[P]GathVL/src/objects/ellipse.cpp
// Function: ellipse::draw(_cairo*) const
void ellipse::draw(cairo_t *ctx) const {
    cairo_save(ctx);
    cairo_set_source_rgba(ctx, clr.r, clr.g, clr.b, clr.a);
    cairo_translate(ctx, location.x, location.y);
    cairo_rotate(ctx, rotation);

    if (size.x < size.y && (size.x != 0 || size.y != 0)) {
        cairo_scale(ctx, size.x / size.y, 1.0);
        cairo_arc(ctx, 0.0, 0.0, size.y, angles.x, angles.y);
    } else if (size.x > size.y && (size.x != 0 || size.y != 0)) {
        cairo_scale(ctx, 1.0, size.y / size.x);
        cairo_arc(ctx, 0.0, 0.0, size.x, angles.x, angles.y);
    } else if (size.x == size.y && size.x != 0) {
        cairo_arc(ctx, 0.0, 0.0, size.x, angles.x, angles.y);
    }

    if (fill) {
        cairo_fill(ctx);
    }

    cairo_stroke(ctx);
    cairo_restore(ctx);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x18(%rbp)
movq -0x10(%rbp), %rdi
callq 0x52b0
movq -0x18(%rbp), %rax
movq -0x10(%rbp), %rdi
movsd 0x20(%rax), %xmm0
movsd 0x28(%rax), %xmm1
movsd 0x30(%rax), %xmm2
movsd 0x38(%rax), %xmm3
callq 0x5220
movq -0x18(%rbp), %rax
movq -0x10(%rbp), %rdi
movsd 0x40(%rax), %xmm0
movsd 0x48(%rax), %xmm1
callq 0x5140
movq -0x18(%rbp), %rax
movq -0x10(%rbp), %rdi
movsd 0x70(%rax), %xmm0
callq 0x5770
movq -0x18(%rbp), %rax
movsd 0x50(%rax), %xmm1
movsd 0x58(%rax), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x1688f
movq -0x18(%rbp), %rax
movsd 0x50(%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x16849
jp 0x16849
movq -0x18(%rbp), %rax
movsd 0x58(%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x16849
jp 0x16849
jmp 0x1688f
movq -0x18(%rbp), %rax
movq -0x10(%rbp), %rdi
movsd 0x50(%rax), %xmm0
divsd 0x58(%rax), %xmm0
movsd 0x24805(%rip), %xmm1    # 0x3b068
callq 0x58a0
movq -0x18(%rbp), %rax
movq -0x10(%rbp), %rdi
movsd 0x58(%rax), %xmm2
movsd 0x60(%rax), %xmm3
movsd 0x68(%rax), %xmm4
xorps %xmm1, %xmm1
movaps %xmm1, %xmm0
callq 0x5240
jmp 0x1695a
movq -0x18(%rbp), %rax
movsd 0x50(%rax), %xmm0
ucomisd 0x58(%rax), %xmm0
jbe 0x1690c
movq -0x18(%rbp), %rax
movsd 0x50(%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x168c9
jp 0x168c9
movq -0x18(%rbp), %rax
movsd 0x58(%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x168c9
jp 0x168c9
jmp 0x1690c
movq -0x18(%rbp), %rax
movq -0x10(%rbp), %rdi
movsd 0x58(%rax), %xmm1
divsd 0x50(%rax), %xmm1
movsd 0x24785(%rip), %xmm0    # 0x3b068
callq 0x58a0
movq -0x18(%rbp), %rax
movq -0x10(%rbp), %rdi
movsd 0x50(%rax), %xmm2
movsd 0x60(%rax), %xmm3
movsd 0x68(%rax), %xmm4
xorps %xmm1, %xmm1
movaps %xmm1, %xmm0
callq 0x5240
jmp 0x16958
movq -0x18(%rbp), %rax
movsd 0x50(%rax), %xmm0
ucomisd 0x58(%rax), %xmm0
jne 0x16956
jp 0x16956
movq -0x18(%rbp), %rax
movsd 0x50(%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x16934
jp 0x16934
jmp 0x16956
movq -0x18(%rbp), %rax
movq -0x10(%rbp), %rdi
movsd 0x50(%rax), %xmm2
movsd 0x60(%rax), %xmm3
movsd 0x68(%rax), %xmm4
xorps %xmm1, %xmm1
movaps %xmm1, %xmm0
callq 0x5240
jmp 0x16958
jmp 0x1695a
movq -0x18(%rbp), %rax
testb $0x1, 0x78(%rax)
je 0x1696d
movq -0x10(%rbp), %rdi
callq 0x5890
movq -0x10(%rbp), %rdi
callq 0x57b0
movq -0x10(%rbp), %rdi
callq 0x5840
addq $0x20, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
nop