xref: /plan9/sys/src/cmd/cc/bits.c (revision 7dd7cddf99dd7472612f1413b4da293630e6b1bc)
1*7dd7cddfSDavid du Colombier #include	"cc.h"
2*7dd7cddfSDavid du Colombier 
3*7dd7cddfSDavid du Colombier Bits
bor(Bits a,Bits b)4*7dd7cddfSDavid du Colombier bor(Bits a, Bits b)
5*7dd7cddfSDavid du Colombier {
6*7dd7cddfSDavid du Colombier 	Bits c;
7*7dd7cddfSDavid du Colombier 	int i;
8*7dd7cddfSDavid du Colombier 
9*7dd7cddfSDavid du Colombier 	for(i=0; i<BITS; i++)
10*7dd7cddfSDavid du Colombier 		c.b[i] = a.b[i] | b.b[i];
11*7dd7cddfSDavid du Colombier 	return c;
12*7dd7cddfSDavid du Colombier }
13*7dd7cddfSDavid du Colombier 
14*7dd7cddfSDavid du Colombier Bits
band(Bits a,Bits b)15*7dd7cddfSDavid du Colombier band(Bits a, Bits b)
16*7dd7cddfSDavid du Colombier {
17*7dd7cddfSDavid du Colombier 	Bits c;
18*7dd7cddfSDavid du Colombier 	int i;
19*7dd7cddfSDavid du Colombier 
20*7dd7cddfSDavid du Colombier 	for(i=0; i<BITS; i++)
21*7dd7cddfSDavid du Colombier 		c.b[i] = a.b[i] & b.b[i];
22*7dd7cddfSDavid du Colombier 	return c;
23*7dd7cddfSDavid du Colombier }
24*7dd7cddfSDavid du Colombier 
25*7dd7cddfSDavid du Colombier /*
26*7dd7cddfSDavid du Colombier Bits
27*7dd7cddfSDavid du Colombier bnot(Bits a)
28*7dd7cddfSDavid du Colombier {
29*7dd7cddfSDavid du Colombier 	Bits c;
30*7dd7cddfSDavid du Colombier 	int i;
31*7dd7cddfSDavid du Colombier 
32*7dd7cddfSDavid du Colombier 	for(i=0; i<BITS; i++)
33*7dd7cddfSDavid du Colombier 		c.b[i] = ~a.b[i];
34*7dd7cddfSDavid du Colombier 	return c;
35*7dd7cddfSDavid du Colombier }
36*7dd7cddfSDavid du Colombier */
37*7dd7cddfSDavid du Colombier 
38*7dd7cddfSDavid du Colombier int
bany(Bits * a)39*7dd7cddfSDavid du Colombier bany(Bits *a)
40*7dd7cddfSDavid du Colombier {
41*7dd7cddfSDavid du Colombier 	int i;
42*7dd7cddfSDavid du Colombier 
43*7dd7cddfSDavid du Colombier 	for(i=0; i<BITS; i++)
44*7dd7cddfSDavid du Colombier 		if(a->b[i])
45*7dd7cddfSDavid du Colombier 			return 1;
46*7dd7cddfSDavid du Colombier 	return 0;
47*7dd7cddfSDavid du Colombier }
48*7dd7cddfSDavid du Colombier 
49*7dd7cddfSDavid du Colombier int
beq(Bits a,Bits b)50*7dd7cddfSDavid du Colombier beq(Bits a, Bits b)
51*7dd7cddfSDavid du Colombier {
52*7dd7cddfSDavid du Colombier 	int i;
53*7dd7cddfSDavid du Colombier 
54*7dd7cddfSDavid du Colombier 	for(i=0; i<BITS; i++)
55*7dd7cddfSDavid du Colombier 		if(a.b[i] != b.b[i])
56*7dd7cddfSDavid du Colombier 			return 0;
57*7dd7cddfSDavid du Colombier 	return 1;
58*7dd7cddfSDavid du Colombier }
59*7dd7cddfSDavid du Colombier 
60*7dd7cddfSDavid du Colombier int
bnum(Bits a)61*7dd7cddfSDavid du Colombier bnum(Bits a)
62*7dd7cddfSDavid du Colombier {
63*7dd7cddfSDavid du Colombier 	int i;
64*7dd7cddfSDavid du Colombier 	long b;
65*7dd7cddfSDavid du Colombier 
66*7dd7cddfSDavid du Colombier 	for(i=0; i<BITS; i++)
67*7dd7cddfSDavid du Colombier 		if(b = a.b[i])
68*7dd7cddfSDavid du Colombier 			return 32*i + bitno(b);
69*7dd7cddfSDavid du Colombier 	diag(Z, "bad in bnum");
70*7dd7cddfSDavid du Colombier 	return 0;
71*7dd7cddfSDavid du Colombier }
72*7dd7cddfSDavid du Colombier 
73*7dd7cddfSDavid du Colombier Bits
blsh(uint n)74*7dd7cddfSDavid du Colombier blsh(uint n)
75*7dd7cddfSDavid du Colombier {
76*7dd7cddfSDavid du Colombier 	Bits c;
77*7dd7cddfSDavid du Colombier 
78*7dd7cddfSDavid du Colombier 	c = zbits;
79*7dd7cddfSDavid du Colombier 	c.b[n/32] = 1L << (n%32);
80*7dd7cddfSDavid du Colombier 	return c;
81*7dd7cddfSDavid du Colombier }
82*7dd7cddfSDavid du Colombier 
83*7dd7cddfSDavid du Colombier int
bset(Bits a,uint n)84*7dd7cddfSDavid du Colombier bset(Bits a, uint n)
85*7dd7cddfSDavid du Colombier {
86*7dd7cddfSDavid du Colombier 	if(a.b[n/32] & (1L << (n%32)))
87*7dd7cddfSDavid du Colombier 		return 1;
88*7dd7cddfSDavid du Colombier 	return 0;
89*7dd7cddfSDavid du Colombier }
90