|
|
1.1 ! root 1: .file "memchr.s" ! 2: # @(#)memchr.s 1.5 ! 3: # Fast assembler language version of the following C-program ! 4: # memchr ! 5: # which represents the `standard' for the C-library. ! 6: ! 7: # Return the ptr in sp at which the character c appears; ! 8: # NULL if not found in n chars; don't stop at \0. ! 9: # ! 10: # char * ! 11: # memchr(sp, c, n) ! 12: # register char *sp, c; ! 13: # register int n; ! 14: # { ! 15: # while (--n >= 0) ! 16: # if (*sp++ == c) ! 17: # return (--sp); ! 18: # return (0); ! 19: # } ! 20: .globl _memchr ! 21: .text ! 22: .align 2 ! 23: _memchr: ! 24: .word 0x0000 # pgm uses regs 0,1,2,3 ! 25: movl 12(ap),r3 # n in r3 ! 26: bleq L4 # should be > 0 ! 27: movq 4(ap),r1 # s1 in r1; `c' in r2 ! 28: L0: ! 29: cmpl $65535,r3 # is len VERY large? ! 30: bgeq L1 # hop if not ! 31: locc r2,$65535,(r1) # look for `c' in this BLOCK ! 32: bneq L2 # hop if found (r1 points to it) ! 33: subl2 $65535,r3 ! 34: jbr L0 ! 35: L1: ! 36: locc r2,r3,(r1) # look for `c' in this BLOCK ! 37: beql L3 # fall through if found (r1 points to it) ! 38: L2: ! 39: movl r1,r0 # found one, return pointer to user ! 40: L3: ! 41: ret # return 0 if not found (r0 is 0 already) ! 42: L4: ! 43: clrl r0 # n <= 0, return 0 (not found) ! 44: ret
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.