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

1.1       root        1:        .file   "strcat.s"
                      2: #      @(#)strcat.s    1.5
                      3: # Fast assembler language version of the following C-program
                      4: #                      strcat
                      5: # which represents the `standard' for the C-library.
                      6: 
                      7: # Concatenate s2 on the end of s1.  S1's space must be large enough.
                      8: # Return s1.
                      9: 
                     10: #      char *
                     11: #      strcat(s1, s2)
                     12: #      register char *s1, *s2;
                     13: #      {
                     14: #              register char *os1;
                     15: #      
                     16: #              os1 = s1;
                     17: #              while (*s1++)
                     18: #                      ;
                     19: #              --s1;
                     20: #              while (*s1++ = *s2++)
                     21: #                      ;
                     22: #              return(os1);
                     23: #      }
                     24:        .globl  _strcat
                     25:        .text
                     26:        .align  2
                     27: _strcat:
                     28:        .word   0x01c0          # uses regs. 0,1,2,3,4,5,6,7,8
                     29:        movl    $65535,r8       # constant used several times
                     30:        movq    4(ap),r6        # dest. in r6, src. in r7
                     31:        movl    r6,r1           # working copy of dest.
                     32: L0:
                     33:        locc    $0,r8,(r1)      # gotta find null in dest, so we
                     34:        beql    L0              #   know where to start `copy-to'.
                     35:        movl    r1,r3           # set-up r3 for copy destination.
                     36: L1:
                     37:        locc    $0,r8,(r7)      # try to find null in src.
                     38:        bneq    L2              # skip if null found -
                     39:        movc3   r8,(r7),(r3)    # else move a BLOCK of 65535 chars
                     40:        movl    r1,r7           #   and adjust pointers to
                     41:        jmp     L1              #   go back and try again
                     42: L2:
                     43:        subl2   r7,r1           # length (but 1) of src.
                     44:        incl    r1              # adjust length to cover null
                     45:        movc3   r1,(r7),(r3)    # move string including null
                     46:        movl    r6,r0           # return destination ptr.
                     47:        ret

unix.superglobalmegacorp.com

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