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