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