1*74a4d8c2SCharles.Forsyth #include "cc.h" 2*74a4d8c2SCharles.Forsyth 3*74a4d8c2SCharles.Forsyth Bits bor(Bits a,Bits b)4*74a4d8c2SCharles.Forsythbor(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.Forsythband(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.Forsythbany(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.Forsythbeq(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.Forsythbnum(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.Forsythblsh(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.Forsythbset(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