comparison src/share/vm/utilities/bitMap.cpp @ 5988:2a0172480595

7127697: G1: remove dead code after recent concurrent mark changes Summary: Removed lots of dead code after some recent conc mark changes. Reviewed-by: brutisso, johnc
author tonyp
date Thu, 05 Apr 2012 13:57:23 -0400
parents f08d439fab8c
children d2a62e0f25eb
comparison
equal deleted inserted replaced
5987:748051fd24ce 5988:2a0172480595
1 /* 1 /*
2 * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. 2 * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 * 4 *
5 * This code is free software; you can redistribute it and/or modify it 5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as 6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
177 clear_range_within_word(beg, bit_index(beg_full_word)); 177 clear_range_within_word(beg, bit_index(beg_full_word));
178 clear_large_range_of_words(beg_full_word, end_full_word); 178 clear_large_range_of_words(beg_full_word, end_full_word);
179 clear_range_within_word(bit_index(end_full_word), end); 179 clear_range_within_word(bit_index(end_full_word), end);
180 } 180 }
181 181
182 void BitMap::mostly_disjoint_range_union(BitMap* from_bitmap,
183 idx_t from_start_index,
184 idx_t to_start_index,
185 size_t word_num) {
186 // Ensure that the parameters are correct.
187 // These shouldn't be that expensive to check, hence I left them as
188 // guarantees.
189 guarantee(from_bitmap->bit_in_word(from_start_index) == 0,
190 "it should be aligned on a word boundary");
191 guarantee(bit_in_word(to_start_index) == 0,
192 "it should be aligned on a word boundary");
193 guarantee(word_num >= 2, "word_num should be at least 2");
194
195 intptr_t* from = (intptr_t*) from_bitmap->word_addr(from_start_index);
196 intptr_t* to = (intptr_t*) word_addr(to_start_index);
197
198 if (*from != 0) {
199 // if it's 0, then there's no point in doing the CAS
200 while (true) {
201 intptr_t old_value = *to;
202 intptr_t new_value = old_value | *from;
203 intptr_t res = Atomic::cmpxchg_ptr(new_value, to, old_value);
204 if (res == old_value) break;
205 }
206 }
207 ++from;
208 ++to;
209
210 for (size_t i = 0; i < word_num - 2; ++i) {
211 if (*from != 0) {
212 // if it's 0, then there's no point in doing the CAS
213 assert(*to == 0, "nobody else should be writing here");
214 intptr_t new_value = *from;
215 *to = new_value;
216 }
217
218 ++from;
219 ++to;
220 }
221
222 if (*from != 0) {
223 // if it's 0, then there's no point in doing the CAS
224 while (true) {
225 intptr_t old_value = *to;
226 intptr_t new_value = old_value | *from;
227 intptr_t res = Atomic::cmpxchg_ptr(new_value, to, old_value);
228 if (res == old_value) break;
229 }
230 }
231
232 // the -1 is because we didn't advance them after the final CAS
233 assert(from ==
234 (intptr_t*) from_bitmap->word_addr(from_start_index) + word_num - 1,
235 "invariant");
236 assert(to == (intptr_t*) word_addr(to_start_index) + word_num - 1,
237 "invariant");
238 }
239
240 void BitMap::at_put(idx_t offset, bool value) { 182 void BitMap::at_put(idx_t offset, bool value) {
241 if (value) { 183 if (value) {
242 set_bit(offset); 184 set_bit(offset);
243 } else { 185 } else {
244 clear_bit(offset); 186 clear_bit(offset);