1*e415d488SLionel Sambuc/* $NetBSD: index.S,v 1.4 2011/01/25 02:38:15 matt Exp $ */ 22fe8fb19SBen Gras/* 32fe8fb19SBen Gras * Copyright (c) 1980, 1993 42fe8fb19SBen Gras * The Regents of the University of California. All rights reserved. 52fe8fb19SBen Gras * 62fe8fb19SBen Gras * Redistribution and use in source and binary forms, with or without 72fe8fb19SBen Gras * modification, are permitted provided that the following conditions 82fe8fb19SBen Gras * are met: 92fe8fb19SBen Gras * 1. Redistributions of source code must retain the above copyright 102fe8fb19SBen Gras * notice, this list of conditions and the following disclaimer. 112fe8fb19SBen Gras * 2. Redistributions in binary form must reproduce the above copyright 122fe8fb19SBen Gras * notice, this list of conditions and the following disclaimer in the 132fe8fb19SBen Gras * documentation and/or other materials provided with the distribution. 142fe8fb19SBen Gras * 3. Neither the name of the University nor the names of its contributors 152fe8fb19SBen Gras * may be used to endorse or promote products derived from this software 162fe8fb19SBen Gras * without specific prior written permission. 172fe8fb19SBen Gras * 182fe8fb19SBen Gras * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 192fe8fb19SBen Gras * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 202fe8fb19SBen Gras * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 212fe8fb19SBen Gras * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 222fe8fb19SBen Gras * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 232fe8fb19SBen Gras * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 242fe8fb19SBen Gras * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 252fe8fb19SBen Gras * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 262fe8fb19SBen Gras * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 272fe8fb19SBen Gras * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 282fe8fb19SBen Gras * SUCH DAMAGE. 292fe8fb19SBen Gras */ 302fe8fb19SBen Gras 312fe8fb19SBen Gras/* 322fe8fb19SBen Gras * Find the first occurence of c in the string cp. 332fe8fb19SBen Gras * Return pointer to match or null pointer. 342fe8fb19SBen Gras * 352fe8fb19SBen Gras * char * 362fe8fb19SBen Gras * index(cp, c) 372fe8fb19SBen Gras * char *cp, c; 382fe8fb19SBen Gras */ 392fe8fb19SBen Gras#include "DEFS.h" 402fe8fb19SBen Gras 41*e415d488SLionel Sambuc#ifdef LIBC_SCCS 42*e415d488SLionel SambucRCSID("$NetSBD$") 43*e415d488SLionel Sambuc#endif 44*e415d488SLionel Sambuc 452fe8fb19SBen Gras/* Alas not quite twice as fast as the generic C version on a uvax2 */ 462fe8fb19SBen Gras 472fe8fb19SBen GrasENTRY(index, 0) 482fe8fb19SBen Gras movq 4(%ap),%r0 # %r0 = cp; %r1 = c 492fe8fb19SBen Gras tstb %r1 # special case, looking for '\0' 502fe8fb19SBen Gras jeql 3f 512fe8fb19SBen Gras1: 522fe8fb19SBen Gras cmpb (%r0),%r1 532fe8fb19SBen Gras jeql 2f 542fe8fb19SBen Gras tstb (%r0)+ 552fe8fb19SBen Gras jneq 1b 562fe8fb19SBen Gras clrl %r0 # return NULL if no match 572fe8fb19SBen Gras2: 582fe8fb19SBen Gras ret 592fe8fb19SBen Gras3: 602fe8fb19SBen Gras tstb (%r0)+ 612fe8fb19SBen Gras jneq 3b 622fe8fb19SBen Gras decl %r0 632fe8fb19SBen Gras jbr 2b 64*e415d488SLionel SambucEND(index) 65