OSDN Git Service

* Chill runtime moved into toplevel libchill.
[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 "config.h"
24 #include <stdio.h>
25 #include "powerset.h"
26
27 /*
28  * function __andpowerset
29  *
30  * parameters:
31  *      out             return from __andpowerset
32  *      left            left powerset
33  *      right           right powerset
34  *      bitlength       length of powerset in bits
35  *
36  * returns:
37  *      void
38  *
39  * exceptions:
40  *  none
41  *
42  * abstract:
43  *  and's two powersets
44  *
45  */
46
47 void
48 __andpowerset (out, left, right, bitlength)
49      SET_WORD      *out;
50      SET_WORD      *left;
51      SET_WORD      *right;
52      unsigned long  bitlength;
53 {
54   if (bitlength <= SET_CHAR_SIZE)
55     {
56       *((SET_CHAR *)out) = *((SET_CHAR *)left) &
57                            *((SET_CHAR *)right);
58       MASK_UNUSED_CHAR_BITS((SET_CHAR *)out, bitlength);
59     }
60   else if (bitlength <= SET_SHORT_SIZE)
61     {
62       *((SET_SHORT *)out) = *((SET_SHORT *)left) &
63                             *((SET_SHORT *)right);
64       MASK_UNUSED_SHORT_BITS((SET_SHORT *)out, bitlength);
65     }
66   else
67     {
68       unsigned long len = BITS_TO_WORDS (bitlength);
69       register unsigned long i;
70     
71       for (i = 0; i < len; i++)
72         out[i] = left[i] & right[i];
73       MASK_UNUSED_WORD_BITS ((out + len - 1), 
74                              bitlength % SET_WORD_SIZE);
75     }
76 }