// File: donfreiday[P]gb/./imgui/imgui_draw.cpp
// Function: ImDrawList::PathArcToFast(ImVec2 const&, float, int, int)
void ImDrawList::PathArcToFast(const ImVec2& centre, float radius, int amin, int amax)
{
    static ImVec2 circle_vtx[12];
    static bool circle_vtx_builds = false;
    const int circle_vtx_count = IM_ARRAYSIZE(circle_vtx);
    if (!circle_vtx_builds)
    {
        for (int i = 0; i < circle_vtx_count; i++)
        {
            const float a = ((float)i / (float)circle_vtx_count) * 2*IM_PI;
            circle_vtx[i].x = cosf(a);
            circle_vtx[i].y = sinf(a);
        }
        circle_vtx_builds = true;
    }

    if (amin > amax) return;
    if (radius == 0.0f)
    {
        _Path.push_back(centre);
    }
    else
    {
        _Path.reserve(_Path.Size + (amax - amin + 1));
        for (int a = amin; a <= amax; a++)
        {
            const ImVec2& c = circle_vtx[a % circle_vtx_count];
            _Path.push_back(ImVec2(centre.x + c.x * radius, centre.y + c.y * radius));
        }
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x70, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movss %xmm0, -0x14(%rbp)
movl %edx, -0x18(%rbp)
movl %ecx, -0x1c(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x58(%rbp)
cmpb $0x0, 0x44636(%rip)     # 0x83db0
jne 0x3f7d1
leaq 0x4462d(%rip), %rdi     # 0x83db0
callq 0x72e0
cmpl $0x0, %eax
je 0x3f7d1
leaq 0x445bc(%rip), %rax     # 0x83d50
movq %rax, -0x60(%rbp)
jmp 0x3f79a
movq -0x60(%rbp), %rdi
movq %rdi, -0x68(%rbp)
callq 0x2d230
jmp 0x3f7a9
movq -0x68(%rbp), %rax
addq $0x8, %rax
leaq 0x44598(%rip), %rcx     # 0x83d50
addq $0x60, %rcx
cmpq %rcx, %rax
movq %rax, -0x60(%rbp)
jne 0x3f79a
leaq 0x445e4(%rip), %rdi     # 0x83db0
callq 0x7460
movl $0xc, -0x30(%rbp)
testb $0x1, 0x445d9(%rip)     # 0x83db8
jne 0x3f888
movl $0x0, -0x34(%rbp)
cmpl $0xc, -0x34(%rbp)
jge 0x3f881
cvtsi2ssl -0x34(%rbp), %xmm0
movss 0x20dc9(%rip), %xmm1    # 0x605cc
divss %xmm1, %xmm0
movss 0x1b8a9(%rip), %xmm1    # 0x5b0b8
mulss %xmm1, %xmm0
movss 0x20dad(%rip), %xmm1    # 0x605c8
mulss %xmm1, %xmm0
movss %xmm0, -0x38(%rbp)
movss -0x38(%rbp), %xmm0
callq 0x7510
movslq -0x34(%rbp), %rcx
leaq 0x44517(%rip), %rax     # 0x83d50
movss %xmm0, (%rax,%rcx,8)
movss -0x38(%rbp), %xmm0
callq 0x7050
movslq -0x34(%rbp), %rcx
leaq 0x444fd(%rip), %rax     # 0x83d50
movss %xmm0, 0x4(%rax,%rcx,8)
movl -0x34(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x34(%rbp)
jmp 0x3f7ec
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
leaq 0x44539(%rip), %rdi     # 0x83db0
callq 0x7380
jmp 0x3f97e
movb $0x1, 0x44530(%rip)     # 0x83db8
movl -0x18(%rbp), %eax
cmpl -0x1c(%rbp), %eax
jle 0x3f895
jmp 0x3f978
movss -0x14(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jne 0x3f8ba
jp 0x3f8ba
movq -0x58(%rbp), %rdi
addq $0x70, %rdi
movq -0x10(%rbp), %rsi
callq 0x31200
jmp 0x3f978
movq -0x58(%rbp), %rax
movq %rax, %rdi
addq $0x70, %rdi
movl 0x70(%rax), %esi
movl -0x1c(%rbp), %eax
subl -0x18(%rbp), %eax
addl $0x1, %eax
addl %eax, %esi
callq 0x31260
movl -0x18(%rbp), %eax
movl %eax, -0x3c(%rbp)
movl -0x3c(%rbp), %eax
cmpl -0x1c(%rbp), %eax
jg 0x3f976
movl -0x3c(%rbp), %eax
movl $0xc, %ecx
cltd
idivl %ecx
movq -0x58(%rbp), %rax
movslq %edx, %rdx
leaq 0x4444d(%rip), %rcx     # 0x83d50
shlq $0x3, %rdx
addq %rdx, %rcx
movq %rcx, -0x48(%rbp)
addq $0x70, %rax
movq %rax, -0x70(%rbp)
movq -0x10(%rbp), %rax
movss (%rax), %xmm1
movq -0x48(%rbp), %rax
movss (%rax), %xmm0
movss -0x14(%rbp), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x10(%rbp), %rax
movss 0x4(%rax), %xmm2
movq -0x48(%rbp), %rax
movss 0x4(%rax), %xmm1
movss -0x14(%rbp), %xmm3
mulss %xmm3, %xmm1
addss %xmm2, %xmm1
leaq -0x50(%rbp), %rdi
callq 0x2d280
movq -0x70(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x31200
movl -0x3c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x3c(%rbp)
jmp 0x3f8de
jmp 0x3f978
addq $0x70, %rsp
popq %rbp
retq
movq -0x28(%rbp), %rdi
callq 0x74f0
nopw (%rax,%rax)