Newer
Older
UbixOS / sys / lib / strcpy.S
.globl strcpy
strcpy:
        movl    4(%esp),%ecx            /* dst address */
        movl    8(%esp),%edx            /* src address */
        pushl   %ecx                    /* push dst address */

        .align 2,0x90
L1:     movb    (%edx),%al              /* unroll loop, but not too much */
        movb    %al,(%ecx)
        testb   %al,%al
        je      L2
        movb    1(%edx),%al
        movb    %al,1(%ecx)
        testb   %al,%al
        je      L2
        movb    2(%edx),%al
        movb    %al,2(%ecx)
        testb   %al,%al
        je      L2
        movb    3(%edx),%al
        movb    %al,3(%ecx)
        testb   %al,%al
        je      L2
        movb    4(%edx),%al
        movb    %al,4(%ecx)
        testb   %al,%al
        je      L2
        movb    5(%edx),%al
        movb    %al,5(%ecx)
        testb   %al,%al
        je      L2
        movb    6(%edx),%al
        movb    %al,6(%ecx)
        testb   %al,%al
        je      L2
        movb    7(%edx),%al
        movb    %al,7(%ecx)
        addl    $8,%edx
        addl    $8,%ecx
        testb   %al,%al
        jne     L1
L2:     popl    %eax                    /* pop dst address */
        ret