1 /* Implement POWERSET runtime actions for CHILL.
2 Copyright (C) 1992,1993 Free Software Foundation, Inc.
3 Author: Wilfried Moser, et al
5 This file is part of GNU CC.
7 GNU CC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
12 GNU CC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GNU CC; see the file COPYING. If not, write to
19 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
28 * function __cardpowerset
32 * bitlength length of powerset
35 * long number of set bits
41 * returns the number of set bit's in a powerset
45 /* bit_count[I] is number of '1' bits in I. */
47 const unsigned char __four_bit_count[16] = {
54 __cardpowerset (ps, bitlength)
56 unsigned long bitlength;
58 unsigned long count = 0;
59 if (bitlength <= SET_CHAR_SIZE)
61 register SET_CHAR c = *((SET_CHAR *)ps);
62 /* count 4 bits at a time. */
65 count += __four_bit_count[c & 15];
70 else if (bitlength <= SET_SHORT_SIZE)
72 register SET_SHORT c = *((SET_SHORT *)ps);
73 /* count 4 bits at a time. */
76 count += __four_bit_count[c & 15];
83 register SET_WORD *p = ps;
84 SET_WORD *endp = p + BITS_TO_WORDS(bitlength);
88 register SET_WORD c = *p++;
89 /* count 4 bits at a time. */
92 count += __four_bit_count[c & 15];