Module Name:    src
Committed By:   matt
Date:           Wed Apr 21 05:17:12 UTC 2010

Modified Files:
        src/common/dist/zlib [matt-nb5-mips64]: zlib.h
        src/common/lib/libc/arch/mips/string [matt-nb5-mips64]: ffs.S
        src/common/lib/libc/hash/sha2 [matt-nb5-mips64]: sha2.c

Log Message:
sync to netbsd-5


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.2.40.1 src/common/dist/zlib/zlib.h
cvs rdiff -u -r1.1.40.1 -r1.1.40.2 src/common/lib/libc/arch/mips/string/ffs.S
cvs rdiff -u -r1.7.14.1 -r1.7.14.1.2.1 src/common/lib/libc/hash/sha2/sha2.c

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

Modified files:

Index: src/common/dist/zlib/zlib.h
diff -u src/common/dist/zlib/zlib.h:1.2 src/common/dist/zlib/zlib.h:1.2.40.1
--- src/common/dist/zlib/zlib.h:1.2	Mon Jan 16 17:02:29 2006
+++ src/common/dist/zlib/zlib.h	Wed Apr 21 05:17:12 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: zlib.h,v 1.2 2006/01/16 17:02:29 christos Exp $	*/
+/*	$NetBSD: zlib.h,v 1.2.40.1 2010/04/21 05:17:12 matt Exp $	*/
 
 /* zlib.h -- interface of the 'zlib' general purpose compression library
   version 1.2.3, July 18th, 2005
@@ -1284,7 +1284,9 @@
    seq1 and seq2 concatenated, requiring only adler1, adler2, and len2.
 */
 
+#if !defined(_KERNEL) && !defined(_STANDALONE)
 ZEXTERN uLong ZEXPORT crc32   OF((uLong crc, const Bytef *buf, uInt len));
+#endif
 /*
      Update a running CRC-32 with the bytes buf[0..len-1] and return the
    updated CRC-32. If buf is NULL, this function returns the required initial

Index: src/common/lib/libc/arch/mips/string/ffs.S
diff -u src/common/lib/libc/arch/mips/string/ffs.S:1.1.40.1 src/common/lib/libc/arch/mips/string/ffs.S:1.1.40.2
--- src/common/lib/libc/arch/mips/string/ffs.S:1.1.40.1	Sun Aug 16 03:02:47 2009
+++ src/common/lib/libc/arch/mips/string/ffs.S	Wed Apr 21 05:17:12 2010
@@ -1,11 +1,10 @@
-/*	$NetBSD: ffs.S,v 1.1.40.1 2009/08/16 03:02:47 matt Exp $	*/
-
+/*	$NetBSD: ffs.S,v 1.1.40.2 2010/04/21 05:17:12 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 +14,130 @@
  * 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 <mips/asm.h>
 
-#if defined(LIBC_SCCS) && !defined(lint)
-	/* RCSID("from: @(#)ffs.s	8.1 (Berkeley) 6/4/93") */
-	RCSID("$NetBSD: ffs.S,v 1.1.40.1 2009/08/16 03:02:47 matt Exp $")
-#endif /* LIBC_SCCS and not lint */
+RCSID("$NetBSD: ffs.S,v 1.1.40.2 2010/04/21 05:17:12 matt Exp $")
 
 /* bit = ffs(value) */
 
+	.set	noreorder
+
+#if __mips == 64 || __mips == 32
 LEAF(ffs)
-	move	v0, zero
-	beq	a0, zero, done
+#ifndef _LP64
+XLEAF(ffsl)
+#endif
+	.set	push
+	.set	mips32
+	li	v1, 32
+#if __mips == 64
+	sll	v0, a0, 0
+#endif
+	clz	v0, v0
+	j	ra
+	 subu	v0, v1, v0
+	.set	pop
+END(ffs)
+#if defined(_LP64) && __mips == 64
+LEAF(ffsl)
+	li	v1, 64
+	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
+#if 1
+	li	a3, 0xffffffff		# initial mask
+	b	1f
+	 li	a2, 32			# bit count of mask
+#else
+	dsll	v1, a0, 32		# discard the upper 32 bits
+	bnez	v1, 1f			# any of the lower 32 bits set?
+	 nop
+	addiu	v0, 32			# nope, then bit must be in the upper 32
+	b	1f
+	 dsrl	a0, 32			# discard low 32 bits
+#endif
+#endif /* _LP64 */
+LEAF(ffs)
+#ifndef _LP64
+XLEAF(ffsl)
+#endif /* !_LP64 */
+	beqz	a0, 6f
+	 li	v0, 0
+
+	li	v0, 1
+	li	a3, 0xffff		# 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:
+#if 1
+	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 low bits
+#endif
+2:
+	srl	a2, 1			# divide bit count by 2
+	bnez	a2, 1b			# still bits left to text?
+	 srlv	a3, a3, a2		# shrink mask in half
+#else
+	andi	v1, a0, 0xffff		# narrow focus to low 16 bits of 32 left
+	bnez	v1, 2f			# any of the lower 16 bits set?
+	 nop
+	addiu	v0, 16			# nope, then bit must be in the upper 16
+	srl	a0, 16			# discard low 16 bits
+2:
+	andi	v1, a0, 0xff		# narrow focus to low 8 bits of 16 left
+	bnez	v1, 3f			# any of the lower 8 bits set?
+	 nop
+	addiu	v0, 8			# nope, then bit must be in the upper 8
+	srl	a0, 8			# discard low 8 bits
+3:
+	andi	v1, a0, 0xf		# narrow focus to low 4 bits of 8 left
+	bnez	v1, 4f			# any of the lower 4 bits set?
+	 nop
+	addiu	v0, 4			# nope, then bit must be in the upper 4
+	srl	a0, 4			# discard low 4 bits
+4:
+	andi	v1, a0, 0x3		# narrow focus to low 2 bits of 4 left
+	bnez	v1, 5f			# any of the lower 2 bits set?
+	 nop
+	addiu	v0, 2			# nope, then bit must be in the upper 2
+	srl	a0, 2			# discard low 2 bits
+5:
+	andi	v1, a0, 0x1
+	bnez	v1, 6f
+	 nop
+	addiu	v0, 1			# nop, then first must be in bit 1
+#endif
+6:
 	j	ra
