Annotation of coherent/b/kernel/i386/memset.s, revision 1.1.1.1

1.1       root        1:        .intelorder
                      2: //////////
                      3: / libc/string/i386/memset.s
                      4: / i386 C string library.
                      5: / ANSI 4.11.6.1.
                      6: //////////
                      7: 
                      8: //////////
                      9: / void *
                     10: / memset(void *String, int Char, size_t Count)
                     11: /
                     12: / Set Count bytes of String to Char.
                     13: / Uses repeated dword copy for efficiency.
                     14: //////////
                     15: 
                     16: String .equ    12
                     17: Char   .equ    String+4
                     18: Count  .equ    Char+4
                     19: 
                     20:        .text
                     21:        .globl  memset
                     22: 
                     23: memset:
                     24:        push    %edi
                     25:        push    %es                     / save es
                     26:        push    %ds                     / copy ds to es
                     27:        pop     %es
                     28: 
                     29:        movl    %edi, String(%esp)      / String address to EDI
                     30: 
                     31:        movzxb  %eax, Char(%esp)        / Char to EAX
                     32:        movl    %ecx, $0x01010101       / Char:Char:Char:Char in EAX
                     33:        mull    %eax, %ecx              / Char:Char:Char:Char in EAX
                     34: 
                     35:        movl    %ecx, Count(%esp)       / Count to ECX
                     36:        movl    %edx, %ecx              / Save Count in EDX
                     37:        shrl    %ecx, $2                / Count/4
                     38: 
                     39:        cld
                     40:        rep
                     41:        stosl                           / Copy Count/4 Char dwords to String
                     42:        jnc     ?byte                   / CF contains Count bit 1 from shrl above
                     43:        stosw                           / Copy a word
                     44: 
                     45: ?byte:
                     46:        shrl    %edx, $1
                     47:        jnc     ?done
                     48:        stosb                           / Copy Char to String
                     49: 
                     50: ?done:
                     51:        movl    %eax, String(%esp)      / Return the destination in EAX
                     52: 
                     53:        pop     %es                     / restore es
                     54:        pop     %edi
                     55:        ret
                     56: 
                     57: / end of libc/string/i386/memset.s

unix.superglobalmegacorp.com

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