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 */