diff options
Diffstat (limited to 'src/cmd/gc/bits.c')
-rw-r--r-- | src/cmd/gc/bits.c | 34 |
1 files changed, 21 insertions, 13 deletions
diff --git a/src/cmd/gc/bits.c b/src/cmd/gc/bits.c index 2e79f6f1d..fe9a168dc 100644 --- a/src/cmd/gc/bits.c +++ b/src/cmd/gc/bits.c @@ -95,11 +95,11 @@ int bnum(Bits a) { int i; - int32 b; + uint64 b; for(i=0; i<BITS; i++) if(b = a.b[i]) - return 32*i + bitno(b); + return 64*i + bitno(b); fatal("bad in bnum"); return 0; } @@ -110,27 +110,35 @@ blsh(uint n) Bits c; c = zbits; - c.b[n/32] = 1L << (n%32); + c.b[n/64] = 1LL << (n%64); return c; } -/* int -bset(Bits a, uint n) +btest(Bits *a, uint n) { - if(a.b[n/32] & (1L << (n%32))) - return 1; - return 0; + return (a->b[n/64] & (1LL << (n%64))) != 0; +} + +void +biset(Bits *a, uint n) +{ + a->b[n/64] |= 1LL << (n%64); +} + +void +biclr(Bits *a, uint n) +{ + a->b[n/64] &= ~(1LL << (n%64)); } -*/ int -bitno(int32 b) +bitno(uint64 b) { int i; - for(i=0; i<32; i++) - if(b & (1L<<i)) + for(i=0; i<64; i++) + if(b & (1LL<<i)) return i; fatal("bad in bitno"); return 0; @@ -157,7 +165,7 @@ Qconv(Fmt *fp) if(var[i].offset != 0) fmtprint(fp, "%+lld", (vlong)var[i].offset); } - bits.b[i/32] &= ~(1L << (i%32)); + biclr(&bits, i); } return 0; } |