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

1.1     ! root        1:        .file   "strchr.s"
        !             2: #      @(#)strchr.s    1.5
        !             3: #      3.0 SID #       1.2
        !             4: # Fast assembler language version of the following C-program
        !             5: #                      strchr
        !             6: # which represents the `standard' for the C-library.
        !             7: 
        !             8: # Return the ptr in sp at which the character c appears;
        !             9: #   NULL if not found
        !            10: #      
        !            11: #      char *
        !            12: #      strchr(sp, c)
        !            13: #      register char *sp, c;
        !            14: #      {
        !            15: #              do {
        !            16: #                      if (*sp == c)
        !            17: #                              return(sp);
        !            18: #              } while (*sp++);
        !            19: #              return(0);
        !            20: #      }
        !            21:        .globl  _strchr
        !            22:        .text
        !            23:        .align  2
        !            24: _strchr:
        !            25:        .word   0x0000          # pgm uses regs 0,1,2,3,4
        !            26:        movq    4(ap),r2        # s1 in r2; `c' in r3
        !            27: L0:
        !            28:        locc    $0,$65535,(r2)  # search for a terminating null
        !            29:        bneq    L1              # hop onward if we found one
        !            30:        locc    r3,$65535,(r2)  # else look for `c' in this BLOCK
        !            31:        bneq    L2              # hop if found (r1 points to it)
        !            32:        movl    r1,r2           # no luck at all in this BLOCK
        !            33:        jmp     L0              # go back to try next BLOCK
        !            34: L1:
        !            35:        subl3   r2,r1,r4        # length of (this segment of) s1 in r4
        !            36:        incl    r4              # gotta include terminal null
        !            37:        locc    r3,r4,(r2)      # scan for `c' in this (tail) segment
        !            38:        beql    L3              # skip if not found! (r0 is already 0)
        !            39: L2:
        !            40:        movl    r1,r0           # else found one, return pointer to user
        !            41: L3:
        !            42:        ret

unix.superglobalmegacorp.com

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