Annotation of researchv10no/libc/gen/strcmp.s, revision 1.1

1.1     ! root        1:        .file   "strcmp.s"
        !             2: #      @(#)strcmp.s    1.4
        !             3: # Fast assembler language version of the following C-program for
        !             4: #                      strcmp
        !             5: # which represents the `standard' for the C-library.
        !             6: 
        !             7: #      strcmp(s1, s2)
        !             8: #      register char *s1, *s2;
        !             9: #      {
        !            10: #              if(s1 == s2)
        !            11: #                      return(0);
        !            12: #              while(*s1 == *s2++)
        !            13: #                      if(*s1++ == '\0')
        !            14: #                              return(0);
        !            15: #              return(*s1 - *--s2);
        !            16: #      }
        !            17:        .globl  _strcmp
        !            18:        .text
        !            19:        .align  2
        !            20: _strcmp:
        !            21:        .word   0x0000          # uses regs. 0,1,2,3,4
        !            22:        movq    4(ap),r3        # s1 in r3; s2 in r4
        !            23:        cmpl    r3,r4           # if pointers are eql, don't bother
        !            24:        bneq    L0
        !            25:        clrl    r0
        !            26:        ret
        !            27: L0:
        !            28:        locc    $0,$65535,(r4)  # search for a terminating null in s2
        !            29:        bneq    L1              # found a null, go start comparison
        !            30:        cmpc3   $65535,(r4),(r3)
        !            31:        bneq    L2              # no null in s2, but strings differ
        !            32:        movl    r1,r4           # hey, first BLOCK of chars are same.
        !            33:        jmp     L0              # let's go continue this loop.
        !            34: L1:
        !            35:        subl2   r4,r1           # length of (final segment) of s2 in r1
        !            36:        incl    r1              # gotta include null in comparison
        !            37:        cmpc3   r1,(r4),(r3)    # strings compared.
        !            38:        beql    L3              # complete equality - r0 is already 0
        !            39: L2:
        !            40:        cvtbl   (r3),r0
        !            41:        cvtbl   (r1),r1
        !            42:        subl2   r1,r0
        !            43: L3:
        !            44:        ret

unix.superglobalmegacorp.com

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