CVS commit: src/common/lib/libc/arch/mips/string

2015-05-25 Thread Matt Thomas
Module Name:src
Committed By:   matt
Date:   Tue May 26 06:55:08 UTC 2015

Modified Files:
src/common/lib/libc/arch/mips/string: strchr.S strrchr.S

Log Message:
force 2nd to argument to unsigned byte value.
(found by t_strchr and t_strrchr tests)


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/common/lib/libc/arch/mips/string/strchr.S
cvs rdiff -u -r1.2 -r1.3 src/common/lib/libc/arch/mips/string/strrchr.S

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/common/lib/libc/arch/mips/string/strchr.S
diff -u src/common/lib/libc/arch/mips/string/strchr.S:1.3 src/common/lib/libc/arch/mips/string/strchr.S:1.4
--- src/common/lib/libc/arch/mips/string/strchr.S:1.3	Sun Jan  2 02:58:52 2011
+++ src/common/lib/libc/arch/mips/string/strchr.S	Tue May 26 06:55:08 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: strchr.S,v 1.3 2011/01/02 02:58:52 matt Exp $	*/
+/*	$NetBSD: strchr.S,v 1.4 2015/05/26 06:55:08 matt Exp $	*/
 
 /*-
  * Copyright (c) 1991, 1993
@@ -36,7 +36,7 @@
 
 #if defined(LIBC_SCCS) && !defined(lint)
 	ASMSTR("from: @(#)index.s	8.1 (Berkeley) 6/4/93")
-	ASMSTR("$NetBSD: strchr.S,v 1.3 2011/01/02 02:58:52 matt Exp $")
+	ASMSTR("$NetBSD: strchr.S,v 1.4 2015/05/26 06:55:08 matt Exp $")
 #endif /* LIBC_SCCS and not lint */
 
 #ifdef __ABICALLS__
@@ -45,6 +45,7 @@
 
 LEAF(strchr)
 XLEAF(index)
+	and	a1, 0xff		# limit to byte value
 1:
 	lbu	a2, 0(a0)		# get a byte
 	PTR_ADDU a0, 1

Index: src/common/lib/libc/arch/mips/string/strrchr.S
diff -u src/common/lib/libc/arch/mips/string/strrchr.S:1.2 src/common/lib/libc/arch/mips/string/strrchr.S:1.3
--- src/common/lib/libc/arch/mips/string/strrchr.S:1.2	Sun Jan  2 02:58:52 2011
+++ src/common/lib/libc/arch/mips/string/strrchr.S	Tue May 26 06:55:08 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: strrchr.S,v 1.2 2011/01/02 02:58:52 matt Exp $	*/
+/*	$NetBSD: strrchr.S,v 1.3 2015/05/26 06:55:08 matt Exp $	*/
 
 /*-
  * Copyright (c) 1991, 1993
@@ -36,7 +36,7 @@
 
 #if defined(LIBC_SCCS) && !defined(lint)
 	ASMSTR("from: @(#)rindex.s	8.1 (Berkeley) 6/4/93")
-	ASMSTR("$NetBSD: strrchr.S,v 1.2 2011/01/02 02:58:52 matt Exp $")
+	ASMSTR("$NetBSD: strrchr.S,v 1.3 2015/05/26 06:55:08 matt Exp $")
 #endif /* LIBC_SCCS and not lint */
 
 #ifdef __ABICALLS__
@@ -45,6 +45,7 @@
 
 LEAF(strrchr)
 XLEAF(rindex)
+	and	a1, 0xff		# limit to byte value
 	move	v0, zero		# default if not found
 1:
 	lbu	a3, 0(a0)		# get a byte



CVS commit: src/common/lib/libc/arch/mips/string

2011-07-04 Thread matthew green
Module Name:src
Committed By:   mrg
Date:   Mon Jul  4 11:35:26 UTC 2011

Modified Files:
src/common/lib/libc/arch/mips/string: ffs.S

