2.11BSD/src/lib/libc/pdp/gen/rindex.s

Compare this file to the similar file:
Show the results in this format:

/*
 * Copyright (c) 1987 Regents of the University of California.
 * All rights reserved.  The Berkeley software License Agreement
 * specifies the terms and conditions for redistribution.
 */

#ifdef LIBC_SCCS
	<@(#)rindex.s	1.2 (2.11BSD) 1996/1/12\0>
	.even
#endif LIBC_SCCS

/*
 * Find the last occurence of c in the string cp.
 * Return pointer to match or null pointer.
 *
 * char *
 * rindex(cp, c)
 *	char *cp, c;
 */
#include "DEFS.h"

	.globl	_strrchr
_strrchr = _rindex ^ .

ENTRY(rindex)
	mov	2(sp),r0	/ r0 = cp
	mov	4(sp),r1	/ r1 = c
	beq	3f		/ check for special case of c == '\0'
	mov	r2,-(sp)	/ need an extra register to keep track of
	clr	r2		/   last occurance of c (not found == 0)
1:
	cmpb	(r0),r1		/ look for c ...
	beq	2f
	tstb	(r0)+		/ but don't pass end of string ...
	bne	1b
	mov	r2,r0		/ fell off the end of the string - return
	mov	(sp)+,r2	/   last occurance of c
	rts	pc
2:
	mov	r0,r2		/ remember position of c and bounce back into
	inc	r0		/   loop one position further
	br	1b
3:
	tstb	(r0)+		/ just find end of string
	bne	3b
	dec	r0		/ back up to '\0'
	rts	pc		/   and return pointer