Home | History | Annotate | Line # | Download | only in string
bzero.S revision 1.4
      1  1.4     skrll /*	$NetBSD: bzero.S,v 1.4 2020/05/05 06:20:55 skrll Exp $	*/
      2  1.1  fredette 
      3  1.1  fredette /*	$OpenBSD: bzero.S,v 1.3 2001/06/04 23:14:02 mickey Exp $	*/
      4  1.1  fredette 
      5  1.1  fredette /*
      6  1.1  fredette  *  (c) Copyright 1988 HEWLETT-PACKARD COMPANY
      7  1.1  fredette  *
      8  1.1  fredette  *  To anyone who acknowledges that this file is provided "AS IS"
      9  1.1  fredette  *  without any express or implied warranty:
     10  1.1  fredette  *      permission to use, copy, modify, and distribute this file
     11  1.1  fredette  *  for any purpose is hereby granted without fee, provided that
     12  1.1  fredette  *  the above copyright notice and this notice appears in all
     13  1.1  fredette  *  copies, and that the name of Hewlett-Packard Company not be
     14  1.1  fredette  *  used in advertising or publicity pertaining to distribution
     15  1.1  fredette  *  of the software without specific, written prior permission.
     16  1.1  fredette  *  Hewlett-Packard Company makes no representations about the
     17  1.1  fredette  *  suitability of this software for any purpose.
     18  1.1  fredette  */
     19  1.1  fredette /*
     20  1.1  fredette  * Copyright (c) 1990,1994 The University of Utah and
     21  1.1  fredette  * the Computer Systems Laboratory (CSL).  All rights reserved.
     22  1.1  fredette  *
     23  1.1  fredette  * THE UNIVERSITY OF UTAH AND CSL PROVIDE THIS SOFTWARE IN ITS "AS IS"
     24  1.1  fredette  * CONDITION, AND DISCLAIM ANY LIABILITY OF ANY KIND FOR ANY DAMAGES
     25  1.1  fredette  * WHATSOEVER RESULTING FROM ITS USE.
     26  1.1  fredette  *
     27  1.1  fredette  * CSL requests users of this software to return to csl-dist (at) cs.utah.edu any
     28  1.1  fredette  * improvements that they make and grant CSL redistribution rights.
     29  1.1  fredette  *
     30  1.1  fredette  * 	Utah $Hdr: bzero.s 1.9 94/12/14$
     31  1.1  fredette  *	Author: Bob Wheeler, University of Utah CSL
     32  1.1  fredette  */
     33  1.1  fredette 
     34  1.1  fredette #include <machine/asm.h>
     35  1.1  fredette 
     36  1.1  fredette #ifdef SYSLIBC_SCCS
     37  1.1  fredette 	.text
     38  1.1  fredette 	.asciz "$OpenBSD: bzero.S,v 1.3 2001/06/04 23:14:02 mickey Exp $"
     39  1.1  fredette 	.align	4
     40  1.1  fredette #endif
     41  1.1  fredette 
     42  1.1  fredette /*
     43  1.3     skrll  * void
     44  1.1  fredette  * bzero(dst, count)
     45  1.2      matt  *	void *dst;
     46  1.2      matt  *	size_t count;
     47  1.1  fredette  */
     48  1.1  fredette LEAF_ENTRY(bzero)
     49  1.2      matt         comb,>=,n %r0,%arg1,$bzero_exit
     50  1.1  fredette 
     51  1.1  fredette 	/*
     52  1.1  fredette 	 * If we need to clear less than a word do it a byte at a time
     53  1.1  fredette 	 */
     54  1.1  fredette 
     55  1.2      matt 	comib,>>,n 4,%arg1,$bzero_bytes
     56  1.1  fredette 
     57  1.1  fredette 	/*
     58  1.3     skrll 	 * Since we are only clearing memory the alignment restrictions
     59  1.1  fredette 	 * are simplified. Figure out how many "extra" bytes we need to
     60  1.1  fredette 	 * store with stbys.
     61  1.1  fredette 	 */
     62  1.1  fredette 
     63  1.2      matt         extru   %arg0,31,2,%t1
     64  1.2      matt         add     %arg1,%t1,%arg1
     65  1.1  fredette 
     66  1.1  fredette 	/*
     67  1.3     skrll 	 * We will zero the destination in blocks of 16 bytes as long as we
     68  1.1  fredette 	 * can and then we'll go to the 4 byte moves.
     69  1.1  fredette 	 */
     70  1.1  fredette 
     71  1.1  fredette 	comib,>>=	15, %arg1, $bzero_word
     72  1.1  fredette 	addi		-16, %arg1, %arg1
     73  1.1  fredette 
     74  1.2      matt $bzero_loop_16:
     75  1.2      matt         stbys,b,m %r0,4(%arg0)
     76  1.2      matt         stwm    %r0,4(%arg0)
     77  1.2      matt         stwm    %r0,4(%arg0)
     78  1.2      matt         stwm    %r0,4(%arg0)
     79  1.1  fredette 	comib,<<	15, %arg1, $bzero_loop_16
     80  1.4     skrll 	 addi		-16, %arg1, %arg1
     81  1.1  fredette 
     82  1.1  fredette 	/*
     83  1.3     skrll 	 * see if there is anything left that needs to be zeroed in a word
     84  1.3     skrll 	 * move. Since the count was decremented by 16, add 12 to test if
     85  1.1  fredette 	 * there are any full word moves left to do.
     86  1.1  fredette 	 */
     87  1.1  fredette 
     88  1.2      matt $bzero_word:
     89  1.2      matt         addib,<,n 12,%arg1,$bzero_cleanup
     90  1.1  fredette 
     91  1.2      matt $bzero_loop_4:
     92  1.2      matt         addib,>= -4,%arg1,$bzero_loop_4
     93  1.4     skrll          stbys,b,m %r0,4(%arg0)
     94  1.1  fredette 
     95  1.1  fredette 	/*
     96  1.1  fredette 	 * zero the last bytes that may be unaligned on a word boundary
     97  1.1  fredette 	 */
     98  1.1  fredette 
     99  1.2      matt $bzero_cleanup:
    100  1.2      matt         addib,=,n 4,%arg1,$bzero_exit
    101  1.2      matt         add	%arg0,%arg1,%arg0
    102  1.1  fredette         b       $bzero_exit
    103  1.4     skrll          stbys,e %r0,0(%arg0)
    104  1.1  fredette 	b,n	$bzero_exit
    105  1.1  fredette 
    106  1.1  fredette 
    107  1.1  fredette 	/*
    108  1.1  fredette 	 * zero by bytes
    109  1.1  fredette 	 */
    110  1.1  fredette 
    111  1.2      matt $bzero_bytes:
    112  1.2      matt         addib,> -1,%arg1,$bzero_bytes
    113  1.4     skrll          stbs,ma %r0,1(%arg0)
    114  1.1  fredette 
    115  1.2      matt $bzero_exit:
    116  1.1  fredette 	bv,n	%r0(%rp)
    117  1.1  fredette EXIT(bzero)
    118  1.1  fredette 
    119  1.1  fredette 	.end
    120