Log Message:
add a weak alias from ffs to __ffssi2.  newsmips kernels link now.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/common/lib/libc/arch/mips/string/ffs.S

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/common/lib/libc/arch/mips/string/ffs.S
diff -u src/common/lib/libc/arch/mips/string/ffs.S:1.3 src/common/lib/libc/arch/mips/string/ffs.S:1.4
--- src/common/lib/libc/arch/mips/string/ffs.S:1.3	Sun Jan 23 06:47:14 2011
+++ src/common/lib/libc/arch/mips/string/ffs.S	Mon Jul  4 11:35:26 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: ffs.S,v 1.3 2011/01/23 06:47:14 matt Exp $	*/
+/*	$NetBSD: ffs.S,v 1.4 2011/07/04 11:35:26 mrg Exp $	*/
 
 /*-
  * Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -31,13 +31,14 @@
 
 #include 
 
-RCSID("$NetBSD: ffs.S,v 1.3 2011/01/23 06:47:14 matt Exp $")
+RCSID("$NetBSD: ffs.S,v 1.4 2011/07/04 11:35:26 mrg Exp $")
 
 /* bit = ffs(value) */
 
 	.text
 	.set	noreorder
 
+WEAK_ALIAS(__ffssi2,ffs)
 #if __mips == 64 || __mips == 32
 LEAF(ffs)
 #ifndef _LP64



CVS commit: src/common/lib/libc/arch/mips/string

2011-01-22 Thread Matt Thomas
Module Name:src
Committed By:   matt
Date:   Sun Jan 23 06:47:14 UTC 2011

Modified Files:
src/common/lib/libc/arch/mips/string: ffs.S

