[BACK]Return to scanc.S CVS log [TXT][DIR] Up to [local] / sys / lib / libkern / arch / m68k

Annotation of sys/lib/libkern/arch/m68k/scanc.S, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: scanc.S,v 1.3 2003/06/02 23:28:08 millert Exp $       */
                      2: /*     $NetBSD: scanc.S,v 1.2 1994/10/26 06:39:31 cgd Exp $    */
                      3:
                      4: /*
                      5:  * Copyright (c) 1988 University of Utah.
                      6:  * Copyright (c) 1980, 1990 The Regents of the University of California.
                      7:  * All rights reserved.
                      8:  *
                      9:  * This code is derived from software contributed to Berkeley by
                     10:  * the Systems Programming Group of the University of Utah Computer
                     11:  * Science Department.
                     12:  *
                     13:  * Redistribution and use in source and binary forms, with or without
                     14:  * modification, are permitted provided that the following conditions
                     15:  * are met:
                     16:  * 1. Redistributions of source code must retain the above copyright
                     17:  *    notice, this list of conditions and the following disclaimer.
                     18:  * 2. Redistributions in binary form must reproduce the above copyright
                     19:  *    notice, this list of conditions and the following disclaimer in the
                     20:  *    documentation and/or other materials provided with the distribution.
                     21:  * 3. Neither the name of the University nor the names of its contributors
                     22:  *    may be used to endorse or promote products derived from this software
                     23:  *    without specific prior written permission.
                     24:  *
                     25:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
                     26:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     27:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     28:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
                     29:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     30:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     31:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     32:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     33:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     34:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     35:  * SUCH DAMAGE.
                     36:  *
                     37:  *     from: Utah Hdr: locore.s 1.58 91/04/22
                     38:  *     @(#)locore.s    7.11 (Berkeley) 5/9/91
                     39:  */
                     40:
                     41: #include "DEFS.h"
                     42:
                     43: /*
                     44:  * Emulate fancy VAX string operations:
                     45:  *     scanc(count, startc, table, mask)
                     46:  */
                     47: ENTRY(scanc)
                     48:        movl    sp@(4),d0       | get length
                     49:        jeq     Lscdone         | nothing to do, return
                     50:        movl    sp@(8),a0       | start of scan
                     51:        movl    sp@(12),a1      | table to compare with
                     52:        movb    sp@(19),d1      | and mask to use
                     53:        movw    d2,sp@-         | need a scratch register
                     54:        clrw    d2              | clear it out
                     55:        subqw   #1,d0           | adjust for dbra
                     56: Lscloop:
                     57:        movb    a0@+,d2         | get character
                     58:        movb    a1@(0,d2:w),d2  | get table entry
                     59:        andb    d1,d2           | mask it
                     60:        dbne    d0,Lscloop      | keep going til no more or non-zero
                     61:        addqw   #1,d0           | overshot by one
                     62:        movw    sp@+,d2         | restore scratch
                     63: Lscdone:
                     64:        rts

CVSweb