Annotation of coherent/b/kernel/i386/memcpy.s, revision 1.1

1.1     ! root        1:        .intelorder
        !             2: //////////
        !             3: / libc/string/i386/memcpy.s
        !             4: / i386 C string library.
        !             5: / ANSI 4.11.2.1.
        !             6: //////////
        !             7: 
        !             8: //////////
        !             9: / void *
        !            10: / memcpy(void *To, void *From, size_t Count)
        !            11: /
        !            12: / Copy Count bytes from From to To, return To.
        !            13: / Copies first by dwords, then by words, then by bytes, for efficiency;
        !            14: / does not try to align the arguments.
        !            15: //////////
        !            16: 
        !            17: To     .equ    12
        !            18: From   .equ    To+4
        !            19: Count  .equ    From+4
        !            20: 
        !            21:        .globl  memcpy
        !            22:        .globl  _memcpy
        !            23: 
        !            24: memcpy:
        !            25:        push    %esi
        !            26:        push    %edi
        !            27: 
        !            28:        movl    %esi, From(%esp)        / From to ESI
        !            29:        movl    %edi, To(%esp)          / To to EDI
        !            30:        movl    %ecx, Count(%esp)       / Count to ECX
        !            31:        movl    %eax, %edi              / Return value to EAX
        !            32: 
        !            33: _memcpy:                               / memmove() entry point
        !            34:        push    %es                     / save es
        !            35:        push    %ds                     / copy ds to es
        !            36:        pop     %es
        !            37:        cld
        !            38:        movl    %edx, %ecx              / Save Count in EDX
        !            39:        shrl    %ecx, $2                / Count/4
        !            40:        rep
        !            41:        movsl                           / move Count/4 dwords
        !            42:        jnc     ?byte                   / CF contains Count bit 1 from shrl above
        !            43:        movsw                           / move a word
        !            44: 
        !            45: ?byte:
        !            46:        shrl    %edx, $1
        !            47:        jnc     ?done
        !            48:        movsb                           / move a byte
        !            49: 
        !            50: ?done:
        !            51:        pop     %es
        !            52:        pop     %edi
        !            53:        pop     %esi
        !            54:        ret
        !            55: 
        !            56: / end of libc/string/i386/memcpy.s

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.