OSDN Git Service

* allgmem.c: Do not include config.h anymore.
[pf3gnuchains/gcc-fork.git] / libchill / andps.c
1 /* Implement POWERSET runtime actions for CHILL.
2    Copyright (C) 1992,1993 Free Software Foundation, Inc.
3    Author: Wilfried Moser, et al
4
5 This file is part of GNU CC.
6
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)
10 any later version.
11
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.
16
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.  */
20
21 #define __CHILL_LIB__
22
23 #include <stdio.h>
24 #include "powerset.h"
25
26 /*
27  * function __andpowerset
28  *
29  * parameters:
30  *      out             return from __andpowerset
31  *      left            left powerset
32  *      right           right powerset
33  *      bitlength       length of powerset in bits
34  *
35  * returns:
36  *      void
37  *
38  * exceptions:
39  *  none
40  *
41  * abstract:
42  *  and's two powersets
43  *
44  */
45
46 void
47 __andpowerset (out, left, right, bitlength)
48      SET_WORD      *out;
49      SET_WORD      *left;
50      SET_WORD      *right;
51      unsigned long  bitlength;
52 {
53   if (bitlength <= SET_CHAR_SIZE)
54     {
55       *((SET_CHAR *)out) = *((SET_CHAR *)left) &
56                            *((SET_CHAR *)right);
57       MASK_UNUSED_CHAR_BITS((SET_CHAR *)out, bitlength);
58     }
59   else if (bitlength <= SET_SHORT_SIZE)
60     {
61       *((SET_SHORT *)out) = *((SET_SHORT *)left) &
62                             *((SET_SHORT *)right);
63       MASK_UNUSED_SHORT_BITS((SET_SHORT *)out, bitlength);
64     }
65   else
66     {
67       unsigned long len = BITS_TO_WORDS (bitlength);
68       register unsigned long i;
69     
70       for (i = 0; i < len; i++)
71         out[i] = left[i] & right[i];
72       MASK_UNUSED_WORD_BITS ((out + len - 1), 
73                              bitlength % SET_WORD_SIZE);
74     }
75 }