Log Message:
Add a new O(log(2) implementation.  On mips32/mips64, use clz/dclz.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/common/lib/libc/arch/mips/string/ffs.S

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/common/lib/libc/arch/mips/string/ffs.S
diff -u src/common/lib/libc/arch/mips/string/ffs.S:1.2 src/common/lib/libc/arch/mips/string/ffs.S:1.3
--- src/common/lib/libc/arch/mips/string/ffs.S:1.2	Mon Dec 14 00:39:00 2009
+++ src/common/lib/libc/arch/mips/string/ffs.S	Sun Jan 23 06:47:14 2011
@@ -1,11 +1,11 @@
-/*	$NetBSD: ffs.S,v 1.2 2009/12/14 00:39:00 matt Exp $	*/
+/*	$NetBSD: ffs.S,v 1.3 2011/01/23 06:47:14 matt Exp $	*/
 
 /*-
- * Copyright (c) 1991, 1993
- *	The Regents of the University of California.  All rights reserved.
+ * Copyright (c) 2010 The NetBSD Foundation, Inc.
+ * All rights reserved.
  *
- * This code is derived from software contributed to Berkeley by
- * Ralph Campbell.
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Matt Thomas of 3am Software Foundry.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -15,40 +15,95 @@
  * 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. Neither the name of the University nor the names of its contributors
- *may be used to endorse or promote products derived from this software
- *without specific prior written permission.
  *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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.
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``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 FOUNDATION OR CONTRIBUTORS
+ * 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 
 
-#if defined(LIBC_SCCS) && !defined(lint)
-	/* RCSID("from: @(#)ffs.s	8.1 (Berkeley) 6/4/93") */
-	RCSID("$NetBSD: ffs.S,v 1.2 2009/12/14 00:39:00 matt Exp $")
-#endif /* LIBC_SCCS and not lint */
+RCSID("$NetBSD: ffs.S,v 1.3 2011/01/23 06:47:14 matt Exp $")
 
 /* bit = ffs(value) */
 
+	.text
+	.set	noreorder
+
+#if __mips == 64 || __mips == 32
+LEAF(ffs)
+#ifndef _LP64
+XLEAF(ffsl)
+#endif
+	.set	push
+	.set	mips32
+	li	v1, 32
+#if __mips == 64
+	sll	a0, a0, 0
+#endif
+	negu	a1, a0
+	and	a0, a1
+	clz	v0, a0
+	j	ra
+	 subu	v0, v1, v0
+	.set	pop
+END(ffs)
+#if defined(_LP64) && __mips == 64
+LEAF(ffsl)
+	li	v1, 64
+	negu	a1, a0
+	and	a0, a1
+	dclz	v0, a0
+	j	ra
+	 subu	v0, v1, v0
+END(ffsl)
+#endif
+#else /* __mips != 64 && __mips != 32 */
+
+#ifdef _LP64
+XLEAF(ffsl)
+	beqz	a0, 6f			# fast escape if 0
+	 li	v0, 0
+
+	li	v0, 1
+	li	a3, 0x		# initial mask
+	b	1f
+	 li	a2, 32			# bit count of mask
+#endif /* _LP64 */
 LEAF(ffs)
-	move	v0, zero
-	beq	a0, zero, done
+#ifndef _LP64
+XLEAF(ffsl)
+#endif /* !_LP64 */
+	beqz	a0, 6f
+	 li	v0, 0
+
+	li	v0, 1
+	li	a3, 0x		# initial mask
+	li	a2, 16			# bit count of mask
 1:
-	and	v1, a0, 1		# bit set?
-	addu	v0, v0, 1
-	srl	a0, a0, 1
-	beq	v1, zero, 1b		# no, continue
-done:
+	and	v1, a0, a3		# focus no lower half of bits left
+	bnez	v1, 2f			# any of the lower half set?
+	 nop
+	addu	v0, a2			# nope, then bit is in the upper half
+#ifdef _LP64
+	dsrlv	a0, a0, a2		# discard low bits
+#else
+	srlv	a0, a0, a2		# discard 

CVS commit: src/common/lib/libc/arch/mips/string

2011-01-01 Thread Matt Thomas
Module Name:src
Committed By:   matt
Date:   Sun Jan  2 02:58:52 UTC 2011

Modified Files:
src/common/lib/libc/arch/mips/string: strchr.S strrchr.S

Log Message:
Make these 64-bit clean.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/common/lib/libc/arch/mips/string/strchr.S
cvs rdiff -u -r1.1 -r1.2 src/common/lib/libc/arch/mips/string/strrchr.S

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/common/lib/libc/arch/mips/string/strchr.S
diff -u src/common/lib/libc/arch/mips/string/strchr.S:1.2 src/common/lib/libc/arch/mips/string/strchr.S:1.3
--- src/common/lib/libc/arch/mips/string/strchr.S:1.2	Fri Jul 17 19:37:57 2009
+++ src/common/lib/libc/arch/mips/string/strchr.S	Sun Jan  2 02:58:52 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: strchr.S,v 1.2 2009/07/17 19:37:57 dsl Exp $	*/
+/*	$NetBSD: strchr.S,v 1.3 2011/01/02 02:58:52 matt Exp $	*/
 
 /*-
  * Copyright (c) 1991, 1993
@@ -36,7 +36,7 @@
 
 #if defined(LIBC_SCCS) && !defined(lint)
 	ASMSTR("from: @(#)index.s	8.1 (Berkeley) 6/4/93")
-	ASMSTR("$NetBSD: strchr.S,v 1.2 2009/07/17 19:37:57 dsl Exp $")
+	ASMSTR("$NetBSD: strchr.S,v 1.3 2011/01/02 02:58:52 matt Exp $")
 #endif /* LIBC_SCCS and not lint */
 
 #ifdef __ABICALLS__
@@ -47,13 +47,13 @@
 XLEAF(index)
 1:
 	lbu	a2, 0(a0)		# get a byte
-	addu	a0, a0, 1
+	PTR_ADDU a0, 1
 	beq	a2, a1, fnd
 	bne	a2, zero, 1b
 notfnd:
 	move	v0, zero
 	j	ra
 fnd:
-	subu	v0, a0, 1
+	PTR_SUBU v0, a0, 1
 	j	ra
 END(strchr)

Index: src/common/lib/libc/arch/mips/string/strrchr.S
diff -u src/common/lib/libc/arch/mips/string/strrchr.S:1.1 src/common/lib/libc/arch/mips/string/strrchr.S:1.2
--- src/common/lib/libc/arch/mips/string/strrchr.S:1.1	Thu Jul 16 21:25:36 2009
+++ src/common/lib/libc/arch/mips/string/strrchr.S	Sun Jan  2 02:58:52 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: strrchr.S,v 1.1 2009/07/16 21:25:36 dsl Exp $	*/
+/*	$NetBSD: strrchr.S,v 1.2 2011/01/02 02:58:52 matt Exp $	*/
 
 /*-
  * Copyright (c) 1991, 1993
@@ -36,7 +36,7 @@
 
 #if defined(LIBC_SCCS) && !defined(lint)
 	ASMSTR("from: @(#)rindex.s	8.1 (Berkeley) 6/4/93")
-	ASMSTR("$NetBSD: strrchr.S,v 1.1 2009/07/16 21:25:36 dsl Exp $")
+	ASMSTR("$NetBSD: strrchr.S,v 1.2 2011/01/02 02:58:52 matt Exp $")
 #endif /* LIBC_SCCS and not lint */
 
 #ifdef __ABICALLS__
@@ -48,9 +48,9 @@
 	move	v0, zero		# default if not found
 1:
 	lbu	a3, 0(a0)		# get a byte
-	addu	a0, a0, 1
+	PTR_ADDU a0, a0, 1
 	bne	a3, a1, 2f
-	subu	v0, a0, 1		# save address of last match
+	PTR_SUBU v0, a0, 1		# save address of last match
 2:
 	bne	a3, zero, 1b		# continue if not end
 	j	ra



CVS commit: src/common/lib/libc/arch/mips/string

2009-07-16 Thread David Laight
Module Name:src
Committed By:   dsl
Date:   Thu Jul 16 21:25:36 UTC 2009

Added Files:
src/common/lib/libc/arch/mips/string: strchr.S strrchr.S

Log Message:
Add asm files for str(r)chr by copying the files for (r)index from
src/libc/arch/mips/string.
Add XLEAF() for index entry points.


To generate a diff of this commit:
cvs rdiff -u -r0 -r1.1 src/common/lib/libc/arch/mips/string/strchr.S \
src/common/lib/libc/arch/mips/string/strrchr.S

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Added files:

Index: src/common/lib/libc/arch/mips/string/strchr.S
diff -u /dev/null src/common/lib/libc/arch/mips/string/strchr.S:1.1
--- /dev/null	Thu Jul 16 21:25:36 2009
+++ src/common/lib/libc/arch/mips/string/strchr.S	Thu Jul 16 21:25:36 2009
@@ -0,0 +1,59 @@
+/*	$NetBSD: strchr.S,v 1.1 2009/07/16 21:25:36 dsl Exp $	*/
+
+/*-
+ * Copyright (c) 1991, 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Ralph Campbell.
+ *
+ * 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. Neither the name of the University nor the names of its contributors
+ *may be used to endorse or promote products derived from this software
+ *without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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 
+
+#if defined(LIBC_SCCS) && !defined(lint)
+	ASMSTR("from: @(#)index.s	8.1 (Berkeley) 6/4/93")
+	ASMSTR("$NetBSD: strchr.S,v 1.1 2009/07/16 21:25:36 dsl Exp $")
+#endif /* LIBC_SCCS and not lint */
+
+#ifdef __ABICALLS__
+	.abicalls
+#endif
+
+LEAF(strstr)
+XLEAF(index)
+1:
+	lbu	a2, 0(a0)		# get a byte
+	addu	a0, a0, 1
+	beq	a2, a1, fnd
+	bne	a2, zero, 1b
+notfnd:
+	move	v0, zero
+	j	ra
+fnd:
+	subu	v0, a0, 1
+	j	ra
+END(strstr)
Index: src/common/lib/libc/arch/mips/string/strrchr.S
diff -u /dev/null src/common/lib/libc/arch/mips/string/strrchr.S:1.1
--- /dev/null	Thu Jul 16 21:25:36 2009
+++ src/common/lib/libc/arch/mips/string/strrchr.S	Thu Jul 16 21:25:36 2009
@@ -0,0 +1,57 @@
+/*	$NetBSD: strrchr.S,v 1.1 2009/07/16 21:25:36 dsl Exp $	*/
+
+/*-
+ * Copyright (c) 1991, 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Ralph Campbell.
+ *
+ * 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. Neither the name of the University nor the names of its contributors
+ *may be used to endorse or promote products derived from this software
+ *without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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 AN