108 intptr_t mr = (intptr_t)inverted_bit_mask_for_range(beg, end); |
108 intptr_t mr = (intptr_t)inverted_bit_mask_for_range(beg, end); |
109 intptr_t nw = value ? (w | ~mr) : (w & mr); |
109 intptr_t nw = value ? (w | ~mr) : (w & mr); |
110 while (true) { |
110 while (true) { |
111 intptr_t res = Atomic::cmpxchg_ptr(nw, pw, w); |
111 intptr_t res = Atomic::cmpxchg_ptr(nw, pw, w); |
112 if (res == w) break; |
112 if (res == w) break; |
113 w = *pw; |
113 w = res; |
114 nw = value ? (w | ~mr) : (w & mr); |
114 nw = value ? (w | ~mr) : (w & mr); |
115 } |
115 } |
116 } |
116 } |
117 } |
117 } |
118 |
118 |