Tue Jul 21 16:10:48 2009 UTC ()
Add explicit casts to make lint happy.


(joerg)
diff -r1.1 -r1.2 src/common/lib/libc/string/popcount64.c

cvs diff -r1.1 -r1.2 src/common/lib/libc/string/popcount64.c (expand / switch to unified diff)

--- src/common/lib/libc/string/popcount64.c 2009/07/21 14:55:32 1.1
+++ src/common/lib/libc/string/popcount64.c 2009/07/21 16:10:48 1.2
@@ -1,14 +1,14 @@ @@ -1,14 +1,14 @@
1/* $NetBSD: popcount64.c,v 1.1 2009/07/21 14:55:32 joerg Exp $ */ 1/* $NetBSD: popcount64.c,v 1.2 2009/07/21 16:10:48 joerg Exp $ */
2/*- 2/*-
3 * Copyright (c) 2009 The NetBSD Foundation, Inc. 3 * Copyright (c) 2009 The NetBSD Foundation, Inc.
4 * All rights reserved. 4 * All rights reserved.
5 * 5 *
6 * This code is derived from software contributed to The NetBSD Foundation 6 * This code is derived from software contributed to The NetBSD Foundation
7 * by Joerg Sonnenberger. 7 * by Joerg Sonnenberger.
8 * 8 *
9 * Redistribution and use in source and binary forms, with or without 9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions 10 * modification, are permitted provided that the following conditions
11 * are met: 11 * are met:
12 * 12 *
13 * 1. Redistributions of source code must retain the above copyright 13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer. 14 * notice, this list of conditions and the following disclaimer.
@@ -22,49 +22,50 @@ @@ -22,49 +22,50 @@
22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 23 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
24 * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 24 * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
25 * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, 25 * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
26 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 26 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
27 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 27 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
28 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 28 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
29 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 29 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
30 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 30 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE. 31 * SUCH DAMAGE.
32 */ 32 */
33 33
34#include <sys/cdefs.h> 34#include <sys/cdefs.h>
35__RCSID("$NetBSD: popcount64.c,v 1.1 2009/07/21 14:55:32 joerg Exp $"); 35__RCSID("$NetBSD: popcount64.c,v 1.2 2009/07/21 16:10:48 joerg Exp $");
36 36
37#if !defined(_KERNEL) && !defined(_STANDALONE) 37#if !defined(_KERNEL) && !defined(_STANDALONE)
38#include <limits.h> 38#include <limits.h>
39#include <strings.h> 39#include <strings.h>
40#else 40#else
41#include <lib/libkern/libkern.h> 41#include <lib/libkern/libkern.h>
42#include <machine/limits.h> 42#include <machine/limits.h>
43#endif 43#endif
44 44
45/* 45/*
46 * If uint64_t is larger than size_t, the follow assumes that 46 * If uint64_t is larger than size_t, the follow assumes that
47 * splitting into 32bit halfes is faster. 47 * splitting into 32bit halfes is faster.
48 * 48 *
49 * The native pocount64 version is based on the same ideas as popcount64(3), 49 * The native pocount64 version is based on the same ideas as popcount64(3),
50 * see popcount64.c for comments. 50 * see popcount64.c for comments.
51 */ 51 */
52 52
53#if SIZE_MAX < 0xffffffffffffffffULL 53#if SIZE_MAX < 0xffffffffffffffffULL
54unsigned int 54unsigned int
55popcount64(uint64_t v) 55popcount64(uint64_t v)
56{ 56{
57 return popcount32(v >> 32) + popcount32(v & 0xffffffffU); 57 return popcount32((uint32_t)(v >> 32)) +
 58 popcount32((uint32_t)(v & 0xffffffffU));
58} 59}
59#else 60#else
60unsigned int 61unsigned int
61popcount64(uint64_t v) 62popcount64(uint64_t v)
62{ 63{
63 unsigned int c; 64 unsigned int c;
64 65
65 v = v - ((v >> 1) & 0x5555555555555555ULL); 66 v = v - ((v >> 1) & 0x5555555555555555ULL);
66 v = (v & 0x3333333333333333ULL) + ((v >> 2) & 0x3333333333333333ULL); 67 v = (v & 0x3333333333333333ULL) + ((v >> 2) & 0x3333333333333333ULL);
67 v = ((v + (v >> 4)) & 0x0f0f0f0f0f0f0f0fULL) * 0x0101010101010101ULL; 68 v = ((v + (v >> 4)) & 0x0f0f0f0f0f0f0f0fULL) * 0x0101010101010101ULL;
68 c = v >> 56; 69 c = v >> 56;
69 70
70 return c; 71 return c;