Use `bits.len` instead of `wordsFor`

f82c0aaaf6f32c2699ad5cca638bef285acd17291bf190ea3c5203b6da6b075a
Alexis Sellier committed ago 1 parent 087bce36
lib/std/lang/gen/bitset.rad +11 -12
90 90
}
91 91
92 92
/// Count the number of set bits.
93 93
pub fn count(bs: *Bitset) -> u32 {
94 94
    let mut total: u32 = 0;
95 -
    let numWords = wordsFor(bs.len);
95 +
    let numWords = bs.bits.len;
96 96
    for i in 0..numWords {
97 97
        total += popCount(bs.bits[i]);
98 98
    }
99 99
    return total;
100 100
}
111 111
    return n & 0x3F;
112 112
}
113 113
114 114
/// Union: `dst = dst | src`.
115 115
pub fn union_(dst: *mut Bitset, src: *Bitset) {
116 -
    let numWords = wordsFor(dst.len);
117 -
    let srcWords = wordsFor(src.len);
116 +
    let numWords = dst.bits.len;
117 +
    let srcWords = src.bits.len;
118 118
    let minWords = min(numWords, srcWords);
119 119
    for i in 0..minWords {
120 120
        dst.bits[i] |= src.bits[i];
121 121
    }
122 122
}
123 123
124 124
/// Subtract: `dst = dst - src`.
125 125
pub fn subtract(dst: *mut Bitset, src: *Bitset) {
126 -
    let numWords = wordsFor(dst.len);
127 -
    let srcWords = wordsFor(src.len);
126 +
    let numWords = dst.bits.len;
127 +
    let srcWords = src.bits.len;
128 128
    let minWords = min(numWords, srcWords);
129 129
    for i in 0..minWords {
130 130
        dst.bits[i] &= ~src.bits[i];
131 131
    }
132 132
}
133 133
134 134
/// Check if two bitsets are equal.
135 135
pub fn eq(a: *Bitset, b: *Bitset) -> bool {
136 -
    let numWordsA = wordsFor(a.len);
137 -
    let numWordsB = wordsFor(b.len);
136 +
    let numWordsA = a.bits.len;
137 +
    let numWordsB = b.bits.len;
138 138
    let maxWords = max(numWordsA, numWordsB);
139 139
140 140
    for i in 0..maxWords {
141 141
        let wordA = a.bits[i] if i < numWordsA else 0;
142 142
        let wordB = b.bits[i] if i < numWordsB else 0;
147 147
    return true;
148 148
}
149 149
150 150
/// Copy bits from source to destination.
151 151
pub fn copy(dst: *mut Bitset, src: *Bitset) {
152 -
    let numWords = wordsFor(dst.len);
153 -
    let srcWords = wordsFor(src.len);
152 +
    let numWords = dst.bits.len;
153 +
    let srcWords = src.bits.len;
154 154
    let minWords = min(numWords, srcWords);
155 155
156 156
    for i in 0..minWords {
157 157
        dst.bits[i] = src.bits[i];
158 158
    }
162 162
    }
163 163
}
164 164
165 165
/// Clear all bits.
166 166
pub fn clearAll(bs: *mut Bitset) {
167 -
    let numWords = wordsFor(bs.len);
167 +
    let numWords = bs.bits.len;
168 168
    for i in 0..numWords {
169 169
        bs.bits[i] = 0;
170 170
    }
171 171
}
172 172
186 186
    return BitIter { bs, wordIdx: 0, remaining };
187 187
}
188 188
189 189
/// Get the next set bit, or nil if none remain.
190 190
pub fn iterNext(it: *mut BitIter) -> ?u32 {
191 -
    let numWords = wordsFor(it.bs.len);
192 -
191 +
    let numWords = it.bs.bits.len;
193 192
    // Skip to next non-zero word.
194 193
    while it.remaining == 0 {
195 194
        it.wordIdx += 1;
196 195
        if it.wordIdx >= numWords {
197 196
            return nil;
lib/std/lang/gen/regalloc/liveness.rad +1 -1
146 146
    dst: *mut bitset::Bitset,
147 147
    liveOut: *bitset::Bitset,
148 148
    defs: *bitset::Bitset,
149 149
    uses: *bitset::Bitset
150 150
) -> bool {
151 -
    let numWords = bitset::wordsFor(dst.len);
151 +
    let numWords = dst.bits.len;
152 152
    let mut changed = false;
153 153
    for i in 0..numWords {
154 154
        let newWord = uses.bits[i] | (liveOut.bits[i] & ~defs.bits[i]);
155 155
        if dst.bits[i] != newWord {
156 156
            dst.bits[i] = newWord;