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