src/share/vm/utilities/bitMap.inline.hpp
Print this page
@@ -48,10 +48,28 @@
inline void BitMap::clear_bit(idx_t bit) {
verify_index(bit);
*word_addr(bit) &= ~bit_mask(bit);
}
+inline bool BitMap::set_bit_with_result(idx_t bit) {
+ verify_index(bit);
+ bm_word_t* addr = word_addr(bit);
+ bm_word_t old_val = *addr;
+ bm_word_t new_val = old_val | bit_mask(bit);
+ *addr = new_val;
+ return (old_val != new_val);
+}
+
+inline bool BitMap::clear_bit_with_result(idx_t bit) {
+ verify_index(bit);
+ bm_word_t* addr = word_addr(bit);
+ bm_word_t old_val = *addr;
+ bm_word_t new_val = old_val & ~bit_mask(bit);
+ *addr = new_val;
+ return (old_val != new_val);
+}
+
inline bool BitMap::par_set_bit(idx_t bit) {
verify_index(bit);
volatile bm_word_t* const addr = word_addr(bit);
const bm_word_t mask = bit_mask(bit);
bm_word_t old_val = *addr;