3231 while (beg_bit < range_end) { |
3231 while (beg_bit < range_end) { |
3232 const size_t new_block = beg_bit >> Log2BitsPerBlock; |
3232 const size_t new_block = beg_bit >> Log2BitsPerBlock; |
3233 if (new_block != cur_block) { |
3233 if (new_block != cur_block) { |
3234 cur_block = new_block; |
3234 cur_block = new_block; |
3235 sd.block(cur_block)->set_offset(bitmap->bits_to_words(live_bits)); |
3235 sd.block(cur_block)->set_offset(bitmap->bits_to_words(live_bits)); |
|
3236 |
|
3237 #ifdef MIPS64 |
|
3238 /* 2016/5/4 Jin: On 3A2000-B, when multiple threads write to |
|
3239 the same memory location without explict synchronization, |
|
3240 sync is required for access correctness. */ |
|
3241 OrderAccess::fence(); |
|
3242 #endif |
3236 } |
3243 } |
3237 |
3244 |
3238 const size_t end_bit = bitmap->find_obj_end(beg_bit, range_end); |
3245 const size_t end_bit = bitmap->find_obj_end(beg_bit, range_end); |
3239 if (end_bit < range_end - 1) { |
3246 if (end_bit < range_end - 1) { |
3240 live_bits += end_bit - beg_bit + 1; |
3247 live_bits += end_bit - beg_bit + 1; |