// File: /workspace/github_c_makefile_star2_O0/stetre[P]moonnuklear/src/./nuklear/nuklear.h
// Function: nk_memcopy
NK_LIB void*
nk_memcopy(void *dst0, const void *src0, nk_size length)
{
    nk_ptr t;
    char *dst = (char*)dst0;
    const char *src = (const char*)src0;
    if (length == 0 || dst == src)
        goto done;

    #define nk_word int
    #define nk_wsize sizeof(nk_word)
    #define nk_wmask (nk_wsize-1)
    #define NK_TLOOP(s) if (t) NK_TLOOP1(s)
    #define NK_TLOOP1(s) do { s; } while (--t)

    if (dst < src) {
        t = (nk_ptr)src; /* only need low bits */
        if ((t | (nk_ptr)dst) & nk_wmask) {
            if ((t ^ (nk_ptr)dst) & nk_wmask || length < nk_wsize)
                t = length;
            else
                t = nk_wsize - (t & nk_wmask);
            length -= t;
            NK_TLOOP1(*dst++ = *src++);
        }
        t = length / nk_wsize;
        NK_TLOOP(*(nk_word*)(void*)dst = *(const nk_word*)(const void*)src;
            src += nk_wsize; dst += nk_wsize);
        t = length & nk_wmask;
        NK_TLOOP(*dst++ = *src++);
    } else {
        src += length;
        dst += length;
        t = (nk_ptr)src;
        if ((t | (nk_ptr)dst) & nk_wmask) {
            if ((t ^ (nk_ptr)dst) & nk_wmask || length <= nk_wsize)
                t = length;
            else
                t &= nk_wmask;
            length -= t;
            NK_TLOOP1(*--dst = *--src);
        }
        t = length / nk_wsize;
        NK_TLOOP(src -= nk_wsize; dst -= nk_wsize;
            *(nk_word*)(void*)dst = *(const nk_word*)(const void*)src);
        t = length & nk_wmask;
        NK_TLOOP(*--dst = *--src);
    }
    #undef nk_word
    #undef nk_wsize
    #undef nk_wmask
    #undef NK_TLOOP
    #undef NK_TLOOP1
done:
    return (dst0);
}

