diff options
author | Michael Shalayeff <mickey@cvs.openbsd.org> | 1998-08-28 20:59:43 +0000 |
---|---|---|
committer | Michael Shalayeff <mickey@cvs.openbsd.org> | 1998-08-28 20:59:43 +0000 |
commit | 3aa8646dec5da22aead51440581d3eb710cb206e (patch) | |
tree | 0052522c401dabfab732766d9abae31529ff9340 /lib/libc/arch/hppa | |
parent | 455343e8913a80a848d260f9475d25213a754448 (diff) |
some libc parts; memmove.S to written
Diffstat (limited to 'lib/libc/arch/hppa')
-rw-r--r-- | lib/libc/arch/hppa/DEFS.h | 3 | ||||
-rw-r--r-- | lib/libc/arch/hppa/SYS.h | 56 | ||||
-rw-r--r-- | lib/libc/arch/hppa/net/Makefile.inc | 2 | ||||
-rw-r--r-- | lib/libc/arch/hppa/string/Makefile.inc | 7 | ||||
-rw-r--r-- | lib/libc/arch/hppa/string/bcmp.S | 76 | ||||
-rw-r--r-- | lib/libc/arch/hppa/string/bcopy.S | 238 | ||||
-rw-r--r-- | lib/libc/arch/hppa/string/bzero.S | 106 | ||||
-rw-r--r-- | lib/libc/arch/hppa/string/ffs.S | 52 |
8 files changed, 540 insertions, 0 deletions
diff --git a/lib/libc/arch/hppa/DEFS.h b/lib/libc/arch/hppa/DEFS.h new file mode 100644 index 00000000000..31c1d99824c --- /dev/null +++ b/lib/libc/arch/hppa/DEFS.h @@ -0,0 +1,3 @@ +/* $OpenBSD: DEFS.h,v 1.1 1998/08/28 20:59:40 mickey Exp $ */ + +#include <machine/asm.h> diff --git a/lib/libc/arch/hppa/SYS.h b/lib/libc/arch/hppa/SYS.h new file mode 100644 index 00000000000..664ae9330a6 --- /dev/null +++ b/lib/libc/arch/hppa/SYS.h @@ -0,0 +1,56 @@ +/* $OpenBSD: SYS.h,v 1.1 1998/08/28 20:59:41 mickey Exp $ */ + +/* + * Copyright (c) 1998 Michael Shalayeff + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Michael Shalayeff. + * 4. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <sys/syscall.h> +#include <machine/asm.h> +#include <machine/vmparam.h> + +#define RSYSCALL(x) !\ +ENTRY(x) !\ + stw rp, FM_ERP(sr0,sp) !\ + ldil L%SYSCALLGATE, r1 !\ + ble 4(sr7, r1) !\ + ldi __CONCAT(SYS_,x),r22!\ + or,<> r0,r22,r0 !\ + ldw FM_ERP(sr0,sp),rp !\ +EXIT(x) + +#define PSEUDO(x,y) !\ +ENTRY(x) !\ + stw rp, FM_ERP(sr0,sp) !\ + ldil L%SYSCALLGATE, r1 !\ + ble 4(sr7, r1) !\ + ldi __CONCAT(SYS_,y),r22!\ + or,<> r0,r22,r0 !\ + ldw FM_ERP(sr0,sp),rp !\ +EXIT(x) + diff --git a/lib/libc/arch/hppa/net/Makefile.inc b/lib/libc/arch/hppa/net/Makefile.inc new file mode 100644 index 00000000000..86017c7b155 --- /dev/null +++ b/lib/libc/arch/hppa/net/Makefile.inc @@ -0,0 +1,2 @@ +SRCS += ntohl.c ntohs.c htons.c htonl.c + diff --git a/lib/libc/arch/hppa/string/Makefile.inc b/lib/libc/arch/hppa/string/Makefile.inc new file mode 100644 index 00000000000..81a6688386e --- /dev/null +++ b/lib/libc/arch/hppa/string/Makefile.inc @@ -0,0 +1,7 @@ +# $OpenBSD: Makefile.inc,v 1.1 1998/08/28 20:59:41 mickey Exp $ + +SRCS+= memchr.c memcmp.c memset.c index.c rindex.c \ + strcat.c strcmp.c strcpy.c strcspn.c strlen.c \ + strncat.c strncmp.c strncpy.c strpbrk.c strsep.c \ + strspn.c strstr.c swab.c +SRCS+= bcmp.S bcopy.S bzero.S ffs.S memmove.S diff --git a/lib/libc/arch/hppa/string/bcmp.S b/lib/libc/arch/hppa/string/bcmp.S new file mode 100644 index 00000000000..5ab7b1ef785 --- /dev/null +++ b/lib/libc/arch/hppa/string/bcmp.S @@ -0,0 +1,76 @@ +/* $OpenBSD: bcmp.S,v 1.1 1998/08/28 20:59:41 mickey Exp $ */ + +/* + * Copyright 1996 1995 by Open Software Foundation, Inc. + * All Rights Reserved + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose and without fee is hereby granted, + * provided that the above copyright notice appears in all copies and + * that both the copyright notice and this permission notice appear in + * supporting documentation. + * + * OSF DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL OSF BE LIABLE FOR ANY SPECIAL, INDIRECT, OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + * LOSS OF USE, DATA OR PROFITS, WHETHER IN ACTION OF CONTRACT, + * NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION + * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ +/* + * (c) Copyright 1988 HEWLETT-PACKARD COMPANY + * + * To anyone who acknowledges that this file is provided "AS IS" + * without any express or implied warranty: + * permission to use, copy, modify, and distribute this file + * for any purpose is hereby granted without fee, provided that + * the above copyright notice and this notice appears in all + * copies, and that the name of Hewlett-Packard Company not be + * used in advertising or publicity pertaining to distribution + * of the software without specific, written prior permission. + * Hewlett-Packard Company makes no representations about the + * suitability of this software for any purpose. + */ +/* + * Copyright (c) 1990,1991,1994 The University of Utah and + * the Computer Systems Laboratory (CSL). All rights reserved. + * + * THE UNIVERSITY OF UTAH AND CSL PROVIDE THIS SOFTWARE IN ITS "AS IS" + * CONDITION, AND DISCLAIM ANY LIABILITY OF ANY KIND FOR ANY DAMAGES + * WHATSOEVER RESULTING FROM ITS USE. + * + * CSL requests users of this software to return to csl-dist@cs.utah.edu any + * improvements that they make and grant CSL redistribution rights. + * + * Utah $Hdr: movc.s 1.26 94/12/14$ + */ + +#include <machine/asm.h> + +/* + * int + * bcmp(src, dst, count) + * vm_offset_t src; + * vm_offset_t dst; + * int count; + */ +ENTRY(bcmp) + comb,>= r0,arg2,$bcmp_exit + copy t1,t2 + +$bcmp_loop + ldbs,ma 1(arg0),t1 + ldbs,ma 1(arg1),t2 + comb,<>,n t1,t2,$bcmp_exit + addib,<> -1,arg2,$bcmp_loop + nop + +$bcmp_exit + bv 0(r2) + sub t1,t2,ret0 + +EXIT(bcmp) + diff --git a/lib/libc/arch/hppa/string/bcopy.S b/lib/libc/arch/hppa/string/bcopy.S new file mode 100644 index 00000000000..177f41eac05 --- /dev/null +++ b/lib/libc/arch/hppa/string/bcopy.S @@ -0,0 +1,238 @@ +/* $OpenBSD: bcopy.S,v 1.1 1998/08/28 20:59:41 mickey Exp $ */ + +/* + * (c) Copyright 1988 HEWLETT-PACKARD COMPANY + * + * To anyone who acknowledges that this file is provided "AS IS" + * without any express or implied warranty: + * permission to use, copy, modify, and distribute this file + * for any purpose is hereby granted without fee, provided that + * the above copyright notice and this notice appears in all + * copies, and that the name of Hewlett-Packard Company not be + * used in advertising or publicity pertaining to distribution + * of the software without specific, written prior permission. + * Hewlett-Packard Company makes no representations about the + * suitability of this software for any purpose. + */ +/* + * Copyright (c) 1990,1994 The University of Utah and + * the Computer Systems Laboratory (CSL). All rights reserved. + * + * THE UNIVERSITY OF UTAH AND CSL PROVIDE THIS SOFTWARE IN ITS "AS IS" + * CONDITION, AND DISCLAIM ANY LIABILITY OF ANY KIND FOR ANY DAMAGES + * WHATSOEVER RESULTING FROM ITS USE. + * + * CSL requests users of this software to return to csl-dist@cs.utah.edu any + * improvements that they make and grant CSL redistribution rights. + * + * Utah $Hdr: bcopy.s 1.10 94/12/14$ + * Author: Bob Wheeler, University of Utah CSL + */ + +#include <machine/asm.h> + +/* + * void + * bcopy(src, dst, count) + * vm_offset_t src; + * vm_offset_t dst; + * int count; + */ +ENTRY(bcopy) + comb,>=,n r0,arg2,$bcopy_exit + + /* + * See if the source and destination are word aligned and if the count + * is an integer number of words. If so then we can use an optimized + * routine. If not then branch to bcopy_checkalign and see what we can + * do there. + */ + + or arg0,arg1,t1 + or t1,arg2,t2 + extru,= t2,31,2,r0 + b,n $bcopy_checkalign + + addib,<,n -16,arg2,$bcopy_movewords + + /* + * We can move the data in 4 word moves. We'll use 4 registers to + * avoid interlock and pipeline stalls. + */ + +$bcopy_loop16 + + ldwm 16(arg0),t1 + ldw -12(arg0),t2 + ldw -8(arg0),t3 + ldw -4(arg0),t4 + stwm t1,16(arg1) + stw t2,-12(arg1) + stw t3,-8(arg1) + addib,>= -16,arg2,$bcopy_loop16 + stw t4,-4(arg1) + + + /* + * We have already decremented the count by 16, add 12 to it and then + * we can test if there is at least 1 word left to move. + */ + +$bcopy_movewords + addib,<,n 12,arg2,$bcopy_exit + + /* + * Clean up any remaining words that were not moved in the 16 byte + * moves + */ + +$bcopy_loop4 + ldwm 4(arg0),t1 + addib,>= -4,arg2,$bcopy_loop4 + stwm t1,4(arg1) + + b,n $bcopy_exit + + +$bcopy_checkalign + + /* + * The source or destination is not word aligned or the count is not + * an integral number of words. If we are dealing with less than 16 + * bytes then just do it byte by byte. Otherwise, see if the data has + * the same basic alignment. We will add in the byte offset to size to + * keep track of what we have to move even though the stbys instruction + * won't physically move it. + */ + + comib,>= 15,arg2,$bcopy_byte + extru arg0,31,2,t1 + extru arg1,31,2,t2 + add arg2,t2,arg2 + comb,<> t2,t1,$bcopy_unaligned + dep 0,31,2,arg0 + + /* + * the source and destination have the same basic alignment. We will + * move the data in blocks of 16 bytes as long as we can and then + * we'll go to the 4 byte moves. + */ + + addib,<,n -16,arg2,$bcopy_aligned2 + +$bcopy_loop_aligned4 + ldwm 16(arg0),t1 + ldw -12(arg0),t2 + ldw -8(arg0),t3 + ldw -4(arg0),t4 + stbys,b,m t1,4(arg1) + stwm t2,4(arg1) + stwm t3,4(arg1) + addib,>= -16,arg2,$bcopy_loop_aligned4 + stwm t4,4(arg1) + + /* + * see if there is anything left that needs to be moved in a word move. + * Since the count was decremented by 16, add 12 to test if there are + * any full word moves left to do. + */ + +$bcopy_aligned2 + addib,<,n 12,arg2,$bcopy_cleanup + +$bcopy_loop_aligned2 + ldws,ma 4(arg0),t1 + addib,>= -4,arg2,$bcopy_loop_aligned2 + stbys,b,m t1,4(arg1) + + /* + * move the last bytes that may be unaligned on a word boundary + */ + +$bcopy_cleanup + addib,=,n 4,arg2,$bcopy_exit + ldws 0(arg0),t1 + add arg1,arg2,arg1 + b $bcopy_exit + stbys,e t1,0(arg1) + + /* + * The source and destination are not alligned on the same boundary + * types. We will have to shift the data around. Figure out the shift + * amount and load it into cr11. + */ + +$bcopy_unaligned + sub,>= t2,t1,t3 + ldwm 4(arg0),t1 + zdep t3,28,29,t4 + mtctl t4,11 + + /* + * see if we can do some of this work in blocks of 16 bytes + */ + + addib,<,n -16,arg2,$bcopy_unaligned_words + +$bcopy_unaligned4 + ldwm 16(arg0),t2 + ldw -12(arg0),t3 + ldw -8(arg0),t4 + ldw -4(arg0),r1 + vshd t1,t2,r28 + stbys,b,m r28,4(arg1) + vshd t2,t3,r28 + stwm r28,4(arg1) + vshd t3,t4,r28 + stwm r28,4(arg1) + vshd t4,r1,r28 + stwm r28,4(arg1) + addib,>= -16,arg2,$bcopy_unaligned4 + copy r1,t1 + + /* + * see if there is a full word that we can transfer + */ + +$bcopy_unaligned_words + addib,<,n 12,arg2,$bcopy_unaligned_cleanup1 + +$bcopy_unaligned_loop + ldwm 4(arg0),t2 + vshd t1,t2,t3 + addib,< -4,arg2,$bcopy_unaligned_cleanup2 + stbys,b,m t3,4(arg1) + + ldwm 4(arg0),t1 + vshd t2,t1,t3 + addib,>= -4,arg2,$bcopy_unaligned_loop + stbys,b,m t3,4(arg1) + +$bcopy_unaligned_cleanup1 + copy t1,t2 + +$bcopy_unaligned_cleanup2 + addib,<=,n 4,arg2,$bcopy_exit + add arg1,arg2,arg1 + mfctl sar,t3 + extru t3,28,2,t3 + sub,<= arg2,t3,r0 + ldwm 4(arg0),t1 + vshd t2,t1,t3 + b $bcopy_exit + stbys,e t3,0(arg1) + + /* + * move data one byte at a time + */ + +$bcopy_byte + comb,>=,n r0,arg2,$bcopy_exit + +$bcopy_loop_byte + ldbs,ma 1(arg0),t1 + addib,> -1,arg2,$bcopy_loop_byte + stbs,ma t1,1(arg1) + +$bcopy_exit +EXIT(bcopy) diff --git a/lib/libc/arch/hppa/string/bzero.S b/lib/libc/arch/hppa/string/bzero.S new file mode 100644 index 00000000000..8e403f200fa --- /dev/null +++ b/lib/libc/arch/hppa/string/bzero.S @@ -0,0 +1,106 @@ +/* $OpenBSD: bzero.S,v 1.1 1998/08/28 20:59:42 mickey Exp $ */ + +/* + * (c) Copyright 1988 HEWLETT-PACKARD COMPANY + * + * To anyone who acknowledges that this file is provided "AS IS" + * without any express or implied warranty: + * permission to use, copy, modify, and distribute this file + * for any purpose is hereby granted without fee, provided that + * the above copyright notice and this notice appears in all + * copies, and that the name of Hewlett-Packard Company not be + * used in advertising or publicity pertaining to distribution + * of the software without specific, written prior permission. + * Hewlett-Packard Company makes no representations about the + * suitability of this software for any purpose. + */ +/* + * Copyright (c) 1990,1994 The University of Utah and + * the Computer Systems Laboratory (CSL). All rights reserved. + * + * THE UNIVERSITY OF UTAH AND CSL PROVIDE THIS SOFTWARE IN ITS "AS IS" + * CONDITION, AND DISCLAIM ANY LIABILITY OF ANY KIND FOR ANY DAMAGES + * WHATSOEVER RESULTING FROM ITS USE. + * + * CSL requests users of this software to return to csl-dist@cs.utah.edu any + * improvements that they make and grant CSL redistribution rights. + * + * Utah $Hdr: bzero.s 1.9 94/12/14$ + * Author: Bob Wheeler, University of Utah CSL + */ + +#include <machine/asm.h> + +/* + * void + * bzero(dst, count) + * vm_offset_t dst; + * int count; + */ +ENTRY(bzero) + comb,>=,n r0,arg1,$bzero_exit + + /* + * If we need to clear less than a word do it a byte at a time + */ + + comib,>,n 4,arg1,$bzero_bytes + + /* + * Since we are only clearing memory the alignment restrictions + * are simplified. Figure out how many "extra" bytes we need to + * store with stbys. + */ + + extru arg0,31,2,t2 + add arg1,t2,arg1 + + /* + * We will zero the destination in blocks of 16 bytes as long as we + * can and then we'll go to the 4 byte moves. + */ + + addib,<,n -16,arg1,$bzero_word + +$bzero_loop_16 + stbys,b,m r0,4(arg0) + stwm r0,4(arg0) + stwm r0,4(arg0) + addib,>= -16,arg1,$bzero_loop_16 + stwm r0,4(arg0) + + /* + * see if there is anything left that needs to be zeroed in a word + * move. Since the count was decremented by 16, add 12 to test if + * there are any full word moves left to do. + */ + +$bzero_word + addib,<,n 12,arg1,$bzero_cleanup + +$bzero_loop_4 + addib,>= -4,arg1,$bzero_loop_4 + stbys,b,m r0,4(arg0) + + /* + * zero the last bytes that may be unaligned on a word boundary + */ + +$bzero_cleanup + addib,=,n 4,arg1,$bzero_exit + add arg0,arg1,arg0 + b $bzero_exit + stbys,e r0,0(arg0) + b,n $bzero_exit + + + /* + * zero by bytes + */ + +$bzero_bytes + addib,> -1,arg1,$bzero_bytes + stbs,ma r0,1(arg0) + +$bzero_exit +EXIT(bzero) diff --git a/lib/libc/arch/hppa/string/ffs.S b/lib/libc/arch/hppa/string/ffs.S new file mode 100644 index 00000000000..48a53eacd04 --- /dev/null +++ b/lib/libc/arch/hppa/string/ffs.S @@ -0,0 +1,52 @@ +/* $OpenBSD: ffs.S,v 1.1 1998/08/28 20:59:42 mickey Exp $ */ + +/* + * Copyright (c) 1990, 1991, 1992, 1994, The University of Utah and + * the Computer Systems Laboratory at the University of Utah (CSL). + * All rights reserved. + * + * Permission to use, copy, modify and distribute this software and its + * documentation is hereby granted, provided that both the copyright + * notice and this permission notice appear in all copies of the + * software, derivative works or modified versions, and any portions + * thereof, and that both notices appear in supporting documentation. + * + * THE UNIVERSITY OF UTAH AND CSL ALLOW FREE USE OF THIS SOFTWARE IN ITS "AS + * IS" CONDITION. THE UNIVERSITY OF UTAH AND CSL DISCLAIM ANY LIABILITY OF + * ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. + * + * CSL requests users of this software to return to csl-dist@cs.utah.edu any + * improvements that they make and grant CSL redistribution rights. + * + */ + +#include <machine/asm.h> + +/* + * ffs(bitmask) + * + * Return the position of the "most significant" bit in `bitmask'. + * Since this is similar to the VAX ffs instruction, bits in a word + * are numbered as "32, 31, ... 1", 0 is returned if no bits are set. + */ + +ENTRY(ffs) + comb,= arg0,r0,ffsdone ; If arg0 is 0 + or r0,r0,ret0 ; return 0 + ldi 32,ret0 ; Set return to high bit + extru,= arg0,31,16,r0 ; If low 16 bits are non-zero + addi,tr -16,ret0,ret0 ; subtract 16 from bitpos + shd r0,arg0,16,arg0 ; else shift right 16 bits + extru,= arg0,31,8,r0 ; If low 8 bits are non-zero + addi,tr -8,ret0,ret0 ; subtract 8 from bitpos + shd r0,arg0,8,arg0 ; else shift right 8 bits + extru,= arg0,31,4,r0 ; If low 4 bits are non-zero + addi,tr -4,ret0,ret0 ; subtract 4 from bitpos + shd r0,arg0,4,arg0 ; else shift right 4 bits + extru,= arg0,31,2,r0 ; If low 2 bits are non-zero + addi,tr -2,ret0,ret0 ; subtract 2 from bitpos + shd r0,arg0,2,arg0 ; else shift right 2 bits + extru,= arg0,31,1,r0 ; If low bit is non-zero + addi -1,ret0,ret0 ; subtract 1 from bitpos +ffsdone: +EXIT(ffs) |