Annotation of researchv10no/libc/gen/strcpy.s, revision 1.1.1.1

1.1       root        1:        .file   "strcpy.s"
                      2: #      @(#)strcpy.s    1.5
                      3: # Fast assembler language version of the following C-program
                      4: #                      strcpy
                      5: # which represents the `standard' for the C-library.
                      6: 
                      7: # Copy string s2 to s1.  s1 must be large enough. Return s1.
                      8: 
                      9: #      char *
                     10: #      strcpy(s1, s2)
                     11: #      register char *s1, *s2;
                     12: #      {
                     13: #              register char *os1;
                     14: #      
                     15: #              os1 = s1;
                     16: #              while (*s1++ = *s2++)
                     17: #                      ;
                     18: #              return(os1);
                     19: #      }
                     20:        .globl  _strcpy
                     21:        .text
                     22:        .align  2
                     23: _strcpy:
                     24:        .word   0x00c0                  # use regs. 0,1,2,3,4,5,6,7
                     25:        movq    4(ap),r6                # dest. in r6, src. in r7
                     26:        movl    r6,r3                   # working copy of dest. in r3
                     27: L0:
                     28:        locc    $0,$65535,(r7)          # try to find null in src.
                     29:        bneq    L1                      # skip if null found -
                     30:        movc3   $65535,(r7),(r3)        # else move BLOCK of chars
                     31:        movl    r1,r7                   #   and adjust pointers to
                     32:        jmp     L0                      #   go back and try again
                     33: L1:
                     34:        subl2   r7,r1                   # length (but 1) of src.
                     35:        incl    r1                      # adjust length to cover null
                     36:        movc3   r1,(r7),(r3)            # move string including null
                     37:        movl    r6,r0                   # return dest.
                     38:        ret

unix.superglobalmegacorp.com

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