summaryrefslogtreecommitdiff
path: root/lib/libc
diff options
context:
space:
mode:
authorMichael Shalayeff <mickey@cvs.openbsd.org>1998-08-28 20:59:43 +0000
committerMichael Shalayeff <mickey@cvs.openbsd.org>1998-08-28 20:59:43 +0000
commit3aa8646dec5da22aead51440581d3eb710cb206e (patch)
tree0052522c401dabfab732766d9abae31529ff9340 /lib/libc
parent455343e8913a80a848d260f9475d25213a754448 (diff)
some libc parts; memmove.S to written
Diffstat (limited to 'lib/libc')
-rw-r--r--lib/libc/arch/hppa/DEFS.h3
-rw-r--r--lib/libc/arch/hppa/SYS.h56
-rw-r--r--lib/libc/arch/hppa/net/Makefile.inc2
-rw-r--r--lib/libc/arch/hppa/string/Makefile.inc7
-rw-r--r--lib/libc/arch/hppa/string/bcmp.S76
-rw-r--r--lib/libc/arch/hppa/string/bcopy.S238
-rw-r--r--lib/libc/arch/hppa/string/bzero.S106
-rw-r--r--lib/libc/arch/hppa/string/ffs.S52
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)