// Assembly:
movq %rdi, -0x8(%rsp)
movq %rsi, -0x10(%rsp)
movq %rdx, -0x18(%rsp)
movq -0x8(%rsp), %rax
movq %rax, -0x28(%rsp)
movq -0x10(%rsp), %rax
movq %rax, -0x30(%rsp)
cmpq $0x0, -0x18(%rsp)
je 0x2f787
movq -0x28(%rsp), %rax
cmpq -0x30(%rsp), %rax
jne 0x2f78c
jmp 0x2fa7f
movq -0x28(%rsp), %rax
cmpq -0x30(%rsp), %rax
jae 0x2f901
movq -0x30(%rsp), %rax
movq %rax, -0x20(%rsp)
movq -0x20(%rsp), %rax
movq -0x28(%rsp), %rcx
orq %rcx, %rax
andq $0x3, %rax
cmpq $0x0, %rax
je 0x2f850
movq -0x20(%rsp), %rax
movq -0x28(%rsp), %rcx
xorq %rcx, %rax
andq $0x3, %rax
cmpq $0x0, %rax
jne 0x2f7e0
cmpq $0x4, -0x18(%rsp)
jae 0x2f7ec
movq -0x18(%rsp), %rax
movq %rax, -0x20(%rsp)
jmp 0x2f802
movq -0x20(%rsp), %rcx
andq $0x3, %rcx
movl $0x4, %eax
subq %rcx, %rax
movq %rax, -0x20(%rsp)
movq -0x20(%rsp), %rcx
movq -0x18(%rsp), %rax
subq %rcx, %rax
movq %rax, -0x18(%rsp)
movq -0x30(%rsp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x30(%rsp)
movb (%rax), %cl
movq -0x28(%rsp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x28(%rsp)
movb %cl, (%rax)
movq -0x20(%rsp), %rax
addq $-0x1, %rax
movq %rax, -0x20(%rsp)
cmpq $0x0, %rax
jne 0x2f814
jmp 0x2f850
movq -0x18(%rsp), %rax
shrq $0x2, %rax
movq %rax, -0x20(%rsp)
cmpq $0x0, -0x20(%rsp)
je 0x2f8a8
jmp 0x2f868
movq -0x30(%rsp), %rax
movl (%rax), %ecx
movq -0x28(%rsp), %rax
movl %ecx, (%rax)
movq -0x30(%rsp), %rax
addq $0x4, %rax
movq %rax, -0x30(%rsp)
movq -0x28(%rsp), %rax
addq $0x4, %rax
movq %rax, -0x28(%rsp)
movq -0x20(%rsp), %rax
addq $-0x1, %rax
movq %rax, -0x20(%rsp)
cmpq $0x0, %rax
jne 0x2f868
jmp 0x2f8a8
movq -0x18(%rsp), %rax
andq $0x3, %rax
movq %rax, -0x20(%rsp)
cmpq $0x0, -0x20(%rsp)
je 0x2f8fc
jmp 0x2f8c0
movq -0x30(%rsp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x30(%rsp)
movb (%rax), %cl
movq -0x28(%rsp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x28(%rsp)
movb %cl, (%rax)
movq -0x20(%rsp), %rax
addq $-0x1, %rax
movq %rax, -0x20(%rsp)
cmpq $0x0, %rax
jne 0x2f8c0
jmp 0x2f8fc
jmp 0x2fa7d
movq -0x18(%rsp), %rax
addq -0x30(%rsp), %rax
movq %rax, -0x30(%rsp)
movq -0x18(%rsp), %rax
addq -0x28(%rsp), %rax
movq %rax, -0x28(%rsp)
movq -0x30(%rsp), %rax
movq %rax, -0x20(%rsp)
movq -0x20(%rsp), %rax
movq -0x28(%rsp), %rcx
orq %rcx, %rax
andq $0x3, %rax
cmpq $0x0, %rax
je 0x2f9cd
movq -0x20(%rsp), %rax
movq -0x28(%rsp), %rcx
xorq %rcx, %rax
andq $0x3, %rax
cmpq $0x0, %rax
jne 0x2f963
cmpq $0x4, -0x18(%rsp)
ja 0x2f96f
movq -0x18(%rsp), %rax
movq %rax, -0x20(%rsp)
jmp 0x2f97d
movq -0x20(%rsp), %rax
andq $0x3, %rax
movq %rax, -0x20(%rsp)
movq -0x20(%rsp), %rcx
movq -0x18(%rsp), %rax
subq %rcx, %rax
movq %rax, -0x18(%rsp)
movq -0x30(%rsp), %rax
movq %rax, %rcx
addq $-0x1, %rcx
movq %rcx, -0x30(%rsp)
movb -0x1(%rax), %cl
movq -0x28(%rsp), %rax
movq %rax, %rdx
addq $-0x1, %rdx
movq %rdx, -0x28(%rsp)
movb %cl, -0x1(%rax)
movq -0x20(%rsp), %rax
addq $-0x1, %rax
movq %rax, -0x20(%rsp)
cmpq $0x0, %rax
jne 0x2f98f
jmp 0x2f9cd
movq -0x18(%rsp), %rax
shrq $0x2, %rax
movq %rax, -0x20(%rsp)
cmpq $0x0, -0x20(%rsp)
je 0x2fa25
jmp 0x2f9e5
movq -0x30(%rsp), %rax
addq $-0x4, %rax
movq %rax, -0x30(%rsp)
movq -0x28(%rsp), %rax
addq $-0x4, %rax
movq %rax, -0x28(%rsp)
movq -0x30(%rsp), %rax
movl (%rax), %ecx
movq -0x28(%rsp), %rax
movl %ecx, (%rax)
movq -0x20(%rsp), %rax
addq $-0x1, %rax
movq %rax, -0x20(%rsp)
cmpq $0x0, %rax
jne 0x2f9e5
jmp 0x2fa25
movq -0x18(%rsp), %rax
andq $0x3, %rax
movq %rax, -0x20(%rsp)
cmpq $0x0, -0x20(%rsp)
je 0x2fa7b
jmp 0x2fa3d
movq -0x30(%rsp), %rax
movq %rax, %rcx
addq $-0x1, %rcx
movq %rcx, -0x30(%rsp)
movb -0x1(%rax), %cl
movq -0x28(%rsp), %rax
movq %rax, %rdx
addq $-0x1, %rdx
movq %rdx, -0x28(%rsp)
movb %cl, -0x1(%rax)
movq -0x20(%rsp), %rax
addq $-0x1, %rax
movq %rax, -0x20(%rsp)
cmpq $0x0, %rax
jne 0x2fa3d
jmp 0x2fa7b
jmp 0x2fa7d
jmp 0x2fa7f
movq -0x8(%rsp), %rax
retq
nopw %cs:(%rax,%rax)