|
30 | 30 | #include "memory/metadataFactory.hpp"
|
31 | 31 | #include "oops/constantPool.hpp"
|
32 | 32 | #include "oops/symbol.hpp"
|
| 33 | +#include "runtime/atomic.hpp" |
33 | 34 |
|
34 | 35 | inline Symbol* FieldInfo::name(ConstantPool* cp) const {
|
35 | 36 | int index = _name_index;
|
@@ -151,23 +152,11 @@ inline FieldInfoReader& FieldInfoReader::set_position_and_next_index(int positio
|
151 | 152 | }
|
152 | 153 |
|
153 | 154 | inline void FieldStatus::atomic_set_bits(u1& flags, u1 mask) {
|
154 |
| - // Atomically update the flags with the bits given |
155 |
| - u1 old_flags, new_flags, witness; |
156 |
| - do { |
157 |
| - old_flags = flags; |
158 |
| - new_flags = old_flags | mask; |
159 |
| - witness = Atomic::cmpxchg(&flags, old_flags, new_flags); |
160 |
| - } while (witness != old_flags); |
| 155 | + Atomic::fetch_then_or(&flags, mask); |
161 | 156 | }
|
162 | 157 |
|
163 | 158 | inline void FieldStatus::atomic_clear_bits(u1& flags, u1 mask) {
|
164 |
| - // Atomically update the flags with the bits given |
165 |
| - u1 old_flags, new_flags, witness; |
166 |
| - do { |
167 |
| - old_flags = flags; |
168 |
| - new_flags = old_flags & ~mask; |
169 |
| - witness = Atomic::cmpxchg(&flags, old_flags, new_flags); |
170 |
| - } while (witness != old_flags); |
| 159 | + Atomic::fetch_then_and(&flags, (u1)(~mask)); |
171 | 160 | }
|
172 | 161 |
|
173 | 162 | inline void FieldStatus::update_flag(FieldStatusBitPosition pos, bool z) {
|
|
0 commit comments