+	 nop
 END(ffs)
+#endif /* __mips == 64 || __mips == 32 */

Index: src/common/lib/libc/hash/sha2/sha2.c
diff -u src/common/lib/libc/hash/sha2/sha2.c:1.7.14.1 src/common/lib/libc/hash/sha2/sha2.c:1.7.14.1.2.1
--- src/common/lib/libc/hash/sha2/sha2.c:1.7.14.1	Tue Jul 14 19:35:22 2009
+++ src/common/lib/libc/hash/sha2/sha2.c	Wed Apr 21 05:17:12 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: sha2.c,v 1.7.14.1 2009/07/14 19:35:22 snj Exp $ */
+/* $NetBSD: sha2.c,v 1.7.14.1.2.1 2010/04/21 05:17:12 matt Exp $ */
 /*	$KAME: sha2.c,v 1.9 2003/07/20 00:28:38 itojun Exp $	*/
 
 /*
@@ -43,7 +43,7 @@
 #include <sys/cdefs.h>
 
 #if defined(_KERNEL) || defined(_STANDALONE)
-__KERNEL_RCSID(0, "$NetBSD: sha2.c,v 1.7.14.1 2009/07/14 19:35:22 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sha2.c,v 1.7.14.1.2.1 2010/04/21 05:17:12 matt Exp $");
 
 #include <sys/param.h>	/* XXX: to pull <machine/macros.h> for vax memset(9) */
 #include <lib/libkern/libkern.h>
@@ -51,7 +51,7 @@
 #else
 
 #if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: sha2.c,v 1.7.14.1 2009/07/14 19:35:22 snj Exp $");
+__RCSID("$NetBSD: sha2.c,v 1.7.14.1.2.1 2010/04/21 05:17:12 matt Exp $");
 #endif /* LIBC_SCCS and not lint */
 
 #include "namespace.h"
@@ -553,7 +553,6 @@
 static int
 SHA224_256_Final(uint8_t digest[], SHA256_CTX *context, size_t len)
 {
-	uint32_t	*d = (void *)digest;
 	unsigned int	usedspace;
 	size_t i;
 
@@ -601,7 +600,7 @@
 		SHA256_Transform(context, (uint32_t *)(void *)context->buffer);
 
 		for (i = 0; i < len / 4; i++)
-			d[i] = htobe32(context->state[i]);
+			be32enc(digest + 4 * i, context->state[i]);
 	}
 
 	/* Clean up state data: */
@@ -941,7 +940,6 @@
 int
 SHA512_Final(uint8_t digest[], SHA512_CTX *context)
 {
-	uint64_t	*d = (void *)digest;
 	size_t i;
 
 	/* If no digest buffer is passed, we don't bother doing this: */
@@ -950,7 +948,7 @@
 
 		/* Save the hash data for output: */
 		for (i = 0; i < 8; ++i)
-			d[i] = htobe64(context->state[i]);
+			be64enc(digest + 8 * i, context->state[i]);
 	}
 
 	/* Zero out state data */
@@ -989,7 +987,6 @@
 int
 SHA384_Final(uint8_t digest[], SHA384_CTX *context)
 {
-	uint64_t	*d = (void *)digest;
 	size_t i;
 
 	/* If no digest buffer is passed, we don't bother doing this: */
@@ -998,7 +995,7 @@
 
 		/* Save the hash data for output: */
 		for (i = 0; i < 6; ++i)
-			d[i] = be64toh(context->state[i]);
+			be64enc(digest + 8 * i, context->state[i]);
 	}
 
 	/* Zero out state data */

Reply via email to